【時系列分析】日経平均株価を予測してみる
時系列分析の実践として、日経平均株価のデータを使ってみたいと思います。
利用したデータは、以下のサイトからCSVで出力できますので、
ぜひ分析される際には、ダウンロードしてみていはいかがでしょうか。
データ引用もと
日経平均プロフィル参考書籍
現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~
- 作者: 横内大介,青木義充
- 出版社/メーカー: 技術評論社
- 発売日: 2014/02/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
目次
- データの可視化
- 自己相関の確認
- 単位根検定
この3つに分けて、お話を進めていきたいと思います。
データの可視化
まずは、ダウンロードしてきたデータをpythonで読み込んで、
可視化することころまでやってみましょう。
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('nikkei_stock_average_daily_jp.csv', encoding='shift_jis') df.head()
どういったデータが入っているか確認しましょう。
いくつかデータが入っているのですが、今回は扱うデータを絞って、
日時と終値のデータのみにします。
事前準備
こんかいの分析で利用するパッケージを事前にインポートしておきましょう。
①カラム名の変更
ダウンロードしたばかりのデータは、カラム名が日本語になっているので、
扱いやすいように変更をしましょう。
df = df.iloc[:-1, 0:2] df.columns = ['date', 'price']
②日時列のデータ変更
元のデータでは、「YYYY/MM/DD」となっているので、
「YYYY-MM-DD」の形に変換をしましょう。
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
さて、事前準備はこの程度にしておいて、実際にデータを触っていきましょう。
データの可視化
事前準備が完了しましたので、早速可視化に入りましょう。
実際にかしかした際の、スクリプトは以下の通りでございます。
plt.figure(figsize=[10, 4]) plt.style.use('ggplot') left = np.array(df['date']) height = np.array(df['price']) plt.plot(left, height) plt.title('nikkei Price') plt.xlabel('date') plt.ylabel('price') plt.legend()
Y軸:終値、X軸:日時の簡単なプロットになります。
日経平均を可視化しましたが、いかがでしょうか。
2015年9月頃と2015年12月頃に大きな下落がありました。
それ以降は、上下しつつも上昇傾向にあり、2018年2月ごろに高くなっていると思います。
このプロットを見て、いつ何が発生したのか調べるだけでも 面白そうなグラフですよね。
ガクッと落ちた2015年8月はなにが発生したんでしょうね。
少し調べてみましたが、2015年8月25日に宇宙ステーション補給機こうのとり5号機が
国際宇宙ステーションへの結合が完了したそうです。
いいニュースっぽいですが、日経平均が下がっているんですね。
きっと別のことが影響しているのでしょうね。
さて、少し話がそれてしまいました。
このようにデータをプロットすると色々なことが見えてきます。
時系列に限らず、データを分析する際には可視化をしましょう。
自己相関の確認
時系列のデータですので、各地点のデータが、
他に影響を与えていないか?
例えば、今日高値だった場合は、明日も高値なのか否か
といったように自分自身に影響を与えていないか確認します。
price = df.set_index('date') # 自己相関 price_acf = sm.tsa.stattools.acf(price, nlags=40) # 偏自己相関 price_pacf = sm.tsa.stattools.pacf(price, nlags=40, method='ols') # 自己相関のグラフ fig = plt.figure(figsize=(12,8)) ax1 = fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(price, lags=40, ax=ax1) ax2 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(price, lags=40, ax=ax2)
自己相関と偏自己相関をプロットしてみました。
下のグラフをみても、あまり周期性が内容に見えます。
株価のデータなので周期性があるかなと思っておりましたが、
思ったよりも周期性がないのかもしれませんね。。。
単位根検定
最後に、単位根検定を実施してみましょう。
スクリプトは以下のとおりでございます。
X = df['price'] result = st.adfuller(X) print('ADF Statistic: %f' % result[0]) print('p-value: %f' % result[1]) print('Critical Values:') for key, value in result[4].items(): print('\t%s: %.3f' % (key, value))
結果
Backend MacOSX is interactive backend. Turning interactive mode on. ADF Statistic: -1.149502 p-value: 0.694933 Critical Values: 1%: -3.438 5%: -2.865 10%: -2.568
こういった値になりました。
-1.149と示しており、5%よりも大きい値になっております。
帰無仮説の単位根でないが棄却されたので、
単位根があるデータということになります。
さて、今回はここまでとなります。
まだARIMAなどは取り組んでいないのですが、
おいおい取り組んで見たいと思います。