Vertex Forecast による時系列予測の精度を上げる裏技!AutoMLの限界を超えた話

「AutoML で色々試したけど、どうしても目標の精度に至らない」と悩んでいる方に朗報です。

今回は、Vertex Forecast (AutoML)を使って格段に予測精度をアップさせた裏技をご紹介します。

左がBefore、右がAfter

お題:とある飲食チェーンにおける売上予測

日別店別で  2022 年 12 月の予測値を出してくれというものでした。

  • 店舗数は約 1000 あり、いくつかの業態に分類される
  • 店舗ごとにモデルを作ってメンテ・運用していくのは非現実的なので 1 モデルでやってほしい
  • 飲食チェーンなので、季節性や曜日などが大きく影響する(土日祝日は売上大)
  • 使える過去データは 5 年分
  • コロナ後(2020年〜)は店舗戦略、メニューから客層まで大きく変わっている
  • 現状の運用では、担当者が過去データを見ながら手動で予測している

ひとまず過去 3 ヶ月(9〜11月)分の売上実績をトレーニング用のデータとしてモデル作成し、12月の売上を予測しました。

コロナの影響もあり、2020年以降の同月のデータを学習させても当たりにくかったです。過去記事でご紹介した、データ前処理やコンテキスト期間や予測期間の調整、階層予測、重み付けなど一通り試しはしたものの、目指す精度に至らず。階層予測は有効でしたが、他のパラメータ調整や前処理は少し良くなる程度、と言う印象。

加えて、年末はクリスマス、忘年会、大晦日など特殊な動きをする日が多く、モデルによる予測一発で当てるには限界があるなーと感じました。

これ(Before)を、どうやって After まで持っていったのかについて、以降でお話しします。

予測値を補正するための予測値

色々な条件でモデルを作成する中でわかったことが一つあり、それは「同条件で作成したモデルは外し方も似ている」という点です。

そこで、今回のお題である 2022 年 12 月の予測を行った時と、 2019 年 12 月の予測を行った時となら、外し方も似ているのではないかと推測。

以下のような手順①〜③を試みました。

① 2019 年 9 〜 11 月を学習データとし、2019 年 12 月を予測するモデルを作り、予測させる。
 同様に、2022 年 9 〜 11 月を学習データとし、2022 年 12 月を予測するモデルを作り、予測させる。

② 2019 年 12 月について、実績/予測=補正係数 を日別店別に算出

③ 2022 年 12 月の各予測値に②の補正係数をかける

なお、2019-12-01は日曜なのに対し、2022-12-01は木曜なので、週番号(全52)と曜日が一致するものでマッチングしました。

ただし、24、25日のクリスマスと、26 〜 31 日の年末はそれぞれ12月何日かでマッチングしています。(曜日成分よりもイベント成分の方が強いため※)
※クリスマス(24、25日)や、学校や会社も徐々に年末年始のまとまった休みを取り始める人も増えるため平日であっても通常の土日祝日の売上に近くなります。逆に大晦日(31日)は半休、全休のお店も多く、売上は減ります。

これが見事にハマり、営業の方が手動で作っていた予測値よりも精度の良い予測値を作ることができました。この方法は、Vertex Forecast (Auto ML)だからこそできた裏技だと思っています。

例えば人が「だいたいこれくらいだろ」と予測したものだと、外し方に法則や一貫性がなく、去年の外し方から逆算して今年の予測を補正するという方法も、今回ほどうまくはいかない気がします。

機械学習(AutoML)では、「なぜその予測値になったのか」はブラックボックスですが、モデルはアルゴリズムに従って作成されるので、「どういう時にどんな外し方をするのか」には必ず法則性・一貫性があります。そこがわかって補正できれば、個々の外した理由(なぜその予測値になったのか、は店舗や日付によってそれぞれなので)はさほど重要ではない、と思いました。

AutoML の限界とスクラッチ開発の必要性

Vertex Forecast というか、AutoML 全般に言えることですが、ノンコードで予測するということは、いじれるのは入力(学習)データとパラメータ設定のみで、高精度のモデルを作るのには限界があります。

色々試したけど目標の精度に到達できない、という場合は、スクラッチ開発を検討すると思いますが、専門知識のあるエンジニアがいないと自社開発は厳しいですし、ベンダーを選定するにしてもある程度の知識は必要なので、結構ハードルが高いと思います。

その辺の話は別記事にまとめてあるので、よかったら読んでみてください。

AutoMLの限界とは? スクラッチか AutoML かで悩んだら読む記事

まとめ

  • 個々の予測値の「なぜ当たった/外れたか」は重要ではない(ブラックボックスでOK)
  • Vertex Forecast (AutoML)では、一発の予測でバッチリ当てるには限界がある
  • Vertex Forecast は人と違って「予測の外し方、程度」に必ず法則があるので、補正も効きやすい