AI・機械学習
上級

Selective Prediction(セレクティブプレディクション)

Selective Prediction(選択的予測)とは、モデルの校正済み確信度に基づいて「回答するか棄権するか」を動的に判断する意思決定フレームワークである。確信度が事前に設定した閾値を下回る場合は回答を保留し人間の専門家にエスカレーションすることで、システム全体の信頼性と正確性を向上させる。Abstention(棄権)やReject Option(拒否オプション)とも呼ばれる。

0 回閲覧
0 いいね

Selective Predictionとは

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 AUCRC曲線下面積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 Probmax(softmax(logits))はい低0.75-0.82
Mean Token Probmean(softmax(logits))はい低0.72-0.80
Temperature Scaled Probsoftmax(logits/T)はい低0.80-0.88
Self-Consistency複数回サンプリング一致率いいえ高(N倍)0.82-0.90
Verbalized ConfidenceLLMに確信度を質問いいえ低0.70-0.82
Semantic Entropy意味的に等価な回答のエントロピーいいえ高(N倍)0.85-0.92
P(True)「この回答は正しいですか」への確率はい低0.78-0.85

Semantic Entropy

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.9540-60%誤回答の被害が甚大
法律相談0.85-0.9050-70%法的リスクが高い
金融アドバイス0.80-0.9055-75%経済的損失リスク
カスタマーサポート0.65-0.7575-90%人間対応で補完可能
教育支援0.60-0.7080-95%誤りからも学べる
雑談・エンタメ0.40-0.5090-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": "この回答は確信度が低いため正確性を保証できません"}

よくある質問(FAQ)

Q1: Selective Predictionの閾値はどのように最適化すべきですか?

A1: 3つのアプローチがある。(1)目標精度ベース: 検証データ上で「選択的精度95%以上」等の目標を設定し対応する閾値を逆引きする。(2)コストベース: 誤回答コストC_errorと棄権コストC_abstainの比率からExpected Costを最小化する閾値を計算する。医療分野ではC_error/C_abstain比が大きいため閾値は高くなる。(3)カバレッジ制約ベース: 「全質問の80%以上に回答する」という運用制約の下で選択的精度を最大化する。実務ではまず目標精度ベースで初期閾値を設定しA/Bテストで調整するのが一般的である。

Q2: 棄権した質問はどう処理すべきですか?

A2: 棄権質問の処理フローは応用領域によって異なる。(1)人間エスカレーション: 専門家キューに転送し人間が回答する。カスタマーサポートでは平均対応時間が15-30分増加するがNPS(顧客満足度)は10-20ポイント向上する。(2)情報追加要求: ユーザーに追加情報を求め確信度向上後に再回答する。「もう少し具体的に教えていただけますか?」等。(3)段階的回答: 低確信度回答を免責事項付きで提供する。「以下は確信度60%の回答です。専門家への確認を推奨します」。(4)RAG強化: 追加の検索を実行し外部知識で確信度を引き上げてから回答する。

Q3: Selective PredictionとRAGの関係は?

A3: Selective PredictionとRAG(Retrieval-Augmented Generation)は相補的に機能する。RAGは外部知識ベースから関連情報を検索して回答精度を向上させ、Selective Predictionは回答の確信度が不十分な場合にエスカレーションする。最適なパイプラインは「RAGで回答生成 → 校正済み確信度算出 → 閾値判定 → 低確信度なら追加検索or棄権」の多段構成である。Jiang et al.(2023)の研究ではRAG + Selective Predictionの組み合わせが、RAG単体と比較して選択的精度を92%から97%に改善した。