VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 回測與檢驗

Kolmogorov–Smirnov 檢定:樣本外看起來像樣本內嗎?

Kolmogorov–Smirnov 檢定會把樣本外交易結果的整體分布與樣本內分布相比,並回報:若兩者來自相同的策略行為,出現這麼大差距的可能性有多高。p 值低,代表樣本外的交易表現與策略當初建立時所依據的交易不同。它判斷的是相似度,不是獲利。

作者 · 發佈 · 更新於 · 編輯原則

目錄
  1. Kolmogorov–Smirnov 檢定能告訴你策略的什麼?
  2. KS 檢定究竟在比較什麼?
  3. 統計量與 p 值,用白話怎麼理解?
  4. 如何對樣本內與樣本外的每筆交易報酬執行 KS 檢定?
  5. KS 未通過代表什麼,又不代表什麼?
  6. 要有多少筆交易,KS 檢定才有意義?
  7. 還有哪些檢驗該與 KS 檢定搭配?
  8. 常見問題
  9. 參考文獻

Kolmogorov–Smirnov 檢定能告訴你策略的什麼?

Kolmogorov–Smirnov 檢定會把樣本外交易結果的整體分布與樣本內分布相比,並回報:若兩者來自相同的策略行為,出現這麼大差距的可能性有多高。p 值低,代表樣本外的交易表現與策略當初建立時所依據的交易不同。這個檢定判斷的是相似度,不是獲利。

Kolmogorov–Smirnov 檢定(KS 檢定)是一種統計檢定,用來衡量兩個分布相距多遠,以及如果兩組樣本來自同一來源,這個距離會有多令人意外。樣本內資料是用來挑選規則與參數的那一段歷史。樣本外資料是保留下來、只用來測試定稿規則的那一段。每一段都會產生一份交易結果清單,KS 檢定則把這兩份清單當作完整的形狀來比較。

想像兩個班級在同一場考試中平均都是 70 分。一個班每位學生都落在 65 到 75 之間;另一個班一半學生接近 40 分,一半接近 100 分。平均數相同,但兩個班並不相像。策略也可能如此:樣本外的總損益為正,可能只是一筆大賺單壓在許多小虧損之上,而樣本內期間則是穩定的中等獲利。總損益的正負號說兩段期間一致,分布卻說並不一致。樣本外損益為正是否代表有實力一文說明了為何只看正負號是薄弱的證據;KS 檢定正是提出更嚴格問題的工具之一。

兩個班級在同一場考試的平均都是 70 分:A 班緊密集中在 65 到 75 分之間,B 班則分成接近 40 分和接近 100 分的兩群,平均相同但分布形狀不同 平均相同,形狀不同 兩個班級,平均都是 70 A 班 B 班 40 70 100 平均相同,形狀不同。 所以:要比較整個分布。
兩組平均都是 70:一組集中在 65 到 75 之間,另一組分散在接近 40 與接近 100 兩處。平均數相同,形狀卻不同。

KS 檢定究竟在比較什麼?

KS 檢定比較兩條累積分布曲線,其統計量 D 就是兩條曲線之間最大的垂直差距。累積分布是一條曲線,對每一個可能的交易結果,顯示結果小於或等於該值的交易占多少比例。建立方式是把所有交易由左邊最差的虧損排到右邊最好的獲利,然後在每個結果水準上,計算落在該水準或其左側的交易占幾成。曲線從 0 開始(沒有交易比最差的一筆更差),到 1 結束(所有交易都小於或等於最好的一筆)。

把樣本內曲線與樣本外曲線畫在同一張圖上。如果兩段期間的行為相近,兩條曲線會貼得很近。如果樣本外虧損單較多,它的曲線會爬升得較早,在左側位於樣本內曲線之上。如果大額獲利較少,它在右側會較早到達 1。檢定會找出兩條曲線垂直距離最遠的那個結果水準,並把該距離回報為 D。

兩條交易結果的累積曲線,樣本內為實線、樣本外為虛線,皆從 0 上升至 1;KS 統計量 D 為兩者間最大的垂直差距,此處位於虧損側,樣本外曲線較早上升 D 是最大差距 小於等於各結果的交易占比 1 0 虧損 獲利 D 樣本內 樣本外 D 是最寬的垂直距離。 所以:看它在哪一側。
KS 統計量 D,是樣本內與樣本外交易結果累積曲線之間最大的垂直差距。

比較累積曲線對交易者有兩個實務上的好處。第一,它用到每一筆交易,而不只是平均或總和,所以即使平均數相近,虧損單大小或獲利單頻率的變化也看得出來。第二,它不假設分布的形狀。交易結果很少呈鐘形:停損很緊、停利很寬的策略,會有許多小虧損與少數大獲利,KS 檢定不需調整就能處理這種形狀。

統計量與 p 值,用白話怎麼理解?

D 表示兩個交易分布相距多遠,p 值則表示:若兩組樣本真的來自同一分布,至少出現這麼大差距的機率有多高。本文唯一的公式就是 D 的定義:

D = max | Fis(x) − Foos(x) |

其中 x 是任一交易結果水準,例如淨結果 −3 點或 +12 點。Fis(x) 是樣本內交易中結果小於或等於 x 的比例。Foos(x) 則是樣本外交易的同一比例。垂直線表示「忽略正負號,取差距的大小」。max 表示「檢視每一個水準 x,保留找到的最大差距」。D 一定介於 0 與 1 之間。D 為 0.10,代表在最差的那一點,兩條曲線相差十個百分點的交易。D 為 0.40,代表相差四十個百分點,這是行為上很大的差異。

p 值是指在兩組樣本確實來自同一分布時,看到至少這麼大的 D 的機率。擲一枚公平硬幣十次得到七次正面,並不令人意外,這很常因偶然發生。擲兩百次卻得到 140 次正面,就非常令人意外,你會懷疑這枚硬幣不公平。p 值扮演的就是「有多令人意外」:p 值高(例如 0.40),表示這樣的差距只是同一來源兩組樣本之間的一般雜訊;p 值低(例如 0.01),表示若什麼都沒變,這樣的差距很少見,因此較可能的解釋是樣本外的交易確實表現不同。

兩條曲線之間的差距小時,p 值偏高,例如 0.40,屬於一般雜訊;差距大時,p 值偏低,例如 0.01,顯示策略的交易方式出現真實變化 差距越大,p 值越低 同一檢定,兩種差距,示意圖 差距小 p = 0.40 只是雜訊 差距大 p = 0.01 真實變化 p 值低代表有真實變化。 因此:先定好門檻。
曲線間差距小,p 值就高;差距大,p 值就低,並指向策略交易方式已經改變。

多數人對 p 值使用 0.05(5%)的門檻,也就是把偶然出現機率低於二十分之一的差距視為真實差異。數字本身不如順序重要:在看結果之前就決定門檻,並且對你測試的每一個策略都維持相同門檻。

如何對樣本內與樣本外的每筆交易報酬執行 KS 檢定?

流程有六個步驟,而且兩段期間的切分必須在讀任何數字之前就固定。多數統計函式庫與試算表增益集都內建雙樣本 KS 函式,可替你完成第 3 到第 5 步;真正重要的工作在第 1、2、6 步。步驟 1 要用的每筆交易結果,可以取自 AlphaPrime(Valynox) 績效報表的交易明細,步驟 2 再依切分日期把它們分成兩組。

  1. 蒐集扣除成本後的每筆交易淨結果。使用每筆已平倉交易的結果,手續費、費用與滑價都已扣除,並採用單一單位(點數、跳動點或金額)。成本會改變分布的形狀,所以用未扣成本的結果做檢定,回答的是另一個問題。回測中的交易成本一文說明了該扣除哪些項目。
  2. 剛好在樣本內/樣本外的分界處切分清單。在分界日期之前進場的每筆交易屬於樣本內組;在其之後進場的每筆交易屬於樣本外組。看到結果後不要再移動分界。
  3. 各組排序並建立累積曲線。把每組由最差虧損排到最佳獲利,並在每個結果水準上,計算該組交易中小於或等於該水準的比例。
  4. 量測 D。找出兩條曲線差異最大的結果水準,記錄該垂直差距。
  5. 讀取 p 值。軟體會根據 D 與兩組樣本數回報 p 值。
  6. 與事先選好的門檻比較。若 p 值低於門檻,記為未通過。若等於或高於門檻,記為通過,接著進行下一項檢驗。
執行 KS 檢定:先固定切分日期與門檻,再計算曲線、D 值與 p 值,並標示通過或未通過 在看結果之前先訂規則 左側事先固定 先固定 再解讀 切分日期 門檻 曲線、D、p 通過或未通過 事後更動會使檢定產生偏差。 所以:先寫下兩者。
從交易明細到 KS 結果:切分與門檻都在讀任何數字之前就固定。

假設範例

某指數期貨上的突破策略產生 400 筆樣本內交易與 100 筆樣本外交易,全部記錄為扣除成本後的淨點數。樣本內曲線與樣本外曲線在結果水準 −4 點處相距最遠:38% 的樣本內交易結果小於或等於 −4 點,而樣本外交易則有 50%。因此 D 為 0.12。以這樣的樣本數,p 值約為 0.20。檢定前選定的門檻是 0.05,所以策略通過:400 筆樣本與 100 筆樣本之間 0.12 的差距屬於正常。如果 D 是 0.20(例如 58% 的樣本外交易小於或等於 −4 點),p 值會約為 0.003,策略就會未通過,意思是樣本外期間出現虧損單的頻率遠高於策略當初建立時的期間。

KS 未通過代表什麼,又不代表什麼?

KS 未通過,代表樣本外的交易表現與策略當初建立時所依據的交易不同;通過則代表沒有偵測到這樣的差異,兩種結果都不能說明獲利。未通過最常見的原因是過度最佳化與市場改變。過度最佳化是指規則被調到貼合樣本內資料中的雜訊,所以樣本內的交易結果描述的是運氣,樣本外期間無法重現。Bailey、Borwein、López de Prado 與 Zhu(2014)說明了從許多回測中挑出最好的一個,如何膨脹樣本內結果,並導致樣本外表現與之不相似;為什麼最好的回測通常被高估一文有詳細說明。市場改變則是指規則在樣本內那幾年是合理的,但商品現在的波動度、交易時段的流動性或成本都已不同。

KS 通過KS 未通過
它說明了什麼樣本外交易結果看起來與樣本內結果相似樣本外交易表現不同
下一步繼續進行其他檢驗檢視兩條曲線,然後檢查是否有過度最佳化或市場改變
它是否說明策略能獲利?否否
它是否預測明年?否否
它是否說明偏移的方向?不需要否;請看曲線
KS 檢定只檢驗樣本外交易與樣本內交易的分布形狀是否相同;獲利、明年表現與偏移方向都不在檢定範圍內 看相似度,不看獲利 通過或未通過能告訴你什麼 檢定內容 形狀相同? IS 對 OOS 檢定範圍外 獲利 明年 方向 通過不代表該交易。 所以:做下一項檢驗。
通過與未通過各自回答一個問題;獲利、未來與偏移方向都不在檢定範圍內。

這個檢定是對稱的:樣本外交易遠比樣本內好的策略,與樣本外遠比樣本內差的策略一樣會嚴重未通過,因為 D 只衡量距離。要知道方向,請看圖:若樣本外曲線在虧損那一側位於樣本內曲線之上,代表樣本外期間虧損單較多。策略虧損卻通過檢定也很常見。如果一個策略在樣本內穩定虧錢,在樣本外也以同樣方式虧錢,KS 檢定會通過,因為行為是一致的。一致性是這個檢定的問題;品質則是另一項檢驗。

要有多少筆交易,KS 檢定才有意義?

交易筆數少時,檢定能偵測到的最小差距很大,所以在樣本外樣本很小的情況下通過,說明不了什麼。道理和硬幣一樣:擲十次得到七次正面不能證明任何事,兩組各 20 筆交易之間相差 40 個百分點也同樣不能。只有當差距大於單靠隨機抽樣會產生的差距時,檢定才會判定差異為真,而樣本小時,隨機抽樣本來就會產生很大的差距。

下表列出在兩組樣本筆數相同時,於 5% 水準下算作未通過的大約最小 D,採用 KS 檢定標準的大樣本近似。可偵測的差距大致隨交易筆數的平方根縮小:交易筆數多四倍,檢定能看見的差距就減半。

每組樣本的交易筆數可偵測的最小 D(5% 水準,近似值)這個差距的意思
20約 0.43曲線可相差 43 個百分點的交易,仍然通過
50約 0.27只有非常大的行為偏移才會被偵測到
100約 0.19中等程度的偏移可被偵測到
500約 0.09小幅偏移可被偵測到
KS 檢定在 5% 水準下能偵測到的最小差距 D 約為:每組樣本 20 筆交易時 0.43,50 筆 0.27,100 筆 0.19,500 筆 0.09,因此小樣本很容易通過 交易筆數少,會掩蓋大幅變化 未通過的最小差距 D,5% 水準 20 筆交易 0.43 50 筆交易 0.27 100 筆交易 0.19 500 筆交易 0.09 小樣本幾乎什麼都能通過。 所以:以較小的樣本為準。
在 5% 水準下,KS 檢定能偵測的最小差距會隨每組樣本的交易筆數增加而縮小;小樣本很容易通過。

由此可得三個實務上的結論。第一,兩組樣本中較小的那一組決定極限。樣本外期間只有 30 筆交易,不會因為樣本內期間有 600 筆就得到補救;可偵測的差距依然很大。第二,小樣本下通過,並不是一致性的證據,只是沒有找到反對它的證據,所以請把 KS 檢定當成剔除明顯失敗者的篩選器,而不是確認策略的定論。第三,如果策略交易太少、收集不到足夠的樣本外交易,較好的解法是拉長樣本外期間,或採用把數個樣本外視窗接在一起的推進分析設計,而不是放寬門檻。

還有哪些檢驗該與 KS 檢定搭配?

KS 檢定回答的是關於分布形狀的一個問題,最適合作為更完整檢驗流程中的一步。有三項檢驗自然地與它並列,順序如下:

  1. 推進分析。單一的樣本內/樣本外切分,只會從一個分界日期得到一個 KS 結果。推進分析會在每個樣本內視窗重新最佳化,並在其後的視窗測試,因此產生許多樣本外區段。把這些區段接起來,就得到較大的樣本外樣本供 KS 比較,並能顯示行為是否在不同市場環境下都維持,而不是只靠某一段幸運的期間。
  2. 成本壓力測試。把滑價加倍,重跑樣本外期間,再重複比較。若分布在成本升高時大幅偏移,這個策略就依賴低廉的執行成本,而這種依賴在只於單一成本水準計算的 KS 結果中看不出來。
  3. 針對測試變體數量的修正。如果你生成了許多策略變體,只留下通過的那些,倖存者中就包含了較大的樣本外樣本無法支持的弱通過者。Bailey 與 López de Prado(2014)提出 deflated Sharpe ratio 來針對試驗次數做調整;deflated Sharpe ratio 一文說明了如何應用。同樣的邏輯也適用於 KS 檢定:在 5% 門檻下,真正具有一致性的策略約有二十分之一會因偶然而未通過,而不一致的策略只要樣本外樣本小到無法顯示偏移就會通過,所以你測試過的策略數量與每組樣本的大小都該記錄下來。

AlphaPrime在其策略檢驗中處理這個流程裡的推進分析部分。其策略檢驗套用一致的研究標準與自訂門檻,包含推進分析,提供基本、標準與完整三種檢驗等級,並在策略未通過較早的檢驗時停止後續檢驗,讓時間花在通過最初篩選的候選策略上。

如果你使用 AlphaPrime,這代表:AlphaPrime 產生的每筆交易結果,每次評估都已納入手續費、滑價與下一根 K 棒執行,正是樣本內與樣本外比較所需的輸入;而策略檢驗中的推進分析視窗,則提供該比較所需的樣本外交易。

常見問題

對交易策略做 KS 檢定,p 值多少算好?

p 值等於或高於你在測試前選定的門檻(最常見是 0.05),代表在樣本內與樣本外的交易分布之間沒有偵測到差異。門檻只固定一次,並套用到每個策略;較高的 p 值只代表觀察到的差距較屬正常,不代表策略較好。在樣本外樣本很小時通過,只是薄弱的證據,所以請把 p 值與交易筆數一起判讀。

可以對每日報酬而不是個別交易執行 KS 檢定嗎?

可以。雙樣本 KS 檢定只需要兩份數字清單,所以策略的每日或每週淨報酬都可以當作輸入。對很少交易的策略,每日報酬能提供較多的資料點,但沒有持倉的許多日子會是零,使兩條曲線變平。當交易筆數夠多時,每筆交易結果更直接地描述策略的行為。

KS 檢定與 t 檢定有何不同?

t 檢定比較兩組的平均數,並假設資料大致呈鐘形。KS 檢定比較完整的累積分布,不假設形狀。兩段期間可以有相同的平均每筆損益,但只要分散程度或大額虧損單的頻率改變,仍會在 KS 檢定中未通過,而這正是交易者想看到的那類變化。

KS 通過就代表我的策略沒有過度最佳化嗎?

不是。通過只代表在這樣的樣本數下,樣本外交易與樣本內交易沒有被偵測到差異。樣本外樣本小時,檢定只能偵測非常大的偏移,而你篩選的變體越多,收集到的這類弱通過就越多。請把通過當作一道篩選,與推進分析、成本壓力測試以及針對測試變體數量的修正並用。

單樣本與雙樣本 KS 檢定有何差別?

單樣本 KS 檢定是把一份數字清單與理論分布(例如常態曲線)比較。雙樣本 KS 檢定則是把兩份數字清單互相比較。比較樣本內與樣本外的交易結果屬於雙樣本檢定:兩份清單都不是理論,而都是實際觀察到的交易。

參考文獻

  • Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.
  • Bailey, D. H., & López de Prado, M. (2014). The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality. The Journal of Portfolio Management, 40(5), 94–107.