🔮 STEP 51: 実践プロジェクト2 – 新商品の需要予測
新商品発売前に需要を予測し、在庫計画を立てよう
📋 このプロジェクトで取り組むこと
- 類似商品の過去データ分析
- 複数の予測手法を組み合わせた需要予測
- シナリオ分析(楽観・標準・悲観)
- 在庫計画とリスク分析
- 役員会議向けプレゼンテーション資料作成
難易度: 実践レベル(予測の不確実性と向き合う)
📊 1. プロジェクトの概要
あなたに与えられたミッション
💼 シチュエーション設定
あなたは中堅家電メーカー「TechHome」の商品企画部に所属しています。
新商品「SmartAir Pro」(スマート空気清浄機)の発売が3ヶ月後に迫っています。
📢 商品企画部長からの依頼:
「SmartAir Proの初年度需要を予測してほしい。
過剰在庫も欠品も避けたい。
楽観・標準・悲観の3シナリオで予測し、
在庫計画と生産計画に反映させたい。
2週間後の役員会議でプレゼンをお願いします。」
「SmartAir Proの初年度需要を予測してほしい。
過剰在庫も欠品も避けたい。
楽観・標準・悲観の3シナリオで予測し、
在庫計画と生産計画に反映させたい。
2週間後の役員会議でプレゼンをお願いします。」
新商品の情報:
・商品名: SmartAir Pro(スマート空気清浄機)
・価格: 49,800円(競合の平均的価格帯)
・特徴: AI搭載、スマホ連携、静音設計
・ターゲット: 30-50代の健康意識が高い層
需要予測の難しさを理解する
📌 なぜ新商品の需要予測は難しいのか
新商品の予測が難しい理由:
・過去のデータがない(同じ商品の実績がない)
・市場の反応が読めない(お客様が本当に買うか分からない)
・競合の動きが予測不可(値下げ、新商品投入など)
・外部環境の変化(景気、トレンド、季節など)
だからこそ:
・複数の予測手法を組み合わせる
・シナリオ分析で不確実性に備える
・柔軟に軌道修正できる計画を立てる
目標:
「完璧な予測」ではなく「より良い予測」を目指す
・過去のデータがない(同じ商品の実績がない)
・市場の反応が読めない(お客様が本当に買うか分からない)
・競合の動きが予測不可(値下げ、新商品投入など)
・外部環境の変化(景気、トレンド、季節など)
だからこそ:
・複数の予測手法を組み合わせる
・シナリオ分析で不確実性に備える
・柔軟に軌道修正できる計画を立てる
目標:
「完璧な予測」ではなく「より良い予測」を目指す
プロジェクトの全体像
💡 プロジェクトの流れ(6つのステップ)
STEP 1: 類似商品の過去データを分析
→ 成功パターンと失敗パターンを学ぶ
STEP 2: 市場分析と競合分析
→ 市場規模とポジショニングを確認
STEP 3: 事前指標を分析
→ 予約数、SNS反応から初期需要を推定
STEP 4: 需要予測モデルを構築
→ 複数手法を組み合わせて予測
STEP 5: シナリオ分析
→ 楽観・標準・悲観の3パターンを作成
STEP 6: 在庫計画とリスク分析
→ 欠品リスクと過剰在庫リスクを定量化
→ 成功パターンと失敗パターンを学ぶ
STEP 2: 市場分析と競合分析
→ 市場規模とポジショニングを確認
STEP 3: 事前指標を分析
→ 予約数、SNS反応から初期需要を推定
STEP 4: 需要予測モデルを構築
→ 複数手法を組み合わせて予測
STEP 5: シナリオ分析
→ 楽観・標準・悲観の3パターンを作成
STEP 6: 在庫計画とリスク分析
→ 欠品リスクと過剰在庫リスクを定量化
📈 2. STEP 1: 類似商品の過去データ分析
なぜ類似商品を分析するのか
📌 類似商品分析の目的
新商品には過去データがありません。
そこで、「似た商品がどうなったか」を参考にします。
類似商品から学べること:
・初月の販売数はどれくらいだったか
・季節による変動はあるか
・発売後、販売は増えたか減ったか
・成功した商品と失敗した商品の違いは何か
今回のケース:
過去3年間に発売した類似商品(空気清浄機)3つのデータを分析します。
そこで、「似た商品がどうなったか」を参考にします。
類似商品から学べること:
・初月の販売数はどれくらいだったか
・季節による変動はあるか
・発売後、販売は増えたか減ったか
・成功した商品と失敗した商品の違いは何か
今回のケース:
過去3年間に発売した類似商品(空気清浄機)3つのデータを分析します。
ライブラリの読み込みとデータ準備
まず、必要なライブラリを読み込みます。
# 必要なライブラリを読み込む
import pandas as pd # データを表形式で扱う
import numpy as np # 数値計算(乱数生成、統計計算など)
import matplotlib.pyplot as plt # グラフ描画
from scipy import stats # 統計検定
# 乱数のシードを固定(再現性のため)
# 同じシードを設定すると、毎回同じ乱数が生成される
np.random.seed(42)
類似商品のデータを作成
過去に発売した3つの類似商品のデータを作成します。実務では、社内の販売データベースから取得します。
# ===== Product A: 3年前発売、成功した商品 =====
months_a = np.arange(1, 37) # 1〜36ヶ月目
# 販売数 = ベース + トレンド + 季節性 + ノイズ
base_sales_a = 2000 # 基本となる販売数
trend_a = 50 # 月あたりの成長(プラス=成長)
# 季節性: sin関数で12ヶ月周期の波を作る(冬に売れる傾向)
seasonality_a = 300 * np.sin(2 * np.pi * months_a / 12)
# ノイズ: ランダムな変動(平均0、標準偏差150の正規分布)
noise_a = np.random.normal(0, 150, len(months_a))
# 販売数を計算
sales_a = base_sales_a + trend_a * months_a + seasonality_a + noise_a
同様に、普通の商品と失敗した商品のデータも作成します。
# ===== Product B: 2年前発売、普通の商品 =====
months_b = np.arange(1, 25) # 1〜24ヶ月目
base_sales_b = 1500
trend_b = 30 # 緩やかな成長
seasonality_b = 200 * np.sin(2 * np.pi * months_b / 12)
noise_b = np.random.normal(0, 100, len(months_b))
sales_b = base_sales_b + trend_b * months_b + seasonality_b + noise_b
# ===== Product C: 1年前発売、失敗した商品 =====
months_c = np.arange(1, 13) # 1〜12ヶ月目
base_sales_c = 800
trend_c = -20 # マイナス = 月を追うごとに減少
seasonality_c = 100 * np.sin(2 * np.pi * months_c / 12)
noise_c = np.random.normal(0, 80, len(months_c))
sales_c = base_sales_c + trend_c * months_c + seasonality_c + noise_c
# 販売数が300を下回らないようにする(最低ライン)
sales_c = np.maximum(sales_c, 300) # maximum: 2つの値の大きい方を返す
類似商品の実績を集計
# 各商品の実績を表示
print("=" * 60)
print("【STEP 1: 類似商品の分析】")
print("=" * 60)
print()
print("Product A(3年前発売、成功):")
print(f" • 初月販売: {sales_a[0]:.0f}台")
print(f" • 12ヶ月累計: {sales_a[:12].sum():.0f}台")
print()
print("Product B(2年前発売、普通):")
print(f" • 初月販売: {sales_b[0]:.0f}台")
print(f" • 12ヶ月累計: {sales_b[:12].sum():.0f}台")
print()
print("Product C(1年前発売、失敗):")
print(f" • 初月販売: {sales_c[0]:.0f}台")
print(f" • 12ヶ月累計: {sales_c[:12].sum():.0f}台")
統計値を計算して傾向を把握
# 初月販売数の統計
first_month_sales = np.array([sales_a[0], sales_b[0], sales_c[0]])
print()
print("【初月販売数の統計】")
print(f" 平均: {first_month_sales.mean():.0f}台")
print(f" 標準偏差: {first_month_sales.std():.0f}台")
print(f" 範囲: {first_month_sales.min():.0f} - {first_month_sales.max():.0f}台")
# 年間販売数の統計
annual_sales = np.array([
sales_a[:12].sum(), # Product Aの初年度
sales_b[:12].sum(), # Product Bの初年度
sales_c[:12].sum() # Product Cの初年度
])
print()
print("【初年度販売数の統計】")
print(f" 平均: {annual_sales.mean():.0f}台")
print(f" 標準偏差: {annual_sales.std():.0f}台")
print(f" 範囲: {annual_sales.min():.0f} - {annual_sales.max():.0f}台")
実行結果の解釈
📊 類似商品の分析結果
| 商品 | 初月販売 | 初年度累計 | 評価 |
|---|---|---|---|
| Product A | 約2,100台 | 約31,000台 | 成功 |
| Product B | 約1,700台 | 約22,000台 | 普通 |
| Product C | 約780台 | 約7,500台 | 失敗 |
✅ STEP 1の結論
発見したこと:
・初月販売数は780〜2,100台と幅がある
・初年度累計は7,500〜31,000台(約4倍の差)
・成功商品は月を追うごとに販売が伸びる(トレンドがプラス)
・失敗商品は月を追うごとに販売が減る(トレンドがマイナス)
SmartAir Proへの示唆:
Product Bに近い実績が期待できそう(競合との差別化がある程度ある)
→ 初年度 20,000〜25,000台が一つの目安
・初月販売数は780〜2,100台と幅がある
・初年度累計は7,500〜31,000台(約4倍の差)
・成功商品は月を追うごとに販売が伸びる(トレンドがプラス)
・失敗商品は月を追うごとに販売が減る(トレンドがマイナス)
SmartAir Proへの示唆:
Product Bに近い実績が期待できそう(競合との差別化がある程度ある)
→ 初年度 20,000〜25,000台が一つの目安
📈 3. STEP 3: 事前指標の分析
事前指標とは何か
📌 発売前に得られるヒント
新商品の発売前でも、需要を推測できるデータがあります。
事前指標の例:
・事前予約数: 実際に「買いたい」と意思表示した人の数
・SNS反応: Twitter、Instagramでの言及数と評判
・市場調査: アンケートでの購入意向
・展示会での反応: 実機を見た人の評価
今回のデータ:
・事前予約: 1,200件(発売2ヶ月前時点)
・SNS言及: 2,500件(ポジティブ率72%)
事前指標の例:
・事前予約数: 実際に「買いたい」と意思表示した人の数
・SNS反応: Twitter、Instagramでの言及数と評判
・市場調査: アンケートでの購入意向
・展示会での反応: 実機を見た人の評価
今回のデータ:
・事前予約: 1,200件(発売2ヶ月前時点)
・SNS言及: 2,500件(ポジティブ率72%)
事前予約から初月販売を予測
# 事前予約数
pre_orders = 1200
# 過去商品の「事前予約 → 初月販売」の転換率を分析
# 転換倍率 = 初月販売数 / 事前予約数
conversion_data = pd.DataFrame({
'商品': ['Product A', 'Product B', 'Product C'],
'事前予約': [800, 600, 400],
'初月販売': [2000, 1500, 800],
})
# 転換倍率を計算
conversion_data['転換倍率'] = conversion_data['初月販売'] / conversion_data['事前予約']
print("【過去商品の転換率】")
print()
print(conversion_data.to_string(index=False))
print()
# 平均転換倍率を計算
avg_conversion = conversion_data['転換倍率'].mean()
print(f"平均転換倍率: {avg_conversion:.1f}倍")
print()
# SmartAir Proの初月予測
# 事前予約 × 平均転換倍率 = 予測初月販売数
predicted_first_month = pre_orders * avg_conversion
print("【初月販売予測(事前予約ベース)】")
print(f" {pre_orders}件 × {avg_conversion:.1f}倍 = {predicted_first_month:.0f}台")
転換倍率の意味
📊 転換倍率の解釈
| 商品 | 事前予約 | 初月販売 | 転換倍率 |
|---|---|---|---|
| Product A | 800件 | 2,000台 | 2.5倍 |
| Product B | 600件 | 1,500台 | 2.5倍 |
| Product C | 400件 | 800台 | 2.0倍 |
| 平均 | – | – | 約2.3倍 |
意味: 事前予約した人以外にも、発売日に購入する人がいる。
予約者の2〜2.5倍の人が初月に購入する傾向がある。
✅ STEP 3の結論
事前予約ベースの予測:
・事前予約: 1,200件(過去商品より多い = 好調)
・転換倍率: 約2.3倍(過去平均)
・初月予測: 約2,800台
SNS反応:
・言及数2,500件、ポジティブ率72%(良好)
→ 期待感は高い状態
・事前予約: 1,200件(過去商品より多い = 好調)
・転換倍率: 約2.3倍(過去平均)
・初月予測: 約2,800台
SNS反応:
・言及数2,500件、ポジティブ率72%(良好)
→ 期待感は高い状態
📈 4. STEP 4: 需要予測モデルの構築
複数の予測手法を組み合わせる
📌 なぜ複数手法を使うのか
1つの予測手法だけでは偏りが出ます。
複数の視点から予測し、統合することで精度を高めます。
今回使う3つの手法:
1. 類似商品ベース: 過去の類似商品の実績から予測
2. 市場シェアベース: 市場規模と目標シェアから予測
3. 事前予約ベース: 事前予約数と転換率から予測
それぞれの手法で予測し、加重平均で統合します。
複数の視点から予測し、統合することで精度を高めます。
今回使う3つの手法:
1. 類似商品ベース: 過去の類似商品の実績から予測
2. 市場シェアベース: 市場規模と目標シェアから予測
3. 事前予約ベース: 事前予約数と転換率から予測
それぞれの手法で予測し、加重平均で統合します。
手法1: 類似商品ベース予測
# 手法1: 類似商品ベース予測
# Product B(普通の実績)に近いと仮定
# Product Bの初年度月次販売データを使用
method1_monthly = sales_b[:12] * 1.0 # コピーを作成
method1_total = method1_monthly.sum()
print("【手法1: 類似商品ベース】")
print(f" 根拠: Product Bの実績をベースに予測")
print(f" 初年度予測: {method1_total:.0f}台")
手法2: 市場シェアベース予測
# 手法2: 市場シェアベース予測
# 市場規模と目標シェアから逆算
market_size_yen = 120_000_000_000 # 市場規模: 1,200億円
avg_price = 45000 # 平均価格: 45,000円
market_size_units = market_size_yen / avg_price # 台数に換算
target_share = 0.01 # 目標シェア: 1%
# 予測販売数 = 市場規模(台数)× 目標シェア
method2_total = market_size_units * target_share
# 月平均で割り振る(季節性は考慮せず均等配分)
method2_monthly = np.full(12, method2_total / 12)
print("【手法2: 市場シェアベース】")
print(f" 市場規模: {market_size_units:,.0f}台/年")
print(f" 目標シェア: {target_share*100:.1f}%")
print(f" 初年度予測: {method2_total:,.0f}台")
手法3: 事前予約ベース予測
# 手法3: 事前予約ベース予測
# 初月から徐々に減衰すると仮定
method3_first_month = predicted_first_month # 2,800台(先ほど計算)
# 減衰率: 月あたり5%ずつ減少
decay_rate = 0.95
# 各月の販売数を計算
# 1ヶ月目: 2,800台
# 2ヶ月目: 2,800 × 0.95 = 2,660台
# 3ヶ月目: 2,800 × 0.95^2 = 2,527台
# ...
method3_monthly = np.array([
method3_first_month * (decay_rate ** i) for i in range(12)
])
method3_total = method3_monthly.sum()
print("【手法3: 事前予約ベース】")
print(f" 初月予測: {method3_first_month:.0f}台")
print(f" 減衰率: 月{(1-decay_rate)*100:.0f}%減")
print(f" 初年度予測: {method3_total:.0f}台")
3つの予測を加重平均で統合
# 加重平均で統合
# 手法1: 30%、手法2: 30%、手法3: 40%の重み付け
# 事前予約は直近の情報なので重視
weights = [0.3, 0.3, 0.4]
# 月次予測の加重平均
base_forecast_monthly = (
weights[0] * method1_monthly +
weights[1] * method2_monthly +
weights[2] * method3_monthly
)
base_forecast_total = base_forecast_monthly.sum()
print("【統合予測(加重平均)】")
print(f" 手法1(類似商品): 30%")
print(f" 手法2(市場シェア): 30%")
print(f" 手法3(事前予約): 40%")
print()
print(f" 初年度予測: {base_forecast_total:,.0f}台")
print(f" 月平均: {base_forecast_total/12:,.0f}台")
月次予測の詳細
# 月次予測をDataFrameで表示
months_forecast = pd.DataFrame({
'月': range(1, 13),
'予測販売数': base_forecast_monthly.astype(int),
'累計': base_forecast_monthly.cumsum().astype(int)
})
print("【月次予測詳細】")
print()
print(months_forecast.to_string(index=False))
✅ STEP 4の結論: 標準予測
3つの手法を統合した結果:
初年度予測: 約25,000台
・初月: 約2,500台
・月平均: 約2,100台
ただし、これは「標準シナリオ」です。
次のステップで不確実性を考慮します。
初年度予測: 約25,000台
・初月: 約2,500台
・月平均: 約2,100台
ただし、これは「標準シナリオ」です。
次のステップで不確実性を考慮します。
📈 5. STEP 5: シナリオ分析
なぜシナリオ分析が必要か
📌 予測の不確実性に備える
予測は必ず外れます。重要なのは、
「どれくらい外れる可能性があるか」を把握することです。
3つのシナリオ:
・楽観シナリオ: 予想以上にうまくいった場合
・標準シナリオ: 計画通りに進んだ場合
・悲観シナリオ: 予想より悪かった場合
それぞれのシナリオに確率を割り当てることで、
「期待値」として意思決定に使えるようになります。
「どれくらい外れる可能性があるか」を把握することです。
3つのシナリオ:
・楽観シナリオ: 予想以上にうまくいった場合
・標準シナリオ: 計画通りに進んだ場合
・悲観シナリオ: 予想より悪かった場合
それぞれのシナリオに確率を割り当てることで、
「期待値」として意思決定に使えるようになります。
3つのシナリオを作成
# 標準シナリオ(先ほど計算したベース予測)
standard_scenario = base_forecast_monthly
standard_total = standard_scenario.sum()
# 楽観シナリオ(標準の130%)
# 市場の反応が期待以上、競合の対抗策なし
optimistic_scenario = base_forecast_monthly * 1.3
optimistic_total = optimistic_scenario.sum()
# 悲観シナリオ(標準の70%)
# 市場の反応が期待以下、競合の価格攻勢
pessimistic_scenario = base_forecast_monthly * 0.7
pessimistic_total = pessimistic_scenario.sum()
print("【3つのシナリオ】")
print()
print(f"楽観シナリオ(確率20%):")
print(f" • 初年度販売: {optimistic_total:,.0f}台(+30%)")
print(f" • 想定状況: 市場の反応が期待以上")
print()
print(f"標準シナリオ(確率60%):")
print(f" • 初年度販売: {standard_total:,.0f}台")
print(f" • 想定状況: 計画通りに推移")
print()
print(f"悲観シナリオ(確率20%):")
print(f" • 初年度販売: {pessimistic_total:,.0f}台(-30%)")
print(f" • 想定状況: 競合の対抗策、品質問題など")
期待値を計算
# 期待値 = Σ(確率 × 各シナリオの値)
# 各シナリオの確率
probabilities = [0.2, 0.6, 0.2] # 楽観20%、標準60%、悲観20%
scenarios = [optimistic_total, standard_total, pessimistic_total]
# 期待値を計算
expected_value = sum(p * s for p, s in zip(probabilities, scenarios))
print("【期待値の計算】")
print()
print(f"期待値 = 0.2 × {optimistic_total:,.0f}")
print(f" + 0.6 × {standard_total:,.0f}")
print(f" + 0.2 × {pessimistic_total:,.0f}")
print(f" = {expected_value:,.0f}台")
print()
print(f"→ 期待値としては約{expected_value:,.0f}台の販売が見込まれる")
シナリオ分析の結果
📊 シナリオ別予測まとめ
| シナリオ | 確率 | 年間販売 | 想定状況 |
|---|---|---|---|
| 楽観 | 20% | 約32,500台 | 市場の反応良好 |
| 標準 | 60% | 約25,000台 | 計画通り |
| 悲観 | 20% | 約17,500台 | 競合の対抗策 |
| 期待値 | – | 約25,000台 | – |
📈 6. STEP 6: 在庫計画とリスク分析
在庫計画の考え方
📌 欠品と過剰在庫のトレードオフ
在庫計画では、2つのリスクのバランスを取ります。
欠品リスク(在庫が足りない):
・売れるはずの商品がない → 機会損失
・お客様の失望 → ブランドイメージ低下
・コスト: 粗利の100%(売れなかった分)
過剰在庫リスク(在庫が余る):
・保管コストがかかる
・値引き販売が必要
・最悪の場合、廃棄
・コスト: 保管費 + 値引き損
ポイント:
一般的に、欠品コストは過剰在庫コストより高い。
「少し多め」に持つのが基本戦略。
欠品リスク(在庫が足りない):
・売れるはずの商品がない → 機会損失
・お客様の失望 → ブランドイメージ低下
・コスト: 粗利の100%(売れなかった分)
過剰在庫リスク(在庫が余る):
・保管コストがかかる
・値引き販売が必要
・最悪の場合、廃棄
・コスト: 保管費 + 値引き損
ポイント:
一般的に、欠品コストは過剰在庫コストより高い。
「少し多め」に持つのが基本戦略。
コスト前提を設定
# コスト前提
unit_cost = 25000 # 原価: 25,000円/台
unit_price = 49800 # 販売価格: 49,800円/台
gross_margin = unit_price - unit_cost # 粗利: 24,800円/台
inventory_cost_per_month = 500 # 在庫コスト: 500円/台/月
stockout_cost = gross_margin # 欠品機会損失: 粗利と同額
lead_time_months = 2 # 生産リードタイム: 2ヶ月
print("【前提条件】")
print(f" • 原価: ¥{unit_cost:,}/台")
print(f" • 販売価格: ¥{unit_price:,}/台")
print(f" • 粗利: ¥{gross_margin:,}/台")
print(f" • 在庫コスト: ¥{inventory_cost_per_month:,}/台/月")
print(f" • 欠品機会損失: ¥{stockout_cost:,}/台")
print(f" • 生産リードタイム: {lead_time_months}ヶ月")
初回生産量を決定
# 初回生産量の決定
# 最初の3ヶ月分 + 安全在庫10%
# 標準シナリオでの最初3ヶ月の需要
first_3_months_demand = standard_scenario[:3].sum()
# 安全在庫を10%上乗せ
safety_stock_ratio = 1.1
initial_production = int(first_3_months_demand * safety_stock_ratio)
print("【初回生産量の決定】")
print()
print(f"最初3ヶ月の予測需要: {first_3_months_demand:.0f}台")
print(f"安全在庫上乗せ: +10%")
print(f"推奨初回生産量: {initial_production:,}台")
print()
print("この量であれば:")
print(" • 標準シナリオ: 3ヶ月分をカバー + 余裕あり")
print(" • 悲観シナリオ: 4ヶ月分以上の在庫")
print(" • 楽観シナリオ: 2.5ヶ月分(追加生産が必要)")
リスクの定量化
# リスクの定量化
# 楽観シナリオでの欠品リスク
# 需要が予測を超えた場合、初回生産では足りない
optimistic_3_months = optimistic_scenario[:3].sum()
stockout_units = max(0, optimistic_3_months - initial_production)
stockout_loss = stockout_units * stockout_cost
print("【楽観シナリオ発生時(確率20%)】")
print(f" 需要: {optimistic_3_months:.0f}台")
print(f" 生産: {initial_production:,}台")
print(f" 欠品: {stockout_units:.0f}台")
print(f" 機会損失: ¥{stockout_loss/1000000:.1f}M")
print()
# 悲観シナリオでの過剰在庫リスク
pessimistic_3_months = pessimistic_scenario[:3].sum()
excess_inventory = max(0, initial_production - pessimistic_3_months)
# 過剰在庫を3ヶ月間保管するコスト
excess_cost = excess_inventory * inventory_cost_per_month * 3
print("【悲観シナリオ発生時(確率20%)】")
print(f" 需要: {pessimistic_3_months:.0f}台")
print(f" 生産: {initial_production:,}台")
print(f" 過剰在庫: {excess_inventory:.0f}台")
print(f" 在庫コスト(3ヶ月): ¥{excess_cost/1000000:.1f}M")
print()
# 期待損失(リスクの期待値)
expected_loss = 0.2 * stockout_loss + 0.2 * excess_cost
print("【期待損失】")
print(f" = 20% × ¥{stockout_loss/1000000:.1f}M + 20% × ¥{excess_cost/1000000:.1f}M")
print(f" = ¥{expected_loss/1000000:.1f}M")
リスク分析の結果
📊 リスク分析まとめ
| リスク種類 | 発生確率 | 影響額 | 対策 |
|---|---|---|---|
| 欠品(楽観時) | 20% | 約35M円 | 緊急増産体制を確保 |
| 過剰在庫(悲観時) | 20% | 約2.3M円 | マーケティング強化 |
| 期待損失 | – | 約7.9M円 | – |
期待損失7.9M円は、予測売上(約12億円)の0.6%。
許容範囲内のリスクと判断できます。
✅ STEP 6の結論: 在庫計画
推奨:
・初回生産: 約7,700台
・投資額: 約193M円(原価25,000円 × 7,700台)
リスク対策:
1. 月次で販売実績をモニタリング
2. 初月で2,500台を下回ったら生産計画を見直し
3. 複数サプライヤーで緊急増産体制を確保
4. 値引きキャンペーンを事前に準備
・初回生産: 約7,700台
・投資額: 約193M円(原価25,000円 × 7,700台)
リスク対策:
1. 月次で販売実績をモニタリング
2. 初月で2,500台を下回ったら生産計画を見直し
3. 複数サプライヤーで緊急増産体制を確保
4. 値引きキャンペーンを事前に準備
📊 7. 役員会議プレゼンテーション
エグゼクティブサマリー
📄 SmartAir Pro 需要予測と在庫計画
【結論・推奨事項】
初回生産7,700台を推奨。
標準シナリオで初年度25,000台の販売を予測。
在庫リスクは限定的で、月次モニタリングで柔軟に対応可能。
【需要予測】
・楽観シナリオ(20%): 32,500台
・標準シナリオ(60%): 25,000台
・悲観シナリオ(20%): 17,500台
・期待値: 25,000台
【予測根拠】
1. 類似商品(Product B)の実績ベース
2. 市場シェア1%目標
3. 事前予約1,200件から推定
4. 3手法の加重平均で算出
【在庫計画】
・初回生産: 7,700台
・投資額: 193M円
・期待損失: 7.9M円(売上の0.6%)
【Next Steps】
◆ 今週中: 役員会議で承認
◆ 来週: サプライヤーに発注
◆ 3ヶ月後: 発売、モニタリング開始
初回生産7,700台を推奨。
標準シナリオで初年度25,000台の販売を予測。
在庫リスクは限定的で、月次モニタリングで柔軟に対応可能。
【需要予測】
・楽観シナリオ(20%): 32,500台
・標準シナリオ(60%): 25,000台
・悲観シナリオ(20%): 17,500台
・期待値: 25,000台
【予測根拠】
1. 類似商品(Product B)の実績ベース
2. 市場シェア1%目標
3. 事前予約1,200件から推定
4. 3手法の加重平均で算出
【在庫計画】
・初回生産: 7,700台
・投資額: 193M円
・期待損失: 7.9M円(売上の0.6%)
【Next Steps】
◆ 今週中: 役員会議で承認
◆ 来週: サプライヤーに発注
◆ 3ヶ月後: 発売、モニタリング開始
📝 STEP 51 のまとめ
✅ このプロジェクトで学んだこと
- 類似商品分析: 過去データから成功・失敗パターンを学ぶ
- 複数手法の統合: 3つの予測手法を加重平均で統合
- シナリオ分析: 不確実性を楽観・標準・悲観の3パターンで表現
- 期待値計算: 確率で重み付けして意思決定に使う
- リスク定量化: 欠品と過剰在庫のコストを計算
- 在庫最適化: リスクを許容範囲に抑えた生産計画
💡 需要予測プロジェクトの成功ポイント
1. 複数手法を組み合わせる
1つの手法に頼らない。複数の視点から予測し、統合する。
2. 不確実性を認識する
「予測は外れる」前提で、シナリオ分析と期待値を活用。
3. 事前指標を活用
予約数、SNS反応など、発売前に得られるデータを最大限活用。
4. リスクを定量化
「なんとなく心配」ではなく、金額でリスクを把握する。
5. 柔軟な計画を立てる
初回は控えめに、実績を見て軌道修正できる体制を作る。
6. 継続的にモニタリング
発売後は週次で実績を確認し、即座に対応する。
1つの手法に頼らない。複数の視点から予測し、統合する。
2. 不確実性を認識する
「予測は外れる」前提で、シナリオ分析と期待値を活用。
3. 事前指標を活用
予約数、SNS反応など、発売前に得られるデータを最大限活用。
4. リスクを定量化
「なんとなく心配」ではなく、金額でリスクを把握する。
5. 柔軟な計画を立てる
初回は控えめに、実績を見て軌道修正できる体制を作る。
6. 継続的にモニタリング
発売後は週次で実績を確認し、即座に対応する。
📝 発展課題
課題
発展
発売後3ヶ月が経過。予測より21%下回っています。
実績データ:
• 1ヶ月目: 2,200台(予測2,800台、-21%)
• 2ヶ月目: 2,000台(予測2,500台、-20%)
• 3ヶ月目: 1,800台(予測2,300台、-22%)
• 合計: 6,000台(予測7,600台)
追加情報:
• 顧客レビュー: 4.2/5.0(良好)
• 競合が値下げ(49,800円→39,800円)
あなたのタスク:
1. 乖離原因を分析
2. 残り9ヶ月の予測を修正
3. 対策を提案
4. 役員への報告資料を作成
• 1ヶ月目: 2,200台(予測2,800台、-21%)
• 2ヶ月目: 2,000台(予測2,500台、-20%)
• 3ヶ月目: 1,800台(予測2,300台、-22%)
• 合計: 6,000台(予測7,600台)
追加情報:
• 顧客レビュー: 4.2/5.0(良好)
• 競合が値下げ(49,800円→39,800円)
あなたのタスク:
1. 乖離原因を分析
2. 残り9ヶ月の予測を修正
3. 対策を提案
4. 役員への報告資料を作成
【分析と対応のアプローチ】
【Step 1: 乖離原因の分析】
・毎月20%以上下回っている → 構造的な問題
・レビューは良好 → 商品自体の問題ではない
・競合が1万円値下げ → これが主要因と推測
【Step 2: 予測の修正】
・実績3ヶ月の平均: 2,000台/月
・競合価格差が続く前提で再計算
・年間予測: 約18,000台(当初25,000台の72%)
【Step 3: 対策案】
A. マーケティング強化(推奨)
・差別化ポイント(AI機能)を前面に
・投資18M円でROI 567%
B. 値下げ(非推奨)
・44,800円に値下げ
・利益が大幅に減少
【教訓】
予測は外れる。重要なのは早期発見と軌道修正!
・毎月20%以上下回っている → 構造的な問題
・レビューは良好 → 商品自体の問題ではない
・競合が1万円値下げ → これが主要因と推測
【Step 2: 予測の修正】
・実績3ヶ月の平均: 2,000台/月
・競合価格差が続く前提で再計算
・年間予測: 約18,000台(当初25,000台の72%)
【Step 3: 対策案】
A. マーケティング強化(推奨)
・差別化ポイント(AI機能)を前面に
・投資18M円でROI 567%
B. 値下げ(非推奨)
・44,800円に値下げ
・利益が大幅に減少
【教訓】
予測は外れる。重要なのは早期発見と軌道修正!
❓ よくある質問
Q1: 新商品の需要予測はどうしてもこんなに外れるものですか?
はい、±20-30%の誤差は普通です。
なぜ予測が難しいか:
・過去データがない
・市場の反応が読めない
・競合の動きが予測不可
重要なのは:
完璧な予測ではなく、「外れた時の対応力」!
週次モニタリングと素早い軌道修正が鍵です。
なぜ予測が難しいか:
・過去データがない
・市場の反応が読めない
・競合の動きが予測不可
重要なのは:
完璧な予測ではなく、「外れた時の対応力」!
週次モニタリングと素早い軌道修正が鍵です。
Q2: 在庫は多めに持つべき?少なめに持つべき?
欠品コストと在庫コストを比較して判断します。
多めに持つべき場合:
・粗利が高い商品(欠品の機会損失が大きい)
・緊急増産が困難
・季節商品(売り逃すと1年待ち)
少なめに持つべき場合:
・粗利が低い商品
・陳腐化リスクが高い(IT製品など)
・緊急増産が容易
計算式で判断:
期待コスト = 欠品確率×欠品コスト + 過剰確率×在庫コスト
多めに持つべき場合:
・粗利が高い商品(欠品の機会損失が大きい)
・緊急増産が困難
・季節商品(売り逃すと1年待ち)
少なめに持つべき場合:
・粗利が低い商品
・陳腐化リスクが高い(IT製品など)
・緊急増産が容易
計算式で判断:
期待コスト = 欠品確率×欠品コスト + 過剰確率×在庫コスト
Q3: シナリオの確率(20%, 60%, 20%)はどう決めるのですか?
過去の経験と業界知識から設定します。
一般的な配分:
・標準: 50-60%(最もありえるシナリオ)
・楽観/悲観: 各20-25%(極端なケース)
調整のポイント:
・不確実性が高い場合 → 標準を低く、楽観/悲観を高く
・リスクが高い時期 → 悲観の確率を上げる
・専門家の意見も参考に
重要なのは、確率を明示して議論すること。
「なんとなく」ではなく、数字で話す。
一般的な配分:
・標準: 50-60%(最もありえるシナリオ)
・楽観/悲観: 各20-25%(極端なケース)
調整のポイント:
・不確実性が高い場合 → 標準を低く、楽観/悲観を高く
・リスクが高い時期 → 悲観の確率を上げる
・専門家の意見も参考に
重要なのは、確率を明示して議論すること。
「なんとなく」ではなく、数字で話す。
学習メモ
ビジネスデータ分析・意思決定 - Step 51
📋 過去のメモ一覧
▼