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

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

【第1弾】Kubernetes学習【WindowsOSにコンテナインストール】

おれもITエンジニアの端くれ。

 

少しでも、IT技術を身に付けたい。

 

Kubernetesの知識を自分の脳に植え付けたい。

 

いや、むしろKubernetesになりたい。。。

 

言いすぎました。

 

ファーストステップとして、

 

「Dockerから入るKubernetes コンテナ開発からK8s本番運用まで」を購入。

15Stepで習得 Dockerから入るKubernetes コンテナ開発からK8s本番運用まで (StepUp!選書) | 高良 真穂 |本 | 通販 | Amazon

 

その思いから、コンテナの勉強を開始。

 

 

まずは、Udemy「米国AI開発者がゼロから教えるDocker講座」の受講開始。

 

実行環境がMacではないため、別の手順で環境を用意する必要がある。

 

 

下記の素晴らしいWebサイトを参照して、

 

Windows環境にDockerをインストールすることにした。

🐳WindowsでDockerを始める手順🐳 - Qiita

 

手順としては、

 

「WSL2のインストール」と「Docker Desktop for Windowsのダウンロード」

 

から構成されているようだ。

 

さあ、自分の新しい経験を始めてみようではないか。

 

手順1.WSL2のインストール(詳細は🐳WindowsでDockerを始める手順🐳 - Qiita

(1) LinuxWindows サブシステム有効化
(2) 仮想マシンの機能を有効
(3) Linux カーネル更新プログラム パッケージをダウンロードする
(4) WSL 2 を既定バージョンに設定
(5) Linux ディストリビューションをインストール

 Microsoft Storeから、「Ubuntu 20.04 LTS」をインストール。

(6)「Ubuntu 20.04 LTS」

 ここで、Ubuntuが起動できないエラーが発生!

 いや~、一筋縄で行くことって少ないんですよ!

 メッセージは下記。

 WslRegisterDistribution failed with error: 0x80370102
 https://qiita.com/gdrom1gb/items/70e8b9b0c309a5db4399

 

 さまざまな有識者サイトを見て周った結果、

 BIOSで、仮想化機能を有効にしていないこと原因という結論に至った。

 

 BIOSで、SVM Mode項目を、DisabledからEnabledに変更したことで成功。

   f:id:takanarukodou2:20210731162901p:plain

 

手順2.WSL2のインストール

 (1) Docker Desktop for Windowsのダウンロード

  f:id:takanarukodou2:20210731154821p:plain

 

 Docker Desktop for Windowsを起動後、下記を実行し、成功を確認。

  $ docker version

  $ docker-compose version

 

やっと、Udemy「米国AI開発者がゼロから教えるDocker講座」に戻れる。

 

以上です。

【濱野谷14年振りのSG制覇へ】SG第26回オーシャンカップ優勝戦【ベテラン勢の逆襲】

SG第26回オーシャンカップが芦屋競艇場で開催され、

 

明日7月25日(日)に優勝戦の火蓋が切って落とされる。

 

なお、最近はブログを更新が止まりつつあったため、

 

一番の大好きな趣味であるボートレース観戦ネタである。

 

白のカポック1号艇に乗艇するのは、「濱野谷 憲吾

 

モンキーターンの主人公のモデルになったことでも有名な強豪選手

 

濱野谷選手にとって、2007年総理大臣杯以来5度目の優勝が懸かっている

【芦屋ボート・SGオーシャンC】浜野谷憲吾が14年ぶりSG制覇に王手 舟足も万全! (2021年7月24日) - エキサイトニュース (excite.co.jp)

 

もし優勝することになれば、実に14年ぶりのSG優勝となる。

 

グランドチャンピオンでは、前本泰一選手(49)が優勝を捥ぎ取り、

 

オーシャンカップで、濱野谷憲吾選手(47)が優勝することになれば、

 

ベテラン勢の逆襲が始まったと言っても過言ではないと思う。

 

この勢いに乗って、次のモーターボート記念では、

 

いや、ボートレースメモリアルでは、

 

今垣光太郎選手(51)の10回目のSG優勝を

 

この目で見てみたいと本気で思っている。

 

今節のオーシャンカップには今垣選手が出場していたが、

 

初日から6を並べて大敗が続き、ボートレースダービーの出場権獲得も

 

夢のまた夢へと消えてしまった。

 

SGやG1は登録番号で言えば最も古参になる機会も多い。

 

若い時とは勝手が違うのは当たり前であるが、

 

52Kg制限になってからは、最近は鶏肉は特に意識して摂り入れ、

 

約1kgを筋肉を付けようと頑張っているとのコメントがあった。

今垣光太郎選手が登場!|ボートレース|植木通彦【ボートレース ウィークリー】12月28日(月)19時~生配信! - YouTube

 

モーターさえ完調に仕上げてしまえば、

 

2019年7月29日に優勝したG2第1回ボートレース甲子園のように、

浜名湖G2 第1回全国ボートレース甲子園 優勝戦12R「松井秀喜と同じ石川代表の5.今垣光太郎が5打席連続敬遠されずにサヨナラホームラン!!」2019/7/29 - Bing video

 

まだまだ輝きを放ち続けることはできるはずだ。

【意外と面白い?】これからの時代を生き抜くための生物学入門

今日も最幸の一日を過ごして参りました。

 

昼間の時間帯に、約3時間のお昼寝。

 

あ~久々の爆睡で、物凄く気持ちの良いものでした。

 

接骨院終わりの書店で見つけた生物学に関する本。

 

それは、「これからの時代を生き抜くための生物学入門」

これからの時代を生き抜くための生物学入門 | 五箇 公一 |本 | 通販 | Amazon

 

第3章「遺伝」で覚えたい内容を以下に示していきたいと思います。

 

・遺伝は、親から子へと世代を越えて形質が伝わること。

・遺伝子はDNA(デオキシリボ核酸)という物質。情報伝達物質。設計図。

・遺伝子の凄い点は、DNAを構成する4個の塩基(アデニン、グアニン、チミン、シトシン)の並び方だけで、遺伝情報がすべて司られていること。

・染色体は、DNAとタンパク質が繋がった紐状物質がらせん構造になって、詰まっている状態。

・DNAは、染色体となって細胞の核の中に収められている。

 

ところで、細胞の核とはなにか?

核は、細胞の脳。細胞に特有な働きの制御、細胞の成長や修復、再生などを司る。

 

もっと深掘りをして、細胞とは何か?

 

・細胞の内部には遺伝子を持った核と細胞質があり、それらは細胞膜(形質膜)で覆われている。

1個の細胞が分裂を繰り返しながら増殖し、その集合体が個体を作り出している。

・身体を構成する細胞はおよそ200種類。

 

核の役割は何?|細胞の構造と遺伝 | 看護roo![カンゴルー] (kango-roo.com)

生物はすべて細胞からできている|細胞ってなんだ(1) | 看護roo![カンゴルー] (kango-roo.com)

 

以上、ありがとうございました。

【第1弾】Facebook開発の「Prophet」で時系列分析に挑戦【LSTMとSARIMAと比較して扱いやすいのか?】

時系列データ分析に挑んでいる。自分にとっては夢がある。

 

これまで、LSTMとSARIMAを利用して「時系列データ分析」のスキル向上に励んできた。しかし、LSTMやSARIMAのモデル構築を、一から自分の手で構築することになった場合には、まだまだ実力不足な点は否めない。

 

「時系列予測は学問として大きな一分野。正確かつ安定的な予測を行うために、経験と知識の両方が必要。さらに、企業の中で使いこなすにはビジネス理解が不可欠。」といった解釈もあり、正直、素人が手を出す分野ではない気がする。

「Prophet」とは――Facebook製時系列予測OSSは何が便利なのか:非統計家が高精度な時系列予測を行えるProphet(前編)(1/2 ページ) - @IT (atmarkit.co.jp)

 

しかし、最近実務でよく使われ、とにかく使いやすいとされる、Facebookが開発した時系列予測のオープンソースソフトウェア(OSS)ライブラリ「Prophetを試してみたいと思う。

 

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

■■■時系列データは、アメリカンフットボールプレイヤーのWikiアクセス数■■■

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

 

レコード数は2904行。

2007年12月10日から2016年1月20日まで。

 

       f:id:takanarukodou2:20210713172621p:plain
      図1.アメリカンフットボールプレイヤーのWikiアクセス数
 

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

■■■■■■■■■■モデル構築、推測■■■■■■■■■■■■■■■

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

  

from fbprophet import Prophet
model = Prophet()
model.fit(df)
future_df = model.make_future_dataframe(365)
forecast_df = model.predict(future_df)
 

 

物凄く短い行数で、モデル構築から推論まで実現できている点に驚きを少し感じた。

make_future_dataframe関数は、予測した期間を追加したデータフレームが得られるとのこと。え~と、まったく理解できない。そこで、形を見てみることにする。

・future_df.shape:(3270,1)

・dfは、(2905,2)

make_future_dataframe関数の引数は、365

 

このことから、3270=2905+365という数式が見えてくる。

make_future_dataframe関数を実行することで、2016年1月21日から2017年1月19日までの365日が追加されていることが理解できた。

時系列解析ライブラリProphet 公式ドキュメント翻訳3(クイックスタート編) - Qiita

 

推論結果をプロットした結果は、下記のとおりである。

散布図が実測値になっているが、当てはまりが良さそうとのこと。

ただ、濃い青線と薄い青線は何を示しているのかが分からない。

どうやら、青い線が点予測の線(yhat)で、薄い青が信頼区間(yhat_lowerとyhat_upper)のようだ。

f:id:takanarukodou2:20210716220711p:plain

                図2 推論結果

 

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

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

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

 

モデル構築時のパラメータを指定した場合にどうなるかを見てみたい。

model = Prophet(daily_seasonality=False,
                weekly_seasonality=False,
                yearly_seasonality=True,
                holidays=event_df)

 

 

【第6弾】SARIMAで時系列分析に挑戦【構築したSARIMAモデルは妥当と言えるか?】

今日は有給休暇を取得して勉強に励む!、なんてことはない。

 

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

 

時系列データ分析への愛は忘れないはずw

 

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

 

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

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

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

 

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

 

f:id:takanarukodou2:20210706182147p:plain

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

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

■■■■■■■■■■SARIMAモデルをチェック■■■■■■■■■■■

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

 

統計モデルをチェックするplot_diagnostics関数(残差を確認)の実行結果を見ていくこととする。

plot_diagnostics()関数を実行した結果は以下のとおり。plot_diagnostics()関数は、残差の状況を参照して、逃しているトレンド(傾向)がないかを確認できる。

左上から、標準化残差、残差のヒストグラム、標準化残差のQQプロット、残差の自己相関。周期性や自己相関の残差が大きな値になっていると、予測モデルとしては使えず、モデルの再考が必要となる。

下記図を参照して、①残差のヒストグラムが通常の正規分布なので特別な傾向は見られない、かつ、②残差の自己相関を見る限り低い値に留まっていることから、 統計モデルとして、ほぼ問題がないと判断した。

※QQプロットは実測値と理想値(正規分布)をプロットしたもの。直線になっている場合、実測値は理想値に近く正規分布であると言える。

 

f:id:takanarukodou2:20210712202403p:plain

          図2.SARIMAモデルの妥当性(残差)チェック

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

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

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

 

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

■■■■■■■■■■未来予測■■■■■■■■■■■

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

 

results = model.fit()
pred_f = results.get_forecast(steps=60)
pred_ci = pred_f.conf_int()
ax = df.plot(label='Production', figsize=(147))
pred_f.predicted_mean.plot(ax=ax, label='Forecast')
ax.fill_between(pred_ci.index,
                pred_ci.iloc[:, 0],
                pred_ci.iloc[:, 1], color='k', alpha=.25)

 

・get_forecast関数は、学習データの範囲外の予測を行うもの。get_forecast関数の引数stepsは、整数の場合、サンプルの最後から予測するステップ数(60個)。

・conf_int関数は、信頼区間(区間予測)。

・predicted_mean関数は、予測の期待値。

・fill_between関数は、区間予測の描画。

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

statsmodels.tsa.arima_model。ARIMAResults.conf_int — 統計モデル

f:id:takanarukodou2:20210712221441p:plain

               図3.未来予測

 

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

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

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

 

正直、SARIMAを理解しきれたかというと怪しいが、

次は、Facebookが開発した時系列予測のオープンソースソフトウェア(OSS)ライブラリProphetを利用してみたい。

 「Prophet」とは――Facebook製時系列予測OSSは何が便利なのか:非統計家が高精度な時系列予測を行えるProphet(前編)(1/2 ページ) - @IT (atmarkit.co.jp)

 

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

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

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

まだ、この文章は残しておいて、いつか読みたい。

でも、いつ読むのか?

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

 

【第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)

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

 

【第4弾】SARIMAで時系列分析に挑戦【SARIMAモデルで利用するパラメータの推定】

雨模様がずっと続いているが、

 

SARIMAを利用して、時系列データ分析に挑戦中である。

 

ADF検定で帰無仮説を棄却できたため、

 

今回は、SARIMAモデルの構築の前準備として、

 

SARIMAモデルで利用するパラメータの推定を行う。

 

さあ、今日もほんのわずかでも前進していきたい。

 

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

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

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

 

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

当然ですが、データは前回と同じでございます。

 

f:id:takanarukodou2:20210706182147p:plain

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

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

■■■■■SARIMAのパラメータ推定■■■■■■

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

 

 model = 
 pm.auto_arima(df['Production'], 
 d=1,       d個分離れた階差(差分)【OK】
 D=1,       D個分離れた季節性差分【OK】
 seasonal=True,  Seasonal ARIMAに適合するかどうか?【OK】
 m=12,       各季節の期間数(四半期の場合は 4、月次の場合は 12)【OK】
 trend='c',    トレンド(傾向) ※(cは傾向有、ncは傾向無?)【OK】
 start_p=0,    pの開始値ARモデルの次元数?【OK】
 start_q=0,    qの開始値、MRモデルの次元数?【OK】
 max_order=6,   p+q+P+Qの最大値(モデル選択がステップワイズでない場合)【OK】
 test='adf',    定常状態の推定に利用する単位根検定の種類(ADF)【OK】
 stepwise=True,  ステップワイズを用いて最適なモデルパラメータを特定するか【OK】
 trace=True)   デバッグ情報を出力するかどうか【OK】

pmdarima.arima.auto_arima — pmdarima 1.8.2 documentation (alkaline-ml.com)

Python と自動 ARIMA を使用して季節時系列の|を予測するホセ・マルシャル・ポルシージャ・|中程度 (medium.com)

じっくり学ぶ時系列解析~ARIMAの予測と季節調整SARIMA編~ - 医療職からデータサイエンティストへ (medi-08-data-06.work)

[Python] ARIMA/SARIMAによる時系列データの予測 (fc2.com)

ARIMAモデル(自己回帰和分移動平均モデル)について分かりやすく解説! | AVILEN AI Trend (ai-trend.jp)

※ステップワイズ:説明変数の中で、 目的変数と関係する変数を”自動”で選択する方法

※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モデルの構築の前に、パラメータを推定する。

 何のパラメータか?

 進めながら理解しているので当然現時点ではまったくわかっていない。

 auto_arima関数は、モデルに最適なパラメータを特定するもの。

 まずは、auto_arima関数の各引数の意味を理解していきたい。

 公式のドキュメントを参照しても、引数の大変の意味を捉えられない。

 さて、どうしたものか?

 気を取り直して、有識者の見解を参照した。

 上記に結果は反映済みだが、何となく意味が理解出来てきた。

 

 なお、auto_arima関数自体については、SARIMAモデルに必要な、

 最適なパラメータを算出する関数であることが判明した。

 パラメータは下記に示す合計7個(①の3個、②の4個)。

 ---

 ①ARIMAは以下の3個パラメータを適切に決める必要がある。

  ・p(p次元のAR(自己回帰)モデル)

    ※どれくらい過去のデータ数を利用するか

  ・d(d階差分系列)

   ※時点tと時点t+nの差を計算する時のnを指す 

  ・q(q次元のMA(移動平均)モデル)

   ※平均を計算する際に考慮するデータ数

 ②SARIMAは、ARIMAに加えてseasonal_orderというパラメータを決める必要がある。

  seasonal_orderは4個の引数を持つ。

  ・P:どれくらい過去のデータを利用するか。

   p=2の場合、時点tの予測に時点t-1と時点t-2を利用。

  ・D:定常状態に変形する時に用いるパラメータ。

   時点tと時点t+nの差を計算する時のnを指す。通常は、0,1,2のいずれか。

  ・Q:過去の予測と観測値の違い(残差)のデータをどの程度利用するか。

   q=2の場合、1個前のresidualと2個前のresidualを使用する。

  ・M:frequency年間の観測回数。周期が発生する間隔。

  ---

※ARモデルは、ある時刻tの値を、時刻tより古いデータを使って回帰するモデル

※回帰とは、Y = f(X) というモデルにあてはめること

 時系列解析 その4 | 獣医 x プログラミング (jpn.org)

 

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

■■■■■■推定されたパラメータ■■■■■

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

 

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

 

 今まで学習したことをより踏まえると、ARIMA(p,d,q)(P,D,Q)[M]より、

 pは1、dは1、qは0、

 Pは0、Dは1、Qは1、Mは12となった。

 これらのパラメータを利用して、SARIMAのモデルを構築する。

 

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

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

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

 

 ついに、SARIMAのモデル構築のフェーズに突入する予定。

 

【第3弾】SARIMAで時系列分析に挑戦【差分を取った系列で再度ADF検定へ】

昨日と同様、SARIMAを利用して、時系列データ分析に挑戦中である。

 

今回は、差分を取った系列に対して、ADF検定を実行して、

 

時系列データが単位根を持つかどうかの帰無仮説を棄却したい。

 

さあ、今日も一歩でも前進していきたい。

 

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

 

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

データは前回と同じです。

 

f:id:takanarukodou2:20210706182147p:plain

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

■再び、ADF検定へ

 時系列データが単位根を持つかどうかの仮説検定を指す。

 今回は、差分を取った系列に対して、ADF検定を実行することとする。

 「df_diff = df.diff().diff(12)」

 結果を抜粋すると、「1963-02-01 "-6.0"」となっているが、

 プログラムが存在するがこれはどのような計算になっているかを

 究明していきたい。究明するというと大げさだけど。。。

 

■「df.diff()」の調査

 まずは、「df.diff()」のみを見てみたい。 

 結果、「1963-01-01 Nan」、「1963-02-01 "-28.0"」となっている。

 ちなみに、1963-01-01の生産量は【589】、1963-02-01の生産量は【561】である。

 つまり、"-28.0"は、「1963-02-01の生産量」から「1963-01-01の生産量」

 を引いたものであることが分かる。

 ※こんな簡単なところを述べているブログは決してないと思われる

 このことから、「df.diff()」は、1か月分(1個分)ずらして差分を取ったもの

 だということが分かった。

 

■「df_diff = df.diff().diff(12)」の調査

 これは、「1か月分(1個分)ずらして差分を取った系列」を利用している。

 (12)はおそらく、12か月分(12個分)ずらすという意味だと解釈した。

 もう一度結果を見てみると、「1963-02-01 "-6.0"」だったので、

 "-6.0"は、「1963-02-01の生産量」から「1963-01-01の生産量」を引いたもの

 であることが分かった。やったぜ!

 >1962-02-01 -28.0
 >1962-03-01 79.0
 >・・・
 >1963-01-01 18.0
 >1963-02-01 -34.0
 

 もう一度、ADF検定をした結果、下記の通りとなった。

 >Test Statistic -5.038002
 >p-value 0.000019
 >#Lags Used 11.000000
 >Number of Observations Used 143.000000
 >Critical Value (1%) -3.476927
 >Critical Value (5%) -2.881973
 >Critical Value (10%) -2.577665

 

  p値が0.019%であり、閾値(5%または1%)より低い値のため、

 帰無仮説は棄却され、時系列は定常的と言える。やったぜ!!

 

 ※実行結果の出力は、Test StatisticとCritical Valueを比較して結果を確認する。

 ※Test Statistic(-5.04)は、Critical Value(1%)「-3.48」を下回っている。

 ※そのため、「非定常である」という帰無仮説を棄却できたと言える。

 

■「df_diff = df.diff().diff(12)」の疑問点

 なぜ、差分を取って、さらに差分を取るのだろうか?

 

 >「df.diff()」は、1か月分(1個分)ずらして差分を取ったもの

  ※1個前の値との差を取った後の系列を階差系列と呼ぶ。

  ※階差系列はトレンドを取り除いた状態にある。

  ※SARIMAは、ARIMAモデルをさらに季節周期を持つ時系列データ

   に対しても拡張が可能なモデル。

  【SARIMAで時系列データの分析】コンビニの売上を予測してみた! | と〜げのブログ (toge510.com)

 

 ちなみに、 p値が3.00%であり、閾値(5%)より低い値のため、

 帰無仮説は棄却され、時系列は定常的と言えると判断。

 >Test Statistic -3.054996
 >p-value 0.030068
 >#Lags Used 14.000000
 >Number of Observations Used 152.000000
 >Critical Value (1%) -3.474121
 >Critical Value (5%) -2.880750
 >Critical Value (10%) -2.577013

 

■次回

 SARIMAのモデル構築に入っていく。

【第2弾】SARIMAで時系列分析に挑戦【自己相関(ACF)と偏自己相関(PACF)】

SARIMAを利用して、時系列データ分析に挑戦中である。

 

さあ、始めよう!

 

 

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

 

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

 

f:id:takanarukodou2:20210706182147p:plain

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

■自己相関(ACF)と偏自己相関(PACF)

・自己相関(ACF)

 過去の値が、現在の値に対して、どの程度影響しているかを示すもの。

・偏自己相関(PACF)

 

 特定の時点同士のみの関係性に着目できる指標。

 例えば、本日と2日前の関係には間接的に1日前の影響が含まれる。

 しかし、偏自己相関を使うことによって、1日前の影響を除外して、

 本日と2日前のみの関係性を調べることが可能となる。

f:id:takanarukodou2:20210707203458p:plain

         図2.自己相関(ACF)と偏自己相関(PACF)

 

■ADF検定

 時系列データが単位根を持つかどうかの仮説検定を指す。

 差分値が定常過程であることを確認する必要がある。

 その事実を確認しなければ、ARIMAモデルを使うことはできない模様。

  Test Statistic -1.303812

  p-value 0.627427 -> 【62.7%】

  #Lags Used 13.000000

  Number of Observations Used 154.000000

  Critical Value (1%) -3.473543

  Critical Value (5%) -2.880498

  Critical Value (10%) -2.576878

 

  p値が閾値(5%または1%)より低い場合は、帰無仮説を棄却し、

 時系列は定常的と言える。 

 上記は、原系列のまま適用した結果である。

 見てみると、p値は62.7%!

 ※実行結果の出力は、Test StatisticとCritical Valueを比較して結果を確認する。

 ※Test Statistic(-1.30)は、Critical Value(5%)「-2.88」を下回っていない。

 ※そのため、「非定常である」という帰無仮説を棄却できない。

 基本的に、時系列データは原系列のままADF検定に当てはめたとしても、

 帰無仮説は棄却できないとのこと。

【python+株価+statsmodel】ARIMAモデルでダウ平均株価を解析してみた - ころがる狸 (dajiro.com)

【Python】「ADF検定」で時系列データの定常性・単位根を確認する | ミナピピンの研究室 (tkstock.site)

 

■次回

・差分を取った系列に対して、ADF検定を実行してみたい。

 df_diff = df.diff().diff(12)を実行した結果は、

 「1963-02-01 "-6.0"」となっているが、どのように計算しているのか?

※diff関数は、指定された軸に沿ってn番目の離散差を計算するもの。

【第1弾】SARIMAで時系列分析に挑戦【月別牛乳生産量の見える化から開始】

LSTMを利用して時系列データ分析に挑戦していたが、

 

今回からは、「SARIMA」を利用することにした。

 

ARIMAは、機械学習でもない従来からあった時系列データ分析の手法であるが、

 

そこそこの精度が出るため、ビジネスでもよく利用されているとのことだ。

 

最終的な目標は、LSTMとの精度を比較とする。

 

それでは本題に入りたい。

 

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

 

約60年前のデータではあるが、月別の牛乳生産量を用いる。

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

 

f:id:takanarukodou2:20210706182147p:plain

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

■原系列、傾向変動、季節変動、不規則変動 (残差)に分解

原系列を基本成分に分解するために、seasonal_decompose() 関数を利用する。

・傾向変動(トレンド)は中長期的な増加・減少の変化

・季節変動は周期的な変化(例え:1 年)

・不規則変動は前者2個の変動に当てはまらない変化

Python: statsmodels で時系列データを基本成分に分解する - CUBE SUGAR CONTAINER (amedama.jp)

※さくっとトレンド抽出: Pythonのstatsmodelで時系列分析入門 - Gunosyデータ分析ブログ

f:id:takanarukodou2:20210707000529p:plain

       図2.原系列、傾向変動、季節変動、不規則変動 (残差)

 

■次回

下記項目と自分の将来を見つめていきたい。

ん、、、自分の将来はここで見つめなくても良いのでは?

 
・pivot_table関数を利用して、月別牛乳生産量の可視化