導論:為什麼我們需要 k-fold 交叉驗證 (k-fold Cross-Validation)?

歡迎!在準備 統計風險建模 (SRM) 的過程中,你可能已經發現,建立模型只是成功的一半。真正的挑戰在於如何判斷模型在面對全新的、未見過的數據時表現如何。這正是統計學習中的「聖杯」。

在理想的情況下,我們會擁有無窮無盡的數據來測試模型;但在現實中,數據往往是有限的。k-fold 交叉驗證 (CV) 是一種巧妙的技術,它讓我們能利用現有的數據,在不需要額外龐大測試集的情況下,準確評估模型在「真實世界」中的表現。如果現在覺得這個概念有點抽象也不必擔心,我們會一步步為你拆解!


什麼是 k-fold 交叉驗證?

想像你在準備 SRM 考試。如果你反覆練習同一份考古題,最後你只是把答案背下來了。這並不代表你真正理解內容,只是代表你記住了那份特定的試卷。要真正檢驗自己的程度,你必須面對從未見過的題目。

k-fold 交叉驗證 對數據所做的正是這件事。它將現有的數據隨機分成 k 個大小相等的組別(稱為「折」或 folds)。

過程如下:

1. 分割 (Divide): 將總數據集分成 k 組(折),大小大致相等。
2. 迭代 (Iterate): 對於每一組:
   a. 將該組視為「測試集」(我們常稱為驗證集)。
   b. 將剩下的 k-1 組視為「訓練集」。
   c. 使用訓練集訓練模型,並計算驗證集上的誤差(如均方誤差,即 MSE)。
3. 平均 (Average): 完成 k 次迭代後,你會得到 k 個不同的誤差估計值。將它們平均,即可得到最終的交叉驗證誤差估計值。

公式:
k-fold CV 估計值是透過計算每一折 MSE 的平均值所得:
\( CV_{(k)} = \frac{1}{k} \sum_{i=1}^k MSE_i \)


「為什麼」:比較 k-fold 與其他方法

你可能會問:「為什麼不直接把數據分成一個訓練集和一個驗證集?」(這稱為驗證集法 Validation Set Approach)。或者:「為什麼不讓 k 等於觀測值的數量?」(這稱為留一交叉驗證 Leave-One-Out Cross-ValidationLOOCV)。

1. k-fold 與驗證集法

驗證集法很簡單,但有兩個明顯缺點:
- 變異數過高 (High Variability): 誤差估計值會受到哪些觀測值被分入訓練集而大幅波動。
- 高估誤差 (Overestimating Error): 因為模型只用了部分數據進行訓練,表現通常會比使用完整數據集時差,這會導致對測試誤差率的「高估」。

2. k-fold 與 LOOCV

LOOCV 是 k-fold 的一種特殊情況,即 k = n(等於觀測值總數)。雖然 LOOCV 非常穩定,但它的計算成本很高,因為你必須訓練模型 n 次!如果你有 10 萬筆數據,你的電腦可能會「罷工」。

核心重點: k-fold CV(通常取 k=5k=10)是所謂的「金髮姑娘原則」最佳選擇——它比驗證集法更準確,且計算速度遠比 LOOCV 快得多。


k-fold CV 中的偏差-變異數權衡 (Bias-Variance Trade-off)

這是 SRM 考試非常熱門的考題!選擇 k 的過程涉及偏差 (Bias)變異數 (Variance) 之間的權衡。

偏差(估計的準確度):

LOOCV (k=n) 的偏差非常低。為什麼?因為每個訓練集都有 \( n-1 \) 個觀測值,幾乎等於完整數據集。相比之下,5-fold CV 只使用 80% 的數據進行訓練,這可能會稍微高估測試誤差。因此,當 k 增加,偏差會減少

變異數(估計的一致性):

這是最反直覺的部分。LOOCV 的變異數其實比 k-fold CV 更高。當我們進行 LOOCV 時,我們是在將 \( n \) 個模型訓練出的結果進行平均,而這些模型所使用的訓練數據幾乎完全相同。這些輸出結果之間存在高度相關性。高度相關變數的平均值,其變異數比相關性較低的變數平均值還要高。因此,當 k 增加,變異數會增加

重點複習箱:
- k = 5 或 10: 「甜蜜點」。偏差與變異數的最佳平衡點。
- LOOCV (k=n): 低偏差,但高變異數且計算成本極高。


現實案例:預測保險索賠

假設你是一位精算師,正在建立一個模型來預測汽車保險索賠成本。你有 1,000 筆過往索賠資料。如果你使用 10-fold 交叉驗證
1. 你將 1,000 筆索賠資料分成 10 組,每組 100 筆。
2. 你用 900 筆資料訓練模型,並在「剩下的」100 筆資料上進行測試。
3. 你重複這個過程 10 次,確保每一筆索賠資料都有且僅有一次成為「測試集」。
4. 將 10 次的結果平均。這能讓你真實預估模型在明天面對新客戶時的表現。


常見錯誤提示

1. 混淆 k-fold 與訓練: 記住,k-fold CV 是用於評估比較模型,而不是用於訓練最終的模型。當你透過 k-fold 決定出最好的模型後,通常會使用整個數據集重新訓練該模型。
2. 非隨機分割: 如果你的數據已排序(例如按日期或索賠金額),你必須先將其打亂再建立折數。否則,你的分割將不具備整個數據集的代表性。
3. 「k」的選擇: 不要以為 k 越大越好。雖然 k=n (LOOCV) 的偏差最小,但計算成本和高變異數使得 k=5k=10 在實務上通常是更好的選擇。


總結與記憶口訣

為了幫助你記住 k-fold CV 的步驟,請記住 "S.T.A.R."
S - Split (分割) 數據為 k 個折。
T - Train (訓練) 於 k-1 個折上。
A - Assess (評估/驗證) 於剩下的折上。
R - Repeat (重複) k 次並計算平均。

考試重點:
- k-fold CV 用於估計測試誤差率
- 比驗證集法更穩定。
- 比 LOOCV 更具計算效率。
- 典型的 k 值為 5 或 10。
- 較低的 k = 較高偏差、較低變異數。
- 較高的 k = 較低偏差、較高變異數。

如果覺得偏差與變異數的部分有點反直覺也不用擔心!只要記住:LOOCV 因為幾乎使用了所有數據所以「偏差低」,但因為各個折之間的訓練數據太相似,所以「變異數高」。