精確率與召回率
當你不再盲信原始準確率時,精確率與召回率就是接著要問的兩個問題。想像一個把影像標記為「含有行人」的模型。精確率問的是:在它標記出的所有影像中,真的有行人的比例是多少?它衡量一個「正例預測」有多可信。召回率問的是互補的問題:在所有真的有行人的影像中,模型抓到了多少比例?它衡量模型涵蓋得有多完整。精確率被「假警報」拉低;召回率被「漏抓」拉低。
精確地說,精確率 = TP / (TP + FP),召回率 = TP / (TP + FN),其中 TP 是真正例(正確標記)、FP 是假正例(不該標記卻標記了)、FN 是假負例(該標記卻漏掉了)。請注意精確率與召回率分子相同、分母不同:精確率的分母是模型標記出的全部,召回率的分母是實際為正的全部。由於兩者都忽略真負例,即使負例數量遠遠多於正例,它們仍有意義——這正是它們能在「準確率崩潰」的不平衡情境下存活的原因。
兩者之間存在一種根本的張力,由決策閾值掌控。分類器輸出一個分數(比方說機率),你把高於閾值者判為「正例」。提高閾值,你只標記最有把握的案例:精確率上升但召回率下降(你會漏掉處於邊界的真實案例)。降低閾值,你大方地標記:召回率上升但精確率下降(你會放進假警報)。你無法免費地同時最大化兩者;正確的操作點取決於在你的應用中,是「漏抓(FN)」還是「假警報(FP)」代價更高。
為了把這個取捨摘要成一個數字,人們使用 F1 分數,即調和平均 2·P·R / (P + R),只有在兩者都高時它才會高;更一般的 F-beta 可讓你在「漏抓更要緊」時,把召回率的權重設為精確率的 β 倍。若想看到整個取捨而非單一點,可掃描閾值畫出精確率–召回率曲線,並以平均精確率(該曲線下的面積)來摘要。在偵測與檢索任務中,這種 PR 觀點比 ROC 更受青睞,因為它在嚴重不平衡下仍具資訊量——而此時 ROC 的假正例率可能看起來小得有欺騙性。
一個瑕疵偵測器標記了 80 個零件;其中 60 個確實有瑕疵(TP=60、FP=20),而它漏掉了 40 個真實瑕疵(FN=40)。精確率 = 60/80 = 75%(每 4 個標記有 3 個是真的);召回率 = 60/100 = 60%(每 10 個瑕疵抓到 6 個)。F1 = 2·0.75·0.6/(0.75+0.6) ≈ 0.67。
精確率與召回率永遠是「對某一類別、在某一閾值下」定義的。只說「精確率 = 0.9」而不交代是哪一類別、在什麼閾值(或「如何平均」)是含糊的;對多類別,請註明你是用微平均(彙整所有樣本)還是宏平均(對各類別取平均)。