Every prediction comes from the same pipeline, run before kickoff:
| Step | What happens |
|---|---|
| Data | Each team's last 10 internationals are scraped from Sofascore (via browser interception): goals, expected goals (xG), possession, corners, cards and goalscorers per match. |
| Strength of schedule | Every match is weighted by opponent quality — beating a minnow counts less than beating an elite side, and conceding to a weak team is punished. Ratings are normalized so an average international team = 1.0. |
| Context | Host-nation home advantage, travel/altitude fatigue and known absences are applied as adjustments. Neutral-venue games get no home boost. |
| Scoreline model | A Karlis–Ntzoufras bivariate Poisson turns the two expected-goal numbers into a full scoreline probability matrix, from which every market (1X2, over/under, BTTS, Asian handicap, scorelines) is derived. |
| Events | Card and red-card markets use the assigned referee's career rate blended with a World-Cup base rate; corners use both teams' for/against averages. |
| Calibration | After each match, model error (log loss) is measured and the internal weights are nudged conservatively (≤5% per match) toward the truth. |