Error message

  • Deprecated function: Return type of Aws\HandlerList::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 32 of /var/www/html/vendor/aws/aws-sdk-php/src/HandlerList.php).
  • Deprecated function: Return type of Aws\Api\AbstractModel::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php).
  • Deprecated function: Return type of Aws\Api\AbstractModel::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php).
  • Deprecated function: Return type of Aws\Api\AbstractModel::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php).
  • Deprecated function: Return type of Aws\Api\AbstractModel::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php).
  • Deprecated function: Return type of Aws\Endpoint\Partition::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 13 of /var/www/html/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php).
  • Deprecated function: Return type of & Aws\Endpoint\Partition::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 13 of /var/www/html/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php).
  • Deprecated function: Return type of Aws\Endpoint\Partition::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 13 of /var/www/html/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php).
  • Deprecated function: Return type of Aws\Endpoint\Partition::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 13 of /var/www/html/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php).
  • Deprecated function: Aws\Credentials\Credentials implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in include() (line 8 of /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/Credentials.php).
  • Deprecated function: Return type of Aws\Command::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of & Aws\Command::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Command::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Command::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Command::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Command::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Result::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of & Aws\Result::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of Aws\Result::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of Aws\Result::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of Aws\Result::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of Aws\Result::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Warning: Undefined array key "nid" in views_handler_field_term_node_tid->pre_render() (line 98 of /var/www/html/docroot/sites/all/modules/views/modules/taxonomy/views_handler_field_term_node_tid.inc).
  • Warning: Undefined array key "nid" in views_handler_field_term_node_tid->pre_render() (line 98 of /var/www/html/docroot/sites/all/modules/views/modules/taxonomy/views_handler_field_term_node_tid.inc).
×

Entertainment

The Premier League's Expected Goals Table Shows Just How Unpredictable This Season Has Been

With the Premier League season nearly half over, this current lull in matches is the perfect time to look back at the campaign so far.

We've all been following the matches and have a general idea about where each team sits in the league table, so the next logical step is to dive deeper into the analytical side of the Premier League and examine the expected goals league table.

Expected goals (xG) is calculated by how many goals the side should be expected to score based on its attacking chances during a match. Thus, at the end of any given match, each side has an xG total which can be used to analyze which team should have won. Expected goals doesn't always match the result, but it is a handy stat to track how well a team performs in a match or over the course of the season.

This table here via Experimental 3-6-1 shows how the Premier League standings would look if results were based entirely on xG performance:

EPL xG table as of Jan 3, 2021

Via Ben Mayhew's Experimental 3-6-1 blog

Liverpool still leads the league, but beneath them is a plethora of changes. Here are the important takeaways you need to know from the xG table:

Biggest Rises

Brighton (+14 points, +11 places)

Few teams can match the bad luck Brighton has experienced this season. The Seagulls expected goal difference of +6.5 is more than 13 goals higher than their actual total (-7). Brighton has lost three times with a higher xG total than their opponent and has drawn three matches with an xG total at least one goal more than its opponent.

The culprits are mediocre goalkeeping and poor finishing. Keeper Mat Ryan has allowed 3.2 more goals than expected, worst in the EPL, while the team has scored 4.0 fewer goals than expected, costing the club 14 points.

Chelsea (+9 points, +6 places)

Seeing Chelsea in eighth place after its flurry of transfer activity is a shock to most Premier League fans. So perhaps it's not a surprise that based on expected goals the club should be tied at the top of the league table with Liverpool. New signing Timo Werner has underperformed his xG total by 2.6 goals, third worst in the league.

The club has four defeats in its last six matches, which perhaps cancels out its promising early-season form, but I surmise that Lampard's boys will get back on track soon. 

Arsenal (+4 points, +4 places)

Is it possible that critics (myself included) have been a bit harsh on Mikel Arteta this season? A week removed from sitting 15th in the league, Arsenal is calculated to be 7th in the xG table, thanks to four defeats turning into four draws. Four points might not seem like a lot, but that is the difference that currently separates Crystal Palace in 14th from Aston Villa in 7th. The top four might be tough to crack for the Gunners, but a Europa League spot is certainly not out of the question. 

Sheffield United (+8 points, +2 places)

It's pretty disheartening for Blades fans that the club could gain eight points and still sit in the relegation zone. United has the worst goal-scoring record in the league, a full 7.5 goals fewer than its xG total. Bad luck is likely a factor, but for the Blades, dreadful performances certainly override any sort of luck that might exist. 

Biggest Declines

Tottenham (-11 points, -11 places)

The general consensus was that Spurs' brief interlude at the top of the table was a fluke, but few would believe that xG would place Spurs closer to the relegation zone than a Champions League spot. Tottenham has outperformed its xG total by 14 goals this season, the difference between fourth and 15th place.

South Korean sensation Son Heung-min leads this over-performance, scoring on nearly half of his shots and surpassing his xG total by 6.6 goals, double the next closest competitor. With one win in five matches, Spurs' luck could be coming to an end.

Everton (-10 points, -7 places)

Much like Tottenham, Everton's xG performance sees the club drop from a European place to mid-table obscurity. A six-goal swing in goal difference is not huge, but it is enough to cost the Toffees 10 points and seven spots on the league table

Burnley (-8 points, -3 places)

Perhaps there is no greater compliment to manager Sean Dyche than his ability to earn points from dismal performances. His Burnley side has earned 16 points this season despite zero wins on expected goals so far. After a horrid start, Burnley has gained points in seven of nine matches, a crucial run for any relegation combatant. Burnley might not play the most inspiring football, but few (if any) teams can disregard poor performance analytics and still get results like Sean Dyche's side can.

Embed from Getty Images

Manchester United (-6 points, -7 places)

United has earned numerous wins from close matches this season, defeating both Brighton and West Ham despite lower xG totals than their opponents, and also earning victories in matches with less than half a goal advantage in xG. This ability to turn losses and draws into wins has led the Red Devils to the top of the table, but this good fortune might not be sustainable.

Southampton (-6 points, -6 places)

The Saints have been a pleasant surprise this season, reaching as high as third place as recently as Dec. 16 before a pair of draws and defeats saw them drop to ninth. Expected goals have not been as kind as Southampton has overperformed its xG total by 6.8 goals. The side has won two matches this season with an xG difference of -1 or worse, so expect the Saints form to regress a bit, and the club will likely end up on the fringes of a Europa League spot.

West Brom (-4 points, -1 places)

Including West Brom here almost feels like bullying. The Baggies have been exceptionally inadequate this season, but somehow expected goals shows that the team has played even worse that its results have looked. West Brom has not posted a higher xG total than its opponent in any match this season, even managing to have 0.0 expected goals in a recent 3-0 defeat to Aston Villa. If anyone asks if West Brom is really as bad as it looks, the answer is yes, and then some.

Other Points to Note:

Mid-table is much tighter than predicted: In the xG league table there is an eight-point gap between 14th and 7th place, a difference that is just four points in the actual standings. This means that nearly three quarters of the league has a realistic shot at a Europa League berth, making for a more tightly-contested campaign.

Title race is just as tight as it has seemed: Spurs and Manchester United might not be playing like legitimate title contenders, but Aston Villa and Manchester City have performed well enough to make late pushes for the Premier League crown. 

West Ham and Crystal Palace have held truest to their xG stats: Palace was the only team to not have any results changed based on expected goals results, while West Ham saw its xG for and against both changed by less than 0.5 goals. Yet both managed to advance multiple spots in the table.

Brighton and Spurs lead with the biggest changes in wins and losses: Brighton gained six victories to go along with 14 points gained in total, while Spurs added five defeats and lost 11 points in total.

Embed from Getty Images

Liverpool gains two points despite seven fewer goals: The Reds maintain their spot at the top of the table, only now they are tied with Chelsea instead of Manchester United. They accomplished this despite seven fewer expected goals, much of this decrease coming from a 7-0 victory over Crystal Palace (2.2 xG) and a 4-0 win against Wolves (1.2 xG), matches Liverpool still would have won even with these reduced goal totals. 

Newcastle's offense is exceptionally bad: For most clubs near the bottom of this table, we would expect to see an underperformance in goals versus xG as this leads to poor results. Newcastle has taken that one step further, managing to outperform its xG scored while still having one of the worst attacks in the league. 

Videos you might like