見出し画像

時系列データをpython【#2.4】ARモデル→やっと理解できた

以下の本から時系列データの部分を勉強しましたので、少しここに書こうと思います。※アフェリエイトはしていません。でもこの本はすごくいい本なので、これで知識を増やす、勉強するのはいいことだと思います。(アフェリエイトではなく、自分の一生ものの能力をつけるために約3000円でこの本を買って、月給3000円上げようというモチベーションです。)

前回「ARモデル(Autoregressive model)」を理解できずに頓挫していました。そのあと、理解が深まる本を探し↑の本にたどり着きました。第11章に自己回帰ARモデルに関して載っていたので、それを見て学びました。

本をたぶん理解できたので、ChatGPT3.5を使ってさらに理解を深めていきます。

ChatGPT3.5の回答(ARモデルの式)

次に、Φは自己相関係数ということで、これに関してもう少し理解を深めていきます。

自己相関係数が係数

ということで、ARモデルの各項の係数は、自己相関係数を計算すればいいということがわかりました。ということで、ChatGPT3.5が言っていることが正しいのか簡単な例で確認してみます。

サンプルもChatGPT3.5に作ってもらいましたが、回答が微妙だったので検算用のコードだけ示します。

自己相関=係数をじかに計算した

1桁の数字で7つのデータを作成してもらいました。これをラグ2で手計算しました。14行目をChatGPT3.5は間違えて、分母をstd_dev_1 * std_dev_2にしていたので、本を参考に修正しました。その結果が、-0.79です。このあとstatmodelsを使った場合の結果を示します。

statsmodelsで同じように自己相関係数を計算した
7つの点で構成された時系列データのサンプルとそのデータのラグ2

ラグ2だと0,1に黄色の点線に数値は入らないハズが、5,6の値が入っているので、勝手に補間したようです。計算にはたぶん影響はなかったと思います。↑のようにstatsmodelsと同じ結果になったので。

モデルのサマリ

ModelはAutoReg(ラグ)で、条件付き最尤推定法を使っているということあたりがわかりそうですが、自己相関係数とy.L1、L2と定数のあたりが理解できません。ChatGPT3.5に確認すると、

ChatGPT3.5の回答

L1,L2は遅延項と呼ばれる係数のようです。さらに質問を続けます。

ChatGPT3.5の回答

やっと出てきました。自己相関係数かけて、答えとなるyとの差を求めていく。そうすると、L1に収束するということのようです。収束をさせる方法=最適化アルゴリズムに最尤推定法を使ってるっぽいです。さらにChatGPT3.5に質問します。

ChatGPT3.5の回答

http://www.mi.u-tokyo.ac.jp/mds-oudan/lecture_document_2019_math7/%E6%99%82%E7%B3%BB%E5%88%97%E8%A7%A3%E6%9E%90%EF%BC%88%EF%BC%96%EF%BC%89_2019.pdf

上記URLのp.30を見ると、最小二乗法の式を書いてくださっています。

時系列解析(6)の資料から抜粋

これは、、、↓の本のp.116に書いてある閉形式解(closed-form solution)と同じではないか→すなわち、最小二乗法などの最適化アルゴリズムを使わずに一発で答えを出せる可能性があるってことです(あんまり理解してないけど式が似てて、近くに最小二乗法というキーワードがあったら、そういってるだけ)。

pythonのnumpyのarrayとか書き方がわからないので、ChatGPT3.5に書いてもらいます。

ChatGPT3.5の回答

ChatGPT3.5に↓のように閉形式解での回答を依頼するも、「できない」と一蹴される。

ChatGPT3.5にも一蹴される

でも、閉形式解を自分で解いてみる(↑の機械学習の本を参考にしている)。

閉形式解で解いてみる

閉形式解で解けた。13.1(定数項)、-1.1がy.L1、-0.8がy.L2の係数です。↑の.summary()と同じ結果になりました!(奇跡)本当は、↓の共分散の条件も理解しないといけませんが、できていません、、、、

自己回帰モデルの共分散の条件

数式のあたりで自分の言葉で理解しようとすると、ラグが2のときは、左辺y=3…7を求めるには、右辺はy=1…5までを使う必要がある。で、いつものように、定数項(ノイズ部分?誤差の部分?)があって、求めたい係数は、最小二乗法とかで求める(今回は閉形式解で求めた)。
機械学習だと、左辺は答え(理想の答え)で、右辺は理想に近づけるための材料で、説明変数と係数です。

もうちょっと、、、もうちょっとで自分の言葉で言える。
たとえば、機械学習は、左辺が体重で、右辺が身長と年齢、それぞれに掛ける係数を試行錯誤(最小二乗法とか)で変えていく。
時系列データの場合は、左辺が今日の体重で、右辺が昨日とか一昨日の体重で、それぞれに掛ける係数を試行錯誤(最小二乗法とか)で変えていく。
これで自分の中で腑に落ちました(共分散の条件はあんまり理解していないけど)。

やっつけ仕事;
.summary()のcoefはcoefficientで係数、std errは標準誤差、zは標準化しているのかな?P>|z|はp-value(p値)、[0.025 0.975]は95%信頼区間かな?HQICはハンナン・クイン情報量基準らしいです。AIC、BICの仲間っぽいです。

-1.1がy.L1、-0.8がy.L2の係数で、どちらも負号だから、予測値下向きだったのか…

航空機乗客数のトレンドにARモデルを適用

(もうちょっとARモデルを考察するかも)

#python
#ChatGPT
#プログラミング初心者
#生成AI
#プログラミング教育
#GoogleColab
#時系列

この記事が気に入ったらサポートをしてみませんか?