Roughly how Counterstrike Matchmaking Ranks work

I’m answering this question because it comes up often and many find this answer useful.

The algorithm behind Valve’s matchmaking for Counterstrike is closed source. It’s a secret and they don’t want you to know. They don’t want you to know how it works so you don’t cheat the system. If defusing the bomb helps your rank they don’t want you shooting team mates for it. It’s an intentional black box.

When people ask in forums how it works, others often say “no-ones so anyone who answers is lying” but those people are being ignorant. We don’t know how gravity works but we still don’t fly out into space. Valve have confirmed that the algorithm is based on a publicly known algorithm called “Glicko 2 [PDF]“. With that, and with experience of using the system as a community we have some understanding of how it works and this is generally useful enough to give you a picture.

To ensure no one feels misled the colour of the text reflects whether I gained the information from the Glicko 2 Algorithm, Valve (hyper-links are red), is a provable community fact or a community assumption.

Glicko 2 is based on Glicko 1 which is a based on Elo but adds more accuracy to it. I’ll explain Elo first then talk about Glicko 2 additions.

A simplified algorithm

Every Counterstrike player has a numeric value that represents their skill. Tony for example may have a score of 799. Every rank in the game is a “bucket” or range of values. Silver I is 0-400, Silver II is 401-800, Gold Nova is 801-1200 and Global Elite 1201-1600. So Tony would be Silver II. Obviously these aren’t the real numbers and there are more ranks, that is just a simplification. New players start with a default value and play out their placement games.

When you hit “Go” to start a game you’re gambling some of those points you have against other peoples’. Valve matches a game up by choosing people with similar scores, predicts an outcome (eg. Team A to win 16-13) and off you go. Beat Valves expectations and collect points. Fall short and lose them. The number of points that are exchanged depends on who you’re playing against. If you cross a rank boundary then you rank up or down. Simple!

Let’s look at a super simplistic algorithm. These 30 people hit Go to find a Dust II game and wait for the accept button:

Players looking for a game, sorted by rank.

Kevin  - 1600 GE    Luke   - 1207 GN     Perry   - 719 S2 
Matt   - 1600 GE    George -  903 GN     Alison  - 700 S2 
Ashley - 1500 GE    Kenith -  901 GN     Alex    - 699 S2 
Janet  - 1512 GE    Lisa   -  900 GN     Trish   - 687 S2 
Wanda  - 1422 GE    Jason  -  860 GN     Francis - 600 S2 
Dara   - 1350 GE    Mark   -  840 GN     Rupert  - 550 S2 
Wong   - 1250 GE    Nelo   -  840 GN     Sarah   - 500 S2 
Toby   - 1210 GN    Emit   -  810 GN     Jerry   - 456 S2 
Ellie  - 1209 GN    Tony   -  799 S2     Martin  - 433 S2 
Steve  - 1208 GN    Lidya  -  798 S2     Wesley  - 399 S1

Since this list is sorted, we can just make a game out of each column! Lets focus on the centre column as the game to expand the example on. Here we split the centre column into two teams, by putting the odd players in one team and the even on the other, swapping the bottom two players.

Team A              Team B

Luke   - 1207 GN    George - 903 GN
Kenith -  901 GN    Lisa - 900 GN
Jason  -  860 GN    Mark - 840 GN
Nelo   -  840 GN    Emit - 810 GN
Lidya  -  798 S2    Tony - 799 S2

We can apply the difference in skill over 30 rounds to work out an anticipated result. Now I know these teams could be more balanced. Balancing teams isn’t always easy. Lets assume some have queued together and it’s early morning. I’ve partly skewed the results on purpose. What happens below is completely made up for simple demonstration purposes. What Glicko 2 does here is run a rather difficult to explain iterative function (step 3 on page 2 of the PDF).

Team A total points - 4606
Team B total points - 4252

(4252 / 4606) * 16 rounds = 14

We expect Team A to win 16-14 over team B. If the game ends as a draw, Tony will get some of the points from the players on Team A. Then his score will rise from 799 into the 800+ range and he’ll rank up from the draw to be Gold Nova. If however the score turns out to be 16-14 as the system predicted, then people’s ranks are clearly accurate and there’s nothing to update. In fact now we have more confidence their rank is accurate.

This is pretty much the algorithm. All new players are dumped in around Silver 4 and they either sink or swim.

Glicko 2 Enhancements

What I brushed over earlier, to go back on is how Elo (or my fucked up example) relates to Glicko 2. Glicko 2 extends this system by providing two extra variables. A ratings deviation and a volatility. The first takes account of general fluctuations in your performance. The second, the systems confidence factor. That may go up or down based on whether you take a break from the game. New players have high values for both and those decrease the more games they play. Stop playing for a while and the value rises again. This is called rank decay.

The Glicko 2 algorithm discusses ranks only being updated after specific “rating periods”. Such as after an entire tournament. I’m guessing MM requires a number of results for a specific period before people rank up or down as well.

There are external influences on your rank. There was a time when most players were Gn3 or above. Everyone would hammer the noobs who left, inflating their points and points weren’t being recycled. Counterstrike now “smooths out the bell curve”. If all the Silver I players abandon the game, it would pull your Elo gradually downwards (obviously relational to the rest of the player base) to fill the void. If the Globals vanished, it’d pull your rank up. I assume there should always be a fixed ~0.4% in the global bracket. I expect the impact of other players is minimal however and thousands would have to leave to have any noticeable impact.

What we don’t know:

  • We don’t know how the algorithm works in a team based setting. The algorithm is designed for 1v1 type games like Chess or Tennis. Are the points shared equally or distributed based on points? Does KDA matter? Do you rank up faster if you top frag?
  • Valve’s matchmaking allows people of different ranks to queue together. We don’t know if that implies limits on the maximum or lowest Elo that can be exchanged.
  • I’m yet to see evidence that you can derank on a win or rank up on a loss. A draw yes. This leads me to assume that Valves implementation explicitly uses a condition before changing the visible rank, even though it does seem as though points can shift in the background. (A decayed MG1 account will still say MG1 but will queue their next game with 5 GN4s instead of other MGs)
  • We don’t really know what the rate of decay is.
  • We don’t know what impact surrendering does or what getting kicked does either.

Interesting tidbits:

  • If you join a party with someone who is caught cheating, your wins with that player are reset. So if you get a cheater to boost you into the higher ranks, their vac-ban will put your back in Silver I.
  • Losses to vac-banned players are reset.
  • If you don’t play in 28 days your rank disappears
  • Since your last competitive game, even before the 28 days is up, your rank is evidently deteriorating.
  • You must play the first ten games without a rank for the system to build confidence in where you belong. This is part of the Glicko 2 algorithm.
  • When two or more people join a party and queue for a matchmaking game, it drops you in the game with their skill level of the highest player. This enables people to rank up quickly if they play with experienced friends. According to the algorithm, queuing with 4 globals would be the fastest way to rank up as you’d be expected to lose but take bucket loads of points for each win. This did not used to be the case. It used to average the points out but because it allowed Globals to smurf in lower ranked games and was causing a problem they changed it [fuck source needed].
  • If you join a party of 2-4 players, everyone must be within 5 ranks of each other, otherwise the system doesn’t know how skilled the 5th should be.
  • In a party of 5, there is no requirement for everyone to be with in 5 ranks of each other.
  • Remember you can gain points on a loss if you beat the system, even if your rank doesn’t update. Winning games is the most important thing to take away from this though. Win consistently more than you lose and you should be ranking up
  • People ask “how many wins til I rank up?“. The answer is that there is no fixed value. It depends entirely on who you end up facing. If you face Globals and win then perhaps this game, if you face Silvers probably in a higher number of game’s time. No one knows ahead of time. It all depends on who you face. Who clicks Accept at the same time as you. Plus we don’t know when the rating periods begin and end.
  • So can I explain a picture of an unbalanced game with messed up ranks? Only that the Global in your Silver game has been playing ESEA and this is his first MM game in two months. His rank has decayed, his rank icon hidden from his own profile badge, but visible still on the scoreboard at the end of his first game back.

This post partially contains rumours and assumptions. I’ve tried NOT to hide them. If you spot them please point them out. If you have either supporting or non-supporting evidence please send it to me. Please be kind I am only trying to help people get a general gist. I know this isn’t totally accurate. I’m just tying to collect knowledge. The example of how Elo/Glicko works is super simplified too. If you want the real implementation, read the paper! This is just the ELI5 version.

For more information on Matchmaking Skill groups, this is the original announcement from Valve.