Borussia Dortmund v Eintracht Frankfurt — Prediction, Odds & Stats
Friday 8 May 2026 · 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
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.
Eintracht Frankfurt are conceding more than the chances against them merit — 3.0 goals above expected, which tends to correct.
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 | 2.06–1.00 | 0% | 0% | 0% | Home ✓ | |
| dc-xg-oos | 2.13–1.04 | 2-1 10% | 62% | 57% | 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 |
|---|---|---|---|---|---|---|---|
| 1' |
|
Can Uzun | 0.06 | Open Play | Right Foot | Goal | Mahmoud Dahoud |
| 14' |
|
Marcel Sabitzer | 0.06 | Open Play | Left Foot | Missed Shot | Julian Brandt |
| 16' |
|
Samuele Inácio | 0.53 | Set Piece | — | Saved Shot | Julian Brandt |
| 17' |
|
Luca Reggiani | 0.36 | From Corner | — | Missed Shot | Julian Ryerson |
| 18' |
|
Farès Chaïbi | 0.02 | Open Play | Right Foot | Blocked Shot | Arnaud Kalimuendo Muinga |
| 24' |
|
Jobe Bellingham | 0.02 | Open Play | Right Foot | Saved Shot | Maximilian Beier |
| 24' |
|
Julian Brandt | 0.03 | Open Play | Right Foot | Saved Shot | Marcel Sabitzer |
| 26' |
|
Maximilian Beier | 0.05 | Set Piece | Right Foot | Missed Shot | — |
| 34' |
|
Can Uzun | 0.05 | Open Play | Right Foot | Blocked Shot | Farès Chaïbi |
| 38' |
|
Ritsu Doan | 0.03 | Open Play | Left Foot | Missed Shot | Arnaud Kalimuendo Muinga |
| 41' |
|
Serhou Guirassy | 0.34 | Open Play | Right Foot | Goal | Julian Ryerson |
| 45' |
|
Nico Schlotterbeck | 0.50 | Open Play | Left Foot | Goal | Maximilian Beier |
| 55' |
|
Julian Brandt | 0.05 | From Corner | — | Missed Shot | Julian Ryerson |
| 58' |
|
Julian Ryerson | 0.35 | From Corner | Right Foot | Saved Shot | — |
| 61' |
|
Can Uzun | 0.06 | Open Play | Right Foot | Saved Shot | Jean Négoce |
| 61' |
|
Jean Négoce | 0.03 | From Corner | Right Foot | Missed Shot | Nathaniel Brown |
| 67' |
|
Julian Brandt | 0.06 | From Corner | — | Saved Shot | Nico Schlotterbeck |
| 70' |
|
Julian Ryerson | 0.07 | Open Play | Right Foot | Missed Shot | Nico Schlotterbeck |
| 71' |
|
Samuele Inácio | 0.51 | Open Play | Right Foot | Goal | Maximilian Beier |
| 85' |
|
Ansgar Knauff | 0.07 | Open Play | Right Foot | Saved Shot | Jean Négoce |
| 86' |
|
Jonathan Burkardt | 0.62 | Open Play | Left Foot | Goal | — |
| 87' |
|
Jean Négoce | 0.06 | Open Play | Right Foot | Missed Shot | Jonathan Burkardt |
Players
Borussia Dortmund
| Player | Min | G | A | Sh | KP | xG | xA | xGChain |
|---|---|---|---|---|---|---|---|---|
| Samuele Inácio AMC | 90 | 1 | 0 | 2 | 0 | 1.04 | 0.00 | 0.91 |
| Nico Schlotterbeck DC | 90 | 1 | 0 | 1 | 2 | 0.50 | 0.13 | 0.66 |
| Julian Ryerson DMR | 90 | 0 | 1 | 2 | 3 | 0.42 | 0.76 | 0.94 |
| Luca Reggiani DC | 90 | 0 | 0 | 1 | 0 | 0.36 | 0.00 | 0.53 |
| Maximilian Beier DML | 90 | 0 | 2 | 1 | 3 | 0.05 | 1.04 | 1.04 |
| Gregor Kobel GK | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Waldemar Anton DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.53 |
| Serhou Guirassy FW | 81 | 1 | 0 | 1 | 0 | 0.34 | 0.00 | 0.37 |
| Marcel Sabitzer MC | 81 | 0 | 0 | 1 | 1 | 0.06 | 0.03 | 0.94 |
| Julian Brandt AMC | 77 | 0 | 0 | 3 | 2 | 0.15 | 0.59 | 0.94 |
| Jobe Bellingham MC | 77 | 0 | 0 | 1 | 0 | 0.02 | 0.00 | 1.04 |
| Felix Nmecha Sub | 13 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Karim Adeyemi Sub | 13 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Salih Özcan Sub | 9 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Fabio Silva Sub | 9 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Niklas Süle Sub | 1 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
Eintracht Frankfurt
| Player | Min | G | A | Sh | KP | xG | xA | xGChain |
|---|---|---|---|---|---|---|---|---|
| Nathaniel Brown DL | 90 | 0 | 0 | 0 | 1 | 0.00 | 0.03 | 0.10 |
| Michael Zetterer GK | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.02 |
| Ellyes Skhiri DMC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.13 |
| Aurèle Amenda DR | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.29 |
| Arthur Theate DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.17 |
| Robin Koch DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.09 |
| Ritsu Doan AMR | 85 | 0 | 0 | 1 | 0 | 0.03 | 0.00 | 0.04 |
| Can Uzun AMC | 80 | 1 | 0 | 3 | 0 | 0.17 | 0.00 | 0.20 |
| Arnaud Kalimuendo Muinga FW | 80 | 0 | 0 | 0 | 2 | 0.00 | 0.04 | 0.10 |
| Farès Chaïbi AML | 60 | 0 | 0 | 1 | 1 | 0.02 | 0.05 | 0.16 |
| Mahmoud Dahoud DMC | 60 | 0 | 1 | 0 | 1 | 0.00 | 0.06 | 0.08 |
| Jean Négoce Sub | 30 | 0 | 0 | 2 | 2 | 0.08 | 0.13 | 0.19 |
| Mario Götze Sub | 30 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.11 |
| Ansgar Knauff Sub | 10 | 0 | 0 | 1 | 0 | 0.07 | 0.00 | 0.07 |
| Ayoube Amaimouni-Echghouyab Sub | 10 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Jonathan Burkardt Sub | 5 | 1 | 0 | 1 | 1 | 0.62 | 0.06 | 0.68 |