話題の記事

【書評】Pythonによる時系列予測

2024.01.01

こんちには。

データアナリティクス事業本部 機械学習チームの中村(nokomoro3)です。

冬休みの個人的課題図書(自習)として「Pythonによる時系列予測」を読み終えましたので、感想と振り返りを書いておこうと思います。

書籍情報

以下の書籍になります。

翻訳本であり原著は以下となります

概要

概要として本書に記載されていることと、記載されてないことを紹介します。

記載されていること(感想含む)

記載されていることは以下のようになっています。

  • 時系列タスクの説明
    • トレンド、季節性、残差という3成分に分けられることの説明
    • ランダムウォークという解けない問題の定義
  • 統計モデル
    • MA、AR、ARMA、SARIMA、SARIMAXの一連の統計モデルの紹介
    • 各モデルが順を追って説明されており、発展の過程が分かりやすい
    • 複数の時系列を推定する統計モデルVARにも説明
    • どのモデルを使うべきかどうか確かめる検定や自己相関関数の性質、判断フローなどにも触れられる
    • 実装は基本的にはstatsmodelsライブラリを使ったもの
  • Deep Learningのモデル
    • Deep Learningのモデルについても様々な種類(DNN、LSTM、CNN、LSTM + CNN、ARLSTM)を紹介
    • 実装は基本的にはKerasライブラリを使ったもの
  • 自動化ライブラリ
    • Prophetを例に自動化ライブラリを紹介
    • チューニングする際のパラメータも紹介
    • その他のProphet以外の自動化ライブラリにも触れてあり、今後の発展を得やすい
  • 豊富な演習問題
    • 章末の演習問題が豊富
    • キャップストーンとしてまとめの意味での章丸ごと演習と解説があり、手を動かして理解を進めやすい
  • 豊富なデータセットの紹介

特に序盤の統計モデルは、検定やモデル適用のフロー等の説明が丁寧にされており実用的だと感じました。

Deep Learningについては、もう少し詳しく知りたい方は別途書籍を参照する必要がありそうです。

また冒頭で解けない問題の性質についても説明されており、実務で機械学習として解けるかどうかの可能性を説明するのに非常に有用そうだと感じました。

全編を通して演習問題が多いため、社内でチュートリアルとして活用することも可能な印象です。

記載されていないこと

逆に記載されていないことは以下のようになります。

  • あくまでForcasting問題のみを取り扱う(原著題名は「Time Series Forcasting」)
    • 時系列データのクラス分類や異常検出は、こういうタスクもあるという紹介が20章でなされるのみ
  • 数式の突っ込んだ説明や数学的背景
    • 例えば、なぜその検定で判断ができるのか
    • ACF(自己相関関数)の傾向と適用可能なモデルとの関係性の証明など
    • 統計モデルの各係数がどのように求まるのか
  • VARの派生形
    • VARMA、VARMAXなどはstatsmodelsで実現可能ですが、同じフローで判断できるので省略されている可能性があります
  • その他の統計モデル
    • 指数平滑化やBATSモデル、TBATSモデルなどがstatsmodelsで使えることは紹介されましたが、中身は割愛されています。
  • 勾配ブースティング決定木による時系列予測
  • Deep Learningの細かい構造
    • 例えば、LSTMはゲートごとに複数の重みをもっていますが、そういった細かい構造の話までは触れられていません。

この辺りを期待する場合は別の情報源を参照する必要があると思います。

詳細

章立てと各章について

第1部 歳月人を待たず

  • 第1章 時系列予測
    • 時系列タスクの紹介や3成分から構成されることなどが紹介
  • 第2章 単純な未来予測
    • ベースラインとなる予測方法について紹介
  • 第3章 ランダムウォーク
    • 解けない問題としてランダムウォークを紹介
    • ADF検定とACF(自己相関関数)について説明
    • 非定常性について定義しその除去方法について説明

第2部 統計学的モデルによる予測

  • 第4章 移動平均プロセスのモデル化
    • MAモデルの紹介
    • ACFを使った次数の決め方の紹介
  • 第5章 自己回帰プロセスのモデル化
    • ARモデルの紹介
    • PACF(偏自己相関関数)を使った次数の決め方の紹介
  • 第6章 複雑な時系列のモデル化
    • ARMAモデルの紹介
    • AIC(赤池情報量基準)を使った次数の決め方の紹介
    • よく予測できているかを残差分析(Q-Qプロットやリュング・ボックス検定)する方法の紹介
  • 第7章 非定常時系列の予測
    • ARIMAモデルの紹介
    • 和分次数でモデル化する方法についての説明
  • 第8章 季節性の考慮
    • SARIMAモデルの紹介
  • 第9章 モデルへの外部変数の追加
    • SARIMAXモデルの紹介
  • 第10章 複数の時系列の予測
    • 双方向の関係性を考慮して複数の時系列データを同時に出力できるVARモデルの紹介
  • 第11章 キャップストーン:オーストラリアの抗糖尿病薬処方数の予測
    • 統計学的モデルの復習例題

第3部 ディープラーニングによる大規模な予測

  • 第12章 時系列予測のためのディープラーニング
    • ディープラーニングの優位性
    • モデルの種類(シングルステップ、マルチステップ、他出力)
    • 日付データを三角関数などでエンコードする特徴量エンジニアリングについて紹介
  • 第13章 ディープラーニングのためのデータウィンドウとベースラインの作成
    • データウィンドウの設計方法について紹介
  • 第14章 ディープラーニングの手ほどき
    • 単純な線形モデルと隠れ層をもつディープニューラルネットワークについての紹介
  • 第15章 LSTMで過去を記憶する
    • LSTMを用いたモデルの紹介
  • 第16章 CNNを使った時系列のフィルタリング
    • CNNを用いたモデルの紹介
    • LSTMの前段にCNNを用いるモデルの紹介
  • 第17章 予測を使ってさらに予測を行う
    • 出力系列を柔軟に変更できるARLSTMの紹介
    • DeepARなどの存在も軽く紹介
  • 第18章 キャップストーン:家庭の電力消費量の予測
    • ディープラーニングモデルの復習例題

第4部 大規模な予測の自動化

  • 第19章 Prophetを使った時系列予測の自動化
    • 自動化ライブラリをいくつか紹介(pmdarima、Prophet、NeuralProphet、PyTorch Forecasting)
    • Prophetの使い方を紹介
  • 第20章 キャップストーン:カナダでのステーキ肉の月間平均小売価格の予測
    • ここまでの復習例題
  • 第21章 さらなる高みを目指して
    • 予測がうまくいかない場合の対応
    • 時系列データを用いたその他のタスク(分類や異常検出など)
    • データセットの紹介

コード

ソースコードもGitHubで公開されています。ライセンスはApache License 2.0となっているようです。

本書で登場するデータセット

本書で取り扱われるデータセットを以下に列記しておきます。

お手持ちのタスクと書籍を照らし合わせる際のご参考になれば幸いです。

データセット ソース 取り扱う章
Johnson & Johnsonの四半期毎のEPS https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/jj.csv 1章、2章、7章(ARIMA)、8章(SARIMA)
GOOGLの毎日の終値 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/GOOGL.csv 3章(ランダムウォーク)
XYZ Widget Companyの製品売上高 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/widget_sales.csv 4章(MA)、7章(ARIMA)
小売店の週平均来店者数 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/foot_traffic.csv 5章(AR)、7章(ARIMA)
データセンターの帯域幅使用量 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/bandwidth.csv 6章(ARMA)、7章(ARIMA)
月間航空旅客数 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/air-passengers.csv 8章(SARIMA)、19章(Prophet)
アメリカのマクロ経済データセット https://github.com/statsmodels/statsmodels/blob/main/statsmodels/datasets/macrodata/macrodata.csv 9章(SARIMAX)、10章(VAR)
糖尿病治療薬の処方数 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/AusAntidiabeticDrug.csv 11章(まとめ)、19章(Prophet)
都市圏の州間高速道路交通量データセット https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/Metro_Interstate_Traffic_Volume.csv 12~17章(DeepLearning)
北京の奥体中心駅の大気環境を予測 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/Beijing_air_quality_Aotizhongxin.csv 12~17章(DeepLearning)
家庭の電力消費量 https://archive.ics.uci.edu/dataset/235/individual+household+electric+power+consumption 18章(まとめ)
メルボルンの毎日の最低気温 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/daily_min_temp.csv 19章(Prophet)
Google検索での「チョコレート」キーワードの人気度 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/monthly_chocolate_search_usa.csv 19章(Prophet)
ステーキ肉の月平均小売価格 https://github.com/marcopeix/TimeSeriesForecastingInPython/blob/master/data/monthly_avg_retail_price_food_canada.csv 20章(まとめ)

またその他のデータセットとして、本書の末尾で以下のページが紹介されていました。

まとめ

いかがでしたでしょうか。興味が湧いた方はぜひお手をとってご覧ください。

本書籍が少しでも気になっている方の参考になれば幸いです。