小樣本作戰守則
n≲3000 換一套決策統計:配對比較、平滑指標、多切分驗穩健。
支線 · 資料很少怎麼辦(訓練資料 < 3000 列時,做完 0 診斷 轉進這頁)
⏱ 約 11 分
這頁在講什麼
資料少於約三千列時,不是把流程做小一點,是換一套判斷方式——因為小樣本的分數本身就很不穩。
你要做的三件事
- 切更多次(10 折 × 5 重複起跳)
- 決策一律用配對比較,不看平均分門檻
- 跳過集成,單模 + 多種子平均就好
這頁會出現的術語(展開對照)
| 術語 | 白話 |
|---|---|
| 小樣本 | 訓練資料約 3000 列以下 |
| 重複切分 | 換不同隨機種子多切幾次,看分布而不是看單一數字 |
| 平滑指標 | 曲線下面積(AUC)這類看「排序」的分數,比準確率更敏感,小樣本才看得見弱訊號 |
| 多種子平均 | 同一設定換幾個隨機種子各跑一次再平均,消掉運氣成分 |
這裡沒收錄的詞?查完整詞彙表。
16. 小樣本作戰守則(n ≲ 3000,v2.2 新增)
小樣本不是「同樣的流程做小一點」,是換一套決策統計。鐵達尼(訓練池 n=623)實測:
- **RepeatedStratifiedKFold(10 折 × 5 重複)**起跳,單次 5 折的 std 不可信。
- 配對比較(§5.1 已訂為全域預設)在小樣本是不可退讓的:均值 ± std 的門檻在小樣本雜訊太大會全滅, 配對差卻穩定(small_n_paired.py 20 切分:配對差 std ≈ 分數 std 的 1/4;title 28% / family 21% / cabin 29%)。 小樣本更要靠跨多次切分的穩定度,別信單次的 t 值(見鐵達尼案的 20 切分)。
- 決策指標用平滑替代品:即使賽制指標是 Accuracy,迭代決策一律看曲線下面積(AUC)的配對差,閾值最後才在折外預測(OOF)上搜一次。 AUC 的解析度高於 Accuracy——但解析度只讓你「看得見」訊號,不保證訊號穩健。 實測(small_n_paired.py,20 次切分):票團目標編碼有害是鐵板結論(Accuracy / AUC 配對 t 中位數 -7.06 / -9.98,0/20 保留); Title、family、cabin 都只在 1/20 切分達 t>2——弱訊號本來就該在分布裡顯得弱,單看一次切分會把噪音當訊號。 決策工具的解析度決定你看不看得見,多次切分決定你信不信。 修訂史:v2.2 初版引用單次切分(seed 42)「AUC 救回 Title t=2.22、family t=2.83」當解析度證據; 20 次切分顯示那兩個是不穩的單次結果,已改為分布式陳述。
- TabPFN 優先:它就是為這個範圍生的(≤5 萬列),小樣本上常直接是最強基線。
- 強正則、少特徵:num_leaves 小、min_child_samples 大;每多一個特徵都是過擬合稅。
- 集成在小樣本上沒有紅利:小樣本很難湊出「實力相近」的成員(C3 前提), 爬山+閾值搜尋在小 OOF 上容易過擬合。 示範案例實測(鐵達尼,20 次切分 × 10×5 折,case_titanic_v2.py):單模私榜 0.8280 ± 0.020、 集成 0.8287 ± 0.018,配對差 +0.0007 ± 0.013(t=0.26,集成贏 9 / 平 3 / 輸 8)——沒有差異。 所以選簡單的:單模 + 折模型平均;集成留給湊得出實力相近成員的資料量。 修訂史:v2.2 初版引用單次切分(seed 42)「集成交叉驗證(CV) 0.8379 → 私榜 0.7948(-0.043)、單模 0.8241 → 0.8134」 當作「集成降級」證據。複驗發現 -0.043 來自評估不對等(單模用各折 @0.5 閾值、集成用 5-repeat 平均 OOF + 搜閾值) 加上 268 人 holdout 的單次噪音(SE≈0.024,兩份提交只差 5 個乘客)。改成同一種量(§3.3 折模型平均)後, 單模與集成的 CV−私榜差都落在 +0.005~+0.008——CV 誠實,是評估不對等在說謊。
- 雙提交仍是保險:集成與單模在分布上打平,但單一切分可差到 ±0.02。兩份提交各留一個,是把方差變成選擇權。
16.8 L3 實戰:真的提交一次(2026-08-22,submit_titanic.py + Kaggle public LB)
用方法論產兩份提交、真的送上 Kaggle 官方 test(418 人,public 排行榜(LB)約 209 人,SE≈0.03):
| 提交 | 內部 CV | 20 切分 holdout | 真實 public LB | CV − LB |
|---|---|---|---|---|
| CV 最佳單模(lgbm) | 0.8373 | 0.828 | 0.7488 | +0.089 |
| 穩健集成(lgbm+knn) | 0.8373 | 0.829 | 0.7727 | +0.065 |
三個誠實教訓:
- 內部驗證系統性樂觀:CV/holdout 0.83 → 真實 LB 0.75
0.77,高估 0.060.09。這不是 bug,是方法論一直警告的事 (§2.2 漂移警告、C1b)——真實 test 是全新的 418 人,和你從 train 切出來的 holdout 不同分布。把 holdout 當上限、預期上線衰減。 - 雙提交的保險當場兌現:CV 最佳單模在真實 LB 反而低於穩健集成 0.024(≈1 個 public SE),還低於性別基準 0.7655—— 單模的閾值搜尋(0.39)在小樣本上過擬合了(§16 的閾值警告)。兩份提交規則正是為「你不知道哪份會贏」而存在。
- 不追 public LB:只送這兩份 CV 選出的方案,不看 LB 反覆改(見 LB 教條)。這 0.06 的差距要靠 CV 設計與領域特徵去補, 不是靠 probing——那只會把 0.7727 過擬合成更糟的私榜。
→ 登錄表「示範」列 L3(實戰驗證):由 ⏳ 變 ✅(有真實提交數據);方法論的價值不在分數高,在它預測到了自己的 CV−LB 差距。
16.9 多案例可完成性(multi_case_real.py,真實公開資料補充)
Kaggle 競賽規則解鎖前,先用 sklearn 內建真實資料驗證「同一套 harness 方法論能否完成不同任務型別」:
| 案例 | 型別 | n_train / holdout | CV | holdout | CV−holdout |
|---|---|---|---|---|---|
| breast_cancer | 二分類 | 426 / 143 | Acc 0.986 | 0.986 | 0.0001 |
| diabetes | 迴歸 | 331 / 111 | 均方根誤差(RMSE) 56.2 | 53.1 | 3.1 |
| digits | 多分類(10) | 1347 / 450 | Acc 0.970 | 0.969 | 0.0007 |
兩個教訓:(1) 同一套程式碼(harness)在三種任務上都端到端完成——方法論不綁定單一題型。 (2) 這裡的 CV−holdout 差小到近乎零,和 Titanic 的 CV−LB 差 0.06~0.09(§16.8)形成對比: 差距的來源是分布,不是方法論——同分布的 holdout 讓 CV 幾乎完美,Titanic 的真實 test 是分布不同的另一批人才有大差距。 這是 §2.2 漂移警告的正面印證。⚠️ 此為 holdout 驗證,非 Kaggle 真提交(無 public/private LB);L3 仍以 §16.8 為準。
真賽應用:house-prices(n=1460)照本守則跳過爬山集成、以配對檢定選型(lgbm 勝 ridge,t=+2.50),OOF RMSE(log) 0.1326 → 真實 LB 0.1275(LB 反而更好)——小樣本紀律不是保守,是把方差留給該花的地方(case_houseprices.py)。
學會了沒?
答得出來再往下一頁;答不出來,回頭看上面對應的段落——能講出來才算學會,讀過不算。
- n=600,你用單次 5 折交叉驗證(CV)得到 0.83。這個數字可以當結論嗎?
- 小樣本為什麼要用配對比較,而不是「平均分 ± 標準差」的門檻?
- 小樣本該不該做爬山集成?
參考答案(先自己想過再展開)
-
不行。小樣本單次切分的噪音極大(鐵達尼 268 人 holdout 的 SE≈0.024,兩份提交只差 5 個乘客)。要報多次切分的分布,不是單一數字。
-
因為小樣本的分數標準差太大,門檻法會把真訊號一起殺掉;配對差的標準差只有分數標準差的約 1/4(20 切分實測),弱訊號才看得見。
-
通常不該。湊不出實力相近的成員,爬山只會過擬合折外預測(OOF);改用單模 + 多種子平均(前提:模型要有隨機成分,否則平均是空操作)。
動手驗證
光讀不會信,跑過才會。本頁對應的可下載腳本(先 pip install -r validation/requirements.txt && python validation/fetch_data.py):
small_n_paired.py—— 20 次切分的配對比較:配對差的標準差只有分數標準差的 1/4——這就是小樣本要用配對比較的理由。case_houseprices.py—— n=1460 照小樣本守則打:跳過爬山、用 5-seed 平均,排行榜(LB) 0.12574 進前 30%。
讀完了?回主線繼續:把這套判斷方式套回 0 診斷 起的每一步——小樣本改的是決策統計,流程不變。