Selective Prediction(選択的予測)とは、モデルの校正済み確信度に基づいて「回答するか棄権するか」を動的に判断する意思決定フレームワークである。確信度が事前に設定した閾値を下回る場合は回答を保留し人間の専門家にエスカレーションすることで、システム全体の信頼性と正確性を向上させる。Abstention(棄権)やReject Option(拒否オプション)とも呼ばれる。
Selective Prediction(選択的予測)は、予測モデルが自身の確信度に基づいて「この質問には自信を持って回答できる」または「この質問は不確実なので回答を控える」という判断を行うフレームワークである。1970年代のChow(1970)による棄権付き分類の理論に端を発し、2020年代のLLM普及に伴い実用的な重要性が飛躍的に高まった。
Selective Predictionの核心は「カバレッジ(Coverage)と精度(Accuracy)のトレードオフ」である。全質問に回答すれば(カバレッジ100%)精度は下がり、高確信度の質問にのみ回答すれば(カバレッジ低下)精度は上がる。このトレードオフを定量化し最適な動作点を見つけることがSelective Predictionの目標である。
| 指標 | 定義 | 典型的な目標値 |
|---|---|---|
| カバレッジ(Coverage) | 回答した質問の割合 | 70-90% |
| 選択的精度(Selective Accuracy) | 回答した質問の中での正答率 | 95%以上 |
| 棄権率(Abstention Rate) | 回答を拒否した質問の割合 | 10-30% |
| Risk-Coverage AUC | RC曲線下面積 | 0.95以上 |
| AURC(Area Under RC) | 正規化RC曲線下面積 | 小さいほど良い |
Selective Predictionは選択関数g(x)と予測関数f(x)の組み合わせで定義される。
(f, g)(x) = { f(x) if g(x) = 1 (回答する)
{ 棄権 if g(x) = 0 (回答しない) }
選択関数g(x)は確信度スコアc(x)と閾値θの比較で決定される。
g(x) = 1 if c(x) >= θ
g(x) = 0 if c(x) < θ
選択的リスク(Selective Risk)は以下で定義される。
R(f, g) = E[L(f(x), y) * g(x)] / E[g(x)]
L(f(x), y)は損失関数、E[g(x)]はカバレッジに相当する。閾値θを上げるとカバレッジが下がり選択的リスクも下がる。
Selective Predictionの性能は確信度スコアの品質に直結する。LLMで利用可能な確信度スコアを比較する。
| 確信度スコア | 計算方法 | logit必要 | コスト | 品質(AUROC) |
|---|---|---|---|---|
| Max Token Prob | max(softmax(logits)) | はい | 低 |
| 0.75-0.82 |
| Mean Token Prob | mean(softmax(logits)) | はい | 低 | 0.72-0.80 |
| Temperature Scaled Prob | softmax(logits/T) | はい | 低 | 0.80-0.88 |
| Self-Consistency | 複数回サンプリング一致率 | いいえ | 高(N倍) | 0.82-0.90 |
| Verbalized Confidence | LLMに確信度を質問 | いいえ | 低 | 0.70-0.82 |
| Semantic Entropy | 意味的に等価な回答のエントロピー | いいえ | 高(N倍) | 0.85-0.92 |
| P(True) | 「この回答は正しいですか」への確率 | はい | 低 | 0.78-0.85 |
Kuhn et al.(2023)が提案したSemantic Entropyは、複数回サンプリングした回答を意味的等価性でクラスタリングし、クラスタ分布のエントロピーを計算する手法である。表面的に異なる表現でも意味が同じ回答を同一クラスタに統合するため、Self-Consistencyよりも頑健な不確実性推定が可能である。
def semantic_entropy(responses, embedder, n_clusters=None):
embeddings = [embedder.encode(r) for r in responses]
from sklearn.cluster import AgglomerativeClustering
clustering = AgglomerativeClustering(
n_clusters=None, distance_threshold=0.3
).fit(embeddings)
labels = clustering.labels_
from collections import Counter
counts = Counter(labels)
total = len(labels)
entropy = -sum((c/total) * np.log(c/total) for c in counts.values())
return entropy
最もシンプルなアプローチ。検証データ上で目標精度(例: 95%)を達成する最低閾値を探索する。
タスクの種類やリスクレベルに応じて閾値を変動させる。医療質問では高閾値(θ=0.9)、雑談では低閾値(θ=0.5)を適用する。
| ドメイン | 推奨閾値 | カバレッジ目安 | 根拠 |
|---|---|---|---|
| 医療診断支援 | 0.90-0.95 | 40-60% | 誤回答の被害が甚大 |
| 法律相談 | 0.85-0.90 | 50-70% | 法的リスクが高い |
| 金融アドバイス | 0.80-0.90 | 55-75% | 経済的損失リスク |
| カスタマーサポート | 0.65-0.75 | 75-90% | 人間対応で補完可能 |
| 教育支援 | 0.60-0.70 | 80-95% | 誤りからも学べる |
| 雑談・エンタメ | 0.40-0.50 | 90-98% | リスクが低い |
棄権のコスト(人間対応コスト)と誤回答のコスト(損害額)を定量化し、期待コストを最小化する閾値を求める。
Expected Cost(θ) = P(回答 & 正解) × 0
+ P(回答 & 不正解) × C_error
+ P(棄権) × C_abstain
class SelectivePredictionPipeline:
def __init__(self, model, calibrator, threshold=0.75, escalation_handler=None):
self.model = model
self.calibrator = calibrator
self.threshold = threshold
self.escalation = escalation_handler
def predict(self, query):
response = self.model.generate(query)
raw_confidence = self.model.get_confidence(query, response)
calibrated = self.calibrator.transform(raw_confidence)
if calibrated >= self.threshold:
return {"answer": response, "confidence": calibrated, "status": "auto"}
elif self.escalation:
ticket = self.escalation.create(query, response, calibrated)
return {"answer": None, "confidence": calibrated, "status": "escalated", "ticket": ticket}
else:
return {"answer": response, "confidence": calibrated, "status": "low_confidence", "warning": "この回答は確信度が低いため正確性を保証できません"}
A1: 3つのアプローチがある。(1)目標精度ベース: 検証データ上で「選択的精度95%以上」等の目標を設定し対応する閾値を逆引きする。(2)コストベース: 誤回答コストC_errorと棄権コストC_abstainの比率からExpected Costを最小化する閾値を計算する。医療分野ではC_error/C_abstain比が大きいため閾値は高くなる。(3)カバレッジ制約ベース: 「全質問の80%以上に回答する」という運用制約の下で選択的精度を最大化する。実務ではまず目標精度ベースで初期閾値を設定しA/Bテストで調整するのが一般的である。
A2: 棄権質問の処理フローは応用領域によって異なる。(1)人間エスカレーション: 専門家キューに転送し人間が回答する。カスタマーサポートでは平均対応時間が15-30分増加するがNPS(顧客満足度)は10-20ポイント向上する。(2)情報追加要求: ユーザーに追加情報を求め確信度向上後に再回答する。「もう少し具体的に教えていただけますか?」等。(3)段階的回答: 低確信度回答を免責事項付きで提供する。「以下は確信度60%の回答です。専門家への確認を推奨します」。(4)RAG強化: 追加の検索を実行し外部知識で確信度を引き上げてから回答する。
A3: Selective PredictionとRAG(Retrieval-Augmented Generation)は相補的に機能する。RAGは外部知識ベースから関連情報を検索して回答精度を向上させ、Selective Predictionは回答の確信度が不十分な場合にエスカレーションする。最適なパイプラインは「RAGで回答生成 → 校正済み確信度算出 → 閾値判定 → 低確信度なら追加検索or棄権」の多段構成である。Jiang et al.(2023)の研究ではRAG + Selective Predictionの組み合わせが、RAG単体と比較して選択的精度を92%から97%に改善した。