Stell dir vor, du könntest das Wetter von morgen vorhersagen oder den Aktienkurs der nächsten Woche. Klingt nach Science-Fiction, oder? In gewisser Weise ist es das auch – zumindest, wenn man versucht, das wirklich exakt zu tun. Aber es gibt Methoden, mit denen man zumindest Tendenzen erkennen und Wahrscheinlichkeiten berechnen kann. Das Werkzeug dafür ist die Zeitreihenanalyse.
Dabei geht es darum, Daten zu untersuchen, die über die Zeit hinweg gesammelt wurden. Denk an die monatlichen Verkaufszahlen eines Supermarkts, die täglichen Besucherzahlen einer Webseite oder die jährliche Durchschnittstemperatur. Diese Daten haben eines gemeinsam: Sie verändern sich im Laufe der Zeit und diese Veränderung enthält meistens Muster.
Diese Muster zu erkennen und zu verstehen, ist der Schlüssel zur Vorhersage zukünftiger Werte. Wir wollen in diesem Blog-Post zwei leistungsstarke Werkzeuge kennenlernen, die in der Welt der Datenanalyse weit verbreitet sind: ARIMA und Facebook Prophet. Und das Beste daran: Wir werden alles in Python programmieren.
Blick in die Zukunft deiner Daten: Was ist eine Zeitreihe?
Eine Zeitreihe ist eine Sammlung von Datenpunkten, die in chronologischer Reihenfolge aufgezeichnet wurden. Das bedeutet, dass jeder Datenpunkt mit einem bestimmten Zeitpunkt oder Zeitraum verbunden ist.
Die Analyse von Zeitreihen ist in vielen Bereichen nützlich. In der Wirtschaft hilft sie, Konjunkturzyklen zu verstehen oder die Nachfrage nach Produkten vorherzusagen. In der Medizin kann sie verwendet werden, um den Verlauf einer Krankheit zu verfolgen oder die Wirksamkeit einer Behandlung zu bewerten. Und im Umweltbereich hilft sie, Klimaveränderungen zu analysieren oder die Auswirkungen von Umweltverschmutzung zu verstehen.
Die Herausforderung besteht darin, dass Zeitreihen oft komplex und unregelmäßig sind. Sie können Trends aufweisen: langfristige Auf- oder Abwärtsbewegungen. Sie können Saisonalität zeigen: wiederkehrende Muster innerhalb eines bestimmten Zeitraums, wie zum Beispiel monatliche oder jährliche Schwankungen. Und sie können zufällige Schwankungen enthalten, die sich nicht vorhersagen lassen.
Python als Werkzeugkiste für Zeitreihen
Python ist die bevorzugte Programmiersprache für Datenanalysen und das aus gutem Grund: Es bietet eine riesige Auswahl an Bibliotheken und Werkzeugen, die speziell auf die Bedürfnisse von Datenwissenschaftlerinnen und Datenwissenschaftlern zugeschnitten sind. Für die Zeitreihenanalyse gibt es einige besonders wichtige Bibliotheken, von denen wir zwei genauer unter die Lupe nehmen werden: Statsmodels für ARIMA und Prophet von Facebook.
Statsmodels ist eine umfassende Bibliothek für statistische Modellierung und Ökonometrie. Sie bietet eine breite Palette von Funktionen für die Zeitreihenanalyse, einschließlich der Implementierung verschiedener ARIMA-Modelle.
Prophet wurde von Facebook entwickelt und ist speziell für die Vorhersage von Zeitreihen mit starken saisonalen Mustern konzipiert. Es ist besonders gut geeignet für Geschäftsdaten, wie zum Beispiel Verkaufszahlen oder Website-Traffic.
ARIMA: Die statistische Basis
ARIMA steht für AutoRegressive Integrated Moving Average. Klingt kompliziert, ist aber gar nicht so wild. Dieses Modell versucht, die zukünftigen Werte einer Zeitreihe anhand ihrer vergangenen Werte vorherzusagen. Es besteht aus drei Hauptkomponenten:
- AutoRegression (AR): Diese Komponente berücksichtigt die Korrelation zwischen einem Wert und seinen vorherigen Werten. Man könnte sagen, sie „erinnert“ sich an die Vergangenheit.
- Integration (I): Diese Komponente macht die Zeitreihe stationär, das bedeutet, sie entfernt Trends und Saisonalität, so dass die Daten leichter zu analysieren sind. Das geschieht oft durch Differenzbildung, also die Berechnung der Differenz zwischen aufeinanderfolgenden Werten.
- Moving Average (MA): Diese Komponente berücksichtigt die Korrelation zwischen einem Wert und den Residuen (also den Fehlern) der vorherigen Vorhersagen. Sie versucht, das „Rauschen“ in den Daten zu glätten.
Um ein ARIMA-Modell zu erstellen, muss man die passenden Parameter für jede Komponente bestimmen. Diese Parameter werden üblicherweise als (p, d, q) angegeben, wobei:
- p die Ordnung der autoregressiven Komponente ist.
- d die Ordnung der Integration ist.
- q die Ordnung der Moving-Average-Komponente ist.
Die Wahl der richtigen Parameter ist entscheidend für die Genauigkeit der Vorhersage. Es gibt verschiedene Methoden, um die optimalen Parameter zu finden, zum Beispiel die Analyse der Autokorrelations– und Partialautokorrelationsfunktionen (ACF und PACF) der Zeitreihe oder die Verwendung von automatisierten Suchalgorithmen.
Praktisches Beispiel mit Python und Statsmodels:
Nehmen wir an, wir haben eine Zeitreihe von monatlichen Verkaufszahlen eines Online-Shops namens „verkaufszahlen.csv“. Zuerst laden wir die Daten und stellen sicher, dass sie im richtigen Format vorliegen. Dafür verwenden wir typischerweise die Bibliothek Pandas. Dann visualisieren wir die Daten, um einen ersten Eindruck von den Trends und saisonalen Mustern zu bekommen. Das können wir mit Matplotlib oder Seaborn tun.
Damit der folgende Code funktioniert, brauchen wir folgende Module installiert: pandas, matplotlib, statsmodels, scikit-learn
pip install pandas matplotlib statsmodels scikit-learn
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import root_mean_squared_error
# Daten laden
data = pd.read_csv(
"verkaufszahlen.csv",
parse_dates=["Datum"]
)
data = data.set_index("Datum").sort_index()
# Sicherstellen, dass die Zielspalte numerisch ist
data["Verkaufszahlen"] = pd.to_numeric(data["Verkaufszahlen"], errors="coerce")
data = data.dropna(subset=["Verkaufszahlen"])
# Daten visualisieren
plt.plot(data["Verkaufszahlen"])
plt.xlabel("Datum")
plt.ylabel("Verkaufszahlen")
plt.title("Monatliche Verkaufszahlen")
plt.show()
# Mindestens 13 Datenpunkte nötig
if len(data) <= 12:
raise ValueError("Es werden mehr als 12 Datenpunkte benötigt.")
# Daten in Training und Test aufteilen
train_data = data["Verkaufszahlen"].iloc[:-12]
test_data = data["Verkaufszahlen"].iloc[-12:]
# ARIMA-Modell erstellen und trainieren
model = ARIMA(train_data, order=(5, 1, 0))
model_fit = model.fit()
# Vorhersagen erstellen
predictions = model_fit.forecast(steps=len(test_data))
predictions.index = test_data.index
# Ergebnisse visualisieren
plt.plot(test_data, label="Tatsächliche Werte")
plt.plot(predictions, label="Vorhersagen")
plt.xlabel("Datum")
plt.ylabel("Verkaufszahlen")
plt.title("ARIMA Vorhersage")
plt.legend()
plt.show()
# Modell evaluieren
rmse = root_mean_squared_error(test_data, predictions)
print(f"RMSE: {rmse}")
Dieser Code lädt die Daten, teilt sie in Trainings- und Testdaten auf, erstellt ein ARIMA-Modell mit den Parametern (5, 1, 0), trainiert das Modell mit den Trainingsdaten, erstellt Vorhersagen für die Testdaten und visualisiert die Ergebnisse. Schließlich wird der Root Mean Squared Error (RMSE) berechnet, um die Genauigkeit des Modells zu bewerten; auf deutsch heißt dies „Wurzel der mittleren Fehlerquadratsumme“.
Wichtig: Die Parameter (5, 1, 0) sind nur ein Beispiel. Du musst die optimalen Parameter für deine Daten finden.
Facebook Prophet: Der Social-Media-Experte
Prophet ist ein von Facebook entwickelter Algorithmus für die Vorhersage von Zeitreihen. Er ist besonders gut geeignet für Daten mit starken saisonalen Mustern und Feiertagseffekten. Das Modell basiert auf einem additiven Modell, das aus drei Hauptkomponenten besteht:
- Trend: Diese Komponente modelliert den langfristigen Trend der Zeitreihe. Prophet verwendet dafür ein stückweise lineares oder logistisches Wachstumsmodell.
- Saisonalität: Diese Komponente modelliert die saisonalen Muster der Zeitreihe. Prophet verwendet dafür Fourier-Reihen, um die saisonalen Schwankungen zu erfassen.
- Feiertage: Diese Komponente modelliert die Auswirkungen von Feiertagen und anderen besonderen Ereignissen auf die Zeitreihe.
Einer der Vorteile von Prophet ist, dass es relativ einfach zu bedienen ist. Es erfordert nicht so viel Fachwissen über Zeitreihenanalyse wie ARIMA. Außerdem ist es robust gegenüber fehlenden Daten und Ausreißern.
Praktisches Beispiel mit Python und Prophet:
Wir verwenden wieder die gleichen Verkaufszahlen wie zuvor und daher die gleiche Datei. Damit der folgende Code funktioniert, brauchen wir das Modul „prophet“ installiert.
pip install prophet
import pandas as pd
import matplotlib.pyplot as plt
from prophet import Prophet
from sklearn.metrics import root_mean_squared_error
# Daten laden
data = pd.read_csv(
"verkaufszahlen.csv",
parse_dates=["Datum"]
)
data = data.set_index("Datum").sort_index()
# Prophet-Datenformat vorbereiten
prophet_data = data.reset_index()
prophet_data = prophet_data.rename(
columns={
"Datum": "ds",
"Verkaufszahlen": "y"
}
)
prophet_data["y"] = pd.to_numeric(prophet_data["y"], errors="coerce")
prophet_data = prophet_data.dropna(subset=["ds", "y"])
# Trainings- und Testdaten
train_data = prophet_data.iloc[:-12]
test_data = prophet_data.iloc[-12:]
# Prophet-Modell erstellen und trainieren
model = Prophet()
model.fit(train_data)
# Zukünftige Daten erstellen
future = model.make_future_dataframe(periods=12, freq="ME")
# Vorhersage erstellen
forecast = model.predict(future)
# Ergebnisse visualisieren
fig = model.plot(forecast)
plt.xlabel("Datum")
plt.ylabel("Verkaufszahlen")
plt.title("Prophet Vorhersage")
plt.show()
# Komponenten visualisieren
fig2 = model.plot_components(forecast)
plt.show()
# Vorhersagen für Testzeitraum extrahieren
predictions = forecast.tail(12)["yhat"]
# Modell evaluieren
rmse = root_mean_squared_error(test_data["y"], predictions)
print(f"RMSE: {rmse}")
In diesem Beispiel bereiten wir die Daten für Prophet vor, indem wir die Spalten umbenennen. Dann erstellen wir ein Prophet-Modell und trainieren es mit den Trainingsdaten. Anschließend erstellen wir einen DataFrame mit zukünftigen Datumsangaben und erstellen Vorhersagen. Die Ergebnisse werden visualisiert, einschließlich der Trend- und Saisonalitätskomponenten. Abschließend wird auch hier der RMSE berechnet, um die Genauigkeit zu bewerten.
Wann welches Modell wählen?
ARIMA und Prophet sind beides leistungsstarke Werkzeuge für die Zeitreihenanalyse, aber sie haben unterschiedliche Stärken und Schwächen.
ARIMA ist ein statistisches Modell, das auf mathematischen Grundlagen basiert. Es ist flexibel und kann an verschiedene Arten von Zeitreihen angepasst werden. Allerdings erfordert es mehr Fachwissen und Erfahrung, um die optimalen Parameter zu finden. Es ist am besten geeignet für Zeitreihen, die stationär sind oder durch Differenzbildung stationär gemacht werden können. „Stationär“ bedeutet hier, dass sich die grundlegenden Eigenschaften der Zeitreihe über die Zeit nicht systematisch verändern – zum Beispiel Mittelwert, Varianz und Muster der Schwankungen. Vereinfacht gesagt: Die Reihe darf zwar rauschen und schwanken, sollte aber keinen dauerhaft steigenden oder fallenden Trend enthalten.
Prophet ist ein Algorithmus, der speziell für die Vorhersage von Zeitreihen mit starken saisonalen Mustern und Feiertagseffekten entwickelt wurde. Es ist einfacher zu bedienen als ARIMA und robust gegenüber fehlenden Daten und Ausreißern. Es ist besonders gut geeignet für Geschäftsdaten, wie zum Beispiel Verkaufszahlen oder Website-Traffic.
Welches Modell man wählt, hängt also von den spezifischen
Eigenschaften der Daten und den eigenen Zielen ab. Wenn man ein tiefes
Verständnis der Daten hat und bereit ist, Zeit in die Optimierung des
Modells zu investieren, kann ARIMA eine gute Wahl sein. Wenn man schnell
und einfach brauchbare Vorhersagen erstellen möchte, ist Prophet oft die
bessere Option.
Jenseits der Grundlagen: Herausforderungen und Erweiterungen
Die hier vorgestellten Modelle sind nur der Anfang. Die Welt der Zeitreihenanalyse ist riesig und komplex. Es gibt viele weitere Modelle und Techniken, die man lernen kann, zum Beispiel:
- SARIMA (Seasonal ARIMA): Eine Erweiterung von ARIMA, die Saisonalität direkt in das Modell einbezieht.
- VAR (Vector Autoregression): Ein Modell für die Vorhersage von mehreren Zeitreihen gleichzeitig.
- State Space Models: Eine allgemeine Klasse von Modellen, die flexibel und leistungsfähig sind.
- Deep Learning: Neuronale Netze können auch für die Zeitreihenanalyse verwendet werden, insbesondere für komplexe und nicht-lineare Daten.
Darüber hinaus gibt es viele Herausforderungen, die bei der Zeitreihenanalyse berücksichtigt werden müssen, zum Beispiel:
- Fehlende Daten: Wie geht man mit fehlenden Werten in der Zeitreihe um?
- Ausreißer: Wie behandelt man ungewöhnlich hohe oder niedrige Werte, die die Vorhersage verfälschen können?
- Änderungen im Muster: Wie reagiert man auf plötzliche Veränderungen im Trend oder in der Saisonalität?
Fazit
Die Zeitreihenanalyse ist ein spannendes und anspruchsvolles Feld. Mit den richtigen Werkzeugen und Techniken kann man jedoch wertvolle Erkenntnisse aus den vorhandenen Daten gewinnen und die Zukunft ein Stück weit vorhersagen. Und mit Python stehen einem dabei mächtige Helfer zur Seite. Es lohnt sich also, tiefer in die Materie einzutauchen und die Möglichkeiten dieser Disziplin zu erkunden. Die Fähigkeit, Muster zu erkennen und Vorhersagen zu treffen, ist in vielen Bereichen von unschätzbarem Wert.