세 줄 요약
- 학습 구간(2017-06 ~ 2021)으로 만든 블록 재표본은 결합 장부 20거래일 97.5% 기대 꼬리 손실을 630틱으로 봤고, 확인 구간(2022 ~ 2026-09)의 실현은 1,056틱이었다. 역사 시뮬레이션, 정규, VAE 도 모두 0.6배 안팎으로 같이 낮았다.
- TimeGAN 은 세 seed 가 학습 손실은 비슷했는데 꼬리는 575, 1,844, 784틱으로 갈렸고 합본은 1,782틱으로 과대였다. 하루 꼬리는 얇게, 날 사이 의존은 강하게 만든 결과다.
- 사전등록한 ES 만 쓰는 e 백테스트는 어떤 모형도 기각하지 못했고 검정력이 0.10 이었다. 분산 이득 비는 0.82 로 문턱 0.8 을 못 넘었다. 판정은 보류다.
가설과 결론
- 가설
- H960: 블록 재표본으로 낸 20거래일 97.5% ES 는 확인 구간 ES e 백테스트에서 기각되지 않는다. H961: TimeGAN 으로 낸 같은 ES 는 과소추정으로 기각된다(e 값 20 이상). H962: 2022 년 두 다리 일별 손익 상관을 TimeGAN 이 블록보다 덜 맞힌다. H963: 블록 기준 결합 ES 는 두 다리 단독 ES 합의 80% 이하다. H964: 꼬리 점수(FZ0)로 블록이 TimeGAN 보다 낫다. H965(탐색): 확인 구간 실현 분산 이득 비도 0.8 이하다.
- 결론
- H960 만 지지되고 나머지는 미지지다. 블록 ES 630틱은 실현 1,056틱의 0.60배였지만 e 값 0.73 으로 기각되지 않았고, 같은 검정이 실현을 1.5배로 키운 대안을 기각할 확률은 0.10 이었다. TimeGAN 은 과소가 아니라 과대(1,782틱, 1.69배)였다. 판정은 보류다. 지금 쓸 수 있는 재표본 꼬리는 2022 년 같은 국면을 담지 못하고, 생성 모형은 그 빈자리를 믿을 만하게 채우지 못한다.
앞선 실험들은 미국 야간 되돌림 3선 카드 하나의 손실한도만 쟀다. 한도가 넓어져 카드와 10선 되돌림 규칙을 함께 들 수 있게 되자 질문이 바뀌었다. 두 우위를 한 장부에 담으면 한 달 남짓한 기간에 얼마까지 잃을 수 있는가, 그리고 그 숫자를 무엇으로 만들어야 하는가다. 손실한도는 대개 과거 손익을 다시 섞어 만든 시나리오의 꼬리에서 정한다. 과거 자료에 극단 구간이 적으면 꼬리가 얕게 잡히므로, 생성 모형으로 그럴듯한 극단 경로를 보충하자는 제안이 최근 많다.
출발점은 Bondnote 의 노트 «생성자료의 학습손실은 꼬리위험을 보증하지 않는다» 였다. 노트가 정리한 논문은 ETF 12개에 TimeGAN 시나리오를 섞었을 때 변동성과 꼬리 손실이 낮게 잡히고 자산 사이 의존 구조가 비틀어진다고 보고했다. 그래서 우리는 TimeGAN 이 과소추정할 것이라고 예측했다. 비교 기준은 우리가 손실한도에 쓰던 블록 재표본이고, 역사 시뮬레이션, 정규, 일별 iid, 가우스 VAE 를 함께 놓았다. 평가 도구는 ES 예측만으로 백테스트하는 e 검정과, 초과 건수를 실효 표본으로 보는 꼬리 점수 비교 두 가지다.
용어와 기호
- 3선 카드 (x3)
- 미국 밤사이 금리 움직임의 반대로 다음 날 3년 국채선물을 사고파는 기존 규칙의 일별 손익. 사다리 단위 u(1 ~ 3)로 가중한 계약당 순손익이며 단위 틱이다.
- 10선 되돌림 (x10)
- 10년 국채선물의 장중 변화가 직전 250일 67 분위 이상일 때 그 반대로 종가 단일가에 들어가 다음 날 종가에 나오는 규칙의 계약당 순손익. 요인을 빼지 않은 원 변화판이다.
- 결합 장부 (B)
- B_t = x3_t + k·x10_t. 기본 k = 3, 즉 카드 1단위당 10선 3계약이다. 거래가 없는 날은 0 이다.
- 틱
- 국채선물 가격 0.01. 계약당 1만 원이다. 이 리포트의 장부 틱은 위 비율 장부의 계약틱 합이다.
- 20일 손실 (L)
- L_t = −(B_t + … + B_{t+19}). 양수가 손실이다. 창은 거래일 20개다.
- VaR_{0.975}
- 20일 손실 분포의 97.5% 분위. 40창 가운데 한 번 넘는 손실의 크기다.
- ES_{0.975}
- 기대 꼬리 손실. 손실이 VaR 를 넘는 상위 2.5% 창의 평균이다.
- HS
- 역사 시뮬레이션. 학습 구간에서 겹치는 20일 창 손실 1,096개를 그대로 분포로 쓴다.
- 블록 재표본
- 정상 블록 부트스트랩. 두 다리 일별 행을 함께, 평균 길이 20일의 기하 분포 블록으로 이어 뽑는다. 확증 기준 모형이다.
- VAE
- 변분 자기부호기. 20일 × 2열 창을 8차원 잠재 공간으로 줄였다가 되살리는 신경망이며, 가우스 잠재에서 새 창을 뽑는다.
- TimeGAN
- 시계열 생성 적대 신경망. 잠재 공간에서 다음 날 전이를 감독 학습하고 판별기와 맞서며 학습한다. 다섯 개의 GRU 망으로 이뤄진다.
- e 값 (E)
- 귀무가설 아래 기대값이 1 이하인 음 아닌 통계량. E ≥ 20 이면 유의 수준 5% 로 기각하며 p = min(1, 1/E) 다.
- e_z
- ES 만 쓰는 e 통계량의 한 항. e_z(X) = (X − z)₊ ÷ ((1 − 0.975)(r − z)). r 은 예측 ES, z 는 모르는 VaR 의 후보이며 z 에 대한 하한을 쓴다.
- λ (베팅)
- e 과정 Π(1 + λ_t(e_t − 1)) 에서 각 창에 거는 비율. 과거 값만으로 정해야 유효하다.
- FZ0 점수
- VaR 와 ES 를 함께 평가하는 일관 점수. 낮을수록 좋고, 두 예측의 점수 차는 초과가 일어난 창에서만 크게 갈린다.
- 분산 이득 비
- 결합 ES ÷ (3선 단독 ES + 10선 단독 ES). 1 이면 이득이 없고 작을수록 두 다리가 꼬리를 나눠 갖는다.
- 검정력
- 참 ES 가 예측보다 1.5배 클 때 같은 검정이 기각할 확률. 재표본 1,000번으로 쟀다.
- Holm
- 가설 네 개(H961 ~ H964)의 p 값을 작은 것부터 (4, 3, 2, 1)배 해 다중 비교를 보정하는 방법.
자료
데이터셋
입력은 시장 원자료가 아니라 기존 두 규칙의 일별 계약당 순손익 두 열이다. 3선 카드는 거래 원장의 실현일(진입한 거래일)에 단위 가중 손익 u × (g − 비용)을 둔다. 10선 되돌림은 신호일 종가 단일가 진입, 다음 거래일 종가 청산이라 손익을 다음 거래일에 둔다. 두 열을 같은 거래일 달력에 펴고, 거래가 없는 날은 0 으로 채웠다. 비용은 판정에 두 다리 모두 계약당 1틱을 썼고 0.5틱과 2틱을 민감도로 냈다. 10선 되돌림의 원 규칙은 코스피200 선물과 달러선물이 설명하는 몫을 뺀 고유 몫을 쓰지만, 그 잔차는 2024 년 7월부터만 있어 학습 구간이 없다. 그래서 요인을 빼지 않은 원 변화판을 대신 썼다.
| 열 | 원천 | 기간 | 학습 거래 | 확인 거래 | 하루당 거래 | 거래당 표준편차(학습 → 확인) |
|---|---|---|---|---|---|---|
| x3 3선 카드 | 카드 거래 원장, 단위 가중 | 2017-06-21 ~ 2026-09-01 | 361 | 528 | 0.32 → 0.46 | 17.4 → 28.6틱 |
| x10 10선 되돌림 | 10선 장중 변화 되돌림 거래표 | 2017-06-21 ~ 2026-09-01 | 379 | 390 | 0.34 → 0.34 | 38.3 → 49.1틱 |
| B 결합 장부 | x3 + 3·x10 | 학습 1,115일, 확인 1,140일 | 1,115일 | 1,140일 | 20일 창 1,096 / 1,121개 |
점검과 분할
결과 지표를 보기 전에 기간, 빈 날, 중복, 시각 정렬을 점검했다. 거래일 달력은 2012-01-02 부터 2026-11-05 까지 3,644일이고 중복은 없다. 카드 실현일 1,303개는 모두 달력 안에 있다. 10선 장중 변화는 월물 1분봉에서 만든 것이라 2016-12-20 부터만 있고, 직전 250일 분위 문턱이 서려면 120일이 쌓여야 해서 첫 거래가 2017-06-20 이다. 아이디어가 적은 2012 년부터의 학습은 이 때문에 할 수 없었다. 학습은 2017-06-21 ~ 2021-12-30 1,115일, 확인은 2022-01-03 ~ 2026-09-01 1,140일이며 모든 생성기는 학습 구간만으로 한 번 적합해 확인 구간 전체에 같은 예측을 냈다. 두 다리가 같은 날 함께 거래한 날은 314일이다.
방법
장부와 20일 손실
장부 비율 k = 3 은 카드의 최대 사다리 3단위와 10선 3계약을 맞춘 것이다. 규모는 선형이라 비율만 의미가 있고, 장부 틱에 계약 배수를 곱하면 실제 규모의 손실이 된다. 손실한도를 한 달 남짓 기간으로 보는 관행에 맞춰 창은 거래일 20개로 정했고, 10일과 40일을 격자로 함께 냈다. 확인 구간의 겹치는 20일 창은 1,121개이고, 이 가운데 상위 2.5%(28창)의 평균이 실현 ES 다. 겹치는 창은 서로 독립이 아니라서 검정에는 겹치지 않는 창만 쓴다. 시작 위치를 0 ~ 19일 밀어 오프셋 20개의 겹치지 않는 창 열(각 56개 안팎)을 만들고, 오프셋마다 e 과정을 계산해 평균했다.
시나리오 생성기 여섯
역사 시뮬레이션은 학습 구간의 겹치는 20일 창 1,096개를 그대로 쓴다. 블록 재표본은 두 다리 일별 행을 한 묶음으로 평균 20일 블록씩 이어 뽑은 20일(또는 40일) 경로 200,000개다. 일별 iid 는 블록 길이 1 인 같은 방법이고, 정규는 두 다리의 평균과 공분산으로 일별 다변량 정규를 뽑아 더한다. 가우스 VAE 는 다리별 학습 표준편차로 나눈 20일 × 2열 창 1,096개를 입력으로, 64-32 인코더와 32-64 디코더, 8차원 잠재 공간으로 4,000회 학습했고, seed 두 개에서 60,000 경로씩 뽑았다. TimeGAN 은 원 논문의 구조를 따라 다리별 최소-최대 척도로 [0, 1] 에 둔 20일 창을 GRU 3층 은닉 24 의 다섯 망으로 학습했다. seed 264, 265, 266 에서 60,000 경로씩 뽑아 합친 것이 확증 판이다. GPU 를 쓰지 않고 CPU 에서 돌리려고 반복을 임베딩 1,500, 감독 1,500, 결합 1,000 회로 줄였고 이 수정은 결과를 보기 전에 등록했다.
검정과 판정
ES 백테스트는 VaR 예측 없이 ES 만 쓰는 iid 판이다. 참 VaR z* 에서 e_z* 의 기대값은 참 ES 가 예측 r 이하이면 1 이하다. z* 를 모르므로 z 격자(r − 6σ ~ r, 600점, σ 는 학습 20일 손실 표준편차) 위에서 e 과정의 하한을 취했다. 하한은 참 z* 의 값보다 작으므로 여전히 유효하다. 베팅 비율 λ 는 과거 e 값으로 정하는 GREE 방식(첫 값 0.1, 위 0.5)으로 사전등록했다. 검정력은 확인 구간 일별 행을 월 단위로 재표본해 1.5배로 키운 자료에서 1,000번 기각 비율로 쟀다. 2022 년 상관은 그해 거래일 246일의 일별 피어슨 상관이고, 모형 상관은 생성 경로 일별 값의 상관이다. 분산 이득 비의 불확실성은 학습 구간을 월 단위로 300번 재표본해 매번 블록 생성기를 다시 돌려 쟀다. 판정 규칙은 H960 지지와 검정력 0.5 이상과 H963 지지가 모두 만족되면 채택, H960 지지이나 둘 중 하나가 빠지면 보류, H960 이 기각되면 폐기였다. 신호 규칙을 새로 고르지 않았으므로 선택 편향 귀무는 필요하지 않다.
모델
학습한 모델은 VAE 와 TimeGAN 둘이다. TimeGAN 은 임베더 E 가 실제 창을 잠재 열로 옮기고 복원기 R 이 되살리는 자기부호기, 잡음에서 잠재 열을 만드는 생성기 G, 잠재 공간에서 다음 날을 예측하는 감독기 S, 실제 잠재와 생성 잠재를 가르는 판별기 D 로 이뤄진다. 학습은 세 단계다. 먼저 E 와 R 을 복원 손실로, 다음에 S 를 다음 날 잠재 예측으로, 마지막에 다섯 망을 적대 손실과 감독 손실과 평균, 분산 맞춤 손실을 함께 써 학습한다. 우리가 TimeGAN 을 넣은 이유는 블록 재표본이 학습 구간에 없던 날의 조합을 만들지 못하는 데 비해 생성 모형은 원리상 새 경로를 만들 수 있기 때문이다. 아래 구조도는 저장된 seed 264 가중치를 다시 읽어 파라미터 수와 학습 이력을 적었고, 같은 가중치로 새 잡음 경로를 뽑아 저장된 경로의 ES 를 5% 안에서 재현하는지 확인한 뒤 그렸다.
| seed | 임베딩 복원 MSE | 감독 MSE | 판별 손실 | 생성 적대 손실 | 20일 ES | VaR | 일별 다리 상관 | 학습 시간 |
|---|---|---|---|---|---|---|---|---|
| 264 | 0.00055 | 0.0013 | 1.41 | 3.59 | 575 | 512 | 0.63 | 53분 |
| 265 | 0.00054 | 0.0017 | 1.87 | 1.09 | 1,844 | 1,806 | 0.96 | 54분 |
| 266 | 0.00064 | 0.0018 | 1.88 | 1.43 | 784 | 773 | −0.71 | 51분 |
| 합본 | 1,782 | 1,702 | 0.23 |
표 2 에서 세 seed 의 복원 손실과 감독 손실은 거의 같다. 판별 손실은 seed 264 가 1.41 로 가장 낮아 판별기가 조금 더 이기고 있었다. 그런데 20일 ES 는 575틱에서 1,844틱까지 세 배 넘게 차이 나고, 두 다리 일별 상관은 +0.96 에서 −0.71 까지 부호마저 갈렸다. 학습 손실만 보고 어느 seed 의 꼬리가 맞는지 고를 방법이 없다. seed 265 는 VaR 1,806틱과 ES 1,844틱이 거의 같아, 생성 경로 대부분이 비슷한 손실 경로로 몰린 모드 붕괴 모양이다.
결과
확증: ES 백테스트
| 모형 | VaR | ES | 3선 단독 ES | 10선 단독 ES | e 값 | p | VaR 초과 비율 | 예측 ÷ 실현 |
|---|---|---|---|---|---|---|---|---|
| HS | 480 | 619 | 118 | 615 | 0.74 | 1.00 | 3.4% | 0.59 |
| 블록(확증 기준) | 497 | 630 | 134 | 631 | 0.73 | 1.00 | 3.1% | 0.60 |
| 일별 iid | 569 | 712 | 171 | 702 | 0.67 | 1.00 | 2.4% | 0.67 |
| 정규 | 555 | 674 | 97 | 672 | 0.69 | 1.00 | 2.5% | 0.64 |
| VAE | 520 | 626 | 73 | 629 | 0.73 | 1.00 | 2.7% | 0.59 |
| TimeGAN | 1,702 | 1,782 | 170 | 1,666 | 0.56 | 1.00 | 0.2% | 1.69 |
| 확인 실현 | 555 | 1,056 | 83 | 1,126 |
표 3 은 학습 구간에서 한 번 적합한 각 생성기의 예측을 확인 구간 실현과 나란히 놓은 것이다. 블록은 20일 손실이 40창에 한 번 넘을 크기(VaR)를 497틱, 그 너머 평균(ES)을 630틱으로 봤다. 실현은 VaR 555틱, ES 1,056틱이었다. VaR 초과 비율은 3.1% 로 명목 2.5% 보다 조금 높을 뿐이지만, 넘은 창들의 손실이 예측보다 훨씬 깊었다. 역사 시뮬레이션(619틱), 정규(674틱), VAE(626틱)도 실현의 0.59 ~ 0.64배로 비슷하게 낮다. 생성기 사이의 차이보다 학습 구간과 확인 구간의 차이가 훨씬 크다. 학습 구간에서 가장 나쁜 20일 창은 881틱이었는데, 확인 구간에는 1,802틱 창이 있었다.
그런데도 e 값은 모든 모형에서 1 아래(0.56 ~ 0.74)였다. 블록 ES 가 실현의 0.6배인데도 기각은커녕 증거가 쌓이지 않은 것이다. 이유는 둘이다. 첫째, 오프셋마다 겹치지 않는 창이 56개 남짓이고 97.5% 에서 기대 초과는 1.4개뿐이다. 둘째, 사전등록한 GREE 베팅은 첫 창이 초과가 아니면 λ 가 0 으로 붙어 버려, 나중에 큰 초과가 와도 e 과정이 오르지 않는다. 같은 절차로 잰 검정력은 실현을 1.5배로 키운 대안에서 0.099, 학습 세계를 1.5배로 키운 대안에서 0.076 이었다. TimeGAN 은 과대 예측이라 과소를 찾는 한쪽 검정으로는 처음부터 기각될 수 없고, H961 의 예측(과소추정으로 기각)은 부호부터 틀렸다.
확증: 상관, 분산 이득, 꼬리 비교
H962 는 2022 년 두 다리 일별 손익 상관을 누가 더 맞히는지 물었다. 2022 년 실현 상관은 0.161 로 학습 구간(0.016)보다 높았다. 블록은 학습 상관을 그대로 옮기므로 0.015, 오차 0.146 이다. TimeGAN 합본은 0.232 로 오차 0.071 이라 오히려 더 가까웠고, 2022 년을 월 단위로 2,000번 재표본했을 때 TimeGAN 오차가 블록보다 큰 비율은 0.385(p 0.62)였다. 다만 이 «더 가까움» 은 seed 셋의 상관 +0.63, +0.96, −0.71 을 섞은 평균이다. seed 하나씩 보면 오차는 0.47, 0.79, 0.87 로 모두 블록보다 크다. 사전등록대로 합본으로 판정해 미지지로 적지만, 어느 seed 도 의존 구조를 맞히지 못했다고 읽는 편이 정확하다.
H963 의 분산 이득 비는 블록에서 630 ÷ (134 + 631) = 0.824 였다. 학습 구간을 월 단위로 300번 재표본해 다시 잰 비의 90% 구간은 0.727 ~ 0.955 이고, 0.8 을 넘은 비율이 0.71 이라 지지되지 않았다. 확인 구간 실현 비는 0.874 다. H964 의 꼬리 점수 비교에서 TimeGAN 과 블록의 FZ0 점수 차는 평균 +0.286(TimeGAN 이 나쁨)이지만 부트스트랩 t 한쪽 p 는 0.36 이다. 두 예측 가운데 하나라도 VaR 를 넘은 창, 곧 실효 표본은 1,121창 가운데 35창뿐이었다. Holm 보정 뒤 H961 ~ H964 의 p 는 모두 1.00 이다.
강건성 격자와 비용
사전등록한 격자는 ES 수준 세 가지와 창 길이 세 가지다. 블록의 예측 ÷ 실현 비는 10일 창에서 0.57 ~ 0.78, 20일 창에서 0.52 ~ 0.73, 40일 창에서 0.83 ~ 1.01 이다. 40일 창에서 거의 맞는 것은 2022 년 사건이 40일 창 여러 개에 고르게 퍼져 실현 꼬리가 덜 뾰족해지기 때문이고, 40일 창이 더 나은 모형이라는 뜻은 아니다. 수준이 높을수록(99%) 과소가 심해, 꼬리의 가장 깊은 부분일수록 학습 자료에 없다는 것을 보여 준다. 어느 칸에서도 e 값은 1.6 을 넘지 않았다. TimeGAN 은 99% 10일 칸(0.94)을 빼고 모든 칸에서 1.3 ~ 4.2배 과대다.
| 바꾼 것 | 값 | 블록 ES | 확인 실현 ES | 예측 ÷ 실현 | e 값 | 분산 이득 비(블록 / 실현) |
|---|---|---|---|---|---|---|
| 블록 길이 | 1 / 5 / 10 / 20 / 40일 | 712 / 665 / 642 / 633 / 623 | 1,056 | 0.67 ~ 0.59 | 0.67 ~ 0.73 | |
| 비용 | 0.5틱 | 608 | 1,033 | 0.59 | 0.73 | |
| 비용 | 2틱 | 667 | 1,102 | 0.61 | 0.73 | |
| 장부 비율 | k = 1 | 225 | 344 | 0.65 | 0.71 | 0.65 / 0.75 |
| 장부 비율 | 위험 균형 k = 0.44 | 137 | 162 | 0.85 | 0.64 | 0.60 / 0.65 |
| 장부 비율 | k = 3 (기본) | 630 | 1,056 | 0.60 | 0.73 | 0.82 / 0.87 |
블록 길이를 1일에서 40일로 늘리면 ES 가 712틱에서 623틱으로 오히려 조금 줄었다. 두 다리 손익의 자기상관이 작아 블록이 보존할 순서 정보가 거의 없기 때문이다. 비용을 0.5틱에서 2틱으로 바꿔도 예측과 실현이 함께 움직여 비는 0.59 ~ 0.61 에 머문다. 비용은 거래당 평균을 옮길 뿐 꼬리의 깊이를 바꾸지 않는다. 장부 비율은 분산 이득을 크게 바꾼다. 기본 k = 3 에서는 10선 3계약의 변동이 카드보다 훨씬 커서 10선 단독 ES(631틱)가 결합 ES(630틱)와 같아질 만큼 꼬리를 독점한다. 두 다리의 학습 표준편차를 맞춘 k = 0.44 에서는 분산 이득 비가 블록 0.60, 실현 0.65 로 내려가 H963 의 문턱을 넘는다. 이것은 결과를 본 뒤의 비교라 탐색이다.
실패 진단과 탐색 변형
왜 모든 재표본 계열이 낮았는지 나눠 봤다. 확인 구간에서 겹치지 않게 고른 최악 20일 창 8개의 손실 합은 사실상 전부(100%) 10선 다리 몫이고, 그 창들에서 카드 손익은 −37 ~ +69틱이었다. 가장 나쁜 창은 2022-08-12 ~ 09-13 의 1,802틱(10선 1,773틱)이다. 2022 년 두 다리 일별 표준편차는 3선 32.8틱, 10선 42.8틱으로 학습 구간 어느 해(3선 4.8 ~ 16.8, 10선 13.7 ~ 26.9)보다 컸다. 연 단위 확장 창으로 다시 적합하면 2022 년에는 블록 VaR 초과가 8.1% 였고, 2022 를 학습에 넣은 2023 ~ 2026 에는 ES 가 838 ~ 976틱으로 커져 초과가 1.2%, 0% 로 오히려 과대가 됐다. 학습 구간 안에서도 2017 ~ 2019 로 적합한 VaR 를 2020 ~ 2021 에 대면 초과가 10.1% 였다. 짧은 이력에서 적합한 정적 꼬리는 다음 국면에서 자주 넘어진다.
살릴 만한 변형 둘을 탐색으로 돌렸다. 첫째는 변동성 조건부 블록이다. 다리별 일별 손익을 직전 60일 실현 변동성으로 나눠 재표본하고 예측 시점의 변동성으로 다시 곱했더니, 평균 ES 1,079틱, VaR 초과 1.6% 로 꼬리를 덮었지만 실현 꼬리의 1.22배로 넘쳤다. 둘째는 베팅 규칙이다. 고정 λ 다섯 개(0.01 ~ 0.2)의 e 과정을 평균한 혼합 베팅으로 바꾸면 학습 세계에서 잘못 기각하는 비율 0.00 을 지키면서 1.5배 대안 검정력이 0.54 ~ 0.59 로 올라간다. 그래도 블록의 최종 e 값은 0.96(ES 만), 1.25(VaR 를 알려 준 판)이고, 언제 멈춰도 유효한 달력 시간 경로의 최댓값도 3.7, 7.4(둘 다 2022-09-26)로 20 에 못 미쳤다. 2022 년 사건 하나만으로는 블록을 기각할 증거가 되지 않는다.
| 변형 | ES 또는 VaR | 초과 비율 | 실현 대비 | e 값(최종 / 경로 최대) |
|---|---|---|---|---|
| 정적 블록, ES 만 | ES 630 | 3.1% | 0.60 | 0.96 / 3.7 |
| 정적 블록, VaR 를 알려 줌 | VaR 497 | 3.1% | 0.60 | 1.25 / 7.4 |
| 변동성 조건부 블록 | 평균 ES 1,079 | 1.6% | 1.22 | 0.29 |
| 연 단위 확장 창 블록, 2022 | VaR 491, ES 627 | 8.1% | 0.40 (그해 실현 1,580) | |
| 연 단위 확장 창 블록, 2023 ~ 2026 | ES 838 ~ 976 | 0 ~ 1.2% | 1.7 ~ 4.1 | |
| 월 단위 확장 창 블록 | ES 630 → 819 | 2.3% | ||
| 2017 ~ 2019 적합을 2020 ~ 2021 에 | VaR 365, ES 474 | 10.1% | 0.91 |
TimeGAN 이 출처의 경고와 반대로 과대가 된 과정도 진단했다. 생성한 일별 손익의 첨도는 3선 −0.8, 10선 −0.9 로 학습(209, 11.7)보다 훨씬 얇고, 범위는 ±48틱 안이며(학습 −216 ~ +159틱), 거래가 없는 0 인 날을 하나도 만들지 못했다(학습 66 ~ 69%). 하루 꼬리만 보면 노트대로 과소다. 그러나 10선 손익 절댓값의 1일 자기상관이 0.48(학습 0.20)로 커지고, 10선 평균이 −1.64틱(학습 +0.55틱)으로 내려가, 20일을 더하면 같은 방향의 손실이 쌓인다. 최소-최대 척도와 시그모이드 출력이 극단값을 학습 범위 안으로 눌렀고, 날 사이 의존의 왜곡이 그 효과를 뒤집어 20일 꼬리를 부풀렸다.
탐색: 긴 이력 대리 학습
앞의 진단은 학습 구간에 2022 년 같은 국면이 없다는 데로 모였다. 그렇다면 생성기를 바꾸는 대신 학습 이력을 늘리면 맞힐까. 10선 장중 변화는 2016-12 부터만 있으므로, 결과를 본 뒤 대리 10선 다리를 새로 만들었다(탐색). 대리 다리는 일봉 종가 대비 종가 변화가 직전 250일 절댓값의 67 분위 이상인 날 그 반대로 종가에 들어가 다음 날 종가에 나오는 규칙이다. 장중 변화 대신 하루 변화를 쓴다는 점만 다르다. 겹치는 2017-06 ~ 2021 에서 대리 다리와 실제 다리의 일별 손익 상관은 0.62, 실제 다리가 거래한 날의 58% 에 대리 다리도 거래했고, 일별 표준편차는 24.4틱 대 22.4틱으로 비슷하다. 연 거래는 82회다. 이것으로 학습을 카드 원장이 시작하는 2013-01 부터 2021 년까지 2,215일로 늘렸다.
| 학습 | 모형 | VaR | ES | 예측 ÷ 실현 | VaR 초과 비율 | e 값(ES 만 / VaR 알려 줌) | 경로 최대 |
|---|---|---|---|---|---|---|---|
| 대리 다리, 2017-06 ~ 2021 | 블록 | 527 | 636 | 0.60 | |||
| 대리 다리, 2013 ~ 2021 | 블록 | 616 | 948 | 0.90 | 2.2% | 0.39 / 0.44 | 2.2 / 2.9 |
| 대리 다리, 2013 ~ 2021 | HS | 643 | 1,011 | 0.96 | 2.2% | 0.35 / 0.40 | 2.0 / 2.6 |
| 대리 다리, 2013 ~ 2021 | 정규 | 621 | 744 | 0.70 | 2.2% | 0.61 / 0.89 | 2.9 / 6.7 |
결과는 분명했다. 같은 대리 다리로 2017-06 ~ 2021 만 쓰면 블록 ES 가 636틱(실현의 0.60배)으로 본 실험과 같지만, 학습을 2013 년부터로 늘리면 948틱(0.90배), 역사 시뮬레이션은 1,011틱(0.96배)이 되고 VaR 초과 비율은 2.2% 로 명목 2.5% 에 맞는다. 차이를 만든 것은 2013 년(최악 20일 1,591틱)과 2015 년(1,495틱)의 대리 장부 손실이다. 2013 년 테이퍼 발작과 2015 년 금리 급변이 2022 년과 비슷한 크기의 10선 되돌림 손실을 이미 냈던 것이다. 꼬리를 맞히는 데 필요한 것은 더 영리한 생성기가 아니라 더 긴 이력이었다. 정규는 같은 이력에서도 744틱으로 낮아, 두꺼운 꼬리를 정규로 요약하면 이득이 사라진다. 다만 대리 다리로 만든 확인 구간 장부의 실현 ES 는 723틱으로 실제 장부(1,056틱)보다 작다. 대리 다리는 2022 년에 실제 다리만큼 잃지 않았으므로, 이 결과는 «대리 이력의 꼬리 크기가 실제 다리의 2022 년 꼬리와 비슷했다» 는 뜻이지 같은 손실을 미리 봤다는 뜻은 아니다. 결과를 본 뒤 만든 비교라 판정에 쓰지 않는다.
해석
이 실험이 말하는 것은 세 가지다. 첫째, 확인 구간의 꼬리는 2022 년 8 ~ 9월 10선 되돌림 손실이라는 한 사건이 만든다. 학습 구간 2017 ~ 2021 에는 그만한 금리 변동이 없어서, 학습 자료를 다시 섞는 어떤 방법도 그것을 만들지 못했다. 생성기를 블록에서 VAE 로 바꿔도 결과는 0.6배 근처에 머물렀다. 생성 모형을 바꾸는 것으로는 학습 자료에 없는 국면을 만들 수 없다. 꼬리를 키우려면 자료(더 긴 이력이나 외부 충격)나 조건(지금의 변동성)을 바꿔야 한다. 실제로 대리 다리로 학습을 2013 년까지 늘리자 블록 ES 가 실현의 0.90배, 역사 시뮬레이션이 0.96배로 올라왔다(탐색).
둘째, 20일 창 ES 백테스트는 4.7년 확인 구간에서 거의 힘이 없다. 예측이 실현의 0.6배인데도 기각되지 않았고, 사전등록한 베팅 규칙의 검정력은 0.10 이었다. «기각되지 않았다» 를 «맞았다» 로 읽으면 손실한도를 잘못 믿게 된다. 이 점은 출처의 비교 논문이 말한 것과 같다. 꼬리 예측의 비교에서 실효 표본은 관측 수가 아니라 초과 수이고, 이 실험에서 그것은 35창이었다.
셋째, TimeGAN 은 출처가 경고한 방향(과소)과 반대로 틀렸지만, 경고의 핵심인 «학습 손실이 꼬리를 보증하지 않는다» 는 그대로 확인됐다. 복원과 감독 손실이 같은 세 seed 가 575 ~ 1,844틱의 꼬리와 −0.71 ~ +0.96 의 상관을 냈다. 위험 한도에 쓰려면 seed 를 여럿 돌려 꼬리 통계의 퍼짐을 함께 내야 하고, 이 정도 퍼짐이면 쓸 수 없다. 분산 이득은 실재하지만 비율에 달려 있다. 두 다리는 꼬리에서 함께 무너지지 않았고, 위험을 맞춘 비율이라면 결합 꼬리가 단독 합의 60 ~ 65% 로 줄었다.
한계
확인 구간의 꼬리가 사실상 2022 년 한 사건이라 실현 ES 1,056틱 자체의 오차가 크다. 2024 년 이후만 보면 실현 ES 가 522틱으로 반 토막이 나고 블록(630틱)이 오히려 넉넉하다. 판정이 어느 구간을 확인으로 두느냐에 크게 달려 있다는 뜻이다. 10선 다리는 실제로 들 규칙인 고유 몫 되돌림이 아니라 요인을 빼지 않은 원 변화 되돌림이다. 두 규칙은 확인 구간 손익이 비슷했지만 꼬리까지 같다는 보장은 없다. 10선의 실제 스프레드가 1틱보다 넓을 수 있으나, 비용 0.5 ~ 2틱에서 ES 는 608 ~ 667틱으로 결론이 바뀌지 않았다. 카드 원장이 2026-09-01 에서 끝나 그 뒤 두 달은 쓰지 않았다.
TimeGAN 은 GPU 없이 CPU 에서 반복을 줄여 학습했다(임베딩 1,500, 감독 1,500, 결합 1,000 회). 원 논문 규모로 오래 학습하면 결과가 다를 수 있다. 다만 학습 손실과 꼬리의 어긋남은 반복 수와 상관없이 seed 사이에서 이미 드러났다. ES 만 쓰는 e 백테스트는 출처의 iid 판이며, 20일 창 손실을 서로 독립으로 본 가정과 사전등록한 GREE 베팅의 낮은 검정력이 판정을 사실상 정했다. 혼합 베팅은 결과를 본 뒤 고른 탐색이다. 학습 구간은 4.5년으로 짧고, 사전등록한 충격 구간(2022-09-26 ~ 11-30)이 가장 나쁜 창(2022-08 ~ 09)을 비켜 갔다. 충격 구간 정의는 결과를 본 뒤에도 바꾸지 않았다. 신호 규칙은 고르지 않았지만, 장부 비율 k = 3 은 한 가지로 정한 값이라 다른 비율에서는 분산 이득 판정이 바뀐다. 긴 이력 대리 학습은 결과를 본 뒤 만든 비교이고, 대리 다리는 실제 다리와 일별 상관이 0.62 에 그친다. 진입 1분, 5분 지연과 지정가 비교는 하지 않았다. 입력이 이미 확정된 두 규칙의 거래 원장이라 실행 시점을 바꾸려면 원 규칙을 다시 돌려야 하고, 이 실험의 질문(시나리오 꼬리의 정확도)은 실행 세부와 독립이기 때문이다. 기존 전략과의 독립성도 따로 재지 않았다. 두 다리가 곧 기존 두 전략이고, 둘 사이의 상관(학습 0.016, 2022 년 0.161)과 같은 날 거래(314일)를 본문에 적었다.
다음에 해 볼 것
첫째, 긴 이력 대리 학습의 사전등록 재검정이다. 이번 탐색에서 대리 10선 다리로 학습을 2013 년부터로 늘리면 꼬리가 실현의 0.9배까지 올라왔다. 다음에는 대리 다리 정의와 학습 시작(2013-01), 혼합 베팅 e 백테스트를 먼저 등록하고, 확인 구간을 2022 ~ 와 2024 ~ 로 나눠 같은 비교를 확증으로 다시 한다. 실제 다리와 대리 다리의 꼬리 차(2022 년 실현 1,056틱 대 723틱)를 줄이도록 장중 변화 대리(첫 체결 대신 09:00 가격)도 함께 본다. 둘째, 스트레스 혼합이다. 블록 재표본에 학습 구간 밖 금리 충격(미국 10년 금리 일변화 상위 1% 날을 크기 조정해 심은 경로)을 확률 p 로 섞고, p 를 학습 구간 교차 검증으로 정해 확인 구간 초과율과 FZ0 점수로 블록 단독과 비교한다. 두 설계 모두 장부 비율을 위험 균형으로도 함께 낸다.
산출물
코드는 code/ 에 있다. s1_data.py 가 두 다리 일별 손익을 달력에 펴고, gen.py 가 여섯 생성기를, s2_timegan.py 가 seed 하나의 TimeGAN 학습과 생성을, s3_main.py 가 확증 검정과 격자를, s4_depth.py, s5_betting.py, s6_long_history.py 가 탐색을, render_figures.py 가 이 페이지의 그림과 구조도를 만든다. 정본 런은 results/20261110T043730_main/ 이고 metrics.json, es_table.csv, grid.csv, block_len.csv, cost.csv, k_grid.csv, refit.csv, depth.json, betting.json, longhist.json 이 들어 있다. TimeGAN 가중치와 생성 경로는 용량 때문에 저장소 밖 캐시에 두었다. 재현 명령은 다음 순서다.
for s in 264 265 266; do AT_TORCH_THREADS=3 uv run python experiments/0264_combined_book_generative_es/code/s2_timegan.py $s; done
uv run python experiments/0264_combined_book_generative_es/code/s3_main.py
uv run python experiments/0264_combined_book_generative_es/code/s4_depth.py 20261110T043730_main
uv run python experiments/0264_combined_book_generative_es/code/s5_betting.py 20261110T043730_main
uv run python experiments/0264_combined_book_generative_es/code/s6_long_history.py 20261110T043730_main
uv run python experiments/0264_combined_book_generative_es/code/render_figures.py 20261110T043730_main
Appendix
A. 데이터셋 실물
아래는 결합 장부 입력의 실제 행이다. 확인 구간 최악 창 안의 일주일(2022-08-29 ~ 09-06)을 그대로 옮겼다. x3 와 x10 은 비용 1틱 뒤 계약당 틱, n3 와 n10 은 그날 거래 여부다. 거래가 없는 날은 손익이 0 이다. 그 아래는 두 원천 표의 실제 행이다.
| 일자 | x3 | x10 | n3 | n10 | B |
|---|---|---|---|---|---|
| 2022-08-29 | 0.0 | −82.0 | 0 | 1 | −246.0 |
| 2022-08-30 | 2.0 | 0.0 | 1 | 0 | 2.0 |
| 2022-08-31 | 0.0 | 0.0 | 0 | 0 | 0.0 |
| 2022-09-01 | −26.0 | −87.0 | 1 | 1 | −287.0 |
| 2022-09-02 | 54.0 | 0.0 | 1 | 0 | 54.0 |
| 2022-09-05 | 0.0 | −66.0 | 0 | 1 | −198.0 |
| 2022-09-06 | 0.0 | 44.0 | 0 | 1 | 132.0 |
카드 원장 (일자 = 신호일, nxt = 실현일, u = 사다리 단위, g = 계약당 총손익, net1 = u × (g − 1))
일자 nxt u g net1
2023-09-21 2023-09-22 2 26.0 50.0
2023-09-25 2023-09-26 2 3.0 4.0
2023-10-04 2023-10-05 1 8.0 7.0
10선 되돌림 거래표 (일자 = 신호일 종가 진입, gross = 다음 거래일 종가까지 계약당 총손익)
일자 gross
2022-03-07 -12.0
2022-03-11 43.0
2022-03-15 26.0
B. 모델 입출력 실물
TimeGAN 에 들어간 입력은 학습 구간 첫 20일 창부터 시작하는 [0, 1] 척도의 2열 창이다. 척도는 다리별 학습 최소와 최대(3선 −216 ~ 74틱, 10선 −141 ~ 159틱)로 정했다. 출력은 같은 척도의 20일 × 2열 경로이며, 척도를 되돌려 틱으로 바꾼 뒤 장부 손실을 계산한다. 아래는 학습 첫 창의 앞 다섯 날과 seed 264 가 만든 첫 경로의 앞 여섯 날을 그대로 옮긴 것이다.
입력 창 (학습 2017-06-21 부터, 원 값 → 척도 값)
2017-06-21 x3 5.0 → 0.762 x10 -7.0 → 0.447
2017-06-22 x3 0.0 → 0.745 x10 0.0 → 0.470
2017-06-23 x3 0.0 → 0.745 x10 0.0 → 0.470
2017-06-26 x3 0.0 → 0.745 x10 0.0 → 0.470
2017-06-27 x3 0.0 → 0.745 x10 0.0 → 0.470
… (중략, 창 길이 20일)
생성 경로 0 (seed 264, 척도 되돌린 틱)
1일 x3 10.22 x10 -34.21
2일 x3 2.45 x10 -13.80
3일 x3 10.95 x10 12.64
4일 x3 0.89 x10 18.59
5일 x3 6.44 x10 10.80
6일 x3 -4.11 x10 -31.56
… (중략, 20일 장부 손실 L = 115.3틱)
입력에는 거래가 없는 날이 0(척도 0.745, 0.470)으로 길게 이어지지만, 생성 경로에는 정확한 0 이 한 번도 나오지 않는다. 생성 경로의 하루 값은 ±48틱 안에 머문다. 이 두 가지가 결과 절에서 본 얇은 하루 꼬리와 강한 날 사이 의존의 실물이다.
C. 실험 설정
| 항목 | 값 |
|---|---|
| 분할 | 학습 2017-06-21 ~ 2021-12-30(1,115일), 확인 2022-01-03 ~ 2026-09-01(1,140일) |
| 장부 | B = x3 + 3·x10, 비용 계약당 1틱(민감도 0.5, 2틱) |
| 손실과 수준 | 20거래일 합의 음수, ES 97.5%(격자 95, 97.5, 99% × 10, 20, 40일) |
| 블록 | 정상 블록 부트스트랩, 평균 20일, 순환, 경로 200,000(격자 1, 5, 10, 20, 40일) |
| VAE | 입력 40(20일 × 2, 다리별 표준화), 인코더 64-32, 잠재 8, 디코더 32-64, 학습 출력 분산, Adam 1e-3, 배치 128, 4,000회, seed 264와 265, 경로 60,000씩 |
| TimeGAN | GRU 3층 은닉 24(감독기 2층), 잡음 U(0, 1), 최소-최대 척도, Adam 1e-3, 배치 128, 반복 1,500 / 1,500 / 1,000, 생성기 반복당 2회, 판별 손실 0.15 초과 때만 판별기 갱신, seed 264 ~ 266, 경로 60,000씩, CPU 스레드 3 |
| e 백테스트 | iid 판, z 격자 r − 6σ ~ r 600점, GREE λ(첫 값 0.1, 0 ~ 0.5), 오프셋 20개 평균, 기각 E ≥ 20 |
| 검정력 | 확인 구간 월 재표본 × 1.5, 1,000회 |
| H962, H963, H964 | 2022 월 재표본 2,000회, 학습 월 재표본 300회(경로 20,000), 창 시작 월 블록 부트스트랩 t 2,000회 |
| 다중 비교 | Holm, H961 ~ H964 |
| 런 시간 | TimeGAN seed 당 51 ~ 54분(CPU), 확증 런 121초, 2026-11-10 04:37 KST |