Robolyst Robolyst

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 default

Offensive Power Rating: estimated points a team adds to its alliance score.

How it is computed

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.

How to read it

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.

Watch out

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 default

Constrained offensive contribution from auto + teleop scoring (non-negative).

How it is computed

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.

How to read it

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.

Watch out

Only available for seasons where FIRST publishes per-section score details. Events without them fall back to OPR.

Strength

higher is better · shown by default

Schedule-adjusted quality: how strong this team looks accounting for who they faced.

How it is computed

Clean OPR + (average opponent OPR − event average OPR).

How to read it

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.

Watch out

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 default

Strength computed from the constrained OPRc estimator.

How it is computed

True OPRc + (average opponent OPRc − event average OPRc).

How to read it

The same schedule adjustment as Strength, but built on the constrained estimator, so penalties and negative contributions never enter it.

Watch out

Needs score details, like every OPRc number.

Clean OPR

higher is better · expert column

OPR computed with penalty points removed.

How it is computed

The same least squares as OPR, fit against final score minus the opponent’s committed fouls instead of the raw final.

How to read it

OPR with the penalty points stripped out. Use it when comparing teams across events where officiating differed.

Watch out

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 column

Calculated Contribution to Winning Margin (offense minus defense allowed).

How it is computed

Least squares fit against score margin (own final − opponent final).

How to read it

Calculated contribution to winning margin: offense and defense together. A team that scores modestly but shuts opponents down can out-CCWM a pure scorer.

Watch out

In games with little defensive interaction, CCWM is mostly OPR minus noise and adds nothing.

True OPRc

higher is better · expert column

Penalty-free own-earned contribution (NNLS on auto + teleop).

How it is computed

A single non-negative least squares fit against the penalty-free total (the sum of all scoring sections) rather than section by section.

How to read it

The cleanest available read on what a team earned themselves: no penalty points, no negative values, no credit for what a partner did.

Watch out

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 column

OPR adjusted for the difficulty of the matches actually played.

How it is computed

OPR + (average opponent OPR − event average OPR).

How to read it

OPR corrected for schedule difficulty, using gross OPR on both sides of the adjustment.

Watch out

Still penalty-inclusive, since it is built on OPR rather than Clean OPR.

Reliability

higher is better · expert column

Consistency score from 0 to 1 derived from scoring variability (higher = more consistent).

How it is computed

1 / (1 + consistency / scale), clamped to 0–1, where scale is the event’s average Clean OPR (floored at 1).

How to read it

Consistency rescaled so it can be compared across events with different scoring levels. Higher is steadier.

Watch out

Undefined for a team with fewer than two qualification matches.

Partner Luck

higher is better · expert column

Record effect attributable to alliance-partner quality.

How it is computed

Average partner OPR − event average OPR.

How to read it

How much better or worse than average this team’s alliance partners were. Positive means the draw helped.

Watch out

A rating of the schedule, not of the team. It belongs beside a record, not inside it.

Schedule Luck

higher is better · expert column

Record effect attributable to schedule difficulty.

How it is computed

Event average OPR − average opponent OPR.

How to read it

How much weaker than average the opponents were. Positive means an easier road.

Watch out

Same caveat: this describes what the team was dealt, not how they played.

Total Luck

higher is better · expert column

Combined partner + schedule luck.

How it is computed

Partner luck + schedule luck.

How to read it

The whole schedule effect in one number. Two teams with the same record and very different total luck did not have the same event.

Watch out

Large positive or negative values are common at small events with short schedules.

Consistency

lower is better · expert column

Std. 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.

How it is computed

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 to read it

How far the alliance’s actual results strayed from what the model expected, match to match. Lower is steadier.

Watch out

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.