demand-forecasting について
販売履歴、季節性、仕入先のリードタイムを基に在庫需要を予測する、事業者向けガイドです。プラットフォーム別のツール選定と、補充計画の基本的な算出方法を扱います。
主な機能
- 01プラットフォーム別のツール選定
- 02販売履歴データの整備
- 03発注点と安全在庫の設定
- 04季節需要の計画
- 05補充案と発注書の確認
活用シーン
- 01慢性的な欠品や過剰在庫の調査
- 02季節的な需要増に向けた在庫計画
- 03補充案の自動化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill demand-forecastingインストール後、Claude Code で/demand-forecastingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
tile.jsonevals/database-schema-new-product-fallback-and/criteria.jsontask.mdevals/demand-decomposition-and-time-series-for/criteria.jsontask.mdevals/reorder-point-and-safety-stock-calculati/criteria.jsontask.md詳細
需要予測
概要
需要予測では、過去の販売データ、季節的なパターン、リードタイムを使って、必要な在庫量と再発注のタイミングを予測します。慢性的な欠品や過剰在庫が発生している場合、再発注点がデータではなく勘に基づいて設定されていることが多いです。多くの販売事業者にとって、専用の在庫計画ツールでこれらの課題に対応できます。独自の予測コードが必要になるのは、特有の業務要件がある場合に限られます。
このスキルを使用する場面
- 慢性的な欠品や過剰在庫から、現在の再発注点が適切に設定されていないと判断できる場合
- 在庫確認作業を減らすため、自動補充の推奨を構築する場合
- 季節的な需要のピーク(ブラックフライデー、新学期、ホリデーシーズン)に向けて在庫を計画する場合
- 12か月以上の販売履歴があり、有意義な需要パターンを把握したい場合
- エンドツーエンドの補充を実現するため、サプライヤーのリードタイムや発注ワークフローと連携する場合
基本手順
ステップ 1:プラットフォームを確認し、適切な予測ツールを選ぶ
| プラットフォーム | 推奨ツール | 理由 |
|---|---|---|
| Shopify | Inventory Planner(Shopify App Store)または Cogsy | Inventory Planner は Shopify に直接接続し、12か月以上の販売履歴を分析して、再発注点を算出し、発注書を作成します |
| WooCommerce | ATUM Inventory Management(無料版/プレミアム版)または Inventory Planner | ATUM は WooCommerce に再発注点の管理機能を標準で提供します。Inventory Planner には、高度な予測に対応する WooCommerce コネクターがあります |
| BigCommerce | Inventory Planner または Linnworks | どちらも BigCommerce の標準連携機能を備え、複数拠点の在庫予測に対応しています |
| マルチチャネル | Skubana(現 Extensiv)または Linnworks | Shopify、WooCommerce、Amazon、eBay の在庫を単一のダッシュボードから予測できます |
| カスタム/ヘッドレス | 注文データベースに時系列分析レイヤーを構築する | 過去の販売データに対して、移動平均、季節性分解、安全在庫の計算式を適用します |
ステップ 2:販売履歴データの収集を設定する
正確な予測には、整備された過去のデータが必要です。予測を実行する前に、次の点を確認してください。
- キャンセルおよび返金された注文を販売合計から除外します。プラットフォームに接続すると、ほとんどの予測ツールが自動で対応します
- 販促期間にタグを付けます。フラッシュセール、ホリデーシーズンの急増、インフルエンサーによる需要は、通常とは異なるものとして記録してください。無批判に含めると、基準需要の推定値が過大になります
- 基本的な季節性パターンの検出には、少なくとも6か月分の履歴が必要です。前年比の傾向を確認するには、12か月以上が必要です
Shopify
Inventory Planner を使用する場合:
- Shopify App Store から Inventory Planner をインストールします(14日間の無料トライアル後、月額99ドル以上)
- Inventory Planner は接続時に、Shopify の全販売履歴を自動で取得します
- Inventory Planner の Suppliers でサプライヤーを登録し、リードタイムを設定します(例:サプライヤー A = 14日、サプライヤー B = 7日)
- Settings → Forecasting で希望するサービスレベルを設定します(例:95%。需要シナリオの95%に対して在庫を確保するという意味です)
- Inventory Planner は SKU ごとの再発注点と推奨発注数量を算出し、毎日更新します
Shopify Analytics(標準搭載。基本的な傾向の確認にはアプリ不要):
- Analytics → Reports → Inventory に移動します
- 「Days of inventory remaining」レポートでは、現在の販売ペースで在庫が何日分あるかを確認できます
- Analytics → Reports → Sales over time に移動し、商品ごとにグループ化して月次の販売傾向を確認します
- 予測アプリの利用料を払いたくない場合は、これらのデータを手動での再発注判断に利用します
WooCommerce
ATUM Inventory Management を使用する場合(無料プランあり):
- WordPress.org から ATUM Inventory Management for WooCommerce をインストールするか(無料)、プレミアム版を購入します
- ATUM を使うと、リアルタイムの在庫数、日次販売率、在庫僅少アラートを確認できる在庫一覧が追加されます
- ATUM → Settings → Reorder Points で、SKU ごとの再発注点と安全在庫を設定します
- ATUM のプレミアム Purchase Orders モジュールを使うと、在庫が再発注点に達した際に発注書が自動生成されます
Inventory Planner for WooCommerce を使用する場合:
- ネイティブ API コネクターを使って、Inventory Planner を WooCommerce に接続します
- Shopify と同じワークフローで、Inventory Planner が WooCommerce の販売履歴を分析し、予測を作成します
BigCommerce
Inventory Planner を使用する場合:
- BigCommerce API を使って Inventory Planner を接続します(Inventory Planner → Settings → Connect Store)
- Inventory Planner が BigCommerce から販売履歴を取得し、補充の推奨事項を作成します
BigCommerce の組み込み在庫僅少アラート:
- Products → [Product] → Inventory に移動します
- 各商品に「Low stock level」を設定します。在庫がこのしきい値を下回ると、BigCommerce からメールが届きます
- これはシンプルなアラートであり、予測機能ではありません。適切な予測ツールを設定するまでの補助として利用してください
ステップ 3:再発注点と安全在庫を設定する
再発注点 = リードタイム中の需要 + 安全在庫のバッファーです。
Inventory Planner での設定:
- Inventory Planner は、販売履歴とサプライヤーのリードタイムに基づいて、これを自動計算します
- Inventory Planner → Replenishment で推奨事項を確認します。在庫日数(在庫が残っている日数)とリードタイムを比較した緊急度順に商品が並びます
- 発注書を作成する前に、推奨事項を手動で調整します(例:特定の商品について、サプライヤーのリードタイムが通常より長いと分かっている場合)
- Inventory Planner から発注書を直接エクスポートし、サプライヤーにメールで送信します
手動での計算(予測ツールを使用しない場合):
- 1 日あたりの平均需要 = 過去 30 日間の販売総数 ÷ 30
- 安全在庫 =(1 日あたりの最大需要 − 1 日あたりの平均需要)× リードタイム(日数)
- 再発注点 =(1 日あたりの平均需要 × リードタイム(日数))+ 安全在庫
- 例: 1 日あたりの平均需要 = 5 個、リードタイム = 14 日、1 日あたりの最大需要 = 8 個
- 安全在庫 =(8−5)× 14 = 42 個
- 再発注点 =(5 × 14)+ 42 = 112 個
ステップ 4:季節的な需要に備える
季節性は予測誤差の最大の原因です。明示的に計画に組み込みましょう。
Inventory Planner での設定:
- Inventory Planner → Settings → Seasonality に移動します
- Inventory Planner は、販売履歴から季節的なパターンを自動検出します
- 販売開始から 1 年目の事業者(前年のデータがない場合)は、季節倍率を手動で設定します。例:ホリデー商品では 12 月を通常需要の 3 倍に設定します
季節カレンダーを手動で作成する:
- Shopify Reports/WooCommerce/BigCommerce から、過去 2 年以上の月別売上をエクスポートします
- 各月の売上を年間平均と比較した比率を計算します(12 月の売上 ÷ 平均月の売上 = 季節指数)
- 次の繁忙期に向けて発注する際に、季節指数を 1 日あたりの需要予測に適用します
プロモーションカレンダー:
- 予定しているプロモーション(フラッシュセール、インフルエンサーキャンペーンなど)に予測ツールでフラグを付けます
- ほとんどの予測ツールでは、特定の日付範囲に対して手動で需要を上書きできます
- ブラックフライデー/サイバーマンデーの場合は、過去の BFCM における売上増加率(通常、E コマースでは 3~8 倍)に基づいて予測を増やします
ステップ 5:補充の推奨を作成して承認する
Inventory Planner で:
- Inventory Planner → Replenishment → Review recommendations に移動します
- 「Critical」(リードタイムより少ない日数で在庫切れになる商品)と「Warning」(リードタイムの 2 倍以内に在庫切れになる商品)で絞り込みます
- モデルが把握していない市場情報(予定している販売、予想される供給問題)がある場合は、数量を調整します
- 「Create Purchase Order」をクリックします。Inventory Planner が仕入先に送る発注書(PO)を作成します
- Inventory Planner → Purchase Orders で発注書のステータスを追跡します。商品を受け取ったら、実際の受領日を更新して、今後のリードタイム予測の精度を高めます
ステップ 6:カスタム/ヘッドレス — 販売データから需要を予測する
// Compute average daily demand from your order database
async function computeAverageDailyDemand(
productId: string,
lookbackDays: number = 30
): Promise<number> {
const since = new Date();
since.setDate(since.getDate() - lookbackDays);
const result = await db.raw(`
SELECT COALESCE(SUM(ol.quantity), 0) AS total_units
FROM order_lines ol
JOIN orders o ON o.id = ol.order_id
WHERE ol.product_id = ?
AND o.status NOT IN ('cancelled', 'refunded')
AND o.created_at >= ?
`, [productId, since]);
return result.rows[0].total_units / lookbackDays;
}
// Calculate reorder point with safety stock
function calculateReorderPoint(params: {
avgDailyDemand: number;
maxDailyDemand: number; // observed peak daily demand
leadTimeDays: number;
}): number {
const safetyStock = (params.maxDailyDemand - params.avgDailyDemand) * params.leadTimeDays;
return Math.ceil(params.avgDailyDemand * params.leadTimeDays + safetyStock);
}
// Generate replenishment recommendations for all active products
async function generateReplenishmentReport(): Promise<{
productId: string;
sku: string;
currentStock: number;
reorderPoint: number;
daysOfSupply: number;
urgency: 'critical' | 'warning' | 'ok';
}[]> {
const products = await db.products.findAll({ is_active: true, track_inventory: true });
const recommendations = [];
for (const product of products) {
const inventory = await db.inventory.findByProductId(product.id);
const avgDemand = await computeAverageDailyDemand(product.id, 30);
const maxDemand = await computeAverageDailyDemand(product.id, 7); // shorter window = more volatile
const leadTimeDays = product.supplier_lead_time_days ?? 14;
const reorderPoint = calculateReorderPoint({ avgDailyDemand: avgDemand, maxDailyDemand: maxDemand, leadTimeDays });
const daysOfSupply = avgDemand > 0 ? Math.floor(inventory.quantity_on_hand / avgDemand) : 999;
const urgency = daysOfSupply < leadTimeDays ? 'critical' : daysOfSupply < leadTimeDays * 2 ? 'warning' : 'ok';
if (urgency !== 'ok') {
recommendations.push({ productId: product.id, sku: product.sku, currentStock: inventory.quantity_on_hand, reorderPoint, daysOfSupply, urgency });
}
}
return recommendations.sort((a, b) => a.daysOfSupply - b.daysOfSupply);
}
ベストプラクティス
- カスタムの予測を構築する前に、Inventory Planner のようなツールから始めてください — 月額 100~300 ドルはエンジニアリングにかかる時間よりはるかに安く、予測モデルの精度も手作業で作成した移動平均より高くなります
- 予測を信頼する前に、最低 6 か月分の販売履歴を用意してください。 新商品の場合は、カテゴリ平均の需要率を代替値として使います
- 把握しているイベントに応じて予測を調整してください — 予定しているプロモーション、季節キャンペーン、サプライチェーンの混乱は、予測ツールに手動で上書き入力します
- 毎月、予測精度を確認してください — 予測数量と実際の販売数量を比較します。継続的に 25% を超える誤差がある場合は、前提を再調整するか、需要パターンに構造的な変化がないか確認します
- 未処理の発注書を考慮してください — 新しい発注書を作成する前に、発注済みの数量を推奨補充数量から差し引きます。二重発注は、よくあるコストのかかるミスです
よくある落とし穴
| 問題 | 解決策 |
|---|---|
| 新商品には予測に使える販売履歴がない | 最初の 90 日間はカテゴリ平均の需要率を使います。Inventory Planner には、この状況に対応する「new product」モードがあります |
| 予測で仕入先の在庫切れが考慮されない | 仕入先管理システムで仕入先の納品率を追跡します。仕入先が発注数量の 80% を継続的に出荷する場合は、補うために 25% 多く発注します |
| 安全在庫が少なすぎて、在庫切れが発生する | Inventory Planner のサービスレベル設定を 90% から 95~98% に引き上げます(販売速度の高い SKU が対象です) |
| 補充の推奨で未処理の発注書が考慮されない | 新しい発注書を作成する前に、必ず「quantity on order」を確認します。Inventory Planner では自動的に表示されますが、手動計算では見落としがちです |
関連スキル
- @order-management-system
- @vendor-management
- @multi-channel-selling