Build your model
You now have four metrics for 30 countries. Combine them into one score and you have a model. You decide how much each metric counts.
Step 1 — Put every metric on the same scale
The platform does this for you: each metric is rescaled from 0 (worst of the 30 teams) to 100 (best).
Example — Spain, raw value → 0–100 scale:
| Metric | Raw value | Scaled (0–100) |
|---|---|---|
| Win Rate | 60.0% | 72.2 |
| Goal Difference | +1.28 | 95.3 |
| Momentum | +40.0pp | 100.0 |
| xG | 1.94 | 87.5 |
Step 2 — Choose your weights
Move the sliders: the ranking updates instantly. Score = Σ(weight × scaled metric) ÷ total of the weights, so it stays between 0 and 100.
Total of the weights: 100
100% ✓| # | Country | Score | Win Rate | GD/match | Momentum | xG |
|---|---|---|---|---|---|---|
| 1 | Argentina | 89.8 | 63.3% | +1.07 | +36.7pp | 2.10 |
| 2 | Spain | 88.8 | 60.0% | +1.28 | +40.0pp | 1.94 |
| 3 | Japan | 78.8 | 75.0% | +1.25 | +25.0pp | 1.42 |
| 4 | Morocco | 71.0 | 57.9% | +0.84 | +22.1pp | 1.62 |
| 5 | Saudi Arabia | 68.6 | 77.8% | +1.22 | +22.2pp | 0.91 |
| 6 | Brazil | 65.9 | 65.2% | +1.39 | −25.2pp | 1.75 |
| 7 | Netherlands | 65.8 | 72.2% | +1.17 | −12.2pp | 1.50 |
| 8 | Portugal | 62.7 | 44.4% | +0.72 | +15.6pp | 1.63 |
| 9 | France | 60.9 | 52.4% | +0.67 | −12.4pp | 1.90 |
| 10 | Germany | 60.3 | 41.2% | +0.41 | +18.8pp | 1.68 |
Step 3 — Keep a test journal
Try at least 3 different weightings and save each one. Notice which team stays on top whatever you do.
No test saved yet: your current sliders count as your choice.
Step 4 — Check it in Python
What is Python?
A language to give a computer precise instructions, step by step — like a recipe.
What does it do here?
It applies your scoring rule to all 30 countries in one go, then ranks them.
Why is it better than Excel for this?
You write the rule once and re-run it instantly on 30 or 30,000 rows: no dragging, no copying. The same recipe works with next year's data, and anyone can read and share it.
What this code does, line by line
teams— our list of 30 countries, each with four scores from 0 to 100.for team in teams:— do the same thing for every country, like dragging a formula down.team["score"] = …— multiply each metric by its weight and add them up.sorted(…, reverse=True)— reverse=True means the biggest score comes first.[:…]— keep the leading teams for the podium.print— show the result.
You don't need to already know Python: we've written almost all of the code for you, you'll only fill in 3 blanks. Hover or tap a blank for a hint, then run your code: it must find the same podium as the platform.
Your variables
teams30- the 30 countries and their four 0–100 scores
w_win0.25- your Win Rate weight
w_gd0.25- your Goal Difference weight
w_mom0.25- your Momentum weight
w_xg0.25- your xG weight
Weights are shown as fractions of your total (they add up to 1). They follow your sliders.
Tip: on a phone or tablet, tap a blank to see its hint.
Why should xG carry weight in a World Cup model?
What did this model not take into account that a real analyst would include?
Reflect before you build
- In a 7-match neutral-ground tournament, is long-term Win Rate or recent Momentum a more reliable predictor?
- A team can win many matches without creating many chances. Which metric better exposes luck: Goal Difference or xG?
- Which metric do you trust the least in your data? Is there a case where one metric is clearly misleading?
- If you could only use one metric, which would you choose? What would you lose by ignoring the others?

