Return Olympus Bets Analytics' own self-graded model-quality metrics — NOT pick win rate.
This is a different question than "did our picks win money?" (see
get_performance_summary / get_track_record for that). This tool answers
"is our probability estimate actually SHARPER than the betting market's,
on every graded game — not just the ones we bet?" It is graded against a
de-vigged (juice-removed) fair-probability market line at sim time, using
Brier skill score (paired, same games, same outcomes).
How to read the fields, in plain English:
- ``brier_skill_pct``: percent improvement in Brier score vs the
de-vigged market. POSITIVE = our model is sharper than the market.
NEGATIVE = the market is sharper than us. Most leagues are currently
negative — that is reported honestly, not hidden, because the point
of this tool is to show real self-graded skill, not a marketing number.
- ``model_weight_star`` (w*): the blend weight (0.0-1.0) our model
earned in a model+market blend that minimizes log-loss. 0.0 means
"defer entirely to the market's number"; 1.0 means "our number alone
is already optimal." This is fit empirically per league/window, not
asserted.
- ``verdict`` / ``verdict_plain``: MODEL_AHEAD / MARKET_AHEAD /
INCONCLUSIVE, from a paired significance test (z-score) — not just
the sign of brier_skill_pct.
- ``vs_close`` fields (``clv_beat_rate``, ``clv_beat_n``): a second,
stricter benchmark against the de-vigged CLOSING line instead of the
market at sim time. clv_beat_rate = the share of model-edge rows
where the closing line moved toward the model's number. Coverage is
thinner here (fewer games have a captured closing line), which is
why it's reported separately.
- ``n`` / ``reliable``: sample size behind each cell. Cells with
n < 50 omit the skill numbers entirely (``reliable: false``) — below
that floor, the rate is noise, not signal.
Windows: ``30d`` (most current, smallest sample) and ``90d`` (steadier,
larger sample). Use 90d as the primary read; use 30d to see if something
is actively shifting.
Freshness: the underlying file rebuilds daily (~12:50 UTC). If it is
stale (>36h old), this tool returns ``{"status": "updating", ...}``
instead of presenting old numbers as current — never treat a missing
``windows`` key as "no skill data," check ``status`` first.
Args:
league: Optional league filter (e.g. "MLB", "NHL"). Omit for all
leagues covered by the scoreboard (NBA, NHL, MLB, SOCCER, WNBA,
TENNIS, LOL, CS2, GOLF, WC — CFB/NFL/CBB not yet in-season/covered).
Returns:
``{status, generated_at, benchmark, close_benchmark, sample_floor_n,
windows: {"30d": {...}, "90d": {...}}}`` where each window has
``overall`` (blended-across-leagues cell) and ``by_league`` (list of
per-league cells, each carrying its own ``league`` code).