モモノキ&ナノネと一緒にPythonで時系列分析を覚えよう(8)
時系列分析の実践練習(モデルについて)
今回から時系列分析のモデルについて学習していくよ。最終的にはモデルを作成して未来予測するとこまで実践していこう。
モモノキ、飛行機乗客数の時系列データにはどんなモデルを使えばいいの?
これまで扱ってきた飛行機乗客数データは、トレンドや季節性を持っていたよね。そんなときは『SARIMAモデル』がオススメだよ。
SARIMAはSeasonal AutoRegressive Integrated Moving Average(季節自己回帰和分移動平均)の略だよ。
単語がいっぱいで正式名だと長いね。
S(季節)、AR(自己回帰)、I(和分)とMA(移動平均)が合わさった形で、
ARMA(AR+MA) -> ARIMA(ARMA+I) -> SARIMA(S + ARIMA) みたいな感じかな。
SARIMAモデルのパラメータ設定(p,q,d)に関係するから、ARやMAについても簡単に説明するね。でも、情報が不足してたり、厳密には違う点もあるから、正確な情報はもっと詳しい書籍などで調べてね。
了解、後で本やもっと詳しい解説サイトで調べてみる。
AR(自己回帰)モデルは時間の変化に対し規則的に値が変化するもっと単純な時系列モデル。ある時点のデータがそれ以前データで回帰的に推定できるモデルだよ。直前p個の値と相関のあるモデルはAR(p)と表現されるよ。
MA(移動平均)モデルは時間の変化に対し不規則に値が変化するけど、ある区間での変動は一定であるようなモデル。MAモデルは過去の誤差に影響されるよ。直前q個の値誤差の影響を受けるモデルをMA(q)と表現するよ。
ARMA(自己回帰移動平均)は、ARモデルとMAモデルの二つを組み合わせたモデル。ARMA(p,q)と表現されるよ。
pとかqに入るパラメータ数値は次数と呼ばれて、ARMA(p,q)場合はARの次数がp、MAの次数がqだよ。
次数ね、メモっておく。
あと、ちょっと難しい内容だけどARやMA、その組み合わせのARMAモデルも全て、データの定常性が『定常過程』であることを前提にしたモデルなんだよ。
定常過程のデータって??
うまく説明できなけど簡単に言うと、定常過程は値が一定の周期で同程度変動しているようなデータ。もうちょっと詳しく言うと平均が時間に依存せずに一定で、異なる時点の共分散が時間差のみ依存するみたいにも表現されるよ。ザックリだと、長い目でみたら同じように変動しているデータかな。
難しいなぁ。。。定常じゃないデータは非定常?
うん、定常過程ではないデータを『非定常過程』と言うよ。一般的なよく扱う時系列データは非定常が多いよ。これまで練習で使ってきた飛行機乗客数も非定常過程のデータだよ。右肩上がりのトレンドや夏場に増加傾向の季節性もあったよね。
非定常の時系列データは、AR、MA、ARMAモデルでは扱えないの?
非定常の時系列データは、AR、MA、ARMAモデルでは扱えないの?
そのままでは上手くモデルに適用できないよ。前回少し練習したように原型列のデータに何らかの変換を加えて定常化する必要があるんだよ。
ARIMA、SARIMAなら非定常データを扱えるの?
時系列列データの内容にもよるけど、ARIMAはARMAの発展形で差分も一緒も扱えるからトレンドをもったデータにも適用できるよ。
ARIMA(自己回帰和分移動平均)はARIMA(p,d,q)と表現されて、d差分(階差)を取ってからARMAを適用したモデルだよ。モデルの名前ついてる和分(Integrated)と差分との関係がややこしいけど、見かたの違いで表現が変わるみたい。
ややこしい。差をとるだけでも、差分や階差みたいに違う表現あるし。。。
名称は分野によってもよく使われる表現が違うとか、厳密には・・・とか、いろいろあるみたい。ナノネも興味をもったら調べてみてね。
忘れなかったら時間があるとき、少し調べてみる。SARIMAモデルはARIMAの発展形?
うん、ARIMAモデルは季節変動があると上手くモデルに適用できないけど、SARIMAは季節性のある時系列データも扱えるようになっているよ。昔からあるARMAと比べると比較的まだ新しいモデルだよ。
SARIMAモデルは万能なの?
う~ん、簡単にStatsModelsにもSARIMAモデルは実装(ver.0.8.0以上)されてて簡単に実行できるんだけど。データをキチンと分析して適切なパラメータを設定する必要があるよ。上で出てきたp、i、qとかの次数がパラメータに使われるよ。当てはまりの良いモデルを作るには、結果をみながら試行錯誤的な対応も必要だよ。
なるほど、試行錯誤でがんばってみる。で、SARIMAモデルはどうやって使うの?
モデルの話だけで長くなっちゃたので、続きは今度に。次回はこれまと同じ下の飛行機乗客数のデータを使って、SARIMAモデルを実際に使ってみよう。
# 飛行機乗客数の時系列データ(前回使用コード抜粋 -> 次回SARIAモデル実践に利用)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot') # グラフのデザイン変更(お好みで利用)
plt.xkcd() # グラフのデザイン変更(お好みで利用、日本語は未対応)
import statsmodels.api as sm # version 0.8.0以上
# CSVファイル読み込み(事前にダウンロードしたCSVファイルを利用)
df = pd.read_csv('AirPassengers.csv')
# Pandas.Seriesにデータを格納(データに乗客数、インデックスは日付)
passengers = pd.Series(df['#Passengers'], dtype='float')
passengers.index = pd.to_datetime(df['Month'])
passengers.plot()
SARIMAモデル、ラジャー。
0 件のコメント :
コメントを投稿