Cagliari v AC Milan — Prediction, Odds & Stats
Friday 2 January 2026 · ITA-Serie A · 2526
Serie A
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
Cagliari are finishing sharply below their chances — 5.0 goals fewer than expected across 10 matches, despite creating the openings. They are also conceding fewer than expected — 4.0 goals saved beyond what the chances suggest.
AC Milan are finishing below their chances — 3.0 goals fewer than expected across 10 matches, despite creating the openings. They are also conceding fewer than expected — 2.0 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 | 0.88–1.83 | 0% | 0% | 0% | Away ✓ | |
| dc-xg-oos | 1.20–1.90 | 1-1 10% | 60% | 59% | Away ✓ |
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 |
|---|---|---|---|---|---|---|---|
| 0' |
|
Matteo Prati | 0.02 | Open Play | Right Foot | Missed Shot | — |
| 1' |
|
Marco Palestra | 0.09 | Open Play | Right Foot | Missed Shot | Ndary Adopo |
| 2' |
|
Matteo Prati | 0.01 | Open Play | Right Foot | Missed Shot | — |
| 3' |
|
Rafael Leão | 0.10 | Open Play | Right Foot | Blocked Shot | Alexis Saelemaekers |
| 16' |
|
Ruben Loftus-Cheek | 0.08 | Open Play | Right Foot | Missed Shot | Rafael Leão |
| 27' |
|
Koni de Winter | 0.05 | From Corner | — | Blocked Shot | Luka Modric |
| 28' |
|
Alexis Saelemaekers | 0.02 | Open Play | Right Foot | Missed Shot | — |
| 31' |
|
Ndary Adopo | 0.03 | Open Play | — | Saved Shot | Sebastiano Esposito |
| 40' |
|
Luca Mazzitelli | 0.07 | Open Play | Left Foot | Missed Shot | Matteo Prati |
| 41' |
|
Youssouf Fofana | 0.03 | Open Play | Left Foot | Blocked Shot | Luka Modric |
| 46' |
|
Adrien Rabiot | 0.04 | From Corner | — | Missed Shot | Luka Modric |
| 48' |
|
Ruben Loftus-Cheek | 0.12 | Open Play | — | Missed Shot | Alexis Saelemaekers |
| 49' |
|
Rafael Leão | 0.29 | Open Play | Left Foot | Goal | Adrien Rabiot |
| 58' |
|
Davide Bartesaghi | 0.03 | Direct Freekick | Left Foot | Saved Shot | — |
| 69' |
|
Semih Kiliçsoy | 0.08 | Open Play | Right Foot | Blocked Shot | Marco Palestra |
| 86' |
|
Christian Pulisic | 0.10 | Open Play | Left Foot | Saved Shot | Niclas Füllkrug |
| 89' |
|
Luka Modric | 0.04 | Direct Freekick | Right Foot | Saved Shot | — |
Players
AC Milan
| Player | Min | G | A | Sh | KP | xG | xA | xGChain |
|---|---|---|---|---|---|---|---|---|
| Koni de Winter DC | 90 | 0 | 0 | 1 | 0 | 0.05 | 0.00 | 0.51 |
| Adrien Rabiot MC | 90 | 0 | 1 | 1 | 1 | 0.04 | 0.29 | 0.49 |
| Luka Modric MC | 90 | 0 | 0 | 1 | 3 | 0.04 | 0.12 | 0.25 |
| Davide Bartesaghi DC | 90 | 0 | 0 | 1 | 0 | 0.03 | 0.00 | 0.40 |
| Alexis Saelemaekers DMR | 90 | 0 | 0 | 1 | 2 | 0.02 | 0.23 | 0.63 |
| Fikayo Tomori DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.20 |
| Mike Maignan GK | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Ruben Loftus-Cheek FW | 80 | 0 | 0 | 2 | 0 | 0.20 | 0.00 | 0.31 |
| Estupiñán DML | 80 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.10 |
| Rafael Leão FW | 70 | 1 | 0 | 2 | 1 | 0.39 | 0.08 | 0.47 |
| Youssouf Fofana MC | 70 | 0 | 0 | 1 | 0 | 0.03 | 0.00 | 0.31 |
| Samuele Ricci Sub | 20 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.10 |
| Niclas Füllkrug Sub | 20 | 0 | 0 | 0 | 1 | 0.00 | 0.10 | 0.10 |
| Christian Pulisic Sub | 10 | 0 | 0 | 1 | 0 | 0.10 | 0.00 | 0.10 |
| Matteo Gabbia Sub | 10 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.10 |
Cagliari
| Player | Min | G | A | Sh | KP | xG | xA | xGChain |
|---|---|---|---|---|---|---|---|---|
| Marco Palestra DMR | 90 | 0 | 0 | 1 | 1 | 0.09 | 0.08 | 0.17 |
| Ndary Adopo MC | 90 | 0 | 0 | 1 | 1 | 0.03 | 0.09 | 0.12 |
| Sebastiano Luperto DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Elia Caprile GK | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Gabriele Zappa DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.09 |
| Juan Rodríguez DC | 90 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Semih Kiliçsoy FW | 84 | 0 | 0 | 1 | 0 | 0.08 | 0.00 | 0.17 |
| Luca Mazzitelli MC | 84 | 0 | 0 | 1 | 0 | 0.07 | 0.00 | 0.15 |
| Sebastiano Esposito FW | 67 | 0 | 0 | 0 | 1 | 0.00 | 0.03 | 0.10 |
| Matteo Prati MC | 62 | 0 | 0 | 2 | 1 | 0.03 | 0.07 | 0.11 |
| Adam Obert DML | 62 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.07 |
| Gennaro Borrelli Sub | 28 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Riyad Idrissi Sub | 28 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Gianluca Gaetano Sub | 23 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.08 |
| Nicolò Cavuoti Sub | 6 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| Leonardo Pavoletti Sub | 6 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 |