---
title: "資料洩漏（Data Leakage）"
slug: data-leakage
language: zh-TW
source: https://aiterms.tw/terms/data-leakage
updated_at: 2026-06-22
tags: [模型評估, 資料處理, 特徵工程, 機器學習]
ipas_term: false
---

# 資料洩漏（Data Leakage）

資料洩漏（Data Leakage）是指模型訓練過程中，未來或測試集的資訊意外滲入訓練集，導致模型在評估時表現虛高，但部署後實際效能大幅下滑的現象。

## 完整說明

資料洩漏（Data Leakage）是機器學習工程中最常見的陷阱之一。當訓練資料中包含了模型在真實預測時不應得知的資訊時，就會發生洩漏。常見情形包括：特徵工程在切割訓練／測試集之前進行（如全局標準化）、目標變數的衍生欄位被當成輸入特徵、時序資料使用未來時間點的資訊等。洩漏會使驗證指標過度樂觀，讓工程師誤以為模型已達到部署標準，造成上線後效能崩潰。

## 常見問題

### 如何快速判斷模型是否存在資料洩漏？

最直接的信號是訓練與驗證指標差距異常地小，或驗證分數比訓練分數更高。此外，若某個特徵的重要性極高，應回頭確認：這個特徵在現實預測情境中，模型做預測的當下是否真的能取得？例如，若預測「客戶是否流失」時使用了「客戶流失後的退款金額」，就是典型的目標洩漏。另一個快速檢查法是刻意移除疑似洩漏的特徵，若模型效能大幅下滑，代表該特徵確實攜帶了過多目標資訊。

### Scikit-learn Pipeline 如何防止資料洩漏？

Pipeline 強制所有前處理步驟遵循「先 fit 訓練資料，再 transform 測試資料」的順序。當 Pipeline 與 `cross_val_score` 或 `GridSearchCV` 搭配使用時，每個交叉驗證迴圈的訓練摺都會各自獨立呼叫 `fit_transform`，驗證摺只會呼叫 `transform`，因此測試摺的統計特性無法進入前處理參數的估計。這是 Scikit-learn 社群強烈建議將所有可訓練的前處理步驟放入 Pipeline 的主要原因。

### 時序資料中如何避免前視偏誤？

時序資料應使用 `TimeSeriesSplit` 取代普通的 K-Fold，確保訓練摺永遠早於驗證摺。特徵工程上，所有滑動平均、累積統計、Lag 特徵等，都必須用截止到預測時間點之前的資料計算，不得使用預測時間點之後的數值。另外，若資料集包含時間戳記，在切割前應依時間排序，並確認沒有因為資料收集方式導致「未來標籤」提前出現在較早的時間戳記欄位中。

---

來源：https://aiterms.tw/terms/data-leakage
快查頁：https://aiterms.tw/terms/data-leakage
最後更新：2026/06/22
深度解說：https://aiterms.tw/learning/what-is-data-leakage