세 줄 요약
- 지표물 장내 체결 한 번의 실효 반 스프레드는 3년 0.114, 5년 0.114, 10년 0.101, 30년 0.162bp 다. 지표물끼리의 교체 왕복은 0.40 ~ 0.65bp 로, 상대가치 실험의 1bp 가정은 지표물에는 넉넉하다.
- 5분 마크아웃 비용은 평균 −0.007bp 로 사라진다. 체결 전 정보로 이것을 맞히는 LightGBM 의 오차 감소는 반 스프레드 기준선 대비 6.6% 뿐이고, 표적을 섞은 귀무도 6.5% 를 낸다.
- 판정은 폐기(H816, H817 미지지)다. 데스크 계산기에는 모형 대신 군별 비용표를 쓴다. 경과물은 장내에서 거의 거래되지 않아 장외 자료로 다시 재야 한다.
가설과 결론
국고채 현물로 상대가치 매매를 하려면 비용 가정이 필요하다. 커널 곡선 교체, 대차 스페셜 되돌림, 곡률 괴리 같은 현물 상대가치 실험은 모두 «두 종목 교체를 들어갔다 나오는 데 금리로 1bp» 를 비용으로 놓았다. 국채선물의 체결 비용은 따로 재 둔 표가 있지만 현물 비용은 잰 적이 없었다. 이 실험은 거래 신호를 찾는 실험이 아니라 비용을 재는 실험이다. 장내 국고채 전문 시장(KTS)의 체결과 호가 틱을 맞대어 체결 한 번에 시장가 주문자가 실제로 무엇을 내는지 재고, 그 비용을 체결 전에 미리 맞히는 모형이 단순한 반 스프레드 가정보다 나은지 물었다. 아이디어의 출처는 미국 체결 분석 회사의 거래 비용 분석 노트로, 체결 전 비용 모형을 도착가격과 체결 뒤 마크아웃에 견주는 틀이다.
- 가설
- 확인 구간 5분 마크아웃 비용 c5 의 평균 절대 오차(MAE)에서 LightGBM 비용 모형이 «종목 평균 반 스프레드» 기준선보다 15% 이상 작다(H816, 5일 블록 부트스트랩, Holm p < 0.05). 보조로 «종목 마크아웃 중앙값» 기준선보다도 작고(H817), 지표물 교체 왕복 비용의 95% 상한이 3, 5, 10, 30년 모두 1bp 이하이며(H818), 장외 대리 지표로 본 경과물 교체 왕복은 1bp 를 넘고 지표물보다 비싸다(H819). 탐색으로 15:00 ~ 15:30 이 가장 싸고(H820), 큰 체결일수록 비싸다(H821).
- 결론
- H816 은 부호로는 유의하지만 크기가 6.6% 로 문턱 15% 에 못 미쳤고, 표적을 섞어 학습한 귀무가 같은 6.5% 를 내서 감소분은 전부 기준선의 치우침을 걷어 낸 몫이었다. H817 은 감소율 −0.06%, p 0.72 로 미지지다. H818 은 지지(30년 상한 0.75bp 가 가장 큼), H819 도 지지지만 그 크기는 개인과 기타법인의 소매 마크업이 만든 값이다. H820, H821 은 미지지다. 사전등록 규칙 «H816 미지지면 폐기» 에 따라 판정은 폐기다.
정리하면 장내 지표물 비용은 작고 예측할 것도 별로 없다. 시장가 주문자는 체결 순간 약 0.1bp 의 반 스프레드를 내지만, 시장은 몇 초 안에 그 주문 쪽으로 움직여 5분 뒤에는 평균으로 비용이 남지 않는다. 그 5분 동안의 오차는 금리 전체가 움직인 몫이 대부분이라 체결 전에 알 수 있는 정보로는 줄일 수 없다. 그래서 데스크 계산기용으로는 모형보다 군별 평균 비용표가 맞고, 1bp 가정에 대한 판단은 지표물과 경과물을 나눠 내려야 한다.
용어와 기호
- KTS
- 한국거래소 국채 전문 유통 시장. 국고채 전문딜러가 호가를 내고 체결하는 장내 시장이다. 연속 거래는 09:00 ~ 15:30 이다
- 지표물, 구지표, 경과물
- 만기 구간(군)마다 가장 최근에 발행해 시장이 기준으로 삼는 종목이 지표물, 그 직전 둘이 구지표와 구구지표, 그보다 오래된 종목이 경과물이다
- 군
- 발행 만기 구간. 2년, 3년, 5년, 10년, 20년, 30년, 50년, 물가연동이 있다
- bp
- 금리 0.01%p. 이 페이지의 비용은 모두 금리 bp 다. 같은 bp 라도 만기가 길수록 가격으로는 더 큰 돈이다
- 도착 호가, a, b
- 같은 종목에서 체결보다 거래소 시각이 엄격히 앞선 마지막 양방향 호가. a 는 매도 1호가 금리, b 는 매수 1호가 금리이고 a < b 다. 10분보다 오래된 호가는 쓰지 않는다
- 중간 금리 m, 반 스프레드 h
- m = (a + b) ÷ 2, h = (b − a) ÷ 2 × 100bp. h 는 호가에 적힌 비용이다
- 방향 s
- 체결가가 매도 1호가 이상이면 매수 주도 +1, 매수 1호가 이하이면 매도 주도 −1. 그 사이면 중간 가격과 비교하고, 같으면 같은 종목 직전 체결가로 정한다
- c0 실효 반 스프레드
- c0 = s × (m − y) × 100bp. y 는 체결 금리. 양수면 시장가 주문자가 중간값보다 불리하게 체결된 크기다
- c1, c5 마크아웃 비용
- cH = s × (mt+H − y) × 100bp. 체결 H분 뒤 중간 금리를 공정가로 보고 잰 비용이다. 시장이 주문 쪽으로 움직이면 작아진다
- 교체 왕복 비용
- 두 종목을 바꿔 들고(체결 둘) 다시 되돌리는(체결 둘) 데 드는 체결 네 번의 합. 같은 칸 두 다리면 4 × c 다. 1bp 가정은 이 값을 1bp 로 본 것이다
- MAE, D0, D1
- MAE 는 예측과 실제 c5 차이의 절대값 평균. D0 = 1 − MAE(LightGBM) ÷ MAE(B0), D1 = 1 − MAE(LightGBM) ÷ MAE(B1). 0.15 면 오차를 15% 줄였다는 뜻이다
- B0, B1, B2, B3
- 기준선 넷. B0 는 학습 구간 그 종목 h 의 평균, B1 은 학습 구간 그 종목 c5 의 중앙값, B2 는 그 체결의 도착 h, B3 는 늘 0 이다
- 5일 블록 부트스트랩
- 확인 구간 24거래일을 연속 5일 묶음째 복원 추출해 통계량을 5,000번 다시 구한다. 한쪽 p 는 다시 구한 값이 0 이하(또는 문턱 반대쪽)로 나온 비율이다
- Holm 보정
- H816 ~ H819 네 p 를 한 묶음으로 보고 작은 것부터 남은 개수를 곱해 여럿을 시험할 때의 우연 통과를 막는다
- 장외 비용 대리 q
- 같은 날 같은 종목을 같은 투자자 군이 판 평균 금리와 산 평균 금리 차의 반, q = (매도 금리 − 매수 금리) ÷ 2 × 100bp. 장외 체결을 포함한 일별 표에서 계산한다
자료
데이터셋
| 자료 | 기간 | 해상도 | 쓰임 |
|---|---|---|---|
| 코스콤 KTS 체결 | 2026-07-08 ~ 11-05, 74거래일 | 체결 한 건, 거래소 시각 µs | 체결 금리, 가격, 수량 |
| 코스콤 KTS 호가 | 같은 74일 | 호가 변경 한 건 | 도착 호가, 1분과 5분 뒤 중간 금리 |
| 코스콤 국채선물 체결 | 같은 74일 | 체결 한 건 | 직전 30분 3선, 10선 움직임 특징, 사후 진단 |
| 국고채 세대 표 | 일별 | 종목일 | 군, 지표물 라벨, 잔존연, 민평 금리 |
| 투자자별 국채 체결금리 | 2025-01-02 ~ 2026-11-05, 444일 | 종목 × 투자자 × 일 | 장외 포함 매수, 매도 평균 금리(경과물 비용 대리) |
중심 자료는 KTS 의 체결과 호가 두 표다. 체결 표는 체결 한 건이 한 줄이고, 거래소 시각(마이크로초), 체결 가격(액면 1만원당 원), 체결 금리(%), 수량(천원 액면 단위, 1,000,000 이 10억)을 담는다. 호가 표는 1호가가 바뀔 때마다 한 줄이 쌓이고 매도, 매수 1호가의 가격, 금리, 잔량을 담는다. 체결 줄에도 호가 칸이 있지만 그것은 체결 뒤 호가라서 방향을 정하거나 중간값을 잡는 데 쓰지 않았다. 수신 PC 의 시계는 날마다 조금씩 어긋나므로 모든 순서와 지평은 거래소 시각으로만 잡았다. 체결 행 하나는 거래소가 찍은 체결 하나이지 주문 하나가 아니다. 큰 주문을 여러 번에 나눠 내면 여러 줄로 보인다.
점검과 정리
결과 지표를 보기 전에 날마다 행 수, 중복, 시각 순서, 양방향 호가 비율을 셌다. 하루 체결은 1,800 ~ 4,400건, 종목은 9 ~ 15개였다. 2026-07-31 은 같은 날짜 아래 두 수신 공간이 섞여 호가와 체결 모두 약 7% 가 중복이라 통째로 뺐다. 다른 날의 중복은 0.1% 미만이고 중복 행만 지웠다. 수신이 늦게 시작하거나 일찍 끊긴 부분일이 7일 있는데, 체결마다 직전 호가가 있으면 쓸 수 있으므로 남겼고 강건성 격자에서 뺀 결과를 따로 냈다. 마지막 두 날(11-04, 11-05)은 다른 사본에서 받아 호가 행이 세 배 촘촘하지만 직전 호가를 찾는 데는 차이가 없다. 세대 표가 비어 있는 6일은 직전 날 라벨을 이어 썼다. 국고채가 아닌 코드(전체의 3%)는 뺐다.
점검에서 가장 중요한 사실은 KTS 체결의 99.9% 가 각 군의 지표물이라는 것이다. 경과물 체결은 넉 달에 수십 건뿐이었다. 그래서 «지표물 여부» 는 사실상 상수가 되었고, 경과물 비용은 장내 자료로 잴 수 없었다. 사전등록 단계에서 이것을 알았으므로 경과물은 장외 체결을 포함한 투자자별 체결금리 표로 따로 재기로 정했다(H819). 체결 한 줄의 수량은 중앙 10억, 상위 10% 30억, 상위 1% 80억, 최대 500억이었다. 체결 수량이 도착 1호가 잔량을 넘은 경우는 0.6% 뿐이라, 거의 모든 체결이 1호가 안에서 이루어졌다. 정리 뒤 남은 표본은 73거래일, 25종목, 174,136건이다. 방향은 매수 주도 49.8%, 도착 호가 나이 중앙값은 1.1초였다.
방법
비용 정의
체결 하나의 비용은 «그 순간의 공정한 값» 을 무엇으로 보느냐에 따라 셋으로 잰다. 첫째, 실효 반 스프레드 c0 는 체결 직전 호가의 중간 금리를 공정값으로 본다. 시장가로 사면 매도 1호가 금리로 사게 되고, 그 금리는 중간보다 낮으니(가격은 높으니) 그 차이가 비용이다. 둘째와 셋째, 마크아웃 비용 c1 과 c5 는 체결 1분 뒤와 5분 뒤의 중간 금리를 공정값으로 본다. 주문자가 정보를 갖고 있거나 그 주문이 시장을 움직이면 체결 뒤 중간값이 주문 쪽으로 따라오고, 그만큼 사후 비용은 줄어든다. 체결 뒤 시각이 15:30 을 넘으면 그 체결의 마크아웃은 비워 둔다. 비용은 모두 금리 bp 로 적는다. 현물 상대가치 실험의 비용 가정이 금리 bp 이기 때문이다.
방향은 거래소가 알려 주지 않으므로 도착 호가로 추정한다. 체결가가 매도 1호가 이상이면 매수 주도, 매수 1호가 이하면 매도 주도로 본다. 1호가 사이에서 체결되면 중간 가격과 비교하고, 정확히 중간이면 같은 종목의 직전 체결가보다 높은지 낮은지로 정한다. 그래도 정할 수 없으면 버린다. 도착 호가는 체결보다 거래소 시각이 엄격히 앞선 마지막 양방향, 비교차 호가이고, 10분보다 오래된 것은 쓰지 않는다. 체결 줄에 붙은 호가 칸은 체결 뒤 상태라 방향을 매수 쪽으로 치우치게 하므로 쓰지 않았다. 교체 왕복 비용은 두 종목을 한 번 바꿔 들고 다시 되돌리는 체결 네 번의 합으로 정의했다. 같은 칸의 두 다리를 가정하면 4 × c 가 된다.
기준선과 검정
표본은 날짜순으로 앞 2/3(49일, 113,197건)을 학습 구간, 뒤 1/3(24일, 55,446건)을 확인 구간으로 나눴다. 자료가 2026-07 부터라 다른 실험의 «2024 년 이후 확인 구간» 은 쓸 수 없었고, 이 분할은 사전등록에 적었다. 모형은 학습 구간에서 한 번만 학습하고 하이퍼파라미터는 미리 고정했다. 비교한 기준선은 넷이다. B0 «종목 평균 반 스프레드» 는 아이디어가 이기려던 단순 가정이다. B1 «종목 마크아웃 중앙값» 은 학습 구간에서 그 종목의 실제 c5 중앙값을 쓰는 더 강한 기준선이다. B2 는 그 체결의 도착 h 를 그대로 쓰고, B3 는 늘 0 을 예측한다. 학습 구간에 없던 종목은 같은 군 값, 그것도 없으면 전체 값으로 채운다.
H816 의 통계량은 D0 = 1 − MAE(LightGBM) ÷ MAE(B0) 이다. 지지하려면 D0 가 0.15 이상이고 Holm 조정 p 가 0.05 미만이어야 한다. p 는 확인 구간 24일을 5일 이동 블록으로 5,000번 다시 뽑아 D0 가 0 이하로 나온 비율이다. 같은 날의 체결들은 같은 금리 움직임을 겪으므로 체결이 아니라 날을 묶음 단위로 삼았다. H817 은 B1 에 대해 같은 방식으로 D1 > 0 을 본다. H818 은 전체 73일에서 지표물 3, 5, 10, 30년 각각의 평균 c0 를 재고, 4 × c0 의 날짜 블록 부트스트랩 95% 상한이 네 군 모두 1bp 이하인지 본다. 판정 규칙은 미리 정했다. H816 과 H817 이 모두 지지면 채택, H816 만 지지면 보류, H816 이 미지지면 폐기다. 선물 1틱 비용 규칙과 연 24회 빈도 규칙은 거래 신호용이라 이 측정 실험에는 쓰지 않았다.
판정에 쓰지 않는 보조 분석도 미리 적어 두었다. 표적을 c0, c1, c5 로 바꾸고 도착 호가 나이 상한을 10초, 60초, 10분으로 바꾸며 부분일을 넣고 빼는 18칸 격자, 하루 3선 30분 고저폭 상위 10% 날을 뺀 결과, 학습 구간 표적을 날짜 안에서 무작위로 섞어 다시 학습하는 귀무 20회다. 이 실험에는 특징을 고르는 절차가 없지만, 같은 학습 절차가 잡음에서도 기준선 대비 «개선» 을 만드는지 확인하려고 귀무를 넣었다. 실행 현실화로는 결정 뒤 1분, 5분 늦게 체결될 때의 손해와, 지정가로 기다려 체결을 받는 쪽의 5분 마크아웃을 냈다.
장외 비용 대리 지표
경과물은 장내에서 거의 거래되지 않으므로 장외 체결을 포함한 투자자별 체결금리 일별 표를 썼다. 이 표는 종목, 투자자 군(외국인, 은행, 개인, 기금보험, 투신, 기타법인, 종금, 사모펀드 등), 날짜마다 매도 평균 금리와 매수 평균 금리를 준다. 같은 날 같은 투자자 군이 같은 종목을 팔기도 하고 사기도 했다면, 판 금리와 산 금리 차의 반 q 는 그 군이 낸 왕복 비용의 반에 가깝다. 같은 날의 금리 움직임은 사고판 시각이 고르게 섞여 있으면 대체로 상쇄된다. 사전등록에서는 정부와 선물 투자자를 뺀 고객 군 전체로 경과물 q 의 평균을 재고, 4 × q 가 1bp 를 넘으며 경과물 q 가 지표물 q 보다 큰지를 444일 월 블록 부트스트랩으로 검정했다(H819). 절대값 25bp 를 넘는 값은 금리 오기로 보고 뺐다(1.3%).
모델
확증 모형은 LightGBM 그래디언트 부스팅 회귀 나무다. 목적 함수를 절대 오차(l1)로 두어 c5 의 조건부 중앙값을 맞히게 했다. 채점 지표가 MAE 이고, 마크아웃은 꼬리가 두꺼워 평균 제곱 오차로 학습하면 몇몇 큰 움직임에 끌려가기 때문이다. 나무 300그루, 학습률 0.03, 나무당 잎 15개, 잎당 최소 200건, 특징 표본 80%, 행 표본 80%(매번), seed 240 으로 고정하고 조정하지 않았다. 특징은 체결 시각에 알 수 있는 것 14개다. 군(범주), 잔존연, 지표물 여부, 로그 수량, 방향, 09:00 뒤 분, 도착 반 스프레드, 받는 쪽 1호가 잔량, 도착 호가 나이, 직전 30분 3선과 10선의 가격 변화 절대값과 고저폭(체결 시각 이전 선물 체결만), 같은 종목 직전 30분 체결 수다.
비교 모형은 같은 특징의 선형 중앙값 회귀다. 군을 원핫으로 펴고 숫자 특징의 빈 값은 학습 구간 중앙값으로 채운 뒤 표준화했다. 벌점은 두지 않았고, 계산 시간을 줄이려고 학습 구간에서 60,000건을 무작위로 뽑아 적합했다. 트리가 선형보다 낫다면 비용이 특징의 조합(예를 들어 장 초반의 장기물)에서 비선형으로 달라진다는 뜻이 된다. 아래 구조도는 저장된 LightGBM 모델 파일을 다시 읽어 확인 구간 55,446건의 예측이 결과 파일과 같음을 확인한 뒤 그 모델에서 그렸다. 군은 범주 특징이라 분기 조건이 «군 ∈ {집합}» 꼴로 적힌다.
h ≤ 0.15 로 갈린다. 상자의 n 은 그 노드의 학습 체결 수, 잎값은 c5 기여분(bp)이다.h ≤ 0.35 이다. 잎값이 0.01bp 안팎으로 작아 뒤 나무들은 거의 보태지 않는다.| 분기 위치 \ 피처 | mins | rem | f10y_rng30 | n30 | h | f3y_rng30 | f10y_chg30 | depth | s | f3y_chg30 | grp | age | lqty | on_run | 합 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 깊이 0 (뿌리) | 23 | 27 | 15 | 12 | 129 | 10 | 13 | 43 | 0 | 6 | 4 | 15 | 3 | 0 | 300 |
| 깊이 1 | 74 | 78 | 42 | 37 | 70 | 20 | 17 | 53 | 15 | 17 | 39 | 20 | 2 | 0 | 484 |
| 깊이 2 | 112 | 101 | 68 | 61 | 49 | 57 | 33 | 39 | 37 | 33 | 39 | 29 | 1 | 0 | 659 |
| 깊이 3 | 141 | 99 | 110 | 73 | 22 | 65 | 46 | 35 | 57 | 44 | 25 | 30 | 2 | 0 | 749 |
| 깊이 4 | 137 | 98 | 91 | 63 | 37 | 68 | 55 | 42 | 50 | 56 | 26 | 21 | 5 | 0 | 749 |
| 깊이 5 | 115 | 70 | 68 | 78 | 16 | 37 | 64 | 17 | 43 | 34 | 16 | 21 | 1 | 0 | 580 |
| 깊이 6 | 83 | 51 | 45 | 33 | 8 | 33 | 42 | 10 | 18 | 21 | 14 | 21 | 1 | 0 | 380 |
| 깊이 7 | 42 | 23 | 20 | 17 | 6 | 18 | 23 | 8 | 7 | 8 | 2 | 7 | 0 | 0 | 181 |
| 깊이 8 | 16 | 10 | 9 | 11 | 1 | 8 | 7 | 0 | 2 | 6 | 2 | 4 | 1 | 0 | 77 |
| 깊이 9 | 10 | 3 | 5 | 4 | 0 | 2 | 2 | 2 | 2 | 0 | 1 | 0 | 0 | 0 | 31 |
| 깊이 10 | 0 | 1 | 2 | 0 | 0 | 1 | 3 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 8 |
| 깊이 11 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
| 분기 합 | 754 | 561 | 476 | 389 | 338 | 319 | 305 | 249 | 231 | 226 | 168 | 168 | 16 | 0 | 4,200 |
| 손실 감소(gain) 몫 | 19.4% | 14.8% | 10.3% | 7.2% | 12.3% | 7.4% | 6.7% | 4.6% | 6.4% | 4.9% | 3.6% | 2.1% | 0.2% | 0.0% | 100% |
얕은 깊이에서 시각(mins), 잔존연(rem), 도착 반 스프레드(h)가 자주 쓰인다. 지표물 여부(on_run)는 학습 체결이 거의 모두 지표물이라 한 번도 쓰이지 않았다.
결과
확증 결과
| 가설 | 통계량 | 값 | p | 결과 |
|---|---|---|---|---|
| H816 LightGBM 대 B0, 감소 ≥ 15% | D0 | 0.066 (90% 0.056 ~ 0.072) | < 0.001 | 미지지(크기 미달) |
| H817 LightGBM 대 B1, 감소 > 0 | D1 | −0.0006 | 0.72 | 미지지 |
| H818 지표물 4 × c0 상한 ≤ 1bp | 네 군 최대 상한 | 0.75bp (30년) | < 0.001 | 지지 |
| H819 경과물 4 × q > 1bp, 경과 > 지표 | 둘 중 작은 여유 | 5.20bp | < 0.001 | 지지 |
주가설 H816 은 크기에서 떨어졌다. 확인 구간에서 LightGBM 의 c5 평균 절대 오차는 0.2792bp, 종목 평균 반 스프레드 기준선 B0 는 0.2989bp 였다. 오차를 6.6% 줄였고 부트스트랩 90% 구간이 5.6 ~ 7.2% 라서 «0 보다 작다» 는 확실하지만, 사전등록 문턱 15% 에는 한참 못 미친다. 더 강한 기준선과 비교하면 이득이 아예 없다. 학습 구간 종목별 c5 중앙값(B1)의 오차는 0.2790bp 로 LightGBM 보다 오히려 조금 작았고(D1 −0.06%, p 0.72), 늘 0 을 예측하는 B3 도 0.2788bp 였다. 체결 전 정보로 만든 모형이 «비용 0» 이라는 상수 예측을 이기지 못했다. 판정 규칙에 따라 이 실험은 모형 기준 폐기다.
측정 가설 둘은 지지되었다. 지표물 3, 5, 10, 30년의 체결당 평균 c0 는 0.114, 0.114, 0.101, 0.162bp 이고, 이것을 네 번 더한 교체 왕복은 0.46, 0.46, 0.40, 0.65bp 다. 날짜 블록 부트스트랩 95% 상한도 0.48, 0.51, 0.48, 0.75bp 로 모두 1bp 아래다. 장외 대리 지표에서 경과물 q 의 평균은 5.42bp(8,436 종목일)로 지표물 0.22bp(2,526 종목일)보다 훨씬 컸다. 다만 이 큰 값의 출처는 아래 경과물 절에서 따로 본다.
비용표
| 군 | c0 | c1 | c5 | h | 체결 수 | 교체 왕복 4 × c0 |
|---|---|---|---|---|---|---|
| 2년 | 0.195 | 0.007 | −0.019 | 0.179 | 8,522 | 0.78 |
| 3년 | 0.114 | −0.006 | −0.013 | 0.108 | 46,251 | 0.46 |
| 5년 | 0.114 | −0.008 | −0.011 | 0.099 | 35,473 | 0.46 |
| 10년 | 0.101 | −0.006 | −0.009 | 0.088 | 42,533 | 0.40 |
| 20년 | 0.254 | 0.032 | −0.018 | 0.221 | 7,490 | 1.02 |
| 30년 | 0.162 | 0.031 | 0.017 | 0.141 | 32,725 | 0.65 |
| 물가 | 0.379 | −0.040 | −0.094 | 0.351 | 1,116 | 1.52 |
표의 c0 는 호가 반 스프레드 h 보다 0.01 ~ 0.03bp 크다. 1호가 사이 체결이 드물고, 호가가 체결 직전에 넓어진 순간에 체결이 몰리기 때문이다. 3년과 10년 지표물 h 의 중앙값은 0.1bp 로, 가격 1틱(액면 1만원당 1원) 차이가 금리로 0.2bp 쯤 되는 스프레드가 대부분이다. 20년과 물가연동은 교체 왕복이 1bp 를 넘는다. 시간대별로는 군 × 시간대 41칸(체결 100건 이상) 가운데 4 × c0 가 1bp 를 넘는 칸이 20년 세 칸과 물가 다섯 칸, 모두 8칸이었다. 문턱을 0.5bp 로 낮추면 25칸, 2bp 로 올리면 0칸이다. 반면 4 × c5 가 0.5bp 를 넘는 칸은 하나도 없다.
그림 3 이 이 실험의 핵심을 보여 준다. 시장가 주문자가 낸 반 스프레드는 5초 안에 거의 다 되돌아온다. 주문이 들어온 쪽으로 다른 참가자들이 곧바로 호가를 옮기기 때문이다. 이것은 지정가로 기다려 체결을 받는 쪽에서 보면 반 스프레드를 벌어도 몇 초 뒤 시장이 불리하게 움직여 이익이 남지 않는다는 뜻이기도 하다. 5분 기준으로 공급자가 받는 평균은 −0.007bp 였다. 시간대별로는 c5 평균이 가장 낮은 칸이 10:00 ~ 11:30(−0.014bp)이고 15:00 ~ 15:30 은 −0.004bp 라서 탐색 가설 H820 은 맞지 않았다. c0 로 봐도 10:00 ~ 11:30 이 0.122bp 로 가장 싸고 점심 무렵 11:30 ~ 13:00 이 0.145bp 로 가장 비쌌는데, 그 차이는 0.02bp 안이다.
크기 효과도 예상과 반대였다. 50억 이상 체결의 c0 는 10억 체결보다 체결 수 가중으로 0.012bp 작았다(H821 미지지). 3년은 10억 0.120, 50억 이상 0.110bp, 10년은 0.102 와 0.089bp 다. 장내에서 큰 체결은 호가가 두꺼울 때 들어오고, 체결 한 줄은 주문 하나가 아니라서 큰 주문을 쪼개 낸 충격은 이 표로 보이지 않는다.
모형 오차와 귀무
| 예측 | MAE | 편향(예측 − 실제) | LightGBM 의 감소율 |
|---|---|---|---|
| LightGBM | 0.2792 | +0.005 | 기준 |
| 선형 중앙값 회귀 | 0.2784 | +0.007 | −0.003 |
| B0 종목 평균 h | 0.2989 | +0.129 | 0.066 |
| B1 종목 c5 중앙값 | 0.2790 | +0.012 | −0.001 |
| B2 도착 h | 0.2953 | +0.124 | 0.055 |
| B3 영 | 0.2788 | +0.008 | −0.001 |
표의 편향 열이 실패의 이유를 말해 준다. 반 스프레드를 예측하는 B0 와 B2 는 평균 0.12 ~ 0.13bp 를 더 크게 말하고, 나머지는 모두 거의 0 이다. 5분 마크아웃의 확인 구간 평균은 약 0 이고 표준편차는 0.41bp 다. 이렇게 흩어진 표적에서 상수 0.12bp 를 예측하던 기준선을 0 근처로 옮기기만 해도 오차가 6% 남짓 준다. LightGBM 이 한 일이 정확히 그것이다. 귀무 20회(학습 구간 표적을 날짜 안에서 섞은 뒤 같은 설정으로 학습)의 D0 는 평균 0.065, 최대 0.065 로 실제 D0 0.066 과 사실상 같았다. 오차 감소는 특징이 아니라 중심 이동에서 나왔다. 선형 중앙값 회귀도 같은 오차를 내서 트리의 비선형 조합이 더하는 것도 없었다.
강건성 격자
사전등록한 18칸 격자에서 표적별 감소율은 칸을 바꿔도 거의 움직이지 않았다. c5 표적의 D0 는 호가 나이 상한과 부분일 포함 여부에 따라 0.065 ~ 0.066, D1 은 −0.002 ~ 0.000 이었다. 하루 3선 30분 고저폭이 상위 10% 인 날을 빼도 D0 0.070, D1 −0.000 이다. 표적을 1분 마크아웃 c1 로 바꾸면 D0 는 0.19, D1 은 0.017 ~ 0.019 로 모형 몫이 조금 생긴다. 체결 순간의 c0 를 표적으로 하면 D0 가 0.78 까지 오르지만 이것은 기계적인 결과다. c0 는 사실상 도착 반 스프레드 h 이고 h 가 특징에 들어 있기 때문이다. 즉 지평이 짧을수록 모형이 맞히는 몫이 크고, 5분까지 가면 그 몫이 사라진다.
실패 진단
왜 5분 마크아웃은 예측되지 않는가. c5 는 c0 에서 5분 동안의 중간 금리 변화를 뺀 것이다. 그 5분 동안 같은 군의 국채선물이 움직인 크기(사후 값)를 군별 베타로 곱해 넣으면, c0 와 함께 c5 분산의 32%(학습 구간)와 54%(확인 구간)를 설명한다. 5분 마크아웃 오차의 대부분은 그 5분 동안 금리 전체가 움직인 몫이고, 그 움직임은 체결 전에 알 수 없다. 이 해석이 맞다면 선물 움직임을 걷어 낸 «헤지 마크아웃» 은 더 잘 맞아야 한다. 결과를 본 뒤 탐색으로 그렇게 해 보니, 표준편차가 0.40 에서 0.23bp 로 줄고 LightGBM 의 감소율이 B0 대비 15.4%(90% 14.9 ~ 16.1%), B1 대비 1.1% 로 올랐다. 그래도 강한 기준선 대비 이득은 0.002bp 수준이라 데스크 계산에 쓸 크기는 아니다.
실행 현실화도 같은 그림을 준다. 결정 시점의 중간 금리에서 1분 늦게 체결된다고 하면 평균 0.129bp, 5분 늦으면 0.139bp 를 잃는다. 이 값은 체결 자체가 낸 정보까지 포함한 상한이지만, 기다리는 비용이 반 스프레드와 비슷하다는 것을 말한다. 지정가로 기다렸다가 받는 쪽은 5분 뒤 평균 −0.007bp 로 반 스프레드를 역선택에 거의 다 내준다. 시장가로 바로 사고파는 것과 지정가로 기다리는 것의 기대 비용이 비슷하다는 뜻이다. 특징 중요도(이득)는 시각 19%, 잔존연 15%, 도착 h 12%, 직전 30분 10선 고저폭 10% 순이었고, 지표물 여부는 0% 였다.
경과물과 장외
사전등록한 H819 는 지지되었지만 그 수치를 데스크 비용으로 읽으면 안 된다. 투자자 군별로 나눠 보니 경과물 q 평균이 개인 11.1bp, 기타법인 10.3bp, 선물 투자자 8.2bp 인 반면 외국인 0.31, 은행 0.14, 기금보험 −0.12, 투신 −0.18bp 였다. 큰 q 는 소매 고객이 증권사에서 경과물을 사고팔 때 붙는 마크업이다. 기관 넷만 모으면 경과 0.12, 구지표 0.04, 지표 0.01bp 이고 중앙값은 모두 0 이다. 다만 은행이 다른 은행에 팔면 같은 군 안에서 산 금리와 판 금리가 같아져 q 가 0 이 되므로 기관 값은 아래로 치우친다. 거래량 상위 절반만 보면 경과 0.41, 지표 0.03bp 다. 2025 년과 2026 년의 값은 거의 같았다(경과 5.46, 5.38bp).
연속 체결 묶음과 큰 주문
체결 한 줄이 부모 주문이 아니라는 한계를 조금이라도 메우려고, 결과를 본 뒤 탐색으로 «같은 종목에서 같은 방향 체결이 30초 간격 안에 이어진 묶음» 을 부모 주문의 근사로 보고 비용을 다시 쟀다. 묶음 비용은 첫 체결의 도착 중간 금리와 묶음 전체의 수량 가중 평균 금리(VWAP) 차이다. 지표물 3, 5, 10, 30년에서 묶음 74,528개가 나왔고 그중 45% 가 두 줄 이상이었다. 묶음이 커지면 비용이 분명히 오른다. 10년은 10억 묶음 0.104bp 에서 100 ~ 290억 묶음 0.198bp, 30년은 0.164 에서 0.346bp, 5년은 0.116 에서 0.178bp, 3년은 0.119 에서 0.145bp 다. 로그 크기 한 단위당 기울기는 0.023bp(90% 0.022 ~ 0.025)였다. 묶음 간격을 5초로 좁히면 크기 효과가 거의 사라지고(기울기 0.003), 120초로 넓히면 0.047 로 커진다.
이 결과를 데스크 규모로 옮기면 그림이 달라진다. 100억 안팎을 한 번에 사고파는 교체라면 10년과 30년 두 다리의 왕복이 2 × (0.198 + 0.346) = 1.09bp 로 1bp 를 넘는다. 3년과 5년이면 같은 계산이 0.65bp 다. 한 줄 체결로 본 «지표물은 1bp 로 넉넉하다» 는 판단은 큰 주문, 특히 장기물에서는 성립하지 않는다. 다만 묶음 하나에는 여러 참가자의 주문이 섞일 수 있고, 간격 정의에 따라 크기가 두 배까지 달라지므로 이 값은 측정이 아니라 범위를 짐작하는 근사다.
지정가와 월별 안정성
앞의 실행 현실화는 지정가가 늘 체결된다고 가정했다. 두 번째 깊이 보강에서 체결 확률을 넣어 다시 쟀다(탐색). 73일 동안 3, 5, 10, 30년 지표물마다 09:05 부터 15:00 까지 5분마다, 사는 쪽과 파는 쪽 각각 «지금 10억을 사고판다» 는 결정을 두었다. 결정 41,420개 가운데 도착 반 스프레드가 0.5bp 이하인 정상 호가 40,282개(97%)를 본다. 시장가로 바로 체결하면 결정 시점 중간값 대비 평균 0.166bp 다. 실제 체결 가중 c0(0.13bp)보다 큰 것은 체결이 호가가 좁을 때 몰리기 때문이다. 지정가는 자기 쪽 1호가에 내고 W 분 안에 그 가격에서 체결이 찍히면 받은 것으로 보는 낙관 정의와, 그 가격을 뚫고 체결이 찍혀야 받은 것으로 보는 보수 정의를 두었다. 못 받으면 W 분 뒤 시장가로 쫓아간다.
5분을 기다리면 낙관 정의로 49% 를 받아 실행 비용이 0.099bp 로 시장가보다 0.067bp 싸다. 보수 정의로는 28% 만 받고 비용이 0.160bp 로 시장가와 0.006bp(90% 0.004 ~ 0.008) 차이밖에 없다. 15분을 기다려도 보수 정의 비용은 0.160bp 로 같다. 못 받은 주문은 시장이 반대로 움직인 경우라서 쫓아가는 비용이 지정가로 아낀 반 스프레드를 거의 다 먹는다. 지정가의 이득은 호가 줄 맨 앞에 설 수 있을 때만 생기고, 줄 뒤에 서면 시장가와 같다. 월별로는 지표물 c0 가 3년 0.108 ~ 0.124, 5년 0.103 ~ 0.132, 10년 0.084 ~ 0.151, 30년 0.114 ~ 0.215bp 범위에서 움직였고, 7월이 가장 비싸고 그 뒤 좁아졌다. 가장 비싼 달의 교체 왕복도 0.86bp(30년, 7월)로 1bp 아래였다. 표본이 넉 달이라 연도별 결과는 낼 수 없고, 이 실험은 거래 신호가 아니라서 기존 전략과의 손익 상관이나 같은 날 겹침(독립성)도 해당하지 않는다.
해석
장내 지표물의 체결 비용은 작고, 군에 따라 순서가 분명하다. 10년이 가장 싸고(0.10bp), 3년과 5년(0.11bp), 30년(0.16bp), 2년(0.20bp), 20년(0.25bp), 물가연동(0.38bp) 순이다. 지표물끼리 교체한다면 왕복 0.4 ~ 0.65bp 이므로 현물 상대가치 실험의 1bp 가정은 두 배쯤 보수적이다. 그 실험들이 비용 1bp 에서 지면 지표물 소량 교체로는 0.5bp 에서도 다시 볼 이유가 있다. 다만 연속 체결 묶음으로 본 100억 규모 주문은 10년과 30년 교체에서 왕복 1bp 를 넘었으므로, 주문 크기가 커질수록 1bp 는 넉넉한 가정이 아니라 경계값이 된다. 반대로 20년과 물가연동이 들어간 교체는 1bp 를 넘을 수 있다. 같은 bp 라도 10년과 30년은 가격으로 훨씬 큰 돈이라는 점도 함께 봐야 한다.
경과물은 판단이 어렵다. 장내 체결이 사실상 없고 장외 대리 지표는 투자자 구성에 따라 0 에서 11bp 까지 흔들린다. 기관 거래만 보면 0.1 ~ 0.4bp 로 왕복 0.5 ~ 1.6bp 이니 1bp 는 경계값이다. 경과물이 들어가는 커널 곡선 교체나 대차 되돌림의 비용은 1bp 를 바닥으로 보고 2bp 민감도를 함께 보는 것이 안전하다. 비용 모형 자체는 쓸모가 없었다. 마크아웃은 반 스프레드가 몇 초 만에 사라진 뒤 남는 시장 잡음이고, 그 잡음은 체결 전 정보로 줄어들지 않는다. 데스크 계산기에는 모형 대신 군별 c0 표와 «5분 뒤 평균 0» 을 쓰면 된다.
한계
이 결론이 뒤집힐 수 있는 조건을 구체적으로 적는다.
표본이 짧다. 2026-07 부터 11 월 초까지 73거래일이고 확인 구간은 24일, 한 달 남짓이다. 금리 변동성이 크게 다른 국면, 연말 북 마감, 대규모 입찰 주간, 지표물 교체 직후 같은 시기의 비용은 이 표본으로 일반화하지 못한다. 공통 규칙의 «2024 년 이후 확인 구간» 은 자료가 없어 시간 순 2/3 대 1/3 분할로 바꿨다. KTS 체결이 거의 모두 지표물이라 지표물 여부 특징은 상수였고, 경과물 장내 비용은 아예 잴 수 없었다. 방향은 거래소가 주지 않아 직전 호가로 추정했으므로, 같은 마이크로초에 찍힌 호가와 체결의 순서가 틀리면 일부 방향이 뒤집힌다.
체결 한 줄은 부모 주문이 아니다. 수백억 단위 주문을 여러 번에 나눠 낼 때의 충격 비용은 이 표로 읽을 수 없다. 연속 체결 묶음 근사는 크기가 커질수록 비용이 1.5 ~ 2배로 오른다고 말하지만, 묶음에는 여러 참가자가 섞이고 간격 정의에 따라 값이 두 배까지 달라진다. 장외 대리 q 는 하루 평균 금리의 차라서 체결 시각, 상대방, 크기를 모른다. 같은 투자자 군 안의 거래는 q 를 0 쪽으로, 소매 마크업은 큰 쪽으로 끌어서 H819 의 확증 수치는 두 편향을 모두 안고 있다. 기관만 본 값, 선물 헤지 마크아웃, 1분 표적은 결과를 본 뒤 고른 탐색이므로 확증으로 읽으면 안 된다. 선물 1틱 판정 규칙은 이 현물 측정 실험에 맞지 않아 쓰지 않았고, 10년과 30년 현물은 bp 로는 비슷해도 가격으로는 스프레드가 훨씬 넓다. 마지막 두 날은 다른 사본에서 받아 호가 밀도가 달랐지만 부분일을 뺀 격자에서 결론은 같았다.
다음에 해 볼 것
첫째, 경과물 장외 비용을 직접 잰다. 메신저 체결망과 장외 체결 보고에서 경과물 체결의 시각과 금리를 받아, 그 시각의 민평 보간 곡선 대비 실효 비용을 잔존 구간별로 낸다. 같은 틀로 지표물 장외 비용도 재서 장내 값과 비교하면 경과물 교체의 1bp 가정을 잔존별로 판정할 수 있다. 둘째, 데스크 자체 체결로 큰 주문 비용을 확인한다. 이 실험의 연속 체결 묶음 근사는 100억 규모에서 비용이 1.5 ~ 2배로 오른다고 말한다. 데스크가 실제로 낸 주문의 시각, 크기, 체결 금리를 장내 호가에 맞대 첫 체결 직전 중간값 대비 비용과 5분 회복을 재면, 근사를 실측으로 바꾸고 계산기 비용표에 크기 축을 붙일 수 있다.
산출물
코드는 실험 폴더의 code/ 에, 정본 런은 results/20261108T054348_main/ 에 있다. 사전등록 문서는 protocol.md, 결과 해설과 판정은 analysis.md 다. 아래 순서로 돌리면 틱 캐시, 체결 패널, 정본 런, 탐색 진단, 그림이 다시 나온다. 캐시가 없으면 첫 실행이 하루 치씩 읽어 만든다.
| 경로 | 내용 |
|---|---|
code/data.py | KTS 체결, 호가와 선물 체결을 하루 단위로 읽어 캐시 |
code/panel.py | 체결 하나에 도착 호가, 방향, c0, c1, c5, 특징을 붙인 패널 |
code/s1.py | 확증 런(H816 ~ H821), 기준선, 격자, 귀무, 비용표 |
code/d1.py | 탐색 진단(마크아웃 곡선, 시장 몫, 헤지 표적, 1분 표적, 장외 분해) |
code/d3.py | 깊이 보강 탐색 2(지정가 체결 확률과 실행 비용, 월별 비용, limit_vs_market_normal.csv, monthly.csv, d3.json) |
code/d2.py | 깊이 보강 탐색(같은 방향 연속 체결 묶음의 크기별 비용, runs_by_size.csv, d2.json) |
code/render_figures.py | 이 페이지의 그림 열한 장과 모델 구조도 |
results/…_main/metrics.json, d1.json | 가설, 기준선, 격자, 진단의 모든 수치 |
results/…_main/cell_table.csv, tenor_table.csv, size_table.csv | 데스크 계산기용 비용표(군 × 시간대, 군, 크기) |
results/…_main/model_lgb.txt, preds_confirm.parquet | 학습된 LightGBM 과 확인 구간 예측 |
uv run python code/data.py → code/panel.py → code/s1.py → code/d1.py results/<런> → code/d2.py results/<런> → code/d3.py results/<런> → code/render_figures.py | 재현 순서(저장소 뿌리에서 실험 폴더 경로를 앞에 붙여 실행) |
Appendix
A. 데이터셋 실물
확인 구간의 체결 하나(2026-10-15 10:02:09, 국고 10년 지표물 26-6)를 원자료부터 패널 행까지 보인다. 값은 캐시와 정본 런 패널에서 그대로 옮겼다.
| 거래소 시각 | 매도 1호가 가격 | 잔량(억) | 금리 | 매수 1호가 가격 | 잔량(억) | 금리 |
|---|---|---|---|---|---|---|
| 10:02:07.661 | 10,173.0 | 10 | 4.217 | 10,172.0 | 20 | 4.219 |
| 10:02:07.889 | 10,173.0 | 10 | 4.217 | 10,172.0 | 20 | 4.219 |
| 10:02:08.916 | 10,173.0 | 90 | 4.217 | 10,172.0 | 20 | 4.219 |
| 열 | 값 | 뜻 |
|---|---|---|
| t, code | 10:02:09.823, KR103503GG60 | 체결 거래소 시각, 표준코드(10년 지표물) |
| p, y, qty | 10,172.0, 4.219, 10억 | 체결 가격, 체결 금리(%), 수량 |
| a, b, m, h | 4.217, 4.219, 4.218, 0.10bp | 도착 호가 금리, 중간 금리, 반 스프레드 |
| s | −1 | 체결가 = 매수 1호가 가격이라 매도 주도 |
| c0 | 0.10bp | −1 × (4.218 − 4.219) × 100 |
| m1, c1 | 4.2185, 0.05bp | 1분 뒤 중간 금리, 1분 마크아웃 |
| m5, c5 | 4.2225, −0.35bp | 5분 뒤 금리가 올라(가격 하락) 매도자에게 유리했다 |
| depth, age, n30 | 20억, 0.91초, 49건 | 받는 쪽 1호가 잔량, 호가 나이, 직전 30분 같은 종목 체결 수 |
| 선물 30분 변화, 고저폭 | 3선 2틱, 6틱, 10선 3틱, 15틱 | 체결 이전 선물 체결로 계산 |
| 군, 라벨, 잔존연 | 10Y, 지표, 9.65년 | 세대 표 |
B. 모델 입출력 실물
위 체결 하나를 학습된 모형들과 기준선에 넣은 입력과 출력이다(정본 런 예측 파일 그대로).
- Request meta
- LightGBM l1 회귀, 나무 300, 잎 15, 학습 2026-07-08 ~ 09-30 의 113,197건, 표적 c5(bp)
- Input
- grp 10Y, rem 9.654, on_run 1, lqty 2.303(10억), s −1, mins 62.2, h 0.10, depth 20, age 0.91, 3선 30분 변화 2, 고저폭 6, 10선 변화 3, 고저폭 15, n30 49
- LightGBM response
- ĉ5 = −0.081bp. 같은 입력에 선형 중앙값 회귀는 −0.002bp, B0 는 0.090bp, B1 은 0.000bp, B2 는 0.10bp, B3 는 0 을 냈다
- Ground truth check
- 실제 c5 = −0.35bp. 절대 오차는 LightGBM 0.27, B0 0.44, B1 0.35bp. 이 체결의 5분 뒤 10년 금리는 0.45bp 올랐고, 그 움직임이 오차의 대부분이다
C. 실험 설정
- 표본KTS 국고 체결 2026-07-08 ~ 11-05, 07-31 제외 73일, 25종목, 174,136건
- 분할학습 49일(07-08 ~ 09-30), 확인 24일(10-01 ~ 11-05), 날짜순
- 도착 호가체결보다 엄격히 앞선 양방향 비교차 1호가, 나이 10분 이하
- 마크아웃1분, 5분 뒤 마지막 양방향 호가 중간 금리, 15:30 넘으면 비움
- LightGBMl1, 나무 300, learning_rate 0.03, num_leaves 15, min_data_in_leaf 200, feature_fraction 0.8, bagging 0.8, seed 240
- 선형 비교QuantileRegressor 중앙값, 벌점 0, 학습 60,000건 무작위 추출, 표준화
- 검정확인 구간 5일 이동 블록 부트스트랩 5,000회 한쪽 p, seed 240, Holm(H816 ~ H819)
- H818지표물 3, 5, 10, 30년, 73일 5일 블록 부트스트랩 95% 상한 ≤ 1bp
- H819투자자별 체결금리 444일, 고객 군 8개, |q| ≤ 25bp, 월 2개월 블록 부트스트랩
- 격자표적 c0, c1, c5 × 호가 나이 10초, 60초, 10분 × 부분일 포함, 제외
- 귀무학습 표적을 날짜 안에서 섞어 재학습 20회
- Kaggle쓰지 않음, 모든 계산은 CPU