免費全文 資料處理與評測 進階

資料集切分:隨機切分什麼時候會騙你

隨機切分很方便,但在有時間性或群組性的資料上會造成嚴重高估。

資料處理與評測教程封面

隨機把資料切成訓練與測試,是最直覺的做法,也是最容易造成分數虛高的做法。

三種需要特殊切法的情況

  • 時間序列:未來資料不能出現在訓練集。要用時間切分,訓練用舊資料、測試用新資料。
  • 同一群組多筆:同一位使用者、同一份文件產生的多筆樣本,必須整組落在同一邊。
  • 類別極不平衡:要用分層切分,確保每一邊都有罕見類別。
from sklearn.model_selection import GroupShuffleSplit

# 依 doc_id 分組,同一份文件的片段不會跨越訓練與測試
splitter = GroupShuffleSplit(test_size=0.2, n_splits=1, random_state=42)
train_idx, test_idx = next(splitter.split(X, y, groups=doc_ids))

時間切分要留間隔

用時間切分時,訓練集結尾與測試集開頭之間留一段空白(例如一週)。緊鄰的資料往往高度相關,留間隔能讓評測更貼近真實部署情境。

怎麼確認切錯了

症狀是:測試分數很高,但上線後明顯變差。此時檢查兩件事——測試集是否與訓練集有近似重複、以及測試樣本的時間是否早於訓練樣本。

切分的隨機種子與切法要寫進資料集的 metadata。分數無法重現時,切分方式是第一個要查的地方。
下一步

這個主題還有更深入的實戰教程

VIP 專區收錄 50 篇進階內容:架構設計、生產環境取捨、成本與合規。 每週五新增 3 篇。

看訂閱方案 → 先逛逛 VIP 專區