Skill rating update with IVK Skill 2.0

IVK Skill 2.0 introduces session modeling: skill ratings based on who was actually in the match together, and for how long.

Vira Suarez·PRODUCT·Sep 08, 2026

TL;DR

There are a ton of updates in IVK Skill 2.0; this one covers how we went from comparing players to comparing sessions in determining player skill ratings (MMR).

  • IVK Skill 1.0 compared players > IVK Skill 2.0 compares players’ overlapping match time
  • Why? Increases fairness in skill ratings!
  • Bonus: Accounts for teams ending up shorthanded, without rewarding opponents rage quitting

You can watch our YouTube video covering this update, or keep reading!

The skill rating algorithm update

Comparing players in a match against each other seems like “the thing to do” to determine skill ratings. It’s what every skill rating algorithm does, and that’s exactly what we were doing with IVK Skill 1.0.

But plenty of multiplayer games allow players to join matches in progress (backfill) or to rejoin after getting disconnected. Treating these players the same as those who played the full match doesn’t really make sense.

Instead, IVK Skill 2.0 compares players on if and when they were in a match together AND fairly compensates players in ranked modes when their teammates quit early.

Comparing sessions instead of players

Comparing players based on if and when they were in the match together means that we’re processing a list of sessions, with one or more sessions per player.

fig1-ivk1-vs-ivk2-payload.jpg Fig. 1: IVK 1.0 processing players; IVK 2.0 processing sessions with timestamps

Here’s how IVK Skill 2.0 actually compares session data. Let’s say we have three players in a match with the following playtimes:

  • Player A: plays the full match
  • Player B: joins late and leaves early
  • Player C: gets disconnected in the middle, just rejoins toward the end

fig2-three-player-sessions.jpg Fig. 2: one match, three session histories

Step 1: identify events and encounters

The first thing we do is identify all the events, or state changes, where players join or leave the match. This allows us to look at every interaction period, or encounter, between every combination of players. This means that every interaction between any two players can be grouped and summarized into a relationship between the two players.

fig3-events.jpg Fig. 3: every join and leave becomes an event

In our example, we can see that even though neither Player B nor Player C played the full match, we still have two overlapping encounters that allow us to define their relationship.

fig4-encounters-to-relationship.jpg Fig. 4: the highlighted regions are all of Player B’s encounters with Player C

Step 2: create the relationship matrix

Once we’ve identified every player combination, we have a relationship matrix. This describes:

  1. the expected outcome of every player versus every other player — a bit like the probability of one player outperforming the other
  2. the actual outcome between those two players — usually a comparison of their scores per minute, normalized from zero to one, one way or the other*
  3. the importance of the relationship based on the data — things like overlapping time, uncertainty of ratings, different weights for same teams, parties, and bots

Step 3: determine the player’s new skill rating

After we have the full relationship matrix, we reduce each row into a single result. That tells us things like how we expected each player to perform, how they actually performed, and what their new skill rating should be.

fig5-relationship-matrix-to-results.jpg Fig. 5: each row reduces to one result per player

*Comparing players against themselves

The matrix also includes a comparison of players against themselves. This makes sense in specific cases, generally based around the details of the underlying skill model.

Basically, it’s an easy way to account for different sample sizes, because being the best player in a match with 100 players should be rewarded more than being the best of two.

Quick example: let’s say Player A had 50 points per minute, Player B had 100, and Player C had 20. We can put that into a binary outcome matrix where one means a higher score, zero means a lower score, and 1/2 is a tie.

The weighted comparison adjusts like this:

  • Zero weight → weighted average outcomes always span the full range from 0 to 1, regardless of player count
  • Equal weight → outcomes land at the midpoints of equal-sized partitions
  • Double weight → outcomes subdivide the 0-to-1 range at perfect intervals

It can make sense to normalize outcomes this way for modes with different player counts, like battle royales.

fig6-self-comparison-example.jpg Fig. 6: self-comparison weight as a sample-size correction

How to model team interactions

When we compare session data, we also model team interactions. Just like with the player data, we determine the events — when the teams change — and use those events to partition the match into a series of encounters between teams.

fig7-team-encounters.jpg Fig. 7: team encounters, built from the same session events

The process then is the same as with players: the encounters between every pair of teams are summarized into a relationship with net expectations, outcomes, and weights, and those form a relationship matrix that we can aggregate into per-team results. (Pretty straightforward with two teams, more complicated with… more.)

The team results are then combined with previously determined player results and ✨magically✨ turn into an updated player skill rating (MMR). The magic is so powerful that theoretically a player could switch teams mid-match and still get a fair skill rating update.

fig8-final-rating-updates.jpg Fig. 8: the rest happens by magic

Adjustments for ranked play

Ranked play is different, and our updates treat it that way. With these changes, we’re able to adjust ratings appropriately if your teammate(s) leave early. On the other hand, we don’t want opponents rage quitting to sabotage your ratings. That’s why even if one player on the other team drops out, we evaluate their skill from your team’s perspective as though they were always at full strength.

fig9-loss-forgiveness.jpg Fig. 9: your teammates leaving is forgiven; their teammates leaving is not exploitable

Want a full rundown of IVK Skill 2.0 and how it’s THE skill rating system to base matchmaking on? Let’s talk.

← PreviousHow to fix Call of Duty's matchmaking

Ready to solve
your matchmaking?

Talk to engineers who've shipped matchmaking at scale.

The Invokation wizard, casting