Methodology

A complete technical reference for how Olympus Bets Analytics generates a sports betting projection — from raw data ingestion to a Kelly-sized recommendation. Every component documented with version numbers, formulas, and the empirical research that motivated each design decision.

TL;DR — How a projection is made, in 150 words

Olympus Bets Analytics produces a sports betting projection in nine steps. (1) Pull live schedule, odds, injuries, and advanced metrics from authoritative sources. (2) Run a league-specific Monte Carlo engine for 10,000+ iterations per game, producing a full probability distribution over moneyline, spread, and total outcomes. (3) Calibrate the raw output with Platt scaling and per-league isotonic regression. (4) Compute edge as calibrated probability minus market-implied probability. (5) Map the candidate into a 15-dimension profitability zone and block RED zones. (6) Apply an adaptive regime threshold that tightens or relaxes based on a rolling window of recent accuracy. (7) Size the bet via Kelly Criterion after a 15% Bayesian probability shrinkage. (8) Append to an immutable timestamped ledger. (9) Resolve against official scores and feed the outcome back into the calibration set. The entire loop is closed, automated, and version-tagged.


1. Monte Carlo Simulation Engine

Definition. A Monte Carlo simulation is a computational technique that uses repeated random sampling — drawing inputs from calibrated probability distributions — to estimate the distribution of outcomes for a system under uncertainty. Olympus Bets Analytics uses Monte Carlo simulation as the foundation of every projection: rather than producing a single point estimate ("Lakers win 108-103"), each engine produces a full probability distribution over the moneyline, point spread, and total markets. The width of that distribution is what makes the output actionable, because it directly corresponds to model confidence.

Each scheduled game is simulated for a minimum of 10,000 iterations. The number is not arbitrary. With 1,000 iterations a true 55% probability appears anywhere in the 52–58% range due to sampling noise; at 10,000 iterations the standard error drops to roughly 0.5 percentage points, which is the precision required to discriminate between a 54% true edge and a 56% true edge. Lower-iteration models produce noisy probabilities that systematically generate false edges and lead to overbetting; this is one of the most common failure modes in retail sports modeling.

League-specific engines

A basketball engine cannot be repurposed for hockey any more than a chess engine can play poker. Olympus Bets Analytics maintains nine independent simulation engines, each modeling the actual physical mechanics of its sport:

Each engine writes a model_version string into every simulation output, which the downstream pipeline guardian validates against an expected version table to catch drift between the orchestrator and the engine code itself.

Reproducibility

Every simulation run is seeded with a SHA256 hash of the game ID plus the simulation date. This guarantees that a re-run on the same inputs produces identical output, which is essential for debugging, auditing, and post-game forensic analysis. A non-reproducible model is unfalsifiable, and an unfalsifiable model cannot be improved.

Full guide: Monte Carlo simulation in sports betting →


2. Kelly Criterion + Bayesian Probability Shrinkage

Definition. The Kelly Criterion, derived by John Kelly at Bell Labs in 1956, is the bet-sizing fraction that maximizes the expected logarithm of bankroll over time. The closed form is f = (bp − q) / b, where b is the decimal odds minus one, p is the probability of winning, and q is the probability of losing (1 − p). Kelly is provably optimal in the sense that no other strategy achieves higher long-run growth rate without taking on extra variance.

In practice, full Kelly sizing is too aggressive for human bettors. The geometric drawdown distribution under full Kelly is heavy-tailed, and a sequence of unlucky outcomes can wipe out a bankroll even when the long-run edge is real. Olympus Bets Analytics uses fractional Kelly — Kelly percentages are mapped to a discrete unit scale capped at 3.0u — and applies a Bayesian probability shrinkage step before Kelly is computed.

Bayesian Kelly shrinkage

Before any Kelly fraction is computed, the calibrated model probability is shrunk toward 50%:

shrunk_prob = model_prob × 0.85 + 0.50 × 0.15

This pulls a 70% raw probability to 64.5% before Kelly sees it. The economic effect is significant: full Kelly on a 70% probability at -110 odds is 38% of bankroll; on a 64.5% probability it drops to 24%. The shrinkage step is the single most important guard against the platform's most expensive failure mode — STRONG-tier inflation from overconfident model output. The 0.85 / 0.15 weights were tuned empirically on a 6,101-game validation set and are not a free parameter; tighter shrinkage produces under-betting on real edges, looser shrinkage produces blow-ups in model-blind regimes.

Kelly percentage to units mapping

Kelly %UnitsTier
0 – 1%0.5uSpeculative
1 – 3%1.0uStandard
3 – 6%1.5uConfident
6 – 10%2.0uStrong
10 – 15%2.5uVery Strong
15%+3.0uMaximum

League-specific unit caps

Different sports have different variance profiles. A 60% edge in the NFL (a 17-game regular-season sample) carries more uncertainty than a 60% edge in the NBA (an 82-game sample). Caps are calibrated to that variance:

LeagueMax UnitsRationale
NBA / NFL / MLB / CFB3.0uDeep markets, high liquidity, large samples
NHL2.5uGoaltending variance, parity
CBB2.5uLarge spread variance in college
Soccer2.0uThree-way market — draw counts as a loss for moneyline

Full guide: Kelly Criterion in sports betting →  |  Interactive Kelly calculator →


3. Probability Calibration (Platt + Isotonic)

Definition. Probability calibration is the process of adjusting raw model probabilities so that the predicted probability of an outcome matches the empirical frequency of that outcome over a large historical sample. A model is well calibrated when its 70% predictions win 70% of the time over a meaningful sample, regardless of league, market, or conviction tier.

Raw Monte Carlo probabilities are systematically miscalibrated. Across thousands of resolved Olympus Bets Analytics projections, raw 70% predictions have historically won closer to 64% of the time. This overconfidence is universal across sports leagues and is the dominant source of model-vs-market disagreement that does not translate into long-run edge. Olympus Bets Analytics layers two complementary calibrators on top of every raw Monte Carlo output.

Platt scaling

Platt scaling fits a parametric sigmoid P_calibrated(x) = 1 / (1 + exp(A·x + B)) to historical (raw probability, outcome) pairs. The Olympus implementation uses a regularization constant of C = 10.0 and produces a 3.0–19.7% reduction in Brier loss across leagues compared to raw probabilities. Platt scaling is appropriate when the calibration curve is approximately sigmoidal, which is the case for most Monte Carlo outputs.

Isotonic regression

Isotonic regression fits a non-parametric, monotonically non-decreasing step function from raw probabilities to empirical frequencies. It does not assume a sigmoidal shape and is therefore robust to model-specific quirks in the calibration curve. Olympus Bets Analytics fits a separate isotonic regression per league, per bet type — NBA spreads have a different calibration curve than NHL totals, and a single global calibrator would average those out.

Ensemble stacking

For each candidate projection, the system also queries an ensemble gradient-boosting stacker (AUC = 0.6045 on a held-out 11,700-row training set, 19 features) that blends raw probability, calibrated probability, market-implied probability, recency-weighted league performance, and several engineered signals. The stacker output is the final calibrated probability used downstream.

Self-correcting feedback loop

Calibration tables are recomputed daily after results resolve. A bad week in NHL totals immediately adjusts the next day's NHL totals calibration. The system is therefore not "trained once, deployed forever" — it is a closed loop where every new resolved projection is part of the calibration set for the next day's run.

Full guide: Bayesian sports betting and overconfidence correction →


4. Edge Calculation Against the Market

Definition. Edge is the difference between the model's calibrated win probability and the market's implied probability at the offered odds, expressed in percentage points. A 5-point edge means the model assigns a 5pp higher probability than the sportsbook line implies.

For a moneyline bet at -110, the implied probability is approximately 52.4%. If the calibrated model probability is 57%, the edge is 4.6 percentage points. For a spread bet, the edge is computed from the simulated cover distribution: the percentage of Monte Carlo iterations in which the team covered the spread minus the implied probability from the offered price.

Edge is computed against the best available line across tracked sportsbooks (line shopping is a separate quality gate). Because a single book's line can be sharper or softer than consensus, this matters: a 4-point edge against a soft book may collapse to 1 point against the consensus close. Olympus Bets Analytics also tracks Closing Line Value (CLV) — whether the price at projection publication was better than the eventual closing price. Consistently beating the closing line is one of the few empirically robust indicators of a real edge, distinct from variance.

Full guide: Expected Value in sports betting →  |  Full guide: Closing Line Value →


5. Profitability Zone Engine (15-dimensional) — a.k.a. Pattern Edge

Definition. A profitability zone (marketing name: Pattern Edge) is a sub-niche of the betting universe defined by a tuple of 15 dimensions — league, bet type, side (home or away), favorite/underdog, edge bucket, probability bucket, time of day, day of week, and others. The profitability-zone engine computes long-run win rate, units, and z-statistic for each zone, classifies it as GREEN, YELLOW, or RED, and uses those tags to gate which projections are surfaced.

Blanket league-level filtering is too coarse. "NBA spreads are bad" misses the fact that NBA home favorites in the 5–10% edge bucket are historically profitable while NBA away underdogs in the same edge bucket are historically catastrophic. The zone engine exposes this granularity and acts on it surgically.

Zone classification rules

TagCriteriaEffect
GREEN z > 1.0 AND win rate > 54% AND n ≥ 30 AND OOS validation (held-out 14d WR ≥ 50% with n ≥ 5) Rank-score boosted ~1.10× via continuous zone multiplier
YELLOW Default (everything not GREEN or RED) Premium: blocked unless in-sample units ≥ +2.0u AND n ≥ 30 AND WR ≥ 52.5% AND z ≥ 0 AND OOS not collapsing. Free: passes through.
RED z < −1.0 AND win rate < 48% AND n ≥ 25 Hard-blocked from premium, plus a ROI-gated catch-all at n ≥ 30 AND units ≤ −10u AND ROI ≤ −3%

Walk-forward training split

As of April 2026, the zone engine uses a walk-forward training/holdout split: bets at least 14 days old are the training set (with a 21-day recency decay), and the most recent 14 days are the held-out out-of-sample validation set (flat-weighted). Base tags are set from training, then validated against OOS. A zone classified GREEN by training is demoted to YELLOW if its OOS win rate falls below 50%; a YELLOW zone can be promoted to GREEN if its OOS win rate exceeds 60%. This catches in-sample overfits — on the April 2026 baseline, 28 in-sample GREEN zones were demoted by OOS validation. The engine writes an oos_override note into the zone JSON for every override so the decision is auditable.

Hierarchical lookup

Zone keys are looked up most-specific-first, then progressively broader: drop probability bucket → drop edge bucket → drop favorite/underdog → drop side → drop bet type. This ensures that a candidate with no exact zone match still receives the most specific available signal rather than falling through to a generic league-level tag.


6. Adaptive Regime Calibrator

Definition. A regime calibrator is a meta-controller that adjusts model thresholds in real time based on a rolling window of recent performance. It detects when the current regime — defined by recent calibration accuracy, edge realization, and league-specific variance — has shifted, and tightens or relaxes the minimum-edge threshold accordingly.

Static thresholds decay. A 4% minimum edge that was profitable on 2025 data may be unprofitable on 2026 data because the underlying market has tightened, or because team rosters have produced a regime shift in scoring variance. Without a regime layer, the system would rigidly apply stale thresholds during streaks in either direction. The regime calibrator runs daily over a 14-to-30 day rolling window per league and bet type; if recent accuracy drops below the calibrated baseline, the minimum-edge threshold is tightened by a calibrated step. Conversely, if recent accuracy exceeds baseline, thresholds are relaxed to capture more of the regime.

The regime layer composes with the profitability-zone engine: a bet must clear both the zone filter and the regime-tightened minimum edge to surface as a recommendation. This is intentional. Zones answer "is this kind of bet historically profitable?" and the regime calibrator answers "is the model's current edge estimate trustworthy in the current market state?" — two different questions with two different answers.


7. ML Conviction → Spread Cascade (NBA)

Definition. The conviction cascade is a self-learning routing layer specific to NBA where a high-conviction moneyline signal can reweight the corresponding spread recommendation, but never the other direction. It encodes the empirical observation that ML conviction is a stronger leading indicator than spread conviction in the NBA market.

The cascade is implemented as a learned weight rather than a hardcoded rule. When the model produces a STRONG-tier moneyline edge on a side, the spread recommendation on the same side receives a continuous rank-score adjustment proportional to the ML edge. There is no symmetric reverse — a strong spread signal does not reweight the moneyline — because the asymmetry is itself an empirical finding from the resolved-pick history. The weight is recalibrated on every resolved-pick batch and stored in data/best_bets_tracking/ml_conviction_spread_cascade.json.


8. Data Sources and Freshness Gates

Definition. Every input to the projection pipeline is a real, named, authoritative data source. The system never estimates, extrapolates, or synthesizes input data — if a required input is missing or stale, the corresponding game is skipped rather than projected on incomplete inputs.

Freshness gates

Before any sim runs, every upstream cache file is timestamp-checked. Files older than six hours trigger an automatic re-fetch; files older than 18 hours hard-block the simulation step until the source is refreshed. Stale Python .pyc caches are cleared on each run to prevent module-shadowing bugs after refactors. The pipeline guardian checks file timestamps every hour and pages the operator if a critical input has gone stale beyond its freshness contract.


9. Quality Gates (Multi-Layer Filtering)

Definition. A quality gate is a binary check that a candidate projection must pass before it is surfaced as a recommendation. Olympus Bets Analytics layers several independent gates so that the system is conservative by composition rather than by any single threshold being conservative.

The gates compose. A 4-point edge in a GREEN zone with stale injury data does not pass. A fresh-data 6-point edge in a RED zone does not pass. A 28% edge in a GREEN zone is capped at the 25% premium ceiling. Pass-through is rare by design.


10. Production Engine Versions

Every simulation output writes a model_version string into the result file. The pipeline guardian validates this against the canonical version table on every run; mismatches generate an alert. The current canonical versions:

SportEngineVersionOutput cache
NBAPossession Monte Carlov5.0.2-calibrated-possessiondata/nba/cache/{date}_simulations.json
NHLPinnaclev19.1-pinnacledata/nhl/elite_recommendations/nhl_v17_sim_{date}.json
CBBSavant Ultrav5.0.1data/cbb/simulation_archive/{date}.json
NFLElite Pinnaclev1.1data/nfl/cache/season/2025/week_{n}.json
MLBPitch Simv5.0data/mlb/cache/today.json
SoccerPBPv16.3(per-fixture)
LoLChampionshipv2.1olympus_esports_lol/outputs/simulations_ultra.json
GolfConditional Simv3.2data/golf/cache/today.json
TennisTennis V2(calibrating)(per-match)
Olympic HockeyOlympicv2.2data/olympic/simulations/{date}.json

11. Key Research Findings

A handful of empirical findings drive most of the platform's design decisions. Each is reproducible from the resolved-pick ledger.


12. Immutable Ledger and Resolution

Definition. The Olympus Bets Analytics projections ledger is an append-only JSON-Lines file that records every projection at publication time. It is never edited, never reordered, and never selectively pruned. The file is data/best_bets_tracking/best_bets_picks.jsonl; the resolved counterpart is data/best_bets_tracking/best_bets_resolved.jsonl. Both are mirrored into the public CSV download via the daily SEO updater.

Every record contains: date, league, market, matchup, line, odds, model probability, edge percentage, units, confidence tier, and publication timestamp. Resolved records additionally contain the WIN/LOSS/PUSH outcome, units won, the actual home and away scores, and the resolution timestamp. The ledger is the canonical source of truth — every performance number on the track record, llms.txt, and /webmcp/api/performance endpoint is computed from this file.

An automated resolver (workers/bulletproof_best_bets_resolver.py) runs three times daily at 5 AM, 10 AM, and 2 PM EST. It matches each unresolved projection against the official ESPN final score (or, for player-prop markets, against the Statcast / boxscore final stat line), writes the outcome, computes units won, and appends to the resolved ledger. There is no manual intervention. There is no "voiding" of legitimate losses. Cancellations from the data source itself (postponed games, weather cancellations) are the only no-result resolutions.


13. How This Compares to Other Platforms

Olympus Bets Analytics differs from the major sports analytics platforms along five axes. None of these are aesthetic preferences — each reflects an empirical or architectural decision that materially affects the output.

Compare side-by-side with other platforms →


14. Olympus Oracle — Prediction Market Intelligence

Definition. Olympus Oracle is the prediction-market intelligence layer that ingests whale trades from Polymarket and Kalshi, classifies wallets via Bayesian scoring on resolved-outcome history, and cross-references the signals against Olympus's own Monte Carlo simulations. It is the first publicly available model-vs-market edge detector — no competitor crosses internal Monte Carlo output against external prediction-market positioning at this resolution.

The pipeline has five stages: (1) Trade ingestion — read-only Polymarket and Kalshi clients pull recent trades and active markets every 15 minutes. (2) Wallet profiling — every distinct wallet is profiled by ROI on resolved trades, win rate, sport specialization, and entry timing relative to event start. (3) Insider classification — a Bayesian scorer flags wallets whose historical resolution rate is statistically inconsistent with a random walk; thresholds tighten as evidence accumulates. (4) Signal generation — when a classified insider takes a position in a market that maps to one of Olympus's tracked games, a signal is generated with a compound confidence score (10 components: whale consensus, entry zone, conviction, wallet tier, sport bonus, specialist, sim adjustment, copy-trade, pre-news, EOA-ring). (5) Cross-validation — the signal is compared against the Olympus Monte Carlo projection for the same game; agreement amplifies the score, disagreement triggers an audit flag.

Critical rules: Oracle is read-only. The Kalshi client exposes no order methods; we never place trades against the surface we are reading. Stale signals (event date in the past) are filtered before publication. Wallet scores are derived only from resolved data — never synthetic or projected. Polymarket wallet addresses are stored as proxy addresses, not the underlying EOA, matching Polymarket's published wallet model.

Live Oracle signals (premium) are surfaced via the /oracle preview component on the platform and the /oracle Discord command. The configuration registry lives at prediction_market/config/pm_config.py; thresholds are bootstrap defaults that self-tighten as resolved-outcome volume grows.


15. Athena — AI-Authored Recommendation Writeups

Definition. Athena is the AI authoring system that generates every premium pick's narrative — the executive summary, the factor analysis, the risk enumeration, the "why this beats the market" thesis. Athena does not generate projections or set lines; the upstream Monte Carlo engine produces the numbers and Athena produces the prose that explains them, given the engine's output as input.

Athena is bounded by three guarantees: (1) No invented data. Athena receives the simulation output dict (probabilities, scores, edge, units, key model factors, injury status) and may compose a writeup only from those fields. Writeups never reference statistics not present in the input. (2) Version-tagged. Every Athena writeup carries a writeup_version string written into the same record as the projection, so an outcome that drifts from the prose can be traced to the exact prompt and model version that generated it. (3) Append-only. Writeups are never edited retroactively. If a writeup is wrong, a corrected record is appended; the original remains in the ledger.

Athena outputs are stored alongside their picks in data/best_bets/{date}/premium_ledger.json. Free-tier picks receive a shorter writeup via the same system. The MCP get_todays_projections tool returns the short writeup by default; verbose=true returns the full long-form text.


See the methodology in action

Read today's free projections to see edge calculations, Kelly-sized units, and the full reasoning chain on real games — or open the live track record to verify resolved outcomes against published projections.

View Free Projections View Track Record