

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 分割和資料外洩
<a name="splits-leakage"></a>

當您的模型在推論期間取得資料時，即模型處於生產環境並接收預測請求時，即不應存取資料洩漏，例如用於訓練的資料範例，或模型部署在生產環境中時無法使用的資訊。

如果您的模型在訓練資料上不小心遭到測試，資料外洩可能會導致過度擬合。過度擬合表示您的模型無法妥善一般化為看不見的資料。本節提供最佳實務，以避免資料外洩和過度擬合。

## 將您的資料分割成至少三個集
<a name="splits"></a>

資料外洩的一個常見來源是在訓練期間不當分割 （分割） 您的資料。例如，資料科學家可能在知情或不知情的情況下，對用於測試的資料訓練模型。在這種情況下，您可能會觀察到過度擬合所造成的非常高的成功指標。若要解決此問題，您應該將資料分割成至少三個集：`training`、 `validation`和 `testing`。

透過這種方式分割資料，您可以使用 `validation`集合來選擇和調整用來控制學習程序的參數 (*超參數*)。當您達到所需的結果或達到改善的穩定時，請對`testing`集合執行評估。`testing` 集合的效能指標應類似於其他集合的指標。這表示集合之間沒有分佈不相符的情況，且您的模型預期會在生產環境中妥善進行一般化。

## 使用分層分割演算法
<a name="stratified-algorithm"></a>

當您將小型`testing`資料集的資料分割為 `training`、 `validation`和 時，或當您使用高度不平衡的資料時，請務必使用分層分割演算法。分層保證每個分割包含每個分割的大致相同數量或類別分佈。[scikit-learn ML 程式庫](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html)已實作分層，[Apache Spark](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.sampleBy.html) 也是如此。

對於樣本大小，請確定驗證和測試集有足夠的資料可供評估，因此您可以得出統計上顯著的結論。例如，相對較小的資料集 （少於 100 萬個範例） 的常見分割大小為 70%、15% 和 15%，適用於 `validation`、 `training`和 `testing`。對於非常大型的資料集 （超過 100 萬個範例），您可以使用 90%、5% 和 5% 來最大化可用的訓練資料。

在某些使用案例中，將資料分割為額外的集合會很有用，因為生產資料在收集期間可能發生極端、突然的分佈變更。例如，考慮為雜貨存放區項目建置需求預測模型的資料收集程序。如果資料科學團隊`training`在 2019 年期間收集資料，以及從 2020 年 1 月到 2020 年 3 月`testing`的資料，則模型可能會在`testing`集合中取得很好的分數。不過，在生產環境中部署模型時，某些項目的消費者模式會因為 COVID-19 大流行而大幅變更，而且模型會產生不佳的結果。在此案例中，新增另一個集合 （例如 `recent_testing`) 作為模型核准的額外保護是合理的。此新增可能會阻止您核准因分佈不相符而立即效能不佳的生產模型。

在某些情況下，您可能想要建立其他 `validation`或 `testing`集合，其中包含特定類型的範例，例如與少數族群相關聯的資料。這些資料範例對於正確設定很重要，但可能無法在整體資料集中妥善呈現。這些資料子集稱為*配量*。

考慮使用 ML 模型進行信用分析的情況，該模型根據整個國家/地區的資料進行訓練，並平衡以平均地考慮目標變數的整個網域。此外，請考慮此模型可能具有 `City`功能。如果使用此模型的銀行將其業務擴展到特定城市，則可能對模型在該區域的執行方式感興趣。因此，核准管道不僅應該根據整個國家/地區的測試資料來評估模型的品質，還應該評估特定城市配量的測試資料。

當資料科學家在新模型上工作時，他們可以透過在模型的驗證階段中整合代表性不足的配量，輕鬆評估模型的功能並考慮邊緣案例。

## 執行隨機分割時，請考慮重複的範例
<a name="duplicates"></a>

另一個較不常見的洩漏來源位於可能包含太多重複樣本的資料集。在這種情況下，即使您將資料分割為子集，不同的子集可能會有相同的範例。根據重複項目的數量，過度擬合可能會誤認為一般化。

## 考慮在生產環境中接收推論時可能無法使用的功能
<a name="availability"></a>

當模型使用生產環境中無法使用的功能進行訓練時，也會發生資料外洩，同時叫用推論。由於模型通常是根據歷史資料建置的，因此此資料可能會充實一些時間點不存在的其他資料欄或值。考慮信用核准模型的情況，該模型具有追蹤客戶在過去六個月內向銀行進行多少貸款的功能。如果此模型已部署並用於沒有銀行六個月歷史記錄的新客戶的信用核准，則會有資料外洩的風險。

[Amazon SageMaker AI Feature Store](https://aws.amazon.com/sagemaker/feature-store/) 有助於解決此問題。您可以使用時間歷程查詢來更準確地測試模型，您可以使用這些查詢來檢視特定時間點的資料。