## AUC 簡介 ![image](https://hackmd.io/_uploads/BJzNkvb6ge.png) - AUC 的建立流程是: 先準備每筆資料的「預測分數」與「真實標籤」 → 設定多個 threshold → 計算各 threshold 的 TPR 與 FPR → 繪製 ROC 曲線 → 計算曲線下的面積作為 AUC。 - AUC計算方式 AUC = ROC–curve這條線以下的面積,即代表 AUC 越大正確率越高。 - AUC 特性 **1.** 如果把資料的正負標籤整個「對調」,新舊 AUC 為互補,新的AUC會變成 1 - 原本的AUC $$AUC(new) = 1 - AUC(origin)$$ **2.** AUC的範圍在1 ~ 0 之間。 - AUC 優點 相較於其他指標,AUC 相對更 ”客觀”,因為它考慮全部 threshold 的情況。 - AUC 判別規則 $AUC = 0.5$ (no discrimination 無鑑別力),ROC剛好是對角線 $0.7 ≦ AUC ≦ 0.8$ (acceptable discrimination 可接受的鑑別力) $0.8 ≦ AUC ≦ 0.9$ (excellent discrimination 優良的鑑別力) $0.9 ≦ AUC ≦1.0$ (outstanding discrimination 極佳的鑑別力) ## AUC 實際例子 ![image](https://hackmd.io/_uploads/SJtL_IbTel.png) 上圖為下面計算完成後所繪製的。 >[!Tip] AUC 計算流程 & 實際操作 >**Step 0 : dataset** >``` >y = [1, 1, 0, 0, 1] >y_pred_proba =[300, 720, 850, 400, 200] >``` >**Step 1:將預測機率排序(由大到小)** >``` >y_pred_proba = [300, 720, 850, 400, 200] >sort_y_pred_proba = [850, 720, 400, 300, 200] #排序後的 >``` >**Step 2:建立 Threshold 列表** 在排序好的預測值基礎上,於最前面加上一個「最大值+1」,作為第一個 threshold: >``` >threshold = [851, 850, 720, 400, 300, 200] >``` >**Step 3:計算各 Threshold 對應的 FPR、TPR** 用剛剛所得出的 threshold 去運算 FPR, TPR ,如果有重複的點位就將其刪除 >``` >roc_point = [{0, 0}, {0, 0.33}, {0, 0.67}, {0, 0.67}, {1, 0.67}, {1, 1}] >``` >**Step 4:移除重複的點** 例如這裡有兩個 {0, 0.67},將重複的點去掉,得到: >``` >New_roc_point = [{0, 0}, {0, 0.33}, {0, 0.67}, {1, 0.67}, {1, 1}] >``` >**Step 5:繪製 ROC 曲線並計算 AUC** >- 使用 `New_roc_point` 依序連線,即為 ROC 曲線 >- 將曲線下方的區域分割成梯形,計算面積總和 ## Python 上的 AUC **方法(一)** ``` from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt fpr, tpr, thresholds = roc_curve(y_true, y_score) roc_auc = auc(fpr, tpr) ``` > 先用 `roc_curve` 去計算 fpr, tpr,在使用 `auc` 去計算最終的值。 >優點: 可畫 ROC-curve, 將數據視覺化且能得到 threshold **方法(二)** ``` from sklearn.metrics import roc_auc_score auc = roc_auc_score(y_true, y_score) ``` > 直接使用 `roc_auc_curve` 計算 auc 優點: 相對簡單,且計算較為快速