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 1953, algorithm SQUIGGLE5 correctly tipped 76 games at an accuracy of 67.86%.

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


Carlton (60) lost to Western Bulldogs (65) at Princes Park (VIC) [Western Bulldogs by 5) Carlton by 22
Collingwood (118) defeated Sydney (77) at Victoria Park (VIC) [Collingwood by 41) Collingwood by 17
Essendon (111) defeated Fitzroy (88) at Windy Hill (VIC) [Essendon by 23) Essendon by 1
Geelong (87) defeated Hawthorn (38) at Kardinia Park (Gee) [Geelong by 49) Geelong by 51
Richmond (73) defeated Melbourne (67) at Punt Rd (VIC) [Richmond by 6) Melbourne by 6
St Kilda (57) lost to North Melbourne (105) at Junction Oval (VIC) [North Melbourne by 48) North Melbourne by 12

Round 2


Melbourne (59) lost to Carlton (90) at M.C.G. (VIC) [Carlton by 31) Carlton by 6
North Melbourne (118) defeated Collingwood (75) at Arden St (VIC) [North Melbourne by 43) Collingwood by 13
Sydney (99) defeated Essendon (89) at Lake Oval (VIC) [Sydney by 10) Essendon by 3
Fitzroy (81) defeated Richmond (80) at Brunswick St (VIC) [Fitzroy by 1) Fitzroy by 9
Western Bulldogs (61) lost to Geelong (102) at Western Oval (VIC) [Geelong by 41) Geelong by 24
Hawthorn (57) lost to St Kilda (92) at Glenferrie Oval (VIC) [St Kilda by 35) Hawthorn by 6

Round 3


Richmond (98) lost to Carlton (104) at Punt Rd (VIC) [Carlton by 6) Carlton by 14
Collingwood (73) lost to Geelong (98) at Victoria Park (VIC) [Geelong by 25) Geelong by 7
Essendon (122) defeated St Kilda (58) at Windy Hill (VIC) [Essendon by 64) Essendon by 20
Sydney (75) lost to Fitzroy (86) at Lake Oval (VIC) [Fitzroy by 11) Sydney by 5
Western Bulldogs (111) defeated Hawthorn (42) at Western Oval (VIC) [Western Bulldogs by 69) Western Bulldogs by 19
North Melbourne (84) defeated Melbourne (83) at Arden St (VIC) [North Melbourne by 1) North Melbourne by 16

Round 4


Carlton (95) lost to Collingwood (103) at Princes Park (VIC) [Collingwood by 8) Collingwood by 3
Geelong (79) defeated Essendon (65) at Kardinia Park (Gee) [Geelong by 14) Geelong by 39
Fitzroy (86) defeated North Melbourne (75) at Brunswick St (VIC) [Fitzroy by 11) North Melbourne by 9
Melbourne (30) lost to Western Bulldogs (75) at M.C.G. (VIC) [Western Bulldogs by 45) Melbourne by 2
Hawthorn (53) lost to Sydney (63) at Glenferrie Oval (VIC) [Sydney by 10) Sydney by 31
St Kilda (83) defeated Richmond (65) at Junction Oval (VIC) [St Kilda by 18) Richmond by 18

Round 5


Carlton (52) defeated St Kilda (43) at Princes Park (VIC) [Carlton by 9) Carlton by 31
Collingwood (96) defeated Hawthorn (26) at Victoria Park (VIC) [Collingwood by 70) Collingwood by 45
Essendon (46) lost to Melbourne (57) at Windy Hill (VIC) [Melbourne by 11) Essendon by 15
Western Bulldogs (66) defeated Fitzroy (6) at Western Oval (VIC) [Western Bulldogs by 60) Western Bulldogs by 14
Richmond (52) lost to Geelong (106) at Punt Rd (VIC) [Geelong by 54) Geelong by 23
Sydney (58) lost to North Melbourne (62) at Lake Oval (VIC) [North Melbourne by 4) North Melbourne by 11

Round 6


Hawthorn (67) defeated Carlton (47) at Glenferrie Oval (VIC) [Hawthorn by 20) Carlton by 36
Collingwood (62) defeated Richmond (39) at Victoria Park (VIC) [Collingwood by 23) Collingwood by 31
North Melbourne (51) lost to Essendon (68) at Arden St (VIC) [Essendon by 17) North Melbourne by 1
Melbourne (71) lost to Fitzroy (81) at M.C.G. (VIC) [Fitzroy by 10) Melbourne by 3
St Kilda (69) lost to Western Bulldogs (93) at Junction Oval (VIC) [Western Bulldogs by 24) Western Bulldogs by 51
Geelong (100) defeated Sydney (47) at Kardinia Park (Gee) [Geelong by 53) Geelong by 33

Round 7


Carlton (100) defeated North Melbourne (48) at Princes Park (VIC) [Carlton by 52) Carlton by 1
Western Bulldogs (51) lost to Collingwood (52) at Western Oval (VIC) [Collingwood by 1) Western Bulldogs by 32
Essendon (84) defeated Richmond (48) at Windy Hill (VIC) [Essendon by 36) Essendon by 17
Fitzroy (60) defeated Hawthorn (44) at Brunswick St (VIC) [Fitzroy by 16) Fitzroy by 20
Melbourne (58) lost to Geelong (82) at M.C.G. (VIC) [Geelong by 24) Geelong by 24
St Kilda (53) lost to Sydney (124) at Junction Oval (VIC) [Sydney by 71) St Kilda by 5

Round 8


Essendon (98) defeated Carlton (53) at Windy Hill (VIC) [Essendon by 45) Essendon by 5
Collingwood (131) defeated St Kilda (56) at Victoria Park (VIC) [Collingwood by 75) Collingwood by 39
Geelong (136) defeated Fitzroy (50) at Kardinia Park (Gee) [Geelong by 86) Geelong by 40
Richmond (59) lost to Western Bulldogs (68) at Punt Rd (VIC) [Western Bulldogs by 9) Western Bulldogs by 43
Hawthorn (62) lost to North Melbourne (80) at Glenferrie Oval (VIC) [North Melbourne by 18) North Melbourne by 20
Sydney (77) defeated Melbourne (71) at Lake Oval (VIC) [Sydney by 6) Sydney by 8

Round 9


Fitzroy (54) lost to Carlton (60) at Brunswick St (VIC) [Carlton by 6) Carlton by 14
Melbourne (48) lost to Collingwood (63) at M.C.G. (VIC) [Collingwood by 15) Collingwood by 32
Hawthorn (64) lost to Essendon (87) at Glenferrie Oval (VIC) [Essendon by 23) Essendon by 35
Western Bulldogs (43) lost to Sydney (72) at Western Oval (VIC) [Sydney by 29) Western Bulldogs by 41
St Kilda (44) lost to Geelong (60) at Junction Oval (VIC) [Geelong by 16) Geelong by 36
North Melbourne (45) defeated Richmond (42) at Arden St (VIC) [North Melbourne by 3) Richmond by 2

Round 10


Carlton (63) lost to Geelong (74) at Princes Park (VIC) [Geelong by 11) Geelong by 14
Essendon (80) defeated Collingwood (52) at Windy Hill (VIC) [Essendon by 28) Collingwood by 12
Fitzroy (75) defeated St Kilda (52) at Brunswick St (VIC) [Fitzroy by 23) St Kilda by 1
North Melbourne (25) lost to Western Bulldogs (42) at Arden St (VIC) [Western Bulldogs by 17) Western Bulldogs by 35
Melbourne (74) lost to Hawthorn (102) at M.C.G. (VIC) [Hawthorn by 28) Melbourne by 18
Sydney (79) defeated Richmond (50) at Lake Oval (VIC) [Sydney by 29) Sydney by 9

Round 11


Carlton (97) defeated Sydney (73) at Princes Park (VIC) [Carlton by 24) Carlton by 1
Collingwood (61) lost to Fitzroy (62) at Victoria Park (VIC) [Fitzroy by 1) Collingwood by 34
Western Bulldogs (69) defeated Essendon (53) at Western Oval (VIC) [Western Bulldogs by 16) Western Bulldogs by 24
Geelong (86) defeated North Melbourne (85) at Kardinia Park (Gee) [Geelong by 1) Geelong by 35
Richmond (82) defeated Hawthorn (48) at Punt Rd (VIC) [Richmond by 34) Richmond by 20
St Kilda (73) defeated Melbourne (69) at Junction Oval (VIC) [St Kilda by 4) Melbourne by 2

Round 12


Western Bulldogs (90) defeated Carlton (66) at Western Oval (VIC) [Western Bulldogs by 24) Western Bulldogs by 30
Hawthorn (62) lost to Geelong (86) at Glenferrie Oval (VIC) [Geelong by 24) Geelong by 36
Melbourne (75) drew with Richmond (75) at M.C.G. (VIC) [DRAW by 0) Richmond by 3
Sydney (81) lost to Collingwood (119) at Lake Oval (VIC) [Collingwood by 38) Collingwood by 17
Fitzroy (62) lost to Essendon (97) at Brunswick St (VIC) [Essendon by 35) Essendon by 26
North Melbourne (131) defeated St Kilda (46) at Arden St (VIC) [North Melbourne by 85) North Melbourne by 12

Round 13


Carlton (96) defeated Melbourne (70) at Princes Park (VIC) [Carlton by 26) Carlton by 20
Collingwood (94) defeated North Melbourne (65) at Victoria Park (VIC) [Collingwood by 29) Collingwood by 25
Essendon (83) defeated Sydney (62) at Windy Hill (VIC) [Essendon by 21) Essendon by 17
Richmond (85) lost to Fitzroy (90) at Punt Rd (VIC) [Fitzroy by 5) Richmond by 8
Geelong (78) defeated Western Bulldogs (58) at Kardinia Park (Gee) [Geelong by 20) Western Bulldogs by 9
St Kilda (67) defeated Hawthorn (38) at Junction Oval (VIC) [St Kilda by 29) St Kilda by 9

Round 14


Carlton (106) defeated Richmond (79) at Princes Park (VIC) [Carlton by 27) Carlton by 19
Geelong (55) lost to Collingwood (75) at Kardinia Park (Gee) [Collingwood by 20) Geelong by 11
St Kilda (64) lost to Essendon (99) at Junction Oval (VIC) [Essendon by 35) Essendon by 31
Fitzroy (90) defeated Sydney (61) at Brunswick St (VIC) [Fitzroy by 29) Sydney by 8
Hawthorn (28) lost to Western Bulldogs (76) at Glenferrie Oval (VIC) [Western Bulldogs by 48) Western Bulldogs by 43
Melbourne (67) defeated North Melbourne (64) at M.C.G. (VIC) [Melbourne by 3) North Melbourne by 6

Round 15


Collingwood (87) defeated Carlton (70) at Victoria Park (VIC) [Collingwood by 17) Collingwood by 15
Essendon (61) defeated Geelong (50) at Windy Hill (VIC) [Essendon by 11) Geelong by 1
North Melbourne (121) defeated Fitzroy (51) at Arden St (VIC) [North Melbourne by 70) North Melbourne by 6
Western Bulldogs (98) defeated Melbourne (61) at Western Oval (VIC) [Western Bulldogs by 37) Western Bulldogs by 36
Sydney (54) lost to Hawthorn (62) at Lake Oval (VIC) [Hawthorn by 8) Sydney by 25
Richmond (94) defeated St Kilda (80) at Punt Rd (VIC) [Richmond by 14) Richmond by 15

Round 16


St Kilda (63) defeated Carlton (58) at Junction Oval (VIC) [St Kilda by 5) Carlton by 31
Hawthorn (72) lost to Collingwood (88) at Glenferrie Oval (VIC) [Collingwood by 16) Collingwood by 41
Melbourne (57) lost to Essendon (82) at M.C.G. (VIC) [Essendon by 25) Essendon by 23
Fitzroy (53) lost to Western Bulldogs (98) at Brunswick St (VIC) [Western Bulldogs by 45) Western Bulldogs by 36
Geelong (102) defeated Richmond (33) at Kardinia Park (Gee) [Geelong by 69) Geelong by 32
North Melbourne (56) lost to Sydney (87) at Arden St (VIC) [Sydney by 31) North Melbourne by 8

Round 17


Carlton (87) defeated Hawthorn (45) at Princes Park (VIC) [Carlton by 42) Carlton by 33
Richmond (81) lost to Collingwood (95) at Punt Rd (VIC) [Collingwood by 14) Collingwood by 28
Essendon (78) lost to North Melbourne (79) at Windy Hill (VIC) [North Melbourne by 1) Essendon by 18
Fitzroy (49) lost to Melbourne (64) at Brunswick St (VIC) [Melbourne by 15) Fitzroy by 0
Western Bulldogs (90) defeated St Kilda (29) at Western Oval (VIC) [Western Bulldogs by 61) Western Bulldogs by 44
Sydney (98) defeated Geelong (55) at Lake Oval (VIC) [Sydney by 43) Geelong by 14

Round 18


North Melbourne (94) lost to Carlton (105) at Arden St (VIC) [Carlton by 11) Carlton by 8
Collingwood (74) defeated Western Bulldogs (55) at Victoria Park (VIC) [Collingwood by 19) Western Bulldogs by 15
Richmond (85) lost to Essendon (126) at Punt Rd (VIC) [Essendon by 41) Essendon by 20
Hawthorn (64) lost to Fitzroy (84) at Glenferrie Oval (VIC) [Fitzroy by 20) Fitzroy by 11
Geelong (110) defeated Melbourne (56) at Kardinia Park (Gee) [Geelong by 54) Geelong by 33
Sydney (98) defeated St Kilda (36) at Lake Oval (VIC) [Sydney by 62) Sydney by 28

Semi Final


Western Bulldogs (49) defeated Essendon (41) at M.C.G. (VIC) [Western Bulldogs by 8) Western Bulldogs by 18

Semi Final


Collingwood (90) defeated Geelong (60) at M.C.G. (VIC) [Collingwood by 30) Collingwood by 11

Preliminary Final


Geelong (63) defeated Western Bulldogs (37) at M.C.G. (VIC) [Geelong by 26) Western Bulldogs by 18

Grand Final


Collingwood (77) defeated Geelong (65) at M.C.G. (VIC) [Collingwood by 12) Collingwood by 3

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