clock menu more-arrow no yes mobile
Borussia Dortmund v RB Leipzig - Bundesliga

Scanning the Landscape: How Do Dortmund Compare To Their Title Rivals?

Analyzing Dortmund’s performances this season by comparing them against their rivals

Photo by Lars Baron/Bongarts/Getty Images

A challenge that the analytics community faces when writing about sports, especially football, is how to manage fan expectations. Fans want answers, they don’t want to wait and see. But in order to draw valid, statistically significant conclusions, you need a sufficiently large sample of games. This creates a trade-off between responsiveness and accuracy. It is difficult to draw accurate conclusions in the early stages of the season, but answering those questions is no less valuable. This is especially true with football, a low-scoring sport that is played over a shorter season than many American sports. Individual matches are extremely vulnerable to random chance as it takes fewer plays to have a decisive impact on outcomes, and the season isn’t long enough to afford analysts huge sample sizes.

So at the halfway stage of the Bundesliga, after each team has played 17 games, it will be difficult to draw any concrete conclusions based on match-level data (this would require player-level tracking and event data). However, it is still possible to identify possible seasonal trends and compare Dortmund’s performances and results with their closest competitors.

In this article, I will do exactly that. Using FiveThirtyEight’s publicly available match data, I will compare Dortmund’s Hinrunde with the rest of the Bundesliga top four: RB Leipzig, Bayern Munich, and Borussia Monchengladbach. Has Favre produced a defense more porous than Swiss cheese? Or has he tooled up an offense so lethal it is like a Swiss Army Knife opening up a can of goals with the swift precision of 36 minutes of jabbing that weird “can opener” into the lid before you give up and starve to death? Lets find out.

Win Simulations

In recent weeks Dortmund managed to drop important points against both RB Leipzig and Hoffenheim. Despite leading at half time in both games, they walked away with a total of one point from a possible six. So win totals seems like a good place to start. I ran simulations to see how many wins we should have claimed, and whether our actual total is significantly different.

Figure 1 plots the win totals from 1000 simulations of Dortmund’s Hinrunde, using FiveThirtyEight’s win probabilities from each game. The red dashed line shows Dortmund’s actual win total, 8, while each bar represents the total number of Hinrunde simulations producing a particular number of wins. For example, the two largest bars represent 9 and 10 wins. The mean average win total is 9.56.

Figure 1 - Hinrunde Win Simulations

Clearly the win totals are a little below average, but only marginally. 8 wins is well within two standard deviations of the mean, which means that the difference in the number of wins and the mean (so -1.56) is not statistically significant. In more simple terms, this basically means that BVB’s win total so far this season is well within the range of outcomes we could reasonably expect given FiveThirtyEight’s match probabilities.

Of course, there are a couple problems with this test. First, given a very small sample of 17 games, it’s really hard to identify any statistically significant relationships, but that doesn’t mean something of note is not occurring. Therefore, all we can really conclude from Figure 1 is that Dortmund are underperforming the mean expected win totals, but it’s unclear what this means. The second problem with this test is that the results may be biased by underperformance leading to a reduction in FiveThirtyEight’s assessment of Dortmund and therefore driving down their win probabilities. If this is the case, then the underperformance itself is reducing how much we can learn from these simulations.

Soccer Power Index

Soccer Power Index (SPI) is the ranking system FiveThirtyEight uses to produce their Global Club Soccer Rankings. It is also one part of the equation that they use to compute their match outcome probabilities. If underperformance is impacting FiveThirtyEight’s assessment of Dortmund’s quality, SPI should show that. However, BVB’s SPI hasn’t changed drastically since the start of the season. It started out at 83.96 and since then has dropped as low as 81.98. The mean average value over the course of the season has been 83.31. For reference, a drop in SPI from ~84 to ~82 would cost about one place in FiveThirtyEight’s Global Club Soccer Rankings (as it stands right now), and would have no impact on the Bundesliga rankings.

Figure 2 - SPI Comparison

Figure 2 plots changes in the SPI value of the top four teams in the Bundesliga right now. Dortmund are neck and neck with RB Leipzig but there are big gaps between Bayern and the other three, and Borussia Monchengladbach are some way off the rest of the top four.

Over the course of the season, Dortmund’s SPI has been close to Leipzig’s, but since the beginning of November, Leipzig have begun to open up a little bit of a gap between the two of them.

Expected Goals

The final score from a game is not always an accurate depiction of the way the game played out. Due to the low-scoring nature of football, it is easy for a game to turn on its head as a result of a single play. It is therefore difficult to judge teams just based on results. Expected goals, and its various spin-offs, are valuable measures of performance, and can tell us a great deal that outcomes and results might miss.

Figure 3 plots the expected goal difference (xGDiff) in each game for the Bundesliga’s top four teams so far this season, with loess curves to identify team trends. This plot shows that both Dortmund and Leipzig have experienced significant highs and lows. Dortmund’s loess curve is a little exaggerated because of the thumping that Bayern gave them at the Allianz, but their xGDiff has gradually declined since the start of the season.

Figure 3 - xGDiff Comparison

xGDiff suggests Dortmund are the worst of the four teams, largely driven by a string of poor performances from mid-October to early November. While things picked up in December, they’re playing catch up, and are still some way off the top two teams in the league.

Splitting expected goals for (xG) and against (xGA) helps make more detailed comparisons. Figure 4 plots each team’s xG (solid data points/lines) and xGA (clear data points and dashed lines).

Figure 4 - xG/xGA Comparison

Between the end of October and start of November, Dortmund clearly experienced a slump in performance, but they improved a little at the end of November, heading in to December. Leipzig, on the other hand, start the season with some inconsistent performances, but go from strength-to-strength from about mid-October, and they have looked really good since that point. Borussia Monchengladbach started the season brilliantly, but since November their offense has dried up a little.

What really stands out from these plots is how consistently good Bayern have been. They are clearly the best team in the league, and I wouldn’t be remotely shocked to see them put together a stable run of form and win the league like they did in the second half of last season.

Non-Shot Expected Goals

While xG measures shot quality, it doesn’t capture attacking plays that don’t end in attempts on goal. Non-shot expected goals (NSxG), on the other hand, takes a slightly different view of team performance by measuring the value of possessions that don’t result in a shot. NSxG is therefore a good proxy of a team’s overall dominance of games, independent of their shots on goal.

Figure 5 presents the non-shot expected goal difference (NSxGDiff) for the top four in the Bundesliga. This tells a similar story to Figure 3 in the case of Bayern, Leipzig, and Dortmund, but Gladbach look considerably weaker than Figure 3’s xGDiff.

Figure 5 - NSxGDiff Comparison

Again, Bayern are clearly the better team through the first half of the season. However, the positive takeaway is that going into the winter break, Bayern, Leipzig, and Dortmund are all close to level, with Dortmund slightly leading things. Perhaps they can continue this progress in the Ruckrunde?

Figure 6 splits the teams up and plots their NSxG/NSxGA, as in Figure 4. This only serves to further highlight Bayern’s quality, which looks even more pronounced when plotted individually. With that said, Figure 6 also shows that Leipzig have looked very, very good since the beginning of October, and there is no reason to believe that they are going to decline in the near future.

Figure 6 - NSxG Comparison

As ever, Dortmund are a little all over the place, with some astonishingly high NSxG games towards the end of the Hinrunde, but plenty of poor performances scattered throughout too. Borussia Monchengladbach, on the other hand, are consistent, but their biggest problem is that they don’t appear to have the same ceiling as the rest of the top four. Despite starting brilliantly this season, I doubt they will mount a serious title challenge. However, they may have opened up enough of a gap to remain in the top four and claim a Champions League spot next season.


To summarize, Table 1 details the cumulative season totals for the metrics that the article has discussed. The underlying numbers suggest that Bayern are clearly the best team in the league at the moment, and have been throughout the season. They lead in both xGDiff and NSxGDiff, and their numbers are in line with their superior SPI too. Despite this, they sit in third place, seemingly dropping games that they have dominated.

Top Four xG & NSxG Table

Team NSxG NSxGA NSxGDiff xG xGA xGDiff
Team NSxG NSxGA NSxGDiff xG xGA xGDiff
Bayern Munich 44.92 14.39 30.53 49.34 20.48 28.86
RB Leipzig 30.53 16.57 13.96 41.63 22.37 19.26
Borussia Monchengladbach 25.16 25.91 -0.75 36.24 24.85 11.39
Borussia Dortmund 31.91 17.43 14.48 33.32 23.4 9.92
Table 1 - Expected Performance Comparison

Leipzig are in a relatively distant 2nd place, but they’re clearly in the ascendance as well. If they continue playing like this in the Ruckrunde, they have a real shot at winning the league. Nonetheless, there is a feeling of inevitability about the season at the moment. We watched a similar situation play out last season, and it feels like Bayern are probably going to surge to the title once again.

Gladbach are well in the mix in terms of points on the board, but given their underlying numbers it feels like they are bound to drop off in the second half of the season.

Dortmund, on the other hand, feel as unpredictable as ever. They are 7 points behind Leipzig, which isn’t insurmountable, but they will need to find a clear stretch of form, and they will need Bayern, Gladbach, and Leipzig to tail off. Their NSxGDiff suggests that they are dominating games, but their xGDiff is the weakest of the top four. They can be unstoppable in one game, and look like a mid-table team immediately after. Sometimes they even manage to show both sides in the same game! It’s certainly not impossible that they could come back and win the league, but it is highly unlikely.

In the following analysis, we will look at Dortmund’s inconsistency under Favre, and attempt to identify the root causes of their poor performances. This article should hopefully serve as a summary of the wider trends so far this season, setting us up nicely for the next article, which will be a shorter but more in-depth analysis.

Heja BVB!

Report: Borussia Dortmund Considering Loaning Youssoufa Moukoko

Match Ratings: Dortmund Grind Out a Win over Wolfsburg

Post Match Reactions: Dortmund Cruise Past Wolfsburg