楽しんで学習するITエンジニアの備忘録ブログ

~日常生活の中にも楽しみを見出したい~

【第5弾】SARIMAで時系列分析に挑戦【SARIMAモデルの構築】

7月14日(水)過ぎには晴天の毎日が続き、

 

清々しい日々を送ることができそうだ。

 

でもどんな日であったとしても、

 

SARIMAを利用して、時系列データ分析に挑戦中であることは変わらない。

 

前回までで、SARIMAで利用するパラメータ推定が完了したので、

 

実際にSARIMAモデルの構築を行っていきたい。

 

さあ、今日も1ミリでも前へ。

 

自分史上最幸の一日を目指していきたいと思います。

 

■■■■■■■■■■■■■■■■■■■■■■■■

■■■時系列データは、月別の牛乳生産量■■■

■■■■■■■■■■■■■■■■■■■■■■■■

 

1962年1月から1975年12月までの約14年間で、レコード数は168行。

当然ですが、データは前回と同じどすえ~。

 

f:id:takanarukodou2:20210706182147p:plain

          図1.月別牛乳生産量の推移(1カ月単位)
 

■■■■■■■■■■■■■■■■■■■■■■■■

■■■■推定されたパラメータの振り返り■■■

■■■■■■■■■■■■■■■■■■■■■■■■

 

Best model: ARIMA(1,1,0)(0,1,1)[12] intercept」

 ARIMA(p,d,q)(P,D,Q)[M]と照らし合わせることで、それぞれの値が明確になった。

 

※pとは、過去データをどの位利用するか。2の場合、時点tの予測に時点t-1と時点t-2を利用。【NoSeason】

※qとは、過去の予測と観測値の違い(残差)のデータをどの程度利用するか。【NoSeason】

※dとは、時点tと時点t+nの差を計算する時のnを指す。【NoSeason】

※Pとは、過去データをどの位利用するか。2の場合、時点tの予測に時点t-1と時点t-2を利用。【Season】

※Qとは、過去の予測と観測値の違い(残差)のデータをどの程度利用するか。【Season】

※Dとは、時点tと時点t+nの差を計算する時のnを指す。【Season】

※p,d,qは、p次ARモデル、d階差分系列、q次MAモデルを表す。

 

■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■SARIMAモデルの構築■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■■■

 

model = SARIMAX(train['Production'],order=(1,1,0),seasonal_order=(0,1,1,12))
results = model.fit()
results.summary()

上記を実行した結果、下記となった。

・・・統計の知識が不足しているせいか、実に難解だ。

まずは、これを読み解きたい。

 

Statespace Model Results

状態空間モデルの結果

Dep. Variable:

変数

Production

No. Observations:

レーニングデータ数

142

Model:

モデル

SARIMAX(1, 1, 0)x(0, 1, 1, 12)

Log Likelihood

対数尤度

-445.603

Date:

実行年月日

Fri, 09 Jul 2021

AIC

赤池情報量規準

 

897.205

Time:

実行時分秒

13:43:57

BIC

ベイズ情報量規準

 

905.785

Sample:

データの範囲

01-01-1962- 10-01-1973

HQIC

???

900.691

Covariance Type:

共分散タイプ?

opg

outer product of gradients

   

AICとBIC?情報量基準とは? – Miidas Research

AICは、モデルの当てはまり度を表す。値が小さい程当てはまりが良い。

BICは、多くの項目を含むとペナルティを課す。

情報量規準が小さいモデルを選ぶとよい。

 

◆重みのP値は0.05よりも低いため、モデルにすべての係数を保持する

 

coef

係数

std err

標準偏差

z

 z値

P>|z|

 P値

[0.025

95%

0.975]

信頼区間 

ar.L1

 AR変数

(1個の時間ステップ遅れ?)

-0.2728 0.087 -3.149 0.002 -0.443 -0.103

ma.S.L12

MA変数

(12個の時間ステップ遅れ?) 

-0.6158 0.086 -7.163 0.000 -0.784 -0.447

sigma2

分散?

56.0243 5.765 9.719 0.000 44.726 67.323

回帰分析のサマリの読み方 | CrossKnowledge (parallelcareerlab.com)

Python 3のARIMAを使用した時系列予測のガイド (codeflow.site)

Time Series Forecasting Using a Seasonal ARIMA Model: A Python Tutorial (techrando.com)

標準偏差係数の推定値の標準誤差。小さい値ほど精度が高い。

※P値:各係数の値が0である帰無仮説を検定した確率。5%以下であれば係数0以外と言えるか?

※z値:(目標値-平均値)/標準偏差。30を超える場合はz検定。分布は正規分布。値が大きい程意味がある説明変数であることを示している。

95%信頼区間:信頼区間を100回求めた場合、100回の内95回は信頼区間の範囲の中に真の値が含まれる。

※ar.L1やma.L1は、1タイムステップ遅れる。

※ar.S.L12やma.S.L12は、12タイムステップ遅れる。

 

Ljung-Box (Q):

 リュングボックス検定

24.06

Jarque-Bera (JB):

ジャグラーベラ検定 

40.04

Prob(Q):

0.98と高いので、

ランダムで

独立しているということか ?

0.98

Prob(JB):

0.00と低いので

尖度と歪度を

有していない

ということか? 

0.00

Heteroskedasticity (H):

分散不均一性検定 

1.12

Skew:

歪度 

0.86

左に偏っている

Prob(H) (two-sided):

0.71と高めなので

不均一

ということか?

 

0.71

Kurtosis:

 尖度

5.12

鋭いピークと長く太い裾

 ※Ljung-Box (Q):経過時間内における一連の観測値がランダムで独立しているかどうかを検定

※Jarque-Bera (JB):標本データが正規分布に従う尖度と歪度を有しているかを調べる適合度検定

※Heteroskedasticity (H):誤差項の分散が不均一かどうか確認するための検定

※Skew:歪度(分布が左右対称であるかどうかを示すもの)

※Kurtosis:尖度(正規分布と比較して、尖度が大きい場合は鋭いピークと長く太い裾を持つ分布となり、尖度が小さい場合は丸みがかったピークと短く細い尾を持つ分布)

 

Ljung-Box q(LBQ)統計量とは - Minitab

分散不均一性(Heteroscedasticity)検定 | Excel統計解析ソフトウェア (xlstat.com)

不均一分散の検定 | 統計用語集 | 統計WEB (bellcurve.jp)

3-5. 歪度と尖度 | 統計学の時間 | 統計WEB (bellcurve.jp)

---

 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■■■SARIMAモデルによる実行結果■■■■■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

 

テストデータに対して、それなりの精度でフィットしているように見える。

f:id:takanarukodou2:20210710165939p:plain

          図2.SARIMAモデルによる実測値と予測値

 

■■■■■■■■■■■■■■■■■■■■■■■■

■■■(番外編)時系列予測の完全ガイド■■■

■■■■■■■■■■■■■■■■■■■■■■■■

全然脈絡がないけど、なんかこれ凄そう。

ARIMA モデル - Python |における時系列予測の完全ガイドML+ (machinelearningplus.com)

 

■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■■■次回■■■■■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■■■

 

統計モデルをチェックするplot_diagnostics関数(残差を確認)の実行結果を

見ていきたい。

statsmodels.tsa.statespace.sarimax.SARIMAXResults.plot_diagnostics — 統計モデル

PythonによるSARIMAXモデルを使った「TVCMの効果検証」への挑戦 - LIFULL Creators Blog

定常時系列の解析に使われるSARIMAモデルとは? | AVILEN AI Trend (ai-trend.jp)

plot_diagnostics()メソッドの詳しい説明有り。

 

と言いながら、もうちょっと続いちゃう。。。

 

■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■■疑問点■■■■■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■■■

 

疑問点がぬぐい切れない。

階差系列が定常性を持つ場合であったとして、なぜ原系列のデータを使って、

SARIMAなどを利用できることになるのか?

以下の辺りについても見ていきたい。

 

つまり、階差系列が定常性を持つ場合は、時系列モデルを適応できると言えるのではないだろうか?

また、df.diff().diff(12)は、和分過程と言えるのだろうか?

 

---------------------------------------------------------------------------------

原系列が非定常である場合でも、例外的に時系列モデルを適応できるケースがある。そのケースとは、階差系列が定常性を持つ場合。言い換えると、単位根過程や和分過程に相当。

単位根過程は、1次の差分をとった階差系列が定常過程に従う時系列データ。

和分過程は、任意のd次階差系列が定常過程に従う時系列データ。

 PythonによるSARIMAXモデルを使った「TVCMの効果検証」への挑戦 - LIFULL Creators Blog

---------------------------------------------------------------------------------

 

---------------------------------------------------------------------------------

SARIMAモデルを適用したのは対数系列に対してであったため、指数を取って原系列に戻す。

定常時系列の解析に使われるSARIMAモデルとは? | AVILEN AI Trend (ai-trend.jp)

---------------------------------------------------------------------------------

 

---------------------------------------------------------------------------------

周期性や自己相関の残差が大きな値になっていると、予測モデルとしては使えない。

モデルの再考が必要である。

Pythonで時系列分析の練習(9)SARIMAモデルで未来予測|もものきとデータ解析をはじめよう (momonoki2017.blogspot.com)

---------------------------------------------------------------------------------