Zeitreihenprognose mit Statsmodels und Prophet

Zeitreihenprognose mit Statsmodels und Prophet

Quellknoten: 1996963
Zeitreihenprognose mit Statsmodels und Prophet
Bild von jcomp on Freepik
 

Zeitreihen sind ein einzigartiger Datensatz im Bereich Data Science. Die Daten werden zeitabhängig aufgezeichnet (z. B. täglich, wöchentlich, monatlich usw.), und jede Beobachtung steht in Beziehung zur anderen. Die Zeitreihendaten sind wertvoll, wenn Sie analysieren möchten, was mit Ihren Daten im Laufe der Zeit passiert, und zukünftige Vorhersagen erstellen möchten. 

Die Zeitreihenprognose ist eine Methode zur Erstellung zukünftiger Vorhersagen auf der Grundlage historischer Zeitreihendaten. Es gibt viele statistische Methoden für die Zeitreihenprognose, wie z ARIMA or Exponentielle Glättung.

Zeitreihenprognosen sind in der Branche häufig anzutreffen, daher ist es für den Datenwissenschaftler von Vorteil, wenn er weiß, wie man ein Zeitreihenmodell entwickelt. In diesem Artikel lernen wir, wie man Zeitreihen mit zwei beliebten Python-Paketen für Prognosen prognostiziert; Statsmodels und Prophet. Lassen Sie uns darauf eingehen.

Das Statistikmodelle Das Python-Paket ist ein Open-Source-Paket, das verschiedene statistische Modelle anbietet, einschließlich des Zeitreihen-Prognosemodells. Lassen Sie uns das Paket mit einem Beispieldatensatz ausprobieren. Dieser Artikel verwendet die Zeitreihen für digitale Währungen Daten von Kaggle (CC0: Public Domain). 

Lassen Sie uns die Daten bereinigen und einen Blick auf den Datensatz werfen, den wir haben.

import pandas as pd df = pd.read_csv('dc.csv') df = df.rename(columns = {'Unnamed: 0' : 'Time'})
df['Time'] = pd.to_datetime(df['Time'])
df = df.iloc[::-1].set_index('Time') df.head()

 

Zeitreihenprognose mit Statsmodels und Prophet
 

Nehmen wir für unser Beispiel an, wir möchten die Variable „close_USD“ prognostizieren. Mal sehen, wie sich die Daten im Laufe der Zeit entwickeln.

import matplotlib.pyplot as plt plt.plot(df['close_USD'])
plt.show()

 

Zeitreihenprognose mit Statsmodels und Prophet
 

Lassen Sie uns das Prognosemodell basierend auf unseren obigen Daten erstellen. Lassen Sie uns vor der Modellierung die Daten in Trainings- und Testdaten aufteilen.

# Split the data
train = df.iloc[:-200] test = df.iloc[-200:]

 

Wir teilen die Daten nicht zufällig auf, da es sich um Zeitreihendaten handelt, und wir müssen die Reihenfolge beibehalten. Stattdessen versuchen wir, die Zugdaten von früher und die Testdaten von den neuesten Daten zu haben.

Verwenden wir statsmodels, um ein Prognosemodell zu erstellen. Der Statistikmodell bietet viele Zeitreihenmodell-APIs, aber wir würden das ARIMA-Modell als unser Beispiel verwenden.

from statsmodels.tsa.arima.model import ARIMA #sample parameters
model = ARIMA(train, order=(2, 1, 0)) results = model.fit() # Make predictions for the test set
forecast = results.forecast(steps=200)
forecast

 

Zeitreihenprognose mit Statsmodels und Prophet
 

In unserem obigen Beispiel verwenden wir das ARIMA-Modell von statsmodels als Prognosemodell und versuchen, die nächsten 200 Tage vorherzusagen.

Ist das Modellergebnis gut? Versuchen wir, sie zu bewerten. Die Auswertung des Zeitreihenmodells verwendet normalerweise ein Visualisierungsdiagramm, um den Ist-Wert und die Vorhersage mit Regressionsmetriken wie Mean Absolute Error (MAE), Root Mean Square Error (RMSE) und MAPE (Mean Absolute Percentage Error) zu vergleichen.

from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np #mean absolute error
mae = mean_absolute_error(test, forecast) #root mean square error
mse = mean_squared_error(test, forecast)
rmse = np.sqrt(mse) #mean absolute percentage error
mape = (forecast - test).abs().div(test).mean() print(f"MAE: {mae:.2f}")
print(f"RMSE: {rmse:.2f}")
print(f"MAPE: {mape:.2f}%")

 

MAE: 7956.23 RMSE: 11705.11 MAPE: 0.35%

 

Die obige Punktzahl sieht gut aus, aber mal sehen, wie es ist, wenn wir sie visualisieren.

plt.plot(train.index, train, label='Train')
plt.plot(test.index, test, label='Test')
plt.plot(forecast.index, forecast, label='Forecast')
plt.legend()
plt.show()

 

Zeitreihenprognose mit Statsmodels und Prophet
 

Wie wir sehen können, war die Prognose schlechter, da unser Modell den steigenden Trend nicht vorhersagen kann. Das von uns verwendete Modell ARIMA erscheint für Prognosen zu einfach.

Vielleicht ist es besser, wenn wir versuchen, ein anderes Modell außerhalb von statsmodels zu verwenden. Probieren wir das berühmte Prophet-Paket von Facebook aus.

Prophet ist ein Zeitreihen-Prognosemodellpaket, das am besten für Daten mit saisonalen Effekten geeignet ist. Prophet galt auch als robustes Prognosemodell, da es mit fehlenden Daten und Ausreißern umgehen konnte.

Probieren wir das Prophet-Paket aus. Zuerst müssen wir das Paket installieren.

pip install prophet

 

Danach müssen wir unseren Datensatz für das Training des Prognosemodells vorbereiten. Prophet hat eine bestimmte Anforderung: Die Zeitspalte muss als „ds“ und der Wert als „y“ benannt werden.

df_p = df.reset_index()[["Time", "close_USD"]].rename( columns={"Time": "ds", "close_USD": "y"}
)

 

Wenn unsere Daten bereit sind, versuchen wir, auf der Grundlage der Daten eine Prognosevorhersage zu erstellen.

import pandas as pd
from prophet import Prophet model = Prophet() # Fit the model
model.fit(df_p) # create date to predict
future_dates = model.make_future_dataframe(periods=365) # Make predictions
predictions = model.predict(future_dates) predictions.head()

 

Zeitreihenprognose mit Statsmodels und Prophet
 

Das Tolle am Propheten war, dass jeder prognostizierte Datenpunkt detailliert war, damit wir Benutzer ihn verstehen konnten. Es ist jedoch schwierig, das Ergebnis nur anhand der Daten zu verstehen. Wir könnten also versuchen, sie mit Prophet zu visualisieren.

model.plot(predictions)

 

Zeitreihenprognose mit Statsmodels und Prophet
 

Die Vorhersagefunktion des Modells würde uns mitteilen, wie zuverlässig die Vorhersagen waren. Aus dem obigen Diagramm können wir sehen, dass die Vorhersage einen Aufwärtstrend hat, aber mit zunehmender Unsicherheit, je länger die Vorhersagen sind.

Es ist auch möglich, die Prognosekomponenten mit der folgenden Funktion zu untersuchen.

model.plot_components(predictions)

 

Zeitreihenprognose mit Statsmodels und Prophet
 

Standardmäßig erhalten wir den Datentrend mit jährlicher und wöchentlicher Saisonabhängigkeit. Es ist eine gute Möglichkeit zu erklären, was mit unseren Daten passiert.

Wäre es möglich, auch das Prophet-Modell zu evaluieren? Absolut. Prophet enthält eine diagnostische Messung, die wir verwenden können: Kreuzvalidierung von Zeitreihen. Das Verfahren verwendet einen Teil der historischen Daten und passt das Modell jedes Mal unter Verwendung von Daten bis zum Cutoff-Punkt an. Dann würde der Prophet die Vorhersagen mit den tatsächlichen vergleichen. Versuchen wir es mit dem Code.

from prophet.diagnostics import cross_validation, performance_metrics # Perform cross-validation with initial 365 days for the first training data and the cut-off for every 180 days. df_cv = cross_validation(model, initial='365 days', period='180 days', horizon = '365 days') # Calculate evaluation metrics
res = performance_metrics(df_cv) res

 

Zeitreihenprognose mit Statsmodels und Prophet
 

Im obigen Ergebnis haben wir das Bewertungsergebnis aus dem tatsächlichen Ergebnis im Vergleich zur Prognose an jedem Prognosetag erhalten. Es ist auch möglich, das Ergebnis mit dem folgenden Code zu visualisieren.

from prophet.plot import plot_cross_validation_metric
#choose between 'mse', 'rmse', 'mae', 'mape', 'coverage' plot_cross_validation_metric(df_cv, metric= 'mape')

 

Zeitreihenprognose mit Statsmodels und Prophet
 

Wenn wir das obige Diagramm sehen, können wir sehen, dass der Vorhersagefehler nach den Tagen variierte und an einigen Stellen einen Fehler von 50 % erreichen konnte. Auf diese Weise möchten wir das Modell möglicherweise weiter optimieren, um den Fehler zu beheben. Sie können die überprüfen Dokumentation zur weiteren Erkundung.

Prognosen sind einer der häufigsten Fälle, die in der Wirtschaft auftreten. Eine einfache Möglichkeit, ein Prognosemodell zu entwickeln, ist die Verwendung der Python-Pakete statsforecast und Prophet. In diesem Artikel lernen wir, wie man ein Prognosemodell erstellt und mit statsforecast und Prophet auswertet.
 
 
Cornellius Yudha Wijaya ist Data Science Assistant Manager und Data Writer. Während er Vollzeit bei Allianz Indonesien arbeitet, liebt er es, Python- und Datentipps über soziale Medien zu teilen und Medien zu schreiben.
 

Zeitstempel:

Mehr von KDnuggets