Backtesting through Cross Validation - jaeaehkim/trading_system_beta GitHub Wiki
Motivation
- ํ์์ : ์ญ์ฌ์ ์๋ฎฌ๋ ์ด์
, ๊ด์์ : (๊ณผ๊ฑฐ์ ๋ฐ์ํ์ง ์์๋) ์๋๋ฆฌ์ค ์๋ฎฌ๋ ์ด์
- ์๋๋ฆฌ์ค ์๋ฎฌ๋ ์ด์
์ ํตํด์ ๊ณผ๊ฑฐ Path ํ ๊ฐ์ bias๋์ง ์๊ณ stress test๋ฅผ ์งํํ ์ ์๊ฒ ๋จ.
- ํ์ฌ๋ ์ญ์ฌ์ ์๋ฎฌ๋ ์ด์
์ด Backtesting์ ๋์์ด์ฒ๋ผ ๋์ด๋ฒ๋ฆผ. Walk-Forward ๋ฐฉ์๊ณผ CPCV ๋ฐฉ์์ ์๋์ ์๊ฐํจ.
The Walk-Forward Method

- Concept : '๊ณผ๊ฑฐ์ ์ด ์ ๋ต์ ์ฌ์ฉํ๋๋ผ๋ฉด ์ด๋ป๊ฒ ๋์๊น?'์ ๋ํ ์ญ์ฌ์ ์๋ฎฌ๋ ์ด์
- Train ํ๋ ๊ธฐ๊ฐ์ ์ด๋ป๊ฒ ์ก์ ๊ฒ์ด๋์ ๋ฐ๋ผ ์ฝ๊ฐ์ Variation์ ์ค ์ ์์.
- Walk-Forward๋ฅผ ์คํํ๋ ๊ณผ์ ์์๋ ์ ๊ตํ๊ฒ ์คํํ๋ ค ํ๋ค๋ฉด data source knowledge / market microstructure / risk-management / performance measurement ๋ฑ ๋ชจ๋ ๊ณ ๋ คํด์ผ ํ๋ค. ๋ฌผ๋ก , ์คํํ๋ ์ ๋ต์ ๋ฐ๋ผ์ ๊ฐ ๋ถ๋ถ์ ๊ฐ์ฝ ์กฐ์ ์ ํ ์ ์๋ค.
- ์ฅ์
- ๋ช
๋ฐฑํ ์ญ์ฌ์ ํด์์ ๊ฐ๊ณ ์์ผ๋ฏ๋ก ์๋ฎฌ๋ ์ด์
๊ฑฐ๋๋ฅผ ํตํด ์ผ์น์ํด. -> Production Level์์ Monitoringํ ๋ ์ฃผ์ํจ
- Purge๊ฐ ์ ์ ํ ๊ตฌํ๋๋ค๋ฉด information leakage๊ฐ ์๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค. ๋ํ, embargo๋ ํ์์๋ค. ํ๋ จ ์งํฉ์ด ํญ์ ํ
์คํธ ์งํฉ ์ด์ ์ด๊ธฐ์ (์ฐธ๊ณ : Cross Validation in Model)
- ๋จ์
- ๋จ์ผ ์๋๋ฆฌ์ค ํ
์คํธ๊ฐ ๋์ด๋ฒ๋ฆฌ๊ณ ์ด๋ ์ฝ๊ฒ ๊ณผ์ ํฉ ๊ฐ๋ฅ
- WF๋ ๋ฏธ๋์ ์ฑ๋ฅ์ ๋ํ๋ด๋ ค๊ณ ํํํ๊ธฐ ๋๋ฌธ์ ํน์ Data Point Sequence์ ํธํฅ๋ ์ ์์
- ์ญ์ฌ๋ ๋ช๊ฐ์ง ๊ฒฐ์ ์ ์ ํ๋ค๋ก ์ธํด Data Sequence๊ฐ ๋ฐ๋ ์ ์๋๋ฐ ์ด ๋ถ๋ถ์ ๋ํ ๊ฒ์ ํ๋๋ก๋ง ํธํฅ๋๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ฝ๊ณ ์ด ์ค์์ ์ข์ ๊ฒ์ ๋ฝ๊ธฐ ๋๋ฌธ์ ๋ฏธ๋์ ์ฌ๋ฌ ์ํฉ์ ๋ํ Stress test๊ฐ ๋งค์ฐ ๋ถ์กฑํจ. Walk-Backward test ๊ฐ์ ๊ฒ์ ํ ๋ ๋ ์ข์ ์ฑ๋ฅ์ด ๋์ค์ง ์๋๋ค๋ฉด ๊ณผ์ ํฉ์ ์ฆ๊ฑฐ๊ฐ ๋จ.
- ์ด๊ธฐ ๊ฒฐ์ ์ ์ ์ฒด ํ๋ณธ ์ค ๋ ์์ ๋ถ๋ถ์์ ํ์ต๋์ด ์ด๋ค์ก๋ค๋ ์ . ํนํ, ์ฒซ ํฌ์ธํธ๋ฅผ fixํ๋ฉด์ train ํ๋ ๊ฒฝ์ฐ๋ ์ ๋ต ๊ฒฐ์ ์ ์ ๋ฐ์ ์ ์ฒด ๊ธฐ๊ฐ์ ์ ๋ฐ ์ดํ์ ๋ฐ์ดํฐ๋ก๋ง ํ์ตํ๊ณ ์งํํ๊ฒ ๋จ. ๋ฌผ๋ก ์์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ชจ๋ ๊ตฌ๊ฐ์์ ํ์ต๋์ ์ผ์ ํ๊ฒ ํ๋ ๋ฐฉ๋ฒ๋ ์์ผ๋ ์ด ๋ถ๋ถ์ ๋ง์ ์์ ํ์ตํ์ง ์๋๋ค๋ ๋จ์ ์ด ์กด์ฌ.
The Corss Validation Method

- ํฌ์์๊ฐ ์ํ๋ ๊ฒ์ 08๋
, ๋ท์ปด ๋ฒ๋ธ, ๊ธด์ถ ๋ฐ์, 15~16๋
์ค๊ตญ ์ฃผ์ ์๋๊ณผ ๊ฐ์ ์ ๋ก ์๋ ์คํธ๋ ์ค ์๋๋ฆฌ์ค์ ์ง๋ฉดํ์ ๋ ํฌ์ ์ ๋ต์ ์ฑ๋ฅ์ ์๊ณ ์ถ์
- Simple CV Method
- ๊ด์ธก ๊ฐ์ ๋ ๊ฐ์ง ์งํฉ์ผ๋ก ๋๋์ด 2009๋
~2017๋
์ ๋ฐ์ดํฐ๋ก Trainํ๊ณ 08๋
์ ๋ํด Test ํ๋ ๋ฐฉ์
- ์ด ๋ฐฉ๋ฒ์ ์ญ์ฌ์ ์ผ๋ก ์ ํํ์ง ์๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ชฉํ๋ ์ญ์ฌ์ ์ ํ๋๊ฐ ์๋ 08๋
๋์ ๋ด์ฉ์ ๋ชจ๋ฅด๋ ์ ๋ต์ด 08๋
๋์ ๊ฐ์ Stress test๋ฅผ ํด๋ณด๋ ๊ฒ์ ์๋ค.
- ์ฅ์
- CV๋ k๊ฐ์ ๋์ฒด ์๋๋ฆฌ์ค๋ฅผ ํ
์คํธํ๊ณ ํ๋๋ง ๊ณผ๊ฑฐ sequence์ ํด๋น
- ๋ชจ๋ ๊ฒฐ์ ์ ๋์ผํ ํฌ๊ธฐ์ ์งํฉ์ ๋ํด ์ด๋ค์ง๋ค. ํ๋ จํ๋ ์ ๋ณด์ ์์ด ๋์ผ.
- ๊ฐ์ฅ ๊ธด OOS ์๋ฎฌ๋ ์ด์
์ ์ป์ ์ ์๋ค. Walk-Forward ๋๋นํด warm-up ๋ถ๋ถ์ด ์๊ธฐ ๋๋ฌธ.
- test(or validation) set์ ์ฐ๊ฒฐํด ๊ฐ์ฅ ๊ธด OOS ๋จ์ผ ์๋ฎฌ๋ ์ด์
์ ์ป์ ์ ์์
- ๋จ์
- Walk-Forward์ฒ๋ผ ๋จ์ผ Backtesting ๊ฒฝ๋ก๊ฐ ์๋ฎฌ๋ ์ด์
๋๋ค. (์ญ์ฌ์ ์ด์ง ์์ง๋ง ๊ด์ธก๋ณ๋ก ์ค์ง ํ๋์ ์์ธก๋ง ์์ฑ๋จ)
- ๋ช
ํํ ์ญ์ฌ์ ํด์์ ํ์ง๋ ๋ชปํ๋ค.
- Purge/Embargo๋ฅผ ํ์ง ์์ผ๋ฉด inforamtion leakage๊ฐ ๋ฐ์ํ ์ ์๋ค.
The Combinatorial Purged Cross-Validation(CPCV) Method

- Walk-Forward์ (Simple) Cross-Validation ์ ์ฃผ์ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ก์ด ๋ฐฉ๋ฒ : CPCV
Combinatorial Splits
- T= Data Point ๊ฐ์ , N=์ ์ฒด ๊ทธ๋ฃน (T๋ฅผ N๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋) , k=Test ๊ทธ๋ฃน ๊ฐ์ (๋นจ๊ฐ์, ํ๋์ Case์ ๋ํ N-k๋ Train ๊ทธ๋ฃน ๊ฐ์)
- Backtest Path ๊ฐ์ ๊ณ์ฐ
- k * Combination(N, N-k)๋ ์์ ๊ทธ๋ฆผ์ ๋นจ๊ฐ์ ๊ทธ๋ฃน์ ์ด ๊ฐ์. ์ ์ฒด ๊ทธ๋ฃน ์๋ก ๋๋๋ฉด Backtest Path ๊ฐ์๊ฐ ๋์ด
- ์์ ๊ทธ๋ฆผ์์ 1๋ฒ๋ผ๋ฆฌ๋ง ์ฐ๊ฒฐํ ๊ฒ์ด ํ๋์ OOS Simulation Path, 2๋ฒ๋ผ๋ฆฌ๋ง ์ฐ๊ฒฐํ ๊ฒ์ด 2๋ฒ์งธ OOS Simulation Path
- ์์ ์์ ๋ N=6, k=2, pi=5์ ํด๋น
- Issue
- T๊ฐ์ Data Point๋ฅผ N๊ฐ๋ก ๋๋๋ฉด N๋ฒ์งธ ๊ทธ๋ฃน์ Data Point ๊ฐ์๋ ๋ฌ๋ผ์ง ์ ์์. (๋๋จธ์ง๊ฐ 0์ธ ๊ฒฝ์ฐ ์ ์ธ)
- ๊ฐ ๊ทธ๋ฃน์ T * (1-k/N)์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด ํ์ตํ๊ฒ ๋๋ค.
The CPCV Backtesting Algorithm
- T ๊ด์ธก๊ฐ์ N๊ทธ๋ฃน์ผ๋ก ์์ ์์ด ๋ถํ .
- N๋ฒ์งธ ๊ทธ๋ฃน ํฌ๊ธฐ๋ ์์ Issue๋ฅผ ๋ฐ๋ฆ
- ๊ฐ๋ฅํ ๋ชจ๋ Train/Test ๋ถํ ์ ๊ณ์ฐ ํ '๊ฐ ๋ถํ '์์ N-k ๊ทธ๋ฃน์ Train ์งํฉ, k ๊ทธ๋ฃน์ Test ์งํฉ์ผ๋ก ๊ตฌ์ฑ
- Purge / Embargo Process๋ฅผ ์งํ.
- Combination ( N, N-k ) ์ Train ์งํฉ์ fittingํ ํ Combination ( N, N-k )์ Test ์งํฉ์ Inference๋ฅผ ์คํ
- ๊ฐ Test ๊ทธ๋ฃน๋ค์ Sequence์ ๋ง์ถฐ์ Backtest Path๋ก pi๊ฐ ํ์ฑ
- pi๊ฐ์ ๋ํ Sharpe Ratio ๊ฐ์ ๊ณ์ฐํ ์ ์๊ณ ์ด๋ฅผ ํตํด SR์ empirical distribution์ ์ป์ ์ ์์
- Real Sharpe Ration๋ฅผ ๋ชจ๋ Backtest Path์ Sharpe Ratio์ Average๋ก ํ๋ค๋ ์ง ํ์ฉ ๊ฐ๋ฅ.
A Few Examples
- k=1์ด๋ฉด CV method์ ๋์ผํด์ง
- k=2์ด๋ฉด N-1๊ฐ์ backtest path ํ์ฑ
- ๋ ๋ง์ ๊ฒฝ๋ก๊ฐ ํ์ํ ๊ฒฝ์ฐ์ Train ์งํฉ์ Point๊ฐ ์ค์ด๋๋ ์์ ๊ณ ๋ คํด์ k -> N/2๊น์ง ์ฆ๊ฐ์ํฌ ์ ์๋ค. ๋ค๋ง, k=2์ฌ๋ ์ถฉ๋ถํ ๊ฒ์ผ๋ก ๋ณธ๋ค.
How Combinatorial Purged Cross-Validation Addresses Backtest Overfitting
- ์ CPCV๊ฐ CV๋ WF๋ณด๋ค ์ ์ ๊ฑฐ์ง์ ๋ฐ๊ฒฌํ๊ฒ ๋๋์ง ์ฐ์ญ์ ์ผ๋ก ์ฆ๋ช
(Bailey, D., J. Borwein, M. Lยดopez de Prado, and J. Zhu (2014))
- ์ง๊ด์ ์ค๋ช
- WF, CV๋ ๋จ์ผ Backtest Path๋ฅผ ๊ฐ์ง๊ณ ์๊ณ N๊ฐ์ ๋ชจ๋ธ์ ๋ํด N๊ฐ์ Sharpe Ratio๋ฅผ ๊ณ์ฐํ ํ Max Sharpe Ratio ๊ฐ์ ๊ฐ๋ N_star ๋ชจ๋ธ์ ์ต์ข
์ ์ผ๋ก ์ ํํ๊ฒ ๋จ
- ๊ฐ ๋ชจ๋ธ์ Backtest๋ ๊ณผ์ ํฉ ๋ ๊ฐ๋ฅ์ฑ์ ๊ฐ์ง๊ณ ์๊ณ ์ด ์ค์์ Max๋ฅผ ์ฐพ๊ฒ ๋๋ฉด ๊ณผ์ ํฉ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์์ง
- CPCV๋ 1๊ฐ์ ๋ชจ๋ธ์ด์ด๋ Pi๊ฐ์ Backtest Path์ ๊ดํ Pi๊ฐ์ Sharpe Ratio๋ฅผ ๊ฐ๊ฒ ๋๊ณ ์ด๋ฅผ ํ๊ท ํ ๊ฒ์ ํด๋น ๋ชจ๋ธ์ Sharpe Ratio Average๋ผ๊ณ ์ ์ํ๊ฒ ๋๋ฉด 1๊ฐ Path์ ์ฐ์ฐํ Sharpe๊ฐ ๋๊ฒ ๋์จ ๊ฒฝ์ฐ๋ฅผ ๊ฑธ๋ฌ๋ผ ์ ์๊ฒ ๋จ. ์ด Sharpe Ratio ๊ฐ์๋ ์ด Pi * N๊ฐ ๋งํผ ๋์ค๊ฒ ๋๊ณ Sharpe Ratio Average๋ N๊ฐ๋งํผ ๋ฐ์ํจ
- CPCV์ ์ํด์ ๋์จ Sharpe Ratio N๊ฐ๋ ํ ๋ฒ์ ํ๊ท ์์
์ ๊ฑฐ์น ๊ฒฐ๊ณผ๋ผ WF,CV์ ์ํด ๋์จ Sharpe Ratio N๊ฐ์ ๋นํด Sharpe Ratio Distribution์ ๊ทธ๋ฆฌ๋ฉด ๋ถ์ฐ์ด ๋ฎ๊ฒ ๋์ฌ ์ ๋ฐ์ ์์ด์ง. ์ฆ, CPCV๋ Backtest์ ๋ถ์ฐ์ ๋งค์ฐ ์๊ฒ ํด์ค์ ๊ณผ์ต์ Backtest๋ฅผ ๋ฐ๊ฒฌํ๊ฒ ํ ํ๋ฅ ์ ๋งค์ฐ ๋ฎ์ถฐ์ฃผ๊ฒ ๋๋ค.
- ์ฆ, Sharpe Ratio Average๋ฅผ ํ์ฉํ๋ฉด ๋ง์ ํธํ max๊ฐ์ผ๋ก strategy selection์ ํด๋ ๋๋ค.