Fire Engine

消防士→ITエンジニア→研究者

時系列データ分析とPython

 先日、『時系列データ分析とPython』というタイトルでLTをしたので、そのときのスライドをこちらに載せておきます。

www.slideshare.net

 LTで話したとは言っても、私自身、数ヶ月前まで時系列データなんてほとんど触ったことなくて、ここ最近興味を持ち、勉強を始めました。スライドには最小限のことしか載せてないので、こちらに内容の補足を書いていきます。

時系列データの取り扱いは難しい

 時系列データとは、時間の推移ととともに観測されるデータのことです。私たちの身の回りには時系列データが溢れています。例えば、気温・雨量といった気象データも時系列データですし、株価や為替といった金融データも時系列データです。
 これらのデータは時間の推移とともに観測されるというのはもちろんですが、多くの場合で時間依存性を持ちます。例えば、株価の場合、前日の値動きはどうか、上昇傾向なのか、下落傾向なのかが重要だというのはイメージしやすいかと思います。この時間依存性がデータ分析の際にやっかいな存在です。
 多くのデータ分析手法において、「それぞれのデータを独立と仮定する」という仮定を置いた上で分析を行うケースがよくあります。しかし、時間依存性を持っていると、この仮定が成り立たず、取り扱いが非常に難しくなります。
 下のグラフは、ナイル川流量の各年ごとのデータを表しており,有名な時系列データセットです。

f:id:hirotsuru314:20170702224936p:plain

Pythonの統計ライブラリStatsModels

 Pythonで統計モデリングしようと思うと、StatsModelsを使うことになるかと思います。

StatsModels: Statistics in Python — statsmodels 0.9.0 documentation

 StatsModelsは数多くの統計モデリング手法を提供してくれるライブラリです。一般化線形モデル(generalized linear model; GLM)に始まり、今回使った状態空間モデルもStatsModelsを使えば、簡単に構築できます。ちなみに状態空間モデルについてはこちらに書いてあります。

statsmodels.tsa.statespace.structural.UnobservedComponents — statsmodels 0.9.0 documentation

状態空間モデル

 状態空間モデルでは、データの変動の原因を「水準の変化」と「観測誤差」という二つに分けて考えます。イメージ図は下記のような感じです。 f:id:hirotsuru314:20170702225141p:plain

 状態空間モデルを使えば、欠測データや時変回帰係数、さらに多変量への拡張まで状態空間の枠組みの中で、柔軟にモデリングが行えます。 状態空間モデルについては、下記リンクと、その関連ページを読むと、だいたい感覚はつかめると思います。

状態空間モデル | Logics of Blue

 今回、状態推定はStatsModelsのUnobservedComponentsの中のfit関数を呼び出しただけです。公式リファレンスによると、 『Fits the model by maximum likelihood via Kalman filter.』と書いてあり、裏側ではカルマンフィルタによる最尤推定を行なっているようです。状態空間モデルにおけるパラメータ推定法は下記の記事がよくまとまっていて、参考になります。カルマンフィルタ・粒子フィルタ・マルコフ連鎖モンテカルロ法(Markov chain Monte Carlo methods; MCMC)について整理してあります。

状態空間モデルの推定方法の分類 | Logics of Blue

実装部分についても書きました(2017年8月13日更新)

blog.tsurubee.tech

参考書 

現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~

現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~

 おそらく現時点で日本語で読める時系列解析の本ではこの本が一番やさしいと思います。ゼロから始めるには最適だと思います。時系列データとは?に始まり、自己相関・定常過程・単位根過程・ホワイトノイズ・ランダムウォークといった時系列解析でよく出てくる用語を理解するのに非常に役立ちます。実践の部分は、GARCHモデルがメインで、状態空間モデルについては取り扱っていません。サンプルコードはRです。

 時系列うんぬんの前に統計モデリングやるなら結局みどり本を読まなきゃですね。私もいつもかなり勉強させていただいているTJOさんの記事にもみどり本程度の統計モデリングの知識は必要なスキルセットとしてあげられてました。

データサイエンティストもしくは機械学習エンジニアになるためのスキル要件とは(2017年夏版) - 六本木で働くデータサイエンティストのブログ