キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
DataRobot コミュニティ

時系列予測における小さい値の精度向上について

minoru_morioka
イメージセンサー

時系列予測における小さい値の精度向上について

現在、季節性のある時系列予測において、小さい値に対する精度向上に取り組んでいます。

該当時期へのウェイト適用と、最適化指標の変更を試したのですが満足な成果が得られていない状況です。

 

有効なアイデアをお持ちでないでしょうか?

目的変数のスケール変換を検討しているんですがどうなんでしょう。。

ラベル(1)
0 件の賞賛
6件の返信6
Isao
データサイエンティスト
データサイエンティスト

小さな値の誤差は私も正直いつも悩む所です・・。
いくつかアイデアをお伝えしますね。他の皆様も何か良い知見があればコメントをお願いできればと思います。

 

・最適化指標をRMSLE (Root Mean Squared Logarithmic Error)に設定します。
極端に値が大きいターゲットの影響を緩和できるのと、対数化しない場合に比べて誤差の割合を重視するようになるので、小さな値の誤差を減らすように学習しやすくなることが期待できます。上振れよりも下振れを重要視するようになるので、少し運用に注意が必要です。(外す際に高めに予測しやすくなります。)

 

・粒度を細くすることで、他と値のスケールを合わせます。例えば商品レベルでモデリングするのではなく、商品X店舗レベルでモデリングして事後処理で集約する形で組みます。スケール間が他の系列と揃うため、相対的に小さい数も当てやすくなることが期待されます。

 

・逆に粒度を粗くしてモデリングを行い、値が小さいデータを集約して数を増やします。この場合、例えば集計期間を通常より伸ばすなどが考えられます。日次データ売上であれば週次や月次に集計粒度を上げてしまうことで、数値がまとまって大きくなり、当てやすくなることが期待されます。

 

他にもアイデアありましたらぜひ皆様書き込みをお願いいたします。

yifu
データサイエンティスト
データサイエンティスト

・粒度を細くすることで、他と値のスケールを合わせます。

全体の粒度を小さい方に合わせることで、小さい値が当てやすくなる。
こちらのアイデアの延長線上で、すでに最適化指標を変更したのはありますが、粒度変更に合わせて、MAEとMAPEを最適化指標にすると、数値の変化がもっと敏感になる狙いで、もう少し小さい値が当てに行けるように動くのを期待しています。

Miogawa
データサイエンティスト
データサイエンティスト

この時系列が複数時系列か単時系列化によるかと思います。

複数時系列ならその系列だけ切り離すことや、層別モデリングを考えていくのが良いアプローチかと思います。

単時系列ならすでに出ていますが、RMSLEが比率重視になる学習で小さい値の誤差に敏感にはなります。

学習データの段階でも当たるのか予測だけ当たらないかにもよりますが、「季節性」と書かれているので検定の期間にその小さい値がそこまで出ていないなら、その小さい値の時期をうまく学習できていない可能性も考慮いただくといいかと思います。そもそも小さい値がどうして発生するのか、特定の期間だけなら検定時期を合わせるとうまくいくかもしれません。

minoru_morioka
イメージセンサー

アドバイスありがとうございます。

@Isao @yifu 粒度を変える発想はなかったです、ありがとうございます。粒度の変更には実務的なハードルがあるのですが検討したいと思います。小さくするほうで考えてみます...

@Miogawa ありがとうございます。複数時系列なのですが、どの系列でも同様の時期が小さくなる季節性があります。特定の時期なので、検定時期をあわせるアイデアいいと思いました。
取り組みのハードルも低いのでまずはそこから試してみます。

0 件の賞賛
minoru_morioka
イメージセンサー

試しにDataRobotの機能で目的変数を対数変換してみたのですが、少し効果ありそうな感じでした。

Miogawa
データサイエンティスト
データサイエンティスト

おお、素晴らしい。ちなみに検定を合わせるは最後は全期間学習はしていただくのが大事です。

  1. 検定を合わせて学習
  2. ハイパラを固定して全期間学習

スクショですが、前に検定箇所を合わせただけだと基本ウィンドウが前に戻る関係で学習データが減って精度が落ちたりしますが、そこからハイパラ固定して全量学習するとホールドアウト精度(狙いたいところの精度)を一気に高めることができます。

実際の運用では決まった季節性ならその時だけ別モデルを動かすというのが良さそうですね。チャレンジャーモデルとか使えばワンクリックで運用モデル切り替えれますし。

Miogawa_0-1646813749268.png

Miogawa_1-1646813770033.png