FTC Scouting Metrics
Every number on a Robolyst team or event page, with the formula behind it. These are computed from the match results themselves — no scouting sheets, no judgement calls — which means they are reproducible, and also that they inherit every quirk of the schedule they came from.
All of them are computed per event, over that event's qualification matches only. Playoff matches are excluded: alliances are chosen there rather than assigned, so the independence the fit relies on is gone.
OPR
higher is better · shown by defaultOffensive Power Rating: estimated points a team adds to its alliance score.
Ordinary least squares over the event’s qualification matches. Each alliance-match is one equation — the sum of its teams’ ratings should equal that alliance’s final score — and the whole system is solved at once with a tiny ridge term (λ = 1e-6) for conditioning.
The classic offensive power rating: how many points a team is estimated to add to whatever alliance they are on. It is the baseline every other number here is built from.
OPR is fit to the final score, penalties included. Points an opponent handed over as fouls land in it, which is what Clean OPR removes.
OPRc
higher is better · shown by defaultConstrained offensive contribution from auto + teleop scoring (non-negative).
Non-negative least squares is run once per scoring section of the game (auto, teleop, endgame, and whatever else the season breaks out), over every qualification match at the event. OPRc is the sum of a team’s section estimates.
A constrained offensive contribution: the points a team is estimated to put on the board itself. Because each section is solved separately and forced non-negative, a team can never be credited with negative scoring, and the split shows where their points come from.
Only available for seasons where FIRST publishes per-section score details. Events without them fall back to OPR.
Strength
higher is better · shown by defaultSchedule-adjusted quality: how strong this team looks accounting for who they faced.
Clean OPR + (average opponent OPR − event average OPR).
Quality adjusted for who a team actually had to beat. A team that drew the hardest schedule at the event gets credited for it; one that never faced a strong alliance gets discounted.
The adjustment is relative to this event only. It says nothing about how the event compares to any other.
OPRc Strength
higher is better · shown by defaultStrength computed from the constrained OPRc estimator.
True OPRc + (average opponent OPRc − event average OPRc).
The same schedule adjustment as Strength, but built on the constrained estimator, so penalties and negative contributions never enter it.
Needs score details, like every OPRc number.
Clean OPR
higher is better · expert columnOPR computed with penalty points removed.
The same least squares as OPR, fit against final score minus the opponent’s committed fouls instead of the raw final.
OPR with the penalty points stripped out. Use it when comparing teams across events where officiating differed.
An alliance’s own `foul` value is points it gave away to the other side — which is why the opponent’s fouls, not its own, are what get subtracted here.
CCWM
higher is better · expert columnCalculated Contribution to Winning Margin (offense minus defense allowed).
Least squares fit against score margin (own final − opponent final).
Calculated contribution to winning margin: offense and defense together. A team that scores modestly but shuts opponents down can out-CCWM a pure scorer.
In games with little defensive interaction, CCWM is mostly OPR minus noise and adds nothing.
True OPRc
higher is better · expert columnPenalty-free own-earned contribution (NNLS on auto + teleop).
A single non-negative least squares fit against the penalty-free total (the sum of all scoring sections) rather than section by section.
The cleanest available read on what a team earned themselves: no penalty points, no negative values, no credit for what a partner did.
True OPRc and OPRc are fit differently, so they will not agree exactly. A large gap usually means the section fits disagree with each other — a sign of a noisy or short event.
Sched-Adj OPR
higher is better · expert columnOPR adjusted for the difficulty of the matches actually played.
OPR + (average opponent OPR − event average OPR).
OPR corrected for schedule difficulty, using gross OPR on both sides of the adjustment.
Still penalty-inclusive, since it is built on OPR rather than Clean OPR.
Reliability
higher is better · expert columnConsistency score from 0 to 1 derived from scoring variability (higher = more consistent).
1 / (1 + consistency / scale), clamped to 0–1, where scale is the event’s average Clean OPR (floored at 1).
Consistency rescaled so it can be compared across events with different scoring levels. Higher is steadier.
Undefined for a team with fewer than two qualification matches.
Partner Luck
higher is better · expert columnRecord effect attributable to alliance-partner quality.
Average partner OPR − event average OPR.
How much better or worse than average this team’s alliance partners were. Positive means the draw helped.
A rating of the schedule, not of the team. It belongs beside a record, not inside it.
Schedule Luck
higher is better · expert columnRecord effect attributable to schedule difficulty.
Event average OPR − average opponent OPR.
How much weaker than average the opponents were. Positive means an easier road.
Same caveat: this describes what the team was dealt, not how they played.
Total Luck
higher is better · expert columnCombined partner + schedule luck.
Partner luck + schedule luck.
The whole schedule effect in one number. Two teams with the same record and very different total luck did not have the same event.
Large positive or negative values are common at small events with short schedules.
Consistency
lower is better · expert columnStd. dev. of the alliance's score versus its expected total across this team's matches (lower = steadier). Reflects alliance performance, not the team in isolation.
Population standard deviation of a team’s match residuals, where each residual is the alliance’s penalty-free score minus the sum of its members’ Clean OPRs.
How far the alliance’s actual results strayed from what the model expected, match to match. Lower is steadier.
It measures the alliance, not the team alone — a team with chaotic partners looks inconsistent. A value near zero at a tiny event means the fit was degenerate, not that the team was flawless, which is why season leaderboards drop zeros.
Where to see them
Every event's Rankings tab carries the full table for that event, every team's Stats tab carries their numbers event by event, and the world rankings aggregate them into a season standing. The record book uses raw scores rather than any of these, because a record should be a thing that happened, not a thing a model estimated.