Hoffenheim v Union Berlin — Prediction, Odds & Stats
Saturday 31 January 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
Hoffenheim are finishing below their chances — 3.0 goals fewer than expected across 10 matches, despite creating the openings. They are also conceding sharply more than the chances against them merit — 5.9 goals above expected, which tends to correct.
Union Berlin have scored 15 from 14.2 expected and conceded 21 from 20.5 — both ends in line with the chances, so the recent record is a fair reflection.
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.78–1.13 | 0% | 0% | 0% | Home ✓ | |
| dc-xg-oos | 1.62–1.46 | 1-1 11% | 59% | 62% | 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 |
|---|---|---|---|---|---|---|---|
| 5' |
|
Andrej Ilic | 0.06 | From Corner | — | Missed Shot | Janik Haberer |
| 6' |
|
Rani Khedira | 0.39 | Open Play | Left Foot | Saved Shot | — |
| 8' |
|
Leopold Querfeld | 0.02 | From Corner | — | Blocked Shot | Janik Haberer |
| 9' |
|
Danilho Doekhi | 0.06 | From Corner | — | Missed Shot | Leopold Querfeld |
| 9' |
|
Leopold Querfeld | 0.01 | From Corner | — | Missed Shot | Janik Haberer |
| 19' |
|
Andrej Ilic | 0.12 | Open Play | — | Missed Shot | Danilho Doekhi |
| 27' |
|
Andrej Kramaric | 0.01 | Open Play | Right Foot | Missed Shot | Bazoumana Touré |
| 38' |
|
Andrej Kramaric | 0.03 | Open Play | Left Foot | Blocked Shot | Grischa Prömel |
| 41' |
|
Andrej Kramaric | 0.76 | Right Foot | Goal | — | |
| 44' |
|
Andrej Kramaric | 0.29 | Open Play | — | Goal | Bazoumana Touré |
| 46' |
|
Diogo Leite | 0.00 | Open Play | Right Foot | Own Goal | — |
| 54' |
|
Aljoscha Kemlein | 0.04 | Open Play | Right Foot | Missed Shot | Andras Schafer |
| 59' |
|
Andras Schafer | 0.06 | Open Play | Left Foot | Saved Shot | Ilyas Ansah |
| 61' |
|
Fisnik Asllani | 0.11 | Open Play | Right Foot | Missed Shot | Bazoumana Touré |
| 66' |
|
Diogo Leite | 0.12 | Set Piece | — | Missed Shot | Derrick Köhn |
| 67' |
|
Rani Khedira | 0.06 | Open Play | Right Foot | Goal | — |
| 72' |
|
Ilyas Ansah | 0.05 | Open Play | Right Foot | Blocked Shot | — |
| 81' |
|
Andrej Kramaric | 0.04 | Set Piece | — | Saved Shot | Vladimir Coufal |
| 82' |
|
Andrej Kramaric | 0.11 | Open Play | Right Foot | Missed Shot | Max Moerstedt |
| 83' |
|
Andras Schafer | 0.03 | From Corner | Right Foot | Blocked Shot | Rani Khedira |
| 85' |
|
Livan Burcu | 0.09 | Direct Freekick | Right Foot | Blocked Shot | — |
| 86' |
|
Rani Khedira | 0.02 | Open Play | Left Foot | Blocked Shot | — |
| 89' |
|
Vladimir Coufal | 0.06 | Open Play | — | Missed Shot | Alexander Prass |
| 89' |
|
Andrej Ilic | 0.06 | Set Piece | — | Missed Shot | Leopold Querfeld |
| 91' |
|
Leopold Querfeld | 0.05 | From Corner | — | Missed Shot | Janik Haberer |
| 96' |
|
Ihlas Bebou | 0.10 | Open Play | Left Foot | Saved Shot | Grischa Prömel |
Players
Hoffenheim
| Player | Min | G | A | Sh | KP | xG | xA | xGChain |
|---|---|---|---|---|---|---|---|---|
| Vladimir Coufal DR | 90 | 0 | 0 | 1 | 1 | 0.06 | 0.04 | 0.38 |
| Albian Hajdari DL | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.26 |
| Robin Hranác DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.32 |
| Ozan Kabak DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.14 |
| Oliver Baumann GK | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.10 |
| Leon Avdullahu MC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.53 |
| Grischa Prömel MC | 90 | 0 | 0 | 0 | 2 | 0.00 | 0.13 | 0.42 |
| Bazoumana Touré FWL | 90 | 0 | 1 | 0 | 3 | 0.00 | 0.41 | 0.52 |
| Andrej Kramaric MC | 86 | 2 | 0 | 6 | 0 | 1.23 | 0.00 | 0.44 |
| Fisnik Asllani FW | 81 | 0 | 0 | 1 | 0 | 0.11 | 0.00 | 0.42 |
| Tim Lemperle FWR | 49 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Max Moerstedt Sub | 41 | 0 | 0 | 0 | 1 | 0.00 | 0.11 | 0.11 |
| Ihlas Bebou Sub | 9 | 0 | 0 | 1 | 0 | 0.10 | 0.00 | 0.10 |
| Alexander Prass Sub | 4 | 0 | 0 | 0 | 1 | 0.00 | 0.06 | 0.06 |
| Kevin Akpoguma Sub | 1 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
Union Berlin
| Player | Min | G | A | Sh | KP | xG | xA | xGChain |
|---|---|---|---|---|---|---|---|---|
| Rani Khedira MC | 90 | 1 | 0 | 3 | 1 | 0.47 | 0.03 | 0.47 |
| Andrej Ilic FW | 90 | 0 | 0 | 3 | 0 | 0.24 | 0.00 | 0.12 |
| Leopold Querfeld DC | 90 | 0 | 0 | 3 | 2 | 0.08 | 0.11 | 0.00 |
| Danilho Doekhi DC | 90 | 0 | 0 | 1 | 1 | 0.06 | 0.12 | 0.18 |
| Frederik Rönnow GK | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.06 |
| Janik Haberer DMR | 90 | 0 | 0 | 0 | 4 | 0.00 | 0.14 | 0.06 |
| Aljoscha Kemlein MC | 86 | 0 | 0 | 1 | 0 | 0.04 | 0.00 | 0.04 |
| Diogo Leite DC | 78 | 0 | 0 | 1 | 0 | 0.12 | 0.00 | 0.06 |
| Oliver Burke AMC | 57 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.12 |
| Stanley N'Soki DML | 57 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Woo-Yeong Jeong AMC | 57 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Andras Schafer Sub | 33 | 0 | 0 | 2 | 1 | 0.09 | 0.04 | 0.10 |
| Ilyas Ansah Sub | 33 | 0 | 0 | 1 | 1 | 0.05 | 0.06 | 0.21 |
| Derrick Köhn Sub | 33 | 0 | 0 | 0 | 1 | 0.00 | 0.12 | 0.00 |
| Livan Burcu Sub | 12 | 0 | 0 | 1 | 0 | 0.09 | 0.00 | 0.00 |
| Alex Kral Sub | 4 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |