스물아홉 개를 재서 스물여섯 개를 버렸습니다
경마 예측을 개선하겠다는 아이디어는 계속 나옵니다. 부족한 적이 없습니다. 부족한 것은 언제나 그게 실제로 통하는지 확인하는 일이었습니다.
OddsCast는 아이디어가 나오면 같은 절차로 측정합니다. 지금까지 스물아홉 개를 쟀고 스물여섯 개를 버렸습니다. 채택된 셋은 이렇습니다.
| 채택된 것 | 적중률 변화 |
|---|---|
| 주파기록을 경주 안에서 환산한 지표 | +0.43%포인트 |
| 부담중량을 그 경주 안에서의 위치로 | +0.60%포인트 |
| 순위 학습 모델 두 개를 함께 사용 | +4.07%포인트 |
이 글은 나머지 스물여섯 개 이야기입니다.
가장 흔한 패턴: 이미 알고 있던 것
버려진 것 중 상당수가 같은 모양입니다. 혼자 보면 잘 갈라지는데, 기존 계산 위에 얹으면 아무것도 안 남습니다.
가장 선명한 예가 초반 페이스입니다.
말이 출발 직후 첫 200m 구간을 얼마나 빠르게 통과했는지를 과거 5경주 평균으로 계산했습니다. 그 값으로 6만 2,684건을 나눠보니 이렇게 나옵니다.
| 초반 페이스 | 3착 안에 든 비율 |
|---|---|
| 필드보다 많이 빠름 | 35.7% |
| 조금 빠름 | 32.2% |
| 비슷 | 28.8% |
| 조금 느림 | 26.8% |
| 많이 느림 | 21.2% |
차이가 14.5%포인트이고, 구간이 내려갈수록 비율도 빠짐없이 함께 내려갑니다. 거리를 셋으로 나눠도 각각 그대로 재현됩니다. 게다가 전체 주파속도와의 관련성은 0.234에 그쳐서, 같은 것을 다르게 말한 것도 아닙니다.
그런데 나머지 60개 지표 위에 얹으니 성적이 오르지 않았습니다. 오히려 조금 내려갔습니다.
이유는 나중에 분명해졌습니다. 빨리 출발하는 말은 대체로 빠른 말입니다. 그리고 그 사실은 레이팅과 주파기록 지표가 이미 하고 있는 말이었습니다.
같은 모양이 네 번 반복됐습니다. 착차를 반영한 주파기록, 필드 강도 지표, 구간기록 두 형태, 그리고 최근에 잰 날짜 보정 주파기록까지입니다.
판별력이 올라도 성적은 안 오릅니다
마지막에 잰 것이 특히 교과서적이었습니다.
경마장마다, 거리마다 기준 기록을 잡고, 그날 주로가 전체적으로 얼마나 빨랐는지를 추정해서 빼는 방식입니다. 같은 날 모두가 1초씩 느렸다면 그건 말이 느린 게 아니라 주로가 무거웠던 것이니까요.
판별력은 실제로 올랐습니다. 같은 경주 안에서 두 마리를 놓고 어느 쪽이 앞설지 맞히는 비율이 63.86%에서 64.30%로 올랐습니다. 혼자 쓰면 오히려 나쁘고 기존 지표와 섞어야 좋아진다는 점에서, 겹치지 않는 정보라는 신호이기도 했습니다.
그런데 실제 예측에 넣으니 모든 배합에서 성적이 내려갔습니다. 적중률 53.13%가 52.48%가 됐습니다.
지금은 이렇게 이해하고 있습니다. 지표 60개 위에 3개를 더 얹으면, 모델이 쓸 수 있는 용량이 이미 다른 지표가 하는 말을 다시 쪼개는 데 들어갑니다.
명백한 결함처럼 보이지만 아닌 것
KRA가 레이팅을 매기지 않은 말이 있습니다. 저희 계산은 그런 말에 최하위보다도 낮은 점수를 줍니다. 언뜻 보면 잘못 짠 코드입니다.
고쳐서 중립값을 주도록 바꿔봤더니 적중률이 0.35%포인트 떨어졌습니다.
레이팅이 없다는 사실 자체가 신호였습니다. 레이팅 없는 말은 70%가 최하위 등급에 몰려 있고, 그 등급은 핸디캡이 아닌 다른 방식으로 편성됩니다. 낮은 점수를 주는 쪽이 경험적으로 옳았습니다.
이 항목은 한 번 더 교훈을 남겼습니다. 나중에 다른 작업을 하다가 같은 코드를 다시 "명백한 결함"으로 보고 고칠 뻔했습니다. 기각 기록이 남아 있지 않았으면 같은 것을 두 번 쟀을 겁니다.
문헌이 맞다고 한 것도 여기서는 안 됩니다
순위 학습에는 여러 목적함수가 있고, 그중 하나는 짧은 목록과 노이즈가 많은 정답에서 유리하다고 보고돼 있습니다. 한국 경마는 한 경주에 8~14마리이고 결과의 3분의 2가 예측 불가입니다. 정확히 그 조건입니다.
바꿔서 측정했더니 성적이 내려갔습니다.
아예 불가능한 것도 있습니다
적중률을 가장 크게 올릴 수 있는 것이 경주 전 배당입니다. 마권을 산 사람 전체의 판단이 담겨 있고, 저희 예측이 아직 닿지 못한 폭의 상당 부분이 거기 있습니다.
그런데 쓸 수가 없습니다. KRA 공공데이터의 배당 항목은 경주가 끝난 뒤 확정되는 값입니다. 발매 중에 조회해도 확정 배당을 돌려줍니다. 경주 30분 전과 5분 전에 각각 저장한 값 1,739쌍을 대조해보니 전부 같은 숫자였습니다.
이건 "아직 안 해봤다"가 아니라 데이터가 존재하지 않는다는 뜻입니다.
최근에 잰 것 셋
지난달에 새로 잰 것도 셋 다 버렸습니다.
말의 통산 복승률. 단독으로 보면 3착률이 39.2%포인트 벌어지고, 레이팅과 최근 성적을 고정해도 살아남았습니다. 좋아 보였습니다. 그런데 확인해보니 이미 모델에 들어 있는 지표였습니다. 저희가 목록을 먼저 안 읽었습니다.
부마(씨수말) 성적. 아버지 말의 이전 산구들이 얼마나 잘했는지로 나눠보면 10.4%포인트 차이가 납니다. 그런데 레이팅 구간 안에서 보면 2~5%포인트로 줄고, 한 구간에서는 방향이 뒤집힙니다. 좋은 씨수말이 높은 레이팅의 산구를 내니, 레이팅이 이미 그 말을 하고 있었습니다.
부담중량 잔차. 핸디캐퍼가 레이팅 대비 얼마나 더 실었는지입니다. 단독 7.4%포인트인데, 이미 쓰고 있는 "경주 안에서의 부담중량 위치" 안에서 보면 방향이 사라집니다.
왜 이걸 적어두는가
버린 기록이 없으면 같은 것을 다시 잽니다. 실제로 저희가 한 번 그랬습니다.
그리고 읽는 쪽에서도 쓸모가 있다고 생각합니다. 어떤 지표가 통하는지보다 어떤 지표가 이미 다른 지표에 들어 있는지가 실전에서는 더 자주 문제가 됩니다. 출마표에서 열 가지를 보고 있어도 그중 절반이 같은 이야기라면, 보는 항목을 늘려도 판단이 나아지지 않습니다.
저희 예측이 지금 어디쯤에 있는지는 따로 정리해 두었습니다.
이 글은 정보·분석 콘텐츠이며 마권 구매는 KRA 공식 채널에서만 가능합니다.