## AUC 簡介

- 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 實際例子

上圖為下面計算完成後所繪製的。
>[!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
優點: 相對簡單,且計算較為快速