建立表格型訓練資料的最佳做法

設計良好的資料可提高產生的機器學習模型品質。您可以使用此頁面上的指南,來提高訓練資料和模型的品質。

涵蓋以下主題:

所有表格式資料模型的最佳做法

無論您是建立 AutoML 模型,還是使用表格資料的自訂訓練模型,以下最佳做法都適用。

避免資料外洩

當您要求推論,而訓練資料包含無法使用的預測性資訊時就會發生資料外洩。資料洩漏可能會導致模型評估指標表現良好,但實際資料的效能不佳。

舉例來說,假設您想知道明天商店會賣出多少冰淇淋,您無法在訓練資料中包含目標日的溫度,因為您不知道當日溫度 (事情尚未發生)。然而,您可以使用前一天的「預測」溫度,您可以在推論要求中包含此溫度。

在多個資料區隔中使用相同資料時,也可能會發生資料外洩。如果您使用時間序列資料,請確認同一個日期的資料只用於三個資料分割之一。

避免訓練提供偏移

當您產生訓練資料的方式與您請求推論時所用的資料產生方式不同時,就會發生訓練提供偏移。

例如,如果您使用的是平均值,且取 10 天的平均值供訓練使用,但當您請求推論時,卻取了上個月的平均值。

一般來說,您應檢查訓練資料產生方式與提供資料 (您用來產生推論的資料) 產生方式的任何差異,以免發生訓練提供偏移。

訓練/應用偏差和資料分布

訓練/應用偏差也可能發生在訓練、驗證和測試資料分割的資料分布情形。模型在正式環境中部署時看到的資料分布,與模型訓練時使用的資料集資料分布,通常會有所差異。舉例來說,在實際工作環境中,模型可能會套用在與訓練期間完全不同的使用者族群,或是在記錄最終訓練資料後的 30 天內,使用模型進行推論。

為獲得最佳結果,請確保用於建立模型的資料分割方式,能準確反映訓練資料與您在實際工作環境中進行推論的資料之間的差異。Vertex AI 可能會產生非單調推論,如果正式環境資料的取樣分布與訓練資料的取樣分布截然不同,非單調推論的準確度就會降低。

此外,驗證資料分割和訓練資料分割,以及測試資料分割和驗證資料分割之間的差異,必須反映出正式環境資料和訓練資料之間的差異。

舉例來說,如果您打算針對未來 30 天內的使用者生命週期價值 (LTV) 進行推論,請務必確保驗證資料分割區塊中的資料,是在訓練資料分割區塊中的資料後 30 天,而測試資料分割區塊中的資料,是在驗證資料分割區塊中的資料後 30 天。

同樣地,如果您希望模型經過調整後,能夠對新使用者做出概括性的推論,請務必確保特定使用者的資料只包含在單一訓練資料分割中。舉例來說,與 user1 相關的所有資料列都會位於訓練資料分割區,與 user2 相關的所有資料列則會位於驗證資料分割區,而與 user3 相關的所有資料列則會位於測試資料分割區。

提供時間信號

對於分類和迴歸模型,如果資料中的基礎模式會隨著時間變化 (不是隨機分布),請務必將該資訊提供給 Vertex AI。您可以透過多種方式提供時間信號:

  • 如果每一列的資料都有時間戳記,請確保在訓練模型時,該欄已包含在內、轉換類型為 Timestamp,且設為「Time」欄。這個順序會用來分割資料,最新資料會做為測試資料,最舊資料則做為訓練資料。瞭解詳情

  • 如果時間欄沒有太多不同的值,請使用手動分割,而非使用時間欄來分割資料。否則,您可能無法在每個資料集中取得足夠的資料列,這可能會導致訓練失敗。

  • 如果單一欄中沒有包含時間資訊,您可以使用手動資料分割,將最新資料做為測試資料,最舊資料做為訓練資料。

在需要時讓資料變得明確

對於某些資料原始碼,您可以透過特徵工程來改善模型品質。

例如,如果您的資料包含經度和緯度,系統會將這些資料欄視為數值 (不含特別的計算)。如果位置或距離提供問題的信號,您必須設計可明確提供該資訊的特徵。

可能需要特徵工程的某些資料類型:

  • 經度/緯度
  • 網址
  • IP 位址
  • 電子郵件地址
  • 電話號碼
  • 其他地理代碼 (例如郵遞區號)

在資料列中納入計算或匯總資料

Vertex AI 只會使用單一資料列中的輸入資料,預測該資料列的目標值。如果您已計算或匯總其他資料列或來源的資料,這些資料可用於判斷資料列的預測值,請將這些資料納入來源資料列。請注意,新欄位不得導致資料外洩訓練服務偏移

舉例來說,如果您想預測產品在下週的需求量,可以加入含有下列值的欄,提升推論品質:

  • 與產品相同類別的商品庫存總數。
  • 與產品相同類別的現貨商品平均價格。
  • 在要求推論時,與已知假日相隔的天數。

舉另一個例子來說,如果您想預測特定使用者是否會購買產品,可以加入包含下列值的資料欄,以改善推論品質:

  • 特定使用者的平均歷來轉換率或點閱率。
  • 使用者購物車中目前有多少產品。

避免偏誤

請確保您的訓練資料足以代表您要用來做推論之可能資料的整個範圍。例如,如果您的客戶遍布全球,您就不應使用只來自一個國家/地區的訓練資料。

AutoML 表格型模型的最佳做法

以下是建立 AutoML 表格型模型的表格型訓練資料的最佳做法。

適當地表示空值

如果您透過 CSV 進行匯出,請使用空字串來代表空值。從 BigQuery,請使用 NULL 值。

如果資料使用特殊字元或數字來表示空值 (包括零),系統會誤解這些值,導致模型品質下降。

盡量避免缺少值

檢查資料是否缺少值,並視需要修正。否則,您可以將值留空,系統會將其視為空值

使用空格來分隔文字

Vertex AI 會將文字字串符記化,且可以從個別文字中衍生訓練信號,而且也會使用空格來分隔文字;其他字元分隔的字詞則會視為單一實體。

舉例來說,如果您提供文字「紅/綠/藍」,系統就不會將此文字符記化為「紅」、「綠」和「藍」。如果這些個別字詞對模型的訓練來說可能很重要,您應將文字轉換為「紅綠藍」,再將此文字包含在訓練資料中。

請確保類別特徵精準且乾淨

資料不一致可能導致類別的分割不正確。舉例來說,如果資料包含「棕色」和「褐色」,Vertex AI 會將這些值視為個別類別,但您可能預期它們是相同的類別。拼字錯誤可能會有類似的影響。請確保您將這類不一致從類別資料中移除,再建立您的訓練資料。

使用不平衡的類別時,請格外小心分類模型

如果您擁有不平衡的類別 (某個結果的百分比,相較其他結果的百分比小很多時的分類問題),請參閱以下提示。

為少數類別提供充分的訓練資料

某個類別的資料列太少時,會使模型品質降低。盡可能為每個類別提供至少 100 列資料。

考慮使用手動分割

Vertex AI 會隨機 (但決定性的) 選取列做為測試資料集。對於不平衡的類別,測試資料集中的少數類別數量可能會很少 (或沒有),導致訓練失敗。

如果類別不平衡,建議您指派手動分割,確保每個分割都包含足夠的少數結果列。

提供足夠的訓練資料

如果您提供的訓練資料不足,產生模型的表現可能會不盡理想。訓練模型所用的欄越多,您需要提供的資料就越多。

資料集必須隨時包含至少 1,000 列。

下表提供一些依據目標提供訓練資料的經驗法則。

目標 建議的最低訓練資料量
分類 列數至少為欄數的 10 倍。
預測 每個用於訓練模型的資料欄,至少要有 10 個時間序列。
迴歸 列數至少為欄數的 50 倍。

讓 Vertex AI 負責所有其他預先處理與轉換

除非另有說明,否則請在訓練 AutoML 模型時,讓 Vertex AI 為您執行特徵工程。AutoML 在能夠存取基礎資料時表現最佳。如需 AutoML 依轉換類型執行的所有轉換作業清單,請參閱 Vertex AI 轉換作業

表格式預測模型的最佳做法

預測模型的訓練資料有幾項特別的考量。

選擇資料精細程度的考量

訓練預測模型時,您可以指定資料精細程度,也就是訓練資料列之間的時間間隔。可以是每小時、每日、每週、每月或每年。此外,您也可以設定每 1、5、10、15 或 30 分鐘檢查一次。

資料精細程度必須在整個訓練資料和所有批次推論資料中保持一致。如果您指定每日精細度,且兩個訓練資料列之間相隔 2 天,Vertex AI 會將中間的日期視為缺少資料,這可能會降低模型效能。在同一時間序列中,如果有多個資料列具有相同的時間戳記 (由精細程度決定),系統會在訓練期間將其視為驗證錯誤。

一般來說,資料收集做法會決定資料精細度。

如何找出適合脈絡窗口的值

如果您預期會有大量推論資料不會延伸至過去 (冷啟動),請先將情境視窗設為 0。否則,在預測期間大小和預測期間大小的 10 倍之間的上下文視窗應該會運作良好。

您可以嘗試下列步驟,找出適合資料的值:

  1. 針對第一次訓練疊代,請將背景區間和預測期間設為相同的值,並將訓練預算設為至少 6 小時。

  2. 再次訓練模型,使用相同的訓練預算,但將背景區間大小加倍,使其為預測期間大小的 2 倍。

  3. 如果第二個模型的評估指標顯示大幅改善,請再次訓練模型,將情境視窗增加至預測時間範圍的 5 倍。建議您將訓練預算提高到相應的數字 (如果您在第一步訓練了 10 小時,請將訓練預算提高到 50 小時)。

  4. 請繼續增加情境視窗,直到不再看到改善的評估指標,或您對結果感到滿意為止。將內容視窗的值調回可接受結果的最低值。

增加背景時段會造成下列影響:

  • 增加訓練時間

    使用較大的背景資訊視窗時,模型會在訓練期間使用更多資料點,導致訓練時間增加。

  • 增加推論資料所需的歷來資料量

    推論資料應提供與背景視窗值相同數量的歷來資料點。

資料格式的最佳做法

您可以使用寬或窄格式建立訓練資料。迴歸和分類模型廣泛使用寬格式,且更容易組合及查看。對於預測模型,使用狹隘格式可避免在資料和目標之間設定非預期的連結 (資料外洩)。

建立訓練資料來訓練預測模型時,每列應代表單一時間序列的單一觀測值。您必須有一個代表時間序列 ID (如何區分時間序列) 的欄,以及一個代表要預測的值 (目標) 的欄。接著,您在要求目標推論時,必須提供該列中用於訓練模型的所有其他值。

請參考以下 (簡化及縮寫) 的訓練資料範例:

日期 Widget_1_Demand Widget_2_Demand Widget_3_Demand 宣傳 區域
2019 年 1 月 1 日 112 241 0 0 CA
2019 年 1 月 2 日 141 219 0 1 CA
2019 年 3 月 1 日 149 244 0 0 CA
2019 年 1 月 1 日 52 0 43 0 IL
2019 年 1 月 2 日 81 0 26 1 IL
2019 年 3 月 1 日 89 0 86 0 IL

這個表格採用寬格式,按日期顯示業務資料,但無法以目前形式用於預測模型。沒有單一目標欄和時間序列 ID 欄,且在任何指定日期,您都不會知道其他小工具在推論時的需求。

您可以將這個表格轉換成以下格式:

日期 產品 Region_CA_Demand Region_IL_Demand 宣傳
2019 年 1 月 1 日 Widget_1 112 52 0
2019 年 1 月 2 日 Widget_1 141 81 1
2019 年 3 月 1 日 Widget_1 149 89 0
2019 年 1 月 1 日 Widget_2 241 0 0
2019 年 1 月 2 日 Widget_2 219 0 1
2019 年 3 月 1 日 Widget_2 244 0 0
2019 年 1 月 1 日 Widget_3 0 43 0
2019 年 1 月 2 日 Widget_3 0 26 1
2019 年 3 月 1 日 Widget_3 0 86 0

我們現在有一個潛在的時間序列 ID 欄,即 Product。不過,這種格式只能用於預測其中一個區域,而其他區域的資料則必須在推論時已知。

解決方法是轉換為窄格式,讓每列代表單一觀察值。任何與時間序列無關的資料都會重複顯示在每個資料列中:

日期 需求 ID 宣傳
2019 年 1 月 1 日 112 Widget_1_CA 0
2019 年 1 月 2 日 141 Widget_1_CA 1
2019 年 3 月 1 日 149 Widget_1_CA 0
2019 年 1 月 1 日 52 Widget_1_IL 0
2019 年 1 月 2 日 81 Widget_1_IL 1
2019 年 3 月 1 日 89 Widget_1_IL 0
2019 年 1 月 1 日 241 Widget_2_CA 0
2019 年 1 月 2 日 219 Widget_2_CA 1
2019 年 3 月 1 日 244 Widget_2_CA 0
2019 年 1 月 1 日 0 Widget_2_IL 0
2019 年 1 月 2 日 0 Widget_2_IL 1
2019 年 3 月 1 日 0 Widget_2_IL 0
2019 年 1 月 1 日 0 Widget_3_CA 0
2019 年 1 月 2 日 0 Widget_3_CA 1
2019 年 3 月 1 日 0 Widget_3_CA 0
2019 年 1 月 1 日 43 Widget_3_IL 0
2019 年 1 月 2 日 26 Widget_3_IL 1
2019 年 3 月 1 日 86 Widget_3_IL 0

我們現在有時間序列 ID、目標欄 (需求) 和時間欄 (日期)。此外,每個資料列都以單一觀測值為依據,可用於預測目標值。「促銷活動」欄會做為訓練模型的特徵。

實際上,您會比這些範例多出許多資料列和資料欄。但您必須遵循這裡的指南來建構資料,以免發生資料外洩

後續步驟