1. 季節イベントの需要予測は、なぜ外れるのか
母の日のような季節イベントは、通常月の需要予測より難易度が上がります。売上が特定の数日間に集中するうえ、毎年同じ曜日・同じ購買行動で動くとは限らないからです。
多くのEC事業者は、前年同時期の販売数に「今年は広告を増やすから1.2倍」「昨年欠品したから多めに」といった感覚的な補正をかけます。始めやすい方法ですが、前年比だけに寄せすぎるとズレが大きくなります。母の日の需要は日付そのものよりも「母の日の何日前か」「週末か平日か」「先行予約が何割入っているか」に影響されるため、前年の5月8日と今年の5月8日を単純比較しても購買タイミングは一致しません。この構造は季節商品の需要予測が外れやすい理由で詳しく整理しています。
本記事は、導入事例「母の日商戦の需要予測で精度99%を出した話」の続編です。事例が「何が起きたか」だとすれば、本稿は「どう再現するか」。予測誤差1.2%という結果を、6つのステップに分解して示します。
2. モデルケースの前提(試算であることの明示)
本稿の数値は実在顧客の実績ではなく、すべてモデルケースによる試算です。前提は次のとおりです。
年商1.4億円規模のギフト系EC事業者。母の日・父の日・クリスマスなどの商戦が売上の山を作り、商戦対象SKUは60点。売上構成比の高い「主力商品A」「主力商品B」の2つで商戦売上の約45%を占め、残りはロングテールです。販売チャネルは自社ECとモール、日別販売データはExcelで集計している想定です。
従来の予測は前年比×担当者の感覚で、予測誤差は20〜30%。これを6ステップで1.2%まで圧縮していくプロセスを、順に見ていきます。
3. ステップ1-2: データ整備と商戦期間の定義
最初の仕事は予測計算ではなく、データを予測に使える形に整えることです。過去3年分の日別販売数をSKU別に並べ、欠品期間・大型セール・広告集中投下など「例外的な日」に印を付けます。欠品していた日の販売数は実力値より低く出るため、そのまま学習させると予測を引き下げてしまいます。
次にカレンダー補正です。母の日は毎年日付が動くため、カレンダー日付ではなく「母の日の何日前か」を軸にデータを並べ直します。これだけで3年分の販売カーブが重なり、比較可能になります。
そのうえで商戦期間を定義します。モデルケースでは「母の日の28日前〜当日+3日」を商戦期間とし、配送締切日を区切りとして前半(予約中心)と後半(駆け込み中心)に分けました。期間の定義が曖昧なままだと、後のステップで係数がぶれる原因になります。
このステップにかかる作業は、モデルケースの想定で延べ2〜3日。地味な工程ですが、事例記事で「精度99%」の土台になったのは高度なアルゴリズムではなく、このデータ整備でした。逆に言えば、ここを飛ばして予測式だけ真似ても、誤差はほとんど縮まりません。手元にデータがない場合は、まず今年の商戦から日別・SKU別の記録を残すところが第0歩になります。
4. ステップ3-4: ベース予測とイベント係数
ベース予測には、統計式による需要予測 実装ガイドで解説した加重移動平均と指数平滑を使います。直近の実績に重みを置いた加重移動平均で「平常時の実力値」を出し、指数平滑でトレンドを反映する。ここまではExcelの数式だけで実装できます。手法の全体像は「需要予測モデル3手法」の記事の整理が参考になります。
季節商戦で効くのは、このベース予測に掛けるイベント係数です。モデルケースでは3つの係数列を作りました。
第一に曜日補正。母の日直前の販売ピークは当日ではなく「配送締切前の平日」や「直前の金曜日」に来ることがあり、その年の曜日配置で山の位置が動きます。第二に予約進捗補正。過去3年の傾向で「14日前時点で最終販売数の約30%が予約として見えている」なら、今年の14日前の予約数から着地を逆算できます。第三に広告補正。投下予定の広告量を、過去の反応実績の範囲内で控えめに織り込みます。
モデルケースの試算では、14日前時点で主力商品Aの予約が前年比+15%、主力商品Bは前年並み、ロングテールは▲10%でした。全SKUに一律の前年比を掛けるのではなく、商品群ごとに係数を変える。この一手間が誤差を大きく削ります。
具体的には、主力商品Aのベース予測が日販40個の日に、曜日補正1.1(配送締切前の金曜)、予約進捗補正1.15、広告補正1.05を掛けると、予測は約53個になります。係数と言っても実体はExcelの3つの列であり、根拠になった数字(予約数・広告予定)を横に残しておけば、商戦後に「どの係数が外れたか」を振り返れます。この振り返りが翌年の係数精度を押し上げる、という循環です。
5. ステップ5-6: SKU階層別の分解と週次更新ループ
全体売上の予測が合っていても、主力商品が欠品しロングテールが余れば、利益とキャッシュは悪化します。そこでSKUを3階層に分けます。主力商品Aは日別で細かく追い、主力商品Bは週次更新で管理、残りのロングテール58SKUは個別に予測せずカテゴリ単位で予測して在庫配分だけSKU別に落とします。60SKUを同じ粒度で見ようとするとExcel運用では更新が続きません。精度に効く部分へ集中する設計です。
最後が週次更新ループです。予測は一度作って終わりではなく、商戦28日前から毎週、予約進捗と販売実績で係数を引き直します。更新のたびに見るのは3つだけです。予約の積み上がりが過去傾向のカーブから上下どちらに外れているか。広告経由の流入が想定レンジに収まっているか。主力商品A・Bの在庫残と入荷予定が最新の予測に対して過不足ないか。1回の更新作業は、フォーマットさえ固まっていれば1〜2時間で収まります。
発注・在庫配分の判断とセットで回す考え方は定点定量から予測型へ:在庫発注を変える5ステップで扱ったものと同じです。モデルケースでは、商戦中の更新を計4回行い、初回予測の誤差想定8%が、2回目で5%、3回目で3%と縮み、最終週の予測が着地に対して誤差1.2%に収まった、という試算になっています。精度は初回の一発で出すものではなく、更新のたびに寄せていくものだと分かります。
6. 誤差1.2%の内訳と、数字がもたらす効果(試算)
精度99%は目標ではなく、手順を整えた結果です。残る1.2%の誤差の主因は、天候による当日需要のブレと、モール側の想定外のキャンペーン露出でした(モデルケースの想定)。ここは事前にコントロールできない領域として、安全在庫で吸収します。
効果の試算はこうなります。欠品率は6%前後から1%台へ、商戦後の値引き処分・廃棄は商戦仕入の12%相当から3%程度へ圧縮。仕入の張りすぎが減ることで、商戦期の運転資金も約180万円軽くなる計算です(いずれもモデルケースの試算)。予測精度は売上の数字というより、欠品・廃棄・キャッシュという3つの出口に効きます。
もうひとつ付け加えたいのは、最初から誤差1.2%を狙う必要はないという点です。従来の誤差20〜30%が10%に縮むだけでも、欠品と値引き処分は目に見えて減ります。まずは経験則発注の最小実装の水準から始めて、商戦を1〜2回経るごとにステップを積み増していく進め方が、Excel運用の現場では現実的です。
7. まとめ: 再現のためのチェックリスト3点
母の日の需要予測で誤差1.2%という結果は、特別なツールや才能ではなく、データ整備→商戦期間の定義→ベース予測→イベント係数→SKU階層別分解→週次更新という順番の積み重ねで説明できます。同じ考え方は父の日・敬老の日・クリスマスにも横展開できます。
実務でのチェックリストは3点です。第一に、前年同日比較ではなく「母の日の何日前か」で比較できているか。第二に、主力商品A・主力商品Bとロングテールを同じ粒度で見ていないか。第三に、予測を一度作って終わりにせず、予約進捗と実績で週次更新しているか。この3つのうちどれか1つでも欠けていれば、そこが次の商戦で最初に手を入れるポイントになります。
S-Walletでは、この予測→発注→振り返りのループを、Excel運用から段階的に仕組み化できます。季節商戦のたびに「余るか欠品するか」を繰り返している場合は、一度ご相談ください。お問い合わせは/#contactからどうぞ。