statsmodels と Prophet による時系列予測

statsmodels と Prophet による時系列予測

ソースノード: 1996963
statsmodels と Prophet による時系列予測
による画像 jcomp on Freepik
 

時系列は、データ サイエンス分野で唯一のデータセットです。 データは時間-頻度 (たとえば、毎日、毎週、毎月など) で記録され、各観測は他の観測に関連しています。 時系列データは、時間の経過とともにデータに何が起こるかを分析し、将来の予測を作成する場合に役立ちます。 

時系列予測は、過去の時系列データに基づいて将来の予測を作成する方法です。 時系列予測には、次のような多くの統計手法があります。 有馬 or 指数平滑化.

時系列予測はビジネスで頻繁に使用されるため、時系列モデルの開発方法を知っておくことはデータ サイエンティストにとって有益です。 この記事では、XNUMX つの一般的な予測 Python パッケージを使用して時系列を予測する方法を学習します。 statsmodels と預言者。 それに入りましょう。

  統計モデル Python パッケージは、時系列予測モデルを含むさまざまな統計モデルを提供するオープンソース パッケージです。 サンプル データセットでパッケージを試してみましょう。 この記事では、 デジタル通貨時系列 Kaggle からのデータ (CC0: パブリック ドメイン)。 

データをクリーンアップして、持っているデータセットを見てみましょう。

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()

 

statsmodels と Prophet による時系列予測
 

この例では、「close_USD」変数を予測したいとしましょう。 時間の経過に伴うデータ パターンを見てみましょう。

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

 

statsmodels と Prophet による時系列予測
 

上記のデータに基づいて予測モデルを構築しましょう。 モデリングする前に、データをトレーニング データとテスト データに分割しましょう。

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

 

時系列データであり、順序を維持する必要があるため、データをランダムに分割しません。 代わりに、以前のトレーニング データと最新データのテスト データを取得しようとします。

statsmodels を使用して予測モデルを作成しましょう。 の 統計モデル は多くの時系列モデル API を提供しますが、例として ARIMA モデルを使用します。

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

 

statsmodels と Prophet による時系列予測
 

上記の例では、statsmodels の ARIMA モデルを予測モデルとして使用し、次の 200 日を予測しようとしています。

モデルの結果は良好ですか? それらを評価してみましょう。 時系列モデルの評価では、通常、可視化グラフを使用して、実際の値と予測値を、平均絶対誤差 (MAE)、二乗平均平方根誤差 (RMSE)、MAPE (平均絶対パーセント誤差) などの回帰指標と比較します。

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%

 

上のスコアは問題ないように見えますが、視覚化するとどうなるか見てみましょう。

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()

 

statsmodels と Prophet による時系列予測
 

ご覧のとおり、モデルは増加傾向を予測できないため、予測は悪化しました。 私たちが使用するモデル ARIMA は、予測するには単純すぎるようです。

statsmodels 以外の別のモデルを使用してみるとよいかもしれません。 Facebook の有名な預言者パッケージを試してみましょう。

預言者 は、季節効果のあるデータに最適な時系列予測モデル パッケージです。 Prophet は、欠損データや異常値を処理できるため、堅牢な予測モデルとも見なされました。

Prophet パッケージを試してみましょう。 まず、パッケージをインストールする必要があります。

pip install prophet

 

その後、予測モデルのトレーニング用にデータセットを準備する必要があります。 Prophet には特定の要件があります。時間列の名前を「ds」、値を「y」にする必要があります。

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

 

データの準備ができたら、データに基づいて予測予測を作成してみましょう。

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()

 

statsmodels と Prophet による時系列予測
 

Prophet の優れた点は、すべての予測データ ポイントが詳細であり、ユーザーが理解できるようになったことです。 しかし、データだけで結果を把握することは困難です。 したがって、Prophet を使用してそれらを視覚化することができます。

model.plot(predictions)

 

statsmodels と Prophet による時系列予測
 

モデルの予測プロット関数は、予測の信頼性を示します。 上記のプロットから、予測が上昇傾向にあることがわかりますが、予測が長くなるほど不確実性が増します。

また、以下の関数で予測成分を調べることも可能です。

model.plot_components(predictions)

 

statsmodels と Prophet による時系列予測
 

デフォルトでは、年次および週次の季節性のデータ傾向を取得します。 これは、データに何が起こるかを説明する良い方法です。

プロフェットモデルも評価できるのでしょうか? 絶対。 Prophet には、使用できる診断測定が含まれています。 時系列交差検証. この方法では、履歴データの一部を使用し、カットオフ ポイントまでのデータを使用して毎回モデルを適合させます。 次に、預言者は予測と実際の予測を比較します。 コードを使ってみましょう。

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

 

statsmodels と Prophet による時系列予測
 

上記の結果では、各予測日における予測と比較した実績から評価結果を取得しました。 次のコードを使用して結果を視覚化することもできます。

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

 

statsmodels と Prophet による時系列予測
 

上記のプロットを見ると、予測誤差が日によって変化し、いくつかのポイントで 50% の誤差を達成する可能性があることがわかります。 このようにして、エラーを修正するためにモデルをさらに微調整したい場合があります。 を確認できます。 ドキュメント さらなる調査のために。

予測は、ビジネスで発生する一般的なケースの XNUMX つです。 予測モデルを開発する簡単な方法の XNUMX つは、statsforecast および Prophet Python パッケージを使用することです。 この記事では、予測モデルを作成し、statsforecast と Prophet で評価する方法を学びます。
 
 
コーネリアス・ユダ・ウィジャヤ は、データ サイエンス アシスタント マネージャー兼データ ライターです。 Allianz Indonesia でフルタイムで働いている間、彼はソーシャル メディアやライティング メディアを通じて Python とデータのヒントを共有するのが大好きです。
 

タイムスタンプ:

より多くの KDナゲット