《AI時代:碼農的涅盤重生》第86章 過擬合的教訓(2)

作者:Flint8·11小時前

林晨重新開啟訓練日誌和回測報告,一行行程式碼、一個個引數地檢查。突然,他的目光停留在訓練集和測試集的劃分方式上。

為了追求“漂亮”的回測結果,他在劃分資料時,採用了簡單的“前80%資料訓練,後20%資料測試”方法。但股票資料具有很強的時間序列特性,這種劃分可能導致模型在測試集上“看到”了訓練集末尾的趨勢延續,從而給出虛假的優秀表現。

更深入檢查後,他發現了一個致命問題:在特徵工程階段,他無意中使用了一些“未來資料”。

比如,他計算了股價的20日移動平均線作為特徵,但在處理時,沒有嚴格避免資料洩露——在某個時間點,模型“看到”了包含該點之後資料的移動平均值。這在回測中不會報錯,因為所有資料都是已知的,但實盤中,你不可能知道未來的平均值。

“過擬合……”林晨喃喃吐出這個詞。

在機器學習中,過擬合指模型過度適應訓練資料中的噪聲和特定模式,導致在未見資料上表現糟糕。他的模型,就像一個只會背誦歷年考題答案的學生,一旦遇到新題型,就束手無策。

而金融市場的“新題型”每天都在出現。

林晨感到一陣懊惱,但更多的是警醒。他太急於求成了,被回測的漂亮數字迷惑,忽略了量化交易中最基本的陷阱。

他關掉交易軟體,開啟一個新的Python指令碼。這次,他要從頭構建更嚴謹的驗證流程:

嚴格避免任何形式的資料洩露,確保每個時間點的特徵只使用該點之前的資訊。

採用“滾動視窗”回測:用過去N年的資料訓練,測試接下來一年的表現,然後視窗滾動,模擬模型在歷史中逐步演進和實戰的過程。

加入更多的正則化手段(Dropout、L2正則化),防止模型過度複雜。

使用K折交叉驗證的變體,評估策略的穩定性。

在模擬環境中加入交易成本、滑點、限價單成交機率等更真實的約束。

敲擊鍵盤的聲音在寂靜的房間裡迴盪。林晨完全沉浸其中,忘記了時間,也暫時忘記了賬戶虧損帶來的焦慮。他正在解剖自己的錯誤,這個過程痛苦但必要。

深夜十一點,蘇婉輕輕推開書房門,端來一杯熱牛奶:“還沒休息”?

林晨抬起頭,眼睛有些發紅,但眼神清明:“遇到一個關鍵問題,在調整”。

“順利嗎”? “不順利,但找到方向了”。林晨接過牛奶,溫度正好,“我的模型之前犯了錯,現在知道怎麼改了”。

蘇婉看著他專注的神情,沒有多問,只是說:“別熬太晚”。

“嗯,很快就好”。

門重新關上。林晨喝了一口牛奶,溫熱的感覺從喉嚨蔓延到胃裡。他看向螢幕上正在重新執行的驗證程式碼,這一次,回測曲線不再那麼“完美”了——年化收益率降到28%,最大回撤增加到18%,夏普比率也回落到2.0左右。

但這些數字,反而讓他感到踏實。

因為這是經過更嚴格檢驗後,更接近真實的數字。金融市場沒有聖盃,任何聲稱能在回測中持續獲得超高收益的策略,大機率都藏著過擬合的幽靈。

“程式碼可以騙人,但邏輯不會”。林晨想起自己常說的話,苦笑了一下,“但人會被漂亮的回測曲線騙”。

他儲存了所有修改,將最佳化後的策略重新部署到模擬環境,設定執行24小時,觀察其在更長曆史週期中的表現。

關機前,他最後看了一眼實盤賬戶:-12.3%。

這個虧損,成了他AI量化之路上的第一個深刻烙印。但它買到了一個千金難換的教訓:在金融市場,過去的表現永遠不能保證未來的結果。真正的智慧,不是完美擬合曆史,而是在不確定性中尋找穩健的泛化能力。

而泛化能力的背後,是對資料、對市場、對人性深刻的敬畏。

猜你喜歡

同題材或同分類的其他作品。