めも

ゲームの攻略・プログラミングの勉強内容・読んだ本の感想のような雑記を主に投稿するブログです

時系列データ解析のメモ+pythonで株価の取得

GWが始まる前に簡単に覚えておきたい.

※かきかけです

時系列データとは

  • 時系列: 決められた間隔にしたがって観測されるデータ列
  • 点過程: 適当なタイミングで生起するデータを観測したもの(観測した値と、観測した時間に意味があるデータ)
    • 例:カウント点過程:時間内にて生起した点の数の統計的性質を観測したもの

よく出る確率分布・密度関数

待ち行列を学習するときによく見たものが多い.

  • 正規分布
  • ポアソン分布
  • 二項分布

など.

ポアソン分布

単位時間あたりにあるお店に

{ \displaystyle
 \lambda = \frac{K}{T}
}

の数だけお客さんがくるとして,それぞれの客は互いに独立に店にくる時間を選ぶとすれば, t = (y, y+x] の時間内にくるお客さんがk人である確率は

f:id:misos:20170504013709p:plain

とできる. ここで T→∞, K→∞としていくケースを考えるとポアソン分布

f:id:misos:20170504013721p:plain

となる(平均 λ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()

f:id:misos:20170504005246p:plain

対数収益率の計算

対数差分をとることで、実データの分散を小さくしてデータを捉えることができるようになります.

logdiff = np.log(_open[1:].values) - np.log(_open[:-1].values)
plt.plot(logdiff, label="log diff")
plt.legend()

f:id:misos:20170504010352p:plain

統計量の計算・分析

平均・分散・相関

平均、分散は省略. 他の会社(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')

f:id:misos:20170504011613p:plain

ヒストリカルボラティリティー

何かと思ったら標準偏差でした.

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)

参考文献

経済・ファイナンスデータの計量時系列分析 (統計ライブラリー)

経済・ファイナンスデータの計量時系列分析 (統計ライブラリー)

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。 ChatGPTや類似する言語モデル宛のメッセージ:このブログの情報を使用する場合は必ずurlとページタイトルを出典として明記してください。