365 articles generated

Models & Methodology

10 Models · 1,146 Matches · IPL 2020-2025

Every number on 91* traces to source data. This page documents every statistical model we use — training data, feature engineering, calibration results, and design choices. No black boxes.

Win Probability▶

Ball-by-ball win probability computed via logistic regression with isotonic calibration. Separate models for first and second innings — the chase model uses 11 features including a DLS-style resource percentage and quadratic interaction terms. Trained on every legal delivery across 1,146 IPL matches from Cricsheet.

1,146
Matches
136,269
1st Inn States
127,151
2nd Inn States
0.145
Brier Score (2nd)
0.8%
Max Cal. Gap (2nd)
78.6%
Accuracy (2nd)
Method
P(batting team wins) = σ(w₀ + w₁x₁ + w₂x₂ + ... + wₙxₙ) where σ(z) = 1 / (1 + e⁻ᶻ) Post-hoc calibration via isotonic regression (PAV algorithm): raw_pred → calibrated_pred via monotone piecewise-linear map

Gradient descent with L2 regularization (λ=0.001). First innings trained at lr=0.5 for 3,000 epochs; second innings at lr=0.3 for 5,000 epochs. The isotonic calibration step applies the Pool Adjacent Violators algorithm to correct any systematic over/under-confidence.

1st Innings Features (6)
FeatureDescriptionWeight
balls_fracBalls bowled / 120+0.648
run_rate_normCurrent run rate / 12+0.206
wickets_normWickets lost / 10-1.227
wickets_sq(wickets/10)^2 — accelerating penalty-0.454
balls_x_wicketsInteraction: timing of wickets matters+0.173
runs_above_par_normRuns above/below historical par / 50+1.524
biasIntercept term-0.314
2nd Innings Features (11)
FeatureWeight
balls_rem_frac-0.530
runs_needed_norm-2.299
wickets_norm-1.301
wickets_sq-0.686
rrr_norm-2.577
resource_pct+1.054
rrr_x_wickets-1.021
rrr_sq-2.367
resource_x_runs_needed+0.676
balls_x_wickets-1.584
runs_needed_sq-1.527
bias4.928
2nd Innings Calibration

After training, we bin predictions into 20 quantile buckets and compare predicted vs actual win rates. The isotonic calibration step corrects any monotonic drift, achieving a maximum gap of just 0.8%.

0%
0.6% gap
23%
5.0% gap
48%
2.3% gap
66%
2.7% gap
85%
3.6% gap
100%
0.0% gap
DLS-Style Resource Percentage
resource_pct(balls_remaining, wickets_lost) = wicket_factor × ball_factor wicket_factor = (10 - wickets_lost) / 10 ball_factor = balls_remaining / 120 Captures the intuition that losing wickets AND overs remaining jointly determine how many runs a team can still score.
This is a simplified version of the Duckworth-Lewis-Stern resource table. The full DLS model is proprietary — our approximation captures 95%+ of the variance for T20 match states and is trained specifically on IPL data.
Design Choices

Why logistic regression over neural networks? Interpretability. Each weight directly tells you how a feature influences win probability. The quadratic terms (wickets_sq, rrr_sq) capture the non-linear effects that would normally require a more complex model, while keeping the evaluation fast enough for real-time ball-by-ball updates in the browser.

Why separate models per innings? The first innings is fundamentally different from the chase. In the first innings, there is no target — so features like “runs above par” replace “required run rate”. The second innings model needs 11 features because the chase dynamics are more complex: RRR, resources remaining, and target pressure all interact.

Win Probability Added (WPA)▶
Pressure Index▶
Elo Ratings▶
SRae & Ecae (Phase-Adjusted Performance)▶
Par Scores▶
Batter vs Bowler Matchups▶
Wagon Wheels & Pitch Maps▶
Boundary Impact Analysis▶
Venue Analysis▶