You might be wondering, “What is this 'SPR' statistic? And how can you measure a scout's accuracy (or amount of inaccuracy) if you don't have specific data points to compare against?”
Glad you asked! SPR is a metric intended for Scouting Leads and mentors to use to help monitor how well the scouts on the team are doing - who is generally being accurate, and who might be having trouble and/or could use some additional attention or assitance.
SPR is based on another metric often used in FRC analytics - OPR, or Offensive Power Rating. TBA has an excellent article on their site.
You should definitely go and at least skim that article! The TL;DR of OPR is basically,
Keeping in mind that (a) robots don't actually have a fixed number of points each scores every match, and (b) by mid-comp the data is “overdetermined”, i.e. there are more equations than unknowns… the metric is still a handy [if very fuzzy!] comparative metric. The Blue Alliance shows these metrics in their 'Insights' tab, for example see OPR ratings at 2024's Newton field at Champs.
The same process can be applied to scouts, their data & metrics, and the official results recorded by the field & FMS at competitions (and reported up to HQ and then back down through TBA to Scoutradioz).
Basically,
One significant difference between OPR and SPR: While higher OPR is better, when you're measuring amount of error introduced it's lower is better. 🙂
Just as with OPR, this is very fuzzy! It's best interpreted as a relative comparison metric. Generally we tell folks to be happy if they're in the top 50% or top quarter of the list or so.
Another consideration: Not all scouts scout the same number of matches; some scouts who are in the rotation the whole event will have many matches, while others who are only there for a short while (or who maybe only jumped in briefly to help) might have many fewer matches in the dataset. A good rule of thumb is to be wary of the SPR of any scout with (say) less than 10 matches scouted - since there are fewer equations with that scout's “error value”, the algorithm may “overfit” their data and make it excessively high (or even excessively low, even very negative!)
As a starting point, Scoutradioz uses a few built-in guidelines for creating the “matrix” of per-scouter unknowns to solve:
contributedPoints (this is also used for match predicitions)contributedPoints from each robot's scouted data and (b) the official total points of the alliance minus the points awarded from fouls from the other teamFor many FIRST FRC games, this is very straightforward and works 'out of the box'!
BUT: What do you do when a game has additional scoring elements which are not directly connected to an individual robot's actions? For example, in 2023 an alliance scored extra points at the end for how many “links” the alliance had created on the 'grid'. It was nearly impossible to track which robot completed a “link” in the heat of the match, and besides, it wasn't clear if that robot had did the whole link, or was just finishing a link, etc.
As of 2025 we've added the ability for Team Admins to customize how SPR is calculated, to help get around challenges like “links” in 2023 which were difficult or impossible to tie to a single robot.
When adding or updating the Match Form definition a Team Admin can now also customize if desired how the system will calculate SPR for their scouts. If you expand the 'twisty' below the Match Form JSON editor, you'll see the default setting like,
{
"points_per_robot_metric": "contributedPoints",
"subtract_points_from_FRC": {
"foulPoints": 1
}
}
This means,
contributedPoints metric, andfoulPoints (b) multiplied by 1
Let's say in 2023 there was a data element in the FRC schema, linkCount; and each link was worth 5 points.
Teams might still have included a “workaround” for link scoring in contributedPoints (e.g., “how many links did the alliance get?” and then dividing that by 3, i.e. each robot did 1/3rd of the work for the links) - but now they could have also created a 2nd metric, e.g. sprPoints, specifically for SPR and only capturing points from what the robots did directly (i.e. not links). In which case the SPR calculation could be customized to,
{
"points_per_robot_metric": "sprPoints",
"subtract_points_from_FRC": {
"foulPoints": 1,
"linkCount": 5
}
}
Now…
sprPoints metric (and not 'contributedPoints'), andfoulPoints multiplied by 1 and (b) the value of linkCount multiplied by 5This will yield a better overall SPR calculation, as the scouts' data will be measured purely against per-robot actions scores.