PRAESENTIA
[AFML] 7장 금융에서의 교차검증 ~ 11장 앙상블 기법 본문
Advances in Financial Machine Learning
7장 금융에서의 교차검증
- 교차 검증
- 목표
- CV는 관측 데이터를 두 가지 집합으로 나눔. 훈련셋과 테스트셋. 이때 하나의 집합에 있는 정보가 다른 집합으로 흘러가는 것을 방지하여 무작위성을 유지함
- 보통 K-Fold가 가장 유명.
- 금융에서 K-fold CV가 실패하는 이유
- 관측값을 IID 프로세스에서 추출하는 가정을 할 수 없음
- 테스트셋이 모델 개발 과정 프로세스에서 여러 번 사용되었기 때문(11~13장에서 언급)
- 첫 번째 문제점 관련
- 훈련셋과 테스트셋을 t시점과 t+1시점으로 분리하면 정보가 누출됨. 두 계열에 상관관계가 중첩되었기 때문
- 해결책
- Y_i가 Y_j를 사용하는 데 사용된 정보 함수라면, j가 테스트셋에 속했을 때 모든 관측값 i를 훈련 데이터셋에서 제외할 것
- 혹은 분류기 과적합을 피할 것 => 조기 종료를 하거나 순차적 부트스트랩을 쓰거나
- 목표
- 제거 K겹 교차 검증(Purging K-fold CV)
- 엠바고 프로세스: 테스트셋에 있는 관측값을 즉시 따르는 훈련셋 관측값을 제거하는 과정
- 레이블이 중첩된 모든 관측값을 제거하고, 나아가 엠바고도 설정해야 함
- 대체로 테스트셋 직후에 0.01T 정도의 h값의 텀을 둬서 엠바고를 설정함
- 이런 모든 과정이 sklearn에 구현되어 있지는 않기 때문에 본 교재를 참조(p.182)
- 엠바고 프로세스: 테스트셋에 있는 관측값을 즉시 따르는 훈련셋 관측값을 제거하는 과정
8장 특성 중요도
- 특성 중요도
- 왜 중요한가
- 7장의 CV 기법을 써서 결과가 좋게 나왔다 했을 때, 모델의 어떤 특성이 이에 기여했는가 알고 싶어짐
- 이런 특성들이 늘 중요한지 아니면 특정 환경에서만 중요한지, 시간에 따라 중요도가 달라지는 이유는 무엇인지, 다른 금융 상품에서도 주요한 특성인지 등
- 백테스트는 연구 도구가 아님, 특성 중요도가 연구 도구임
- 대체 효과
- 대체 효과(다중 공선성)에 의해 영향을 받았는지 여부에 따라 특성 중요도를 구분하는 게 유용함
- 왜 중요한가
- 대체 효과가 있는 특성 중요도
- 평균 감소 불순도(MDI)
- RF 같은 트리 기반 분류기에 특화
- 각 트리에서 선택된 특성들은 자신의 부분집합을 불순도가 감소하는 방향으로 분할, 때문에 각 결정 트리별로 개별 특성이 전체 불순도 감소에 얼마나 기여했는지 확인 가능
- 다만, 이 방법은 상관된 특성이 존재할 때는 대체 효과를 해결 못함. MDI가 대체 특성의 중요도를 희석시키기 때문
- 평균 감소 정확도(MDA)
- 트리 외의 모든 분류기에 적용 가능
- MDI처럼 상관된 특성이 존재하면 대체 효과 영향을 받음
- MDI와 달리 MDA는 모든 특성이 중요하지 않다 결론내릴 수도 있음
- 평균 감소 불순도(MDI)
- 대체 효과가 없는 특성 중요도
- 대체 효과는 중복되어 있는 중요한 특성을 버리는 결과를 초래할 수도 있음. 때문에 다음의 단일 특성 중요도 기법이 보완 역할 가능
- 단일 특성 중요도(SFI)
- 모든 분류기에 적용 가능
- SFI는 성과 점수로서 정확도에만 사용되지 않음
- 한 번에 하나의 특성만 고려하기 때문에 대체 효과가 없음
- MDA처럼 모든 특성이 중요치 않다 결론내릴 수 있음.
- 다만, 2개의 특성을 가진 1개의 분류기가 단일 특성을 가진 2개의 분류기보다 성능이 좋을 수 있기 때문에 이 자체만으로는 한계가 존재함
- 직교 특성
- 대체 효과는 MDI로 나온 특성 중요도를 희석시키고 MDA로 측정된 특성 중요도를 과소 평가함. 그래서 부분 해법으로 특성을 직교시킴
- PCA와 같은 방식은 모든 대체 효과를 방지하진 못하나, 최소한 선형 대체 효과는 완화
- 주의사항
- MDI, MDA, SFI를 포함한 모든 방법에서 찾아낸, 중요하다 알려진 특성들을 늘 회의적으로 바라보는 시각을 가져야 함
- PCA를 통해 직교 특성을 찾아냈다 해도, PCA는 분류기 관점에서 과적합의 가능성을 고려하지 못함
- 만약 MDI, MDA, SFI에서 중요하다 뽑아낸 특성이 PCA가 산출한 것과 동일하다면, 이건 순전히 과적합에 의한 것만은 아니라 결론지을 수 있음.
- 합성 데이터를 사용한 실험
- 이런 특성 중요도 방법이 합성 데이터에 어떻게 반응하는지 테스트 해보는 것도 좋은 방법
9장 교차 검증을 통한 하이퍼 파라미터 튜닝
- 그리드 검색 교차 검증
- 성과를 최대화 하는 파라미터 조합을 완전 탐색
- 다만 이때 메타 레이블링은 f1을 이용, 대량의 0 레이블을 지닌 표본이 있을 경우 acc가 지나치게 높게 책정될 수 있기 때문
- 랜덤 검색 교차 검증
- 각 파라미터를 특정 분포로부터 추출하는 방식
- 소요 시간, 조합의 수를 통제 가능
- 성과와 무관한 파라미터의 영향을 덜 받음
- 로그 균등 분포
- 간혹 음수가 아닌 하이퍼 파라미터만을 쓰는 알고리즘들이 있음
- 그때는 로그 균등 분포로 추출한 값을 쓰는 것이 좋음
- 각 파라미터를 특정 분포로부터 추출하는 방식
- 스코어 함수
- Acc보단 neg_log_loss를 쓰는 걸 추천함
- 정확도는 높은 확률로 잘못된 매수 예측을 한 경우와, 낮은 확률로 잘못된 예측을 한 경우를 동일하게 취급함
- 또 정확도는 높은 확률의 실수와 낮은 확률의 성공을 서로 상쇄시킬 수도 있음
- 투자 전략은 높은 신뢰도로 올바른 레이블을 예측해서 수익을 얻어야 함
- 이런 측면에서 acc보다 cross-entropy를 추천
- 그런데 neg_log_loss와 cross-entropy는 어떻게 다른지? 단순 레이블 개수 차이인가,,,
- 그리고 neg_log_loss를 사용할 때는 sklearn 버그 주의 (p.217)
- Acc보단 neg_log_loss를 쓰는 걸 추천함
10장 베팅 크기
- 전략 독립 베팅 크기
- 거래 신호가 약해지기 전에, 그 신호가 강해질 가능성에 대비해 현금을 확보하도록 포지션 크기를 정하는 것
- 첫 번째 방법
- 롱 베팅 개수와 숏 베팅 개수의 차이를 계산, 이렇게 도출된 c_t 값을 활용해 베팅 크기를 m_t를 유도
- 신호가 강해질수록 신호가 더 강해질 확률은 점점 작아지므로 베팅 크기는 더 커짐
- 두 번째 방법
- 예산 관리 방식, 공존 롱 베팅의 최대 개수와 공존 숏 베팅의 최대 개수를 계산. 이로부터 m_t 유도
- 마지막 공존 신호가 발생하기 전에 최대 포지션에 도달하지 않도록 주의
- 세 번째 방법
- 3장의 메타 레이블링 적용, 분류기를 적합화해 분류 확률을 결정, 이로부터 베팅 크기 도출
- 베팅 크기를 결정하는 알고리즘이 1차 모델과 독립이라 거짓 양의 전조가 되는 특성을 포함할 수 있다는 장점
- 이 책에서는 이 방식을 채택
- 베팅의 평균화
- 모든 베팅은 생성 시간과 배리어에 도달한 시점 사이의 간격, t1이 존재.
- 한 가지 방법은 새로운 베팅이 도착하면 이전 베팅을 덮어쓰는 것. 그러나 이 방법은 과도한 포트폴리오 회전율을 유발할 수 있음
- 보다 합리적인 방법은 실행 중인 모든 베팅의 크기를 평균화 하는 것
- 평균화를 해도 여전히 모든 예측마다 작은 거래가 촉발될 수 있음. 이럴 때 베팅 크기 이산화가 필요
- 모든 베팅은 생성 시간과 배리어에 도달한 시점 사이의 간격, t1이 존재.
11장 백테스트의 위험
- 백테스트의 위험
- 백테스트는 실험이 아닌 가상적인 것, 시나리오에 관한 여러 변수를 검사하기에는 좋음
- 환경 변수를 통제한 상황에서 실험을 반복해야 인과 파악이 되는데, 백테스트는 실험이 아니기에 아무런 인과성도 증명 못함
- 주요 주의사항
- 생존 편향: 지금 생존한 종목들은 상폐를 피해간 애들
- 선견 편향: 시뮬레이션이 실행된 당시에는 공개되지 않은 정보로 시뮬레이션이 이뤄졌을 수 있음
- 꾸며대기: 특정 랜덤 패턴을 정당화하려 사후에 스토리를 꾸며냄
- 데이터 마이닝 & 스누핑: 테스트 데이터를 활용해 모델 학습
- 거래 비용: 정확한 거래 비용을 시뮬레이션 하는 것은 매우 어려움
- 이상값: 과거에 관측됐으나 다시는 나타나지 않을 소수의 극단적 이상값에 전략을 맞춤
- 공매도
- 이 모든 주의사항을 피해가더라도, 당신이 백테스팅 전문가가 된 순간 첫 번째로 생성한 백테스트가 아니기에 통계적 요행, 편향이 섞였을 수밖에 없음
- 백테스트는 연구 도구가 아님
- 대체 효과, 결합 효과, MDI, MDA, SFI 등의 특성은 매우 주요한 연구 도구이나, 이게 곧 수익을 담보하진 못함
- 그럼에도 얘네가 중요한 건, 과거 성과를 시뮬레이션 하기 전에 사전적으로 도출되는 지표이기 때문
- 오히려 중요한 특성이 아님에도 수익성이 좋은 전략들이 많음. 그러나 얘네는 연구 도구가 아님
- 백테스트의 목적은 나쁜 모델을 폐기하는 것이지 개선하는 게 아님 => 모델이 충분히 정의되기 전에 백테스트를 해서는 안 됨
- 몇 가지 추천 대안
- 과적합을 방지할 순 없으나, 조금 완화하는 방법은 있음
- 1. 특정 증권이 아닌, 전체 자산 클래스나 투자 유니버스를 위한 모델을 개발할 것
- 2. 배깅을 활용할 것 => 배깅 적용 시 성과가 저하된다면 과적합 되었을 가능성이 높음
- 3. 모든 연구가 완료될 때까지(최소 10장까지의 내용) 백테스트를 하지 말 것
- 4. 데이터셋에 수행한 모든 백테스트를 기록해, 과적합 확률이 최종 선택된 결과에 대해서 추정될 수 있도록 하라(?)
- 5. 역사적 데이터보다 시나리오로 시뮬레이션 하라.
- 6. 백테스트가 유용한 전략을 찾는데 실패한다면 처음부터 다시 시작하라
- 전략 선택
- 모델을 훈련하는 데 사용되는 절차와 중복성이 가장 낮은 검증 절차를 찾아야 함.
- Sklearn은 WF-timefolds(전방 진행 시간겹 기법)을 구현. 이는 테스트가 전방으로 이동하는데 정보 누출을 막기 위한 목적
- WF 기법
- 단점: 과적합이 쉬움. 랜덤 샘플링을 하지 않고, 거짓 양성이 나타날 때까지 지속 반복하는 단일 테스트 경로이기 때문
- 때문에 PBO에 기반한 CV기법을 추천.
'퀀트 공부 > 금융공학' 카테고리의 다른 글
| [초과 수익을 찾아서] 1장 알파 설계 ~ 10장 편향 통제 (0) | 2023.05.18 |
|---|---|
| [AFML] 12장 교차검증 백테스트 ~ 16장 자산배분 (0) | 2023.05.17 |
| [AFML] 2장 금융 데이터 구조 ~ 6장 앙상블 기법 (0) | 2023.05.15 |
| [패스트캠퍼스] Ch3. 팩터모델링 - 2 (1) | 2023.05.12 |
| [패스트캠퍼스] Ch3. 팩터모델링 - 1 (1) | 2023.05.11 |
Comments