xgEdge

Saturday, 29/08/2026 at 15:30

Full time
Match report · Bundesliga

1. FC Köln 3:2 TSG Hoffenheim

1. FC Köln Home 1.95 xG · 18 shots
TSG Hoffenheim Away 1.88 xG · 15 shots
32 The chances were evenly matched

1. FC Köln were the model's likeliest winner before kick-off at 43%. They won 3–2. The biggest difference was TSG Hoffenheim's attack: 1.88 xG against 1.35 projected (+0.53). 1. FC Köln produced 1.95 xG against 1.65 projected (+0.30).

Goals

  1. 27' Adam Daghim TSG Hoffenheim · 0.03 xG chance 0–1
  2. 51' Said El Mala 1. FC Köln · 0.21 xG chance 1–1
  3. 67' Ozan Kabak TSG Hoffenheim · 0.05 xG chance 1–2
  4. 72' Thijs Dallinga 1. FC Köln · 0.11 xG chance 2–2
  5. 82' Thijs Dallinga 1. FC Köln · 0.05 xG chance 3–2

The model against the result

priced before kick-off
1. FC Köln
43% What happened
Draw
28%
TSG Hoffenheim
29%

Data coverage Both teams have the full 20-match model window available.

Projected vs produced

Expected goals
1. FC Köln The model projected 1.65 Produced 1.95 Difference +0.30
TSG Hoffenheim The model projected 1.35 Produced 1.88 Difference +0.53

TSG Hoffenheim produced 0.53 xG more than projected

Projected before kick-off Produced on the night

The shots behind it

1. FC Köln TSG Hoffenheim
Shots
18
15
On target
6
4
Inside the box
13
8
xG per shot
0.09
0.12
Open play xG
1.30
0.71
Set-piece xG
0.37
0.23
Penalties
0
1
Shot-level xG may differ from the published match total

The provider publishes the match total separately from its shot-by-shot values. Those values are rounded to two decimals and, leaving out penalties and own goals, add up to its non-penalty xG: 1.71 for 1. FC Köln and 0.96 for TSG Hoffenheim.

Shot map

Both teams shown attacking the same goal for comparison.

TSG Hoffenheim · Max Moerstedt · 57' · No goal · 12 m · 0.82 xG 1. FC Köln · Tom Krauß · 81' · No goal · 10 m · 0.44 xG 1. FC Köln · Said El Mala · 40' · No goal · 10 m · 0.34 xG TSG Hoffenheim · Max Moerstedt · 59' · No goal · 10 m · 0.34 xG 1. FC Köln · Said El Mala · 51' · Goal · 11 m · 0.21 xG TSG Hoffenheim · Bambasé Conté · 86' · No goal · 12 m · 0.20 xG 1. FC Köln · Thijs Dallinga · 72' · Goal · 10 m · 0.11 xG 1. FC Köln · Ragnar Ache · 7' · No goal · 12 m · 0.06 xG 1. FC Köln · Said El Mala · 19' · No goal · 26 m · 0.06 xG 1. FC Köln · Paul Okon-Engstler · 53' · No goal · 21 m · 0.06 xG 1. FC Köln · Luka Lochoshvili · 64' · No goal · 8 m · 0.06 xG 1. FC Köln · Said El Mala · 5' · No goal · 7 m · 0.05 xG 1. FC Köln · Tom Krauß · 7' · No goal · 12 m · 0.05 xG TSG Hoffenheim · Patrick Wimmer · 11' · No goal · 15 m · 0.05 xG TSG Hoffenheim · Patrick Wimmer · 55' · No goal · 21 m · 0.05 xG 1. FC Köln · Jan Uwe Thielmann · 61' · No goal · 11 m · 0.05 xG TSG Hoffenheim · Ozan Kabak · 67' · Goal · 9 m · 0.05 xG 1. FC Köln · Luka Lochoshvili · 69' · No goal · 9 m · 0.05 xG 1. FC Köln · Thijs Dallinga · 82' · Goal · 16 m · 0.05 xG TSG Hoffenheim · Max Moerstedt · 90' · No goal · 7 m · 0.05 xG TSG Hoffenheim · Adam Hložek · 47' · No goal · 10 m · 0.04 xG TSG Hoffenheim · Bambasé Conté · 8' · No goal · 27 m · 0.03 xG TSG Hoffenheim · Adam Daghim · 27' · Goal · 18 m · 0.03 xG TSG Hoffenheim · Leon Avdullahu · 77' · No goal · 25 m · 0.03 xG TSG Hoffenheim · Adam Hložek · 22' · No goal · 23 m · 0.02 xG TSG Hoffenheim · Leon Avdullahu · 24' · No goal · 20 m · 0.02 xG 1. FC Köln · Gideon Mensah · 45' · No goal · 21 m · 0.02 xG 1. FC Köln · Ísak Bergmann Jóhannesson · 50' · No goal · 9 m · 0.02 xG 1. FC Köln · Thijs Dallinga · 70' · No goal · 10 m · 0.02 xG TSG Hoffenheim · Andrej Kramarić · 90' · No goal · 14 m · 0.02 xG TSG Hoffenheim · Albian Hajdari · 15' · No goal · 32 m · 0.01 xG 1. FC Köln · Said El Mala · 33' · No goal · 31 m · 0.01 xG 1. FC Köln · Said El Mala · 63' · No goal · 27 m · 0.01 xG

All shots

33 shots · 3.43 xG

Hover, focus or tap a shot to read it.

  • 1. FC Köln
  • TSG Hoffenheim
  • Filled = goal
  • Dot area = xG (the smallest chances drawn at a minimum size)

Recent form

Last 6 · xG per match
1. FC Köln

1.93 xG created 1.65 xGA

  • W 3.33 created, 0.99 conceded against SV Werder Bremen
  • D 1.33 created, 2.01 conceded against FC St. Pauli
  • L 3.04 created, 1.33 conceded against Bayer 04 Leverkusen
  • D 1.75 created, 1.15 conceded against 1. FC Union Berlin
  • L 1.17 created, 1.36 conceded against 1. FC Heidenheim
  • L 0.98 created, 3.05 conceded against FC Bayern München
TSG Hoffenheim

1.72 xG created 1.31 xGA

  • D 0.99 created, 1.93 conceded against FC Augsburg
  • W 2.25 created, 0.70 conceded against Borussia Dortmund
  • W 1.45 created, 1.37 conceded against Hamburger SV
  • D 2.47 created, 1.57 conceded against VfB Stuttgart
  • W 1.52 created, 1.07 conceded against SV Werder Bremen
  • L 1.62 created, 1.20 conceded against Borussia M'gladbach

xG created xG conceded (xGA) W / D / L: the match result

Head to head

1. FC Köln: 1 won · 1 drawn · 0 lost

Pre-match model & market record

2 opportunities flagged1 won1 lost

  • Won
  • Lost
View pre-match record
The outcomes the model flagged on 1. FC Köln against TSG Hoffenheim before kick-off, in the order they ranked, with the price, the edge and what became of each.
Selection Price Edge Result
1. FC Köln to win 3.00 +28.7% Won
Draw 3.60 +1.4% Lost

Pre-match model vs market

Outcome Model Market Difference Fair odds
1. FC Köln 42.9% 31.3% +11.6 pp 2.33
Draw 28.2% 26.1% +2.1 pp 3.55
TSG Hoffenheim 28.9% 42.7% −13.7 pp 3.46

Other markets

Outcome Model Market Difference Fair odds
Both teams to score 65.5% 64.3% +1.2 pp 1.53
Both teams not to score 34.5% 35.7% −1.2 pp 2.90
Over 1.5 goals 84.0% 82.2% +1.8 pp 1.19
Under 1.5 goals 16.0% 17.8% −1.8 pp 6.25
Over 2.5 goals 59.5% 61.5% −2.0 pp 1.68
Under 2.5 goals 40.5% 38.5% +2.0 pp 2.47

Prices and probabilities are the ones stored before kick-off; nothing here is recalculated. Edge is the model's probability times the price, minus one, so a flagged outcome that lost is the ordinary case rather than a contradiction.

Model details

Show
Fit window
the last 20 matches, recency weighted (a match 107 days old counts half)
1. FC Köln sample
20 matches
TSG Hoffenheim sample
20 matches
Computed
6 hours before kick-off
Prices taken
6 hours before kick-off

Limitations

The model reads expected goals and nothing else. It does not know the lineups, who is injured or suspended, what either side has to play for, the weather, or how congested the schedule around this match is.