S SealHack

示範案例:用方法論完整打一場鐵達尼

六階段端到端示範 + 七場實戰掃描總表。基調不是「拿高分」,是方法論如何得到誠實的數字,並預測到自己的 CV−LB 差距。

本頁內容

戰績總覽

同一套方法論、全部零調參的簡單模型,在 8 場真實 Kaggle 比賽上完賽(6 種任務型態、2 種賽制):

  • 交叉驗證(CV)誠實:同分布的場次,內部分數與真實排行榜落差 ≤0.002——落差不是運氣,是診斷的函數。
  • 前 30% ×2:spaceship 22.9%、house-prices 29.6%,靠的是紀律不是火力。
  • 私榜無跳水:s6e8 用 CV 選的提交,私榜揭曉 private≈public(差 ±0.00005)。

想直接看數字 → 七場掃描總表;想看方法論怎麼完整走一遍一場,就從下面這場鐵達尼開始。


鐵達尼(訓練池 n=623)是小樣本題,重點不在分數高,在方法論如何得到一個誠實的數字——而且它預測到了自己在真實排行榜上的衰減。全程只看 CV,最後才由 holdout 與真實 Kaggle 排行榜(LB)揭曉。腳本:case_titanic_v2.pysubmit_titanic.py

階段 0|讀題與五問診斷

模態=表格、任務=二分類、指標=Accuracy(需在折外預測(OOF)上搜最佳閾值)、test 切法=隨機、賽制=prediction。小資料警報:n=623 → 交叉驗證(CV)噪音大 → 用 RepeatedStratifiedKFold(10 折 × 5 重複)。真實鐵達尼排行榜(LB) > 0.85 多為查史料作弊,誠實天花板約 0.83。

階段 1|鎖死 CV + 基線

在同一組折上鎖死驗證,所有實驗共用 fold/seed,折外預測(OOF)才可比較、可整合。性別規則基準交叉驗證(CV)≈0.79。

階段 3|特徵迭代——配對 AUC 檢定,不是均值門檻

小樣本一次一組特徵,在同一組折上算配對差、做配對 t 檢定(t>2 才保留)。跨 20 次切分:

  • Title、family、cabin 都只在 1/20 切分達 t>2 ——單看一次切分(如著名的 seed 42:Title t=2.22、family t=2.83)會把噪音當訊號。
  • 票團目標編碼有害是鐵板結論:配對 t 中位數 −9.98、0/20 被保留。

階段 2+4|多樣化模型 → OOF 池 → 防過擬合爬山集成

鋪開 lgbm / logreg / extratrees / knn 四個家族,用 Caruana 爬山(前 2 名初始化 + 可重複選取)組集成。關鍵:單模與集成用同一種量評估(折模型平均折外預測(OOF)+ 同一套閾值),否則差距裡混的是評估不對等,不是真實差異。

階段 5|兩份提交 → 揭曉

鐵達尼真提交(n_train=623 / holdout=268)
提交CV(交叉驗證)holdoutpublic LB(排行榜)
CV 最佳單模 (lgbm)0.83730.8280.7488
穩健集成 (lgbm+knn)0.83730.8290.7727最佳
多案例真實資料(同一套 harness)
案例任務CV(交叉驗證)holdoutCV−holdout 差
breast_cancer二分類Acc 0.9860.9860.0001
diabetes迴歸RMSE 56.253.13.1
digits多分類(10)Acc 0.9700.9690.0007

真的送上 Kaggle 官方 test 後:交叉驗證(CV) 0.8373 → public 排行榜(LB) 單模 0.7488 / 集成 0.7727。內部驗證對真實 LB 系統性樂觀 0.06~0.09——這不是 bug,是方法論一直警告的事:真實 test 是全新的 418 人、與你從 train 切出來的 holdout 不同分布。把 holdout 當上限、預期上線衰減。而穩健集成在真實 LB 反而高於 CV 最佳單模,雙提交的保險當場兌現。

改用 §3.3 的折模型平均後,單模與集成的 CV−私榜差都落在 +0.005~+0.008——CV 是誠實的,是評估不對等在說謊。

自己動手

不要照抄這頁的數字——case_titanic_v2.py 可下載,自己跑一次看 20 次切分的分布;submit_titanic.py 產出兩份提交。

pip install -r validation/requirements.txt
python validation/fetch_data.py          # 下載 Titanic 資料(sha256 校驗)
python validation/case_titanic_v2.py     # 20 次切分,親眼看單模≈集成

換一場你自己的比賽,把這六階段重走一遍——這才是學會。

七場實戰掃描(2026-08,同一套 harness、全部簡單模型)

用同一套方法論掃完六種任務型態、兩種賽制(prediction + code);其中兩場以零調參簡單模型進入前 30%(spaceship 22.9%、house 29.6%)——每場零調參、零深度學習、零預訓練,分數全靠流程紀律。每列可重跑(腳本在括號):

比賽型態CV(OOF)Public LBCV→LB
titanic(case_titanic_v2)小樣本二分類0.83730.7727−0.065(異分布,§16.8)
s6e8(case_s6e8)大表格二分類 69 萬列0.962850.96414 →私榜 0.96417無跳水
spaceship(case_spaceship)表格二分類0.8057(Acc)0.80406−0.0017
house-prices(case_houseprices)小樣本迴歸0.1326(RMSE log)0.12749更優
nlp-tweets(case_nlp)文字 F10.76820.79619+0.028(test 偏易)
digit(case_digit)多分類像素0.97760.97660−0.0010
store-sales(case_storesales)時序 1782 條0.4007(RMSLE)0.51465時序衰減(C1b)
watson(case_watson)多語言 NLI(code 賽)0.4630(Acc)0.41520見結論 4

三個框架級結論,全部雙向驗證:

  1. 交叉驗證(CV)誠實度可預測:對抗驗證說同分布的場次(s6e8/spaceship/digit),CV→排行榜(LB) 落差 ≤0.002;異分布(titanic)與時序(store-sales)如 C1b 預測地衰減——落差不是運氣,是診斷的函數
  2. C3 前提雙向兌現:成員懸殊(s6e8)無集成紅利;成員相近(spaceship/nlp)紅利出現。
  3. 配對檢定是特徵決策的守門員:s6e8 五組候選攔下四組負 t 噪音;比值特徵兩場連勝(t+8.99 / t+4.38)。
  4. 同模型對照:方法論本身值多少分(naive_vs_method.py,裸版=同一顆模型拔掉方法論決策,真提交對照):watson +0.161(切法+特徵身分)、spaceship +0.019(配對特徵+搜閾值)、house log1p 省 0.0033 均方根誤差(RMSE)、s6e8 +0.0002(裸基線已對齊時貢獻趨零)、nlp −0.003(誠實反例:test 分布怪異時折外預測(OOF)搜的閾值不保證轉移,差距在噪音內)。結論:結構越複雜的題,方法論越值錢;結構已對齊的題,它的價值是「確認你沒做錯」。
  5. 私榜終審:CV 引導的選擇沒有跳水(s6e8,2026-08-31 揭曉)。比賽期間只看得到 public 榜(一小部分測試資料),結束才用剩下的資料算 private 榜——很多人在這裡名次大洗牌。我們四筆提交全部 private ≈ public(差 ±0.00005),排序也沒變。這是 C7a「迭代決策一律用 CV、不追 public 榜」的最終驗收:比賽結束時才知道自己有沒有騙自己,而我們沒有。
  6. CV 異常是可診斷的訊號,不是壞運氣(watson 三回合):隨機切 OOF 0.287 低於隨機 → 抓出 premise 群組結構;改 GroupKFold 後 CV 0.400 卻 LB 0.254 → C7b 脫鉤警訊 → 診斷出「test 與 train 共享 52% premise 且為異標籤,全量訓練把 premise 背反了」;特徵去除 premise 身分 → CV 0.463、LB 0.415,+0.161 全額兌現。兩次異常、兩次診斷、兩次修復——這就是方法論。