LoginSignup
12
20

More than 1 year has passed since last update.

statsmodels(Python)を使って株価を時系列解析(1)

Last updated at Posted at 2022-02-06

Advanced Python1 時系列解析

時系列解析のPython本って意外と少ないかも知れません。

時系列解析: 自己回帰型モデル・状態空間モデル・異常検知 (Advanced Python)

とりあえずこの本を使って、株価の時系列予測をしながら、日経平均株価と友達になりたいと思っています。

株価のstatsmodelsによる解析

株価をダウンロードするサイトがなくなってしまって、別の方法を考えないといけないのですが、とりあえず以前落としたデータを使って、まずstatesmodelsを使って、2020年のTopixのETF解析をしようと思います。
2020年と言えば、3月にコロナで株価大暴落をおこした年です。さて、コロナの大暴落は、時系列解析でどう表れるのでしょうか?

傾向変動、季節変動、不規則変動

最初は基本である変動の解析です。
statsmodelsにより、傾向変動と季節変動と不規則変動にわけます。
pythonstatesmodelsでは、statsmodels.tsa.seasonal.seasonal_decomposeで処理をすると、.trend:傾向変動.seasonal季節変動.resid不規則変動が計算できます。
statsmodels

まず株価データをごちゃごちゃdatatimeindexを作って、indexを日付にして、終値がデータのpandasSeriesを作成します。

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)

傾向別のグラフを見てみよう。

元のデータ

image.png

2020年3月はコロナで株の大暴落をした月です。これが、成分をわけた時にどうなるか見てみましょう。

トレンド(25日平均線です)

image.png

滑らかな線になっています。

季節変動

image.png

なんと1年(前後は抜けるので11カ月)のうちで10回の同じパターンで、上下しています。こんなパターンが見つけることができるとは。。。

ノイズ

image.png

季節変動を見つけることが出来ましたが、ノイズが大きすぎます。特にコロナで落ち込んだところが、当たり前ですが大きなノイズになっています。

乗法モデルも計算したけど、加法モデルと同様の結果になりました。

今回はここまで。
次回は、乖離率を使った株価解析での儲け方を考えます。

12
20
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
12
20