Bayer Leverkusen v Borussia Dortmund — Prediction, Odds & Stats
Saturday 29 November 2025 · GER-Bundesliga · 2526
Bundesliga
xG Prediction generated
AI prediction
ai-blend-oos No snapshot has been taken for this fixture yet; this is the stored price.Probabilities, not certainties. How they are made: the methodology.
Was this pick made in advance?
-oos is out of sample: it was fitted only on matches
played before this one, so its pick is a genuine forecast rather than hindsight.
Anything without that suffix was fitted on all available data.What the chances say
Bayer Leverkusen are finishing below their chances — 3.0 goals fewer than expected across 10 matches, despite creating the openings.
Borussia Dortmund are finishing below their chances — 2.3 goals fewer than expected across 10 matches, despite creating the openings. They are also conceding fewer than expected — 2.7 goals saved beyond what the chances suggest.
Finishing swings far more than chance creation, so a gap this size usually narrows. Over ten matches it is suggestive, not settled — a genuinely elite finisher beats expected goals for years.
What the model said
| Model | Home / Draw / Away | Expected goals | Likeliest score | O2.5 | BTTS | Outcome |
|---|---|---|---|---|---|---|
| ai-blend-oos | 1.72–1.15 | 0% | 0% | 0% | Home ✗ | |
| dc-xg-oos | 1.83–1.49 | 1-1 10% | 65% | 65% | Home ✗ |
A model whose name ends -oos was produced by the walk-forward backtest:
it was fitted only on matches played before this one, so the pick is genuinely out of sample.
Reading the xG timeline
Expected goals by minute
Reading the shot map
Shot map
Every shot
| Min | Team | Player | xG | Situation | Body part | Result | Assisted by |
|---|---|---|---|---|---|---|---|
| 9' |
|
Ernest Poku | 0.35 | Open Play | Right Foot | Missed Shot | Ibrahim Maza |
| 12' |
|
Serhou Guirassy | 0.03 | Open Play | Right Foot | Missed Shot | Julian Brandt |
| 20' |
|
Marcel Sabitzer | 0.07 | From Corner | — | Missed Shot | Daniel Svensson |
| 21' |
|
Jonas Hofmann | 0.04 | Open Play | Right Foot | Missed Shot | Malik Tillman |
| 37' |
|
Edmond Tapsoba | 0.06 | From Corner | Right Foot | Missed Shot | Álex Grimaldo |
| 40' |
|
Aaron Anselmino | 0.05 | Set Piece | — | Goal | Daniel Svensson |
| 44' |
|
Ernest Poku | 0.02 | Open Play | Right Foot | Saved Shot | Álex Grimaldo |
| 54' |
|
Malik Tillman | 0.25 | Set Piece | — | Missed Shot | Aleix García |
| 55' |
|
Edmond Tapsoba | 0.02 | Open Play | Left Foot | Blocked Shot | Ibrahim Maza |
| 55' |
|
Ibrahim Maza | 0.02 | Open Play | Right Foot | Blocked Shot | Aleix García |
| 55' |
|
Patrik Schick | 0.05 | Open Play | — | Saved Shot | Robert Andrich |
| 58' |
|
Serhou Guirassy | 0.33 | Set Piece | — | Saved Shot | Julian Ryerson |
| 62' |
|
Ibrahim Maza | 0.05 | Open Play | Left Foot | Blocked Shot | Ernest Poku |
| 63' |
|
Loic Bade | 0.06 | From Corner | Right Foot | Saved Shot | Álex Grimaldo |
| 64' |
|
Karim Adeyemi | 0.26 | Open Play | — | Goal | Fabio Silva |
| 68' |
|
Ernest Poku | 0.02 | Open Play | Right Foot | Blocked Shot | — |
| 70' |
|
Jonas Hofmann | 0.07 | Open Play | Left Foot | Shot On Post | — |
| 71' |
|
Julian Brandt | 0.28 | Open Play | Right Foot | Missed Shot | Felix Nmecha |
| 72' |
|
Ibrahim Maza | 0.02 | Open Play | Right Foot | Missed Shot | Edmond Tapsoba |
| 74' |
|
Julian Brandt | 0.14 | Open Play | Left Foot | Saved Shot | Fabio Silva |
| 82' |
|
Christian Kofane | 0.05 | Open Play | Right Foot | Goal | Ibrahim Maza |
Players
Bayer Leverkusen
| Player | Min | G | A | Sh | KP | xG | xA | xGChain |
|---|---|---|---|---|---|---|---|---|
| Ernest Poku AMC | 90 | 0 | 0 | 3 | 1 | 0.39 | 0.05 | 0.50 |
| Ibrahim Maza MC | 90 | 0 | 1 | 3 | 3 | 0.09 | 0.42 | 0.52 |
| Edmond Tapsoba DC | 90 | 0 | 0 | 2 | 1 | 0.08 | 0.02 | 0.45 |
| Loic Bade DC | 90 | 0 | 0 | 1 | 0 | 0.06 | 0.00 | 0.45 |
| Aleix García MC | 90 | 0 | 0 | 0 | 2 | 0.00 | 0.28 | 0.51 |
| Álex Grimaldo DML | 90 | 0 | 0 | 0 | 3 | 0.00 | 0.14 | 0.08 |
| Robert Andrich DC | 90 | 0 | 0 | 0 | 1 | 0.00 | 0.05 | 0.15 |
| Mark Flekken GK | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.08 |
| Malik Tillman AMC | 76 | 0 | 0 | 1 | 1 | 0.25 | 0.04 | 0.04 |
| Jonas Hofmann DMR | 76 | 0 | 0 | 2 | 0 | 0.11 | 0.00 | 0.19 |
| Patrik Schick FW | 65 | 0 | 0 | 1 | 0 | 0.05 | 0.00 | 0.07 |
| Christian Kofane Sub | 25 | 1 | 0 | 1 | 0 | 0.05 | 0.00 | 0.05 |
| Martin Terrier Sub | 14 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Claudio Echeverri Sub | 14 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Jarell Quansah Sub | 1 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Nathan Tella Sub | 1 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
Borussia Dortmund
| Player | Min | G | A | Sh | KP | xG | xA | xGChain |
|---|---|---|---|---|---|---|---|---|
| Julian Brandt AMC | 90 | 0 | 0 | 2 | 1 | 0.42 | 0.03 | 0.45 |
| Marcel Sabitzer MC | 90 | 0 | 0 | 1 | 0 | 0.07 | 0.00 | 0.00 |
| Aaron Anselmino DC | 90 | 1 | 0 | 1 | 0 | 0.05 | 0.00 | 0.03 |
| Daniel Svensson DML | 90 | 0 | 1 | 0 | 2 | 0.00 | 0.12 | 0.28 |
| Waldemar Anton DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Felix Nmecha MC | 90 | 0 | 0 | 0 | 1 | 0.00 | 0.28 | 0.28 |
| Gregor Kobel GK | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Nico Schlotterbeck DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.03 |
| Karim Adeyemi AMC | 82 | 1 | 0 | 1 | 0 | 0.26 | 0.00 | 0.28 |
| Julian Ryerson DMR | 82 | 0 | 0 | 0 | 1 | 0.00 | 0.33 | 0.03 |
| Serhou Guirassy FW | 63 | 0 | 0 | 2 | 0 | 0.35 | 0.00 | 0.03 |
| Fabio Silva Sub | 27 | 0 | 1 | 0 | 2 | 0.00 | 0.40 | 0.40 |
| Jobe Bellingham Sub | 8 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Yan Couto Sub | 8 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Carney Chukwuemeka Sub | 1 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Ramy Bensebaini Sub | 1 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |