GWが始まる前に簡単に覚えておきたい.
※かきかけです
時系列データとは
- 時系列: 決められた間隔にしたがって観測されるデータ列
- 点過程: 適当なタイミングで生起するデータを観測したもの(観測した値と、観測した時間に意味があるデータ)
- 例:カウント点過程:時間内にて生起した点の数の統計的性質を観測したもの
よく出る確率分布・密度関数
待ち行列を学習するときによく見たものが多い.
- 正規分布
- ポアソン分布
- 二項分布
など.
ポアソン分布
単位時間あたりにあるお店に
の数だけお客さんがくるとして,それぞれの客は互いに独立に店にくる時間を選ぶとすれば, t = (y, y+x] の時間内にくるお客さんがk人である確率は
とできる. ここで T→∞, K→∞としていくケースを考えるとポアソン分布
となる(平均 λx を持つポアソン分布).
goodness of fit test
データに上記のような確率分布を当てはめて, その当てはまり具合を検証する.
pythonにて株価を取得
pandas_datareaderのインストール
pip install pandas_datareader conda install pandas-datareader # anaconda 環境の場合はこっち
としてインストールされる.
この状態でpandas (0.19.2), pandas-datareader (0.3.0.post0)がインストールされていれば、以下のコードは動きます.
データの取得
必要最小限のもののみ. 株価以外の細かいデータの取得はドキュメントを参照してください.
ドキュメント: Remote Data Access — pandas-datareader 0.1 documentation
#!/usr/bin/env python # -*- coding: utf-8 -*- from datetime import datetime import numpy as np import matplotlib.pyplot as plt import pandas as pd from pandas_datareader import data _from, _to = datetime(2012,1,1), datetime(2017,1,1) stock = data.DataReader("F", 'yahoo', _from, _to) print(stock)
とすれば
Open High Low Close Volume Adj Close Date 2012-01-03 11.00 11.25 10.99 11.13 45709900 8.993629 2012-01-04 11.15 11.53 11.07 11.30 79725200 9.130998 2012-01-05 11.33 11.63 11.24 11.59 67877500 9.365333 2012-01-06 11.74 11.80 11.52 11.71 59840700 9.462299 2012-01-09 11.83 11.95 11.70 11.80 53981500 9.535024 2012-01-10 12.00 12.05 11.63 11.80 121750600 9.535024 2012-01-11 11.74 12.18 11.65 12.07 63806000 9.753198 2012-01-12 12.16 12.18 11.89 12.14 48687700 9.809762 2012-01-13 12.01 12.08 11.84 12.04 46366700 9.728957 2012-01-17 12.20 12.26 11.96 12.02 44398400 9.712796
と取得できるはず. このデータを用いてデータ解析の練習をする.
データのプロット
_open, _close = stock['Open'], stock['Close'] plt.plot(_open, label="open") plt.plot(_close, label="close") plt.legend()
対数収益率の計算
対数差分をとることで、実データの分散を小さくしてデータを捉えることができるようになります.
logdiff = np.log(_open[1:].values) - np.log(_open[:-1].values) plt.plot(logdiff, label="log diff") plt.legend()
統計量の計算・分析
平均・分散・相関
平均、分散は省略. 他の会社(yahoo, google)との相関をプロットしてみてみます. データ取得のたびに何回も上のようなコードを書くのは面倒なので、関数を定義しています.
def _get_timeseries_data(company_name, column_name, target='F', start=datetime(2016,1,1), end=datetime(2017,1,1)): target_data = data.DataReader(target, company_name, start, end) return target_data[column_name] yahoo = _get_timeseries_data('yahoo', 'Open') google = _get_timeseries_data('google', 'Open') plt.scatter(yahoo, google, marker='x')
ヒストリカルボラティリティー
何かと思ったら標準偏差でした.
np.std(yahoo), np.std(google)
(0.662619218725916, 0.66224033569369867)
検定
shapiro-wilk検定
scipy.stats.shapiroに便利な関数が定義されていました. 正規分布への適合具合をテストします.
The Shapiro-Wilk test tests the null hypothesis that the data was drawn from a normal distribution.
from scipy import stats stats.shapiro(yahoo)
Ljung-Box検定
PyPR Documentにて関数が定義されていたのでインストールして利用します. データに自己相関が含まれているかどうかを検証します.
pip install pypr
でインストールしたものはLjung-Boxがないためエラーになる…?
単位根検定・定常性検定
時系列データがランダムウォークにしたがっているかを検証する検定. 単位根検定での検定統計量は正規分布に従わないことに注意.
- KPSS 検定
- McCabe 検定
- Dickey-Fuller 検定
- Phillips-Perron 検定
モデル
AR(Auto Regressive)
MA(Moving Average)
直前の状態が次の状態に大きく影響する時系列データに対して有効なモデル.
ARMA(AutoRegressive Moving Average)
ARIMA(AutoRegressive Integrated Moving Average)
SARIMA(Seasonal AutoRegressive Integrated Moving Average)
Skew-GARCH(multivariate Skew-GARCH)
参考文献
Längkvist, Martin, Lars Karlsson, and Amy Loutfi. “A review of unsupervised feature learning and deep learning for time-series modeling.” Pattern Recognition Letters 42 (2014): 11-24.
- deep系の時系列解析と特徴抽出に関するサーベイ論文.
時系列分析
経済・ファイナンスデータの計量時系列分析 (統計ライブラリー)
- 作者: 沖本竜義
- 出版社/メーカー: 朝倉書店
- 発売日: 2010/02/01
- メディア: 単行本
- 購入: 4人 クリック: 101回
- この商品を含むブログ (6件) を見る