Skip to content
Back to blog

Team Up Blog

The Attribution Problem: Rating Individual Players in Team Games

| Team Up | 8 min read

A 5v5 win is one bit of information split five ways. How Elo assigns individual credit from a team result, why the naive even split is wrong, and what you can and can't fix with stats.

eloteam-gamesrating-theoryleaderboards

Elo was designed for chess. Two players, one result, and the entire outcome is attributable to the two people who produced it. Every rating system in competitive gaming inherits that design, and almost none of the games it gets applied to work that way.

In a 5v5, a win is one bit of information split five ways. Someone hard-carried. Someone was invisible. Someone actively lost the game and got dragged to a victory anyway, and all three walk away with a rating change. That's the attribution problem, and it is the single hardest thing about rating team games.

It doesn't have a clean solution. What it has is a set of partial answers with different failure modes, and the useful thing is knowing which failure you're choosing.

The Naive Answer, and Why It's Wrong

The obvious approach: compute one rating change for the team, then give each member an equal share. Team A beats Team B, the delta is +16, everyone on A gets +16.

This is wrong in a way that compounds. Consider a team of a 1000-rated player and a 1500-rated player against a team averaging 1200. They win. Under an even split both gain the same amount — but those two results carry completely different information. The 1000 player beating a 1200 average is genuinely surprising and should move their rating a lot. The 1500 player doing it is expected and should move theirs barely at all.

Give them the same delta and you've stopped measuring skill. Weak players on strong teams inflate steadily; strong players carrying weak teams stagnate. Over a season the leaderboard drifts toward "who queued with the best friends" rather than "who is good".

The Better Answer: Rate Each Player Against the Opposing Team

The approach Team Up uses — and the one most well-built team rating systems converge on — is to treat each player as having their own individual match against the opposition as a unit.

Each player's delta is computed from their own rating versus the opposing team's average rating. Not from the team's average versus the opponent's average. Their own.

Here's what that produces concretely. Two teams, K-factor 32:

  • Team A: 1000, 1150, 1200, 1350, 1500 (average 1240)
  • Team B: 1180, 1200, 1200, 1220, 1250 (average 1210)

If Team A wins, every member gets a different rating change:

Team A player Delta on a win Delta on a loss
1000 +25 −7
1150 +19 −13
1200 +16 −16
1350 +10 −22
1500 +5 −27

The 1000-rated player gains five times what the 1500-rated player does for the same win. And the asymmetry runs the other way on a loss — the 1500 player sheds 27 points for losing to a team they were expected to beat, while the 1000 player loses 7.

That's the correct behaviour, and it's worth stating why in plain terms: the rating system is not rewarding performance, it's updating a prediction. It predicted the 1500 player would win, so their winning teaches it almost nothing. It didn't predict the 1000 player would win, so that result is informative and moves them a lot.

Note also that the team's totals don't balance — +75 gained versus −85 shed in this example. Team-average Elo is not zero-sum when the two sides have different rating distributions, and trying to force it to balance is how you end up back at the even split.

What This Fixes, and What It Doesn't

This is the part most articles skip, so let's be direct about the boundary.

Fixed: the free-rider problem, statistically. A weak player repeatedly carried by strong teammates gains less each time as their rating climbs, until they reach a level where their wins are expected and stop earning. The system self-corrects, just slowly.

Fixed: the carry tax. A strong player dragging weak teammates isn't punished for winning games they should win — they gain little, but they lose a lot when they fail. Their rating ends up in roughly the right place.

Not fixed: within-match attribution. If your jungler plays perfectly and your mid throws at Baron, both get the same sign on their delta. The system has no idea who did what. It only knows the team lost and what each player's rating was going in.

Not fixed: small samples. All of this is a statistical argument. It works over hundreds of matches. Over the forty games a typical Discord league regular plays in a season, the noise is still substantial. This is why match volume, not cleverness, is the main determinant of whether a team-game leaderboard is any good.

That second one deserves emphasis because it gets oversold constantly: no rating system disentangles individual contribution from a win/loss result. Anyone claiming otherwise is either using performance stats (below) or selling something.

Can Performance Stats Fix Attribution?

The intuitive next step: stop rating on win/loss alone and start rating on KDA, damage, ACS, vision score — actual individual performance.

It genuinely helps, and it brings a new problem that's worse than people expect.

What you measure becomes what people optimise. Rate on KDA and you get players who won't take risky fights that would win the game. Rate on damage and you get farming instead of objectives. Rate on ACS and you get people who stop playing support roles entirely. Every performance metric is a proxy, and every proxy gets gamed the moment it has stakes attached — usually by your most competitive players, who are exactly the ones you least want to distort.

Win/loss has one enormous virtue as a rating input: it is the thing you actually care about, so optimising for it is just playing well. It cannot be gamed without winning more games.

The practical compromise most healthy leagues land on:

  • Rate on results. Elo moves on wins and losses only.
  • Track performance as custom stats alongside the rating, displayed but not scored.

You get the diagnostic value — who's actually carrying, who's quietly coasting, who's improving — without attaching incentives to a proxy. Humans can read a stat line and apply judgement. A rating formula can't.

The Structural Fix: Rate Narrower Things

The most effective response to attribution noise isn't a better formula. It's asking a narrower question.

A single rating per player in a five-role game blends five different skills into one number that describes nobody. Split it — rate each role separately, and each rating answers a question that's actually answerable. The LoL inhouse post works through this in detail, including the cost: your data splits five ways, so you need real volume before per-role ratings mean anything.

The same logic applies to any axis where the game is genuinely different: team size (a 3v3 rating doesn't predict 1v1), game mode, or map when maps are strategically distinct. Narrower ratings are more meaningful and slower to converge. That trade is the whole design space.

There's also the option of rating teams rather than players, when your league actually plays as fixed teams. If the same five people queue together every week, the team is the real competitive unit and rating it directly removes the attribution problem entirely — you're back to a clean two-sided contest. Team ratings sit alongside player ratings rather than replacing them, so a fixed-roster league can run both.

Modifiers That Deliberately Break Zero-Sum

Worth knowing, because they change how you should read a leaderboard.

Several optional features intentionally make a match non-zero-sum — the winner's gain doesn't equal the loser's loss:

  • Streak boost scales a delta by the streak a player carried into the match. Four independent arms: amplify gains on a hot streak, amplify the loss that breaks one, soften losses during a slump, or amplify the win that ends it.
  • Booster bonus grants a configured Discord role a percentage adjustment on gains, losses, or both.
  • Loss dampening reduces all losses by a fixed percentage.

All three are off by default and all three are casual-server perks, not competitive features. They exist because retention is a real problem for small communities and a player on a five-game losing streak is a player about to stop queueing.

But they cost you something specific: once ratings are non-zero-sum, the leaderboard is no longer a pure skill ordering. It's a skill ordering plus an engagement subsidy. That's a legitimate choice for a casual league and a bad one for a competitive ladder, so make it deliberately rather than by leaving a default on.

What To Actually Do

For a team-game league, in order of impact:

  1. Rate on results, not performance stats. Track stats separately.
  2. Get match volume up. Attribution noise is a sample-size problem before it's a formula problem, and nothing else on this list matters as much.
  3. Split ratings by role or format once you have volume to support it.
  4. Rate teams directly if your league plays fixed rosters.
  5. Set K-factor for your volume — team results are noisier per match than 1v1, so err lower. See K-factor curves.
  6. Leave the non-zero-sum modifiers off unless you've decided you want an engagement subsidy more than a clean ranking.

And set expectations with your community, because this is ultimately a social problem as much as a technical one. A team-game rating is an estimate built from noisy evidence. It will be wrong about individual players in individual weeks. Over a season, with enough matches, it converges on something true — and the people who understand that stop treating a bad night as an indictment.


Running a team-game league on Discord? Team Up rates each player against the opposing team's average, supports per-role and per-format ratings, and tracks custom stats alongside them. Start with the leaderboard setup guide, or read how rating systems compare for where Elo sits against Glicko and TrueSkill.