滾動前推驗證:讓未來數據遠離訓練
設計按時間推進的研究流程,評估完整決策程序,而非精心修飾的歷史規則。

檢驗流程,而不是最終公式
滾動前推研究會反覆利用某個歷史日期當時可獲得的信息擬合模型,凍結由此產生的決策,並在之後的區間評估。然後向前推進。這模擬了一個必須在不知道未來的情況下運作的研究流程。它不會使策略自動盈利,也不會消除所有偏差。
寫明每個步驟允許改變甚麼。信號參數、資產選擇、波動率估計與成本假設都是程序的一部分。若研究者看到測試期結果後手動調整這些內容,程序就已改變,該時期不再是乾淨的評估。可復現的日程,比由自主修改拼接出的圖表更有信息價值。
有意識地選擇滾動或擴展歷史窗口
擴展窗口隨時間推進保留全部較早觀察值。它可以穩定估計,但也可能保留過時市場環境的數據。滾動窗口使用固定長度的近期數據,便於適應變化,卻增加抽樣噪聲。兩種方法都不是普遍更優;相關權衡取決於預期哪種經濟關係會持續。
在比較結果前,應基於可辯護的理由選擇窗口長度。嘗試數十種長度後挑選最優,只是把優化移到了更高一層。記錄每個測試區間中的觀測數、不同市場階段和實際交易數。歷時很長但獨立決策很少的樣本,提供的證據可能少於時間跨度給人的印象。
數據洩漏隱藏於數據準備過程
按時間順序劃分是必要但不充分的。使用全樣本均值標準化特徵,會讓未來觀測影響過去輸入。選擇存續證券、使用修訂後的宏觀數據,或在檔案公開前就將其納入,都會產生其他形式的事後偏差。應在訓練數據上擬合變換,並盡可能保留當時可獲得的信息狀態。
標籤同樣重要。如果某訓練樣本預測未來五天的收益,其結果可能與測試期的開始重疊。應移除或隔離標籤窗口跨越邊界的觀察值。軟體可以在訓練與測試索引之間插入間隔,但選擇有意義的間隔,需要理解具體數據集中的標籤期限、發佈延遲與依賴關係。
區分特徵對應的日期,與預測目標真正可知的日期。週一形成的訊號可以只使用週一已知輸入,但其未來五天收益在週二還沒有發生完。週二重新訓練時,不能把這條完整未來收益標籤當成已知資料。納入訓練的規則必須檢查整個標籤區間和可獲得時間,而不只是資料行的起始時間早於截止日。
在訓練中調參,保留未觸碰的評估集
參數選擇只能使用訓練區間內的信息,必要時可採用內部按時間順序進行的驗證程序。外層測試區間隨後評估選定的流程。這種嵌套將選擇模型與衡量選擇效果區分開來。它也會提高計算成本,但總比獲得一個便宜卻受到污染的結果更好。
按真實時間順序匯總連續測試收益,包括沒有持倉的時期。一致應用費用和執行假設。不要在未檢查經濟含義時,直接平均看起來漂亮的各折測試比率,否則短暫平靜區間可能獲得與漫長動蕩區間相同的表面權重。在合併結果旁展示各區間的離散程度。
不理想的結果也是可用證據
如果滾動前推表現扣除成本後惡化、依賴單一區間,或因小幅時間調整而劇變,應調查而非粉飾。區分數據或實現缺陷與策略本身缺乏支持。修復真實錯誤可以成為重新運行的理由,但之前已接觸結果這一事實必須保留在研究歷史中。
如果值得進一步評估,最後應凍結規則說明,並進行一個真正全新的模擬觀察期。預先定義收集哪些數據,以及甚麼會使假設失效。目的不是不斷優化直到出現漂亮曲線,而是確定有紀律、可實施的流程能否經受失敗機會的檢驗。
讓持倉與資金連續跨越驗證邊界
重擬合模型不等於自動平倉。假設一月至三月的測試結束時,仍有一項按原規則應在四月退出的倉位,應預先決定:繼續執行原退出規則、改用有記錄的新規則,還是支付相應成本將其關閉。若每個測試折都無記錄地重置為現金,可能抹去虧損、憑空恢復資金,或避開困難的過渡。研究設計既要規定新預測,也要規定舊持倉如何處理。
資本同樣必須連續傳遞。一個測試區間賺 10%,下一個虧 10%,財富乘數為 1.10 × 0.90 = 0.99,即淨虧 1%。把兩段收益率平均為零,不能重現帳戶。應保留按真實時間順序排列、使用一致資金與倉位口徑的收益序列,再計算匯總指標。若測試折在日曆上重疊,不要把同一天帳戶收益計兩次,應說明由哪個模型決策,或並行模型怎樣分配資本。
每個訓練截止點內都應重新完成必要的選擇,包括特徵篩選、標準化、缺失值填補及候選演算法比較。即使最終估計器正確重訓,用全樣本擬合一次的轉換仍會洩漏未來資訊。TimeSeriesSplit 可以提供時間順序切分及可選的索引間隔,卻不知道金融標籤何時成熟、公告何時修訂,也不知道未平倉部位該如何跨過邊界;這些仍由研究設計負責。
逐折保留台帳:訓練終點、可用觀測、選定參數、首個可成交時間、初始持倉、成本和最終持倉,並說明每次跳過觀測或訂單的原因。這樣才能區分經濟機制減弱、樣本變化與程式邊界錯誤。修復真實缺陷後,應一致重跑整個流程,同時保留舊結果及修復記錄,不能把已見過結果的修正版說成完全未受觀察的實驗。