Conformal Prediction
コンフォーマル予測がAIに分布に依存しない不確実性を提供する仕組みを学びます。Ultralytics YOLO26で予測セットを実装し、信頼性の高いモデル結果を確保する方法をご紹介します。
共形予測は、機械学習(ML)における統計的フレームワークであり、モデルの予測に対して分布フリーな不確実性尺度を提供します。1つの特定のクラスラベルなど、単一の点予測を出力する代わりに、共形予測器は、ユーザーが指定した確率(例:90%または95%)で真の値を含む予測集合または予測区間を出力します。このフレームワークは、モデルのアーキテクチャを変更することなく、あらゆる人工知能(AI)モデルに適用でき、正式な統計的保証を提供します。最新のツールと研究の包括的なリストについては、Awesome Conformal Predictionリポジトリをご覧ください。
共形予測の仕組み#
基本的な仕組みは、非適合度スコアを使用して、新しい予測が過去の例と比較してどの程度異例であるかを評価することに基づいています。
- モデルのトレーニング:まず、標準的なトレーニングデータセットを使用してベースラインモデルをトレーニングします。
- キャリブレーションフェーズ:別途確保したキャリブレーションデータセットをトレーニング済みモデルに入力します。画像分類における逆確率など、各予測の非適合度スコアを計算します。
- 分位点の計算:目標信頼水準(例:95%)を決定し、これらのキャリブレーションスコアに対応する分位点を求めて予測集合を構築します。
- 推論への適用:ライブ推論中に新しい入力を評価し、スコアがキャリブレーション分位点を下回るすべての候補ラベルを含めます。
このアプローチの数学的証明については、A Gentle Introduction to Conformal Predictionのチュートリアルで確認できます。また、時間的な不確実性に対処するための時系列予測アプローチについて学ぶこともできます。
共形予測と関連用語の違い#
このフレームワークを、モデルのテスト中に使用される標準的な指標と区別することが重要です。
- 共形予測と信頼度スコアの比較:標準的な信頼度スコアはモデル内部の確信度を反映しますが、キャリブレーションが不十分で、数学的保証を欠いていることがよくあります。共形予測は、これらの生のスコアを保証付きの集合に変換します。従来の調整については、scikit-learnの確率キャリブレーションをご覧ください。
- 共形予測と精度の比較:精度は、データセット全体でモデルが正解する頻度を表す、過去の結果に基づくグローバルな指標です。一方、共形推論は、新しい各予測に対して、個々のインスタンスに特化したローカルな区間を提供します。
実世界での利用例#
共形予測は、モデルの盲点を把握することが重要な、重大な影響を伴う分野で不可欠です。
- 医療診断:医療分野でAIを活用してスキャン画像を分析する場合、モデルは、誤っている可能性のある単一のクラスではなく、妥当な診断候補の集合を出力できます。これにより、臨床医は実行可能なすべての可能性を調査でき、信頼性の高いゲノム医療と画像診断に関する近年の研究を支援できます。
- 自動運転:自動車システムにおけるAIで予測区間を物体検出に適用すると、歩行者の周囲に空間的な信頼領域を生成できます。これにより、車両のブレーキシステムは最悪の場合の動きを考慮し、安全に対応できます。
予測集合の実装#
MAPIE(モデル非依存予測区間推定器)などのライブラリは、Python向けの組み込みツールを提供しており、回帰タスクでは共形分位点回帰がよく使用されます。また、Ultralytics YOLO26などの高度なモデルの確率を使用して、基本的な共形予測ロジックを実装することもできます。次の例では、YOLO26の分類確率を使用して予測集合を構築し、累積しきい値に達するまで上位クラスを含めるロジックを再現します。
from ultralytics import YOLO
# Load an Ultralytics YOLO26 classification model
model = YOLO("yolo26n-cls.pt")
# Perform inference on an image
results = model("https://ultralytics.com/images/bus.jpg")
# Simple conformal-style prediction set logic based on cumulative probability
target_coverage = 0.95
prediction_set = []
cumulative_prob = 0.0
# Sort probabilities in descending order using the results object
probs = results[0].probs
sorted_indices = probs.top5
for idx in sorted_indices:
class_name = results[0].names[idx]
class_prob = probs.data[idx].item()
prediction_set.append((class_name, round(class_prob, 3)))
cumulative_prob += class_prob
# Stop adding to the set once we reach the 95% coverage threshold
if cumulative_prob >= target_coverage:
break
print(f"95% Prediction Set: {prediction_set}")信頼性の高いシステムを開発するには、キャリブレーションがデータドリフトによって損なわれないよう、堅牢なデータ運用が必要です。Ultralytics Platformなどのツールを使用すると、新しい分類データセットの収集、モデルの再トレーニング、安全なモデルデプロイの管理を簡素化できます。バランスの取れたデータのキュレーションについては、データセットバイアスの理解に関するガイドをご覧ください。また、毎年開催されるCOPA conferenceで発表された最新の進展を追跡することもできます。









