The secrets of SuperCoach AFL scoring
I’ve always been intrigued by the AFL SuperCoach game. Players’ scores are determined by a variety of playing statistics for each game, but we don’t really have any idea what is included. Effective disposals? Uncontested intercept marks? Gathers from hitouts? There are so many statistical categories that some coaches think it is magic! There is also match scaling to ensure each match totals to approximately 3300 points.
Unlocking the secrets behind how SuperCoach is scored will give better insights to the community and help with player selection. Explaining the scoring will help answer how certain players achieve high averages, what stats are important to be good at, and who gets the biggest bonuses.
This is my first blog post so make sure you share if you enjoy! Let’s try and reverse engineer SuperCoach scores!
What we know about scoring
From the SuperCoach T&C’s in 2023 (which match previous years), we have the following scoring breakdown:
Stat | Awarded/Deducted |
---|---|
Effective kick | 4 Points |
Ineffective kick | 0 Points |
Clanger kick | -4 Points |
Effective Handball | 1.5 Points |
Ineffective handball | 0 Points |
Clanger handball | -4 Points |
Handball receive | 1.5 Points |
Hardball get | 4.5 Points |
Loose-ball get | 4.5 Points |
Goal | 8 Points |
Behind | 1 Point |
Mark uncontested (maintaining possession) | 2 Points |
Mark contested (maintaining possession) | 6 Points |
Mark uncontested (from opposition) | 4 Points |
Mark contested (from opposition) | 8 Points |
Tackle | 4 Points |
Free kick for | 4 Points |
Free kick against | -4 Points |
Hitout to Advantage | 5 Points |
Gather from hitout | 2 Points |
This is a good start but there are three main problems - where the analysis of scoring breaks down:
- These stats are too complex and can’t be viewed on the AFL website.
- This isn’t a comprehensive list of all stats used.
- We haven’t accounted for scaling. I’ll attempt to address these points while tracking how close we are to solving the formula.
1. Using the AFL website stats
Let’s start with the default stats available on the AFL website. Of the SuperCoach score categories we can see:
- Effective kicks
- Effective handballs (Effective Disposals - Effective Kicks)
- Clangers
- Hard/loose ball gets (Contested Possessions - Contested Marks - Frees For)
- Goals
- Behinds
- Contested marks
- Uncontested marks (Marks - Contested marks)
- Tackles
- Free Kicks
Here is an example of these stats exclusively, via the My Stats
option on the AFL website.
Calculating scores using these stats and their respective point values we achieve this:
%>%
sc_stats rowwise() %>%
mutate(SC_Prediction = sum(
4 * effective_kicks,
-4 * clangers,
1.5 * (effective_handballs), # effective handballs
4.5 * (contested_possessions - contested_marks - frees_for), # loose/hard ball gets
2 * (marks-contested_marks), # uncontested marks
6 * contested_marks,
4 * tackles,
4 * frees_for,
-4 * frees_against,
5 * hitouts_adv # hitouts to advantage
%>%
)) ungroup() %>%
model_plot(SC_Prediction, Score, "SuperCoach prediction", "SuperCoach score estimation using AFL website stats")
I’ve introduced two metrics here to measure how accurate our predictions are.
- R-squared, which measures how much variation in the actual scores can be explained by our predictions.
- MAE, mean absolute error, which is the average difference between our predictions and the actual scores.
While an r-squared value of 83.1% might seem really good, it tells us that only 83% of variation in SC scores can be explained using the initial model. The MAE tells us that our predictions are 11.61 points off on average. Not very useful yet! It appears that middle scores are being underestimated and most huge scores are being overestimated. We need some more stat categories
2. Using advanced stats
We are missing quite a few stats that aren’t directly accessible on the AFL website. I’ve found some stats via a variety of sources, while other stats can be directly calculated using others. Most importantly we can fill out the full list of stats available in the T&Cs! Let’s take a look at what stats we have now:
## tibble [18,216 × 25] (S3: tbl_df/tbl/data.frame)
## $ season : int [1:18216] 2022 2021 2022 2022 2021 2021 2021 2021 2022 2022 ...
## $ round : int [1:18216] 6 10 2 12 16 18 16 20 2 16 ...
## $ player : chr [1:18216] "Callum Mills" "Clayton Oliver" "Lachie Neale" "Max Gawn" ...
## $ team : chr [1:18216] "Sydney Swans" "Melbourne" "Brisbane Lions" "Melbourne" ...
## $ effective_kicks : int [1:18216] 21 11 16 12 4 19 14 12 18 11 ...
## $ ineffective_kicks : int [1:18216] 1 7 6 4 6 4 5 4 7 5 ...
## $ clanger_kicks : int [1:18216] 1 2 2 2 1 0 4 1 1 0 ...
## $ effective_handballs : int [1:18216] 13 17 15 9 7 12 18 18 11 13 ...
## $ ineffective_handballs : int [1:18216] 0 1 1 1 2 4 2 3 3 3 ...
## $ clanger_handballs : int [1:18216] 1 0 1 0 0 0 0 1 0 1 ...
## $ handball_receives : int [1:18216] 12 9 12 3 1 13 9 15 14 8 ...
## $ hard_ball_gets : int [1:18216] 2 7 0 5 8 5 7 2 4 13 ...
## $ loose_ball_gets : int [1:18216] 6 12 18 7 2 7 15 7 4 4 ...
## $ goals : int [1:18216] 1 3 2 3 1 1 1 0 1 3 ...
## $ behinds : int [1:18216] 0 1 2 1 1 1 0 0 2 1 ...
## $ uncontested_marks : int [1:18216] 9 0 3 3 5 7 4 5 10 4 ...
## $ uncontested_intercept_marks: int [1:18216] 0 0 0 1 1 1 1 1 1 0 ...
## $ contested_marks : int [1:18216] 2 1 3 6 3 2 1 0 0 1 ...
## $ contested_intercept_marks : int [1:18216] 2 0 3 0 1 0 1 0 0 0 ...
## $ tackles : int [1:18216] 5 9 2 0 0 5 3 12 8 6 ...
## $ frees_for : int [1:18216] 6 4 2 5 0 0 1 1 5 1 ...
## $ frees_against : int [1:18216] 0 1 1 2 2 0 0 1 0 0 ...
## $ hitouts_to_advantage : int [1:18216] 0 0 0 11 22 0 0 0 0 0 ...
## $ gathers_from_hitout : int [1:18216] 1 5 0 0 0 1 4 5 0 1 ...
## $ sc_score : int [1:18216] 214 204 198 198 193 193 190 190 189 189 ...
The most exciting thing about this dataset is that we can see where players score their points and how well they do before their score is scaled. If we calculate all the scores based on these new stats we achieve a better fit:
We are almost at 90% of variation explained and the MAE dropped
slightly. Still not perfect, but we are making progress! We still
haven’t addressed the higher scores being overestimated Scaling should
hopefully help with this by bringing them back to standard.
3. Scaling the scores via the 3300 rule
If you weren’t aware, SuperCoach AFL has a set value for total points in a game. Based on the predictions from before, the estimated number of games that hit this value is 93.7%, with the game average at 3582. If this is close to correct, then scaling our predictions will help a lot.
I’ll be scaling each score linearly to 3300, as it’s the best way I could do it. I’ve heard that stats are scaled quarterly but that also goes against the whole ‘every game is equal’ argument. Teams could only win one quarter and still get 4 premiership points.
Let’s see how the scaling affects our scores:
Awesome! The MAE is now single digits and R-squared went above 90%, which isn’t bad at all. So on average, the estimations are 8.27 points different to the actual scores. Let’s see who has the biggest differences:
Most overestimated players | |||||
Home & Away matches from 2021-2022 | |||||
Player | Games | 2YR SC Average | 2YR Estimation | Diff | |
---|---|---|---|---|---|
Jarrod Witts | 25 | 107.2 | 122.0 | 14.8 | |
Lachie Neale | 37 | 113.5 | 127.8 | 14.3 | |
Max Gawn | 42 | 117.1 | 131.3 | 14.2 | |
Reilly O'Brien | 40 | 98.7 | 112.9 | 14.1 | |
Rory Laird | 42 | 121.8 | 135.0 | 13.2 | |
Braydon Preuss | 10 | 91.9 | 104.9 | 13.0 | |
Nic Naitanui | 30 | 110.6 | 122.9 | 12.3 |
Seems like the Rucks are being overestimated the most. There must be some extra stats in the ruck department (sharked hitouts would be one) that bring down ruck scores.
Most underestimated players | |||||
Home & Away matches from 2021-2022 | |||||
Player | Games | 2YR SC Average | 2YR Estimation | Diff | |
---|---|---|---|---|---|
Dougal Howard | 38 | 74.4 | 58.3 | 16.1 | |
Darcy Moore | 34 | 85.4 | 69.8 | 15.5 | |
Ryan Gardner | 27 | 56.6 | 41.2 | 15.4 | |
Tom Hawkins | 44 | 94.1 | 79.2 | 14.9 | |
Lewis Young | 26 | 75.0 | 62.0 | 13.0 | |
Harris Andrews | 42 | 87.4 | 74.5 | 12.9 | |
Jack Riewoldt | 42 | 70.1 | 57.6 | 12.5 |
The key position players are being underestimated by the estimations. Dougal Howard and the other KPDs are elite in spoils so it is likely that they should be in there. Hawkins and Riewoldt stick out to me as players with a lot of score involvements/assists in high scoring teams.
So where to next?
It is hard to add anything else in with direct certainty. Each year a SC scoring system article is posted, with slight inconsistencies to the T&Cs:
“There are more than 50 statistical categories that count towards every player’s score. … long kicks are worth more than short kicks … a sharked hitout is valued at -1. And you really don’t want any of your players giving away a 50m penalty – that’s a whopping 8.5 points off a player’s total.”
Fortunately, last week Rainman posted some tweets based on SuperCoach score values that originated from a Fantasy Freako tweet in 2018. Thanks Rainman!
There are now more stats that I had with a definitive value:
- Score assists: 3 points
- Mark on lead: 5 points
- Gathers: 1.5 points
- Spoil: 2 points
Redoing all the data, I found that these stats helped to improve
accuracy of score estimates!
The MAE has dropped below 8 points and the R-squared remains above 90. I’ll have to leave it there with what I currently have the resources for, and I’m happy with the end result. Unless anyone can give me a definitive value for long kicks…
View all the scores for yourself!
I’ve created a small app for you to view each match score, player averages and score breakdowns. There are options to filter by player, by team, and check out all the stats from 2021 & 2022. View stat categories as averages, counts, as SC point value, or percentage of SC points. Enjoy!
SUPERCOACH SCORE BREAKDOWNS APP
If you’d prefer a set of spreadsheets, perhaps you would prefer to download the data yourself to use in Excel or Google Sheets! Containing all the same stats, you can view every player, score and stat across the multiple tabs.
SUPERCOACH SCORE BREAKDOWNS Spreadsheet
Browse the scores via the link, or create a copy (Gsheets)/download (Excel) to sort and filter through the data yourself!
Having any issues with the app? I’d recommend trying out the spreadsheets as they contain all the same data, but just without the easy filtering options.
If you have made good use of these resources, consider supporting me on Kofi! Buy me a coffee to help me continue in posting more content like this.