(本篇有很多數學式,這裡要抱怨一下這邊都沒辦法顯示數學式,我直接請GPT代勞)
過去我們說過回測如果沒有經過交叉驗證的話只會在一個歷史資料用一個路徑去做驗證,這樣的方式其實是相當容易過擬合的,可以常常看到網路上有非常多的人會說提到回測最佳化參數遇到的問題。
單純的交叉驗證可以解決這樣的問題嗎?這就是接下來要討論的主要議題。
回測用於評估投資策略的表現,使用過去的觀察數據進行外樣本評估。這些過去的觀察可以以兩種方式使用:
我們今天更重要的是要討論第二種模擬過去未發生的情景。首先先來說明傳統回測-歷史向前法的一些優缺點。
歷史向前法(WF)是傳統中最常見的回測方法。WF是一種對過去策略性能的歷史模擬。每一個策略決策都基於該決策之前的觀察。
WF 有兩個主要優點:
常見的錯誤是在WF中找到訊息洩漏,尤其是清除會遇到的那些狀況。
這裡講解一下清除的機制:
舉例來說:KD指標在計算時會用到前面幾天的數據,例如傳統KD9就起碼用到9天(不包含迭代的部分的話,迭代的部分是全歷史域的),因此如果直接來做訓練跟驗證集的切割會出現驗證集的資訊包含到訓練集,這就是訊息洩漏,在基於時間的數據上要謹慎處理。
WF 有兩個主要缺點:首先,僅測試一個場景(歷史路徑),這很容易過度擬合。另外WF不一定能代表未來的性能,因為結果可能會受到數據點特定排序的偏見。
假設有一個股票交易策略,從2007年1月1日開始在 S&P 500 上進行 WF 回測。在2009年3月15日之前,因為市場有上升和下跌,這個策略會被訓練成一個市場中性(不偏向買入或賣出)的策略。但是在那之後,市場主要是上升,所以策略會被訓練成主要進行買入。
問題在於,如果你把時間反過來,從2017年1月1日到2007年1月1日進行回測,你會得到一個完全不同的策略。這顯示 WF 方法容易受到數據順序的影響,而這樣的策略在實際應用中可能會失敗。
投資人經常做一些假設,例如將策略暴露於2008年金融危機、或是網絡泡沫、或是逐步緊縮風波、或是2015–2016年的中國恐慌等無法預見的壓力情境下,會有什麼表現。一種測試的方法是將觀察資料分成兩組,一組是我們希望測試的時期(測試集),另一組是其餘的資料(訓練集)。例如,一個分類器會在2009年1月1日至2017年1月1日期間進行訓練(目的是跳過2008年),然後在2008年1月1日至2008年12月31日期間進行測試。我們對2008年所獲得的表現並不是歷史上準確的,因為模型是在2008年之後才有的資料上進行訓練的。但歷史準確性並非測試的目標。測試的目的是要將一個對2008年一無所知的策略暴露於類似2008年的壓力情境下。
交叉驗證(CV)進行回測的目的不是為了獲得歷史準確的表現,而是為了從多個樣本外情境中推斷未來表現。在回測的每一個時期,我們模擬一個除了那一個時期之外都了解所有情況的模型的表現。
這篇要介紹一種新方法,該方法解決了WF和CV方法的主要缺點,即這些方案只測試單一的路徑。「組合式清洗交叉驗證」(CPCV)方法。給定研究者目標的回測路徑數量𝜑,CPCV會生成所需的精確數量的訓練/測試集的組合,以生成這些路徑,同時清洗包含洩漏信息的訓練觀察值。
這種方法的目的是解決單一路徑測試的局限性,並通過清洗來消除信息洩漏的可能性,提供更可靠和全面的回測結果。