Albert SchoolFIFA
Step 4 of 7

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).

Why? Win rate is a percentage, goal difference is around 1 and xG around 1.5. Without rescaling, the biggest numbers would dominate the score whatever weights you choose.

Example — Spain, raw value → 0–100 scale:

MetricRaw valueScaled (0–100)
Win Rate60.0%72.2
Goal Difference+1.2895.3
Momentum+40.0pp100.0
xG1.9487.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.

25%
25%
25%
25%

Total of the weights: 100

100% ✓
#CountryScoreWin RateGD/matchMomentumxG
1Argentina89.863.3%+1.07+36.7pp2.10
2Spain88.860.0%+1.28+40.0pp1.94
3Japan78.875.0%+1.25+25.0pp1.42
4Morocco71.057.9%+0.84+22.1pp1.62
5Saudi Arabia68.677.8%+1.22+22.2pp0.91
6Brazil65.965.2%+1.39−25.2pp1.75
7Netherlands65.872.2%+1.17−12.2pp1.50
8Portugal62.744.4%+0.72+15.6pp1.63
9France60.952.4%+0.67−12.4pp1.90
10Germany60.341.2%+0.41+18.8pp1.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

teams 30
the 30 countries and their four 0–100 scores
w_win 0.25
your Win Rate weight
w_gd 0.25
your Goal Difference weight
w_mom 0.25
your Momentum weight
w_xg 0.25
your xG weight

Weights are shown as fractions of your total (they add up to 1). They follow your sliders.

# The platform gives you: teams = a list of dicts, one per country. # Each metric is already on a 0–100 scale: win_rate_n, goal_diff_n, momentum_n, xg_n # Your slider weights are fractions of the total; find their names in the table above. Step 1 — Compute each team's score# Do the same thing for every country: for team in teams: # multiply each metric by its weight, then add them up team["score"] = (team["win_rate_n"] * w_win + team["goal_diff_n"] * w_gd + team["momentum_n"] * + team["xg_n"] * ) Step 2 — Rank the teams# Sort the teams from highest to lowest score ranking = sorted( teams, key=lambda t: t["score"], reverse=True ) # True = highest score first Step 3 — Keep the podium# Keep only the podium places top3 = ranking[:] # Show the podium for i, t in enumerate(top3, start=1): print(i, t["team"], round(t["score"], 1))

Tip: on a phone or tablet, tap a blank to see its hint.

Loading Python… (first time only, a few seconds)
Quiz — answer before moving on

Why should xG carry weight in a World Cup model?

Try different weights and run again. Does the ranking match what the data told you? A robust pick appears near the top across most weight combinations. If your favorite changes every time you adjust by 10%, your model is fragile.
Quiz — answer before moving on

What did this model not take into account that a real analyst would include?

Reflect before you build

Questions to guide your thinking:
  • 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?