Checking all 16+ million finishes to the NRL season to see what your team needs to make finals
Only three rounds remain in the regular season, and nine teams currently sit on between 9.5 and 13 wins. Only five spots remain available with Panthers, Broncos and Warriors already locked in.
Here it is - here is the guide to the last 3 rounds.
It can be fun to try to figure these things by hand but with only 16,777,216* finishes1 to check, we might as well check all of them, right?
*Note: Sincere apologies to the hardcore draw fans; draws are not included as a possibility in this analysis
Some of you may remember me simulating matches in the past, but I haven’t been doing that this year (should be back next year). This approach is very much a brute-force one.
In each possible finish, we’ll check who:
‘make’ makes finals explicitly (without the need for differentiating by PD)
‘indefinite’ has enough wins for finals, but requires differentiation via PD
‘miss’ misses finals explicitly
One and a half hours (and ~20GB later) it finished. Let’s get into it.
So, whose finals fate is still unknown?
Here is the current ladder.2
Row │ Team Wins MatchesRemaining
─────┼──────────────────────────────────────
1 │ Broncos 17.0 2
2 │ Panthers 16.0 3
3 │ Warriors 14.0 3
4 │ Storm 13.0 3
5 │ Rabbitohs 12.0 3
6 │ Raiders 12.0 3
7 │ Sharks 12.0 3
8 │ Knights 11.5 3
9 │ Cowboys 11.0 2
10 │ Eels 11.0 2
11 │ Roosters 10.0 3
12 │ Sea Eagles 9.5 3
13 │ Dolphins 8.0 3
14 │ Titans 8.0 3
15 │ Bulldogs 7.0 3
16 │ Dragons 5.0 3
17 │ Wests Tigers 3.0 3
Thus, any team that is able to reach at least 11.5 wins (8th place’s current record) is able to reach the finals. This rules out The/Dolphins (use your preferred naming convention here) and everyone below them.
Similarly, all teams that are unable to be taken over by a team 9th or lower has qualified for finals. (Broncos, Panthers and Warriors)
This leaves 9 of the 17 teams not currently sure whether they’ll make or miss the finals. Below, I’ll go through each one.
Team-by-team analysis
Sea Eagles (9.5 wins)
First thing to note is Manly earn exactly 12.5 wins, on average when they do make the finals. Given they’re on 9.5 at the moment, they’ll need to win all three of their remaining matches. However, this 12.5 wins won’t be any guarantee - the ‘indefinite’ result sees Manly earn 12.494 wins on average, and should see them eliminated due to PD.
But let’s stay positive. What else do they need to make it?
The numbers on the left indicate the difference between the average required win % (in the middle) and the actual estimated win % (on the right). If the difference is 0, that game is deemed to not at all affect Manly’s quest for finals. Otherwise, Manly fans should likely prefer a particular result; if more than 0 - the first team listed. If less, the second.
Let’s look at what Manly ‘need’ to miss finals.
Not much. The low probability differences indicate that the ‘miss’ results generally match up quite well with the average expected results; nothing special has to happen for Manly to miss finals. And I know, I probably didn’t need to write a program to tell you that, but let’s hope you can appreciate the process. It makes sense too, given above we saw Manly missing finals explicitly occurs 95% of the time.
Roosters (10 wins)
While the average_wins
column indicates there are some cases where Roosters make it without 13 wins, they’ll probably need 13 if they’re any chance of explicitly making the 8.
Interestingly, only one completely must-win match v Eels this week. And several games for Roosters fans to watch attentively. The most important of which is tonight, where two teams that could potentially take a lower-top-8 spot play.
Much like Manly, the ‘indefinite’ case, doesn’t look good for the Roosters, with their PD the 2nd lowest of any of the 9 teams in doubt for finals.
Eels (11 wins)
With Parramatta only having 2 matches remaining, we have another team pushing for 13 wins alongside the Roosters.
And so, Eels v Roosters this weekend effectively eliminates the loser from finals contention. Unlike Manly and the Roosters, Eels could potentially qualify for finals via Points Difference. In fact, it’s 4 times more likely that Eels achieve an ‘indefinite’ result, than an explicit finals berth. Here’s the match breakdown for Eels achieving ‘indefinite’:
Cowboys (11 wins)
Wow. All three results are really closely contested, all being close to 1/3. Let’s see the ‘make’ breakdown:
The value that stuck out for me the most was Cowboys losing to Panthers in the majority of cases, which should be an encouraging sign for Cowboys fans.
Knights (11.5 wins)
For the first time, there’s over 1 win between the average wins for the ‘make’ and ‘indefinite’ cases. And the Knights’ drawn match has come into play, being much less likely to have an ‘indefinite’ result because of it. For those curious, here’s what the ‘indefinite’ match breakdown looks like for the Knights:
Pretty much: have Sea Eagles win, and Knights lose. That’s undoubtedly the simplest way the Knights can be tied for wins at the end of the regular season.
Back to regular programming now though - here’s the match breakdown for Knights making finals explicitly.
The Knights’ fate is very much in their own hands, not needing to necessarily even win every match to qualify. Their job will be made even easier with Sharks winning tonight v Cowboys, Bulldogs beating Raiders and Dolphins beating Cowboys to name a few.
Sharks (12 wins)
Do note the 12.0097 average wins when missing finals explicitly. They’re on 12 wins now… Let’s check that out further.
Cool. So, Sharks winning against Cowboys or Knights or (most of the time) Raiders guarantees them an 'indefinite’ result at worst.
No must-wins for the Sharks though still some details of note here. Cowboys and Raiders look to be Sharks main enemies in their campaign for finals. Meanwhile, Rabbitohs, Roosters and Eels are their frenemies? All of these teams winning and losing specific matches helps the Sharks…
Raiders (12 wins)
Scare a Raiders fan today by telling them there are 1.153 million ways they can miss finals without even having to look at Points Difference. The good news is that that’s only 10%. But more bad news: Raiders likely won’t be able to rely on their PD as a tiebreaker, so make it a 34% chance of missing finals…
Need some hope to give to your Raiders-supporting friend after you told them the news above? Give them this: the breakdown for Raiders explicitly making finals.
Ok. 2/3 wins will be enough for finals. One can work too, but not always.
Rabbitohs (12 wins)
South Sydney have two games remaining. Like the Raiders, winning two guarantees a finals berth, while one leaves open all three possible results. Let’s first look at the indefinite case:
This is fascinating. Lots of results you simply wouldn’t expect to help this happen.
As usual, here’s the breakdown for ‘make’ case:
Storm (13 wins)
Storm are the only team here that can’t explicitly miss the finals. This only makes the ‘indefinite’ case breakdown more intriguing.
Woah! It’d be a truly incredible ending (for non-Storm fans, of course) if some of these results came off!
The ‘make’ breakdown, however, is pretty much as boring as you’d expect:
Finishing thoughts
Thank you very much for reading! Obviously, I didn’t show the output for every team/outcome - let me know if you’d like to see a specific one!
It’s been mostly a positive experience with this project, and really interesting seeing and experimenting with finals qualification in a different way.
The code used for this project can be found on GitHub. I’d consider putting more of the code in the actual article in future analyses if people were interested.
I’d love to hear your thoughts on my work too - feel free to leave a comment/question/suggestion here or on X and share it around if you wish.
^(binary) finishes; each game only is to considered to have 2 possible outcomes
No bye points, no worries… right?
It's awesome that you've tackled this because it's been rattling around in my head for a while as a project to do... and now it's done for me 😂 Brilliant stuff, mate.
Keen to see an update with just two rounds remaining. Or if you shared the code I could do it myself 😀