vv
Deploy Iddaai Backend / build-and-deploy (push) Successful in 1m7s

This commit is contained in:
2026-06-02 03:37:00 +03:00
parent 671979b07d
commit 4e563e996e
10 changed files with 708 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
"""
League Confidence Loader
========================
Loads pre-computed per-league CONFIDENCE labels from
data/league_confidence.json. Called once at orchestrator startup.
Unlike league_reliability (odds-calibration), this reflects the model's
*backtested betting performance* per league: a label of high/medium/low/unknown
derived from BET ROI **and** sample size together, so a few lucky bets in a
thin league don't earn an undeserved "high" badge.
Label rule (from scripts that build the artifact):
high : bet_roi > +10% AND bet_n >= 20
low : bet_roi < -5% AND bet_n >= 15
unknown : bet_n < 10 (too few bets to judge)
medium : everything else
Usage:
from utils.league_confidence import load_league_confidence
lookup = load_league_confidence()
info = lookup.get(league_id) # {"label","bet_roi","bet_n","hit","name"} or None
"""
from __future__ import annotations
import json
import os
from typing import Dict, Any
_DATA_FILE = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"..",
"data",
"league_confidence.json",
)
def load_league_confidence() -> Dict[str, Dict[str, Any]]:
"""
Returns dict mapping league_id → {label, bet_roi, bet_n, hit, name}.
Falls back to empty dict if the file is missing/corrupt — callers then
treat every league as 'unknown' (no badge), never crashing.
"""
if not os.path.isfile(_DATA_FILE):
print(
f"⚠️ league_confidence.json not found at {_DATA_FILE}. "
"All leagues will show as 'unknown' confidence."
)
return {}
try:
with open(_DATA_FILE, "r", encoding="utf-8") as f:
data = json.load(f)
lookup: Dict[str, Dict[str, Any]] = data.get("lookup", {})
print(f"✅ Loaded league confidence labels for {len(lookup)} leagues")
return lookup
except (json.JSONDecodeError, KeyError, TypeError) as exc:
print(f"⚠️ Failed to parse league_confidence.json: {exc}")
return {}