#!/usr/bin/env python3
"""Recalculate the published KBO confidence sample with Python's standard library.

Download this file and kbo-confidence-20260401-20260926.csv to the same folder,
then run: python3 kbo-confidence-recalculate.py
"""

import csv
from pathlib import Path


SOURCE = Path(__file__).with_name("kbo-confidence-20260401-20260926.csv")


def summary(label, rows):
    n = len(rows)
    hits = sum(int(row["correct"]) for row in rows)
    brier = sum((float(row["confidence"]) - int(row["correct"])) ** 2
                for row in rows) / n
    print(f"{label}: {n}경기, {hits}적중, 적중률 {hits/n:.1%}, 브라이어 점수 {brier:.4f}")


with SOURCE.open(encoding="utf-8-sig", newline="") as handle:
    rows = list(csv.DictReader(handle))

assert len(rows) == 618 and len({row["game_id"] for row in rows}) == 618
summary("전체", rows)
before = [row for row in rows if row["model_version"] == "unknown"]
after = [row for row in rows if row["model_version"] != "unknown"]
summary("초기 버전 기록 없음", before)
summary("v2.2 이후", after)

for label, group in (("0.60 미만", [row for row in after if round(float(row["confidence"]) * 100) < 60]),
                     ("0.60 이상", [row for row in after if round(float(row["confidence"]) * 100) >= 60])):
    summary(label, group)

post_date = [row for row in rows if row["source_file_generated_after_game_date_kst"] == "1"]
print(f"파일 생성 시각이 경기 날짜 이후인 행: {len(post_date)}")
unchanged_date = [row for row in rows if row["source_file_generated_after_game_date_kst"] == "0"]
summary("위 31경기 제외", unchanged_date)
later = [row for row in unchanged_date if row["model_version"] != "unknown"]
for label, group in (("제외 후 0.60 미만", [row for row in later if round(float(row["confidence"]) * 100) < 60]),
                     ("제외 후 0.60 이상", [row for row in later if round(float(row["confidence"]) * 100) >= 60])):
    summary(label, group)
