把資料切一半,前面回測、後面驗證,這是多數人對樣本外驗證的理解。但這樣做有一個漏洞:
你在驗證集上做的每一個決定,都會把驗證集變成樣本內。
先驗證流程,再驗證策略
有一類驗證,檢查的對象是整條流程,並非策略本身。做法是製造幾組「由建構方式保證沒有alpha的資料」,然後把完整的回測流程跑一遍。如果流程在這些資料上找到alpha,問題就出在流程,不在策略。這一關的邏輯很簡單:在不可能有 alpha 的地方找alpha,代表你的工具有問題。
五種對照組,各自抓一種錯誤
- 第一組是純白噪音,用來抓篩選偏誤。
- 第二組是波動率會在兩個狀態間切換、但期望報酬為零的序列,用來抓歸一化方式洩漏了未來的波動狀態。
- 第三組是買賣價差跳動造成的負自相關,它可預測但不可交易,策略如果在這裡賺錢,代表成交時點或索引對不上。
- 第四組是一個因子加上零alpha,用來抓把 beta(相對於大盤的敏感度)當成 alpha。
- 第五組是有波動聚集但期望報酬為零的序列,用來檢驗統計量的標準誤是否被低估。
每一組都對應一種你以為自己有能力、實際上沒有的情況。
過關標準可以寫成數字
33每一組對照組重複一百次,每次記錄樣本外統計量超過1.96的比例。在一百次裡,這個比例應該接近百分之五;如果實際的被拒絕比例超過二項分布第九十五百分位,這一關就不通過。第二階段量化膨脹的程度:把樣本內與樣本外的統計量相減得到一個差距,再用一百次白噪音模擬取出這個差距的第九十九百分位當門檻,真實資料超過就否決。目標是在拉高樣本外統計量的同時,把這個差距壓到最小。
真正該看的是,驗證有沒有被用掉
「永遠留一份沒測過的資料」是對的方向,但那份資料是一次性的。當你拿它來做決定,它就被用掉了,下一次你沒有乾淨的資料。所以順序很重要:先慢慢增加使用的資料量、把分析做完,最後才動用保留的那一份,而且最好連其他資產也一起留。機器學習類的策略因為調參發生在擬合之後,通常需要兩份樣本外資料。還有一件事要認清:通過所有檢查,只代表流程沒有明顯破洞。其實並非驗證做得不夠多,真正難的是:每一次動用保留的資料,都算用掉一次機會。
原文出處:voltima_quant (@voltima_quant) 於 Threads · 查看原文
