時間序列機器學習數據集的非常規拆分技術
確保機器學習模型在未知環境中泛化的一種嘗試是拆分數據。這可以通過多種方式實現,從3-way(訓練、測試、評估)拆分到交叉驗證的k拆分。其基本原理是,通過在數據子集上訓練機器學習模型,并在未知數據上進行評估,可以更好地推理模型在訓練中是否存在欠擬合或過擬合。
對于大多數工作來說,簡單的3-way就足夠了。在現實生產中,拆分方式往往需要更復雜的方法來確保泛化問題。這些拆分更加復雜,因為它們源自實際數據,而不是普通拆分方法所基于的數據結構。這篇文章試圖講解一些在機器學習開發中拆分數據的非常規方法,以及它們背后的原因。
讓我們從數據集開始
為了簡單起見,讓我們使用以表格格式來表示簡單多變量時間序列數據集。該數據由3個數字特征、1個分類特征和1個時間戳特征組成。下面是可視化的:
這種類型的數據集在機器學習的許多用例和行業中都很常見。一個具體的例子是從工廠車間里面多個傳感器傳輸的時間流數據。分類變量將是機器的ID,數字特征將是傳感器正在記錄的信息(例如,壓力、溫度等),時間戳將是數據傳輸和記錄在數據庫中的時間。
拆分
假設您從數據工程部門以csv文件的形式收到了這個數據集,并承擔編寫分類或回歸模型的任務。在這種情況下,標簽可以是任何特征或額外的列。要做的第一件事是將數據拆分成有意義的子集。
為方便起見,您可以簡單拆分成訓練集和測試集。馬上問題來了,數據的簡單拆分在這里是行不通的:數據是由多個按時間索引的傳感器數據流組成的。那么,如何對數據進行拆分,從而保持順序,并使后續機器學習模型具有很好的泛化性呢?
數據的另一種觀點
我們可以做的最直接的轉換是表示每個分類類的數據(在我們的運行示例中,可視化每臺機器的數據)。這將產生以下結果:
水平拆分
分組使拆分的問題變得簡單了一些,并且很大程度上取決于你的假設。您可能會問:針對一個組訓練的機器學習模型如何泛化到其他組,也就是說,如果在class_1、class_2和class_3時間流上進行訓練,該模型在class_4和class_5時間流上的會如何呢?以下是這種拆分的可視化圖:
上面的這種拆分方式,我稱之為水平拆分。在大多數機器學習庫中,通過簡單地按分類特征進行分組并沿著分類進行分區,可以輕松實現這種拆分。使用這種拆分進行訓練,該模型就已經收集到了在未知分組中泛化的信息。
值得注意的是,拆分并沒有把時間作為拆分本身的基礎。不過,可以假設您還將按每個時間流的時間排序來拆分,以在數據中維護這種關系。這就引出了下一個拆分方式。
垂直拆分
但如果你想跨越時間本身呢?對于大多數時間序列建模,拆分數據的常用方法是past和future。也就是說,將訓練集的歷史數據與評估集的數據相比較。在這種情況下的假設是:機器學習模型如何訓練每組的歷史數據泛化到每組的未來數據?這個問題可以通過所謂的垂直拆分來回答:
這種拆分的成功訓練將表明該模型能夠在它已經看到的時間流中提取模式,并對未來的行為做出準確的預測。然而,這本身并不能表明該模型可以很好地泛化到來自不同組的其他時間流。
當然,您的多個時間流現在必須單獨排序,所以我們仍然需要分組。但這次,我們不是跨組,而是從past每個組中抽取樣本并將其放入train中,并將future組相應的放入eval 中。在這個理想化的例子中,所有時間流具有相同的長度,即每個時間流具有完全相同數量的數據點。但是,在現實世界中,情況可能并非如此——因此您需要一個系統來為每個組構建索引以進行拆分。
混合拆分
大家可能想知道,他們是否可以生成一個模型,在水平和垂直拆分的約束下都可以很好的進行泛化呢?在這種情況下,假設將是:如何在一些組的歷史數據上訓練的機器學習模型泛化到這些組的未來數據和其他組的所有數據?這種混合拆分的可視化結果如下所示:
當然,如果模型訓練是成功的,這個模型肯定會比其他模型在現實世界中更健壯。它不僅可以證明它已經看到的一些組的學習模式,而且還可以證明它已經獲得了跨組泛化的信息。如果我們將來要向工廠增加更多類似的機器,這可能是有用的。
多維拆分
水平和垂直拆分的概念可以推廣到許多維度。例如,可能需要根據兩個分類特征而不是一個分類特征進行分組,以便進一步隔離數據中的子組,并按子組對它們進行排序。中間可能還存在用于篩選樣本數量較少的組的復雜邏輯,以及與該域相關的其他業務級邏輯。
結論
這個假設的例子用來說明可以創建的各種機器學習拆分的無限可能性。就像在評估模型時確保機器學習的公平性很重要一樣,花足夠的時間考慮劃分數據集及其對下游模型產生偏差的后果也同樣重要。