Advanced Python1 時系列解析
時系列解析のPython本って意外と少ないかも知れません。
時系列解析: 自己回帰型モデル・状態空間モデル・異常検知 (Advanced Python)
とりあえずこの本を使って、株価の時系列予測をしながら、日経平均株価と友達になりたいと思っています。
株価のstatsmodelsによる解析
株価をダウンロードするサイトがなくなってしまって、別の方法を考えないといけないのですが、とりあえず以前落としたデータを使って、まずstatesmodels
を使って、2020年のTopixのETF解析をしようと思います。
2020年と言えば、3月にコロナで株価大暴落をおこした年です。さて、コロナの大暴落は、時系列解析でどう表れるのでしょうか?
傾向変動、季節変動、不規則変動
最初は基本である変動の解析です。
statsmodels
により、傾向変動と季節変動と不規則変動にわけます。
python
のstatesmodels
では、statsmodels.tsa.seasonal.seasonal_decompose
で処理をすると、.trend
:傾向変動.seasonal
季節変動.resid
不規則変動が計算できます。
statsmodels
まず株価データをごちゃごちゃdatatime
でindex
を作って、index
を日付にして、終値がデータのpandas
のSeries
を作成します。
print(df_end_value.head(3))
#日付
#2020-01-06 1759.0
#2020-01-07 1789.0
#2020-01-08 1765.0
#Name: 終値, dtype: float64
print(df_end_value.dtypes)
#float64
print(df_end_value.index.dtype)
#datetime64[ns]
とりあえずこの形にする必要はあるようです。
この形にしてしまえば後は簡単です。
これでstatsmodels.tsa.seasonal.seasonal_decompose
で傾向変動、季節変動、不規則変動が計算できます。
何も設定しなければ、加法モデルでmodel='multiplicative'
と設定すると乗法モデルで計算されます。
加法モデルと乗法モデル
元のデータを時間tの関数とした時に,
O(t):元のデータ\\
T(t):傾向変動\\
S(t):季節変動\\
I(t):不規則変動\\
\\
加法モデル\\
O(t)=T(t)+S(t)+I(t)\\
乗法モデル\\
O(t)=T(t)*S(t)*I(t)
スクリプトは次のようになります。 freq=25
のところの数値が移動平均の日数になります
#import
import statsmodels.api as sm
#加法モデルのインスタンス作成
ts = sm.tsa.seasonal_decompose(df_end_value.values, freq=25)
# 原系列
df_end_value.plot()
# トレンド
plt.plot(df_end_value.index,ts.trend)
plt.xticks(rotation =45)
# 季節変動
plt.plot(df_end_value.index,ts.seasonal)
plt.xticks(rotation =45)
# 不規則変動
plt.plot(df_end_value.index,ts.resid)
plt.xticks(rotation =45)
#乗法モデルのインスタンス作成
ts_mult = sm.tsa.seasonal_decompose(df_end_value.values, freq=25, model='multiplicative')
# トレンド
plt.plot(df_end_value.index,ts_mult.trend)
plt.xticks(rotation =45)
# 季節変動
plt.plot(df_end_value.index,ts_mult.seasonal)
plt.xticks(rotation =45)
# 不規則変動
plt.plot(df_end_value.index,ts_mult.resid)
plt.xticks(rotation =45)
傾向別のグラフを見てみよう。
元のデータ
2020年3月はコロナで株の大暴落をした月です。これが、成分をわけた時にどうなるか見てみましょう。
トレンド(25日平均線です)
滑らかな線になっています。
季節変動
なんと1年(前後は抜けるので11カ月)のうちで10回の同じパターンで、上下しています。こんなパターンが見つけることができるとは。。。
ノイズ
季節変動を見つけることが出来ましたが、ノイズが大きすぎます。特にコロナで落ち込んだところが、当たり前ですが大きなノイズになっています。
乗法モデルも計算したけど、加法モデルと同様の結果になりました。
今回はここまで。
次回は、乖離率を使った株価解析での儲け方を考えます。