3か月分のデータ(各行は毎日に対応)を生成し、同じデータに対して多変量時系列分析を実行したいと思います。
利用可能な列は-
Date Capacity_booked Total_Bookings Total_Searches %Variation
各日付はデータセットに1つのエントリがあり、3か月のデータがあり、他の変数も予測するために多変量時系列モデルを適合させたいと思います。
これまでのところ、これは私の試みであり、私は記事を読むことによって同じことを達成しようとしました。
私も同じことをした-
df['Date'] = pd.to_datetime(Date , format = '%d/%m/%Y')
data = df.drop(['Date'], axis=1)
data.index = df.Date
from statsmodels.tsa.vector_ar.vecm import coint_johansen
johan_test_temp = data
coint_johansen(johan_test_temp,-1,1).eig
#creating the train and validation set
train = data[:int(0.8*(len(data)))]
valid = data[int(0.8*(len(data))):]
freq=train.index.inferred_freq
from statsmodels.tsa.vector_ar.var_model import VAR
model = VAR(endog=train,freq=train.index.inferred_freq)
model_fit = model.fit()
# make prediction on validation
prediction = model_fit.forecast(model_fit.data, steps=len(valid))
cols = data.columns
pred = pd.DataFrame(index=range(0,len(prediction)),columns=[cols])
for j in range(0,4):
for i in range(0, len(prediction)):
pred.iloc[i][j] = prediction[i][j]
検証セットと予測セットがあります。ただし、予測は予想よりもはるかに悪いです。
私が受け取っている出力は-
予測データフレーム-
検証データフレーム-
あなたが見ることができるように、予測は予想されたものからかなりずれています。誰かが精度を向上させる方法をアドバイスできますか?また、モデル全体をデータに当てはめて予測を印刷しても、新しい月が始まったことは考慮されないため、そのように予測されません。どうすればここに組み込むことができますか。どんな助けでもありがたいです。
[〜#〜]編集[〜#〜]
データセットへのリンク- Dataset
ありがとう
VARドキュメントページで提案されているように、精度を向上させる1つの方法は、各変数の自己相関を調べることです。
https://www.statsmodels.org/dev/vector_ar.html
特定のラグの自己相関値が大きいほど、このラグはプロセスにとって有用になります。
もう1つの良いアイデアは、AIC基準とBIC基準を見て精度を検証することです(上記の同じリンクに使用例があります)。値が小さいほど、真の推定量を見つけた可能性が高いことを示します。
このようにして、自己回帰モデルの順序を変更し、分析されたAICとBICが最も低いモデルを確認できます。 AICが3のラグを持つ最良のモデルであることを示し、BICが5のラグがあることをBICが示す場合、3、4、5の値を分析して、最良の結果が得られるモデルを確認する必要があります。
最良のシナリオは、より多くのデータを取得することです(3か月はそれほど多くないため)が、これらのアプローチを試して、効果があるかどうかを確認することができます。