실험 0008 · 국채선물

학습하지 않는 모델이 가장 작은 폴드에서 이겼다 — 그런데 20분 모멘텀 규칙은 또 못 넘었다

가중치가 고정된 사전학습 표 트랜스포머가 학습 표를 문맥으로 읽어 분류한다. 경사하강이 돌지 않고 파라미터가 한 개도 바뀌지 않는다.

폐기 · H21 부분 지지 · H22 지지 · H23 미판정 설정 1 × 티어 4 × 시드 10 정직 선택 · 짝지은 McNemar · 배포 흔들림

정직한 선택 기준 최고가 113열 묶음의 승률 60.25%(누적 +703틱, n=1,497)로 이 저장소가 낸 정직 선택값 가운데 가장 높다. 그런데 앞선 트리와의 차이는 +0.27%p·McNemar p=0.8398동급이고, 20분 모멘텀 규칙과는 +1.47%p·p=0.2801 로 못 넘었다. 이 실험이 실제로 얻은 것은 다른 자리다: 학습이 344행인 첫 폴드에서 64.61% — 같은 폴드의 신경망과 트리가 둘 다 53.93% 였다. 학습이 작을 때 이 모델을 쓴다는 가설(H22)이 짝지은 p=0.0066 으로 지지됐다.

가설과 결론

가설
선행 실험의 신경망 일곱 종이 가장 작은 학습 폴드에서 무너졌다 (학습 522행에서 48.09% — 동전 던지기보다 나쁘다). 수백~수천 행은 사전학습 표 트랜스포머가 맞추도록 합성 데이터로 사전학습된 크기다. 그러면 (H21) 학습 없이도 트리를 넘고, (H22) 그 이점이 초반 폴드에서 가장 크고, (H23) 문맥 앙상블을 키워도 값을 받지 못한다.
결론
H21 부분 지지 — 네 묶음 중 수급 묶음 하나에서만 트리를 넘었다 (59.77% 대 56.78% · p=0.0308). 최고 승률이 나온 113열 묶음은 동급 이다. H22 지지 — 113열 묶음의 2019·2020 에서 신경망을 +10.7%p와 +4.9%p 앞서고 짝지어 p=0.0066 이다. H23 미판정 — 비용이 짝의 한쪽을 격자에서 떨어뜨렸다. 계약 판정은 폐기: 네 묶음 중 20분 모멘텀 규칙을 유의하게 넘은 것이 없어 채택할 후보가 없다.
이 실험이 바꾼 것
모델 축 하나다. 피처를 새로 만들지 않고 선행 실험의 캐시를 그대로 읽어, 데이터·폴드·채점·판정 문턱을 전부 같게 뒀다.

기호와 데이터

이 문서는 혼자 열린다. 쓰는 낱말을 여기서 정의한다.

P_ref
채점 기준가. 15:45 동시호가 직전의 참조 가격이고 제출 시점에는 관측할 수 없다.
P45
15:45 동시호가로 결정된 종가.
ref_tick
P45P_ref 의 차이를 틱으로 센 값. 이 부호가 맞히려는 것이다.
0틱
ref_tick = 0 인 날. 방향이 없어 채점이 성립하지 않으므로 표본에서 뺀다(원시 2,394일 → 유효 1,847일).
승률
예측 부호가 ref_tick 부호와 같은 날의 비율. 전부 시험 구간에서만 센 값이다.
워크포워드
연도 확장창. 시험연도 직전까지를 학습으로 쓰고 그 해만 시험한다. 학습이 해마다 자란다 — 344행에서 1,693행까지.
티어
피처 그룹의 묶음. 티어가 다르면 학습 시작연도와 시험 표본이 달라지므로 티어를 섞어 승률을 비교하지 않는다.
문맥 (in-context)
이 모델이 «학습» 대신 하는 것. 학습 표를 입력으로 받아 그 안의 규칙을 한 번의 순전파로 읽어낸다. 가중치가 갱신되지 않는다.
문맥 앙상블
같은 학습 표를 몇 가지 순열·전처리로 나눠 읽어 확률을 평균하는 횟수 (n_estimators). 이 모델의 유일한 실질 축이다.
정직 선택
설정을 직전 연도까지의 성적만 보고 고르는 절차. 이 실험은 설정이 하나라 아무것도 고르지 않았다 — 사후↔정직 간극이 0 인 것은 장점이 아니라 선택이 없었다는 뜻이다.
spread_deploy
배포 형태의 시드 흔들림. 시드 열 개에서 크기 5짜리 부분집합 20개를 고정 난수로 뽑아 각 부분집합의 확률 평균으로 승률을 내고, 그 20개의 표준편차를 쓴다. 판정 문턱은 이 값의 2배다.
e_규칙
기준선 하나 — 20분 모멘텀의 부호. 모델이 아니라 규칙이고 이 실험의 배포 관문이다.
e_적응상수
기준선 하나 — 후행 120영업일의 다수 클래스.
쓴 데이터 — 선행 실험의 피처 캐시를 그대로 읽었다. 새로 만든 원천이 없다. 결측률은 유효 1,847일 전체에서 센 값이다.
원천기간해상도행수열수결측쓰임
3년 국채선물 근월 (g1_)2016-12-20 ~ 2026-09-181분봉1,847240.06%모멘텀·변동폭·위치. 봉 컷오프 15:34:00
10년선물·커브 (g1p_)같음1분봉1,84760.11%장기 구간과의 관계
장중 투자자 수급 (g2_)2019-01-02 ~ 2026-09-1830초 증분1,8472819.98%수급 컷오프 15:34:00. 2017~18 이 전부 결측이라 이 그룹을 쓰는 묶음은 학습이 2019 부터다
일별·캘린더 (g6_)2016 ~ 2026-09-18일별1,847370.60%전일까지만 쓴다
선물 일봉 전필드 (g7_)2016 ~ 2026-09-18일별 종가 기준1,847480.21%전일 값만. 호가·베이시스·투자자 평균단가
한국은행 국고채 단순매입 (g8_)2019 ~ 2026-09-18사건1,847666.60%공개시장운영 축. 결측이 커서 141열 묶음에서 8열이 분산 0 으로 떨어진다
표본2016-12-20 ~ 2026-09-18일별(라벨)1,847204원시 2,394일에서 장 이상일과 ref_tick = 0 인 날을 뺀 것
분할 — 연도 확장창 워크포워드. 열수는 실측이다(분산 0 열이 폴드 안에서 떨어진다).
피처 묶음그룹선언 열실측 열학습 시작학습 행시험연도시험 행
T0_core 봉·커브·일별달력g1_ g1p_ g6_67652017344 → 1,6932019~20261,497
T4_daily +일봉 전필드+g7_1151132017344 → 1,6932019~20261,497
T1_flow34 +장중 수급+g2_95932019361 → 1,3492021~20261,136
T5_all 새 데이터 전부+g2_ g7_ g8_1491412019361 → 1,3492021~20261,136
티어 넷의 학습·시험창과 T4_daily 폴드 여덟
(가) 티어 넷의 학습 시작과 시험 구간. (나) T4_daily 의 폴드 여덟 — 학습이 344행에서 1,693행으로 자란다. 막대 안 일수는 런이 직접 기록한 값이다. 이 그림의 첫 줄(학습 344행)이 H22 가 겨냥한 자리다.

어떻게 쟀나

사전등록(protocol.md)을 결과 보기 전에 썼고 실행 뒤에 고치지 않았다. 판정 문턱 셋은 선행 실험과 같다.

판정 규칙 — 세 조건을 모두 넘어야 지지다.
조건무엇
승률비교 대상을 넘는다최소 조건
유의성같은 시험일에 짝지은 McNemar 양측 p < 0.05불일치 쌍 정확 이항검정. 승률이 높아도 유의하지 않으면 "차이가 있다" 고 쓰지 않는다
흔들림차이 > spread_deploy × 2배포하는 물건(확률 평균)이 시드를 바꾸면 얼마나 흔들리나

누설 가드를 둘 더했다. 문맥에 시험연도 행이 한 줄도 섞이지 않는다 — 이 모델은 학습 표를 입력으로 받으므로 거기 시험 행이 들어가면 그것이 곧 누설이고, 폴드를 자르는 코드는 선행 두 실험과 같은 여섯 줄이다. 그리고 사전학습 말뭉치와 우리 표본의 겹침은 확인할 수 없다 — 합성 데이터로 사전학습됐다고 보고돼 있고 우리 표는 비공개 단말·API 산출이라 겹칠 경로가 사실상 없으나, 확인 불가라는 사실을 적어 두고 결과가 지나치게 좋으면 이 항목을 먼저 의심한다.

돌린 모델 둘

돌린 모델 둘 — 같은 폴드에서

아래 그림은 모식도가 아니다. code/render_model8.pyT4_daily 시험 2026 폴드를 다시 적합해 커밋된 확률이 그대로 나오는지 확인한 뒤, 적합된 객체에서 읽은 값만으로 그린다(docs/AUTORESEARCH.md §1). 이 실험이 돌린 모델은 둘이고 둘 다 그린다(docs/REPORT_STYLE.md §2).

사전학습 표 트랜스포머 tabpfn#01

이 모델은 학습하지 않는다. 학습 표를 문맥으로 받아 시험 행을 바로 분류한다 — 경사하강이 돌지 않고 가중치가 한 개도 바뀌지 않는다. 우리가 흔들 수 있는 것은 «같은 표를 몇 가지 순열·전처리로 읽어 평균하나»(문맥 앙상블) 하나뿐이고, 라운드 0 의 비용 상한이 그 축을 1 로 묶었다.

그림 A · 구조 — tabpfn#01 · T4_daily 시험 2026 TabPFNV3p5 · 파라미터 218,982,656개 (학습 가능 218,982,648개 — 이 실험은 하나도 갱신하지 않는다) 입력 — 표준화된 피처 행렬 · 출력 — P(ref_tick > 0) 입력 시험 행 113열 중앙값 대치 · 표준화 분산 0 열 제거 문맥 (학습 표) 1,693행 × 113열 라벨 2개 클래스 시험연도 행은 한 줄도 없다 경사하강 없음 — 읽기만 한다 사전학습 트랜스포머 ICL 블록 24개 교차주의 블록 6개 선형 321개 · RMS정규화 142개 가중치 고정 (외부에서 받았다) 출력 P(ref_tick > 0) 문맥 앙상블 1회 평균 0.5 로 부호를 가른다 모듈 종류별 개수 — 적합된 객체의 named_modules() 실측 Linear 321 · _DtypeMatchingRMSNorm 142 · GELU 91 · Sequential 56 · MLP 35 · SoftmaxScalingMLP 28 · ICLTransformerBlock 24 · ICLAttention 24 이 실험이 바꾼 파라미터는 0개다 — «학습» 이 문맥을 기억하는 것뿐이기 때문이다.
상자 넷의 숫자는 전부 적합된 객체에서 읽었다 — 문맥 1,693행 × 113열(선언 115열에서 분산 0 열이 떨어진 실측), 파라미터 218,982,656개, ICL 블록 24개. 이 실험이 갱신한 파라미터는 0개다.
적합된 모듈의 종류별 개수 — named_modules() 실측.
모듈 종류개수
Linear321
_DtypeMatchingRMSNorm142
GELU91
Sequential56
MLP35
SoftmaxScalingMLP28
ICLTransformerBlock24
ICLAttention24
CrossAttentionBlock6
CrossAttention6
LayerNorm3
ModuleList3
InducedSelfAttentionBlock3
TransformerBlock3
파라미터 합계218,982,656

원장 대조 — 같은 파이프의 et_ref#00

앞선 실험이 고른 ExtraTrees 설정(400그루 · 깊이 6 · 잎 최소 20 · 분기 후보 √열)을 이 실험의 파이프와 폴드로 다시 돌린 것이다. 판정에 쓰지 않는다 — 앞선 실험의 숫자를 상수로만 믿지 않고 같은 자리에서 맞대 보려는 대조다.

그림 B · 개요 — et_ref#00 · T4_daily 시험 2026 입력 데이터 3년 국채선물 근월 1분봉 + 10년·커브 + 일별·캘린더 + 일봉 전필드 2016-12-20 ~ 2026-09-18 · 유효 1,847일 피처 115열 → 실제 113열 중앙값 대치 · 표준화 · 분산 0 열 제거 전처리는 학습창만 보고 적합한다 ExtraTrees — n_estimators=400 · max_depth=6 · min_samples_leaf=20 · max_features=sqrt f₁ f₂ f₃ f₄ f₅ ··· f₄₀₀ 위는 이 모델 트리 5그루와 마지막 그루의 실제 위상(점 = 잎) — 실물은 그림 B·C P(x) = (1/400) · Σ leaf_k(x) T4_daily · 시험 2026 (학습 1,693행 · 시험 148일) · 시드 0 출력 P(ref_tick > 0) 트리 400그루의 잎값 평균 하이퍼파라미터 — 세팅한 상한과 학습이 실제로 닿은 값 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 분할마다 피처 113개 중 10개만 후보로 뽑는다 트리끼리 서로 다른 곳을 보게 만든다 그루별 잎 수 분포 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 잎 8~38개
트리 400그루의 잎값을 평균한다. 실측 입력 113열(선언 115열).
그림 C · 첫 트리 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 · 접힘 아래를 접었다 max_depth = 6 뿌리→잎 분기 6번까지 이 트리 실제 깊이 6 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g6_is_auction_day ≤ 0.641 n=1,693 g1_pos_60m ≤ -0.1764 n=614 g7_flow_trades ≤ 1.641 n=267 g6_dom ≤ -0.2079 n=246 하위 3잎 n=103 하위 3잎 n=143 잎값 +0.3333 n=21 g6_rate_통안1년 ≤ -0.9744 n=347 g7_basis_저평가 ≤ 0.1035 n=59 잎값 +0.5000 n=28 잎값 +0.3548 n=31 g6_baserate_250d ≤ -1.184 n=288 잎값 +0.5405 n=37 하위 3잎 n=251 g1_ma_dev_60m ≤ -0.3584 n=1,079 g7_flow_trades ≤ 0.7769 n=286 g6_baserate_20d ≤ -0.3366 n=203 하위 3잎 n=74 하위 4잎 n=129 g7_basis_이론베이시스 ≤ 0.3382 n=83 잎값 +0.4167 n=48 잎값 +0.2857 n=35 g7_invpx_투신 ≤ 0.7575 n=793 g6_is_auction_3y ≤ 0.796 n=710 하위 4잎 n=550 하위 3잎 n=160 잎값 +0.5663 n=83 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오' · 잎이 많아 깊이 4 아래를 접었다(이 트리 전체 깊이 6 · 잎 30개)
설정한 깊이 상한과 실제로 닿은 깊이를 같이 적는다 — 분기 조건·표본 수·잎값이 전부 적합된 트리에서 읽은 값이다.
그림 D · 마지막 트리 깊이 0 · 뿌리 분기 조건 · n 깊이 1 분기 조건 · n 깊이 2 분기 조건 · n 깊이 3 분기 조건 · n 깊이 4 분기 조건 · n 깊이 5 분기 조건 · n 깊이 6 · 잎 분기 없음 max_depth = 6 뿌리→잎 분기 6번까지 이 트리 실제 깊이 6 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 아니오 g7_basis_평균선도금리 ≤ -1.302 n=1,693 g6_is_auction_day ≤ 0.7319 n=183 g7_vwap_gap_tick ≤ 0.219 n=68 잎값 +0.6053 n=38 잎값 +0.2667 n=30 g6_px_chg_60d ≤ 0.3683 n=115 g1_ma_dev_20m ≤ 0.1161 n=61 g7_ob_top5_ratio_chg5 ≤ 0.1026 n=41 잎값 +0.3810 n=21 잎값 +0.3500 n=20 잎값 +0.5500 n=20 잎값 +0.2963 n=54 g1_pos_60m ≤ -1.418 n=1,510 g1_ret_10m ≤ -1.452 n=165 잎값 +0.4194 n=31 g1_ret_10m ≤ -0.6758 n=134 g6_rate_CALL1일한은 ≤ 0.5781 n=69 잎값 +0.2632 n=38 잎값 +0.1613 n=31 g7_basis_이론갭_chg5 ≤ 0.191 n=65 잎값 +0.4444 n=36 잎값 +0.2069 n=29 g1_oi_chg_60m ≤ -1.083 n=1,345 g7_vol ≤ -0.2556 n=61 잎값 +0.6207 n=29 잎값 +0.6875 n=32 g1_pos_20m ≤ -0.8953 n=1,284 g6_is_auction_day ≤ -0.5236 n=155 잎값 +0.4565 n=46 g6_dom ≤ -0.4652 n=109 잎값 +0.4375 n=32 잎값 +0.3377 n=77 g6_dflow_개인순매수수량 ≤ -0.2558 n=1,129 g1p_curve_60m ≤ -1.298 n=655 잎값 +0.5692 n=65 잎값 +0.4492 n=590 g1_pos_day ≤ 0.2973 n=474 잎값 +0.4612 n=232 잎값 +0.5372 n=242 잎값 ≥ 0 (예측을 위로) 잎값 < 0 (예측을 아래로) n = 그 노드에 떨어진 학습 표본 수 · 조건(≤)이 참이면 왼쪽 가지 '예', 거짓(>)이면 오른쪽 '아니오'
마지막 그루. 무작위 분기라 첫 그루와 다른 피처를 쓴다.
그림 E · 깊이별 분기 피처
분기 위치 \ 피처g6_is_auction_dayg1_pos_dayg1_pos_20mg1_pos_60mg6_dowg6_prev_upg6_domg6_is_roll_weekg6_days_to_expiryg6_rate_CALL1일한은g6_rate_통안1년g6_dflow_증권선물순매수수량g6_rate_CD3개월g6_vol_60dg1p_f10_ret_20mg6_dflow_개인순매수수량g7_basis_모드듀레이션g7_basis_평균선도금리g1_ret_10mg1p_curve_20mg1_ma_dev_60mg1_ret_20mg1_ma_dev_20mg7_flow_aggr_share_chg5g6_prev5_upg1p_f10_ret_openg1_ret_30mg1p_f10_ret_5mg7_basis_국채현물수익률g7_basis_저평가g6_dflow_은행순매수수량g1_ret_1mg6_baserate_20dg6_dflow_외국인합순매수수량g7_flow_valueg6_baserate_120dg7_basis_이론갭g6_baserate_250dg7_flow_aggr_shareg6_px_chg_20dg1_ret_5mg6_px_chg_60dg1_ret_openg1_vol_dayg7_basis_시장베이시스g1p_f10_ret_60mg7_ktb_yieldg1_rng_60mg1_vwap_devg1p_curve_60mg6_is_auction_3yg1_rng_20mg6_baserate_60dg1_ret_60mg1_vol_last30_shareg1_ret_120mg6_dflow_보험순매수수량g7_flow_tradesg1_rng_dayg6_prev_ref_tickg6_dflow_투신순매수수량g6_vol_20dg7_ob_cnt_ratiog7_vol_chg5g7_vwap_gap_tickg6_prev_abs_ref_tickg7_basis_저평가_chg5g7_volg7_ktb_yield_chg5g7_vwap_gap_tick_chg5g6_prev_d_tickg7_ob_cnt_ratio_chg5g1_oi_chg_dayg1_oi_chg_60mg6_px_chg_5dg1_vol_last5_shareg7_rangeg7_basis_이론갭_chg5g7_basis_모드듀레이션_chg5g7_basis_평균선도금리_chg5g6_rate_통안1년_chg5dg7_flow_value_chg5g7_basis_이론베이시스g7_range_chg5g7_oi_chg_chg5g7_basis_시장베이시스_chg5g1_gap_openg7_basis_국채현물수익률_chg5g7_oi_chgg7_invpx_투신g7_ob_qty_ratiog7_invpx_투신_chg5g7_flow_trades_chg5g7_ob_qty_ratio_chg5g6_is_mpc_dayg7_invpx_보험g7_invpx_은행g7_ob_top5_ratiog6_is_month_endg7_invpx_증권/선물g7_invpx_보험_chg5g6_rate_CALL1일한은_chg5dg7_basis_이론베이시스_chg5g7_invpx_외국인합_chg5g7_invpx_은행_chg5g7_ob_top5_ratio_chg5g7_invpx_증권/선물_chg5g6_rate_CD3개월_chg5dg7_invpx_외국인합g7_invpx_연기금g6_is_quarter_endg7_invpx_연기금_chg5g1_n_bars
깊이 0 (뿌리)283229307061822373570324610961154440115522121147222360348010516100111430531041295201122101130026100013010000102022100100400
깊이 14547323215111038139471771382418515137116141375127115484749884762966352481233426744352123443476232435356182338614329001121201001300300764
깊이 2554837312817384022172516122016112013132018191814101119201510121614131111154911599129121291216910914121971241088851188677761012557465868510499126864552437253423030201001,269
깊이 3785958653426323034352530252129282325271718212321212223211921191925242219182018132014251821201824141318181513101015719101412148128151112131317811168106119899791013868679298735524863165462101,854
깊이 487596675556537314547363132362234302926262119322435361823383425232126272120252130202722262012151227153520211620202023212029201116181515171716151214971510151320151391471281361213119113961191164354823202002,345
깊이 565727055637464216061474042383741424627403131263134202930282436252929284034353021252919202823312719221424231327142528212214242728202519231915191571223212222161014161519101912106111211131541212103398739743351302,720
분기 합3583172922882021931871781761711401311311271241221201191151141131121121121111071061051051021009999989896968988878585848483828281797978777673737272727170706967656362626159595856555555525252515149494847474745454444403938363331302825232322221919181815111110409,352

깊이마다 어느 피처가 몇 번 갈랐나. 같은 폴드에서 TabPFN 은 이 표를 만들지 않는다 — 분기가 없다.

비용이 격자를 잘랐다

사전등록은 문맥 앙상블을 1·4·8·16·32 와 불균형 보정까지 설정 여섯으로 잡았다. 라운드 0 이 비용을 재서 그 중 다섯을 떨어뜨렸다 — 사전등록한 상한이 90초/적합이고, 넘으면 한 단계 줄이고 줄여도 넘으면 격자에서 뺀다는 규약이었다.

라운드 0 의 설정별 적합 시간과 사전등록 상한
가로축이 로그다. 붉은 선이 사전등록 상한 90초이고, 문맥을 한 번 읽는 설정(50.2초)만 그 안이다. 같은 폴드·같은 파이프에서 400그루 ExtraTrees 는 0.9초다 — 가장 싼 TabPFN 설정의 53분의 1, 가장 비싼 설정의 930분의 1이다. 가중치 캐시가 찬 뒤로 잰 값이고, 첫 적합은 내려받기를 포함해 503.5초였다.
§8 규약을 실측에 그대로 넣은 결과 — 남은 설정은 하나다.
설정문맥 앙상블큰 폴드판정
tabpfn#0432829.9초한 단계(16) 529.0초도 초과 → 뺀다
tabpfn#0316529.0초한 단계(8) 326.5초도 초과 → 뺀다
tabpfn#028326.5초한 단계(4) 188.0초도 초과 → 뺀다
tabpfn#058 + 보정293.5초한 단계(4) 초과 → 뺀다. 불균형 보정 축이 함께 떨어졌다
tabpfn#004188.0초한 단계 줄이면 #01 과 같아진다
tabpfn#01150.2초남는다

두 번째 관문도 같은 답을 냈다. 설정 여섯을 그대로 돌리면 직렬 117.4시간(시드 10)·58.7시간(시드 5)·35.2시간(시드 3)으로, 사전등록한 직렬 상한 12시간을 시드 사다리 끝에서도 3배 넘긴다. 비용 상한과 시드 사다리가 독립적으로 같은 결론에 이르렀다.

그래서 H23(문맥 앙상블 크기)은 미판정이다 — 짝의 양 끝이 같은 설정이 된다. 조용히 지우지 않고 미판정으로 남겼다. 그리고 설정이 하나면 «정직 선택» 이 아무것도 고르지 않는다: 사후↔정직 간극이 0 인 것은 장점이 아니라 선택이 없었다는 뜻이다. 다만 그 설정을 성능이 아니라 비용이 골랐으므로 이 승률에는 사후 정보가 섞이지 않았다 — 이 점은 강점이다.

결과 — 티어 넷

티어별 정직 선택 승률과 비교 대상 셋
남색이 TabPFN, 주황이 선행 실험의 정직 선택 트리, 옅은 주황이 같은 파이프로 다시 돌린 ExtraTrees, 회색이 20분 모멘텀 규칙이다. 남색의 오차 막대가 판정 문턱(±2×spread_deploy)이다. 113열 묶음에서 남색이 가장 높지만(0.6025) 옅은 주황(0.6059)이 그보다 위이고, 차이는 전부 문턱 안이다.
H21 — 정본 results/20260922_160905_pfn/. 머릿수는 정직 선택값이다.
티어nTabPFN누적틱선행 트리 정직문턱 ±2σMcNemar p (b:c)판정
T0_core1,4970.5999+6250.5905+0.00940.00850.3914 (122:108)미지지
T4_daily1,4970.6025+7030.5999+0.00270.00460.8398 (112:108)동급
T1_flow341,1360.5977+5670.5678+0.02990.00530.0308지지
T5_all1,1360.5898+5330.5739+0.01580.00890.2473미지지

T0_core 가 문턱 셋 중 둘(승률·흔들림)을 넘고 McNemar 에서만 걸렸다 — 예측이 갈린 230일이 122:108 이다. 사전등록 규율대로 "차이가 있다" 고 쓰지 않는다.

원장 대조 — 선행 실험이 고른 ExtraTrees 설정을 이 실험의 파이프와 폴드로 다시 돌렸다. 판정에 쓰지 않는다.
티어TabPFN누적틱같은 파이프 ExtraTrees누적틱비용 비
T0_core0.5999+6250.6019+659−0.002053배
T4_daily0.6025+7030.6059+683−0.003453배
T1_flow340.5977+5670.5960+511+0.001753배
T5_all0.5898+5330.5907+479−0.000953배

정직하게 읽으면 이것이 이 실험의 가장 불편한 표다. 고정 설정 트리가 네 티어 중 셋에서 더 높고, 차이는 전부 0.34%p 안이다 — 흔들림 문턱 안이므로 둘을 가르지 못했다고 읽어야 한다. 그리고 그 트리는 폴드당 0.6초다.

다만 두 숫자의 성질이 다르다. 옅은 주황은 «선행 실험이 18종에서 이 모델을 골랐다» 는 사후 정보를 쓴 고정 선택이라 정직한 숫자가 아니다. 남색의 설정은 비용이 골랐으므로 사후 정보가 없다. 같은 표에 놓고 "트리가 이겼다" 고 쓰면 그 비대칭을 숨기는 것이다.

초반 폴드 — 이 실험의 산출

학습이 가장 작은 두 해의 승률 비교
학습 344행·522행인 두 해다. 왼쪽 113열 묶음의 2019 에서 64.61% — 같은 폴드의 신경망은 53.93%, 규칙은 60.11% 였다. 2020 은 셋 다 낮지만 신경망만 50% 아래(48.09%)로 내려간다. 점선이 0.5 다.
H22 — 초반 두 해를 짝지어 비교했다. 신경망 쪽은 그 실험의 정직 선택 예측을 일자 단위로 되살린 것이다.
티어시험연도학습 행TabPFN선행 신경망짝 McNemar p (b:c)판정
T4_daily20193440.64610.5393+0.10680.0066 (74:43)지지
20205220.53010.4809+0.0492
T0_core20193440.61240.5393+0.07310.1004 (42:27)부분 지지
20205220.52460.4863+0.0383

수급을 쓰는 두 묶음은 시험이 2021 부터라 이 가설의 범위 밖이다 — 그 묶음에는 2019·2020 폴드가 없다.

T4_daily 연도별 승률 — TabPFN·신경망·규칙
여덟 해 전부 53% 이상이고 50% 미만이 0회다. 선행 실험의 신경망은 같은 묶음에서 2020 이 48.09% 였다. 다만 규칙(점선)을 넘은 해는 2019·2021·2024·2025 넷뿐이고, 2026 은 규칙에 0.7%p 뒤진다.

또 규칙이다

배포 관문 — e_규칙(20분 모멘텀 부호)과의 짝 비교.
티어TabPFNe_규칙문턱 ±2σMcNemar p (b:c)넘었나
T0_core0.59990.5878+0.01200.00850.3690 (188:170)못 넘었다
T4_daily0.60250.5878+0.01470.00460.2801 (200:178)못 넘었다
T1_flow340.59770.5933+0.00440.00530.8250못 넘었다
T5_all0.58980.5933−0.00350.00890.8677못 넘었다

세 실험 연속 같은 자리에서 멈췄다. 트리(+1.21%p, 유의성 미검정) → 신경망(+0.26%p · p=0.9037) → 사전분포(+1.47%p · p=0.2801). 모델 축을 세 번 바꿨는데 20분 모멘텀 규칙을 유의하게 넘지 못했다. 남은 과제가 모델이 아닐 수 있다는 신호다 — T4_daily 에서 규칙과 갈린 378일이 200:178 이므로 «규칙이 이기는 날과 모델이 이기는 날이 갈리는가» 를 볼 재료는 있다.

흔들림 — 사전등록이 "학습이 없어 더 작을 것" 이라 적고 0.005 로 추정했다.
티어spread_deployspread_seed선행 신경망의 spread_deploy
T0_core0.00420.00440.0089
T4_daily0.00230.00680.0055
T1_flow340.00270.00740.0060
T5_all0.00450.00740.0086

실측 0.0023~0.0045 로 추정이 맞았다. 그래서 문턱이 선행 실험보다 좁아졌고, T0_core 가 승률·흔들림을 넘고도 McNemar 에서 걸린 것은 문턱이 느슨해서가 아니다. 적응상수 대비 McNemar p 는 0.0024~0.0533 으로 넷 중 셋에서 적응상수를 유의하게 넘는다.

한계

이 모델을 탐색하지 못했다. 비용 상한이 설정 여섯 중 다섯을 떨어뜨려 문맥을 한 번 읽는 설정만 돌렸다. 더 큰 문맥 앙상블이 더 좋을지 이 실험은 모른다(H23 미판정). 상한은 사전등록 값이라 사후에 올리지 않았다.

비용이 53배다. 같은 파이프의 400그루 ExtraTrees 가 폴드당 0.6초일 때 이 모델은 33.5초다. 사전등록 격자의 가장 비싼 설정은 큰 폴드에서 830초 (930배)였다.

비교 상수 하나가 코드와 어긋났다. 수급+전부 묶음의 선행 트리 값을 0.5766 으로 박았는데 코드의 재계산이 0.5739 를 냈다 — 사전등록은 절차 둘 중 큰 쪽을 쓰라 했고 코드는 하나만 쟀다. 어느 값으로도 판정이 미지지라 결론은 바뀌지 않지만, 코드가 사전등록을 덜 지킨 자리다.

H22 가 티어 하나에서만 유의하다. 113열 묶음은 p=0.0066 이지만 65열 묶음은 p=0.1004 로 «부분 지지» 다.

가중치를 외부에서 받았다. 이 저장소의 다른 모델은 전부 우리 데이터에서 적합된다. 판본(tabpfn-v3.5-20260909)을 런이 스스로 적는다. 사전학습 말뭉치와의 겹침은 확인할 수 없다.

GPU 가 없다(CPU 12스레드). 이 모델은 GPU 에서 비용 순위가 달라질 축이고, 그러면 H23 을 판정할 수 있다. 레짐별 분해는 하지 않았다. 캐파시티·비용 축은 비해당(방향 채점 게임 — 체결이 없다).

산출물

  • 사전등록protocol.md
  • 분석·판정analysis.md
  • 정본 런results/20260922_160905_pfn/
  • 설정 격자·적합code/pfnmodels.py
  • 비용 측정run0.py
  • 그림code/render_figures.py
  • 구조도code/render_model8.py
  • 입력(선행 실험)experiments/0005_flow_api_model_zoo/