演習:推薦システムの要件定義をしよう
「ここまでの知識を整理して、NetShop社の推薦システムの要件定義をまとめてくれ。来週の経営会議で使う。」
田中VPoEが真剣な表情であなたに語りかける。
「ビジネスケース、技術選定、KPI設計の3つを1時間でまとめてほしい。」
ミッション概要
NetShop社のパーソナライズ推薦プロジェクトの要件定義を作成する演習である。ビジネスケースの策定、推薦手法の選定、KPI設計までを一貫して行う。
Mission 1: ビジネスケースの策定(20分)
NetShop社のデータを使って、推薦システム導入のビジネスケースを策定せよ。
データ:
- 月間アクティブユーザー: 500,000人
- 月間新規ユーザー: 50,000人(全体の10%)
- 推薦枠表示回数: 1,500,000回/月
- 現状CTR: 2.0%
- 現状CVR: 3.0%
- 平均注文額: 5,000円
- 商品カタログ数: 50,000 SKU
- 開発チーム人件費: 月400万円(3名x4ヶ月想定)
- インフラ費: 月30万円
- 運用費: 月50万円
タスク:
- 現状の推薦枠経由月間売上を算出する
- パーソナライズ推薦導入後の売上予測を3シナリオ(楽観・標準・悲観)で算出する
- 各シナリオの投資回収期間を計算する
- 経営陣向けの1枚サマリーを作成する
解答例
# 現状
impressions = 1_500_000
current_ctr = 0.02
current_cvr = 0.03
avg_order = 5000
current_revenue = impressions * current_ctr * current_cvr * avg_order
print(f"現状月間売上: ¥{current_revenue:,.0f}")
# 現状月間売上: ¥4,500,000
# 3シナリオ
scenarios = {
"悲観": {"ctr": 0.035, "cvr": 0.035, "aov": 5200},
"標準": {"ctr": 0.05, "cvr": 0.04, "aov": 5500},
"楽観": {"ctr": 0.07, "cvr": 0.05, "aov": 6000},
}
dev_cost = 4_000_000 * 4 # 開発費: 1,600万円
monthly_ops = 300_000 + 500_000 # 月間運用費: 80万円
for name, s in scenarios.items():
new_revenue = impressions * s["ctr"] * s["cvr"] * s["aov"]
monthly_gain = new_revenue - current_revenue - monthly_ops
payback = dev_cost / monthly_gain if monthly_gain > 0 else float("inf")
annual_roi = (monthly_gain * 12 - dev_cost) / dev_cost * 100
print(f"\n【{name}シナリオ】")
print(f" 月間売上: ¥{new_revenue:,.0f}")
print(f" 月間増分: ¥{new_revenue - current_revenue:,.0f}")
print(f" 回収期間: {payback:.1f}ヶ月")
print(f" 年間ROI: {annual_roi:.0f}%")
Mission 2: 推薦手法の選定(20分)
NetShop社の状況に最適な推薦手法を選定し、技術設計の方針を示せ。
制約条件:
- 月間新規ユーザー比率: 10%
- 商品の入れ替え頻度: 月500SKU追加、300SKU廃止
- 推薦レイテンシ要件: 200ms以内
- チームのML経験: 中程度(scikit-learn経験あり、深層学習は未経験)
タスク:
- 各推薦枠(トップページ、商品詳細、カート、メール)で採用する推薦手法を選定する
- Cold Start対策を新規ユーザー・新規商品それぞれについて設計する
- システムアーキテクチャの概要図を作成する(テキストで可)
- 技術的リスクと対策を3つ以上挙げる
解答例
推薦手法の選定:
【推薦枠別の手法選定】
| 推薦枠 | 手法 | 理由 |
|-------------|------------------------|-------------------------------|
| トップページ | ハイブリッド(CF+コンテンツ) | 既存ユーザーはCF、新規はコンテンツ |
| 商品詳細 | アイテムベースCF | 「この商品を買った人は〜」 |
| カート内 | アソシエーションルール+CF | 補完商品のクロスセル |
| メール | ユーザーベースCF | バッチ処理で精度重視 |
【Cold Start対策】
新規ユーザー:
Phase 1(初回訪問): 人気ランキング + カテゴリ別人気
Phase 2(3アクション以降): コンテンツベース推薦開始
Phase 3(10アクション以降): 協調フィルタリング併用
新規商品:
1. 商品属性(カテゴリ、ブランド、価格帯)で類似商品を特定
2. 類似商品の推薦スコアを転用
3. 新商品ブースト期間(7日間)で露出を保証
【システムアーキテクチャ】
ユーザーリクエスト
→ API Gateway
→ 推薦サービス(レイテンシ: <200ms)
→ オンライン特徴量ストア(Redis)
→ 事前計算済みスコアキャッシュ
→ リランキング層(ビジネスルール適用)
→ レスポンス
バッチパイプライン(日次):
→ データ収集(行動ログ、商品マスタ)
→ 特徴量エンジニアリング
→ モデル学習・更新
→ スコア事前計算
→ キャッシュ更新
Mission 3: KPI設計(20分)
推薦システムのKPIダッシュボードを設計せよ。
タスク:
- オフライン評価指標を4つ以上定義し、ベースライン値と目標値を設定する
- オンライン評価指標を4つ以上定義し、モニタリング方法を示す
- ビジネスKPIを3つ以上定義し、経営報告用のフォーマットを作成する
- 指標間の因果関係を示す(例: NDCG改善→CTR改善→売上増加)
解答例
推薦システムKPIダッシュボード:
【オフライン評価指標】
| 指標 | 定義 | ベースライン | 目標値 | 測定頻度 |
|-------------|------------------------|------------|---------|---------|
| NDCG@10 | 上位10件のランキング精度 | 0.15 | 0.35 | 週次 |
| MAP@10 | 平均適合率 | 0.08 | 0.20 | 週次 |
| Hit Rate@10 | 上位10件中に正解が含まれる率| 0.25 | 0.50 | 週次 |
| Coverage | カタログ中の推薦対象率 | 0.10 | 0.40 | 月次 |
【オンライン評価指標】
| 指標 | 現状 | 目標 | モニタリング方法 |
|------------------|--------|---------|--------------------------|
| CTR | 2.0% | 5.0% | リアルタイムダッシュボード |
| カート追加率 | 0.8% | 2.0% | イベントログ集計 |
| セッション滞在時間 | 3.5分 | 5.0分 | GA連携 |
| 推薦枠ページビュー | 4.2 | 6.0 | アクセスログ |
【ビジネスKPI】
| KPI | 現状 | 目標 | 報告頻度 |
|-------------|----------|------------|---------|
| 推薦経由CVR | 3.0% | 4.5% | 週次 |
| 推薦経由売上 | 450万円/月| 1,650万円/月| 月次 |
| 推薦経由客単価 | 5,000円 | 5,500円 | 月次 |
【因果関係マップ】
NDCG改善 → ランキング精度向上
→ CTR改善 → カート追加率改善
→ CVR改善 → 推薦経由売上増加
Coverage改善 → ロングテール商品の露出増
→ 在庫回転率改善 → 利益率向上
達成度チェック
- 3シナリオでビジネスケースを策定し、ROIを算出できた
- 推薦枠別に適切な手法を選定し、理由を説明できた
- Cold Start対策を新規ユーザー・新規商品それぞれ設計できた
- システムアーキテクチャの概要を示せた
- オフライン・オンライン・ビジネスKPIを体系的に設計できた
- KPI間の因果関係を説明できた
推定所要時間: 60分