방법론 · 공개 코드

확률은 어떻게 계산하고,
어디까지 믿을 수 있나요

숫자를 이해할 수 있도록 계산 원리와 실제 설정을 공개합니다. 설명은 코드의 동작을 정리한 것이며 성능이나 수익의 인증이 아닙니다.

작성·검토: HYEOKS 운영자, AI 보조. 코드 대조 기준: 2026년 10월 11일. 독립 전문가의 검수는 받지 않았습니다.

1. 서로 다른 근거를 같은 ‘AI 예측’으로 부르지 않습니다

실제 데이터의 basis 값
구분무엇을 뜻하나요주의점
model클럽 Elo·최근 흐름·맞대결·무승부율. 입력이 있으면 배당도 혼합순수 모델과 배당 혼합을 구별해서 읽어야 합니다.
market해외 배당에서 마진을 제거한 암시확률자체 모델 성능이라고 주장하지 않습니다.
national배당이 없는 국가대표 경기의 국가대표 Elo클럽 모델의 등급표를 그대로 적용하지 않습니다.
none충분한 모델·배당 근거가 없는 임시 사전확률예측·적중 기록에서 제외합니다.

서로 다른 리그의 클럽을 리그 안의 Elo로 단순 비교하지 않습니다. 팀 매핑이나 모델 입력이 성립하지 않으면 배당 기반 또는 판단 보류로 처리합니다.

2. 클럽 모델의 계산 순서

Elo에 경기 정보의 차이를 더합니다

현재 기본 계산은 다음 입력을 결합합니다. 사용자가 앱에서 끄거나 조정한 값은 기본 공개 기록과 별개의 시뮬레이션입니다.

전력 차 = Elo 차 + 60 × 최근 폼 차 + 50 × 맞대결 차 + 적용 가능한 추가 입력

합산 전력 차에 홈 이점을 더해 1 / (1 + 10^(−차이 / 400))로 홈 쪽의 분배 값을 계산합니다. 이 값만으로 축구의 최종 홈승 확률이라고 부르지 않습니다. 리그 무승부율과 전력 격차 보정으로 무승부 확률을 정한 뒤, 남은 확률을 홈·원정에 나눕니다.

배당이 있는 경기에는 혼합 비중이 있습니다

공개 확률 = w × 시장 확률 + (1−w) × 통계 모델 확률

현재 기본 w는 EPL·라리가·세리에A·분데스리가·K리그1·MLS 0.8, K리그2·J1 0.4입니다. K리그1·MLS는 2026년 10월 12일 고친 검증으로 시간순 4개 분할 모두에서 적중률과 로그손실이 나아져 0.4에서 0.8로 바꿨고, 두 리그의 구간별 과거 적중률 표는 다시 산출할 때까지 표시하지 않습니다. 이는 현재 운영 설정의 공개이지 최적값이나 베팅 우위 보장이 아닙니다. 아래 재검증 상태를 함께 읽어 주세요.

실제 코드: prediction.ts · elo.ts · drawCurve.ts

3. 배당을 확률로 바꾸는 직접 계산 예시

한 업체의 가상 배당이 홈 2.00 / 무 3.00 / 원정 4.00이라고 가정합니다. 실제 경기 데이터가 아닌 원리 설명용 숫자입니다.

  1. 역수: 1/2 = 50%, 1/3 ≈ 33.33%, 1/4 = 25%.
  2. 역수 합은 108.33%. 100%를 넘는 부분이 마진을 포함한 가격 구조입니다.
  3. 각 역수를 합으로 나누면 홈 약 46.15%, 무 약 30.77%, 원정 약 23.08%가 됩니다.

이 정규화는 시장 가격의 해석 방법일 뿐, ‘진짜 확률’을 알아냈다는 뜻은 아닙니다. 업체별 차이, 수집 시점, 업데이트 지연이 있습니다. 한 업체뿐이면 정보 범위가 좁다는 한계를 함께 표시합니다.

배당·투표율 출처와 주의사항

4. 국가대표 Elo는 별도로 계산합니다

국가대표 결과 이력과 대회 중요도, 골 차 가중, 홈 이점 100점을 사용하는 별도 Elo 구현입니다. 배당이 있으면 배당을 우선하며, 과거 배당 표본으로 검증하지 않은 혼합 비율을 임의로 적용하지 않습니다.

FIFA 공식 랭킹 점수나 eloratings.net의 현재 점수를 그대로 가져와 사용하는 것과는 구별해야 합니다. 자체 코드로 결과 이력을 계산하며, 데이터 누락·국가명 매핑·중립 경기 처리에 한계가 있습니다.

실제 코드: nationalElo.ts. Elo의 기대 점수와 세 결과 확률은 Elo 가이드에서 구분합니다.

5. 실제 저장 기록과 백테스트를 분리합니다

현재 공개 검증 기록

공개 검증 페이지는 저장 시각이 킥오프보다 앞서고 정상적인 근거·확률·확정 결과가 있는 회차 경기만 평가합니다. 저장본이 없는 과거 경기를 현재 코드로 다시 계산해 채우지 않습니다. 예정·미정산·누락·사후 저장·중복 제외 건수를 공개합니다.

확률 1순위 일치율 외에 세 결과의 제곱오차 합인 Brier(0~2)와 실제 결과 확률의 자연로그 손실을 함께 표시합니다. 항상 홈승을 고른 동일 경기 기준선도 제시합니다. 수익률·독식 확률·베팅 우위는 이 지표로 인증하지 않습니다.

과거 백테스트 재검증 상태

2026년 10월 11일 검증 스크립트 결함을 고치고, 10월 12일 다시 검증했습니다.

공통 검증 스크립트에 전체 기간의 무승부율을 과거 경기 입력으로 쓰는 미래 정보 혼입과, 최근 폼의 단위가 운영 코드와 다른 문제가 있었습니다. 날짜 단위로 그 이전 경기만 쓰고, 운영 코드와 같은 단위를 쓰도록 고쳤습니다. 학습·평가 구간도 같은 날짜가 둘로 나뉘지 않게 잘랐습니다.

고친 스크립트로 유럽 4개 리그(평가 3,644경기)를 다시 검증한 결과, 배당 혼합 비중 0.8은 시간순 4개 분할 모두에서 0.4보다 적중률과 로그손실이 좋았습니다. 확신도 구간별 과거 적중률 표도 새 결과로 바꿨습니다. 예를 들어 EPL에서 1·2순위 확률 차가 30%p 이상인 412경기의 1순위 적중률은 65.0%입니다.

같은 검증에서 최근 폼과 맞대결 입력은 배당을 섞은 뒤에는 뚜렷한 기여가 없었고, 배당만 쓴 경우가 조금 더 나았습니다. 즉 유럽 리그에서는 자체 입력이 시장 가격에 더하는 정보가 크지 않습니다. 이 결과를 숨기지 않고 공개하며, 계수 변경은 따로 판단합니다. 과거 백테스트 수치는 미래 성적을 보장하지 않습니다.

모델 변경은 시간순 4분할에서 적중률과 로그손실이 모두 나빠지지 않는 조건을 확인한 뒤 판단합니다. 이 변경 채택 기준과, 특정 현재 계수가 재검증을 완료했다는 주장은 서로 다릅니다.

실제 코드: 검증 스크립트 · 공개 기록 집계

6. 이 서비스가 알지 못하는 것

오류를 발견하면 경기 주소·회차·표시 시각을 함께 제보해 주세요. 확인한 데이터와 추정을 구분하는 편집 원칙을 따릅니다.