Chart Size
Year
Squiggle

INFO

What Squiggles areHow to play through a seasonPredictionFAQThe ModelFlagpole

What Squiggles are

Squiggles are visualizations of AFL team performances, charting attack and defence over the course of a season.

Teams ⇡ high on the chart kick big scores. Teams on the ⇢ right keep their opposition to low scores. Teams in the ↗ upper-right do both. Teams in the ↙ lower-left do neither.

Squiggles are handy because:

Squiggle is roughly as accurate as tipping the favourite every game. (Which is hard to beat!) Over a season, an informed, observant human should be able to beat it, but not by much. It will beat an average human tipper. You can review its accuracy by visiting the TIPS section of any year.

How to play through a season

To watch the evolution of a past season, use the top controls:

Rewind to the start of the season

Previous Round

Next Round

Reload

You can also:

For example, you might like to rewind, click Hawthorn's flag to remove all other teams, click Geelong's name in the legend to add it back in, then repeatedly step through the season to watch their dance of death.

To zoom in on an area, drag a box around it.

Prediction

Weekly Tips

Click TIPS at the top of the page. If a team beats the tipped scoreline—i.e. wins by more than predicted, loses by less than predicted, or records an upset win—it will generally move in a positive direction on the chart (i.e. more up-and-right than down-and-left), while if its result is worse, it will generally move in a negative direction.

You can view tips for previous rounds via the "History" link on the Tips page.

Season Predictor

This is how the ladder will look if Squiggle has correctly rated every team and nobody gets better or worse.

For the home & away season, it uses a probabilistic ladder, not a simple tally of tips. Both teams are awarded a win probability from each game, so that if Squiggle thinks Hawthorn is 68% likely to beat Collingwood, it will award the Hawks 0.68 wins and the Pies 0.32 wins, increasing both team's tally of "probable wins" by less than 1.

This is because if a team plays 10 games with 60% likelihood of winning each game, we should expect them to win about 6/10—not, as we would get if we tipped each game and tallied up the tips, 10/10. We know that upsets will happen; we just don't know when. A probabilitistic ladder accounts for the likelihood that teams will sometimes unexpectedly win or lose, even though we doesn't know when.

This can look like a bug in the predictor, if you see a team tipped to win a match that doesn't seem to be credited. For example, a team might be on "15 (14.7)" wins, which means 14.7 "probable wins" rounded off to 15. (Rounding occurs so that teams can be secondarily ranked by their percentage.) And then that team is tipped to win the following week, but it remains on 15 wins, now "15 (15.3)". What has happened is the number of probable wins hasn't risen by enough to be rounded to a higher number. It has earned 0.6 more probable wins, but this still rounds off to 15. The predictor is saying it's still most likely this team will be on 15 wins, after accounting for the likelihood that some of its tips will be wrong.

Finals matches are predicted using simple tips. However, this isn't a very reliable way of doing it, and not Squiggle's official Premier tip. For this, please see Flagpole.

Starting the season: Team starting positions are heavily influenced by their late-season performances the previous year, and the off-season is completely ignored. There is no adjustment made for recovery from injuries, or players gained or lost via the draft or trade table, or anything else. For example, Collingwood started 2015 rated very low due to their injury-plagued end to 2014, while Adelaide and West Coast started in good positions after solid late-2014 performances.

Interactive Season Predictor

Drag teams around the chart and make Squiggle predict the rest of the season based on the new positions! It's the best of both worlds: your footy insight plus Squiggle's ability to sensibly model a season.

Reposition teams to your heart's content, open up the Predictor and click RECALCULATE.

This also provides a shareable link to the generated squiggle, so you can show off your work to other people.

FAQ

What causes a team to move?

Teams move when they do better or worse than Squiggle expected.

The most important factor is the final scoreline. When a team scores more than Squiggle expected, they move up; when they score less, they move move down; when they hold their opposition to a lower score, they move ; right; and when they allow their opposition to score more, they move left.

Of course, usually two of these things happen at once, so they move on a diagonal:

Scored more than predicted, held opponent to less than predicted

Scored less than predicted, held opponent to less than predicted

Scored less than predicted, opponent scored more than predicted

Scored more than predicted, opponent scored more than predicted

How far a team moves depends on how different the result was from Squiggle's prediction. If the result was close to expectation, a team may barely budge. But an unexpected thrashing will cause a lot of movement.

Do teams get more movement against easy opposition?

No, because Squiggle expects better performances against weaker opponents, and to move to a better position, the team has to beat this expectation.

For the same reason, Squiggle isn't affected by fixture bias.

Can a team lose and still move into a better squiggle position?

Yes! Squiggle believes in honourable losses and shameful victories. If a team is expected to win by 10 goals but only prevails by 5, it will slide.

What factors are considered?

A team's rating is modified after each game by looking at:

Can a team beat the tipped result and still fall back on the chart?

Yes! Two factors can cause unusual chart movement:

How is home ground advantage determined?

As described in the Model section, home ground advantage in Squiggle 2.0 is generated from ground familiarity: How often the teams have played at the same ground and in the same state over the preceding 4 years (including the current season).

What are Squiggle's weaknesses?

Some quirks of Squiggle, which you may decide to compensate for as an intelligent human, include:

Why does the model use those values?

All the numbers used by Squiggle are that way because they worked best (i.e. made the most accurate predictions) when every possible combination was tested with a simulator replaying the last few decades.

How are the year's starting values calculated?

2015 starting positions are very similar to their end 2014 positions—the only difference is that 2013 data is no longer considered, so teams are modeled from the start of 2014 with each beginning on 50 ATTACK and 50 DEFENCE.

This means late-season 2014 results weigh quite heavily. For example, Collingwood had an injury-plagued end to 2014, and so is rated very low. Adelaide and West Coast, by contrast, finished the year with several solid performances, and so begin the year higher than you might expect.

What's with those crazy charts for the 1900s!?

Football scores were a lot lower a century ago, especially in the very early years, when single-digit scorelines abounded. Squiggle is calibrated for modern football, and thinks a game in which one team is held to a single goal (or no goals!) signifies an unbelievably good defensive effort. This causes teams to go shooting off to the right quite often in charts from the 1890s, 1900s and 1910s. So it's not a particularly good visualization of the strength of any particular team in that era. But it is interesting in terms of how different the whole league looks: how low and flat it is compared to today.

Similary, it can be interesting to look at where the mass of teams tends to sit in different decades; for example, how attacking the late 1980s was, with plenty of teams sitting high & centre/left compared to today.

The Model

The foundation of the Squiggle model is the OFFDEF engine, which rates teams separately in terms of attack and defense. Each team is initially assigned a starting value of 50 for each.

Scores are predicted for each match using the formula:

PREDICTED SCORE = 85 * TEAM ATTACK ÷ OPPOSITION DEFENCE

For example, in a match between a team with ATTACK 56 and an opposition with DEFENCE 50, the team is predicted to score: 85 * 56 ÷ 50 = 95 points.

Predicted scores are compared to the actual scores, and ATTACK and DEFENCE adjusted accordingly. For example, if a team scored more highly than predicted, its ATTACK score needs to be increased, since Squiggle underrated it. Likewise, the opposition's DEFENCE score should decrease, since they failed to restrict the team as well as predicted. This is done by calculating what these scores would have to have been to predict the result perfectly, then constructing a weighted average of this along with all other results.

At the start of a season, team starting points are calculated by doing the above for the previous season. For example, to calculate starting points for 2014, each team is assigned 50 to ATTACK and DEFENCE, then the 2013 season is played through.

The units are completely arbitrary, and entirely due to the choice of 50 as a starting value for each team's ATTACK and DEFENCE. They have no meaning except when comparing teams to each other.

Several other filters and algorithms are used to manipulate scores produced by the OFFDEF engine, including venue (for home ground advantage), round number, team selections, and scoring shots.

Home Ground Advantage

Teams are compared based on the number of times they've played at the venue and in the same state.

Tip Probability

When determining "probable wins" in the Season Predictor, an algorithm is used that reflects the actual accuracy of Squiggle tips vs real-life results. Three factors affect the likelihood of a tip being correct:

Model Versions

Squiggle v1 used the algorithm ISTATE-91:12, in which 12 points of Home Ground Advantage is awarded to the home team in interstate games only, and each new game forms 9% of the team's new rating (with previous games forming 91%). Follow this link for Squiggles generated under the v1 algorithm.

Squiggle 2.0 made several changes in 2018:

Squiggle4 added Ins/Out awareness in mid-2018, so it can adjust predictions based on team selection.

Squiggle5 moved to a more crowd-based model of home ground advantage in 2020.

To compare Squiggle's performance to other computer models, see the Squiggle Models Leaderboard.

Flagpole

Flagpole is currently a combined strength rating of each team, downgraded by its likelihood of missing finals.

For example, if two teams are currently have the same combined OFFENCE and DEFENCE, but one is certain of making finals while the other has a 25% chance of missing, the latter's will Flagpole will be 75% of the height of the former.

Tower of Power shows how likely teams are (or were) to finish the Home & Away season in various ladder positions, according to squiggle simulations.

At the start of a season, with many games remaining and uncertainty about the strength of each team, there are long strips, as teams could plausibly finish in many different places. Later, they flatten out, as the range of likely finishes shrinks.

Use the top player controls to watch changes throughout a season:

Some creative license is taken for the purposes of visual appeal, which is why final ladder positions appear somewhat diagonal.

* If the round number is marked with an asterisk, the Tower is generated from fewer simulations in order to provide a faster result.

FINALS CHANCES

Minor PremierTop 4Top 8Bottom 4Spoon

MODE LADDER

LikelihoodIf not, then...

A Mode Ladder may be useful in the last round or two of a season, since it focuses on the most likely exact finishing position for teams, rather than averaging a range of possibilities. For example, after Round 22, 2017 with one round to go, Richmond were highly likely to finish either 3rd or 6th. Normally this would be averaged out to a prediction of about 4th -- even though the Tigers couldn't possibly finish there. The Mode Ladder avoids this problem.

A Mode Ladder is less useful than other forecasting methods until very late in the season, since until then there are too many possible final ladder combinations.

In 1899, algorithm SQUIGGLE5 correctly tipped 51 games at an accuracy of 73.91%.

Draws are counted as correct tips. Historically, Squiggle employed the ISTATE-91:12 algorithm from 2013-2017, the SQUIGGLE2 algorithm for the first 12 rounds of 2018, and SQUIGGLE4 thereafter. To view historical tips from Squiggle (and other models) irrespective of the algorithm, see the Squiggle API or the models leaderboard.

Round 1


Sydney (73) defeated Carlton (18) at Lake Oval (VIC) [Sydney by 55) Sydney by 19
Geelong (54) defeated Collingwood (27) at Corio Oval (VIC) [Geelong by 27) Collingwood by 4
Fitzroy (47) defeated Essendon (9) at Brunswick St (VIC) [Fitzroy by 38) Fitzroy by 9
Melbourne (116) defeated St Kilda (23) at M.C.G. (VIC) [Melbourne by 93) Melbourne by 38

Round 2


Carlton (11) lost to Geelong (36) at Princes Park (VIC) [Geelong by 25) Geelong by 54
Collingwood (27) lost to Melbourne (54) at Victoria Park (VIC) [Melbourne by 27) Collingwood by 17
St Kilda (20) lost to Essendon (66) at Junction Oval (VIC) [Essendon by 46) Essendon by 70
Sydney (38) lost to Fitzroy (42) at Lake Oval (VIC) [Fitzroy by 4) Fitzroy by 29

Round 3


Collingwood (87) defeated St Kilda (18) at Victoria Park (VIC) [Collingwood by 69) Collingwood by 64
Carlton (19) lost to Melbourne (45) at Princes Park (VIC) [Melbourne by 26) Melbourne by 37
Essendon (15) defeated Sydney (9) at East Melbourne (VIC) [Essendon by 6) Essendon by 11
Geelong (8) lost to Fitzroy (32) at Corio Oval (VIC) [Fitzroy by 24) Fitzroy by 7

Round 4


Essendon (48) defeated Carlton (9) at East Melbourne (VIC) [Essendon by 39) Essendon by 34
Sydney (22) lost to Collingwood (29) at Lake Oval (VIC) [Collingwood by 7) Collingwood by 2
Fitzroy (56) defeated St Kilda (33) at Brunswick St (VIC) [Fitzroy by 23) Fitzroy by 83
Melbourne (32) defeated Geelong (27) at M.C.G. (VIC) [Melbourne by 5) Melbourne by 1

Round 5


Carlton (21) lost to Collingwood (52) at Princes Park (VIC) [Collingwood by 31) Collingwood by 33
Geelong (28) defeated Essendon (24) at Corio Oval (VIC) [Geelong by 4) Essendon by 1
Melbourne (35) defeated Fitzroy (24) at M.C.G. (VIC) [Melbourne by 11) Fitzroy by 5
St Kilda (33) lost to Sydney (70) at Junction Oval (VIC) [Sydney by 37) Sydney by 45

Round 6


St Kilda (29) lost to Carlton (31) at Junction Oval (VIC) [Carlton by 2) Carlton by 2
Collingwood (13) lost to Fitzroy (35) at Victoria Park (VIC) [Fitzroy by 22) Fitzroy by 7
Essendon (30) defeated Melbourne (16) at East Melbourne (VIC) [Essendon by 14) Melbourne by 4
Sydney (35) defeated Geelong (19) at Lake Oval (VIC) [Sydney by 16) Geelong by 11

Round 7


Fitzroy (45) defeated Carlton (13) at Brunswick St (VIC) [Fitzroy by 32) Fitzroy by 41
Collingwood (48) defeated Essendon (28) at Victoria Park (VIC) [Collingwood by 20) Essendon by 1
St Kilda (31) lost to Geelong (78) at Junction Oval (VIC) [Geelong by 47) Geelong by 49
Melbourne (50) defeated Sydney (43) at M.C.G. (VIC) [Melbourne by 7) Melbourne by 11

Round 8


Carlton (24) defeated Sydney (5) at Princes Park (VIC) [Carlton by 19) Sydney by 29
Collingwood (20) lost to Geelong (61) at Victoria Park (VIC) [Geelong by 41) Collingwood by 7
Essendon (51) lost to Fitzroy (63) at East Melbourne (VIC) [Fitzroy by 12) Fitzroy by 6
St Kilda (20) lost to Melbourne (37) at Junction Oval (VIC) [Melbourne by 17) Melbourne by 62

Round 9


Geelong (63) defeated Carlton (33) at Corio Oval (VIC) [Geelong by 30) Geelong by 24
Melbourne (13) lost to Collingwood (21) at M.C.G. (VIC) [Collingwood by 8) Melbourne by 5
Essendon (85) defeated St Kilda (6) at East Melbourne (VIC) [Essendon by 79) Essendon by 49
Fitzroy (62) defeated Sydney (29) at Brunswick St (VIC) [Fitzroy by 33) Fitzroy by 15

Round 10


Melbourne (54) defeated Carlton (22) at M.C.G. (VIC) [Melbourne by 32) Melbourne by 27
St Kilda (11) lost to Collingwood (94) at Junction Oval (VIC) [Collingwood by 83) Collingwood by 44
Sydney (35) lost to Essendon (51) at Lake Oval (VIC) [Essendon by 16) Essendon by 19
Fitzroy (23) lost to Geelong (58) at Brunswick St (VIC) [Geelong by 35) Fitzroy by 10

Round 11


Carlton (26) lost to Essendon (57) at Princes Park (VIC) [Essendon by 31) Essendon by 33
Collingwood (39) defeated Sydney (36) at Victoria Park (VIC) [Collingwood by 3) Collingwood by 11
St Kilda (30) lost to Fitzroy (84) at Junction Oval (VIC) [Fitzroy by 54) Fitzroy by 56
Geelong (36) defeated Melbourne (22) at Corio Oval (VIC) [Geelong by 14) Geelong by 2

Round 12


Collingwood (43) defeated Carlton (27) at Victoria Park (VIC) [Collingwood by 16) Collingwood by 25
Essendon (67) defeated Geelong (43) at East Melbourne (VIC) [Essendon by 24) Essendon by 10
Fitzroy (41) defeated Melbourne (33) at Brunswick St (VIC) [Fitzroy by 8) Fitzroy by 2
Sydney (57) defeated St Kilda (24) at Lake Oval (VIC) [Sydney by 33) Sydney by 44

Round 13


Carlton (47) defeated St Kilda (8) at Princes Park (VIC) [Carlton by 39) Carlton by 18
Fitzroy (25) lost to Collingwood (37) at Brunswick St (VIC) [Collingwood by 12) Fitzroy by 3
Melbourne (25) lost to Essendon (38) at M.C.G. (VIC) [Essendon by 13) Essendon by 9
Geelong (54) defeated Sydney (27) at Corio Oval (VIC) [Geelong by 27) Geelong by 15

Round 14


Carlton (16) lost to Fitzroy (39) at Princes Park (VIC) [Fitzroy by 23) Fitzroy by 17
Essendon (31) lost to Collingwood (53) at East Melbourne (VIC) [Collingwood by 22) Essendon by 11
Geelong (119) defeated St Kilda (2) at Corio Oval (VIC) [Geelong by 117) Geelong by 65
Sydney (49) defeated Melbourne (42) at Lake Oval (VIC) [Sydney by 7) Melbourne by 11

Sectional Round 1


Fitzroy (41) defeated Carlton (40) at Brunswick St (VIC) [Fitzroy by 1) Fitzroy by 21
Melbourne (25) lost to Collingwood (45) at Lake Oval (VIC) [Collingwood by 20) Collingwood by 4
Essendon (120) defeated St Kilda (22) at East Melbourne (VIC) [Essendon by 98) Essendon by 72
Geelong (38) lost to Sydney (41) at Corio Oval (VIC) [Sydney by 3) Geelong by 23

Sectional Round 2


Collingwood (38) defeated Carlton (17) at Victoria Park (VIC) [Collingwood by 21) Collingwood by 23
Essendon (39) lost to Geelong (47) at East Melbourne (VIC) [Geelong by 8) Essendon by 2
Fitzroy (40) defeated Melbourne (2) at Brunswick St (VIC) [Fitzroy by 38) Fitzroy by 4
St Kilda (12) lost to Sydney (82) at Junction Oval (VIC) [Sydney by 70) Sydney by 53

Sectional Round 3


Carlton (41) defeated Melbourne (16) at Princes Park (VIC) [Carlton by 25) Melbourne by 12
Collingwood (31) lost to Fitzroy (45) at Victoria Park (VIC) [Fitzroy by 14) Fitzroy by 7
Sydney (28) defeated Essendon (13) at Lake Oval (VIC) [Sydney by 15) Essendon by 17
Geelong (162) defeated St Kilda (1) at Corio Oval (VIC) [Geelong by 161) Geelong by 79

Grand Final


Fitzroy (27) defeated Sydney (26) at Junction Oval (VIC) [Fitzroy by 1) Fitzroy by 9

/* heavier border */ /* lighter border */ /* much lighter border */ /* Tower of Power fills */