
一文簡述如何使用嵌套交叉驗證方法處理時序數(shù)據(jù)
本文討論了對時序數(shù)據(jù)使用傳統(tǒng)交叉驗證的一些缺陷。具體來說,我們解決了以下問題:
在不造成數(shù)據(jù)泄露的情況下,對時序數(shù)據(jù)進行分割;
在獨立測試集上使用嵌套交叉驗證得到誤差的無偏估計;
對包含多個時序的數(shù)據(jù)集進行交叉驗證。
本文主要針對缺乏如何對包含多個時間序列的數(shù)據(jù)使用交叉驗證的在線信息。
本文有助于任何擁有時間序列數(shù)據(jù),尤其是多個獨立的時間序列數(shù)據(jù)的人。這些方法是在醫(yī)療研究中被設計用于處理來自多個參與人員的醫(yī)療時序數(shù)據(jù)的。
一、交叉驗證
交叉驗證(CV)是一項很流行的技術,用于調(diào)節(jié)超參數(shù),是一種具備魯棒性的模型性能評價技術。兩種最常見的交叉驗證方式分別是 k 折交叉驗證和 hold-out 交叉驗證。
由于文獻中術語的不同,本文中我們將明確定義交叉驗證步驟。首先,將數(shù)據(jù)集分割為兩個子集:訓練集和測試集。如果有需要被調(diào)整的參數(shù),我們將訓練集分為訓練子集和驗證集。模型在訓練子集上進行訓練,在驗證集上將誤差最小化的參數(shù)將最終被選擇。最后,模型使用所選的參數(shù)在整個訓練集上進行訓練,并且記錄測試集上的誤差。
數(shù)據(jù)被分為訓練集和測試集。然后訓練集進一步進行分割:一部分用來調(diào)整參數(shù)(訓練子集),另一部分用來驗證模型(驗證集)。
為什么時序數(shù)據(jù)的交叉驗證會有所不同?
在處理時序數(shù)據(jù)時,不應該使用傳統(tǒng)的交叉驗證方法(如 k 折交叉驗證),原因有2:
1. 時序依賴
為了避免數(shù)據(jù)泄露,要特別注意時間序列數(shù)據(jù)的分割。為了準確地模擬「我們現(xiàn)在所處、預測未來的真實預測環(huán)境」(Tashman
2000),預測者必須保留用于擬合模型的事件之后發(fā)生的事件的數(shù)據(jù)。因此,對于時間序列數(shù)據(jù)而言,我們沒有使用 k 折交叉驗證,而是使用
hold-out 交叉驗證,其中一個數(shù)據(jù)子集(按照時間順序分割)被保留下來用于驗證模型性能。例如,圖 1
中的測試集數(shù)據(jù)在時間順序上是位于訓練數(shù)據(jù)之后的。類似地,驗證集也在訓練集之后。
2. 任意選擇測試集
你可能注意到了,圖 1
中測試集的選擇是相當隨意的,這種選擇也意味著我們的測試集誤差是在獨立測試集上不太好的誤差估計。為了解決這個問題,我們使用了一種叫做嵌套交叉驗證(Nested
Cross-Validation)的方法。嵌套交叉驗證包含一個用于誤差估計的外循環(huán),以及一個用于調(diào)參的內(nèi)循環(huán)(如圖 2
所示)。內(nèi)循環(huán)所起的作用和之前談到的一樣:訓練集被分割成一個訓練子集和一個驗證集,模型在訓練子集上訓練,然后選擇在驗證集上能夠使誤差最小化的參數(shù)。但是,現(xiàn)在我們增加了一個外循環(huán),它將數(shù)據(jù)集分割成多個不同的訓練集和測試集,為了計算模型誤差的魯棒估計,對每一次分割的誤差求平均值。這樣做是有優(yōu)勢的:
嵌套交叉驗證過程可以提供一個幾近無偏的真實誤差估計。(Varma and Simon 2006)
二、用于時間序列的嵌套交叉驗證
我們推薦兩種嵌套交叉驗證的方法,來處理僅具有一個時間序列的數(shù)據(jù)。我們也會處理來自一個病人/參與者的多天醫(yī)療數(shù)據(jù):
預測后一半(Predict Second Half)
日前向鏈(Day Forward-Chaining)
1. 預測后一半
第一種方法「預測后一半」,這是嵌套交叉驗證的「基本情況」,只有一次訓練/測試分割。它的優(yōu)勢是這種方法易于實現(xiàn);然而,它仍然面臨著任意選擇測試集的局限性。前一半數(shù)據(jù)(按照時間分割的)作為訓練集,后一半數(shù)據(jù)成為測試集。驗證集的大小可以根據(jù)給定問題的不同而變化(例如圖
3 中的例子用一天的數(shù)據(jù)作為驗證集),但是保證驗證集的時間順序在訓練子集后面是非常重要的。
2. 日前向鏈(Day Forward-Chaining)
預測后一半嵌套交叉驗證方法的一個缺陷是 hold-out
測試集的任意選擇會導致在獨立測試集上預測誤差的有偏估計。為了生成對模型預測誤差的更好估計,一個常用的方法就是進行多次訓練/測試分割,然后計算這些分割上的誤差平均值。我們使用日前向鏈技術是一種基于前向鏈(Forward-Chaining)的方法(在文獻中也被稱為
rolling-origin evaluation(Tashman,2000)和 rolling-origin-recalibration
evaluation(Bergmeir &
Benitez,2012))。利用這種方法,我們將每天的數(shù)據(jù)作為測試集,并將以前的所有數(shù)據(jù)分配到訓練集中。例如,如果數(shù)據(jù)集有五天,那么我們將生成三個不同的訓練和測試分割,如圖
4
所示。請注意,在本示例中,我們有三次拆分,而不是五次拆分,因為我們需要確保至少有一天的訓練和驗證數(shù)據(jù)可用。該方法產(chǎn)生許多不同的訓練/測試分割,并且對每個分割上的誤差求平均,以計算模型誤差的魯棒估計。
注意,在這個例子中我們使用「日」前向鏈,但是也可以在每個數(shù)據(jù)點上進行迭代,而不是按天迭代(但這明顯意味著更多的拆分)。
三、多時序嵌套交叉驗證
現(xiàn)在有兩種分割單個時間序列的方法,接下來我們將討論如何處理具有多個不同時間序列的數(shù)據(jù)集。同樣,我們使用兩種方法:
1. 常規(guī)(regular)
「常規(guī)」嵌套交叉驗證(regular nested
cross-validation)的訓練集/驗證集/測試集分割基本思路和之前的描述是一樣的。唯一的變化是現(xiàn)在的分割包含了來自數(shù)據(jù)集中不同參與者的數(shù)據(jù)。如果有兩個參與者
A 和 B,那么訓練集將包含來自參與者 A 的前半天的數(shù)據(jù)和來自參與者 B 的前半天的數(shù)據(jù)。同樣,測試集將包含每個參與者的后半天數(shù)據(jù)。
2. 群體知情(Population-Informed)
對于「群體知情嵌套交叉驗證」方法而言,我們利用了不同參與者數(shù)據(jù)之間的獨立性。這使得我們打破嚴格的時間順序,至少在個人數(shù)據(jù)之間(在個人數(shù)據(jù)內(nèi)打破嚴格時序仍然是必要的)。由于這種獨立性,我們可以稍微修改常規(guī)嵌套交叉驗證算法?,F(xiàn)在,測試集和驗證集僅包含來自一個參與者(例如參與者
A)的數(shù)據(jù),并且數(shù)據(jù)集中所有其他參與者的所有數(shù)據(jù)都被允許存在于訓練集中。圖 5
描述了這種方法是如何適用于群體知情的日前向鏈嵌套交叉驗證的。該圖顯示,參與者 A 第 18
天的數(shù)據(jù)是測試集(紅色),之前三天是驗證集(黃色),訓練集(綠色)包含參與者 A 的所有先前數(shù)據(jù)以及其他參與者(本例中為 B、C、D 和
E)的所有數(shù)據(jù)。需要強調(diào)的一點是,由于其他參與者的時間序列的獨立性,使用這些參與者的「未來」觀測不會造成數(shù)據(jù)泄漏。
其中除了對參與者 A 的日前向鏈方法(左圖),我們也允許其他參與者的數(shù)據(jù)存在于訓練集中(右圖)。請注意,灰色線條表示參與者睡眠的時間。
最后,我們總結了不同嵌套交叉驗證方法的優(yōu)缺點,特別是獨立測試集誤差估計的計算時間和偏差。分割的次數(shù)假定數(shù)據(jù)集包含 p 個參與者,以及每個參與者共有 d 天的數(shù)據(jù)。
四、總結
我們首先回顧了交叉驗證,并列舉了使用嵌套交叉驗證的基本原理。然后討論了如何在不造成數(shù)據(jù)泄漏的情況下分割單個時間序列數(shù)據(jù),具體提出了兩種方法:預測后一半嵌套交叉驗證和日前向鏈嵌套交叉驗證。接著我們討論了如何處理多個獨立的時間序列,兩種方法:常規(guī)嵌套交叉驗證和群體知情嵌套交叉驗證。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
訓練與驗證損失驟升:機器學習訓練中的異常診斷與解決方案 在機器學習模型訓練過程中,“損失曲線” 是反映模型學習狀態(tài)的核心指 ...
2025-09-19解析 DataHub 與 Kafka:數(shù)據(jù)生態(tài)中兩類核心工具的差異與協(xié)同 在數(shù)字化轉(zhuǎn)型加速的今天,企業(yè)對數(shù)據(jù)的需求已從 “存儲” 轉(zhuǎn)向 “ ...
2025-09-19CDA 數(shù)據(jù)分析師:讓統(tǒng)計基本概念成為業(yè)務決策的底層邏輯 統(tǒng)計基本概念是商業(yè)數(shù)據(jù)分析的 “基礎語言”—— 從描述數(shù)據(jù)分布的 “均 ...
2025-09-19CDA 數(shù)據(jù)分析師:表結構數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結構數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-19SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結構數(shù)據(jù)特征價值的專業(yè)核心 表結構數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結構化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結構數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結構數(shù)據(jù)(以 “行 - 列” 存儲的結構化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結構數(shù)據(jù)價值的核心操盤手 表格結構數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11