Sunday, February 13, 2011

Understanding The Matchmaking System in Starcraft II

update: The response to this post has been tremendous and thanks so much for reading.  I'll try to post an addendum in the next couple days to address many of the common questions about the information contained herein.

Again, I am more than happy to have help in further demystifying the MMR system, working to improve the accuracy of these unknown constants, and determine precisely how the moving average works rather than just generally so as to help all players make use of this data, not just the active ones.

Please don't hesitate to message me in game or shoot me a private message on TL or reddit to exchange personal information.  Thanks again.


MMR is your Matchmaking Rating, a hidden rating that Blizzard uses to determine your skill as a player, relative to other players.

This post will seek to explain the elusive hidden MMR system, and how you can use it to determine your ranking relative to other players on your server.  It begins as simple as I can make it, and will increase in complexity the further you scroll.  (Scrolling faster will increase the slope of complexity as a function of time, so be warned!)

I hope that in sharing this information, you, the reader, can have a better understanding of where you are as a player.  Further, with your own data, you can help refine some of the current estimated variables and constants.

"No way I'm reading all this--just give me the executive summary. I only want a general idea so I can go back and play more Starcraft II":

Okay. It takes about 15 minutes to give the most accurate promotion projection, but in 30 seconds or less you can assume a few common variables and simplify it to this formula:

P = Rank Points
U = Unspent Bonus Pool
B = Total Bonus Pool (2669 as of 12:21PM KST*)
W = Win Percentage
M = Magic Number
Pp = Rank Point Differential (This is what we're calculating)
* you can check a team with only 5 games played for realtime, or add 1 point per 112 minutes to estimate.

Pp = P + U*W*2 - B

Depending on your current league, compare Pp to the following magic numbers:

Bronze (to Silver) - 500 or 1000
Silver (to Gold) - 250
Gold (to Platinum) - 250
Platinum (to Diamond) - 250
Diamond (to Master) - 475
Master - Add 2225. This is your real, actual hidden MMR.

The closer you are to the magic number, the closer you are to promotion.

If you want to know a rough number of games it will take you, use the following equation:

W = Win %
Pp = Rank Point Differential
M = Magic Number
A = Average Win (bonus pool adjusted)*
B = Average Loss
G = Games required for promotion. (This is what we're calculating.)
*Bonus Pool matches your earned points from a win.  Subtract out these gained points from each win.

G = 5 + [M - Pp] / [W*A + (W-1)*B]

or if you want to just use observed averages for A (13) and B (11):

G = 5 + (M - Pp) / (24W - 11)

Want to know your MMR relative to players in other leagues?  Add your Rank Point Differential to the number corresponding to your current league in the following chart:

Bronze - 0 or 500
Silver - 1000
Gold - 1250
Platinum - 1500
Diamond - 1750
Master - 2225

MMR = Matchmaking Rating
Pp = Rank Point Differential
C = League Conversion Constant

MMR = Pp + C

Okay, now that that's out of the way, here are the meat and potatoes of how everything works, why it does, and what I still am still trying to understand:

Rank Point Differential and the Bonus Pool

Your Rank Point Differential (Pp) is a metric used to rank you relative to your peers.

Someone may have told you that you rank points, the bonus pool, and your win percentage have nothing to do with your league promotion. Strictly speaking, that is a correct statement.

Why, then, are these variables included in calculating an accurate skill ranking metric? Because all three of these skew each other to make them useless. Once we work backwards to decontaminate your data, it becomes useful again.

The bonus pool skews your displayed rank points, which come directly from your and your opponent's MMRs when you play a match. It serves two functions for us--it clouds our perception of relative ranking, and it allows us to calculate our MMRs if we assume that we've played more games (in some cases, a lot more games). The lower your bonus pool, the more accurate it is.

Now, where does win percentage come in? Here's an equation I originally used when i started this:

P = Rank Points
U = Unspent Bonus Pool
B = Total Bonus Pool (2669 as of 12:21PM KST*)
Pp = Rank Point Differential (This is what we're calculating)

Pp = P + U - B

This equation is very simple, and while it can be very accurate, it's incomplete because unspent bonus pool assumes a win rate of 50%. Consider the following two calculations:

Pp = 1000 + (.50)(2000)(2) - 2669 = 331

Pp = 1000 + (.55)(2000)(2) - 2669 = 531

Since the observed magic number for Diamond to Master (for most players, more on this in a moment) is 475, equation 1's assumption of 50% future win rate shows that he is not close to promotion, while using the current win rate in equation 2 shows that he is looking at an imminent promotion.

Once we skew the unspent bonus pool in the same way that the spent bonus has skewed the displayed rank points, we can factor the bonus pool completely out, and are left with the rank point differential, an accurate relative ranking metric.  But this equation is still incomplete as it assumes other variables yet to be discussed (see Division Tiers).

The Magic Number

The Magic Number (M) is the observed point differential it takes the average player to earn a promotion.  It is different depending on your league, and for some players depending on your division within that league.

Making your Pp small will not get you promoted (okay couldn't resist).  The Magic Number is a target for something called your Moving Average (MAx) over a certain number of your last games (x).  Eclipsing M with Pp will reveal that you are (one exception, see Inactivity) very close to promotion.  For an active player, eclipsing M with MAx will get you promoted.

The values for M listed in the introduction are for most players in one of the division tiers predominating.  They are approximations based on observed data, and I estimate them to be correct within 1.1% error over the sum of these numbers (meaning the sum of their errors is no more 25 points--the expected value of the Master League is 2250, not 2225).

Division Tiers: Diamond

Not all divisions are created equally.  When 1.2 was released, it became apparent that there was some hidden cutoff for Diamond players such that they could be promoted to Master League with a single win.  However, for players with no bonus pool, the point values required for single-game promotion varied by division.  It was revealed that the Master League has no division adjustments, and so you can easily rate yourself relative to other players in the Master League.  After some analysis, division tiering became apparent.  But why would Blizzard do this at all?

Here is where we start getting into the brilliance that is Blizzard.  If you want to maximize activity in your game, you need to get as many people to play as often as they can, and eliminate as many negatives associated with playing the game as possible.  By creating divisions at all, it allows more players to see themselves in the top 10 (or #1).

But what if you don't ever improve as a player?  Blizzard added the Bonus Pool so that, even with a 50% or lower win ratio, you will almost always win more points than you lose when you play a game.  This means that your rank points are highly correlated with your number of games played, and by association, your spent bonus pool.

And what if you are the worst player in your division?  Blizzard created division tiers to solve this problem.  Every league is subdivided into tiers that further divide players beyond the six displayed leagues.  By comparing the weekly top 200 rankings after the release of 1.2, it can be shown that there are seven division tiers:

Rank 6 Diamond: +315 offset
Rank 5 Diamond: +252 offset
Rank 4 Diamond: +189 offset
Rank 3 Diamond: +126 offset
Rank 2 Diamond: +63 offset
Rank 1 Diamond: 0 offset
Rank-i Diamond: -63 offset

Since you are grouped in Diamond by players with moving averages no greater than 62 points away from you (at least upon promotion), everyone in your division is more or less equally skilled.  Because of this, the more games you play, the higher your division rank will be.

That means that your division rank will increase as you play more games.  It also means that just playing more games won't get you promoted.  You actually have to get better at the game and improve your skill rating.

The Rank 1 Diamond division is by far the most common division in Diamond.  This is because when your moving average settles in the appropriate range, you are promoted to the corresponding division.  For active players who see only gradual increases in skill over time, Rank 1 Diamond is the lowest possible Diamond division that can be promoted to.  For players with sharper increases in skill, there are higher rank divisions available to equalize you with players at your level.

So if Rank 1 is the lowest division, why is there a lower division and why isn't that Rank 1?  Rank-i is a special division tier for mostly inactive or very casual players with the skill level to be in Diamond, but a spurious activity level makes more accurate promotion impossible.  These players, should they ever desire to be promoted into the Master League, must become active players in order to offset the superficial disadvantage instilled upon them.

Blizzard does this for two reasons:  first, since a player who is historically inactive is likely to remain inactive, it consolidates all the known inactive players in the same few divisions. Second, it allows for the more active players to see a more competitive division, which further promotes activity. (See Inactivity)

Division Tiers: Bronze to Platinum

Since it has been shown that not all Diamond divisions are created equally, does it follow that not all lower league divisions are created equally?  Yes it does.  While currently I haven't confirmed the existence of all of these due to focusing my efforts on Diamond to Master promotion, The following is, I believe, a close representation of league division tiers:

Rank 1 Master: 0 offset
Rank 6 Diamond: +315 offset
Rank 5 Diamond: +252 offset
Rank 4 Diamond: +189 offset
Rank 3 Diamond: +126 offset
Rank 2 Diamond: +63 offset
Rank 1 Diamond: 0 offset
Rank-i Diamond: -63 offset
Rank 1 Platinum: 0 offset
Rank-i Platinum: -63 offset
Rank 1 Gold: 0 offset
Rank-i Gold: -63 offset
Rank 1 Silver: 0 offset
Rank-i Silver: -63 offset
Rank 1 Bronze: 0 offset
Rank 0 Bronze: -500 offset
Rank-F Bronze: ????
(note: for players in not in Rank 1 Divisions, these numbers are based off slightly antiquated and referenced data that I believe to be less accurate.  I will update them as I gather more data.)

For each league, most players will be placed or promoted into a Rank 1 Division.  Rank-i Divisions exist exclusively for players classified as "inactive" (See Inactivity).  The Rank 0 Bronze Division is for the lowest skilled players.  Bronze my have as many or more division tiers than Diamond, but as my data was focused more on Diamond and Master Leagues, these are the two I have observed.

Rank-i and Rank 0 Division players face the same uphill climb that every Rank 1+ Division player will face, but are penalized superficially for being inactive or lower skilled players.  This penalty is purely a means for grouping and is a consequence of skill and activity, not an effect.

Determining Your Division Tier

As aforementioned, most players are in a Rank 1 Division.  Some Diamond Divisions became known in the first weeks of 1.2 due to the top 200 being interspersed with Diamond and Master League Players (as well as other archival data gathering techniques).  But what if you aren't in one of the known Diamond divisions and you aren't in a Rank 1 Division?  How can you determine your Division Tier?  This is a somewhat labor-intensive endeavor and only necessary for the most accurate standing assessments.

In order to determine your Division Tier, you must see the Pp of many players in your division (okay, last joke I promise).  You must take a snapshot of your Division such that you can calculate the Rank Point Differentials (Pp) of at least some players in your division, preferably the most active players.

In order to calculate Pp for another player in your division, you must know his Unspent Bonus Pool (U) at the time of your snapshot (as well as the total Bonus Pool, B, which is the same for every player).  You can either access your URL by logging into your account on and then accessing your profile through the webpage, or you can check in game by accessing your Division from the profile of another player.  Only by doing one of these two things can you see U, enabling calculation of Pp for each player.

Unless someone is benevolent enough to code a better way, I recommend using the following method:

STEP 1) Make a spreadsheet.  In this spreadsheet, you need to log the Player Name, Points, Wins, Losses, Win %, Unspent Bonus Pool, and Total Bonus Pool.

If you access your division by using a similar link:, you can copy paste this all into Notepad and then Excel.

STEP 2) Add columns for Win % [For example,  =D3/(D3+E3)], Unspent Bonus Pool (which you will log manually ad nauseum), and finally, Rank Point Differential ( =P + U*W*2 - B)

STEP 3) Compare the Pp values across as many of the players in your division are you cared to do.  Whatever the highest numbers cluster around is your division's Magic Number (M).  For reference:

Bronze - 500
Silver - 250
Gold - 250
Platinum - 250
Diamond - 475

The Pp values should range from negative to the League Conversion Constant C.  If you are in a Rank 1 League, then you will confirm this is your Magic Number.  If you spot clustering more than 60 points away from these numbers, refer to the following table regarding believed division tiers (reposted for reference):

Rank 1 Master: 0 offset (2225)
Rank 5 Diamond: +252 offset
Rank 4 Diamond: +189 offset
Rank 3 Diamond: +126 offset
Rank 2 Diamond: +63 offset
Rank 1 Diamond: 0 offset (1750)
Rank-i Diamond: -63 offset
Rank 1 Platinum: 0 offset (1500)
Rank-i Platinum: -63 offset
Rank 1 Gold: 0 offset (1250)
Rank-i Gold: -63 offset
Rank 1 Silver: 0 offset (1000)
Rank-i Silver: -63 offset
Rank 1 Bronze: 0 offset (500)
Rank 0 Bronze: -500 offset
Rank-F Bronze: ????

Whichever the Pp values appear closest to is very likely your division tier.

If you see anomalous Pp values that far exceed the value of M for a Rank 1 Division in your league, that player is not an active player (see Inactivity).

If you see that many players players far exceed the value of M for a Rank 1 Division in your league, you will also observe that many players have very high bonus pools in your league.  This means your division is Rank-i.

The Matchmaking Rating Equation

The equation for calculating the Rank Point Differential (Pp) was admittedly simplified in the introduction.  There, you are assumed to be in a Rank 1 Division in your League.  If you aren't in a Rank 1 Division, Pp will be off by some constant factor (K):

P = Rank Points
U = Unspent Bonus Pool
B = Total Bonus Pool
W = Win Percentage
M = Magic Number
Pp = Rank Point Differential
C = League Conversion Constant
K = Division Modifier

Pp = P + U*W*2 - B + K

This is the Rank Point Normalization Equation.  It converts your displayed Rank Points into a metric that compares you to any other player in your league.  To compare with any other player on your server we simply calculate your MMR by adding the corresponding conversion constant C:

MMR = Pp + C

Consequently, the full Matchmaking Rating equation is:

MMR = P + U*W*2 - B + K + C

While this doesn't yet hint at how itis calculated, this equation does determine your current MMR.


There are divisions which seek to group identified inactive players together, but there are also active players who go inactive.  Blizzard designed the ladder to penalize inactive players so that they can't game the system. As my data on inactive players is much more limited, I can only speculate as to how this works.

Inactive or spuriously active players must not only eclipse but tend to far exceed the Rank Point Differential required for promotion.  In most cases, an inactive player in a division may have a Pp value indicative of imminent promotion, but will still fail due to lack of activity.

In the samples of data I have analyzed, it seems as though inactivity accrues a sort of "debt" that must be worked off by playing more games.  This debt appears to be lighter in lower divisions and heavier in higher divisions, although this may simply be a consequence of Rank-i division analysis.

If you are an inactive player, it is possible to calculate both your Pp and MMR, but because of this unknown Inactivity Debt variable (D), it is not possible to accurately predict your proximity to promotion.

Anomalies and Apparent Outliers

So, what of players who appear forever shackled to top rank(s) of his division?  Is the system broken for you?  Is it treating you unfairly?  Let's do a quick example together by analyzing the top-ranked Bronze Player in the world:

At 293-238, with 3821 points, this player just can't seem to be promoted.

Solving the Rank Point Normalization Equation:

Pp = P + U*W*2 - B + K

Pp = 3821 + 9*(.5518)*2 - 2671 + K

Pp = 1160 + K

Now, let's try and determine K by looking at the Pp values of other players in his division:

In this division, we see that most of the players are ABOVE the M value for (500).  Further, most players have inordinately high bonus pools (although this is likely not unexpected given that many players in Bronze are inactive.

If we assume Rank 0 Bronze (K= -500), we get a more likely representation of what's going on, with the more active players hovering near or just below M.  Yet our unfortunate Bronze player is STILL above this, as Pp-M = 160, and an MMR of 1160 (Mid-Silver).

What gives?

It is possible that of the millions of Bronze players, the #1 Bronze player in the world (by rank points) is in the most penalized Bronze Division with the highest possible Pp value, and an MMR just hovering at or very slightly under the promotion cutoff?

Alas, we still have just a bit further to go down the rabbit hole.

MMR and Moving Average

Only by analyzing a player's in-depth match history can we determine exactly when he will be promoted.  Once we can solve for all the unknown variables in the MMR Equation, we can calculate something called a Moving Average [MA(x)].

MA(x) is an attempt of the rating system to make your MMR less volatile as you play your games.  When moving average is not a factor in the rankings, higher volatility is observed (see Weekly Top 200 Rankings).

Before you can understand how moving average affects promotion, I must preface with a comment on my own data analysis:  For consistent, active players, a Simple Moving Average of 10 games [sMA(10)] can very accurately predict promotion timing from Diamond to Master League, and can predict lower league promotions with slightly lower accuracy.

It is not fully understood at this point what type of Moving Average enables promotion, nor how many games.  That said, sMA(10) currently predicts with high accuracy when a player will be promoted, by calculating the player's MMR after his last ten games.

Still, I am confident in saying that in order to be promoted, MA(x) needs only to eclipse the M value for your division.  Note that calculating your own Moving Average can be tedious, and unless you are in a Rank 1 Division, you may get only a very slightly get a better prediction on when you will see promotion.

The current data I have supports evidence of sMA(10) very accurately predicting promotion timings, but not with high enough accuracy to rule out other types of Moving Averages.

I theorize that part of the reason inactive players acquire Inactivity Debt (D) is due to the possibility that Blizzard uses a Modified Moving Average that places less weight on older post-match MMRs, and then averages sMA(x) with wMA(y).

For active players, this would not affect sMA(x), but for inactive players, it offers some credence to lack of promotion, despite sMA(10) eclipsing M, in some cases significantly.  Until enough data can be gathered, however, this is still unknown.

Calculating Your Simple Moving Average

In order to calculate your Simple Moving Average sMA(x), you need to have access to or maintain a detailed match history.

STEP 1) Create a spreadsheet.  You can use this example spreadsheet I have made: sMAxtemplate.xls

This is what sMAxtemplate.xls looks like.

STEP 2) Input all known constants and calculate your current MMR (see MMR Equation).

If you plan only to keep track of your moving average, you're done and can start laddering again.  After each game, update the knowns you know to calculate your new MMR, and then average the last X post-game MMRs to find out your sMA(10).

STEP 3) Locate your detailed match history in game.  This is preferred over websites because your 1's match history goes back almost to the start of this ladder season.

This is my match history on SEA.  All my losses are to map hackers.

STEP 4) Log the change in points retroactively.  Do this by subtracting your won points from your current Rank Point total, and adding lost points.

To account for the change in unspent bonus pool, add half the points won from a game back to your current bonus pool.  Because unspent bonus pool appreciates at the same rate that the total bonus pool does (1 point per 112 minutes), as long as you have never expired your bonus pool, you can assume that you played all your games at the same moment in time.
(note that if you consistently spend your bonus pool, retroactively determining your sMA(x) may be more work than just playing X games.)

STEP 5) Analyze your sMA(x) values.  For consistent and active players, sMA(10) has been shown to very accurately predict promotion timing.  For inconsistent and or inactive players, it is a lot more work for a slightly better prediction.

His sMA(10) eclipsed 2225 MMR when promoted into Master League.

STEP 6) Ladder more and help improve the accuracy of corresponding K and C values for your league and division tier.

Blizzard's Weekly Top 200 Rankings

Every week Blizzard releases a list of the top 200 players on each region by "pulling some internal numbers and doing a little math."  What does that mean exactly?

Let's look at the most recent Top 200 Rankings for the Korean Ladder, found here:

Merely a cursory glance at rank points reveals that this list is literally just an ordering of the Top 200 players by their rank points.  You will notice numerous ties, and in at least one case there is a four-way tie.

In each of those cases, all tied players had equivalent rank points and different bonus pool numbers.  I took a snapshot of the ladder 9-10.5 hours after it was posted, and then created a graph that maps the top 200 players with respect to both Rank Points and MMR.

Because I took the snapshot 9 hours after (and it took me over an hour during peak ladder times), you'll notice that the further right you go in the graph, the more volatile the data is.  This is a consequence of the time and duration of the snapshot and nothing more.

In every single case where MMR (green data points) doesn't line up with Rank Points (blue dot) it is because the player had unspent bonus pool.

In every single case where a blue data point is not equal or lesser than the preceding blue data point, the user had player at least one game between the time the top 200 was posted and the time I took the snapshot that evening.

Why does Blizzard rank the top 200 players exclusively by Rank Points, and not by MMR?  The reason is satisfying.  At the end of every top 200, Blizzard says the following:

"The top 200 1v1 players are determined across divisions by comparing their relative rankings and skill, while meeting certain requirements, such as ensuring that they're active."

Here, "ensuring they're active" means nothing more than penalizing players who haven't spent their bonus pool.  If all players have spent all their bonus pool, Rank Points are normalized independent of temporal inflation.  Any player that goes inactive, or isn't very active, is penalized in accordance with how much unspent bonus pool he has.

The take-home message here is that, if you are a Master League player with a desire to break into the top 200, in addition to playing at the highest level you can, you must spend all your bonus pool.

If we take a quick look at the latest Top 200 for SEA, a server plagued by inactivity:

The #200 player actually has one of the highest MMRs of any player on the server.  However, since he is not very active, he is so heavily penalized as to make only the last spot on the ladder.

Closing Comments

Hopefully for all the math nerds and those struggling to gain a better grasp the ladder system, this has been an enlightening read for you.  There is still some refining to do with constants related to promotion, as well as understanding how inactivity penalizes players with respect to league promotion.

If anyone is interested in coding some tool to help players more easily utilize these equations and models, you are more than welcome to strip any information you want from this page and claim it as your own.  With more data collection, the remaining few unknowns with respect to the ladder system will be uncovered (at least until Blizzard changes things around again).

Good luck, keep laddering, and I hope your Pp shrinks!

(You can contact me in-game at NA Michael.2640, SEA Michael.523, or KOR Michael.805.  All feedback and data submissions are appreciated.)


  1. I don't understand this man, I did the first calculation and it came out completely wrong? can you help me?

  2. I got a very low decimal for the number of games i need to play in order to get promoted. (0,0038) Pretty sure i did the math correct.

  3. Calculate your rating here, if you'd like:

  4. that chart isn't autofilling for me :/ how do i get it to work?

  5. Scroll down to an empty row with two #DIV/0! errors. Input your name, points, wins, losses, and unspent bonus pool. Find your "magic number" based on your league in the chart at the top of the page. Those errors will turn into values.

  6. I'm amazed no one has congratulated you for such a great piece of work. I read every word and loved it (especially the jokes). It was highly interesting and well written (even thought it depresses me to know I have 224 games ahead of me to get to Masters).


  7. Just so you know, I made a quick app to calculate your MMR, you can grab it here;

  8. I put together a web app to predict promotion based on your data here. It's using your simplest formula right now, but I'll be adding to it over the week as time allows to hopefully cover the most complex possibilities here.