실험 0005 · 국채선물

새 데이터와 모델 18종 — 승률은 0.35%p 올랐고, 그 차이는 유의하지 않다

0003 이후 모은 데이터(선물 일봉 전필드 48열 · 한은 단순매입 6열)와 지연을 실측해 되찾은 4분(수급 컷오프 15:30→15:34)을 얹어, 모델 18종 × 티어 5종을 여덟 해 워크포워드로 다시 재었다.

H12 미지지 · H13 미지지 시험 2019~2026 · n=1,497 모델 18종 × 티어 5 × 시드 3

최고는 T4_daily / ExtraTrees 로 승률 0.6065 · 누적 +681틱. 0003 의 채택 후보(0.6030 · +663틱)보다 0.35%p 높지만 짝지은 McNemar p=0.688(52:47)이다 — 예측이 갈리는 99일에서 동전이다. 사전등록 문턱(p<0.05)에 걸려 H12 미지지. 모델을 10종에서 18종으로 넓혀도 1위는 같은 ExtraTrees 였고, 새로 얻은 것은 승률이 아니라 데이터 축의 정직성이다(누설 카나리아 0건).

무엇을 물었나

H12 — 0003 이후 새로 모은 데이터와 늦춘 수급 컷오프를 더한 모델이 0003 의 채택 후보(ExtraTrees·T0_core, 승률 0.6030)를 넘는가.

H13 — 모델 계열 순서(무작위 배깅 트리 > 부스팅 > SVM > 선형)가 18종으로 넓혀도 재현되는가.

그럴듯했던 이유: 0003 은 "가진 데이터 전부" 를 썼지만 그때 우리에게 일봉 호가 12필드·베이시스·투자자 평균단가가 없었다(2026-09-15 에 174필드로 신설). 그리고 수급 축은 컷오프 4분을 미실측 마진으로 버리고 있었다.

기호와 데이터

이 문서의 숫자를 읽는 데 필요한 기호는 넷이다.

기호 — 0001~0004 와 같은 정의다.
기호
P3415:34:00 봉의 현재가 — 제출 시점에 관측된다
P4515:45 동시호가 단일가(그날 종가)
ref_tick(P45 − P34) / 0.01 — 채점 대상. 0틱 날은 무효일이다
승률sign(예측) == sign(ref_tick) 인 날의 비율. 커버리지 100%(미제출은 오답)
데이터셋 — 피처 아홉 그룹. `g7_`·`g8_` 이 이 실험에서 신설됐다.
그룹내용결측률시작
g1_3년 선물 1분봉(모멘텀·변동폭·거래량·미결제)240.2%2016-12
g1p_10년 선물·커브60.3%2016-12
g2_장중 투자자 수급(30초) — 컷오프 15:342821.8%2019
g3_해외 장중(미국채 금리)1043.4%2021
g4_국내 교차자산(IRS·현물·환율·주가)3350.9%2019~2022
g5_체결틱 미시구조1263.5%2023
g6_일별·캘린더(기저율·이벤트)3723.3%2012
g7_선물 일봉 전필드(T-1) — 호가 잔량·건수 비대칭, 매수/매도 성향, 베이시스·저평가·듀레이션, 주체별 (매수−매도) 평균단가480.2%2012
g8_한은 단순매입 — 당일·전일 여부, D-며칠, 예정액, 응찰배수, 낙찰금리 밴드666.6%2026-09

g7_ 은 전일(T-1) 값만 쓴다. 일봉 전필드는 종가 기준이고 호가·기본정보의 관측 시각이 미실측이다 — 당일 값을 쓰면 15:34 컷오프에서 관측 불가능한 것을 쓰게 된다. 빌더가 shift(1) 을 구조적으로 강제해 당일 값을 만들 경로가 없다.

어떻게 쟀나

분할은 연도 확장창 워크포워드다 — 시험연도 Y 의 모델은 Y 이전 연도로만 학습한다. 티어마다 그룹의 시작 연도가 달라 학습 시작과 시험연도가 다르고, 표본이 다른 티어의 승률을 같은 축에 두지 않는다.

티어 다섯 — 무엇을 넣었나.
티어그룹피처학습 시작시험n
T0_coreg1 · g1p · g66720172019~20261,497
T1_flow34+ g29520192021~20261,136
T4_daily+ g711520172019~20261,497
T5_allg1 · g1p · g2 · g6 · g7 · g814920192021~20261,136
T6_nan전 그룹(결측 NaN, 트리만)20420172019~20261,497

하이퍼파라미터는 탐색하지 않았다 — 표본이 하루 1행 1,847개다. 비교한 조합 수(티어 × 모델 × 시드 = 264)를 정직하게 센다.

연도 확장창 워크포워드 분할 — 폴드 간트와 티어별 구간
위: 최고 티어 T4_daily 의 폴드 8개. 짙은 막대가 학습창이고 주황이 그 해 시험창이며 둘은 겹치지 않는다. 막대 안 숫자는 그 폴드가 실제로 쓴 일수(학습 344일 → 1,693일로 해마다 길어진다). 아래: 티어 다섯의 학습 시작과 시험 구간 — g2_ 가 2019 부터라 수급 티어는 시험이 2021 에 시작한다. 모식도가 아니라 정본 런 per_day.parquetn_train 을 그대로 그렸다.
학습 세팅 — 표본 일수, 피처 구성, 클래스 균형
(가) 폴드가 쓴 표본 — 학습창은 344→1,693일로 자라고 시험창은 그 해 148~210일이다. (나) 티어별 피처 구성 — 67열에서 204열까지 어느 그룹이 더해지나(g7_ 48열이 T4_daily 의 전부다). (다) 클래스 균형 — 학습창 상승비율은 0.45~0.48 로 안정적인데 시험창은 0.39~0.51 로 흔들린다. 상수 기준선이 해마다 다른 이유가 이것이고, 그래서 기준선을 적응 상수(후행 120일 다수 클래스)로 잡았다.

모델 열여덟 종 — 무엇을 학습하는 모델인가

아래 그림은 모두 같은 자리에서 그렸다: 티어 T4_daily(피처 115개), 학습 2017~2025년 1,693행, 시험 2026년. 모식도가 아니라 학습이 끝난 모델 객체에서 읽은 값이고, 그리기 전에 그 모델이 정본 런에 커밋된 확률을 소수점 아래 아홉째 자리까지 다시 내는지 확인한다.

모델 열여덟 종 — 계열, 무엇을 학습하나, 왜 넣었나.
이름계열무엇을 학습하나왜 넣었나
et
ExtraTrees — 극단적 무작위 트리
배깅트리트리 400그루를 키우되 분기 지점을 무작위로 뽑아 고른다. 무작위성이 커서 트리끼리 덜 닮고, 평균이 더 매끄럽다.0003 에서 가장 좋았던 계열이라 기준점으로 넣었다.
rf
RandomForest — 무작위 숲
배깅트리트리 400그루를 부트스트랩 표본으로 키우고, 분기마다 피처를 √(피처 수)개만 후보로 본다. 최적 분기를 그 후보 안에서 고른다.ExtraTrees 와 같은 배깅 계열인데 분기를 무작위가 아니라 최적으로 고른다 — 그 차이가 성적에 나타나는지 본다.
bag
Bagging — 배깅한 결정트리
배깅트리깊이 6 결정트리 200그루를 부트스트랩 표본과 피처 70% 로 키워 평균낸다. 무작위 숲에서 '분기 후보 제한' 만 뺀 것이다.배깅의 효과와 피처 무작위화의 효과를 갈라 보려고 넣었다.
lgb
LightGBM — 히스토그램 그래디언트 부스팅
부스팅피처를 미리 구간으로 묶어 빠르게 트리 400그루를 순서대로 키운다. 잎 수(15)로 복잡도를 제한한다.실무에서 표 데이터의 기본값으로 쓰이는 모델이다.
xgb
XGBoost — 정규화 그래디언트 부스팅
부스팅LightGBM 과 같은 부스팅인데 트리를 깊이 우선으로 키우고 손실에 정규화 항을 직접 넣는다.같은 부스팅이라도 구현이 다르면 성적이 갈리는지 본다.
hgb
HistGradientBoosting — scikit-learn 히스토그램 부스팅
부스팅LightGBM 과 같은 계열의 scikit-learn 구현. 피처를 256구간으로 묶고 400회 반복한다.부스팅 구현 셋을 같은 자리에서 맞대기 위해 넣었다.
gbdt
GradientBoosting — 고전 그래디언트 부스팅
부스팅구간으로 묶지 않고 원래 값에서 최적 분기를 찾는다. 느리지만 히스토그램 근사가 없는 기준선이다.히스토그램 근사가 성적을 깎는지 재려고 넣었다.
ada
AdaBoost — 적응 부스팅
부스팅깊이 2 짜리 아주 얕은 트리(그루터기)를 300개 이어 붙이되, 앞에서 틀린 표본의 가중치를 올려 다음 트리를 키운다.부스팅의 가장 오래된 형태 — 잔차가 아니라 표본 가중치로 배우는 방식이 여기서도 통하는지 본다.
dt
DecisionTree — 결정트리 한 그루
단일트리깊이 4, 잎 최소 40일. 조건을 따라 내려가면 예측이 나온다.앙상블이 트리 하나보다 얼마나 나은지 재는 바닥이다.
svm_rbf
SVM(RBF) — 방사기저함수 서포트벡터머신
커널·거리두 반을 가르는 경계를 가장 넓은 여백으로 긋는다. RBF 커널로 굽은 경계도 그을 수 있다.트리와 전혀 다른 방식으로 경계를 만드는 계열이다.
svm_lin
SVM(선형) — 선형 서포트벡터머신 + 확률 보정
커널·거리직선(초평면)으로 가르되 여백을 최대화한다. 확률은 교차검증 보정(Platt)으로 따로 만든다.같은 SVM 에서 커널만 뺀 대조다.
knn
k-최근접 이웃 (k=75)
커널·거리학습을 하지 않는다 — 표를 통째로 기억했다가, 예측할 때 가장 가까운 75일을 찾아 그날들의 방향을 거리로 가중해 투표한다.'비슷한 날은 비슷하게 끝난다'는 가정만으로 어디까지 가는지 본다.
log
LogisticRegression — 로지스틱 회귀
선형·확률피처의 가중합을 로지스틱 함수로 눌러 확률을 낸다. C=0.1 로 계수를 강하게 규제했다.분류 확률의 표준 기준선이다.
lin
LinearRegression — 최소제곱 선형회귀
선형·확률확률이 아니라 틱 변화 자체를 회귀하고 부호를 읽는다. 확률은 잔차 표준편차로 눌러 만든 값이라 보정된 확률이 아니다.규제가 전혀 없는 선형 바닥이다.
ridge
Ridge — L2 규제 선형회귀
선형·확률선형회귀에 계수 제곱 벌점(alpha=10)을 더해 계수를 0 쪽으로 민다.피처 115개에 표본 1,693행이면 규제가 필요한지 보려고 넣었다.
enet
ElasticNet — L1+L2 규제 선형회귀
선형·확률L1(계수를 0 으로 죽인다)과 L2 를 섞은 벌점. 피처 선택이 함께 일어난다.피처를 줄이는 쪽이 유리한지 보는 자리다.
gnb
GaussianNB — 가우시안 나이브베이즈
선형·확률피처마다 상승일·하락일의 평균과 분산만 배우고, 피처끼리 서로 독립이라고 가정해 곱한다.가장 단순한 확률 모델 — 독립 가정이 이 데이터에서 얼마나 해로운지 재는 자다.
mlp
MLPClassifier — 다층 퍼셉트론(신경망)
신경망32칸·16칸 은닉층 두 개를 지나 확률을 낸다. 조기 종료로 과적합을 막는다.표본이 작을 때 신경망이 트리 앙상블을 이기는지 본다.

배깅트리 — 여러 결정트리를 서로 다른 표본·피처로 따로 키운 뒤 평균낸다. 트리 하나하나는 과적합하지만 평균이 그 흔들림을 깎는다. 이 실험에서는 et · rf · bag 가 여기 든다.

부스팅 — 트리를 순서대로 키운다. 다음 트리는 앞선 트리들이 아직 틀린 부분만 고치도록 학습한다. 트리 하나는 얕고, 수백 그루가 조금씩 더해져 최종 값이 된다. 이 실험에서는 lgb · xgb · hgb · gbdt · ada 가 여기 든다.

단일트리 — 트리 한 그루. 앙상블이 얼마나 벌어 주는지를 재는 바닥 기준으로 넣었다. 구조가 그대로 읽히는 유일한 모델이다. 이 실험에서는 dt 가 여기 든다.

커널·거리 — 피처 공간에서 가까움을 재서 답한다. 트리처럼 축에 수직인 칸을 자르는 대신, 거리나 커널로 매끄러운 경계를 만든다. 이 실험에서는 svm_rbf · svm_lin · knn 가 여기 든다.

선형·확률 — 피처의 가중합 하나로 답한다. 구조가 가장 단순해서, 비선형 모델이 실제로 무엇을 더 벌었는지 재는 자가 된다. 이 실험에서는 log · lin · ridge · enet · gnb 가 여기 든다.

신경망 — 가중합과 비선형 변환을 층으로 쌓는다. 표본이 하루 1행으로 작아 큰 망은 쓰지 않았다. 이 실험에서는 mlp 가 여기 든다.

ExtraTrees — 극단적 무작위 트리 et

트리 400그루를 키우되 분기 지점을 무작위로 뽑아 고른다. 무작위성이 커서 트리끼리 덜 닮고, 평균이 더 매끄럽다. 0003 에서 가장 좋았던 계열이라 기준점으로 넣었다.

그림 A · 구조 — T4_daily/et · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) ExtraTrees — 극단적 무작위 트리 — T4_daily/et · 시험 2026 f₁ f₂ f₃ f₄ f₅ ··· f₄₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = (1/K) Σ treeₖ(x) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 400 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 400그루 max_depth = 6 뿌리(깊이 0)에서 잎까지 분기 최대 6번 — 그림 B·C 의 오른쪽 눈금 실제 깊이 전부 6 · 상한에 닿은 트리 400/400 min_samples_leaf = 20 잎 하나에 표본 20개 미만이면 그 분할을 하지 않는다 실제 가장 작은 잎 n=20 max_features = sqrt 분할마다 피처 115개 중 10개만 후보로 뽑는다 트리끼리 서로 다른 곳을 보게 만든다 그루별 잎 수 분포 11 13 15 17 19 21 23 25 27 29 31 33 35 37 38 잎 11~38개
트리 400그루 · 실제로 닿은 깊이 6~6 · 잎 11~38개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 분기 조건 · n 깊이 5 · 접힘 아래를 접었다 max_depth = 6 뿌리→잎 분기 6번까지 이 트리 실제 깊이 6 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g1_pos_60m ≤ 0.2465 n=1,693 g1_rng_day ≤ 24.27 n=415 g1_rng_60m ≤ 12.97 n=339 g1_pos_day ≤ 0.4643 n=314 g6_rate_CD3개월 ≤ 1.851 n=247 하위 2잎 n=135 하위 2잎 n=112 g1_ret_20m ≤ -2.509 n=67 잎값 +0.3810 n=21 하위 2잎 n=46 잎값 +0.4800 n=25 g1_oi_chg_day ≤ 6417 n=76 g6_rate_통안1년 ≤ 3.193 n=54 잎값 +0.5294 n=34 잎값 +0.4500 n=20 잎값 +0.2727 n=22 g1_pos_60m ≤ 0.5157 n=1,278 g1_ret_1m ≤ -0.7479 n=577 잎값 +0.3448 n=145 g6_dflow_개인순매수수량 ≤ 2.295e+04 n=432 g6_dflow_은행순매수수량 ≤ 2.177e+04 n=326 하위 2잎 n=288 잎값 +0.5263 n=38 g7_invpx_외국인합 ≤ -0.009989 n=106 하위 2잎 n=49 하위 2잎 n=57 g1_ret_10m ≤ 3.524 n=701 g6_rate_통안1년 ≤ 3.389 n=637 g7_basis_국채현물수익률 ≤ 1.093 n=541 하위 2잎 n=59 하위 2잎 n=482 g1p_curve_20m ≤ -7.97 n=96 잎값 +0.6471 n=34 하위 2잎 n=62 g6_days_to_expiry ≤ 56.44 n=64 잎값 +0.6750 n=40 잎값 +0.6250 n=24 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오' · 잎이 많아 깊이 5 아래를 접었다(이 트리 전체 깊이 6 · 잎 28개)
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 C · 마지막 트리 f₄₀₀ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 · 접힘 아래를 접었다 max_depth = 6 뿌리→잎 분기 6번까지 이 트리 실제 깊이 6 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g1_pos_60m ≤ 0.2015 n=1,693 g7_basis_국채현물수익률 ≤ 2.798 n=401 g1_pos_60m ≤ 0.1922 n=249 g1p_curve_60m ≤ 18.05 n=209 하위 4잎 n=176 잎값 +0.4848 n=33 g7_vol ≤ 0.3252 n=40 잎값 +0.5000 n=20 잎값 +0.4000 n=20 g7_basis_시장베이시스 ≤ -0.08185 n=152 g1_ret_1m ≤ -0.0809 n=45 잎값 +0.2857 n=21 잎값 +0.5417 n=24 g7_basis_모드듀레이션 ≤ 2.781 n=107 하위 2잎 n=59 하위 2잎 n=48 g1_ret_1m ≤ 0.7081 n=1,292 g1_ret_120m ≤ -0.8502 n=907 g7_basis_평균선도금리 ≤ 2.556 n=324 하위 3잎 n=216 하위 3잎 n=108 g6_baserate_250d ≤ 0.4408 n=583 하위 3잎 n=191 하위 4잎 n=392 g1_vol_last30_share ≤ 0.087 n=385 g6_prev5_up ≤ 0.3739 n=93 잎값 +0.3462 n=26 하위 2잎 n=67 g6_dow ≤ 2.571 n=292 하위 3잎 n=170 잎값 +0.5984 n=122 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오' · 잎이 많아 깊이 4 아래를 접었다(이 트리 전체 깊이 6 · 잎 33개)
마지막 트리 — 부스팅이면 잔차를 마지막으로 다듬는 트리이고, 배깅이면 다른 무작위 표본으로 키운 또 한 그루다.
그림 D · 400그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g6_is_auction_dayg1_pos_dayg1_pos_60mg1_pos_20mg6_domg6_dowg6_prev_upg6_is_roll_weekg6_days_to_expiryg6_rate_CD3개월g6_rate_CALL1일한은g6_vol_60dg1p_f10_ret_20mg7_basis_국채현물수익률g7_basis_평균선도금리g6_prev5_upg1p_curve_20mg6_baserate_120dg6_dflow_증권선물순매수수량g7_basis_모드듀레이션g1_ma_dev_60mg6_dflow_은행순매수수량g1p_f10_ret_openg6_rate_통안1년g1_ret_10mg1_ret_30mg6_dflow_개인순매수수량g1_vol_dayg6_dflow_외국인합순매수수량g1_ret_1mg7_ktb_yieldg1p_f10_ret_5mg7_flow_aggr_share_chg5g1_ma_dev_20mg1_ret_60mg6_baserate_250dg6_dflow_보험순매수수량g7_basis_저평가g1_vol_last30_shareg1_ret_20mg7_flow_valueg1_ret_5mg1p_f10_ret_60mg6_baserate_20dg6_px_chg_20dg1_vwap_devg7_basis_저평가_chg5g1p_curve_60mg6_baserate_60dg7_flow_aggr_shareg6_vol_20dg7_flow_tradesg7_basis_이론갭g1_ret_openg1_rng_dayg1_rng_60mg6_is_auction_3yg1_ret_120mg6_px_chg_60dg6_prev_d_tickg1_oi_chg_60mg1_rng_20mg6_prev_abs_ref_tickg7_vwap_gap_tickg7_basis_시장베이시스g7_basis_이론베이시스g6_prev_ref_tickg7_rangeg7_basis_이론갭_chg5g1_vol_last5_shareg6_dflow_투신순매수수량g7_basis_평균선도금리_chg5g1_oi_chg_dayg7_ob_cnt_ratiog7_ktb_yield_chg5g7_volg7_vwap_gap_tick_chg5g7_basis_모드듀레이션_chg5g7_basis_국채현물수익률_chg5g7_basis_시장베이시스_chg5g7_flow_value_chg5g7_ob_qty_ratio_chg5g7_ob_cnt_ratio_chg5g7_flow_trades_chg5g6_px_chg_5dg7_oi_chg_chg5g6_rate_통안1년_chg5dg7_range_chg5g7_vol_chg5g6_is_month_endg1_gap_openg6_is_mpc_dayg7_ob_qty_ratiog6_rate_CALL1일한은_chg5dg7_oi_chgg7_invpx_투신_chg5g7_invpx_투신g7_invpx_보험_chg5g7_invpx_은행g7_ob_top5_ratio_chg5g7_ob_top5_ratiog7_invpx_외국인합g7_basis_이론베이시스_chg5g6_rate_CD3개월_chg5dg7_invpx_보험g7_invpx_은행_chg5g7_invpx_증권/선물_chg5g7_invpx_증권/선물g7_invpx_외국인합_chg5g7_invpx_연기금g6_is_quarter_endg7_invpx_연기금_chg5g1_n_barsg6_us_event_todayg6_us_event_prev
깊이 0 (뿌리)33243530972265336120134352915166215150527501116065111263020142211127001021100205100210202021821011400820010121001300010000400
깊이 1404535312116833116916141841067991279513121076711469632441529548610628612674456574263825542465342342414221031632721432122030210012220000762
깊이 2595042343327303319281823191322172211818211516131711810918161319108778139121119612121015481286121310121510797588779129469889711653718263682612537364114116156420300001,269
깊이 384586151373736402633303328272332232218262424202124281714101718222320203118202116221515231914121515141916191412191414102091915121277121481313139145111011910121268476774667310107345647654741200001,867
깊이 4836950654940472645464330302438282736303131293237162238293722242425282726332932132216222319202317252517192316172019152218171018201618231511211514141417151319211614137111210171681513771059513811871041147543030002,393
깊이 5937156645467682352364837234438354243503219403235322428413521402023232826323120282828172321262219292321332422201520192016182626182421222020192523112116242212142021152520229121111111211715998612987106593453000002,717
분기 합392317279275203194191181158152151145126126126125124122120118116116114112108103103102102100999898979493939391878685838080797978787877777574717070696968676666656363626262616160585858575756565452504949474744414039383737363636313127272626262524242321179830009,408

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 400개 합).

RandomForest — 무작위 숲 rf

트리 400그루를 부트스트랩 표본으로 키우고, 분기마다 피처를 √(피처 수)개만 후보로 본다. 최적 분기를 그 후보 안에서 고른다. ExtraTrees 와 같은 배깅 계열인데 분기를 무작위가 아니라 최적으로 고른다 — 그 차이가 성적에 나타나는지 본다.

그림 A · 구조 — T4_daily/rf · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) RandomForest — 무작위 숲 — T4_daily/rf · 시험 2026 f₁ f₂ f₃ f₄ f₅ ··· f₄₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = (1/K) Σ treeₖ(x) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 400 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 400그루 max_depth = 6 뿌리(깊이 0)에서 잎까지 분기 최대 6번 — 그림 B·C 의 오른쪽 눈금 실제 깊이 전부 6 · 상한에 닿은 트리 400/400 min_samples_leaf = 20 잎 하나에 표본 20개 미만이면 그 분할을 하지 않는다 실제 가장 작은 잎 n=20 max_features = sqrt 분할마다 피처 115개 중 10개만 후보로 뽑는다 트리끼리 서로 다른 곳을 보게 만든다 그루별 잎 수 분포 15 17 19 21 23 25 27 29 31 33 35 36 잎 15~36개
트리 400그루 · 실제로 닿은 깊이 6~6 · 잎 15~36개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 분기 조건 · n 깊이 5 · 접힘 아래를 접었다 max_depth = 6 뿌리→잎 분기 6번까지 이 트리 실제 깊이 6 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g1_ret_30m ≤ 1.5 n=1,064 g6_dflow_개인순매수수량 ≤ 4556 n=811 g1_vwap_dev ≤ -0.5 n=387 g7_basis_평균선도금리_chg5 ≤ -0.0725 n=216 잎값 +0.6731 n=29 g7_invpx_외국인합 ≤ -0.515 n=187 잎값 +0.6970 n=20 하위 2잎 n=167 g6_baserate_60d ≤ 0.4083 n=171 g6_rate_통안1년 ≤ 2.305 n=45 잎값 +0.7931 n=23 잎값 +0.6571 n=22 g6_vol_60d ≤ 1.739 n=126 잎값 +0.2391 n=32 하위 2잎 n=94 g1_vol_day ≤ 1.793e+05 n=424 g1_ret_10m ≤ 1.5 n=397 g6_px_chg_20d ≤ 17.5 n=359 하위 2잎 n=229 하위 2잎 n=130 잎값 +0.6364 n=38 잎값 +0.0667 n=27 g7_flow_value_chg5 ≤ 8582459904 n=253 g7_basis_국채현물수익률 ≤ 1.411 n=233 잎값 +0.8627 n=29 g1_ma_dev_60m ≤ 2.5 n=204 g7_invpx_증권/선물 ≤ -0.035 n=105 잎값 +0.6393 n=37 하위 2잎 n=68 g1_pos_20m ≤ 0.7596 n=99 잎값 +0.5106 n=34 하위 2잎 n=65 잎값 +0.2424 n=20 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오' · 잎이 많아 깊이 5 아래를 접었다(이 트리 전체 깊이 6 · 잎 23개)
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 D · 400그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g1p_f10_ret_openg1p_f10_ret_20mg1_oi_chg_60mg1_pos_dayg7_oi_chg_chg5g7_flow_valueg1p_curve_20mg7_vol_chg5g6_dflow_개인순매수수량g7_vwap_gap_tick_chg5g7_invpx_보험g6_px_chg_20dg6_domg1_oi_chg_dayg7_flow_trades_chg5g7_oi_chgg7_flow_aggr_share_chg5g6_days_to_expiryg6_vol_60dg1p_f10_ret_60mg7_invpx_은행g1_ret_20mg7_invpx_투신_chg5g7_invpx_보험_chg5g7_invpx_연기금g7_ob_qty_ratio_chg5g1_vol_last30_shareg6_dflow_은행순매수수량g1p_f10_ret_5mg7_ob_qty_ratiog1_pos_60mg1_vol_dayg6_dflow_외국인합순매수수량g7_flow_value_chg5g1_ret_30mg7_vwap_gap_tickg7_flow_tradesg7_volg1_pos_20mg6_dflow_투신순매수수량g7_invpx_증권/선물_chg5g7_flow_aggr_shareg7_invpx_연기금_chg5g7_ob_top5_ratiog7_ob_cnt_ratiog6_rate_통안1년_chg5dg7_ob_cnt_ratio_chg5g1_vol_last5_shareg7_basis_평균선도금리g7_invpx_증권/선물g6_dflow_증권선물순매수수량g6_rate_CALL1일한은_chg5dg1_ret_openg1p_curve_60mg6_dflow_보험순매수수량g6_vol_20dg6_px_chg_60dg6_rate_통안1년g6_rate_CD3개월g7_invpx_은행_chg5g6_rate_CALL1일한은g7_invpx_외국인합g7_basis_국채현물수익률_chg5g7_invpx_투신g7_range_chg5g1_ret_60mg1_vwap_devg7_basis_모드듀레이션g7_basis_시장베이시스g7_invpx_외국인합_chg5g7_ktb_yield_chg5g7_basis_이론베이시스g1_ma_dev_60mg7_ob_top5_ratio_chg5g1_ret_120mg6_baserate_250dg7_basis_평균선도금리_chg5g1_ma_dev_20mg7_basis_시장베이시스_chg5g7_basis_이론갭_chg5g6_px_chg_5dg1_ret_10mg7_basis_이론갭g7_ktb_yieldg1_rng_dayg6_baserate_120dg7_basis_국채현물수익률g1_gap_openg6_is_auction_dayg1_rng_60mg7_basis_저평가_chg5g1_ret_5mg7_basis_이론베이시스_chg5g7_basis_모드듀레이션_chg5g6_dowg7_basis_저평가g7_rangeg6_baserate_60dg1_ret_1mg6_baserate_20dg6_prev_ref_tickg6_rate_CD3개월_chg5dg1_rng_20mg6_prev_abs_ref_tickg6_prev_d_tickg6_prev5_upg6_is_roll_weekg6_prev_upg6_is_auction_3yg6_is_month_endg1_n_barsg6_is_quarter_endg6_is_mpc_dayg6_us_event_todayg6_us_event_prev
깊이 0 (뿌리)2135916101431300151222322027201001120240112330017113102110121056000040000101683001124070121100100100103001100000030011010200000000400
깊이 1302015152091510111779107571197153246510767164171381614541539558831324105210923361273105691287241226173215474716944413451124142052314422300100000786
깊이 222313035262121181610161718121115201412101917191312191415111311188142311811131617162191615111611115141216111681216914131011151319911101210146147912121310136101011101413912129978651066923143100000001,375
깊이 33234322334262926273233262622323126282811311618232423261824272334202313192622112520291219151818191619201314181919242116193216222613122017211412211615131522122012211420151116101111181311911792111884495731311000002,016
깊이 44333472630392839413432382824352732283535271632353523443722291523332516272731182526192731233027262630292626222623202324241827282025161428182724258241420121022191612231414131522132016919181510814914109510931111000002,465
깊이 534213441344729403835383438503637273631223513363729392032243517314034132935332630252531283127243035213237231931273326162819202121221414192926192010311929283142221141922232325121011165171320191013712141197381320000002,609
분기 합18217416715614514213613613413112612412112012011911811711611511511311311311111111011010910810710710510510410310110110010098979795959494939393929290908988888888878686868584838383818180797877747474737373727069686767656363626259565550504743424237353029232011843000009,651

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 400개 합).

Bagging — 배깅한 결정트리 bag

깊이 6 결정트리 200그루를 부트스트랩 표본과 피처 70% 로 키워 평균낸다. 무작위 숲에서 '분기 후보 제한' 만 뺀 것이다. 배깅의 효과와 피처 무작위화의 효과를 갈라 보려고 넣었다.

그림 A · 구조 — T4_daily/bag · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) Bagging — 배깅한 결정트리 — T4_daily/bag · 시험 2026 f₁ f₂ f₃ f₄ f₅ ··· f₂₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = (1/K) Σ treeₖ(x) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 200 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 200그루 max_features = 0.7 분할마다 후보 피처를 일부만 뽑는다 트리끼리 서로 다른 곳을 보게 만든다 그루별 잎 수 분포 14 16 18 20 22 24 26 28 30 32 34 35 잎 14~35개
트리 200그루 · 실제로 닿은 깊이 6~6 · 잎 14~35개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 · 접힘 아래를 접었다 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g1p_f10_ret_20m ≤ 3.5 n=1,071 g6_vol_60d ≤ -2.05 n=602 g1p_f10_ret_open ≤ 0.1791 n=196 g7_range ≤ -5.5 n=54 잎값 +0.3864 n=31 잎값 +0.0286 n=23 g1_rng_20m ≤ 0.325 n=142 하위 3잎 n=66 하위 3잎 n=76 g1p_f10_ret_20m ≤ -28.5 n=406 g7_ob_qty_ratio ≤ 24430 n=114 하위 3잎 n=91 잎값 +0.1538 n=23 g6_is_auction_day ≤ 155.5 n=292 하위 3잎 n=269 잎값 +0.6316 n=23 g1p_f10_ret_open ≤ 0.931 n=469 g6_rate_통안1년_chg5d ≤ -0.5 n=400 g6_vol_60d ≤ -2.95 n=99 잎값 +0.6170 n=36 하위 2잎 n=63 g1p_curve_20m ≤ 0.6934 n=301 하위 4잎 n=263 잎값 +0.3077 n=38 g1p_curve_20m ≤ 0.1906 n=69 g7_basis_시장베이시스 ≤ 16 n=49 잎값 +0.7037 n=21 잎값 +0.9756 n=28 잎값 +0.5625 n=20 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오' · 잎이 많아 깊이 4 아래를 접었다(이 트리 전체 깊이 6 · 잎 27개)
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 D · 200그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g6_baserate_60dg1_rng_60mg6_baserate_120dg6_prev_abs_ref_tickg6_rate_CALL1일한은g1_ret_1mg1p_f10_ret_5mg1p_curve_20mg6_px_chg_20dg1_n_barsg6_is_mpc_dayg1_ret_5mg6_dflow_은행순매수수량g6_dflow_보험순매수수량g1_ma_dev_20mg6_prev5_upg6_rate_CALL1일한은_chg5dg6_dflow_증권선물순매수수량g6_baserate_20dg6_days_to_expiryg7_ob_top5_ratiog7_ktb_yieldg1_pos_60mg1_vol_last5_shareg6_px_chg_5dg7_vwap_gap_tickg1_ret_10mg1_ret_120mg1_oi_chg_dayg7_flow_valueg1_vwap_devg1p_f10_ret_openg6_vol_20dg7_ob_qty_ratiog7_flow_tradesg7_basis_시장베이시스g1_vol_dayg6_baserate_250dg6_is_quarter_endg6_is_auction_dayg1_pos_dayg1p_f10_ret_20mg1p_f10_ret_60mg6_is_auction_3yg6_dflow_투신순매수수량g6_us_event_todayg7_rangeg1_rng_20mg1_rng_dayg6_px_chg_60dg6_dowg7_oi_chgg1_ret_20mg1_ret_30mg6_prev_upg6_prev_ref_tickg6_prev_d_tickg7_volg1p_curve_60mg6_rate_통안1년g1_ret_60mg6_domg6_is_month_endg7_basis_이론베이시스g1_ma_dev_60mg6_rate_CD3개월_chg5dg1_pos_20mg6_us_event_prevg1_gap_openg6_vol_60dg1_vol_last30_shareg6_is_roll_weekg7_flow_aggr_shareg6_rate_CD3개월g6_rate_통안1년_chg5dg6_dflow_외국인합순매수수량g1_ret_openg1_oi_chg_60mg7_ob_cnt_ratiog6_dflow_개인순매수수량g7_basis_저평가g7_basis_이론갭g7_basis_모드듀레이션g7_basis_국채현물수익률g7_basis_평균선도금리g7_invpx_외국인합g7_invpx_증권/선물g7_invpx_은행g7_invpx_투신g7_invpx_보험g7_invpx_연기금g7_ob_qty_ratio_chg5g7_ob_top5_ratio_chg5g7_ob_cnt_ratio_chg5g7_flow_aggr_share_chg5g7_flow_trades_chg5g7_flow_value_chg5g7_vol_chg5g7_range_chg5g7_oi_chg_chg5g7_ktb_yield_chg5g7_vwap_gap_tick_chg5g7_basis_시장베이시스_chg5g7_basis_이론베이시스_chg5g7_basis_저평가_chg5g7_basis_이론갭_chg5g7_basis_모드듀레이션_chg5g7_basis_국채현물수익률_chg5g7_basis_평균선도금리_chg5g7_invpx_외국인합_chg5g7_invpx_증권/선물_chg5g7_invpx_은행_chg5g7_invpx_투신_chg5g7_invpx_보험_chg5g7_invpx_연기금_chg5
깊이 0 (뿌리)7145325223024253262424325144501233122211022551333243512213201123340241411042111300000000000000000000000000000000000200
깊이 186114256441041214226425741068352364553643244636763496427737846566547369458144546254300000000000000000000000000000000000400
깊이 2911614101212121015961171111971110171271211610814139109167111815494116661213117898712731078782851233138910598761072600000000000000000000000000000000000724
깊이 316202313161515181712121313252018171213101015158121912151114171612141013171114181511191313141898111511141616171016101281598111591612138914914111161410000000000000000000000000000000000001,081
깊이 4232419212224201916192418191916182115202212151121141817241818211618122321161321152317151917131014211514181412915161718132119171391416913121313111711141491212000000000000000000000000000000000001,322
깊이 5211916202316161925142421241517191626211821192219182119141616141719181915922201715191513161914151620161312151814181015201315172118141811121117211413121212201210000000000000000000000000000000000001,351
분기 합8481797776747474747373727272717171706969696968686868676767676666666666666565646463636363636262616160606059595959595958585757575756565555545453535352525150484544000000000000000000000000000000000005,078

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 200개 합).

LightGBM — 히스토그램 그래디언트 부스팅 lgb

피처를 미리 구간으로 묶어 빠르게 트리 400그루를 순서대로 키운다. 잎 수(15)로 복잡도를 제한한다. 실무에서 표 데이터의 기본값으로 쓰이는 모델이다.

그림 A · 구조 — T4_daily/lgb · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) LightGBM — 히스토그램 그래디언트 부스팅 — T4_daily/lgb · 시험 2026 f₁ f₂ f₃ f₄ f₅ ··· f₄₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = σ(Σₖ ηf̂ₖ(x)) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 400 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 400그루 max_depth = 4 뿌리(깊이 0)에서 잎까지 분기 최대 4번 — 그림 B·C 의 오른쪽 눈금 실제 깊이 전부 4 · 상한에 닿은 트리 400/400 num_leaves = 15 트리 한 그루의 잎(끝 상자) 최대 개수 실제 잎 5~15개 · 상한에 닿은 트리 12/400 min_data_in_leaf = 40 잎 하나에 학습 표본 40개 미만이면 그 분기를 하지 않는다 실제 가장 작은 잎 n=29 (하한 40 아래 — 근사 검사, 오류 아님) feature_fraction = 0.7 트리마다 피처 115개 중 70%만 무작위로 후보에 올린다 → 그림 D 의 피처별 분기 횟수가 고르게 퍼지는 이유 learning_rate = 0.03 트리 하나가 더하는 값 = 적합값 × 0.03 (아래 잎값에 이미 곱해져 있다) 작을수록 트리 한 그루의 발언권이 작다 그루별 잎 수 분포 5 6 7 8 9 10 11 12 13 14 15 잎 5~15개 · 상한 15
트리 400그루 · 실제로 닿은 깊이 4~4 · 잎 5~15개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 · 잎 분기 없음 max_depth = 4 뿌리→잎 분기 4번까지 이 트리 실제 깊이 4 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g1p_f10_ret_20m ≤ 2.5 n=1,381 g1p_f10_ret_open ≤ 5.5 n=904 g7_basis_시장베이시스 ≤ -0.0685 n=608 g7_invpx_외국인합_chg5 ≤ 0.045 n=223 잎값 -0.1896 n=117 잎값 -0.2142 n=106 g7_invpx_투신_chg5 ≤ 3.095 n=385 잎값 -0.2216 n=340 잎값 -0.1912 n=45 g1p_f10_ret_20m ≤ -6.5 n=296 g7_basis_이론베이시스 ≤ 0 n=81 잎값 -0.1897 n=40 잎값 -0.2261 n=41 g6_rate_CALL1일한은 ≤ 1.222 n=215 잎값 -0.2045 n=46 잎값 -0.1784 n=169 g6_dflow_개인순매수수량 ≤ 2.909e+04 n=477 g1_gap_open ≤ 8.5 n=407 g1_gap_open ≤ 3.5 n=351 잎값 -0.1844 n=275 잎값 -0.1620 n=76 잎값 -0.2045 n=56 잎값 -0.2070 n=70 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오'
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 D · 400그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g1p_f10_ret_openg7_vol_chg5g7_oi_chg_chg5g6_px_chg_20dg6_domg7_flow_valueg1_vol_dayg7_ob_cnt_ratiog7_invpx_은행g6_px_chg_60dg7_invpx_연기금g7_invpx_은행_chg5g7_flow_trades_chg5g1_oi_chg_dayg6_dflow_은행순매수수량g7_flow_aggr_shareg7_invpx_증권/선물_chg5g7_flow_value_chg5g1_vol_last5_shareg7_oi_chgg7_invpx_연기금_chg5g1_vol_last30_shareg1_gap_openg7_ob_top5_ratio_chg5g7_invpx_투신_chg5g1_oi_chg_60mg6_baserate_120dg7_volg6_dflow_보험순매수수량g7_invpx_보험g7_invpx_보험_chg5g7_flow_aggr_share_chg5g6_vol_60dg7_ob_qty_ratio_chg5g6_rate_CALL1일한은_chg5dg7_ob_cnt_ratio_chg5g6_dflow_투신순매수수량g7_flow_tradesg7_invpx_투신g1p_f10_ret_20mg6_dflow_증권선물순매수수량g7_ob_top5_ratiog6_days_to_expiryg6_rate_통안1년_chg5dg7_ob_qty_ratiog7_vwap_gap_tickg7_vwap_gap_tick_chg5g1_rng_dayg6_dowg6_is_auction_dayg6_baserate_250dg7_basis_저평가_chg5g6_dflow_개인순매수수량g7_range_chg5g1_ret_120mg1_pos_dayg6_dflow_외국인합순매수수량g6_prev5_upg6_rate_CD3개월_chg5dg1p_curve_20mg7_basis_시장베이시스g7_basis_국채현물수익률_chg5g7_invpx_증권/선물g7_invpx_외국인합_chg5g1_ret_1mg1_ret_20mg6_rate_CALL1일한은g7_ktb_yield_chg5g1_ret_openg1_pos_20mg6_rate_통안1년g1_ret_30mg6_prev_d_tickg1_ret_10mg1_pos_60mg1p_curve_60mg7_basis_저평가g1p_f10_ret_60mg7_invpx_외국인합g1p_f10_ret_5mg7_basis_국채현물수익률g6_baserate_60dg7_basis_이론베이시스_chg5g1_rng_20mg6_px_chg_5dg7_basis_평균선도금리_chg5g1_vwap_devg7_basis_이론베이시스g7_basis_시장베이시스_chg5g7_basis_이론갭_chg5g6_rate_CD3개월g7_basis_이론갭g6_vol_20dg7_ktb_yieldg1_rng_60mg7_rangeg1_ma_dev_20mg6_baserate_20dg6_prev_ref_tickg7_basis_모드듀레이션g7_basis_모드듀레이션_chg5g7_basis_평균선도금리g1_ret_5mg1_ret_60mg6_prev_abs_ref_tickg1_ma_dev_60mg6_is_auction_3yg6_is_mpc_dayg1_n_barsg6_prev_upg6_is_month_endg6_is_quarter_endg6_is_roll_weekg6_us_event_todayg6_us_event_prev
깊이 0 (뿌리)71118111396122403034011113811019522206148801123201530072662511012143266314011172215466133230220200001102210001201120100100000000400
깊이 120171591318910101413148131212111291391571112161081586108311695104747977766965867357533643646254637426455941121562143222132101221112000000000706
깊이 2192213222617211521172118171611181215151112201016161111121416171013161012151391319121498151011861116121188811691059751076865946466745736654523521434653434023400100000001,049
깊이 331272929152225232622232130222724201525202016141820208231819161824242123152222811231511197121313614981191413310111211121423914877349115841025138810741010679686224653442210000000001,384
분기 합7777757167666160595757565554545454535252525150505049494948474746454443434242414040393636363535323232313130292828282727262626252524242424222222212120202020191918181717161616151515151414131311111010101010877731100000003,539
손실 감소(gain) 몫2.8%2.1%2.1%2.2%2.2%1.9%1.8%1.5%1.6%1.5%1.5%1.5%1.6%1.4%1.5%1.3%1.4%1.4%1.2%1.4%1.3%1.5%1.2%1.3%1.3%1.4%1.2%1.3%1.2%1.1%1.2%1.4%1.1%1.2%1.1%1.1%1.1%1.1%1.1%2.1%1.1%1.0%1.0%1.0%0.9%1.0%1.0%0.9%0.9%1.3%0.7%1.0%0.8%0.7%0.8%0.9%0.7%0.7%0.7%0.8%0.7%0.7%0.7%0.7%0.6%1.2%0.6%0.6%0.6%0.8%0.6%0.9%0.5%0.6%0.7%0.6%0.5%0.5%0.5%0.8%0.5%0.5%0.4%0.4%0.4%0.5%0.6%0.4%0.4%0.4%0.4%0.4%0.3%0.3%0.3%0.3%0.4%0.3%0.2%0.2%0.2%0.2%0.2%0.2%0.2%0.1%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%100%

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 400개 합).

XGBoost — 정규화 그래디언트 부스팅 xgb

LightGBM 과 같은 부스팅인데 트리를 깊이 우선으로 키우고 손실에 정규화 항을 직접 넣는다. 같은 부스팅이라도 구현이 다르면 성적이 갈리는지 본다.

그림 A · 구조 — T4_daily/xgb · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) XGBoost — 정규화 그래디언트 부스팅 — T4_daily/xgb · 시험 2026 f₁ f₂ f₃ f₄ f₅ ··· f₄₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = σ(Σₖ ηf̂ₖ(x)) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 400 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 400그루 max_depth = 4 뿌리(깊이 0)에서 잎까지 분기 최대 4번 — 그림 B·C 의 오른쪽 눈금 실제 깊이 전부 4 · 상한에 닿은 트리 400/400 feature_fraction = 0.7 트리마다 피처 115개 중 70%만 무작위로 후보에 올린다 → 그림 D 의 피처별 분기 횟수가 고르게 퍼지는 이유 learning_rate = 0.03 트리 하나가 더하는 값 = 적합값 × 0.03 (아래 잎값에 이미 곱해져 있다) 작을수록 트리 한 그루의 발언권이 작다 그루별 잎 수 분포 5 6 7 8 9 10 11 12 13 14 15 16 잎 5~16개
트리 400그루 · 실제로 닿은 깊이 4~4 · 잎 5~16개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 · 잎 분기 없음 max_depth = 4 뿌리→잎 분기 4번까지 이 트리 실제 깊이 4 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g1_ret_20m < 0 g6_is_auction_day < 1 g7_flow_aggr_share_chg5 < 0.0004567 g1_pos_day < 0.4091 잎값 +0.0012 잎값 +0.0321 g7_basis_시장베이시스 < -0.039 잎값 +0.0055 잎값 -0.0235 g1p_f10_ret_open < -3 g1_ret_10m < -3 잎값 +0.0002 잎값 -0.0313 g7_ob_cnt_ratio_chg5 < 0.5316 잎값 -0.0009 잎값 -0.0289 g1p_f10_ret_60m < 17 g7_oi_chg_chg5 < 7390 g1_oi_chg_day < -9415 잎값 +0.0348 잎값 +0.0064 g6_rate_CALL1일한은 < 1.385 잎값 -0.0294 잎값 -0.0011 g7_flow_aggr_share_chg5 < -0.0005116 잎값 +0.0454 잎값 +0.0056 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오'
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 D · 400그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g7_vol_chg5g7_flow_valueg7_oi_chg_chg5g6_px_chg_20dg7_flow_aggr_share_chg5g7_flow_trades_chg5g6_px_chg_60dg1p_f10_ret_openg6_domg7_invpx_은행g6_dflow_은행순매수수량g7_invpx_은행_chg5g1_vol_last5_shareg1_vol_dayg6_baserate_120dg7_invpx_보험_chg5g7_ob_cnt_ratio_chg5g7_invpx_보험g1_oi_chg_dayg1_gap_openg7_flow_value_chg5g7_ob_cnt_ratiog7_flow_aggr_shareg1_oi_chg_60mg7_invpx_연기금g7_invpx_투신_chg5g1_vol_last30_shareg6_dflow_개인순매수수량g7_oi_chgg7_invpx_연기금_chg5g7_ob_top5_ratiog6_rate_CALL1일한은_chg5dg1_pos_dayg6_dflow_보험순매수수량g6_vol_60dg6_dflow_투신순매수수량g7_ob_top5_ratio_chg5g7_vwap_gap_tickg1p_f10_ret_20mg7_ob_qty_ratiog7_volg7_invpx_증권/선물_chg5g6_dflow_증권선물순매수수량g7_ob_qty_ratio_chg5g7_basis_국채현물수익률_chg5g1_rng_dayg6_rate_CALL1일한은g6_dowg7_vwap_gap_tick_chg5g6_prev5_upg6_is_auction_dayg6_dflow_외국인합순매수수량g1_ret_30mg6_days_to_expiryg7_basis_저평가g7_invpx_투신g1_ret_120mg6_rate_통안1년_chg5dg7_flow_tradesg7_invpx_증권/선물g1_ret_20mg6_rate_CD3개월_chg5dg1_ret_1mg6_baserate_250dg7_basis_시장베이시스g7_invpx_외국인합g7_ktb_yield_chg5g7_invpx_외국인합_chg5g1p_f10_ret_60mg1p_curve_20mg6_prev_d_tickg6_rate_통안1년g6_rate_CD3개월g1_ret_10mg1_ret_openg6_vol_20dg7_basis_이론베이시스_chg5g1_rng_60mg1p_f10_ret_5mg1p_curve_60mg7_range_chg5g7_basis_저평가_chg5g7_basis_이론갭_chg5g1_pos_20mg1_pos_60mg6_baserate_20dg6_px_chg_5dg7_basis_평균선도금리_chg5g6_baserate_60dg7_basis_이론베이시스g7_basis_국채현물수익률g7_basis_시장베이시스_chg5g1_vwap_devg7_rangeg1_ret_5mg1_rng_20mg7_basis_모드듀레이션_chg5g1_ret_60mg6_prev_ref_tickg7_basis_모드듀레이션g1_ma_dev_60mg6_prev_abs_ref_tickg1_ma_dev_20mg7_ktb_yieldg7_basis_이론갭g7_basis_평균선도금리g6_is_auction_3yg1_n_barsg6_prev_upg6_is_month_endg6_is_quarter_endg6_is_roll_weekg6_is_mpc_dayg6_us_event_todayg6_us_event_prev
깊이 0 (뿌리)1210106912161125135211023516910272121268443304331323841211379122432015118470002022635413118002121110014000200120102111100000000400
깊이 1211322151213121412109121010871012891296122712127788755889710984383910711659654882271092336355645150532372432424233211333240202122200000000680
깊이 2242117232427211718191621172091518151610171314132016101215161311141615141211811105121115107664994711118761256210996795456847534447312436160235333012021212000000000994
깊이 33028222322263017232727202318152021201912914241321102118161318191716191316159141515141991815121052131112101310717114451111119136959571010912512777884739258752445153401101000000001,281
분기 합877271676767656464585754535353525150484747464645454544444444434241403939393837373736343434323231302929292828282827272626242423232323232322212121212020202019191918181514131313131212121211111010108876655554000000003,355
손실 감소(gain) 몫0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%0.0%100%

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 400개 합).

HistGradientBoosting — scikit-learn 히스토그램 부스팅 hgb

LightGBM 과 같은 계열의 scikit-learn 구현. 피처를 256구간으로 묶고 400회 반복한다. 부스팅 구현 셋을 같은 자리에서 맞대기 위해 넣었다.

그림 A · 구조 — T4_daily/hgb · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) HistGradientBoosting — scikit-learn 히스토그램 부스팅 — T4_daily/hgb · 시험 2026 f₁ f₂ f₃ f₄ f₅ ··· f₄₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = σ(Σₖ ηf̂ₖ(x)) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 400 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 400그루 max_depth = 4 뿌리(깊이 0)에서 잎까지 분기 최대 4번 — 그림 B·C 의 오른쪽 눈금 실제 깊이 전부 4 · 상한에 닿은 트리 400/400 min_samples_leaf = 40 잎 하나에 표본 40개 미만이면 그 분할을 하지 않는다 실제 가장 작은 잎 n=40 max_features = 1.0 분할마다 후보 피처를 일부만 뽑는다 트리끼리 서로 다른 곳을 보게 만든다 learning_rate = 0.03 트리 하나가 더하는 값 = 적합값 × 0.03 (아래 잎값에 이미 곱해져 있다) 작을수록 트리 한 그루의 발언권이 작다 그루별 잎 수 분포 5 7 9 11 13 15 17 19 21 23 25 27 29 31 잎 5~16개 · 상한 31
트리 400그루 · 실제로 닿은 깊이 4~4 · 잎 5~16개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 · 잎 분기 없음 max_depth = 4 뿌리→잎 분기 4번까지 이 트리 실제 깊이 4 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g1p_f10_ret_20m ≤ -0.5 n=1,693 g1_pos_day ≤ 0.5 n=829 g7_invpx_투신_chg5 ≤ 2.47 n=532 g6_is_auction_day ≤ 0.5 n=431 잎값 -0.0056 n=129 잎값 -0.0274 n=302 g6_baserate_120d ≤ 0.4674 n=101 잎값 -0.0218 n=47 잎값 +0.0223 n=54 g7_ktb_yield_chg5 ≤ 0.021 n=297 g7_ob_top5_ratio ≤ 1.097 n=191 잎값 -0.0200 n=97 잎값 +0.0070 n=94 g1_oi_chg_60m ≤ -1202 n=106 잎값 +0.0044 n=49 잎값 +0.0304 n=57 g7_vwap_gap_tick_chg5 ≤ -3.4 n=864 g6_dom ≤ 20.5 n=264 g7_invpx_보험_chg5 ≤ 1.41 n=161 잎값 +0.0445 n=85 잎값 +0.0117 n=76 g7_invpx_은행_chg5 ≤ -0.68 n=103 잎값 +0.0265 n=42 잎값 -0.0102 n=61 g1p_f10_ret_5m ≤ 1.5 n=600 g6_dflow_개인순매수수량 ≤ 16839 n=300 잎값 +0.0053 n=202 잎값 -0.0204 n=98 g7_invpx_보험 ≤ -2.01 n=300 잎값 -0.0030 n=73 잎값 +0.0171 n=227 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오'
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 D · 400그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g1_vol_dayg7_oi_chg_chg5g6_baserate_120dg7_flow_valueg7_invpx_은행_chg5g6_domg7_flow_trades_chg5g1_vol_last30_shareg7_vol_chg5g1p_f10_ret_openg6_rate_CALL1일한은_chg5dg7_flow_aggr_share_chg5g6_px_chg_60dg7_invpx_보험g1_gap_openg7_flow_value_chg5g6_px_chg_20dg7_invpx_투신_chg5g6_dflow_은행순매수수량g7_ob_cnt_ratiog7_invpx_연기금_chg5g7_invpx_은행g1_oi_chg_60mg1_oi_chg_dayg6_rate_CD3개월_chg5dg7_oi_chgg7_ob_top5_ratio_chg5g6_is_auction_dayg7_invpx_보험_chg5g1_ret_20mg6_dflow_투신순매수수량g6_dflow_개인순매수수량g7_flow_tradesg7_vwap_gap_tickg1p_f10_ret_20mg7_vwap_gap_tick_chg5g1_ret_120mg1_vol_last5_shareg6_vol_20dg6_rate_통안1년_chg5dg7_basis_저평가g6_prev5_upg7_ob_qty_ratiog7_volg7_flow_aggr_shareg7_invpx_투신g7_invpx_연기금g6_dflow_증권선물순매수수량g7_invpx_증권/선물_chg5g1_pos_dayg6_dflow_보험순매수수량g1_ret_openg1p_f10_ret_5mg6_days_to_expiryg7_ob_qty_ratio_chg5g7_range_chg5g1_ret_1mg1_ret_30mg1p_f10_ret_60mg6_dowg7_basis_국채현물수익률_chg5g1_ret_10mg6_prev_d_tickg7_ob_cnt_ratio_chg5g6_dflow_외국인합순매수수량g7_ob_top5_ratiog1_rng_dayg7_basis_저평가_chg5g7_basis_평균선도금리_chg5g6_rate_CALL1일한은g7_invpx_외국인합_chg5g7_basis_시장베이시스_chg5g6_baserate_250dg6_vol_60dg7_basis_이론베이시스g7_invpx_외국인합g7_invpx_증권/선물g7_ktb_yield_chg5g7_basis_이론베이시스_chg5g1_pos_60mg1_ret_60mg1p_curve_20mg1p_curve_60mg6_baserate_20dg7_basis_시장베이시스g1_ret_5mg6_baserate_60dg1_rng_60mg1_pos_20mg6_rate_CD3개월g7_basis_평균선도금리g7_ktb_yieldg7_basis_국채현물수익률g6_rate_통안1년g7_basis_이론갭_chg5g1_vwap_devg6_prev_ref_tickg6_px_chg_5dg1_rng_20mg6_prev_abs_ref_tickg7_rangeg7_basis_이론갭g7_basis_모드듀레이션g7_basis_모드듀레이션_chg5g1_ma_dev_20mg1_ma_dev_60mg6_is_roll_weekg6_is_auction_3yg1_n_barsg6_prev_upg6_is_month_endg6_is_quarter_endg6_is_mpc_dayg6_us_event_todayg6_us_event_prev
깊이 0 (뿌리)1022368020005301302322215102111600030925184004139513401200000040006000120500050900001070000000500200300313006000000000000000000000400
깊이 1102061217151816272719101524151491216122081966932197590101531013434586251013911070102135153410810210128161203030360010131081001000200000000000000000693
깊이 2432321352021232712221619615612181023971982516710221692010512581371218161113175121165102389707323173578953247246146522667710131314420410020102312220000000966
깊이 324181523371631282717322342431825202118201219211583220819719132521131492017814420179221815111211441120164812641638413148761131291610119156395537694014602453132310100000000001,328
분기 합87837878747272717169676563626060585552525150494846454544444241404039383837373737363535353433323131303028282727262524242424232323222221212119191817171717171717161515141313121211101098876555333333222200000003,387
손실 감소(gain) 몫2.6%2.2%1.7%2.3%2.3%2.2%2.0%2.3%2.0%2.9%1.9%2.0%1.9%1.9%1.2%1.4%1.5%1.4%1.5%1.0%1.2%1.6%1.7%1.3%1.1%1.1%1.0%1.7%1.3%2.1%1.1%1.0%1.1%1.3%2.9%0.9%1.0%1.0%1.0%0.9%1.0%0.7%0.9%1.4%0.9%1.1%0.8%0.8%0.9%1.3%0.8%0.9%1.2%1.0%0.8%0.8%0.5%0.9%0.6%0.6%0.7%0.8%0.5%0.5%0.6%0.6%0.6%0.8%0.5%0.5%0.5%0.3%0.5%0.5%0.5%0.4%0.5%0.6%0.4%1.0%0.3%0.6%0.5%0.5%0.3%0.3%0.4%0.4%0.5%0.2%0.2%0.2%0.2%0.1%0.2%0.1%0.2%0.1%0.1%0.1%0.1%0.1%0.0%0.1%0.1%0.1%0.0%0.1%0.0%0.0%0.0%0.0%0.0%0.0%0.0%100%

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 400개 합).

GradientBoosting — 고전 그래디언트 부스팅 gbdt

구간으로 묶지 않고 원래 값에서 최적 분기를 찾는다. 느리지만 히스토그램 근사가 없는 기준선이다. 히스토그램 근사가 성적을 깎는지 재려고 넣었다.

그림 A · 구조 — T4_daily/gbdt · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) GradientBoosting — 고전 그래디언트 부스팅 — T4_daily/gbdt · 시험 2026 f₁ f₂ f₃ f₄ f₅ ··· f₃₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = σ(Σₖ ηf̂ₖ(x)) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 300 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 300그루 max_depth = 3 뿌리(깊이 0)에서 잎까지 분기 최대 3번 — 그림 B·C 의 오른쪽 눈금 실제 깊이 전부 3 · 상한에 닿은 트리 300/300 min_samples_leaf = 20 잎 하나에 표본 20개 미만이면 그 분할을 하지 않는다 실제 가장 작은 잎 n=20 learning_rate = 0.03 트리 하나가 더하는 값 = 적합값 × 0.03 (아래 잎값에 이미 곱해져 있다) 작을수록 트리 한 그루의 발언권이 작다 그루별 잎 수 분포 4 5 6 7 8 잎 4~8개
트리 300그루 · 실제로 닿은 깊이 3~3 · 잎 4~8개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 · 잎 분기 없음 max_depth = 3 뿌리→잎 분기 3번까지 이 트리 실제 깊이 3 아니오 아니오 아니오 아니오 아니오 아니오 g1p_f10_ret_open ≤ 8.5 n=1,354 g1p_f10_ret_20m ≤ 2.5 n=854 g1_rng_day ≤ 23.5 n=645 잎값 -0.5193 n=565 잎값 +0.3002 n=80 g7_oi_chg_chg5 ≤ -9814 n=209 잎값 +1.4371 n=31 잎값 +0.0177 n=178 g7_flow_aggr_share_chg5 ≤ 0.202 n=500 g1p_f10_ret_20m ≤ -3.5 n=480 잎값 -0.2292 n=99 잎값 +0.6392 n=381 잎값 -1.2145 n=20 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오'
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 D · 300그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g7_flow_valueg7_oi_chg_chg5g6_dflow_은행순매수수량g6_domg7_vol_chg5g1_vol_last30_shareg1p_f10_ret_openg6_px_chg_20dg1_vol_dayg7_flow_aggr_share_chg5g7_flow_value_chg5g6_baserate_120dg7_ob_cnt_ratiog7_oi_chgg7_invpx_은행_chg5g6_dflow_증권선물순매수수량g1_oi_chg_dayg7_flow_aggr_shareg7_invpx_보험g1_vol_last5_shareg1_oi_chg_60mg7_vwap_gap_tickg7_flow_trades_chg5g7_invpx_보험_chg5g7_invpx_연기금_chg5g1p_f10_ret_20mg6_dflow_보험순매수수량g7_invpx_은행g7_invpx_투신_chg5g6_px_chg_60dg6_is_auction_dayg7_vwap_gap_tick_chg5g6_dflow_투신순매수수량g6_rate_CALL1일한은_chg5dg7_ob_top5_ratio_chg5g1_ret_120mg1_gap_openg7_invpx_투신g7_invpx_증권/선물_chg5g1p_f10_ret_5mg6_prev5_upg7_ob_qty_ratiog7_ob_qty_ratio_chg5g1_ret_20mg1_pos_dayg1_ret_1mg1_ret_30mg6_rate_통안1년_chg5dg6_rate_CD3개월_chg5dg7_ob_cnt_ratio_chg5g1_ret_openg1p_curve_20mg6_days_to_expiryg6_rate_CALL1일한은g7_basis_저평가g7_range_chg5g6_dflow_개인순매수수량g6_rate_통안1년g7_invpx_연기금g1p_f10_ret_60mg6_vol_60dg7_basis_저평가_chg5g7_basis_이론갭_chg5g1_ret_10mg1_rng_dayg6_dowg7_volg7_basis_국채현물수익률_chg5g7_invpx_외국인합_chg5g1_rng_60mg1p_curve_60mg6_prev_d_tickg6_dflow_외국인합순매수수량g7_ktb_yield_chg5g7_ob_top5_ratiog7_basis_평균선도금리g1_ret_5mg1_pos_20mg6_baserate_20dg6_vol_20dg6_rate_CD3개월g7_basis_시장베이시스g7_basis_시장베이시스_chg5g1_ma_dev_20mg1_pos_60mg1_vwap_devg7_flow_tradesg7_basis_이론베이시스g7_basis_국채현물수익률g7_invpx_외국인합g7_invpx_증권/선물g7_basis_평균선도금리_chg5g1_ma_dev_60mg6_px_chg_5dg7_rangeg7_ktb_yieldg7_basis_이론갭g7_basis_이론베이시스_chg5g1_rng_20mg6_baserate_250dg6_is_roll_weekg1_ret_60mg6_baserate_60dg6_prev_abs_ref_tickg6_is_mpc_dayg7_basis_모드듀레이션g7_basis_모드듀레이션_chg5g6_prev_ref_tickg6_is_auction_3yg1_n_barsg6_prev_upg6_is_month_endg6_is_quarter_endg6_us_event_todayg6_us_event_prev
깊이 0 (뿌리)91561254811117713661751422007107235082636170364011146530213143122021011020010050013100000014001200000000000210000000000000300
깊이 118171491491379131369814689411718855811671212778768855483322459474254629632546152433213304113214021121112212000000011011010000000544
깊이 2201523182020121512111010141514151417191317818141110121612113149119146121281110143118787107812577927797741049766736671564563731544354432444433101211201000000898
분기 합47474339393333333231302929292928272727262626262626252525242323232222222121202019191818171716161616161515151414141313131212121211111111111099999887777777666666666444444333222222110000001,742

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 300개 합).

AdaBoost — 적응 부스팅 ada

깊이 2 짜리 아주 얕은 트리(그루터기)를 300개 이어 붙이되, 앞에서 틀린 표본의 가중치를 올려 다음 트리를 키운다. 부스팅의 가장 오래된 형태 — 잔차가 아니라 표본 가중치로 배우는 방식이 여기서도 통하는지 본다.

그림 A · 구조 — T4_daily/ada · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) AdaBoost — 적응 부스팅 — T4_daily/ada · 시험 2026 f₁ f₂ f₃ f₄ f₅ ··· f₃₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = σ(Σₖ ηf̂ₖ(x)) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 300 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 300그루 learning_rate = 0.05 트리 하나가 더하는 값 = 적합값 × 0.05 (아래 잎값에 이미 곱해져 있다) 작을수록 트리 한 그루의 발언권이 작다 그루별 잎 수 분포 3 4 잎 3~4개
트리 300그루 · 실제로 닿은 깊이 2~2 · 잎 3~4개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 · 잎 분기 없음 아니오 아니오 아니오 g1p_f10_ret_20m ≤ -0.5 n=1,693 g1_pos_day ≤ 0.3425 n=829 잎값 +0.2970 n=431 잎값 +0.4472 n=398 g7_vwap_gap_tick_chg5 ≤ -3.35 n=864 잎값 +0.6203 n=266 잎값 +0.4883 n=598 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오'
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 D · 300그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g7_flow_trades_chg5g7_oi_chg_chg5g7_flow_value_chg5g7_ktb_yieldg7_flow_aggr_share_chg5g1_vol_last30_shareg7_basis_모드듀레이션g6_baserate_120dg7_ob_qty_ratiog1_ret_20mg7_invpx_은행g1_vol_last5_shareg7_ob_cnt_ratiog6_is_auction_dayg1_pos_dayg1p_f10_ret_openg7_vwap_gap_tickg6_domg7_flow_valueg7_invpx_증권/선물_chg5g1_ret_30mg1p_f10_ret_20mg1_oi_chg_dayg1_ret_5mg1p_f10_ret_5mg6_dflow_은행순매수수량g7_basis_이론베이시스g1_gap_openg6_px_chg_20dg7_basis_시장베이시스g7_vol_chg5g1_ma_dev_20mg1_pos_60mg1_oi_chg_60mg6_is_month_endg6_is_auction_3yg6_dflow_보험순매수수량g7_oi_chgg7_vwap_gap_tick_chg5g1_ret_10mg1_ret_120mg1_rng_20mg1_rng_60mg1_ma_dev_60mg1_vol_dayg6_baserate_20dg6_baserate_60dg6_baserate_250dg6_prev_ref_tickg6_prev_abs_ref_tickg6_px_chg_5dg6_dowg6_is_roll_weekg6_rate_통안1년g7_basis_국채현물수익률g7_basis_평균선도금리g7_range_chg5g7_basis_시장베이시스_chg5g7_basis_저평가_chg5g7_basis_평균선도금리_chg5g7_invpx_은행_chg5g1_ret_1mg1_ret_60mg1_ret_openg1_pos_20mg1_rng_dayg1_vwap_devg1_n_barsg1p_f10_ret_60mg1p_curve_20mg1p_curve_60mg6_prev_upg6_prev5_upg6_prev_d_tickg6_vol_20dg6_px_chg_60dg6_vol_60dg6_is_quarter_endg6_days_to_expiryg6_is_mpc_dayg6_us_event_todayg6_us_event_prevg6_dflow_외국인합순매수수량g6_dflow_증권선물순매수수량g6_dflow_투신순매수수량g6_dflow_개인순매수수량g6_rate_CD3개월g6_rate_CALL1일한은g6_rate_통안1년_chg5dg6_rate_CD3개월_chg5dg6_rate_CALL1일한은_chg5dg7_ob_top5_ratiog7_flow_aggr_shareg7_flow_tradesg7_volg7_rangeg7_basis_저평가g7_basis_이론갭g7_invpx_외국인합g7_invpx_증권/선물g7_invpx_투신g7_invpx_보험g7_invpx_연기금g7_ob_qty_ratio_chg5g7_ob_top5_ratio_chg5g7_ob_cnt_ratio_chg5g7_ktb_yield_chg5g7_basis_이론베이시스_chg5g7_basis_이론갭_chg5g7_basis_모드듀레이션_chg5g7_basis_국채현물수익률_chg5g7_invpx_외국인합_chg5g7_invpx_투신_chg5g7_invpx_보험_chg5g7_invpx_연기금_chg5
깊이 0 (뿌리)60850262332200018009006140058001000000100000000001000000000000000000000000000000000000000000000000000000000000000000000000300
깊이 18223951112211292652318917148138121262875665544222222221110111111111111111111000000000000000000000000000000000000000000000000000000525
분기 합1421089537353431292623231818171414141212121110876665544322222221111111111111111111111000000000000000000000000000000000000000000000000000000825

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 300개 합).

DecisionTree — 결정트리 한 그루 dt

깊이 4, 잎 최소 40일. 조건을 따라 내려가면 예측이 나온다. 앙상블이 트리 하나보다 얼마나 나은지 재는 바닥이다.

그림 A · 구조 — T4_daily/dt · 시험 2026 (학습 1,693행) 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) DecisionTree — 결정트리 한 그루 — T4_daily/dt · 시험 2026 f₁ 위는 이 모델 트리 1그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(상승) = σ(Σₖ ηf̂ₖ(x)) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 n_estimators = 1 이어 붙이는 트리 개수 — 위 f₁ … 가 이만큼 실제 1그루 max_depth = 4 뿌리(깊이 0)에서 잎까지 분기 최대 4번 — 그림 B·C 의 오른쪽 눈금 실제 깊이 전부 4 · 상한에 닿은 트리 1/1 min_samples_leaf = 40 잎 하나에 표본 40개 미만이면 그 분할을 하지 않는다 실제 가장 작은 잎 n=40 그루별 잎 수 분포 16 잎 16~16개
트리 1그루 · 실제로 닿은 깊이 4~4 · 잎 16~16개. 세팅의 상한과 학습이 실제로 멈춘 자리를 나란히 둔다.
그림 B · 첫 트리 f₁ 의 실제 분기 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 · 잎 분기 없음 max_depth = 4 뿌리→잎 분기 4번까지 이 트리 실제 깊이 4 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g1p_f10_ret_20m ≤ -0.5 n=1,693 g1_pos_day ≤ 0.3425 n=829 g7_invpx_투신_chg5 ≤ 1.955 n=431 g7_vol_chg5 ≤ 0.075 n=331 잎값 +0.1900 n=221 잎값 +0.3636 n=110 g6_baserate_120d ≤ 0.4708 n=100 잎값 +0.3036 n=56 잎값 +0.6591 n=44 g7_ktb_yield_chg5 ≤ 0.0215 n=398 g7_ob_top5_ratio ≤ 1.163 n=255 잎값 +0.2899 n=138 잎값 +0.4872 n=117 g6_dflow_투신순매수수량 ≤ -1778 n=143 잎값 +0.6429 n=98 잎값 +0.4000 n=45 g7_vwap_gap_tick_chg5 ≤ -3.35 n=864 g7_ob_cnt_ratio ≤ 0.8397 n=266 g7_oi_chg_chg5 ≤ 10532 n=164 잎값 +0.6210 n=124 잎값 +0.3000 n=40 g7_vol ≤ 0.48 n=102 잎값 +0.6452 n=62 잎값 +0.9000 n=40 g7_oi_chg_chg5 ≤ -1.2e+04 n=598 g6_vol_60d ≤ 2.133 n=83 잎값 +0.7805 n=41 잎값 +0.5238 n=42 g1_ret_5m ≤ 0.5 n=515 잎값 +0.3950 n=281 잎값 +0.5427 n=234 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오'
분기 조건·표본 수·잎값을 모델 객체에서 그대로 읽었다. 노드 안 n 은 그 노드를 지난 학습 표본 수다.
그림 D · 1그루 전체의 깊이×피처 분기 수
분기 위치 \ 피처g7_oi_chg_chg5g1_ret_5mg1_pos_dayg1p_f10_ret_20mg6_baserate_120dg6_vol_60dg6_dflow_투신순매수수량g7_ob_top5_ratiog7_ob_cnt_ratiog7_volg7_vol_chg5g7_ktb_yield_chg5g7_vwap_gap_tick_chg5g7_invpx_투신_chg5g1_ret_1mg1_ret_10mg1_ret_20mg1_ret_30mg1_ret_60mg1_ret_120mg1_ret_openg1_gap_openg1_rng_20mg1_pos_20mg1_ma_dev_20mg1_rng_60mg1_pos_60mg1_ma_dev_60mg1_rng_dayg1_vol_last5_shareg1_vol_last30_shareg1_vol_dayg1_vwap_devg1_oi_chg_dayg1_oi_chg_60mg1_n_barsg1p_f10_ret_5mg1p_f10_ret_60mg1p_f10_ret_openg1p_curve_20mg1p_curve_60mg6_baserate_20dg6_baserate_60dg6_baserate_250dg6_prev_upg6_prev5_upg6_prev_ref_tickg6_prev_abs_ref_tickg6_prev_d_tickg6_vol_20dg6_px_chg_5dg6_px_chg_20dg6_px_chg_60dg6_dowg6_domg6_is_month_endg6_is_quarter_endg6_days_to_expiryg6_is_roll_weekg6_is_auction_dayg6_is_auction_3yg6_is_mpc_dayg6_us_event_todayg6_us_event_prevg6_dflow_외국인합순매수수량g6_dflow_증권선물순매수수량g6_dflow_은행순매수수량g6_dflow_보험순매수수량g6_dflow_개인순매수수량g6_rate_통안1년g6_rate_CD3개월g6_rate_CALL1일한은g6_rate_통안1년_chg5dg6_rate_CD3개월_chg5dg6_rate_CALL1일한은_chg5dg7_ob_qty_ratiog7_flow_aggr_shareg7_flow_tradesg7_flow_valueg7_rangeg7_oi_chgg7_ktb_yieldg7_vwap_gap_tickg7_basis_시장베이시스g7_basis_이론베이시스g7_basis_저평가g7_basis_이론갭g7_basis_모드듀레이션g7_basis_국채현물수익률g7_basis_평균선도금리g7_invpx_외국인합g7_invpx_증권/선물g7_invpx_은행g7_invpx_투신g7_invpx_보험g7_invpx_연기금g7_ob_qty_ratio_chg5g7_ob_top5_ratio_chg5g7_ob_cnt_ratio_chg5g7_flow_aggr_share_chg5g7_flow_trades_chg5g7_flow_value_chg5g7_range_chg5g7_basis_시장베이시스_chg5g7_basis_이론베이시스_chg5g7_basis_저평가_chg5g7_basis_이론갭_chg5g7_basis_모드듀레이션_chg5g7_basis_국채현물수익률_chg5g7_basis_평균선도금리_chg5g7_invpx_외국인합_chg5g7_invpx_증권/선물_chg5g7_invpx_은행_chg5g7_invpx_보험_chg5g7_invpx_연기금_chg5
깊이 0 (뿌리)00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
깊이 100100000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002
깊이 210000000100101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
깊이 311001111011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008
분기 합211111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015

어느 깊이에서 어느 피처가 몇 번 갈랐나(그루 1개 합).

SVM(RBF) — 방사기저함수 서포트벡터머신 svm_rbf

두 반을 가르는 경계를 가장 넓은 여백으로 긋는다. RBF 커널로 굽은 경계도 그을 수 있다. 트리와 전혀 다른 방식으로 경계를 만드는 계열이다.

그림 A · 구조 — T4_daily/svm_rbf · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) SVM(RBF) — 방사기저함수 서포트벡터머신 — T4_daily/svm_rbf · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다 2. 표준화 학습창 평균 0 · 표준편차 1 — 커널 폭이 척도에 민감하다 3. RBF 커널 K(x, xᵢ) = exp(−γ‖x − xᵢ‖²) 4. 보정 결정값 → 시그모이드 → P(상승) 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 세팅과 학습 결과 C = 1 마진을 어기는 값에 물리는 벌점 — 세팅 실현: 상한에 붙은 서포트벡터 1,188개 gamma = scale RBF 커널의 폭 — 세팅 실현값 γ = 0.00884956 (= 1 / (피처수 × 분산)) 서포트벡터 1,531개 결정면을 실제로 떠받치는 학습 행 학습 1,693행의 90% 확률 보정 SVM 의 결정값을 확률로 바꾸는 시그모이드 A = -0.6596 · B = -0.0268 f(x) = Σᵢ αᵢyᵢ exp(−γ‖x−xᵢ‖²) + b → 시그모이드 보정 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1
학습 1,693행 중 1,531행이 서포트벡터가 됐다.
그림 B · 서포트벡터의 가중치 |α| 분포 서포트벡터 1,531개 (하락 798 · 상승 733) — 학습 1,693행 중 90% |α| = 0 |α| = C = 1 가장 많은 칸 1,202개 상한 C 에 붙은 서포트벡터 1,188개 — 이 점들은 마진 안쪽이다 · 확률 보정(Platt) A=-0.6596 · B=-0.0268
오른쪽 끝(|α| = C)에 쌓인 점들은 마진 안쪽으로 들어온 날이다 — 이 데이터가 선형·커널 경계로 깔끔히 갈리지 않는다는 증거다.

SVM(선형) — 선형 서포트벡터머신 + 확률 보정 svm_lin

직선(초평면)으로 가르되 여백을 최대화한다. 확률은 교차검증 보정(Platt)으로 따로 만든다. 같은 SVM 에서 커널만 뺀 대조다.

그림 A · 구조 — T4_daily/svm_lin · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) SVM(선형) — 선형 서포트벡터머신 + 확률 보정 — T4_daily/svm_lin · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다(시험연도를 보지 않는다) 2. 표준화 학습창 평균·표준편차로 z 화 — 계수가 서로 비교 가능해진다 3. 선형 결합 z = b + Σ wᵢ·xᵢ (계수 115개) 4. 링크 σ(z) → 확률 5. 보정 보정 래퍼 3겹의 계수 평균 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 계수 — 세팅과 학습 결과 피처 115개 표준화된 공간의 계수 — 서로 크기 비교가 된다 0 이 아닌 계수 113개 절편 b = -0.0096 모든 피처가 학습창 평균일 때의 출발점 기저율 쏠림이 여기에 담긴다 |w| 최대 = 0.1417 가장 센 피처: g7_flow_value |w| 중앙값 0.0355 C = 0.05 역정규화 강도 작을수록 더 강한 규제
피처 115개 중 0 이 아닌 계수 113개 · 절편 -0.0096.
그림 B · 계수 — 어느 피처가 어느 쪽으로 미나 ← 하락 쪽 상승 쪽 → g7_flow_value -0.1417 g7_ g1p_f10_ret_open +0.1389 g1p_ g6_baserate_120d -0.1338 g6_ g6_vol_60d +0.1307 g6_ g6_rate_CALL1일한은 -0.1298 g6_ g1_pos_day +0.1293 g1_ g1_ret_open -0.1156 g1_ g1_vwap_dev -0.0969 g1_ g6_is_auction_day -0.0942 g6_ g6_dflow_은행순매수수량 -0.0936 g6_ g7_basis_저평가_chg5 -0.0921 g7_ g6_is_roll_week +0.0792 g6_ g7_oi_chg_chg5 -0.0777 g7_ g6_rate_통안1년 +0.0737 g6_ g6_dflow_보험순매수수량 +0.0707 g6_ g7_basis_저평가 -0.0695 g7_ 표준화된 공간의 계수 상위 16개 · 절편 b = -0.0096 · 전체 115개 중
표준화된 공간의 계수라 서로 크기를 비교할 수 있다.

k-최근접 이웃 (k=75) knn

학습을 하지 않는다 — 표를 통째로 기억했다가, 예측할 때 가장 가까운 75일을 찾아 그날들의 방향을 거리로 가중해 투표한다. '비슷한 날은 비슷하게 끝난다'는 가정만으로 어디까지 가는지 본다.

그림 A · 구조 — T4_daily/knn · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) k-최근접 이웃 (k=75) — T4_daily/knn · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다 2. 표준화 학습창 평균 0 · 표준편차 1 — 거리 계산에 필수다 3. 이웃 찾기 가장 가까운 75개 4. 가중 투표 1/거리 로 가중한 상승 비율 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 세팅과 학습 결과 n_neighbors = 75 몇 명에게 물을지 — 세팅 실현: 학습표 1,693행에서 고른다 weights = distance 가까운 이웃에 더 큰 표를 준다 가중치 = 1 / 거리 metric = minkowski 표준화된 115차원에서의 거리 k번째 이웃 거리 중앙값 11.312 학습 파라미터 없음 이 계열은 적합하지 않는다 — 표를 기억한다 예측할 때마다 전체 표와 거리를 잰다 P(상승) = Σᵢ(1/dᵢ · yᵢ) / Σᵢ(1/dᵢ), i ∈ 가장 가까운 k일 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1
학습 파라미터가 없는 계열이다 — 학습창 1,693행을 그대로 들고 있다가 예측할 때 거리를 잰다.
그림 B · 실제 시험일 하나의 이웃 75개 시험일 2026-01-02 하나의 이웃 75개 — 학습표 1,693행 중에서 고른다 왼쪽 막대 = 거리(가까울수록 짧다) · 오른쪽 막대 = 투표 가중치 1/거리 · 색이 옅으면 그 이웃의 정답은 하락 거리 → ← 가중치 11.436 0.087 상승 하락 하락 하락 하락 하락 상승 하락 상승 하락 하락 하락 상승 상승 하락 상승 상승 하락 하락 상승 상승 하락 상승 상승 하락 상승 상승 하락 상승 상승 상승 상승 하락 상승 하락 상승 상승 하락 하락 상승 하락 상승 상승 하락 상승 상승 하락 상승 상승 하락 하락 하락 하락 하락 상승 하락 하락 상승 하락 하락 하락 상승 상승 하락 상승 하락 하락 하락 하락 상승 하락 하락 하락 상승 13.870 0.072 하락 P(상승) = Σ(가중치 × 이웃의 상승) / Σ가중치 = 0.4531 k = 75 · 가중 distance · 거리 minkowski · 피처 115개 시험 구간 전체에서 k번째 이웃까지의 거리 — 하위10% 9.725 · 중앙 11.312 · 상위10% 16.081
모식도가 아니라 그 날의 실제 이웃이다. 거리·정답·가중치를 모델 객체에서 읽었다.

LogisticRegression — 로지스틱 회귀 log

피처의 가중합을 로지스틱 함수로 눌러 확률을 낸다. C=0.1 로 계수를 강하게 규제했다. 분류 확률의 표준 기준선이다.

그림 A · 구조 — T4_daily/log · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) LogisticRegression — 로지스틱 회귀 — T4_daily/log · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다(시험연도를 보지 않는다) 2. 표준화 학습창 평균·표준편차로 z 화 — 계수가 서로 비교 가능해진다 3. 선형 결합 z = b + Σ wᵢ·xᵢ (계수 115개) 4. 링크 σ(z) → 확률 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 계수 — 세팅과 학습 결과 피처 115개 표준화된 공간의 계수 — 서로 크기 비교가 된다 0 이 아닌 계수 113개 절편 b = -0.2141 모든 피처가 학습창 평균일 때의 출발점 기저율 쏠림이 여기에 담긴다 |w| 최대 = 0.2990 가장 센 피처: g1p_f10_ret_open |w| 중앙값 0.0571 C = 0.1 역정규화 강도 작을수록 더 강한 규제
피처 115개 중 0 이 아닌 계수 113개 · 절편 -0.2141.
그림 B · 계수 — 어느 피처가 어느 쪽으로 미나 ← 하락 쪽 상승 쪽 → g1p_f10_ret_open +0.2990 g1p_ g7_flow_value -0.2727 g7_ g1_ret_open -0.2618 g1_ g1_pos_day +0.2509 g1_ g6_baserate_120d -0.2418 g6_ g6_is_auction_day -0.2262 g6_ g6_baserate_250d +0.2021 g6_ g7_invpx_보험 -0.1813 g7_ g6_is_roll_week +0.1702 g6_ g7_oi_chg_chg5 -0.1688 g7_ g6_vol_60d +0.1649 g6_ g6_px_chg_20d +0.1534 g6_ g7_invpx_증권/선물_chg5 -0.1380 g7_ g1_vwap_dev -0.1311 g1_ g1_ret_30m +0.1293 g1_ g1_pos_20m -0.1279 g1_ 표준화된 공간의 계수 상위 16개 · 절편 b = -0.2141 · 전체 115개 중
표준화된 공간의 계수라 서로 크기를 비교할 수 있다.

LinearRegression — 최소제곱 선형회귀 lin

확률이 아니라 틱 변화 자체를 회귀하고 부호를 읽는다. 확률은 잔차 표준편차로 눌러 만든 값이라 보정된 확률이 아니다. 규제가 전혀 없는 선형 바닥이다.

그림 A · 구조 — T4_daily/lin · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) LinearRegression — 최소제곱 선형회귀 — T4_daily/lin · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다(시험연도를 보지 않는다) 2. 표준화 학습창 평균·표준편차로 z 화 — 계수가 서로 비교 가능해진다 3. 선형 결합 z = b + Σ wᵢ·xᵢ (계수 115개) 4. 링크 z → 예상 틱, 부호가 방향 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 계수 — 세팅과 학습 결과 피처 115개 표준화된 공간의 계수 — 서로 크기 비교가 된다 0 이 아닌 계수 114개 절편 b = -0.2056 모든 피처가 학습창 평균일 때의 출발점 평균적인 ref_tick 변화 |w| 최대 = 26.4676 가장 센 피처: g7_ktb_yield |w| 중앙값 0.1342
피처 115개 중 0 이 아닌 계수 114개 · 절편 -0.2056.
그림 B · 계수 — 어느 피처가 어느 쪽으로 미나 ← 하락 쪽 상승 쪽 → g7_ktb_yield -26.4676 g7_ g7_basis_평균선도금리 +13.5614 g7_ g7_basis_모드듀레이션 -7.5157 g7_ g7_basis_저평가 -5.4930 g7_ g7_basis_국채현물수익률 +5.2617 g7_ g7_basis_국채현물수익률_chg5 +5.2050 g7_ g7_ktb_yield_chg5 -4.3175 g7_ g7_basis_이론갭 -4.1447 g7_ g7_basis_시장베이시스 +1.2166 g7_ g7_basis_평균선도금리_chg5 -1.2071 g7_ g7_basis_이론베이시스 -0.8503 g7_ g6_dflow_증권선물순매수수량 -0.7250 g6_ g7_basis_이론베이시스_chg5 -0.6199 g7_ g1_ma_dev_20m +0.5999 g1_ g6_dflow_외국인합순매수수량 -0.5849 g6_ g1p_f10_ret_open +0.5110 g1p_ 표준화된 공간의 계수 상위 16개 · 절편 b = -0.2056 · 전체 115개 중
표준화된 공간의 계수라 서로 크기를 비교할 수 있다.

Ridge — L2 규제 선형회귀 ridge

선형회귀에 계수 제곱 벌점(alpha=10)을 더해 계수를 0 쪽으로 민다. 피처 115개에 표본 1,693행이면 규제가 필요한지 보려고 넣었다.

그림 A · 구조 — T4_daily/ridge · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) Ridge — L2 규제 선형회귀 — T4_daily/ridge · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다(시험연도를 보지 않는다) 2. 표준화 학습창 평균·표준편차로 z 화 — 계수가 서로 비교 가능해진다 3. 선형 결합 z = b + Σ wᵢ·xᵢ (계수 115개) 4. 링크 z → 예상 틱, 부호가 방향 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 계수 — 세팅과 학습 결과 피처 115개 표준화된 공간의 계수 — 서로 크기 비교가 된다 0 이 아닌 계수 113개 절편 b = -0.2056 모든 피처가 학습창 평균일 때의 출발점 평균적인 ref_tick 변화 |w| 최대 = 0.5395 가장 센 피처: g1_ma_dev_20m |w| 중앙값 0.0977 alpha = 10.0 릿지 벌점 클수록 계수를 더 눌러 붙인다
피처 115개 중 0 이 아닌 계수 113개 · 절편 -0.2056.
그림 B · 계수 — 어느 피처가 어느 쪽으로 미나 ← 하락 쪽 상승 쪽 → g1_ma_dev_20m +0.5395 g1_ g1p_f10_ret_open +0.4736 g1p_ g7_basis_저평가 -0.3877 g7_ g1_ret_open -0.3770 g1_ g1_pos_20m -0.3300 g1_ g1_ret_20m +0.3030 g1_ g6_baserate_250d +0.2701 g6_ g6_vol_60d +0.2585 g6_ g7_flow_value -0.2472 g7_ g6_is_auction_day -0.2466 g6_ g7_basis_저평가_chg5 -0.2460 g7_ g7_flow_trades +0.2376 g7_ g1_pos_day +0.2373 g1_ g1_pos_60m +0.2232 g1_ g7_oi_chg_chg5 -0.2213 g7_ g6_dflow_증권선물순매수수량 -0.2143 g6_ 표준화된 공간의 계수 상위 16개 · 절편 b = -0.2056 · 전체 115개 중
표준화된 공간의 계수라 서로 크기를 비교할 수 있다.

ElasticNet — L1+L2 규제 선형회귀 enet

L1(계수를 0 으로 죽인다)과 L2 를 섞은 벌점. 피처 선택이 함께 일어난다. 피처를 줄이는 쪽이 유리한지 보는 자리다.

그림 A · 구조 — T4_daily/enet · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) ElasticNet — L1+L2 규제 선형회귀 — T4_daily/enet · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다(시험연도를 보지 않는다) 2. 표준화 학습창 평균·표준편차로 z 화 — 계수가 서로 비교 가능해진다 3. 선형 결합 z = b + Σ wᵢ·xᵢ (계수 115개) 4. 링크 z → 예상 틱, 부호가 방향 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 계수 — 세팅과 학습 결과 피처 115개 표준화된 공간의 계수 — 서로 크기 비교가 된다 0 이 아닌 계수 72개 절편 b = -0.2056 모든 피처가 학습창 평균일 때의 출발점 평균적인 ref_tick 변화 |w| 최대 = 0.3273 가장 센 피처: g1_ma_dev_20m |w| 중앙값 0.0308 alpha = 0.05 릿지 벌점 클수록 계수를 더 눌러 붙인다
피처 115개 중 0 이 아닌 계수 72개 · 절편 -0.2056.
그림 B · 계수 — 어느 피처가 어느 쪽으로 미나 ← 하락 쪽 상승 쪽 → g1_ma_dev_20m +0.3273 g1_ g1_ret_20m +0.3062 g1_ g1p_f10_ret_open +0.2413 g1p_ g6_is_auction_day -0.2140 g6_ g1_pos_day +0.1600 g1_ g1_ret_120m -0.1543 g1_ g7_oi_chg_chg5 -0.1502 g7_ g1_pos_20m -0.1468 g1_ g1_gap_open -0.1392 g1_ g1_ret_open -0.1371 g1_ g6_px_chg_20d +0.1364 g6_ g6_is_roll_week +0.1348 g6_ g1_vwap_dev -0.1248 g1_ g6_prev_ref_tick +0.1235 g6_ g7_basis_저평가 -0.1228 g7_ g6_rate_통안1년_chg5d +0.1224 g6_ 표준화된 공간의 계수 상위 16개 · 절편 b = -0.2056 · 전체 115개 중
표준화된 공간의 계수라 서로 크기를 비교할 수 있다.

GaussianNB — 가우시안 나이브베이즈 gnb

피처마다 상승일·하락일의 평균과 분산만 배우고, 피처끼리 서로 독립이라고 가정해 곱한다. 가장 단순한 확률 모델 — 독립 가정이 이 데이터에서 얼마나 해로운지 재는 자다.

그림 A · 구조 — T4_daily/gnb · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) GaussianNB — 가우시안 나이브베이즈 — T4_daily/gnb · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다 2. 표준화 학습창 평균 0 · 표준편차 1 3. 반별 정규분포 적합 피처마다 상승·하락 각각의 평균·분산 4. 베이즈 결합 사전확률 × 피처별 우도의 곱 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 세팅과 학습 결과 피처 115개 피처마다 반별 평균과 분산 두 쌍을 적합한다 학습 파라미터 460개 P(상승) 사전 = 0.451 학습창의 상승일 비율 하락 930일 · 상승 763일 var_smoothing = 1e-09 분산이 0 에 붙는 것을 막는 하한 가장 갈라진 피처: g1_pos_60m |평균차| / 표준편차 갈라짐 0.32 P(상승|x) ∝ P(상승) · Πᵢ N(xᵢ; μᵢ,상승, σ²ᵢ,상승) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1
학습한 값은 피처마다 평균·분산 두 쌍뿐이다.
그림 B · 반별로 학습된 정규분포 — 가장 갈라진 피처 10개 학습된 것은 반(class)마다의 평균과 분산뿐이다 — 하락 930일 · 상승 763일 진한 곡선 = 상승일의 분포 · 옅은 곡선 = 하락일의 분포 (표준화된 값, 학습창에서 적합한 것) g1_pos_60m 갈라짐 0.32 μ -0.14 / +0.17 g1p_f10_ret_20m 갈라짐 0.30 μ -0.13 / +0.16 g1_ret_20m 갈라짐 0.30 μ -0.13 / +0.16 g1_pos_day 갈라짐 0.30 μ -0.13 / +0.16 g1_ma_dev_20m 갈라짐 0.30 μ -0.13 / +0.16 g1_ma_dev_60m 갈라짐 0.28 μ -0.13 / +0.15 g1_ret_30m 갈라짐 0.28 μ -0.13 / +0.15 g1_pos_20m 갈라짐 0.28 μ -0.12 / +0.15 g1p_curve_20m 갈라짐 0.27 μ +0.12 / -0.15 g1_ret_10m 갈라짐 0.26 μ -0.12 / +0.14 사전확률 P(하락) = 0.549 · P(상승) = 0.451 · 피처 115개 전부를 서로 독립이라고 가정한다
두 곡선이 겹칠수록 그 피처는 방향을 못 가른다. 곡선은 학습된 μ·σ² 로 그린 것이다.

MLPClassifier — 다층 퍼셉트론(신경망) mlp

32칸·16칸 은닉층 두 개를 지나 확률을 낸다. 조기 종료로 과적합을 막는다. 표본이 작을 때 신경망이 트리 앙상블을 이기는지 본다.

그림 A · 구조 — T4_daily/mlp · 시험 2026 입력 데이터 3년 국채선물 근월 + 원천 여덟 2016-12-20 ~ 2026-09-18 유효일 1,847 · 하루 1행 학습 2017~2025 · 1,693행 0틱 무효일 제외 피처 115개 / 4그룹 3년선물 1분봉 10년선물·커브 일별·캘린더 선물 일봉 전필드(T-1) MLPClassifier — 다층 퍼셉트론(신경망) — T4_daily/mlp · 시험 2026 1. 결측 대치 학습창 중앙값으로 채운다(시험연도를 보지 않는다) 2. 표준화 학습창 평균 0 · 표준편차 1 3. 순전파 3개 가중치 층을 지난다 4. 역전파 학습 adam · 손실 log-loss 출력 P(상승) ↓ 0.5 기준 상승 / 하락 게이트 없음 매일 1건 제출 세팅과 학습 결과 hidden_layer_sizes = (32, 16) 은닉층의 폭 — 세팅 실현: 가중치 층 3개 · 파라미터 4,257개 alpha = 0.01 L2 벌점 — 클수록 가중치를 0 쪽으로 민다 learning_rate_init = 0.003 adam 의 초기 보폭 실현: 마지막 손실 0.1917 max_iter = 600 반복 상한 — 세팅 실현: 34 반복에서 멈췄다 early_stopping = True 검증 0.1 로 20회 나아지지 않으면 멈춘다 검증 최고 0.6000 P(상승) = σ(W₃ · tanh… ) 컷오프 봉 15:34:00 · 틱 15:34:58 · 수급 15:34:00(지연 실측 +0초) · 일봉 전필드 T-1
가중치 층 3개 · 파라미터 4,257개.
그림 B · 층 — 모양·활성함수·파라미터 수 깊이 = 가중치 층 3개 (은닉 2개 + 출력 1개) · 파라미터 4,257개 입력 피처 115개 표준화된 값 은닉 1 층 115 → 32 활성 relu 가중치 115×32 편향 32 파라미터 3,712 층 1 은닉 2 층 32 → 16 활성 relu 가중치 32×16 편향 16 파라미터 528 층 2 출력 층 16 → 1 활성 logistic 가중치 16×1 편향 1 파라미터 17 층 3 출력 P(상승) 0.5 기준 방향 ← 깊이 3 층 →
상자 하나가 가중치 층 하나다. 화살표 위 숫자가 그 층의 입력→출력 폭이고, 아래 눈금이 깊이다.
그림 C · 학습 손실 곡선과 멈춘 지점 멈춘 지점 — 반복 34 최대 반복 600 손실 0.7347 손실 0.1917 (최저) 조기 종료 켬 · 검증 최고 정확도 0.6000
세로선이 실제로 멈춘 반복(34)이다 — 상한 600 에 닿기 전에 조기 종료가 걸렸는지 그림에서 바로 읽힌다.

결과 — 모델 18종

모델 18종의 티어별 승률 산점도
점 하나가 (모델 × 티어) 하나다. 가로 막대는 그 모델의 중위 승률. 붉은 파선이 0003 채택 후보(0.6030), 점선이 같은 표본의 적응 상수 (0.5504). 배깅 트리 세 종이 위쪽에 모여 있고 선형 계열이 바닥이다.
모델 중위 승률 — 티어 다섯의 중위값. 정본은 results/20260921_171142_zoo/summary.csv.
모델계열중위 승률모델계열중위 승률
et배깅트리0.6005gnb선형·확률0.5683
rf배깅트리0.5942hgb부스팅0.5658
bag배깅트리0.5932lgb부스팅0.5631
knn커널·거리0.5865mlp신경망0.5617
ada부스팅0.5748xgb부스팅0.5598
svm_rbf커널·거리0.5701svm_lin커널·거리0.5490
gbdt부스팅0.5691dt단일트리0.5444
log·enet·ridge·lin선형·확률0.5387~0.5207

H13 은 미지지다 — 관측 순서가 배깅트리 0.5942 > 커널·거리 0.5680 > 부스팅 0.5669 > 선형 0.5339 로, 부스팅과 커널·거리가 0.11%p 차로 자리를 바꿨다. 뒤집혔다고 말하기엔 작은 차이지만 사전등록 문장이 순서를 요구했으므로 미지지로 적는다.

놀란 자리 하나 — knn 이 4위(0.5865)로 부스팅 전부보다 위다. 이웃 75개·거리 가중이라 사실상 "비슷한 날들의 다수결" 이고, 표본 1,847일에서 부스팅의 용량이 남는다는 신호로 읽는다.

새 데이터가 더한 것

티어별 최고 승률 막대
왼쪽이 같은 표본(n=1,497), 오른쪽이 수급을 포함해 표본이 줄어든 티어(n=1,136)다. 두 축을 나란히 읽으면 안 된다 — 표본이 다르면 승률의 뜻도 다르다.
티어별 최고 — 같은 표본끼리만 비교한다.
티어피처모델승률누적틱n
T0_core(0003 축)67et0.6005+6551,497
T4_daily(+g7)115et0.6065+6811,497
T6_nan(전 그룹)204et0.6019+6691,497
T1_flow34(+g2)95bag0.5942+5411,136
T5_all149bag0.5942+5411,136

세 가지가 읽힌다. ① g7_ 48열이 +0.6%p(0.6005 → 0.6065)를 더했다. ② 전 그룹을 넣은 T6_nan(204열)이 오히려 낮다 — 결측 43~67% 그룹을 함께 주면 트리가 결측 패턴을 배운다(0003 Tall_nan 과 같은 결론). ③ 되찾은 컷오프 4분은 승률로 값을 받지 못했다 — 수급 티어 최고가 0.5942 다.

최고 모델의 연도별 승률과 상수 기준선
여덟 해 모두 57% 이상이고 2025 가 0.6545 로 가장 높다. 회색이 그 해 상수 기준선(다수 클래스)이다 — 2024·2025 처럼 기저율이 한쪽으로 쏠린 해에는 상수도 강해진다.
최고 모델의 누적 틱 곡선
여덟 해 누적 +681틱. 특정 해에 몰려 있지 않다.

설정을 흔들면 나아지나 · 수급을 짝지어 빼면 무엇이 남나

여기까지는 모델마다 설정을 하나씩만 썼고, 티어끼리 시험 기간이 달라 "장중 투자자 수급이 값을 하는가" 에 답할 수 없었다. 그 둘을 메우려고 같은 데이터에서 두 번째 런을 돌렸다 — 모델 18종 × 설정 171개 × 티어 6, 적합 1,026건. 정본 런은 results/20260922_142830_hparam/ 이다.

용어. 설정(하이퍼파라미터)은 학습 전에 사람이 정하는 값이다 — 트리 수, 트리 깊이, 이웃 수, 규제 세기 같은 것. 정직한 선택은 시험연도 Y 의 설정을 Y 이전 연도 성적만 보고 고르는 방식이고, 사후 최고는 여덟 해를 다 본 뒤 가장 좋았던 설정을 적은 값이다. 사후 최고는 운용에서 쓸 수 없다 — 그 해가 끝나야 알 수 있다.

라운드 2 의 폴드와 짝 대조군의 학습·시험 창
라운드 2 가 실제로 쓴 창이다. 위 둘(T0_core · T4_daily)은 라운드 1 과 같은 여덟 해 워크포워드이고, 아래 넷은 이다 — T1_flow34T0_pairT5_allT5_nog2 가 학습 시작과 시험 구간을 서로 맞춰 두었다. 창이 같아야 «수급이 더한 것» 을 같은 날 빼서 잴 수 있다. 막대 안 숫자는 그 폴드가 실제로 쓴 일수다.
H15 — 설정을 열여섯 배 넓게 흔들었을 때. 정직한 선택끼리 비교한다.
티어설정 격자(라운드 2)설정 하나(라운드 1) McNemar p시드 흔들림사후 최고
T0_core0.57520.5905 −1.54%p0.08840.0791 0.6072
T4_daily0.59650.5999 −0.33%p0.78610.0877 0.6112

H15 미지지. 설정을 넓게 흔들어도 정직하게 고르면 오히려 조금 낮다. 두 차이 모두 유의하지 않고(p≥0.09) 시드 흔들림의 4분의 1 도 안 된다. 격자를 넓히면 사후 최고는 올라가지만(0.6072·0.6112) 그 값은 답을 보고 고른 값이다. 연도마다 고르는 설정이 계속 갈리는 것이 같은 사실을 다르게 말한다 — T4_dailyet#00log#03knn#06enet#07et#12knn#06 로 옮겨 다닌다. 직전 연도 성적은 다음 해 성적을 거의 말해 주지 않는다.

모델마다 설정을 흔들었을 때 승률이 퍼지는 폭
점 하나가 설정 하나이고, 가로 막대가 그 모델의 중위, 주황 마름모가 라운드 1 에 쓴 설정이다. 세로 눈금은 승률(사후 값이라 판정 근거가 아니다). 모델이 같아도 설정에 따라 log 는 0.514~0.590, dt 는 0.509~0.589 로 벌어진다 — 한 모델 안의 폭이 모델 사이의 폭만큼 크다. 그래서 격자를 넓히면 사후 최고는 거의 항상 오르고, 그 값을 성능으로 읽으면 안 된다.
라운드 1·2 의 정직한 선택과 라운드 2 사후 최고
회색이 라운드 1 의 정직한 선택(모델만 골랐다), 파랑이 라운드 2 의 정직한 선택(모델 × 설정을 골랐다), 주황이 라운드 2 의 사후 최고(여덟 해를 다 보고 골랐다)다. 판정은 파랑 대 회색이고 두 티어 모두 파랑이 낮다 (p=0.088 · p=0.786). 주황이 가장 높은 것은 성능이 아니라 고르는 데 쓴 정보의 차이다 — 그 막대는 그 해가 끝나야 알 수 있는 값이다. 회색이 두 티어에만 있는 것은 라운드 1 이 그 둘만 여덟 해 전 구간으로 돌았기 때문이다.
H16 — 창을 맞춘 짝 비교. 같은 날 · 같은 설정으로 뺀다.
수급 있음대조(수급 없음) nMcNemar p시드 흔들림
T1_flow34T0_pair 0.56870.5616+0.70%p 1,1360.67360.0575
T5_allT5_nog2 0.57310.5669+0.62%p 1,1360.64650.0675
같은 짝을 설정 171개마다 하나씩 빼서 본 것.
설정 짝중위 차수급이 이긴 설정 Wilcoxon p
T1_flow34T0_pair171 +0.18%p54%0.2437
T5_allT5_nog2171 +0.00%p48%0.2199

H16 미지지. 부호는 두 짝 모두 수급 쪽이지만 크기가 시드 흔들림의 10분의 1 이고, 설정 단위로 보면 절반은 대조군이 이긴다. 앞 절의 0.35%p 와 같은 결론인데, 이번에는 표본이 같은 짝 비교라 그 결론이 더 단단하다. (Wilcoxon 부호순위 검정은 짝지은 차이들이 0 을 중심으로 대칭인지 보는 검정이다 — 차이의 부호와 크기 순위만 쓰므로 승률 분포 모양을 가정하지 않는다.)

창을 맞춘 짝의 설정별 차이 분포
왼쪽: 점 하나가 설정 하나이고, 가로축이 대조군(수급 없음)의 승률, 세로축이 같은 설정을 수급 티어에서 돌린 승률이다. 점선 위쪽이 수급이 이긴 설정이다. 점들이 점선에 걸쳐 고르게 흩어져 있다 — 한쪽으로 몰리지 않는다. 오른쪽: 정직한 선택끼리 비교한 판정 근거로, 회색이 대조군, 파랑이 수급 티어다. 차이는 +0.70%p·+0.62%p 이고 McNemar p 는 0.674·0.646 이라 이 표본에서 수급의 값을 잡아낼 수 없다.

스윕이 드러낸 구멍 하나. T5_all·T5_nog2 의 학습창에는 모든 폴드에서 값이 하나도 없는 열 네 개가 있었다(g8_ann_ahead · g8_plan_jo · g8_cover · g8_rate_band_bp). scikit-learn 히스토그램 부스팅은 이런 열에서 구간화가 멈춰 (ValueError: window shape cannot be larger than input array shape) 라운드 1 정본 런의 T5_all 에는 hgb 가 아예 없었다 — 모델 18종이 아니라 17종이었고 표에 그 사실이 남지 않았다. 빈 열을 폴드마다 빼도록 고치고 두 티어만 다시 돌렸다(다른 네 티어는 걸리는 열이 없어 손질이 아무 일도 하지 않는다). 고친 뒤 T5_allhgb 최고는 0.5863 으로 티어 최고(0.6056, bag#02)를 바꾸지 않는다 — 결론은 그대로이고 표만 완전해졌다.

왜 유의하지 않은가

0005 최고와 0003 후보는 1,491일 중 99일에서만 예측이 갈린다. 그 99일의 성적이 52:47 이다 — 동전을 99번 던진 것과 구분되지 않는다(p=0.688). 승률 차 0.35%p 는 시드 흔들림(et/T4_daily 0.0155)의 4분의 1 도 안 된다.

누설 카나리아 0건. 새 그룹 82열을 단일 피처 부호만 으로 재서 62% 를 넘는 열이 하나도 없다. 0003 에서 irs_intra 가 69.7% 로 울렸던 자리이고, g7_ 을 T-1 로 강제한 설계가 그 경로를 구조적으로 닫았다.

한계

수급 축에 닷새 구멍(2026-08-15~21)이 있다 — 덤프가 08-14 에 멈추고 인포맥스 API 창이 최근 1개월이라 그 사이가 어느 경로로도 오지 않는다. 매일 받는 것이 유일한 대책이고 그 배선은 같은 날 들어갔다.

g8_ 은 사건이 몇 건뿐이다(2026-09 신설 표). 트리 분기로만 썼고 계수를 해석하지 않았다.

레짐 분해를 연도로만 했다 — 0003 의 H9(레짐 게이트)가 미지지라 그 축을 다시 열지 않았다.

2026 의 0.6081 은 사후 숫자다. 대회가 도는 해의 유일한 최종 OOS 는 라이브 제출이다(0003 의 같은 단서).

산출물

  • 사전등록protocol.md
  • 분석·판정analysis.md
  • 정본 런results/20260921_171142_zoo/
  • 모델 동물원code/models5.py
  • 피처 캐시 생성code/build_features5.py