이 페이지에 나오는 숫자는 전부 실제 코드 동작을 그대로 옮긴 것입니다. "대략 이런 방식"이 아니라, 지금 사이트가 쓰는 파라미터·게이트 이름·검증 결과를 그대로 적었습니다.
KBO 공식 사이트(koreabaseball.com)의 일정·기록 페이지를 매일 자동으로 수집합니다. 픽스처(가짜 데이터)는 개발·테스트에만 쓰고, 실제 서비스 화면에는 절대 노출하지 않습니다.
수집한 데이터는 아래 6단계를 순서대로 통과해야만 사이트에 반영됩니다. 하나라도 실패하면 그 날짜의 발행 자체를 건너뛰고 어제 페이지가 그대로 유지됩니다 — 틀린 확률을 보여주는 것보다 갱신을 안 하는 쪽을 택합니다.
메인 페이지의 "공식 순위 대조 · 불일치 0건" 수치가 바로 3·4번 게이트 결과입니다.
모든 팀은 시즌 시작 시 레이팅 1500에서 출발해, 경기가 끝날 때마다 결과에 따라 점수를 주고받는 표준 Elo 공식을 씁니다.
기대승률 = 1 / (1 + 10^(-((홈팀레이팅 + 홈어드밴티지) - 원정팀레이팅) / 400))
실전 파이프라인은 K=10, 홈 어드밴티지 +25점을 씁니다. 2026시즌 실제 경기를 앞 357경기(학습)·뒤 153경기(검증)로 나눠 여러 조합을 테스트한 결과, 이 조합이 엔진 기본값(K=20, 홈 +50)보다 검증 구간 로그손실(0.8232 vs 0.8370)에서 더 나은 성능을 보여 채택했습니다. 무승부 확률은 6%로 고정합니다.
경기별 승리확률은 팀의 시즌 전체 Elo 레이팅으로 계산하고, 특정 상대와의 개별 맞대결 기록(승-패)은 넣지 않습니다. 시즌당 같은 상대와 맞붙는 경기 수가 적어(보통 두 자릿수 초반) 맞대결 승률만으로는 표본이 너무 작고, 이미 Elo 레이팅 자체가 그 팀이 시즌 내내 보여준 전력을 누적해서 반영하고 있기 때문입니다. 맞대결 기록은 페이지에 참고용으로만 표시합니다.
코드에는 팀 단위 타율(OPS)·평균자책점(ERA) 기반 보정 신호가 이미 구현돼 있지만, 기본값에서는 꺼져 있습니다. 이 신호를 Elo처럼 과거 시점 데이터로 워크포워드 백테스트할 수 있는 시계열 데이터가 아직 없어서, 검증되지 않은 상태로 실전 확률에 섞고 싶지 않기 때문입니다. 검증 전에는 0(중립)으로 두는 쪽을 택했습니다.
남은 시즌 전체를 100,000번 통째로 시뮬레이션합니다. 매 시뮬레이션마다 한화뿐 아니라 리그의 모든 남은 경기를 각 경기의 Elo 승리확률에 따라 무작위로 한 번씩 진행시키고, 그 결과로 만들어진 최종 순위표에서 한화가 몇 위인지 기록합니다. 10만 번 중 한화가 5위 이내로 끝난 비율이 곧 "가을야구 진출 확률"입니다.
순위 동률 시 처리(타이브레이크)는 결과 샘플링과 별도의 난수열을 써서, 동률 처리 로직이 경기 결과 자체의 확률 분포를 흔들지 않도록 합니다.
네. 시뮬레이션에 쓰는 난수는 고정된 시드에서 생성됩니다 — 같은 입력 데이터라면 언제 다시 계산해도 같은 확률이 나옵니다. 확률이 바뀌는 건 오직 실제 경기 결과가 새로 반영됐을 때뿐입니다.
아니요. 검증되지 않은 신호(부상 여부, 그날의 선발 로테이션, 트레이드 직후 전력 변화 등)는 기본값에 포함하지 않습니다. Elo 레이팅은 팀이 실제로 치른 경기 결과가 누적되면서만 서서히 움직입니다.
상대팀 성적이 그대로 멈춰 있다고 가정한 현재 시점 스냅샷일 뿐, 남은 경기에서 필요한 승수를 의미하지 않습니다. 나머지 구단의 결과까지 함께 반영한 실제 가능성은 위쪽의 가을야구 진출 확률(10만 번 시뮬레이션 결과)을 참고하세요.