세 줄 요약
- 작은 MLP 는 3선 다음 30분 수익을 거의 0 으로 예측한다. 확인 구간(2024 ~ 2026-10, 627일)에서 예측의 표준편차는 0.15 ~ 0.22틱이고 실제 30분 수익의 표준편차는 2.35틱이다. 그래서 사전등록 문턱 |ŷ| ≥ 1.5틱을 넘는 예측이 가중안과 비가중 모두 0건이었고, 두 확증 가설은 검정할 수 없었다.
- 결과를 본 뒤 문턱을 안마다 과거 예측의 98% 분위로 바꿔 보아도, 확인 구간 비용 1틱 뒤 건당 손익은 비가중 −0.18틱, 가중 네 안 −0.44 ~ −0.92틱으로 가중이 오히려 나빴다(가중 − 비가중 한쪽 p 0.75 ~ 0.95). 거래도 연 13 ~ 20회뿐이었다.
- 판정은 폐기다. 학습 목표를 큰 움직임 쪽으로 기울여도 작은 신경망은 비용을 넘는 30분 거래를 고르지 못한다. 예측 오차(RMSE)와 방향 적중(50 ~ 51%)도 가중으로 나아지지 않았다.
가설과 결론
장중 방향 모델은 보통 평균 제곱오차를 줄이도록 학습한다. 그런데 돈이 되는 것은 비용을 넘는 큰 움직임뿐이다. 평균 오차를 줄이는 모델은 대부분을 차지하는 작은 움직임에 맞춰지고 꼬리는 소홀히 한다는 의심이 있다. 그렇다면 학습 때 큰 움직임 표본에 무게를 더 주면, 예측 오차는 비슷해도 «큰 예측» 이 나온 순간의 거래는 더 나아질 수 있다. 출처는 Jane Street 의 표본 가중 연구 글이다. 그 글은 언어모델에서 표본 가중이 실제로 얼마나 학습에 반영되는지가 모델 크기에 따라 달라지며, 작은 모델은 가중과 무관하게 일반 패턴만 배운다고 보고했다. 그래서 사전에 미지지를 예측했다.
- 가설
- H408: 발견 구간에서 고른 가중안 W* 의 확인 구간 상위 신호(|ŷ| ≥ 1.5틱) 거래 건당 net1 이 비가중 U 보다 크다. H409: W* 의 그 건당 net1 이 0 보다 크다. 둘 다 월 블록 부트스트랩 한쪽 p, Holm 2개. H410 ~ H413 은 탐색(금통위 날, 기준선, 선택 없는 4안, 원형 이동 귀무).
- 결론
- 발견 구간에서 50건 이상 거래한 가중안이 없어 사전등록한 대체안 T3 가 W* 가 되었다. 확인 구간에서는 W* 와 U 모두 1.5틱 이상 예측이 0건이라 H408, H409 는 검정할 수 없었다. 사전등록 규칙대로 판정은 폐기다. 결과를 본 뒤의 분위 문턱 탐색에서도 가중은 비가중을 이기지 못했다.
| 가설 | 내용 | 결과 | 판정 |
|---|---|---|---|
| H408 | W* 건당 net1 > U 건당 net1(확인) | 두 안 모두 거래 0건 | 검정 불가 |
| H409 | W* 건당 net1 > 0(확인) | 거래 0건 | 검정 불가 |
| H410(탐색) | 금통위 날에 이득이 몰리나 | 거래 없음, RMSE 차이 없음(4.176 대 4.170) | 미지지 |
| H411(탐색) | U, R 건당 net1 > 0 | 1.5틱 문턱 거래 0건 | 미지지 |
| H412(탐색) | 4안 모두, 분위 문턱 E1 | −0.44 ~ −0.92틱(U −0.18틱) | 미지지 |
| H413(탐색) | 원형 이동 귀무 | 가중 − U 의 p 0.87 ~ 0.97 | 미지지 |
용어와 기호
- 3선, 10선
- 한국거래소 3년, 10년 국채선물. 연결 시세(그때그때 근월물을 이어 붙인 것)를 쓴다. 거래와 표적은 3선만이다
- 틱
- 3선 가격의 최소 단위 0.01. 이 페이지의 손익은 모두 1계약당 틱이다
- 달러선물
- 원/달러 선물 연결 1분봉. 특징으로만 쓴다
- 결정 시각 t
- 10:00 부터 15:00 까지 30분 간격 11개. t 이하 마지막 1분봉 종가까지를 정보로 쓴다
- y(표적)
- (t+31분 봉 종가 − t+1분 봉 종가) × 100 틱. 신호를 본 뒤 1분 늦게 들어가 30분 들고 나온다
- ŷ
- 모델의 y 예측. MLP 는 seed 5개 예측의 평균이다
- MLP
- 다층 퍼셉트론. 입력 21개 → 은닉 32 → 은닉 16 → 출력 1 의 작은 신경망(scikit-learn MLPRegressor)
- 표본 가중
- 학습 손실에서 표본마다 곱하는 무게. 무게가 큰 표본의 오차를 더 줄이려 학습한다. 평균이 1 이 되게 맞춘다
- U
- 비가중 MLP(모든 표본 무게 1). 비교 기준이다
- T3, T10
- 큰 움직임 가중. 학습 표본 중 |y| ≥ 1.5틱인 것에 3배, 10배
- V3, V10
- 급변 국면 가중. 3선 지난 60분 실현 변동이 학습 구간 80% 분위 이상인 표본에 3배, 10배
- W*
- 발견 구간에서 고른 가중안. 규칙: 발견 구간 거래 50건 이상인 안 중 건당 net1 최대, 없으면 T3. 이번에는 T3 다
- R
- 릿지 회귀(alpha 10). 같은 표준화 특징, 비가중 선형 기준선
- D
- 거래 방향. |ŷ| ≥ 문턱이면 D = ŷ 의 부호(+1 매수, −1 매도), 아니면 거래 없음
- gross, net1, net2
- gross = D × y(비용 전). net1 = gross − 1틱(판정), net2 = gross − 2틱(보고). 1틱은 왕복 비용 가정이다
- 적중률
- y ≠ 0 인 행 중 ŷ 와 y 의 부호가 같은 비율(거래와 무관하게 모든 행)
- RMSE
- 예측 오차 제곱 평균의 제곱근(틱)
- 걷기 전진
- 시험 분기마다 그 이전 자료 전부(2019-01 부터)로 다시 학습하고 그 분기만 예측하는 방식. 미래 자료를 학습에 쓰지 않는다
- 발견 구간, 확인 구간
- 발견 = 시험 2020 ~ 2023(가중안 선택에 씀), 확인 = 시험 2024-01 ~ 2026-10(판정에 씀)
- 월 블록 부트스트랩
- 달을 복원 추출해 건당 평균을 5,000번 다시 계산하는 방법(seed 172). 한쪽 p 는 다시 계산한 값이 0 이하(차이면 0 이하)인 비율
- Holm 보정
- 여러 가설을 함께 시험할 때 p 를 가설 수에 맞춰 키우는 방법
- 원형 이동 귀무
- 확인 구간에서 거래 결정을 날 단위로 20일 이상 통째로 밀어 결과와 어긋나게 한 뒤 같은 통계를 1,000번 계산한 분포. 하루 안 시각 구조는 그대로 둔다
- 분위 문턱(E1)
- 결과를 본 뒤 덧붙인 탐색. 시험 분기의 문턱 = 그 안의 2020Q1 부터 직전 분기까지 표본 밖 |ŷ| 의 98%(보조 99%) 분위. 2021Q1 부터 거래한다
- 충격 구간
- 코로나(2020-02-24), 러시아 우크라이나 침공, SVB 파산, 하마스 이스라엘, 이란 이스라엘, 엔 캐리 청산, 한국 비상계엄, 미국 상호관세, 이스라엘 이란 공습 9개 사건 각각 그날부터 5거래일
- 만기일
- 3, 6, 9, 12월 셋째 화요일(휴장이면 그 앞 거래일). 연결 1분봉이 11:31 에 다음 월물로 넘어가므로 그날 전체를 뺀다
자료
데이터셋
| 자료 | 기간 | 해상도 | 쓰임 |
|---|---|---|---|
| 3선 연결 1분봉(현재가, 체결거래량) | 2019-01-03 ~ 2026-10-28 | 1분, 라벨 = 봉이 끝나는 시각 | 특징, 진입가, 청산가 |
| 10선 연결 1분봉 | 같은 기간 | 1분 | 특징 |
| 달러선물 연결 1분봉 | 같은 기간 | 1분 | 특징 |
| 금통위 회의일 목록 | 2019 ~ 2026 | 일 | 탐색 H410 의 날 구분 |
아이디어 단계에서는 미국 10년 국채선물과 코스피200 1분봉도 넣으려 했지만, 두 계열은 2022-01 부터만 있어 발견 구간 2019 ~ 2023 을 채우지 못한다. 사전등록 때 둘을 뺐다. 국채선물 개장은 2025-11 까지 09:00, 2025-12 부터 08:45 다. 첫 결정 시각을 10:00 에 두어 두 체제 모두 개장 뒤 한 시간이 지나게 했다.
표본과 거르기
| 항목 | 값 |
|---|---|
| 특징과 표적이 모두 있는 날, 행(2019 ~ 2026-10) | 1,804일, 19,844행 |
| 발견 시험(2020 ~ 2023) | 938일, 10,318행 |
| 확인 시험(2024-01 ~ 2026-10) | 627일, 6,897행 |
| 뺀 날 | 만기일, 늦게 연 날(수능일), 3선 연결 1분봉이 빈 2026-07-01 ~ 08-31 |
| y 표준편차: 발견 / 확인 | 3.31 / 2.35틱 |
결정 시각마다 거래는 하나이고, 진입은 t+1분 봉, 청산은 t+31분 봉이다. 다음 결정 시각의 진입이 앞 거래의 청산과 같은 봉이라 거래가 겹치지 않는다. 15:45 종가 단일가 봉은 쓰지 않는다.
방법
분기마다 다시 학습하는 걷기 전진이다. 첫 시험 분기는 2020Q1 이고 학습은 2019-01 부터 시험 분기 전날까지 늘어나는 창이다. 다섯 MLP 안(U, T3, T10, V3, V10)을 seed 5개씩 학습해 예측을 평균했다. 학습 27개 분기 × 5안 × 5 seed = 700번 학습했다(마지막 분기 2026Q4 는 10월까지).

사전에 고정한 것: 특징 21개, 모델 세팅, 가중안 넷과 배수, 문턱 1.5틱, 선택 규칙, 비용, 검정, 판정 문턱. 결과를 본 뒤 정한 것: 분위 문턱 탐색 E1 하나(protocol 수정 1, 판정 불변).
모델
모델은 scikit-learn MLPRegressor 다. 입력 21개를 학습 구간 평균과 표준편차로 표준화하고 ±5 에서 자른 뒤, 은닉 32, 16(ReLU)을 지나 출력 하나(30분 뒤 틱)를 낸다. 학습 표적은 학습 구간 0.1%, 99.9% 분위에서 자르고(평가 표적은 자르지 않음), 손실은 표본 가중 제곱오차다. 왜 이 모델인가: 이 실험은 «같은 모델에 가중만 바꾸면» 을 묻기 때문에 구조를 작게 고정했다. 릿지 R 은 비선형이 필요한지 보는 기준선이다. 아래 그림은 모두 마지막 분기(2026Q4) 학습 객체에서 그렸고, 그리기 전에 그 객체들이 커밋된 예측을 오차 1e-9 안에서 재현하는지 확인했다.
결과
확증 결과
| 구간 | 안 | 거래 | 건당 net1 | RMSE | 적중률 | ŷ 표준편차 |
|---|---|---|---|---|---|---|
| 발견 | U | 19 | −4.42 | 3.323 | 0.511 | 0.253 |
| 발견 | T3 | 32 | −2.78 | 3.328 | 0.510 | 0.302 |
| 발견 | T10 | 42 | −3.50 | 3.331 | 0.507 | 0.326 |
| 발견 | V3 | 26 | −2.77 | 3.322 | 0.516 | 0.274 |
| 발견 | V10 | 44 | −1.32 | 3.324 | 0.510 | 0.302 |
| 발견 | R | 9 | −10.56 | 3.324 | 0.516 | 0.270 |
| 확인 | W* = T3 | 0 | 없음 | 2.357 | 0.506 | 0.195 |
| 확인 | U | 0 | 없음 | 2.354 | 0.507 | 0.160 |
| 확인 | T10, V3, V10, R | 0 | 없음 | 2.354 ~ 2.360 | 0.500 ~ 0.503 | 0.148 ~ 0.219 |
발견 구간에서도 가중 네 안은 모두 거래가 50건 미만이었고 건당 net1 은 모두 크게 음수였다. 선택 규칙의 대체안 T3 가 W* 가 되었다. 확인 구간에서 1.5틱 이상 예측은 한 번도 나오지 않았고, 두 확증 가설은 검정할 수 없어 폐기로 판정했다. 충격 구간을 빼도 거래는 0건이다. 금통위 날 21일(탐색 H410)에도 거래가 없었고, 그날의 RMSE 는 W* 4.176, U 4.170 으로 같았다.
예측이 왜 문턱에 못 닿았나

예측이 작은 것은 모델이 방향을 거의 모른다는 뜻이다. 제곱오차를 줄이는 모델은 신호가 약하면 예측을 0 쪽으로 줄인다. 가중은 예측 표준편차를 0.16 에서 0.19 ~ 0.22틱으로 조금 키웠을 뿐이다. 확인 구간은 발견 구간보다 조용해서(y 표준편차 2.35 대 3.31틱) 예측이 더 작아졌다.

탐색 결과
질문의 뜻(가중이 상위 신호를 더 잘 고르는가)을 보려고, 결과를 본 뒤 문턱을 안마다 과거 |ŷ| 의 98% 분위로 바꿨다(E1). 문턱은 시험 분기 이전 정보만 쓴다. 판정에는 쓰지 않는다.
| 안 | 거래 | 연 | 건당 net1 | net2 | 적중 | 가중 − U 의 p | 차이 90% 구간 |
|---|---|---|---|---|---|---|---|
| U | 34 | 13.3 | −0.18 | −1.18 | 0.50 | ||
| T3 | 43 | 16.8 | −0.44 | −1.44 | 0.54 | 0.75 | −0.94 ~ 0.30 |
| T10 | 32 | 12.5 | −0.81 | −1.81 | 0.47 | 0.91 | −1.46 ~ 0.15 |
| V3 | 44 | 17.2 | −0.89 | −1.89 | 0.52 | 0.90 | −1.59 ~ 0.20 |
| V10 | 52 | 20.3 | −0.92 | −1.92 | 0.48 | 0.95 | −1.58 ~ 0.00 |
| R | 5 | 2.0 | −1.20 | −2.20 | 0.40 |

net1 > 0 의 한쪽 p 는 0.57(U) ~ 0.94(V3) 이고 Holm 뒤 모두 1.0 이다. 원형 이동 귀무에서 가중 − U 차이의 p 는 0.87 ~ 0.97 로, 가중의 이득은 귀무보다도 낮은 쪽이다. 충격 구간을 빼면 U −0.56, T3 −0.85, T10 −1.38, V3 −1.21, V10 −0.98틱으로 그림이 같다. 99% 분위에서는 연 4 ~ 7회로 줄고 U 만 +0.93틱(14건), 가중안은 −0.44 ~ −1.92틱이다.

해석
작은 MLP 는 이 특징으로 30분 3선 방향을 거의 알지 못한다. 적중률 50 ~ 51% 와 보정 그림이 그것을 보여 준다. 표본 가중은 정보를 만들지 못하고 예측의 폭만 조금 키운다. 방향 정보가 없는데 폭만 커지면 상위 신호는 큰 움직임이 있던 국면을 더 자주 고를 뿐이고, 건당 손익은 비용만큼 음수로 수렴한다. 가중이 2022 급변기에만 좋아 보였던 것은 그 해 표본에 맞춘 결과로 보이며 확인 구간에서는 뒤집혔다. 출처 글이 말한 «작은 모델은 표본 가중과 무관하게 일반 패턴을 배운다» 와 같은 그림이다.
한계
미국 10년 국채선물과 코스피200 은 2022 부터만 있어 특징에서 뺐다. 장중 미국 금리 움직임이 빠졌다.
3선 연결 1분봉이 2026-07-01 ~ 08-31 에 비어 있어 확인 구간이 그만큼 짧다.
사전등록 문턱 1.5틱은 이 모델의 예측 크기에 비해 너무 컸다. 분위 문턱 E1 은 결과를 본 뒤 정한 탐색이다.
early stopping 의 검증 표본은 학습 구간 안에서 무작위 15% 를 뽑는다. 시간 순 검증보다 낙관적일 수 있으나 표본 밖 평가에는 영향이 없다.
비용은 3선 1틱(판정), 2틱(보고)만 썼다. 입찰일과 미국 지표 날 구분은 일정 표를 마련하지 못해 금통위 날만 보았다.
산출물
- 사전등록
protocol.md - 분석과 판정
analysis.md - 정본 런
results/20261102T225519_main/ - 코드
code/s1.py,code/s2_quantile.py,code/render_figures.py
Appendix
A. 데이터셋 실물
| t | 진입 봉 | 청산 봉 | 진입가 | 청산가 | y | f3_r5 | f3_r15 | f3_r30 | f3_r60 | f10_r30 | fx_r30 | f3_open | f3_prev | f3_vr30 | f3_rv60 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10:30 | 10:31 | 11:01 | 107.33 | 107.26 | −7 | 1 | −3 | −3 | −6 | −20 | −13.10 | −9 | −16 | 1.32 | 28 |
| 14:00 | 14:01 | 14:31 | 107.30 | 107.31 | 1 | 0 | 0 | 0 | −4 | 6 | −0.73 | −12 | −19 | 1.00 | 24 |
특징 이름: f3, f10 은 3선, 10선, fx 는 달러선물. _r5 ~ _r60 은 지난 5 ~ 60분 수익(선물은 틱, 달러선물은 로그 bp), _open 은 그날 첫 봉 대비, f3_prev 는 전 거래일 마지막 봉 대비, _vr30 은 지난 30분 거래량을 전일 30분 평균 거래량으로 나눈 로그, _rv60 은 지난 60분 1분 변화 절댓값의 합(틱), tod 는 09:00 부터의 시간이다.
B. 모델 입출력 실물
| t | U | T3 | T10 | V3 | V10 | R | 실현 y |
|---|---|---|---|---|---|---|---|
| 10:30 | 0.206 | 0.203 | 0.103 | 0.350 | 0.409 | 0.185 | −7 |
| 14:00 | −0.001 | 0.015 | −0.011 | 0.012 | 0.068 | 0.005 | 1 |
10:30 행은 그 전 한 시간 동안 3선이 6틱 내린 뒤다. 모든 안이 약한 반등(+0.1 ~ +0.4틱)을 예측했지만 실제로는 7틱 더 내렸다. 어느 예측도 1.5틱 문턱 근처에 가지 않는다.
C. 실험 설정
| 항목 | 값 |
|---|---|
| MLP | hidden_layer_sizes (32, 16), activation relu, solver adam, learning_rate_init 0.001, alpha 0.001, batch_size 256, max_iter 200, early_stopping True, validation_fraction 0.15, n_iter_no_change 10, random_state 0 ~ 4 |
| 릿지 | alpha 10, 비가중 |
| 전처리 | 학습 구간 평균, 표준편차로 표준화, ±5 자르기. 학습 표적 0.1%, 99.9% 분위 자르기 |
| 가중 | T: |y| ≥ 1.5틱에 3, 10배. V: 60분 실현 변동 80% 분위 이상에 3, 10배. 평균 1 정규화 |
| 걷기 전진 | 분기 재학습, 확장 창(2019-01 부터), 시험 2020Q1 ~ 2026Q4 |
| 문턱, 비용 | |ŷ| ≥ 1.5틱(확증), 98%, 99% 분위(탐색 E1). 1틱(판정), 2틱(보고) |
| 검정 | 월 블록 부트스트랩 5,000회 한쪽 p(seed 172), Holm, 원형 이동 귀무 1,000회(20일 이상) |