Confidence — Methodology (P5-attribution)¶
/v1/stats/confidence は AutonoMath の Bayesian 信頼度 ダッシュボードです。
tool 単位で Discovery (見つけられる確率) と Use (実 action に変わる確率) を
推定し、95% credible interval と一緒に公開しています。本ページはそのモデル定義 (式・前提・PII の扱い) をまとめたものです。
1. 数値目標¶
| 指標 | T+90d | Y1 |
|---|---|---|
| Discovery | 90% | 95% |
| Use | 80% | 92% |
これは v8 plan の P5-attribution セクションで合意した北極星 (north-star) 値です。
2. 定義¶
2.1 Discovery¶
Discovery_T = P(found_result | invoked)
- trial: tool
Tへの 1 回の呼び出し - success: その呼び出しが 1 行以上の結果を返した (=
result_count > 0、 もしくはresult_bucket != "0") もの - データ源:
query_log_v2のtool/result_bucket/result_count列
「呼び出した結果ゼロ件」は 見つけられなかった の状態で、Discovery のミスとして カウントします。これがモデルがゼロ件 SERP を penalize する数学的な理由です。
2.2 Use¶
Use_T = P(returned_within_7d | first_invocation)
- trial: 各 (api_key_hash, tool) の 最初 のイベント (= 初回呼び出し)
- success: 同じ (api_key_hash, tool) で 7 日以内に再度の呼び出しがあった
- データ源:
usage_eventsのkey_hash/endpoint/ts列
匿名 (key_hash IS NULL) のリクエストは識別不能なので Use の計算から除外します。
Discovery は匿名でも計算できますが、Use の母集団は authenticated 顧客に限定します。
7 日 window は 「retention の確認」を「one-shot trial」と切り分ける ための 閾値で、長すぎる (e.g. 30 日) と "1 回だけ試して 3 週間放置" まで hit に入って しまい、短すぎる (e.g. 1 日) と LLM の context が切れた翌日訪問が miss になります。
3. Bayesian モデル¶
各 tool の確率は独立 Bernoulli プロセスとしてモデル化します。
- 事前分布:
Beta(1, 1)(= Uniform[0, 1]) - 事後分布:
Beta(α + hits, β + trials − hits)(共役事前による閉形式) - 95% credible interval:
scipy.stats.beta.interval(0.95, α, β)
3.1 サンプル計算¶
Beta(1, 1) + 80 hit / 100 trial を観測した場合:
posterior = Beta(1 + 80, 1 + 100 − 80) = Beta(81, 21)
posterior mean = 81 / (81 + 21) = 0.7941…
95% CI ≈ [0.711, 0.866]
事後平均は 79.4% で、Use の T+90d 目標 (80%) を わずかに下回ります。CI は 71%–87% なので「目標 80% を下回ったかどうか」は trial を増やさないと統計的に 判断できません。これが 「targets are earned by data, not preloaded」 の 意味で、勝手に勝利宣言できないようになっています。
3.2 Cohort 集計¶
- 各 tool の事後分布は 5 つの公開 audience cohort に分解して併記します:
tax_advisor/admin_scrivener/smb/vc/developer/other- それより細かい (= 個別顧客に近い) granularity は 一切 公開しません。
Cohort
otherは 5 audience に分類できなかった残余バケツです。
3.3 全体への重み付け¶
ヘッドライン値はトリガー回数で重み付けした posterior mean です:
これにより、呼び出し数の少ない tool が 100% でヘッドラインを引き上げる artifacts を避けています。
4. PII / プライバシー¶
query_log_v2には INV-21 によって PII redaction が適用済みです (raw 法人番号 / email / 電話番号は格納されない)。Confidence モデルは tool 名と結果バケットのみ参照し、フリーテキストには触れません。usage_eventsはkey_hash(SHA-256 + pepper の不可逆ハッシュ) を扱うのみ で、API key の生値は見ません。- 公開エンドポイント
/v1/stats/confidenceの出力は per-tool aggregates + cohort buckets だけで、per-customer breakdown は返却しません。
5. 更新サイクル¶
| 場所 | 更新タイミング |
|---|---|
/v1/stats/confidence (live) |
リクエスト時に live SQL + 5 分 in-memory cache |
analytics/confidence_<DATE>.json (snapshot) |
1 日 1 回 cron (scripts/cron/confidence_update.py) |
site/confidence.html (公開ダッシュボード) |
live + 履歴の 2 系統表示 |
6. 既知の制約¶
- 新 tool の cold-start: trial 数が小さい段階では CI 幅が広く、ヘッドラインを 引き上げるべきかどうかの統計的判断が難しい。trial = 30 を超えるまでは 目視で慎重に評価。
- Use の 7 日 window は固定: 業界によっては 14 日が妥当な可能性も ありますが、まずは 7 日でベースラインを取ります。再評価ターゲット = T+180d。
- Discovery と Use は独立計算: 結合確率 P(use | discovery) は推定して おらず、現状は周辺確率のみ。Y1 で結合 model に拡張予定。
7. 実装ファイル¶
src/jpintel_mcp/analytics/bayesian.py— モデル本体 (Beta posterior + CI)src/jpintel_mcp/api/confidence.py—/v1/stats/confidenceREST endpointscripts/cron/confidence_update.py— 日次スナップショットsite/confidence.html— 公開ダッシュボードtests/test_bayesian.py— モデル検証テスト