LoginSignup
2
2

COVID-19とU-NEXTのGoogle Trendデータを用いた時系列解析

Posted at

Googleトレンドでは過去5年間分の人気度データを見れます.
コロナによる行動変容を見る上で,ある時系列データをSTL分解して,ある時系列データへのグレンジャー因果性を見たいなーと思って作りました.

①Google Trendで調べたいワードを過去5年分のデータで探す.日中はサーバーが重いのかよくエラーになるのでF5連打しているとそのうち表示される.

②得たcsvデータを以下の画像のように加工.(上2行を消し,未満という文字が入っているところがあったら未満を消す)
image.png

③以下のプログラムを回す

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import STL

Data1=pd.read_csv('COVID-19.csv',index_col="")
Data2=pd.read_csv('U-NEXT.csv',index_col="")

# ライブラリで自己相関係数,偏自己相関係数を求める(グラフ付き)
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

MAX_LAG=40

fig = plt.figure(figsize=(12,8))
ax1 = fig.add_subplot(211)
plot_acf(Data2, lags=MAX_LAG, ax=ax1)
plt.xticks(range(0, MAX_LAG+1, 6))
plt.grid()

ax2 = fig.add_subplot(212)
plot_pacf(Data2, lags=MAX_LAG, ax=ax2)
plt.xticks(range(0, MAX_LAG+1, 6))
plt.grid()


# STL分解の実行
stl = STL(Data2['U-NEXT: (日本)'], period=17)
result = stl.fit()
# 分解された成分の取得
trend = result.trend
seasonal = result.seasonal
resid = result.resid

# 結果の可視化
plt.figure(figsize=(10, 8))
plt.subplot(411)
plt.plot(Data2, label='Original')
plt.legend(loc='best')
plt.title('Original Data')

plt.subplot(412)
plt.plot(trend, label='Trend')
plt.legend(loc='best')
plt.title('Trend Component')

plt.subplot(413)
plt.plot(seasonal, label='Seasonality')
plt.legend(loc='best')
plt.title('Seasonal Component')

plt.subplot(414)
plt.plot(resid, label='Residual')
plt.legend(loc='best')
plt.title('Residual Component')
plt.tight_layout()

from statsmodels.tsa.api import VAR

print(Data1)
Data=Data1
Data['trend']=trend
Data['seasonal']=seasonal
Data['resid']=resid


print(Data)

# モデルのインスタンス生成
var_model = VAR(Data.diff().dropna())
# モデルを構築
results = var_model.fit(maxlags=10, ic='aic')
col = Data.columns

# グレンジャー因果性を確認
for i in col: # colはモデルに入れた変数
    for j in col:
        print(i, '', j, results.test_causality(caused=i,causing=j).pvalue)

# (直行化)インパルス応答関数
period = 10
irf = results.irf(period)
irf.plot(orth=True)
plt.show()

④結果

自己相関と偏自己相関の図.これを参考にSTL分解のperiodを決めた.
image.png

STL分解の図.軸が終わってるのは拾い物のためご愛嬌(回転させたり別でリスト作れば容易に解決します)
image.png

グレンジャー因果の出力
image.png
これらはp値です.なので両側90%で検定するなら0.05以下が帰無仮説を棄却してグレンジャー因果があるという話になるっぽいです.COVID-19の影響→残差があったら面白いなと思っていたのですが,逆の因果はあるけれど,って感じみたいですね.もうちょっとGoogleトレンドのワード自体でいいものを探す必要があるかもしれません.

インパルス応答
限界効用的なものらしいですね.制御でもインパルス応答はありますし,Shapもやってることは限界効用なので,感度分析は大事っぽいです.(図的にもわかりやすいです)
ただ,目的のグレンジャー因果が出てないのでなんとも的な感じではあります.
image.png

参考文献・【実践時系列解析】グレンジャー因果検定とインパルス応答関数
参考文献・【気象データで時系列解析②】自己相関係数・偏自己相関係数
参考文献・ビジネスデータを解き明かす! Python STL分解で時系列データを理解しよう

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2