세 줄 요약
- 봉인 구간 1,175일에서 99% VaR 초과의 기대는 계열당 11.75회인데 FHS 는 25, 19, 26, 13회, 정규화 흐름은 20, 23, 21, 7회였다. 네 계열을 모두 Kupiec 검정으로 통과한 모형이 없었다.
- 흐름은 상대 점수(FZ0, energy score)에서 이동 경험분포와 FHS 를 이겼지만, 미국 10년 밤사이 변화를 입력에서 빼면 FHS 와 같아졌다. 우위는 생성 모형이 아니라 개장 전에 아는 미국 금리 정보에서 왔다.
- 규모 상한이 없는 흐름도 이 크기에서는 발산하지 않았다. 꼬리를 맞춘 모형이 없어 한도 안은 내지 않고 폐기한다. 참고값은 실현 분포에서 읽는다.
가설과 결론
질문. 3년, 10년 국채선물의 하루 손익 분포를 생성 모형으로 만들면, 금리 급등기를 포함한 2022년 이후 구간에서 99% VaR 와 ES 를 맞출 수 있는가. 맞춘다면 그 모형으로 일 손실 한도를 정할 수 있다.
가설(결과 전에 커밋한 계획). H402 FHS 가 네 계열 모두 Kupiec 통과. H403 정규화 흐름(FLOW)이 네 계열 모두 통과. H404 이동 정규분포(N)는 적어도 한 계열에서 기각. H405 FLOW 의 FZ0 점수가 이동 경험분포(BB)보다 낮다. H406 규모 상한이 없는 흐름은 극단 좌표가 발산한다. H407 FLOW 의 energy score 가 FHS 보다 낮다.
결론. H402, H403 미지지, H404 지지, H405 지지(p 0.0002), H406 미지지, H407 지지(p 0.0002). 한도를 정할 모형이 없으므로 판정은 폐기다. 상대 점수의 우위는 탐색에서 미국 금리 입력 몫으로 밝혀졌다.
용어와 기호
- 틱
- 국채선물 가격 0.01. 계약당 1만원이다.
- r
- 하루 손익, 같은 월물의 (정산가 − 기준가) × 100 틱. 기준가는 전날 정산가다.
- 계열
- 평가하는 포지션 넷: 3선 매수, 3선 매도, 10선 매수, 10선 매도 각 1계약. 손실 L = −손익.
- VaR99
- 그날 모형 분포에서 손실의 99% 분위수. 100일에 하루 넘을 것으로 보는 손실.
- ES99
- VaR99 를 넘는 손실의 평균(기대 꼬리 손실).
- 초과
- 실현 손실이 그날 VaR99 보다 큰 날. 1,175일이면 기대 11.75회.
- Kupiec 검정
- 초과 비율이 1% 와 같은지 보는 우도비 검정. p > 0.05 면 통과. 이 표본에서 통과 범위는 6~19회.
- Christoffersen 검정
- 초과가 연달아 몰려 나오는지(독립성) 보는 우도비 검정.
- Acerbi-Szekely Z2
- ES 백테스트. Z2 = 1 − Σ L·1{초과} / (T × 0.01 × ES). 음수일수록 ES 과소. p 는 모형 자신의 분포에서 손실을 다시 뽑아 만든 귀무로 구한다.
- FZ0
- VaR 와 ES 를 함께 매기는 Fissler-Ziegel 계열 손실 함수(Patton, Ziegel, Chen). 낮을수록 좋다. 네 계열을 더해 쓴다.
- energy score
- 3선, 10선 결합 분포 전체를 매기는 점수. E‖X − y‖ − ½E‖X − X′‖, 학습 표준편차로 나눈 좌표. 낮을수록 좋다.
- N
- 직전 250거래일 공분산의 이변량 정규분포, 평균 0.
- FHS
- Filtered Historical Simulation. GARCH(1,1) 로 오늘 변동성 σ 를 예측하고 학습 구간 표준화 잔차 쌍에 곱한다.
- BB
- 직전 500거래일 손익 쌍의 경험분포. 지평이 하루라 블록 부트스트랩과 같다.
- FLOW
- 조건부 정규화 흐름(RealNVP). 단순한 기초 분포를 학습된 가역 변환으로 손익 분포로 바꾼다. seed 5개 혼합.
- v
- 직전 20거래일 하루 손익 제곱평균제곱근의 로그(실현 변동성). 3선 v3, 10선 v10.
- u
- 미국 10년 국채 금리의 직전 뉴욕 거래일 변화(bp). 한국 개장 전에 안다.
- s
- 흐름 결합층의 log 규모. 규모 상한은 s = 2·tanh(s_raw/2) 로 |s| < 2 를 강제한다.
- x
- 표준화 좌표, 손익 ÷ 학습 구간 표준편차(3선 9.4틱, 10선 35.9틱).
자료
데이터셋
| 자료 | 기간 | 해상도 | 행수 | 쓰임 |
|---|---|---|---|---|
| 3년 국채선물 일봉(정산가, 기준가, 현재가) | 2012-01-02 ~ 2026-10-30 | 일 | 3,640 | r3, v3 |
| 10년 국채선물 일봉 | 같음 | 일 | 3,640 | r10, v10 |
| 미국 10년 금리 뉴욕 종가 변화 | 2012-01 ~ 2026-10-27 | 일(뉴욕 날짜) | 3,506 | u (FLOW 조건) |
- 정산가가 0 으로 기록된 날(각 한 날)은 그날 현재가로 바꿨다. 6일 넘게 빈 16곳은 모두 연휴다.
- 학습 2012-02-01 ~ 2021-12-30 의 2,443일(앞 20일은 v 계산에 쓰여 빠진다), 봉인 시험 2022-01-03 ~ 2026-10-28 의 1,175일. 시험 구간은 2022~2023(491일)과 2024~2026(684일)로 나눠서도 본다.
- 30년 국채선물은 일봉이 2024-02 부터라 학습 구간이 없어 다루지 않았다.
언제 무엇을 아는가
표적은 전날 정산에서 오늘 정산까지다. N, FHS, BB 는 전날 마감까지의 손익만 쓰므로 «전날 마감 시점» 분포다. FLOW 는 여기에 u 를 더 받는다. u 는 뉴욕 날짜 종가 변화라 한국 개장 전(08:45 전)에 알려지지만 전날 한국 마감 때는 모른다. 그래서 FLOW 는 «개장 시점» 분포이고 정보가 하나 더 많다. 이 차이는 계획에 적었고, 탐색에서 u 를 뺀 흐름으로 분리했다.
방법
- 모든 모형의 매개변수는 2021년 말에 고정했다. 이동 창 모형(N, BB)과 GARCH 분산은 시험 구간 실현값으로 날마다 갱신하지만 다시 적합하지 않는다.
- 날마다 각 모형에서 (r3, r10) 표본을 만든다(N 10,000개, FHS 학습 잔차 쌍 2,393개, BB 500개, FLOW seed 당 2,000개 × 5). 계열마다 VaR99, ES99 를 표본에서 잰다.
- 초과 횟수로 Kupiec, Christoffersen 을, 초과일 손실로 Acerbi-Szekely Z2 를 검정한다. 모형 비교(H405, H407)는 날짜 짝 점수 차의 월 블록 부트스트랩(5,000회) 한쪽 p 이고 두 개에 Holm 을 건다.
- 판정: H402 또는 H403 이 지지되면 «보류(운용 결정 자료)» 로 두고 한도 안을 내며, 둘 다 기각이면 «폐기». 수익 규칙이 아니므로 «채택» 은 없다.
- 보조: 해마다 초과, 사전 지정 충격일 8개와 뒤 4거래일을 뺀 결과, seed 별 결과.
모델
비교 모형 셋
| 모형 | 무엇을 하나 | 설정, 학습값 |
|---|---|---|
| N | 최근 1년 공분산의 정규분포 | 창 250일, 평균 0, 표본 10,000 |
| FHS | 변동성은 GARCH 로 따라가고 모양은 학습 잔차에서 | σ²_t = ω + α r²_(t−1) + β σ²_(t−1), 정규 QMLE. 3선 ω 3.90, α 0.101, β 0.856. 10선 ω 36.4, α 0.071, β 0.901. 잔차 쌍 2,393개(앞 50일 제외) |
| BB | 최근 2년 실제 손익 쌍 | 창 500일 |
조건부 정규화 흐름
정규화 흐름은 단순한 기초 분포 z 를 학습된 가역 함수로 손익 분포 x 로 바꾼다. 가역이라 학습 자료의 로그 우도를 정확히 계산해 최대화할 수 있다. 아핀 결합층은 한 차원을 고정하고, 고정한 값과 조건 c 를 받은 작은 MLP 가 내는 규모 s 와 이동 t 로 다른 차원을 x·e^s + t 로 바꾼다. 출처 노트는 s 에 상한이 없으면 꼬리 좌표가 발산한다고 보고했다. 그래서 확증 모형은 상한을 두었고, 상한 없는 판을 H406 에 썼다.
| 항목 | 값 |
|---|---|
| 구조 | RealNVP 아핀 결합층 4개, 결합층마다 MLP (1 + 조건 3) → 64 → 64 → 2, tanh, 마지막 층 0 초기화 |
| 규모 상한 | s = 2·tanh(s_raw/2) (확증), 상한 없음 (H406) |
| 기초 분포 | 차원별 독립 Student-t(ν = 5) (확증), 표준정규 (비교) |
| 조건 c | (v3, v10, u/5), 학습 평균으로 중심화. 탐색판은 (v3, v10) |
| 학습 | Adam lr 1e-3, weight decay 1e-5, 배치 256, 기울기 노름 10 자르기, 최대 400 epoch |
| 조기 종료 | 학습 구간 안 무작위 15% 날의 음의 로그 우도, 40 epoch 개선 없으면 멈추고 최저점 가중치 |
| seed | 0~4, 확증 예측은 seed 당 2,000개를 섞은 10,000개 |
결과
확증 결과
| 모형 | 3선 매수 | 3선 매도 | 10선 매수 | 10선 매도 | 가설 |
|---|---|---|---|---|---|
| N | 30 (<0.0001) | 19 (0.051) | 25 (0.0007) | 18 (0.089) | H404 지지 |
| FHS | 25 (0.0007) | 19 (0.051) | 26 (0.0003) | 13 (0.72) | H402 미지지 |
| BB | 20 (0.028) | 24 (0.002) | 17 (0.15) | 28 (<0.001) | 비교 기준 |
| FLOW | 20 (0.028) | 23 (0.004) | 21 (0.015) | 7 (0.13) | H403 미지지 |
| 가설 | 비교 | 하루 평균 차 | 90% 구간 | p | Holm p | 결과 |
|---|---|---|---|---|---|---|
| H405 | FZ0: BB − FLOW | +1.45 | [0.83, 2.13] | 0.0002 | 0.0004 | 지지 |
| H407 | energy: FHS − FLOW | +0.075 | [0.058, 0.090] | 0.0002 | 0.0002 | 지지 |
ES 도 과소였다. Acerbi-Szekely Z2 는 FHS 3선 매수 −1.50(p 0.000), 10선 매수 −1.18(p 0.001), FLOW 3선 매수 −1.01(p 0.000), 3선 매도 −0.96(p 0.003), 10선 매수 −0.84(p 0.005)였다. 초과가 연달아 몰리지는 않았다(Christoffersen 독립성 p 는 네 모형 모두 0.2 이상). FLOW 는 상대 점수에서 이겼지만 스스로도 Kupiec 를 통과하지 못했다. 덜 틀린 것이지 맞춘 것이 아니다.
언제 틀렸나
2024~2026 만 보면 FHS 는 3선 매수 12/684(p 0.073), 10선 매수 14/684(p 0.016), FLOW 는 8, 6, 11, 2회로 10선 매도만 초과가 너무 적어 기각(p 0.029)됐다. 사전 지정 충격일 8개와 뒤 4거래일(40일)을 빼도 FHS 3선 매수 25, 10선 매수 25회로 거의 그대로였다. 몇몇 사건이 아니라 2022년 변동성 국면 전체가 학습 구간이 보여 준 꼬리보다 두꺼웠다.
규모 상한과 발산
t 기초 다섯 seed 모두에서 무상한 흐름이 시험 구간에 낸 표본의 최대 |x| 는 상한 흐름의 0.97~1.06배였고(최대 26~56, t(5) 기초 분포 자체의 꼬리), 학습 중 NaN 도 없었다. 같은 seed 로 다시 학습하면 같은 값이 나왔다. H406 미지지: 이 크기(2차원, 은닉 64, 조기 종료)의 흐름은 규모 항을 크게 쓰지 않았다.
탐색 결과
아래는 결과를 본 뒤 더한 것이라 판정에 쓰지 않는다.
- u 를 뺀 흐름: energy score 가 FHS 와 같고(FHS − FLOW_noU = −0.003, p 0.79) FZ0 도 같다(p 0.65). u 를 넣은 FLOW 와의 energy 차 0.077(p 0.0002)이 H407 우위의 전부다. 다만 BB 보다는 여전히 FZ0 가 낮다(p 0.010).
- seed 민감도: 단일 seed 의 초과는 3선 매도 18~33, 10선 매도 4~16회로 흔들렸다. 기초 분포를 정규로 바꾸면 3선 매도 37회로 나빠졌다.
- 사후 배율: 2022~2026 초과율을 1% 로 맞추려면 FHS VaR 를 3선 매수 1.34배, 10선 매수 1.15배 키워야 했다. 결과를 보고 고른 값이다.
- 50계약 3선 포지션 예시(틱당 50만원): 2024~2026 날마다 FHS 99% ES(매수와 매도 중 큰 쪽) × 50 은 중앙값 1,731만원, 90% 분위수 2,510만원. 실현 손실 분포(매수와 매도를 합침)의 99% 분위수 × 50 은 2024~2026 1,567만원(ES 2,289만원), 2022~2026 2,326만원(ES 3,208만원), 최악의 하루 5,250만원(2022년)이다.
해석
2012~2021 로 고정한 모형은 2022년의 꼬리를 과소 추정했다. GARCH 는 변동성 수준을 따라가지만 학습 구간 잔차의 꼬리가 2022년 충격보다 얇았고, 흐름도 같은 자료에서 꼬리를 배웠다. 학습 우도가 좋아도 꼬리 적중을 보증하지 않는다는 출처의 주장과 맞는다. 흐름이 상대 점수에서 이긴 것은 개장 전 미국 금리를 조건으로 받았기 때문이고, 같은 정보를 빼면 FHS 와 같아졌다. 이 자료에서 생성 모형 계열 자체의 이점은 보이지 않았다. 한도를 모형으로 정하려면 2022형 충격이 들어간 학습 구간으로 날마다 다시 적합하는 FHS 가 다음 후보이고, 그 전까지는 실현 분포의 분위수가 가장 정직한 참고값이다.
한계
- 초과 횟수가 계열당 7~30회뿐이라 꼬리 검정의 실제 표본 크기는 이 횟수다. 다만 기각은 여러 계열에서 같은 방향(과소 추정)이었다.
- 매개변수를 2021년 말에 고정했다(계획대로). 실무처럼 다시 적합하면 FHS 와 FLOW 가 나을 수 있다.
- 표적은 종가 대 종가다. 장중 최저점 손실은 재지 않았다. 장중 손절형 한도라면 더 커야 한다.
- 30년 국채선물은 자료가 짧아 빠졌다. 10년의 실제 체결 비용은 3년보다 클 수 있으나 이 실험은 매매가 없어 비용을 쓰지 않았다.
- 여러 전략을 함께 돌릴 때의 동시 손실 분포는 다루지 못했다.
- 출처 논문 원문에 이번에 접속하지 못해 요약에 기대어 설계했다.
- u 를 뺀 흐름, 사후 배율, 50계약 참고값은 결과를 본 뒤 더한 탐색이다.
산출물
- 계획
protocol.md - 분석·판정
analysis.md - 정본 런
results/20261102T223418_main/ - 본 실행
code/s1.py - 탐색
code/s2_explore.py - 그림
code/render_figures.py
Appendix
A. 데이터셋 실물
| 날짜 | r3 | r10 | v3 | v10 | u |
|---|---|---|---|---|---|
| 2022-09-21 | −4 | −25 | 3.349 | 4.178 | 8 |
| 2022-09-22 | −78 | −115 | 3.344 | 4.175 | −6 |
| 2022-09-23 | −25 | −98 | 3.501 | 4.247 | 19 |
| 2022-09-26 | −105 | −168 | 3.509 | 4.263 | −1 |
| 2022-09-27 | 76 | 129 | 3.633 | 4.326 | 19 |
B. 모델 입출력 실물
| 모형 | 3선 매수 손실 | VaR99 | ES99 | 10선 매수 손실 | VaR99 | ES99 | FZ0 합 |
|---|---|---|---|---|---|---|---|
| N | 105 | 49.7 | 56.0 | 168 | 132.4 | 149.7 | 140.3 |
| FHS | 105 | 78.8 | 98.5 | 168 | 154.4 | 197.0 | 52.3 |
| BB | 105 | 50.1 | 75.4 | 168 | 128.0 | 149.6 | 116.7 |
| FLOW | 105 | 46.5 | 57.8 | 168 | 112.2 | 140.9 | 158.4 |
| FLOW(u 뺌) | 105 | 52.1 | 64.0 | 168 | 153.6 | 195.8 | 107.9 |
이날 u 는 −1bp(전 뉴욕 거래일 미국 금리가 거의 그대로)였기 때문에 FLOW 는 매수 쪽 꼬리를 줄였고, 변동성만 본 FHS 가 가장 크게 잡았다.
C. 실험 설정
| 항목 | 값 |
|---|---|
| 학습 / 시험 | 2012-02-01 ~ 2021-12-30 (2,443일) / 2022-01-03 ~ 2026-10-28 (1,175일) |
| 학습 표준편차 | 3선 9.4틱, 10선 35.9틱 |
| VaR 수준 | 99%, 1일 |
| 검정 | Kupiec, Christoffersen(α 0.05), Acerbi-Szekely Z2(귀무 2,000회), 월 블록 부트스트랩 5,000회 seed 171, Holm(H405, H407) |
| 충격일 | 2022-02-24, 2023-03-10, 2023-10-09, 2024-04-15, 2024-08-05, 2024-12-04, 2025-04-03, 2025-06-13 과 각 뒤 4거래일 |
| 비용 | 매매가 없어 쓰지 않음 |