Auszumachen ist die für ein Industrieunternehmen typische fünf Tage Woche. Mitunter, beispielsweise im Mai, Juli, oder Ende Dezember, lassen sich abweichende Strukturen ausmachen. Diese wollen wir zunächst ergründen, erklären und dann in der Prognose für das Jahr 2017 berücksichtigen.
Zunächst werden die Daten als Time Series aus der Datenbank eingelesen (siehe folgende Abbildung) und in einen Data Frame umgewandelt. Gleichzeitig werden die Stromverbrauchswerte mit dem Namen ‚Values‘ versehen. Die zweite Komponente plottet die Daten.
Jedem Verbrauchswert ordnen wir den entsprechenden Monat, den Wochentag und die Stunde im Tagesverlauf zu. Zur genaueren Analyse der zugrundeliegenden Zeitangaben wählen wir eine Darstellung mittels Sinus und Cosinus. Diese ermöglicht es, zyklische Abhängigkeiten zwischen den jeweiligen Zeitangaben gezielt zu berücksichtigen. Außerdem entscheiden wir für jeden Wert, ob dieser auf ein Wochenende, einen Feiertag oder einen Tag der Schulferien fällt. Der so generierte Datensatz bildet die Grundlage zur Entwicklung eines Modells zur Vorhersage des Stromverbrauchs für den 25. Mai 2017.
Der oben generierte Data Frame wird zunächst um die zyklische Darstellung der Zeitangaben erweitert (Circular Representation of Time Components). Anschließend wird die Information hinzugefügt, ob ein Verbrauchswert auf ein Wochenende fällt (Weekend). Die drei weiteren Komponenten entscheiden, ob ein Wert auf einen Tag der Schulferien, einen Feiertag, oder sowohl auf ein Wochenende als auch einen Feiertag fällt. Diese drei Komponenten können für beliebige geographische Regionen verwendet werden, unter jeweils spezifischen Inputs. Für unser Unternehmen aus der Schweiz wählen wir beispielsweise “country = CH, province = AG, state = None, year = 2016”.
Neben der Regression der Verbrauchswerte ist für das zugrundeliegende Unternehmen vor allem von Interesse, wie gut das Modell den Lastgang abbildet. Die Güte des Modells analysieren wir dabei mit dem R²-Wert. Außerdem lassen wir die Koeffizienten der Einflussvariablen ausgeben, um einen Eindruck zu bekommen, welche dieser Faktoren einen besonders starken Einfluss auf den Stromverbrauch haben.
Die aufbereiteten Daten werden zunächst für die Regression vorbereitet (‚Train, Test, Split‘). Hierzu werden die Daten in Trainings- und Testdaten aufgeteilt. Als Zielvariable (label) der Regression übergeben wir die Spalte ‘Values’. 20 Prozent der Daten (test_size = 0.2) wählen wir als Testdaten, auf den übrigen 80 Prozent wird das Modell trainiert. Dieses Trainieren erfolgt im nächsten Schritt (‚Linear Regression – Trained Model‘). Im oberen Strang des Workflows werden auf dem trainierten Modell daraufhin Vorhersagewerte generiert (‚Predit Sklearn Trained Model‘). Vereinzelt kann die Regression negative Werte prognostizieren. Da dies inhaltlich keinen Sinn macht, setzen wir diese Werte auf Null (‚Negative to Zero‘). Schließlich werden die vorhergesagten Werte zusammen mit den Testdaten visualisiert. Die unteren beiden Komponenten generieren die Koeffizienten (‚Linear Regression – Coefficients‘) und den R²-Wert (‚Linear Regression – Goodness of Fit‘) der Linearen Regression.
In einem zweiten Schritt übergeben wir den aufbereiteten Datensatz aus dem Jahr 2016 an einen Random Forest Algorithmus. Die Güte des Modells analysieren wir abermals mit dem R²-Wert. Zudem lassen wir den prozentualen Einfluss der Einflussvariablen in absteigender Reihenfolge ausgeben.
Die Komponenten haben die gleichen Funktionalitäten wie bei der Linearen Regression. Während zuvor jedoch die Koeffizienten der Einflussvariablen selber ausgegeben wurden, liefert der Random Forest gezielte Informationen darüber, wie stark deren Einfluss auf die Zielvariable, den Stromverbrauch, ist.
Der Wochentag hat den mit Abstand größten Einfluss auf den Stromverbrauch. Aber auch Wochenende, Schulferien und Feiertage zeigen signifikante Einflüsse, die bei einer Vorhersage zu berücksichtigen sind. Der R²-Wert liegt nun bei 0.96, konnte somit durch Übergang von der Linearen Regression auf den Random Forest noch deutlich verbessert werden. Der Random Forest ist also eine geeignete Grundlage für den Blick in die Zukunft.
Zoomen wir in der Visualisierung des Lastgangs aus dem Jahr 2016 auf die Woche rund um den 25. Mai, so erhalten wir einen gewohnten Anblick. Eine fünf Tage Woche mit gleichbleibender Struktur, umrahmt von Wochenenden mit niedrigerem Verbrauch.
Für die Vorhersage, basierend auf dem Random Forest Algorithmus, generieren wir zunächst einen Datensatz für das Jahr 2017, in dem wiederum Abhängigkeiten von Wochentag, Uhrzeit, Feiertag und Schulferien integriert sind. Nun verwenden wir den Random Forest Algorithmus, trainiert auf den Daten des Jahres 2016, zur Vorhersage auf den Daten des Jahres 2017.
Der Random Forest Algorithmus wird wie oben auf den Daten des Jahres 2016 trainiert. Parallel wird in der Komponente “Time Data“ ein Datensatz für 2017 erzeugt, für unser Unternehmen über die Eingabe “country = CH, province = AG, state = None, year = 2017“. Dieser wird dann zur Vorhersage an den Random Forest übergeben.
Beim Blick in den Kalender zeigt sich, dass der 25. Mai 2017 ein Feiertag ist, Christi Himmelfahrt. An diesem Tag standen die Maschinen der Firma still. Am folgenden Freitag wird wieder gearbeitet. Es ist aber davon auszugehen, dass viele Mitarbeiter an diesem Brückentag Urlaub nehmen und das Unternehmen nicht auf voller Auslastung läuft, was zu deutlich geringeren Prognosewerten führt! Der Random Forest Algorithmus hat diesen Sachverhalt erkannt und seine Energieprognose automatisch entsprechend angepasst.