)の影響を除いた相関の強さを示しています。細かな説明は参考文献をご参照いただくことにして、グラフから分かることを整理します。その前に、元データの式と1階差分データの式は下記の通りでした。自己相関係数(ACF)の確認をしましょう。ARのACFの特徴は、一つの項の影響が長期的に減衰しながら残ることです。ように考えてみると分かりやすいかと思います。このように、ある時刻のデータは、ずっと離れた時刻のデータから表すことができます。MAのACFの特徴は、MAの次数以降の項が0に近くなることです。同じ項を共有していないことが確認できます。このため、直接的な相関関係はない、と考えることができます。今回は、元データにARの項があり、差分データはMAのみになっているので、ともに期待通りのグラフになっています。次に、偏自己相関係数(PCAF)です。AR項の偏自己相関係数は、もともとARの式が次数pの過去の項から構成されていたので、次数pより後ろの項とのPCAFは0になります。一方で、MA過程は反転可能であればAR(∞)と書き直すことができることもあり、偏自己相関係数も無限に残ることになります。今回のグラフでは、両方ともMAの項を含んでいることもあり、急激に小さくなるのではなく、減衰していく様子が確認できます。続いて、単位根検定を行ってみましょう。その前に、ここで初めて単位根という言葉が出てきたので、まずは定義を確認します。朝倉書店より引用)要は、元のデータが非定常過程であり、差分系列が定常過程であるような系列が単位根過程です。今回は1階差分によって定常の式が得られるようにデータを作成したので、検定の結果、単位根過程である可能性を示せることを期待します。単位根検定を実施する背景には、データが単位根過程であるか、別の過程かによって、作成するモデルの特性や得られる予測が大きく異なってくることがあります。こちらも非常に重要なので、教科書をご参照ください。単位根検定にもADF検定、PP検定、KPSS検定など、いくつか種類があります。こちらも詳細は参考文献等をご参照ください。今回はADF検定を用いることにしました。ADF検定では、過程が単位根AR(p)であることを帰無仮説とした検定を行います。そのため、棄却されなければ単位根がないとはいえない、という結論になります。単位根検定の際は、仮説のモデルが定数項とトレンドを含むか考慮する必要があります。今回はデータを与えるモデルをこちらで決めていたので、モデル通りの、定数を含む場合での結果を示します。statsmodelsのadfullerはこちらを参考にしてください。documentationそれでは、元データへのADF検定を行いましょう。5938.189071549921)となりました。初めの値が検定値、2番目がP値です。期待通り、P値はおよそ0.966で、0.05よりも大きいので、単位根AR(p)過程でないとはいえないという検定結果が確認できました。今回は総当たり法でモデルの候補を探します。ちなみに、総当たりを用いずに、データからモデルを考える場合には、先ほどのACF、PCA、単位根検定などを利用して候補を考える方法があります。その場合は、次数が減衰する位置の確認や検定を組み合わせながら、モデルを考えていきます。(p≥1)が候補になりそうですね。総当たり法では単純に、様々なパラメータでモデルを作成し、AIC等を用いて有力だと思われるモデルを探します。1}の各パラメータの組み合わせを試すことにします。結果の確認のため、作成したモデルのAICを一つのデータフレームに集約させます。コードは下記の通りです。param_list))AICが低い順番に並べ変えた結果が下記の表です。それではこれらの4つの組み合わせに対して改めてモデルを作成し、結果を確認してみましょう。先ほどのパラメータを使用したモデルを再作成し、結果を確認します。良いモデルかどうかは、作成したモデルから出力される結果と実際の値との残差が、平均0、自己相関係数が全て0のホワイトノイズになっているかどうかで判断します。全ての自己相関係数が0かどうかを判断するには、Ljung-Box検定を使用します。いう帰無仮説を立てます。得られたP値から、P値が0.05より小さく、帰無仮説が棄却されれば、kまでの間の少なくとも一つは自己相関係数が0ではない。P値が0.05より大きく、帰無仮説が棄却されなかった場合は、kまでの間の全ての自己相関係数が0ではないとはいえない。いう検定結果を得ることができます。モデル作成結果の中にもLjung-Box検定の結果は記載されていますが、今回は明示的に検定を行うことにしました。検定の結果を見やすくするために、下記の関数を使用することにします。2)のモデルを再度作成し、結果を確認します。model202.fit(disp=False)print(result202.summary())出力結果は下記のようになりました。(complex-step).平均値と残差を用いたLjung-Box検定の結果を確認しましょう。0.023091残差の平均は0.8程度でした。k=10までのLjung-Box検定結果のP値はいずれも0.05より小さいので、自己相関係数のうち少なくとも一つは0ではないという検定結果となります。以上の結果から、このモデルは今のところ必ずしも良いモデルとはいえなさそうです。2)というパラメータの通り、差分を一度も取らないモデルである、ということも関係しているのでしょうか。2)の結果を確認します。0.164608残差の平均はおよそ-0.09、Ljung-Box検定ではいずれもP値が0.05よりも大きく、帰無仮説は棄却されていません。そのため、残差の自己相関係数がいずれも0ではないとはいえない、という検定結果になります。モデルとしては悪くなさそうですが、モデル作成時にConvergenceWarningが発生しています。mle_retvalsを確認するようにメッセージが出ているので確認しておきます。print(result012.mle_retvals)出力結果はこちらです。False}最後の'converged'がFalseになっています。最尤推定の最適化の際に収束性しないような問題がありそうです。1)の結果を確認します。0.230946平均はおよそ-0.12、Ljung-Box検定ではいずれもP値が0.05よりも大きく、帰無仮説は棄却されていません。そのため、自己相関係数がいずれも0ではないとはいえない、という検定結果になります。このモデルは、それほど悪くはなさそうです。1)でのモデル作成を行います。0.178801こちらも平均はおよそ-0.12、Ljung-Box検定でのP値はいずれも0.05より大きく、帰無仮説は棄却されません。よってこのモデルの残差はホワイトノイズに近く、ある程度良いモデルであることが期待できます。以上、4つのパラメータでモデルの作成と評価を行いました。最初に試したモデルのように、AICが最小の場合でも、必ずしも理想的なモデルになるとは限らないことも確認できました。パラメータによっては収束性に問題が発生する場合があることも確認できました。最後に、statsmodelsを使用した場合の予測を行ます。predictionの2種類の方法があります。one-step-predictionでは、すでにデータがある期間に対しては、データの予測に必要な過去のデータとしては実際のデータを使用します。predictionでは、モデルによって作成されたデータを利用して次のデータを予測します。詳しくは下記のドキュメントやチュートリアル等をご参照ください。http://www.statsmodels.org/dev/generated/statsmodels.tsa.statespace.mlemodel.MLEResults.get_prediction.html#statsmodels.tsa.statespace.mlemodel.MLEResults.get_predictionhttp://www.statsmodels.org/dev/examples/notebooks/generated/statespace_sarimax_stata.htmlそれでは、グラフを確認してみましょう。150])黒の実線が、今回モデル作成に使用したデータを示し、青の破線がはじめに分けておいた、モデル作成に使用していないデータを示します。predictionの平均値を示し、95%信頼区間をそれぞれ薄い赤、薄い緑で示しました。2種類の信頼区間がほとんど重なっています。一部信頼区間から外れていることを含め、この予想結果をどう評価するかは、状況によりけりといったところでしょうか。まとめPythonのstatsmodelsを用いてのモデル作りから予測までの一通りの流れを行いました。今回は単純なデータを対象にしましたが、扱った範囲だけでも、次数を試す範囲やモデル選択、モデルの解釈と、検討事項はまだまだ多い印象を受けました。現実のデータでは、季節項やトレンド項、あるいは外的な要因が入ってきたりと、更に難易度が上がっていきそうです。目的との兼ね合いも考慮しながら、取り入れていけるかどうか検討していきたいと思います。ブレインズテクノロジーでは「共に成長できる仲間」を募集中です。こんにちは、ブレインズテクノロジーの佐々木です。Translateで翻訳させてみ...こんにちは、ブレインズテクノロジーの桑原です。ブレインズテ...2018-06-07PythonでのARIMAモデルを使った時系列データの予測の基礎[前編]こんにちは。ブレインズテクノロジーの岩城です。Pipelinesを使ってみたImpulse開発チームの塚田です。)に関する取組みをご紹介します。Inc.または関連会社の登録商標およびサービス・マークであり、同社の許可に基づいて使用しています。reserved.ガートナーは、ガートナー・リサーチの発行物に掲載された特定のベンダー、製品またはサービスを推奨するものではありません。最高のレーティング又はその他の評価を得たベンダーのみを選択するように助言するものではありません。ガートナー・リサーチの発行物は、ガートナー・リサーチの見解を表したものであり、事実を表現したものではありません。ガートナーは、明示または黙示を問わず、本リサーチの商品性や特定目的への適合性を含め、一切の保証を行うものではありません。はてなブログをはじめよう!brains-techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。