LESSON

演習:不正検知フレームワークを設計しよう

「ここまでの理解を形にしてほしい。経営会議で説明できるレベルの設計書を作ってくれ。」

田中VPoEがあなたにノートPCを渡す。

「コスト分析、検知戦略、KPI設計。この3つを30分でまとめてくれ。」

ミッション概要

NetShop社の不正検知プロジェクトにおいて、分析フレームワークを設計する演習である。コスト分析、検知戦略の策定、KPI設計までを一貫して行う。


Mission 1: コスト分析(10分)

NetShop社の決済データから、不正被害の全体コストを算出せよ。

データ:

  • 月間取引件数: 600,000件
  • 平均取引額: 7,500円
  • 不正取引率: 0.25%
  • 不正取引の平均額: 40,000円
  • 現行の検知率(再現率): 35%
  • 現行の偽陽性率: 2.5%
  • 偽陰性1件あたりのコスト: 45,000円(被害額+手数料)
  • 偽陽性1件あたりのコスト: 600円(対応コスト+機会損失)

タスク:

  1. 月間の不正取引件数と正常取引件数を算出する
  2. 現行システムの見逃し件数と偽陽性件数を算出する
  3. 月間の総コスト(見逃しコスト+偽陽性コスト)を計算する
  4. 検知率を80%、偽陽性率を0.5%に改善した場合の総コスト削減額を計算する
解答例
# 基本データ
monthly_txn = 600_000
fraud_rate = 0.0025
fraud_count = monthly_txn * fraud_rate  # 1,500件
legit_count = monthly_txn - fraud_count  # 598,500件

# 現行システム
current_recall = 0.35
current_fpr = 0.025
cost_fn = 45_000
cost_fp = 600

current_fn = fraud_count * (1 - current_recall)  # 975件
current_fp = legit_count * current_fpr            # 14,962件
current_cost = current_fn * cost_fn + current_fp * cost_fp
print(f"現行: 見逃し{current_fn:.0f}件, 偽陽性{current_fp:.0f}件")
print(f"現行月間コスト: {current_cost:,.0f}円")
# 現行: 見逃し975件, 偽陽性14,962件
# 現行月間コスト: 52,852,500円

# 改善後
improved_recall = 0.80
improved_fpr = 0.005

improved_fn = fraud_count * (1 - improved_recall)  # 300件
improved_fp = legit_count * improved_fpr            # 2,992件
improved_cost = improved_fn * cost_fn + improved_fp * cost_fp
print(f"改善後: 見逃し{improved_fn:.0f}件, 偽陽性{improved_fp:.0f}件")
print(f"改善後月間コスト: {improved_cost:,.0f}円")
# 改善後: 見逃し300件, 偽陽性2,992件
# 改善後月間コスト: 15,295,500円

saving = current_cost - improved_cost
print(f"月間コスト削減: {saving:,.0f}円")
print(f"年間コスト削減: {saving * 12:,.0f}円")
# 月間コスト削減: 37,557,000円
# 年間コスト削減: 450,684,000円

Mission 2: 検知戦略の策定(10分)

不正検知システムの多層防御戦略を設計せよ。

タスク:

  1. 取引処理の各フェーズ(取引前・取引中・取引後)で実施すべき検知方法を設計する
  2. 各フェーズで使用する特徴量の候補を3つ以上挙げる
  3. ルールベースとMLモデルをどう組み合わせるか方針を示す
  4. リアルタイム検知とバッチ検知の使い分けを説明する
解答例
多層防御戦略:

Phase 1: 取引前チェック(リアルタイム)
  手法: ルールベース + デバイスフィンガープリント
  特徴量:
    - デバイス情報(ブラウザ、OS、画面解像度)
    - IPアドレスとジオロケーション
    - アカウントの年齢と過去の取引履歴
    - ログインからの経過時間
  判定: 明確な不正パターンはここでブロック

Phase 2: 取引時スコアリング(リアルタイム)
  手法: MLモデル(LightGBM/XGBoost)
  特徴量:
    - 取引金額と過去の取引金額の偏差
    - 直近1時間/24時間の取引頻度
    - 商品カテゴリと過去の購入パターンの乖離
    - 配送先住所と登録住所の距離
  判定: スコアに応じて承認/要確認/拒否に分類

Phase 3: 取引後分析(バッチ)
  手法: 異常検知モデル + グラフ分析
  特徴量:
    - 取引ネットワーク(同一カード/住所/IP)
    - 時系列パターンの変化
    - チャージバック履歴との相関
  判定: 不正パターンの新規発見、モデル再学習

ルールとMLの組み合わせ:
  - ルール: 既知の明確な不正パターン(高速・確実)
  - ML: 複雑なパターン・未知の不正(柔軟・適応的)
  - ルールでフィルタ後、MLで精密判定する直列構成

Mission 3: KPI設計(10分)

不正検知システムのKPIダッシュボードを設計せよ。

タスク:

  1. 検知性能に関するKPIを4つ以上定義する
  2. ビジネス影響に関するKPIを3つ以上定義する
  3. 各KPIの目標値と閾値(アラート基準)を設定する
  4. KPIのモニタリング頻度を決定する
解答例
不正検知KPIダッシュボード:

【検知性能KPI】
| KPI               | 定義                       | 目標値  | アラート閾値 | 頻度     |
|-------------------|---------------------------|---------|------------|----------|
| 検知率(Recall)    | TP / (TP + FN)            | ≥ 80%   | < 70%      | 日次     |
| 適合率(Precision) | TP / (TP + FP)            | ≥ 10%   | < 5%       | 日次     |
| 偽陽性率(FPR)     | FP / (FP + TN)            | ≤ 0.5%  | > 1.0%     | 日次     |
| PR-AUC            | PR曲線の下の面積            | ≥ 0.60  | < 0.45     | 週次     |
| 判定レイテンシ      | モデル推論の応答時間         | P99≤200ms| P99>500ms  | リアルタイム|

【ビジネスKPI】
| KPI                | 定義                        | 目標値     | アラート閾値  | 頻度   |
|--------------------|-----------------------------|-----------|-------------|--------|
| 月間不正被害額       | 見逃した不正の被害総額         | ≤ 1,000万円| > 2,000万円  | 月次   |
| 偽陽性コスト         | 誤検知による対応コスト+機会損失  | ≤ 200万円  | > 500万円    | 月次   |
| 顧客影響率          | 偽陽性で影響を受けた顧客の割合   | ≤ 0.3%    | > 0.7%      | 週次   |

達成度チェック

  • 現行システムと改善後の総コストを正しく計算できた
  • 多層防御戦略を3フェーズで設計できた
  • ルールベースとMLの使い分けを説明できた
  • 検知性能KPIを4つ以上定義できた
  • ビジネスKPIを3つ以上定義できた
  • 目標値とアラート閾値を合理的に設定できた

推定所要時間: 30分