Reading view

There are new articles available, click to refresh the page.

時系列予測を「当てる」より「使える」形にする――トレンド・季節性・外部要因の扱い方

時系列データのクセを見抜く――トレンド、季節性、構造変化

時系列予測の出発点は、「データは独立ではない」という事実です。今日の売上は昨日の売上と無関係ではなく、今週の利用数は先週の利用数とつながっています。これを無視して、ランダムにデータをシャッフルして学習・評価してしまうと、未来の情報が混ざり込み、見かけの精度が過剰に良くなることがあります。時系列で最初に守るべきルールは、過去で学んで未来で評価する、という当たり前を絶対に崩さないことです。

次に重要なのが、時系列には「形」があるということです。よく知られているのはトレンドと季節性です。トレンドは長期的な増減で、製品の成長や市場拡大のような要因が反映されます。季節性は周期的な揺れで、曜日、月、四半期、年次、さらには時間帯の周期が関わります。たとえばB2Bのアクティブユーザーは平日に偏り、週末に落ちることが多いです。ECはセールや給料日、年末年始の影響を強く受けます。アプリの利用は通勤時間帯にピークが来たりします。こうした周期は、モデルが勝手に学んでくれると思いがちですが、周期の長さや形は指標によって違うので、最初に可視化して“どう揺れているか”を掴むことが精度より先に重要です。

時系列で厄介なのは、トレンドや季節性だけで説明できない“構造変化”です。たとえば料金改定、UI刷新、大型キャンペーン、アルゴリズム変更、競合の参入、法規制、災害や社会的イベントなどがあると、指標の水準が段差のように変わることがあります。構造変化があると、過去の関係性がそのまま未来に続くという前提が崩れ、どんなモデルでも外しやすくなります。現場で「急に当たらなくなった」というとき、モデルのせいにする前に、指標定義の変更、計測の欠損、データの遅延、運用ルールの変更など、構造変化の候補を洗い出すのが近道です。

さらに、欠損や外れ値の扱いも時系列では重要です。欠損は「データが存在しない」のではなく「取れていない」ことが多く、計測障害を含んでいる場合があります。外れ値も、単なるノイズではなく、キャンペーンや障害など原因のあるイベントかもしれません。ここで安易に平均で埋めたり、機械的に除外したりすると、予測の目的とズレることがあります。たとえば障害検知やキャパシティ計画が目的なら、外れ値は学ぶべき重要な情報です。一方で通常時の需要予測が目的なら、異常値は別扱いして通常パターンを学ばせた方が安定します。つまり前処理は技術というより、目的と切り離せない設計です。

時系列予測で最初にやるべきことは、モデルを回すことではなく、データの形を理解して「何を当てたいのか」「どんな揺れを当てたいのか」「当たらないとき何が起きたら困るのか」を言葉にすることです。ここが曖昧だと、精度が良いのに役に立たない予測が生まれます。

手法の地図を作る――ベースラインから機械学習、深層学習まで

時系列予測の手法は多岐にわたりますが、実務での選び方は「複雑さの競争」にしない方がうまくいきます。まずは必ずベースラインを作ります。たとえば「直近値をそのまま未来に置く」「先週の同じ曜日の値を使う」「移動平均で滑らかにする」といった単純な予測です。驚くほど多くの指標で、これらは“そこそこ当たる”うえに、原因が説明しやすいです。ベースラインに勝てない高度なモデルは、運用コストをかける価値が薄いと判断できます。

次に、時系列専用の統計モデルがあります。代表例としてARIMA系や指数平滑があります。これらは過去の値の自己相関を捉えたり、トレンドや季節性を比較的素直に組み込めたりします。特徴は、短い系列でも動きやすく、パラメータが比較的解釈しやすいことです。ただし、多変量の外部要因を入れるのが難しい場合があり、外部要因が支配的な領域では限界があります。

トレンドと季節性を足し算で表現する加法モデルの考え方も有用です。曜日効果、年次効果、祝日などを成分として扱うことで、説明可能性を保ったまま予測できます。現場で「なぜその予測になったのか」を説明する必要が強いとき、こうした構造化されたモデルは強い味方になります。一方で、構造変化や突発イベントには弱いことが多く、イベント情報を別途入れる工夫が必要になります。

外部要因を積極的に使いたいときは、時系列を特徴量化して機械学習で回帰問題として解くアプローチが現実的です。たとえばラグ特徴量として「1日前、7日前、28日前の値」を入れたり、移動平均との差分、累積、休日フラグ、広告費、気温、価格、在庫などを特徴量にします。勾配ブースティングなどは非線形な関係を捉えやすく、外部要因が効く領域では強いことが多いです。ただし、特徴量設計を誤ると未来情報が漏れます。例えば「当日の売上」から作った特徴量を予測に使ってしまうなど、時間の矢印を逆流させるミスが起きやすいです。実務では、特徴量ごとに「いつ確定する情報か」を棚卸しし、予測時点で利用可能なものだけを使うルールが必要です。

深層学習の系列モデルは、長い依存や複雑なパターンを捉えられる可能性がありますが、データ量、安定性、説明可能性、運用コストの面でハードルが上がります。大量の系列があり、同じ構造が多くの対象に共有されるような問題では有効なことがあります。一方、単一指標を少量データで当てるだけなら、深層学習が必ずしも最適とは限りません。実務で大切なのは、最先端に飛びつくことではなく、目的・データ量・説明要件・運用体制の制約の中で、最も堅牢な選択をすることです。

評価指標も選び方が重要です。RMSEは大きな誤差を強く罰し、MAEは外れ値の影響を受けにくいです。売上のように大きなブレがあり、外れ値が重要な意味を持つ場合はRMSEが合うこともありますし、日次アクティブのように一定の誤差を継続的に減らしたいならMAEが扱いやすいこともあります。さらに、意思決定に直結するなら、誤差を金銭的損失に換算する指標に寄せるのも有効です。過剰在庫の損失と欠品の損失が非対称なら、左右対称な誤差指標だけでは不十分になります。

運用で勝つ――バックテスト、ドリフト検知、説明可能性

時系列予測を使える形にするためには、学習と評価のやり方を“時間に忠実”にする必要があります。具体的には、ローリング検証やウォークフォワード検証と呼ばれる方法で、学習期間を少しずつ進めながら未来を複数回予測し、実運用に近い形で性能を見ます。これにより「特定期間だけ当たっていただけ」という偶然を減らせます。さらに、予測の地平(1日先、7日先、28日先など)ごとに精度が大きく変わるので、どの地平が意思決定に重要かを先に決めて評価します。

次に、運用で必ず起きるのが“当たらなくなる”問題です。データの分布が変わるドリフトは、プロダクトの成長や市場変化で自然に起きます。ここで重要なのは、当たらなくなったときに原因を切り分けられる設計です。予測が外れたという事実だけでは、モデルが悪いのか、データが壊れたのか、外部ショックがあったのかがわかりません。実務では、データの到着遅延や欠損を検知するモニタリング、主要特徴量の分布変化を追うモニタリング、予測誤差の急増を追うモニタリングを分けて持つと、復旧が速くなります。

説明可能性も、使われる予測には欠かせません。現場が知りたいのは「明日売上がいくらか」だけではなく、「なぜそう見積もっているのか」「どの要因が効いているのか」「どれくらいブレるのか」です。そこで予測値とセットで、予測区間(不確実性の範囲)を出す価値があります。さらに、外部要因を使うモデルなら、寄与の方向性を示すことで、意思決定に使いやすくなります。例えば広告費を増やした場合のシナリオ、価格を変えた場合のシナリオなど、予測を“もしも”の計画に変換できると、単なる数当てから一段上がります。

運用を成立させる最後のコツは、予測の更新頻度と責任範囲を明確にすることです。毎日更新すべきなのか、週次で十分なのか。更新のたびにモデルを再学習するのか、一定期間固定するのか。予測が外れたときに誰が原因を見に行くのか。これらが曖昧だと、予測は置物になります。時系列予測は、モデルそのものより、運用設計が価値を決める領域です。堅牢なベースライン、時間に忠実な検証、ドリフトを前提にした監視、説明可能性、更新ルール。この五つが揃うと、予測は現場の意思決定に自然に組み込まれていきます。

❌