Skip to content
Scouting & Strategy·Lesson 29 of 32

Predictive Match Modeling and Win Probability

Move from describing teams to predicting matches: build score and win-probability estimates from EPA components and validate them against results.

Sign in to track progress, earn XP, and save lessons.

From ratings to predictions

Descriptive stats tell you how good a robot is; predictive modeling tells you who will win the next match. This is the foundation of Statbotics' EPA system, which is explicitly built to predict, and you can build a simplified version yourself.

The core idea

If EPA estimates each team's expected point contribution, an alliance's predicted score is roughly the sum of its three robots' EPAs (plus a baseline), and the predicted margin drives win probability:

pred_red  = baseline + EPA(r1) + EPA(r2) + EPA(r3)
pred_blue = baseline + EPA(b1) + EPA(b2) + EPA(b3)
margin    = pred_red - pred_blue

Statbotics converts a margin like this into a win probability using a logistic-style function calibrated on past matches, so a larger expected margin maps to a higher, bounded-in-[0,1] win chance. You can approximate the same idea:

import math

def win_prob(margin, scale):
    # scale ~ typical score spread for the game; tune on real results
    return 1 / (1 + math.exp(-margin / scale))

Using component EPA for better predictions

Summing totals is the crude version. The sharper version predicts each phase, because REEFSCAPE scoring and ranking points are phase-structured:

  • Predict auto points from auto EPAs (auto has little alliance interaction, so it sums cleanly).
  • Predict teleop coral/algae from teleop EPAs.
  • Predict endgame from endgame EPAs, then check it against the Barge RP threshold of 16 barge points.

This lets you predict not just the winner but which ranking points each alliance is likely to earn, e.g., whether the red alliance can plausibly hit 7 coral on all 4 levels for the Coral RP, or whether earning the Coopertition bonus (2 algae in each alliance's processor) drops that to 3 levels and makes the RP reachable.

Validate, do not trust blindly

A prediction model is only as good as its track record:

  1. Backtest: run your model on completed matches (pull results from TBA) and compare predicted vs actual winners. Track accuracy and Brier score (mean squared error of probabilities).
  2. Calibrate: if matches you call 70% actually win ~60% of the time, your scale is too confident; widen it.
  3. Compare to Statbotics: Statbotics publishes predictions per match; if yours diverges sharply, find out why (usually a model assumption or a data gap).

Where predictions help and where they do not

Predictions are most useful for picklist what-ifs ("if we pick 2713, what is our projected elims alliance strength?") and RP planning ("can we realistically farm the Coral RP this match?"). They are weakest exactly where OPR/EPA are weak: defense, mechanism failures, and driver clutch. So use the model to set expectations, then let scouting override it on the human factors a model cannot see.

Key takeaways

  • Predicted alliance score is roughly summed EPAs; margin maps to win probability via a logistic-style function, the core of Statbotics' approach.
  • Component (auto/teleop/endgame) EPA lets you predict which ranking points an alliance earns, including REEFSCAPE's 16-point Barge RP and the coopertition-reduced Coral RP.
  • Always backtest against TBA results and calibrate probabilities; let scouting override the model on defense, reliability, and driver skill.

Lesson quiz

Required

Answer all 3 questions correctly to complete this lesson.

1.Using Statbotics' EPA (Expected Points Added) ratings, how do you produce a predicted score for one alliance in a match?

2.How does the EPA model fundamentally differ from a raw Elo rating in what its number represents?

3.Which metric is commonly used to evaluate how well-calibrated a win-probability model's predictions are?

Answer every question to submit.