Optiver 대회 —
마지막 10분의 승부
나스닥 종가경매의 마지막 10분을 두고 4,436팀이 겨룬 Kaggle 예측 대회. 우승의 핵심은 화려한 신모델이 아니라 문제의 구조를 읽어 낸 설계 — 피처의 횡단면 상대화, 주기적 재학습, 그리고 "평균 빼기"였다. 이 모듈이 끝나면 "좋은 피처란 무엇인가"와 "남의 성공에서 무엇을 배워올 수 있는가"에 구체적으로 답할 수 있다.
하루 중 가장 뜨거운 10분을 두고, 4,436팀이 붙었다
승자는 거대한 팀도, 비밀 신모델도 아니었다. 문제의 정의를 정확히 읽고 "평균을 빼는" 설계를 한 솔로 참가자였다.
마감 10분 전, 주문이 쏟아지기 시작한다
2023년 겨울 어느 오후, 미국 동부 시간 3시 50분. 나스닥의 하루가 끝나기 10분 전이 되면 인덱스펀드와 ETF의 대량 주문이 한꺼번에 밀려들기 시작한다. 이 주문들을 한데 모아 단일 가격으로 일괄 체결해 공식 종가를 정하는 절차가 종가경매다. 마켓메이커 Optiver는 바로 이 10분을 무대로 Kaggle에 예측 대회를 열었고, 4,436팀이 뛰어들었다.
결과는 뜻밖이었다. 우승자는 수십 명의 팀이 아니라 솔로 참가자였고, 그의 무기는 비밀 병기 하나가 아니라 문제의 구조를 정확히 읽어 낸 몇 가지 설계의 조합이었다. 그중 가장 단순한 것은 놀랍게도 뺄셈 — 전 종목 예측값에서 평균을 빼는 후처리였다. 왜 뺄셈 하나가 세계 최고 수준의 대회에서 무기가 되는가. 그 답이 이 모듈의 줄기다.
앞 모듈들에서 배운 도구 — 피처 만들기, 검증, 전향 평가 — 가 세계 최고 수준의 실전에서 어떻게 조립되는지를 보는 사례 연구이기도 하다.
대회를 사례 연구로 읽을 때의 요령은 "누가 몇 등 했나"가 아니라 "문제의 어떤 구조가 어떤 설계를 강제했나"를 묻는 것이다. 이 대회의 목표 정의(시장 평균 대비 상대 이동) 하나가 우승 솔루션의 거의 모든 설계 — 피처 상대화, 제로-민 — 를 논리적으로 결정했다. 좋은 설계는 발명이 아니라 문제 정의에서 읽어 낸 필연에 가깝다는 것이 이 모듈의 밑그림이다.
생각해 볼 질문
"시장 전체가 오르는 날의 +1%"와 "시장이 조용한 날의 +1%"는 같은 신호일까. 이 모듈이 끝나면 이 질문에 피처 설계의 언어로 답할 수 있어야 한다.
무엇을 겨루는 대회였나
목표는 절대 수익률이 아니라 "시장 평균 대비" 상대 이동이었다. 이 정의 하나가 우승 솔루션의 거의 모든 설계를 결정한다.
종가경매 — 유동성이 폭발하는 10분
나스닥은 매일 장을 닫을 때 마지막 10분간 사자·팔자 주문을 한데 모아, 하나의 가격에 일괄 체결해 공식 종가를 정한다. 인덱스펀드·ETF는 "종가 기준으로 지수를 따라간다"고 약속한 상품이므로, 추적 오차를 줄이려면 정확히 종가에 사고팔아야 한다 — 그래서 대량 주문이 이 10분에 몰린다.
마켓메이커 입장에서는 "곧 결정될 종가가 지금 가격보다 위인가 아래인가"를 남보다 조금이라도 잘 맞히는 것이 곧 수익이다. 대회가 제공한 데이터도 이 시간대 특유의 것들이었다 — 경매에 쌓인 매수·매도 주문의 쏠림(주문 불균형)과 초 단위로 갱신되는 참고 가격. 대회의 질문은 "지금부터 60초 뒤, 이 종목의 공정가격은 시장 평균 대비 얼마나 움직일까"였다.
목표의 정의를 다시 보자. 대회는 "이 종목이 몇 % 오를까"가 아니라 "시장 평균(전 종목의 평균 움직임) 대비 얼마나 더 움직일까"를 물었다. 시장 전체가 일제히 출렁이는 부분은 빼고, 그 종목만의 상대적 움직임을 맞히라는 것이다. 종가경매 시간대에는 시장 전체가 함께 밀리고 당겨지는 공통 성분이 크기 때문에, 그것을 목표에서 미리 제거해야 "종목 고유의 정보"를 겨루는 대회가 된다. 이 정의 하나가 §2에서 볼 우승 설계의 출발점이다.
출처 Optiver — Trading at the Close, Kaggle (2023–24): kaggle.com/competitions/optiver-trading-at-the-close · 나스닥 종가경매(Closing Cross) 제도는 Nasdaq 공식 문서 기준.
MAE가 "이상치에 강하다"는 말의 뜻
세 번의 예측 오차가 +1, −2, +3이었다고 하자. MAE는 (1+2+3)÷3 = 2.0, MSE는 (1+4+9)÷3 ≈ 4.67이다. 여기에 크게 빗나간 네 번째 오차 +20이 추가되면 두 지표의 반응이 갈린다.
| 지표 | 오차 3개일 때 | +20 추가 후 | 변화 |
|---|---|---|---|
| MAE | 2.0 | (1+2+3+20)÷4 = 6.5 | 약 3배 |
| MSE | ≈ 4.67 | (1+4+9+400)÷4 = 103.5 | 20배 이상 |
MSE로 학습한 모델은 이 한 번의 극단값을 줄이는 데 온 힘을 쏟게 되고, MAE로 학습한 모델은 "대다수 평범한 시점"을 고르게 잘 맞히는 쪽을 택한다. 급등락이 일상인 금융 데이터에서 대회 주최 측이 MAE를 채점 기준으로 고른 이유다.
통계적으로 말하면 MSE를 최소화하는 예측은 조건부 평균이고, MAE를 최소화하는 예측은 조건부 중앙값이다. 분포의 꼬리가 두꺼운 금융 수익률에서 평균은 극단값 몇 개에 끌려다니지만 중앙값은 안정적이다. 채점 지표의 선택이 곧 "모델에게 무엇을 배우라고 지시하는가"의 선택이라는 점을 기억해 두면, 다른 대회나 실무 문제에서도 손실함수를 고르는 눈이 생긴다.
최종 채점은 "아직 존재하지 않는 3개월"로
최종 순위는 대회 종료 후 3개월간의 진짜 미래 데이터로 확정했다. 리더보드에 과적합한 팀은 이 구간에서 걸러졌다 — 전향 평가를 대회 규칙으로 기계화한 셈이다.
이 장치가 왜 필요한지는 캐글의 오랜 경험이 말해 준다. 대회 기간 중 공개 리더보드는 참가자가 하루에도 몇 번씩 제출하며 점수를 확인하는 구조라, 수천 팀이 수만 번 제출하다 보면 누군가는 "리더보드 채점용 데이터의 우연한 무늬"에 딱 맞는 답안을 만들어 낸다. 이것은 실력이 아니라 다중비교의 함정(부록 B) 그 자체다. 아직 존재하지 않는 미래 3개월로 최종 채점을 하면 이 꼼수가 원천적으로 불가능해진다 — 미래 데이터에는 아무도 미리 맞춰 볼 수 없기 때문이다.
실제로 공개 리더보드 상위권 중 상당수가 최종 구간에서 순위가 크게 밀린 것으로 알려져 있다.
이 규칙은 개인 연구자에게도 그대로 번역된다. 백테스트를 1,000번 돌려 가장 좋은 것을 고르는 행위는 공개 리더보드에 수만 번 제출하는 것과 구조적으로 같다. 해독제도 같다 — 최종 판단은 한 번도 들여다보지 않은 구간(홀드아웃 또는 진짜 미래)에서 단 한 번 내리는 것. 이 강의 플랫폼이 공식 검증을 전향 구간으로 치르는 이유이며, M6 대회 모듈에서 본 실시간 예측 대회의 정신과도 이어진다.
출처 대회 일정·채점 규정: Kaggle 대회 페이지 Overview/Timeline — kaggle.com/competitions/optiver-trading-at-the-close
1위 솔로 참가자의 무기
목표가 상대값이면 재료도 상대값이어야 한다 — 문제 구조와 피처 구조의 정합이 이 대회 최대의 성능 점프였다.
상대화 · 온라인 학습 · 제로-민 · 이종 앙상블
4,436팀 중 1위는 거대한 팀이 아니라 솔로 참가자였다. 그의 솔루션은 비밀 병기 하나가 아니라, 문제의 구조를 정확히 읽어 낸 설계 네 가지의 조합이었다.
| 설계 | 무엇을 했나 | 왜 통했나 |
|---|---|---|
| 횡단면 상대화 | 지표의 절대값 대신 "오늘 전 종목 중 몇 등인가"(순위), "전 종목 평균의 몇 배인가"로 변환 | 목표 자체가 "시장 평균 대비" 상대값 — 재료의 구조를 목표의 구조에 일치시켰다 |
| 온라인 학습 | 12일마다 모델을 새 데이터로 재학습 | 시장 통계는 계속 변한다(비정상성) — "계속 다시 배우는 것" 자체가 단일 요소로 최대 기여 |
| 제로-민 후처리 | 전 종목 예측값의 평균을 매 시점 0으로 강제 조정 | "상대 이동의 평균은 정의상 0"이라는 사전지식을 출력에 주입 |
| 이종 앙상블 | 트리 모델과 신경망(GRU·Transformer)을 결합 | 서로 다른 오차가 상쇄 — 단, 트리 단독으로도 1위권 성적이었다 |
마지막 줄이 흥미롭다. 트리 모델 하나만으로도 1위권이었다는 것은, 승부처가 모델의 화려함이 아니라 피처와 학습 체계였다는 뜻이다.
온라인 학습이 최대 기여였다는 점은 곱씹을 가치가 있다. 대회 데이터는 약 1년 치였고 최종 채점은 그 뒤 3개월이었다. 그 사이 금리 환경, 변동성 수준, 종목 구성이 조금씩 변한다. 한 번 학습하고 고정한 모델은 시간이 갈수록 낡아 가지만, 12일마다 재학습하는 모델은 최신 시장 통계를 계속 반영한다. 흔히 재학습을 운영상의 편의로 여기지만, 이 대회는 재학습 자체가 성능의 최대 단일 원천일 수 있음을 보여 줬다.
다만 함정도 있다. 재학습 주기를 리더보드 점수에 맞춰 이리저리 튜닝하면 그 자체가 또 하나의 과적합이 된다 — 주기 후보를 몇 개로 제한하고 검증 구간에서 한 번만 고르는 절제가 필요하다.
출처 우승 솔루션 공개 글과 상위권 해법 논의: Kaggle 대회 Discussion — kaggle.com/competitions/optiver-trading-at-the-close/discussion
순위로 바꾸면 "시장의 온도"가 사라진다
"이 종목의 주문 불균형이 +5억 원"이라는 절대값은 그 자체로 해석이 어렵다. 시장 전체가 매수 우위인 날이라면 평범한 수준이고, 시장이 조용한 날이라면 강한 신호다. 목표가 "시장 대비"이므로, 정말 필요한 정보는 "다른 종목들에 비해 얼마나 두드러지는가"다.
| 종목 | 불균형 (억 원) | 순위(백분위) | 다음 날 ×10 과열 시 | 순위(백분위) |
|---|---|---|---|---|
| 가 | +10 | 0.75 | +100 | 0.75 |
| 나 | +2 | 0.25 | +20 | 0.25 |
| 다 | −1 | 0.00 | −10 | 0.00 |
| 라 | +4 | 0.50 | +40 | 0.50 |
| 마 | +50 | 1.00 | +500 | 1.00 |
시장 전체가 과열되어 모든 값이 10배가 되어도 순위는 그대로다. 절대값 피처는 "시장 전체의 온도"에 따라 분포가 요동치지만, 순위 피처는 어떤 날에도 같은 눈금을 유지한다 — 비정상성(k-NN 아날로그 모듈에서 다룬 문제)에 대한 훌륭한 방어이기도 하다.
절대값을 그대로 넣으면 모델이 "시장 공통 성분을 빼는 법"까지 데이터에서 스스로 배워야 한다. 순위나 평균 대비 배율로 바꿔 주면 그 뺄셈이 피처 단계에서 이미 끝나 있다. 모델이 배워야 할 것을 사람이 미리 정리해 주는 것 — 이것이 좋은 피처 엔지니어링의 정석이다. 팩터 랭킹 모듈에서 팩터를 횡단면 순위로 표준화한 것과 정확히 같은 발상이며, 이 대회는 그 발상이 세계 최고 수준의 실전에서도 승부처였음을 보여 준다.
제로-민 후처리는 왜 공짜 점심인가
어느 시점 전 종목의 목표값(시장 평균 대비 이동)을 모두 합하면, 정의상 "평균 대비" 편차의 합이므로 0에 가깝다. 그런데 모델의 예측값 평균은 학습 노이즈 때문에 0이 아니라 어떤 값 \(m\)으로 치우치곤 한다.
이때 모든 예측에서 \(m\)을 빼 주면(제로-민), 정답이 반드시 만족하는 성질을 예측도 만족하게 된다. 데이터를 더 쓰는 것도, 모델을 키우는 것도 아니고, 문제의 정의에서 논리적으로 따라 나오는 제약을 출력에 부과하는 것뿐이다. 그래서 비용 없이 오차만 줄어드는, 드문 "공짜 점심"이다.
- 일반화 — 정답이 반드시 만족하는 수학적 성질(합이 0, 확률의 합이 1, 음수 불가 등)을 안다면, 모델 출력을 그 성질에 맞게 사후 보정하는 것은 거의 언제나 이득이다
- 수렴의 증거 — 상위권 여러 팀이 서로 모른 채 같은 결론(상대화 + 온라인 학습 + 제로-민)에 도달했다
독립된 연구자들이 같은 답에 수렴하는 것을 과학에서 재현성의 신호로 보듯, 대회에서도 마찬가지다. 1위 혼자만의 기교였다면 "그 사람의 손맛"일 가능성을 배제하기 어렵지만, 상위권 팀들이 각자 다른 모델·다른 코드로 같은 세 기둥에 도달했다면, 그것은 이 문제의 구조가 요구하는 정답에 가깝다고 읽어야 한다. 남의 솔루션을 읽을 때 "여러 팀에 공통된 뼈대"와 "한 팀 특유의 장식"을 구분하는 습관은 이 관찰에서 나온다.
상대화 실험실
시장 공통 성분이 아무리 요동쳐도, 평균을 빼고 나면 순수한 상대 신호는 꿈쩍도 하지 않는다 — 슬라이더로 확인한다.
공통 성분을 지우는 뺄셈
종목 5개의 예측값에서 시장 공통 성분 빼 보기
목표 — 다섯 종목의 원시 예측값에 시장 공통 성분(전 종목이 함께 움직이는 부분)을 더하고 빼 보면서, 제로-민 후처리(개별 − 평균)가 공통 성분을 완전히 소거하고 순수 상대 신호만 남기는 것을 확인한다.
조작 안내 — 슬라이더를 −3%에서 +3%까지 천천히 움직여 본다. 관찰 포인트 — ① 패널 A에서는 다섯 막대와 평균선(회색 점선)이 통째로 오르내린다. 시장 전체의 "온도"가 변하는 것이다. ② 패널 B는 슬라이더를 어디에 두어도 전혀 움직이지 않는다 — 공통 성분은 평균에 그대로 들어 있으므로, 빼는 순간 완전히 소거된다. ③ readout의 "상대 신호 합"이 항상 정확히 0 — 제로-민 후처리가 보장하는 성질이다. 목표가 "시장 평균 대비"인 문제에서 모델에게 정말 필요한 정보는 패널 B뿐이라는 것이 이 실습의 결론이다.
패널 A만 보고 학습하는 모델은 "슬라이더가 어디에 있는가"라는, 목표와 무관한 잡음까지 함께 배워야 한다. 데이터가 무한하다면 언젠가 스스로 뺄셈을 배우겠지만, 유한한 데이터에서는 그 학습 용량이 낭비된다. 상대화는 그 낭비를 사람이 미리 없애 주는 일이다. 반대로 목표가 절대 수익률인 문제(예: 시장 방향 자체를 맞히는 문제)라면 공통 성분이야말로 맞혀야 할 대상이므로, 같은 뺄셈이 정보를 버리는 일이 된다 — 상대화는 만능 기술이 아니라 목표 정의에 종속된 선택이다.
알파와 방법론 — 가져올 수 있는 것의 경계
알파는 데이터에 붙어 있어 이식 불가, 방법론은 데이터가 달라도 이식 가능하다. 재현 연구의 진짜 수확은 이 구분법이다.
식재료는 못 가져와도 요리법은 가져온다
이 대회의 수익 원천(알파)은 경매 특유의 초단기 데이터 — 주문 불균형과 60초 단위 가격 — 에 있다. 하루 단위 데이터에는 그 정보 자체가 존재하지 않는다. 즉 알파는 이식 불가다. 반면 문제를 푸는 방식 — 상대 목표 정의, 피처 상대화, 제로-민, 주기적 재학습, MAE 손실 — 은 데이터가 달라도 옮길 수 있다. 방법론은 이식 가능하다.
요리에 비유하면 알파는 "그 지역에서만 나는 식재료"이고 방법론은 "칼질과 불 조절"이다. 식재료는 가져올 수 없어도 요리법은 어느 부엌에서나 통한다.
"캐글 1위 솔루션 코드를 내려받아 한국 주식 일봉 데이터에 돌리면 비슷한 성능이 나온다."
그 코드가 강했던 이유의 절반 이상은 "경매 10분의 주문 불균형"이라는 재료에 있다. 재료가 없는 데이터에서는 껍데기만 남는다. 반대 방향의 오해 — "우리 데이터엔 그 피처가 없으니 배울 게 없다" — 도 똑같이 틀렸다. 상대 목표 정의, 횡단면 상대화, 정의상 성립하는 제약의 후처리 주입, 주기적 재학습. 이 네 가지는 데이터가 무엇이든 적용을 검토할 가치가 있는 이식 가능 자산이다.
인샘플 +27.2는 성능이 아니라 경고다
이 강의 플랫폼의 재현 모듈은 방법론만 하루 단위 데이터로 옮겼고, 알파가 없는 합성데이터에서 인샘플 +27.2 → OOS(표본 외) −3.97이라는 결과를 얻었다(이 플랫폼의 합성데이터 실험 실측치).
이 실험의 논리를 정리하자. 정보가 전혀 없는 합성데이터를 넣었으니, 올바른 파이프라인이라면 OOS에서 성과가 0 근처로 무너져야 한다. 실제로 −3.97로 무너졌다 — 파이프라인은 정직하게 작동한다. 동시에 인샘플에서는 +27.2라는 화려한 숫자가 나왔다 — 이 정도로 강력한 도구는 아무 정보가 없어도 훈련 데이터의 노이즈를 통째로 외워 그럴듯한 성과를 "만들어 낼" 수 있다.
누군가 인샘플 성과표만 들고 와 투자를 권한다면, 이 실험 하나가 왜 그것을 믿으면 안 되는지에 대한 살아 있는 증거가 된다. 백테스트의 한계 모듈의 과적합 경고를 우리 손으로 재확인한 셈이다.
재현 연구의 진짜 수확은 수익이 아니라 구분법이다. 무엇이 데이터에 붙어 있고(알파), 무엇이 이식 가능한가(방법론)를 가르는 눈. 이 구분이 서면 남의 성공 사례를 읽는 방식이 달라진다 — "저 성과를 복제할 수 있는가"가 아니라 "저 설계 중 내 문제의 구조에도 성립하는 것은 무엇인가"를 묻게 된다. 전자는 대부분 실망으로 끝나고, 후자는 거의 언제나 무언가를 남긴다.
생각해 볼 질문
지금 다루는 데이터에서 "정답이 정의상 반드시 만족하는 성질"을 하나 찾아보자. 그 성질을 후처리로 주입하면 제로-민과 같은 공짜 점심이 될 수 있는가.
퀴즈와 정리
답을 보기 전에 먼저 스스로 답해 본다. 전부 이 모듈 안에서 다룬 내용이다.
제로-민 후처리가 정당화되는 이유는 무엇인가?
대회 순위를 종료 후 3개월간의 진짜 미래 데이터로 확정한 이유는?
우리 재현 실험의 OOS −3.97을 "실패"라 부르지 않는 이유는?
이 대회에서 MSE 대신 MAE를 채점 기준으로 쓴 것이 금융 데이터에 유리한 이유는?
주문 불균형의 절대값 대신 전 종목 내 순위로 바꿔 넣으면 얻는 이점 두 가지는?
캐글 1위 솔루션 코드를 하루 단위 한국 주식 데이터에 그대로 돌렸을 때 대회만큼의 성능을 기대하기 어려운 이유는?
① 목표가 상대값이면 피처도 상대화한다 — 문제 구조와 재료 구조의 정합이 이 대회 최대의 성능 점프였다.
② 비정상 시장에서는 "계속 다시 배우는 것" 자체가 경쟁력이다 — 12일 주기 재학습이 단일 요소로 최대 기여였다.
③ 정답이 정의상 만족하는 제약(평균 0, 합 1 등)은 후처리로 주입한다 — 비용 없는 오차 감소, 공짜 점심이다.
④ 알파는 데이터에 붙어 있어 이식 불가, 방법론은 이식 가능 — 남의 성공에서 가져올 것은 성과가 아니라 설계다.
⑤ 화려한 인샘플 성과는 성능의 증거가 아니라 암기 능력의 경고일 수 있다.
참고문헌
수치와 일화는 아래 원문 기준으로 서술했다. 링크는 공개 원문이 확실한 것만 달았다.
대회 · 1차 자료
- Optiver — Trading at the Close. Kaggle 대회 페이지 (2023–24). 대회 규칙·데이터 정의·타임라인·최종 리더보드의 1차 출처. kaggle.com/competitions/optiver-trading-at-the-close
- 대회 Discussion (솔루션 공개 글). 우승 및 상위권 참가자들이 공개한 해법 설명 — 횡단면 상대화·온라인 학습·제로-민 후처리·앙상블 구성의 근거. kaggle.com/competitions/optiver-trading-at-the-close/discussion
제도 · 배경
- Nasdaq. The Nasdaq Closing Cross — 종가경매(클로징 크로스) 제도의 공식 설명 문서. 나스닥 공식 사이트에서 열람 가능.
이 모듈의 재현 실험 수치(인샘플 +27.2 → OOS −3.97)는 강의용 실험 플랫폼의 합성데이터 실측이며, 실제 투자 성과를 시사하지 않는다. 참가 팀 수(4,436팀)와 채점·일정 관련 사실은 Kaggle 대회 페이지 기준이고, "공개 리더보드 상위권 중 상당수가 최종 구간에서 밀렸다"는 서술은 대회 커뮤니티에서 널리 관찰된 정황으로 표시했다. 실습의 수치는 결정론적 계산으로, 손검산과 대조해 검증했다.