45395 - シコウサクゴ -

AIに「やめろ」と言わせる仕組み:Go/No-Go判定の自動化

2026-04-02
AI駆動開発
AI駆動開発
意思決定
統計
Wilson信頼区間
モンテカルロ
ClaudeCode
自動化
Last updated:2026-04-02
13 Minutes
2455 Words

新しい戦略や機能を実装した後、「もう少し続ければ結果が出るはず」と思い続けた経験はないだろうか。人間はサンクコスト(埋没費用)に引きずられる。時間をかけた施策ほど、やめる判断が遅れる。

この問題を解決するために、Go/No-Go判定を統計的基準で自動化した。判定基準を満たさなければ、AIが「NO-GO」と判定し、対象を凍結する。人間の感情を排除した意思決定の仕組みだ。


問題:人間は「やめる判断」が苦手

サンクコストの罠

1
施策を100時間かけて実装した
2
→ 結果が出ない
3
→ 「もう少し調整すれば...」
4
→ さらに50時間投入
5
→ やっぱり結果が出ない
6
→ 「ここまでやったのにやめるのはもったいない」
7
→ さらに30時間投入...

これはサンクコストの誤謬(Sunk Cost Fallacy)だ。過去に投入したコストは、将来の意思決定に影響を与えるべきではない。しかし人間の直感はそう動かない。

客観的基準が必要

「やめるかどうか」を毎回人間が判断すると、以下の問題が起きる。

  1. 感情バイアス: 自分が書いたコードを否定したくない
  2. 確証バイアス: うまくいったケースだけを記憶する
  3. 判断の一貫性欠如: 疲れているとき、調子がいいときで判断基準がブレる

必要なのは、統計的に定義された判断基準と、それを機械的に適用する仕組みだ。


Go/No-Go判定フレームワーク

判定基準の4要素

1
判定条件(すべてを満たす場合のみGO):
2
1. サンプルサイズ: 30回の実行以上
3
2. 成功率の信頼区間: Wilson信頼区間の下限 > 40%
4
3. 実行頻度: ポアソン分布で期待頻度を検証
5
4. システム破綻確率: Monte Carloシミュレーション で ≤ 0.01%

各要素の設計意図を説明する。

1. サンプルサイズ: 30回の実行以上

統計的推論の最低ラインだ。30未満ではどの検定も信頼性が低い。ただし、サンプルサイズが30に達するまでの「待ち」の期間も重要で、ポアソン分布で期待頻度を検証することで「いつまで待つか」を定量化する。

2. Wilson信頼区間

通常の正規近似による信頼区間(Wald区間)はサンプルサイズが小さいとき精度が落ちる。Wilson信頼区間は、特に成功率が0%や100%に近い場合や、サンプルが50以下の場合に正規近似より正確な推定を返す。

1
import numpy as np
2
from scipy import stats
3
4
def wilson_confidence_interval(successes: int, total: int, confidence: float = 0.95) -> tuple[float, float]:
5
"""Wilson信頼区間を計算"""
6
if total == 0:
7
return (0.0, 0.0)
8
z = stats.norm.ppf(1 - (1 - confidence) / 2)
9
p_hat = successes / total
10
denominator = 1 + z**2 / total
11
center = (p_hat + z**2 / (2 * total)) / denominator
12
margin = z * np.sqrt(p_hat * (1 - p_hat) / total + z**2 / (4 * total**2)) / denominator
13
return (center - margin, center + margin)
14
15
def go_no_go_judgment(successes: int, total: int, threshold: float = 0.40) -> str:
8 collapsed lines
16
"""Go/No-Go判定"""
17
if total < 30:
18
return "PENDING" # サンプル不足
19
lower, upper = wilson_confidence_interval(successes, total)
20
if lower > threshold:
21
return "GO"
22
else:
23
return "NO-GO"

閾値を40%に設定しているのは、「95%信頼区間の下限が40%を超える」ということが、実質的に「真の成功率が40%以下である可能性が極めて低い」ことを意味するからだ。

3. ポアソン分布による実行頻度検証

サンプルサイズが30に達するまでの期間が想定より長い場合、そもそも処理パターンが実行シグナルを十分に生成していない可能性がある。

1
from scipy.stats import poisson
2
3
def validate_execution_frequency(
4
observed_executions: int,
5
days_elapsed: int,
6
expected_executions_per_day: float
7
) -> dict[str, str | float]:
8
"""実行頻度がポアソン分布の期待値と整合するか検証"""
9
expected_total = expected_executions_per_day * days_elapsed
10
p_value = poisson.cdf(observed_executions, expected_total)
11
return {
12
"expected": expected_total,
13
"observed": observed_executions,
14
"p_value": p_value,
15
"judgment": "WARNING" if p_value < 0.05 else "OK",
1 collapsed line
16
}

4. システム破綻確率: Monte Carloシミュレーション

成功率とコスト対効果比から、リソースがゼロになる確率をシミュレーションで算出する。閾値は0.01%(1万回に1回)。

1
def estimate_ruin_probability(
2
success_rate: float,
3
reward_ratio: float,
4
risk_per_execution: float = 0.02,
5
initial_resource: float = 1.0,
6
num_simulations: int = 10000,
7
max_executions: int = 1000,
8
) -> float:
9
"""Monte Carloでシステム破綻確率を推定"""
10
ruin_count = 0
11
rng = np.random.default_rng(42)
12
for _ in range(num_simulations):
13
resource = initial_resource
14
for _ in range(max_executions):
15
if rng.random() < success_rate:
7 collapsed lines
16
resource += resource * risk_per_execution * reward_ratio
17
else:
18
resource -= resource * risk_per_execution
19
if resource <= 0:
20
ruin_count += 1
21
break
22
return ruin_count / num_simulations

実例:パターン検出アルゴリズムAの凍結判定

背景

パターン検出アルゴリズムA(時系列パターン検出)を使ったトレンド追従処理を実装した。過去データ検証では高いコスト対効果比を示していたため期待していた。

Practice期間の結果

1
期間: 2026-01-15 〜 2026-02-28(45日間)
2
実行数: 42(30以上: ✅)
3
成功率: 35%(15成功 / 42実行)
4
コスト対効果比: 2.8

コスト対効果比2.8は優秀に見える。成功率35%でもコスト対効果比が高ければ期待値はプラスだ——と人間は考える。しかし統計的基準はそう判断しなかった。

Go/No-Go判定の実行

1
# Wilson信頼区間の計算
2
lower, upper = wilson_confidence_interval(successes=15, total=42)
3
# lower = 0.222, upper = 0.502
4
5
# Go/No-Go判定
6
result = go_no_go_judgment(successes=15, total=42, threshold=0.40)
7
# result = "NO-GO"
8
# 理由: Wilson下限 0.222 < 閾値 0.40

Wilson信頼区間の下限は0.222(約22%)。95%の信頼度で「真の成功率は22%〜50%のどこか」という結果だ。下限が40%を大きく下回っているため、NO-GO判定となった。

なぜコスト対効果比が高くてもNO-GOなのか

1
期待値の計算:
2
成功率35% × コスト対効果比 2.8 = 0.35 × 2.8 - 0.65 × 1.0 = 0.33(プラス)
3
4
しかし:
5
Wilson下限22%で計算すると:
6
0.22 × 2.8 - 0.78 × 1.0 = -0.164(マイナス)

最悪ケース(信頼区間の下限)で計算すると期待値がマイナスになる。「真の成功率が22%である可能性」を無視して本番移行すべきではない。

判定後のアクション

NO-GO判定 = 「凍結」であり「破棄」ではない。

1
凍結時のアクション:
2
1. 処理パターンを enabled: false に設定
3
2. 凍結理由と判定データをWBSに記録
4
3. 再評価日を90日後に設定
5
4. 運用環境の変化(レジーム転換)があれば前倒しで再評価

WBSとの統合

Go/No-Go判定日をWBSに組み込むことで、「判定を忘れる」ことを防ぐ。

1
NEW-11(リトライ制御処理):
2
Go/No-Go判定: 2026-04-01
3
判定基準: 30実行以上, Wilson下限 > 40%

施策のライフサイクル

1
計画 → 実装 → Dry-Run → Practice → Go/No-Go → 本番 or 凍結
2
3
統計的判定
4
(人間の感情を排除)

各フェーズの移行条件が明確に定義されているため、「なんとなく本番に移行する」ことがなくなる。Dry-RunからPracticeへの移行にはテスト全PASSが条件、PracticeからGo/No-Goへの移行には30回以上の実行サンプルが条件だ。


判定結果の蓄積と活用

過去の判定ログ

1
2026-01 パターン検出アルゴリズムA → NO-GO(成功率35%, Wilson下限22%)
2
2026-01 RSI平均回帰処理 → GO(成功率52%, Wilson下限41%)
3
2026-02 統計的反発検出B → GO(成功率48%, Wilson下限42%)
4
2026-02 グリッド分散処理 → PENDING(実行数18, サンプル不足)
5
2026-03 乖離検出C → NO-GO(成功率38%, Wilson下限29%)

判定ログを蓄積することで、「どの種類のストラテジー/処理パターンがGO判定を得やすいか」という傾向分析が可能になる。これは将来の施策立案に活用できるメタ分析だ。


学んだこと

1. 統計的基準で感情を排除する

人間は「もう少し続ければ結果が出る」と思いがちだ。Wilson信頼区間という統計的基準を設けたことで、「やめる判断」が感情ではなくデータで行われるようになった。判断基準が事前に定義されているため、結果が出た後に基準を変更する誘惑も排除できる。

2. Wilson信頼区間はサンプルサイズが小さいときに正確

通常の正規近似(Wald区間)は、サンプルサイズが50以下のとき信頼区間が不正確になる。Wilson信頼区間はこの問題を補正するため、30〜50回の実行という現実的なサンプルサイズで信頼性の高い判定が可能だ。

3. NO-GO判定は「凍結」であり「破棄」ではない

運用環境は変化する。ある時期にNO-GOだった処理パターンが、入力データの傾向が変われば有効になることもある。凍結した施策に再評価日を設定し、条件が変わればPracticeフェーズから再開する設計にしている。


まとめ

Go/No-Go判定の自動化で重要なのは以下の3点だ。

  1. 統計的基準の事前定義: サンプルサイズ30以上、Wilson信頼区間の下限 > 40%、システム破綻確率 0.01%以下を判定開始前に定義し、結果を見てから基準を変えない
  2. WBSへの判定日組み込み: Go/No-Go判定日をプロジェクト管理に組み込み、判定忘れを防止する
  3. 凍結と再評価のサイクル: NO-GOは破棄ではなく凍結。90日後の再評価日を設定し、運用環境の変化に応じて再開の判断を行う

「やめる」判断を人間に委ねるとバイアスが入る。統計的基準をコードに実装し、機械的に判定させることが、長期的な成果につながる。

Article title:AIに「やめろ」と言わせる仕組み:Go/No-Go判定の自動化
Article author:45395
Release time:2026-04-02