時系列分析に用いられるARIMAモデルを使ったコーン先物価格の予測をした際のコードを紹介しています。
必要なライブラリーのインポート
学習データとテストデータに分割
時系列分析においてまず行うことは、データを以下の理由で学習データとテストデータに分解します。
時間的な依存関係のモデリング
時系列データには、過去のデータが未来のデータに影響を与えるという時間的な依存関係があります。
その依存関係を正確にモデル化するために、学習データとテストデータを時間的な順序に従って分割します。
学習データの役割は過去のデータでのモデル学習、テストデータは学習されたモデルのパフォーマンスを評価するために使用されます。
未知のデータへの汎化性能の評価
時系列データ分析の目的は、未来のデータポイントを予測することです。
既存のデータを学習データとテストデータに分けることで、モデルが未知のデータに対してどれだけ一般化できるかを評価することができます。
またテストデータは、モデルの予測精度や予測誤差を評価するために使用されます。
異なるモデルとの比較と改善
学習データとテストデータの分割することで、異なるモデルやアルゴリズムを比較することができます。
つまり異なるモデルを用いて学習データとテストデータでの評価を行うことで、最も優れたモデルを選択、必要に応じて改善することができます。
時系列データの分割方法としては、通常、時間的な順序に基づいて分割します。
例えば1ヶ月単位のデータなら、最後の3か月をテストデータ、残りを学習データに割り当てるなど、データの種類や分析の目的に沿ってデータを分割します。
モデルの検討
では実際に、モデルの検討を行ってみようと思います。
今回検討するモデルはARIMAモデル。
ARIMAモデルとは
ARIMA(自己回帰和分移動平均)モデルは、時間系列データの予測や分析に使用される統計的なモデルで、3つの主要な要素で構成されています。
- 自己回帰(Autoregressive, ARモデル):過去の観測値と現在の値との間の関係を表す自己回帰項であり、現在の値が過去の値に依存していると仮定します。
- 和分(Integrated, I):データの差分をとる操作であり、データのトレンド成分を取り除くために使用されます。
- 移動平均(Moving Average, MAモデル):MAモデルは、過去の予測誤差の移動平均を表す移動平均項で、予測誤差が過去の誤差に依存していると仮定します。
これらの要素を組み合わせて、ARIMAモデルは次のように表されます:ARIMA(p, d, q)。ここで、pは自己回帰項の次数(lag order)、dは和分の回数、qは移動平均項の次数を示します。
ARIMAモデルは、過去のデータの特性を考慮しながら将来の値を予測する手法であり、さまざまな分野で応用されています。
ARIMA モデル
では、実際に分割したデータをARIMAモデルに当てはめてみましょう。
ARIMAモデルの最適パラメーターはARIMA(0,1,0)(0,0,1)[12]と計算されました
各パラメータの意味は以下の通り。
ARIMA(p, d, q)(P, D, Q)[s]
- p: 自己回帰項(Autoregressive)の次数(lag order)
- d: 和分(Integrated)の回数
- q: 移動平均項(Moving Average)の次数
- P: 季節性自己回帰項(Seasonal Autoregressive)の次数(lag order)
- D: 季節性和分(Seasonal Integrated)の回数
- Q: 季節性移動平均項(Seasonal Moving Average)の次数
- s: 季節性の周期(例えば、12なら月次データの場合の12ヶ月周期)
したがって、パラメーターARIMA(0,1,0)(0,0,1)[12]の意味は、次のようになります:
- 自己回帰項(AR)の次数:0(自己回帰項(Autoregressive, AR)の次数が0であることは、ARIMAモデルにおいて自己回帰項が存在しないことを意味します。)
- 和分(I)の回数:1(ARIMAモデルにおいてデータに1度差分を適用していることを意味します。)
- 移動平均項(MA)の次数:0(移動平均項(Moving Average, MA)の次数が0であることは、ARIMAモデルにおいて移動平均項が存在しないことを意味します。)
- 季節性自己回帰項(SAR)の次数:0(季節性自己回帰項(Seasonal Autoregressive, SAR)の次数が0であることは、ARIMAモデルにおいて季節性自己回帰項が存在しないことを意味します。)
- 季節性和分(SI)の回数:0(季節性和分(Seasonal Integrated, SI)の回数が0であることは、ARIMAモデルにおいて季節性和分が行われていないことを意味します。
- 季節性移動平均項(SMA)の次数:1(季節性移動平均項(Seasonal Moving Average, SMA)の次数が1であることは、ARIMAモデルにおいて季節性移動平均項が1つ存在することを意味します。)
- 季節性の周期:12(月次データの場合)
つまりこのモデルは、データの和分(一度差分を取る)と季節性移動平均項を考慮しており、自己回帰項や季節性自己回帰項は含まれていません。
ARIMAモデルを使った学習データテストデータの予測
以下、ARIMAモデルを使ってデータの予測をしてみました。
結果として、
- RMSE (二乗平均平方根誤差: Root Mean Squared Error) : 32.45
- MAE: (平均絶対誤差: Mean Absolut Error) 26.63
- MAPE: (平均絶対パーセント誤差: Mean Absolute Percentage Error) 0.044
モデルの誤差は実測値と比べても比較的少ないようです。
ではグラフでもモデルの精度を確認してみましょう。
モデルのグラフ化
以下のコードを実行し、学習データとテストデータが実データの動きとどれだけ近いかを見てみます。
グラフを見ると2023年初めの時点で実データが下がっているのに対し、予測データは逆に上がっていますね。
その後、実データと同じように下落傾向に入っています。
まとめ
以上コーン先物価格の分析に使用したARIMA モデルと、そのコードについてまとめてみました。
ARIMAモデルは経済や金融、マーケティングなどの様々な分野に応用されているモデルであり、最も汎用性が高いモデルの一つといえるでしょう。
時系列分析モデルは、一つのモデルを決め打ちするのではなく、いくつかのモデルを比較検討し最適なモデルを選ぶ方法が選択の幅を広げ、最適なモデルの選択につながると思います。
そのためにモARIMAモデルを選択肢の一つに加えることでより、時系列分析の最適化ができるのではないでしょうか。
関連記事

コメント