Leetify Rating is a win rate impact based and economy-adjusted player rating system for CS:GO. It rewards players based not only on who deals the final point of damage but also on the outcome of and contributions to all the duels they take part in.

In short, this rating solves a few existing problems in currently used ratings; namely that it is too easy to get a lot of credit from un-impactful kills, meaning kills against poorly equipped opponents and/or in situations where an opponent is heavily outnumbered and, when playing correctly, it is just a matter of who actually finishes them off, not if they will be finished off. With Leetify Rating, players will get punished harder for throwing rounds away against ecos, and the importance of that double-entry on a Deagle round will actually be rewarded.

The three main concepts that work together to produce the Leetify rating are:

  • Including trades meaningfully by analyzing duels instead of individual kills. In this article we will be using the term duel to describe a continuous engagement between any number of players on opposing teams. Looking at entire duels instead of individual kills avoids incorrect assignment of points when kills happen nearly simultaneously, as a traded kill has a dramatically different impact on the round than an untraded one.
  • Using the round win probability before/after duels to give out points. Round win probability depends on the economy of both teams at the start of the round as well as the number of people that are alive on each team before a duel begins.
  • Attribution of points based on contributions to the outcome of a duel rather than just for dealing the final point of damage in a kill. Treating assists as binary is outdated, because players can deal varying amounts of damage and flash opponents before their teammate gets the kill.

We will take an in-depth look at each of these concepts below.

Win probability model based points

When using a win probability model to give out points for in-game actions, what we do is that we evaluate the win probability before and after duels occur. If your team gained win probability through the event (such as if you get an untraded kill) you will gain points. If your team lost win probability during a duel that you were involved in, then you will lose points. An example where you may lose points during a duel is if you trade 1 for 1 in a 2v3 situation. There are higher odds of winning a 2v3 than winning a 1v2, so by trading 1 for 1 you decreased the odds of your team winning the round. Consequentially, you will lose points proportional to the decrease in win probability.

The idea behind using a win probability model as the basis for giving out points for a rating is that it gives us a way to gauge how important kills are across multiple dimensions at once. Most importantly we can include both the economy of the teams and, as the round progresses, how many players are still alive on each team. This means that the amount of points added or subtracted to a player’s rating is proportional to how much their actions changed the odds of their team winning, rather than kills being awarded points without context.

Rewarding players for beating the odds

An important thing to notice about a win probability model for this purpose is that it is not trying to be the perfect live-betting bot. We intentionally do not include things like specific positioning or specific skill levels of players, because a player over-performing in a round should be rewarded with points from our system. If our model knew that s1mple was more likely to win a 1v2 than the average player, then he would not be rewarded for doing so. Similarly, if our model included that someone had actually gotten into an insanely good position for an after plant and was a huge favorite in a big 1v1, then they, again, could not be rewarded properly for a great play. Focusing on the economic situation and the number of players alive on each team gives players plenty of room to differentiate themselves by making good decisions and hitting nice shots.

Handing out points based on trades

In practice, rounds of CS:GO are not described well as just a series of kills - trades are incredibly important for how the game is played, especially at a high level of play. To account for this, we have chosen to break each round into a series of duels. This has several implications for how to fairly distribute points as rounds progress.

We handle this by waiting for all trades to play out before assessing the resulting situation and rewarding points based on the game situation before and after all kills in the relevant duel. In other words, we consider a traded entry frag to bring the game directly from a 5v5 scenario to a 4v4 scenario and will reward points based on the win probability difference between those two states only. For duels involving more players, this means we can also go directly from a 5v5 to any other XvY game situation.

This solves a couple of issues, that this kind of model would otherwise have. First of all, it removes some pretty big variations that would otherwise occur based on what is often a random order of kills in duels between several players. A specific example: for a traded kill in a 3v4, it doesn’t matter which team got the first kill and which team traded it, because the resulting 2v3 will, on average, be the same situation in both cases. If points were given out on a per-kill basis, there would be a rather large difference between the points given out for the two possible paths there. Any actual positional advantage for the trading players team, in the specific round, will instead only be rewarded if they can actually use that theoretical advantage to do well in the rest of the round.

The other big thing this approach allows us to do is to reward/punish everyone from a team involved in the same duel based on the total outcome of the duel. The simplest case for this is giving a positive score to an entry-fragger even when they don’t actually land the first kill, but they get traded and the result is favorable for their team. This also means that someone who seemingly only did something positive in a duel can still lose points based on that duel, if it was, as a whole, detrimental to their team - because they were, from the model's point of view, partly responsible for them getting into a bad situation in the first place. They won’t lose the same amount as someone who just died without doing anything else though - that is handled by the last concept below. Additionally, all or some of that loss can be offset by their ability to still gain more rating in the rest of the round (since they’d usually still be alive).

Contributions to duels

To still reward the players that contribute the most to the duels, we use a weighting system that looks at contributions to kills in duels and distributes the total round win probability difference as points for the teams based on those contributions. Specifically we give the following weights to different actions related to kills:

  • Getting the kill - 35%
  • Damage dealers - 30%
  • Traded players - 20%
  • Flash assisters - 15%

Flash assists here are based on the Leetify definition, not the definition for the in-game scoreboard:

  • Includes your own kills on an enemy that you flashed
  • Does not include half-blind players

If a kill doesn’t actually have all these contributions, the other ones will scale up to a total of 100%. For example: if there are no trades and no flash assists, the killer will instead get 54% and the damage dealers will share 46% of the contribution. It’s also worth noting that a player can be both the killer and damage dealer.

For duels with several kills, the contributions for all kills will be added for each player and the total score given to each player will be based on these summed contributions. When a team is losing points from a duel, the players will of course instead lose fewer points with higher contribution to the duel.

Damage dealt outside of the current duel (for example 1 minute earlier at the start of the round on a player that only dies in a post-plant duel at the end of the round) will not make a player count as included in a negative score duel for the team. For a positive score duel, having dealt damage to a killed opponent earlier in the round will give you part of the damage dealers contribution, even if you didn’t actually participate in the actual duel where the opponent ended up dying.

Examples of Leetify Rating calculated in a single round

Below are two examples of how Leetify Rating was calculated across a single round. Keep in mind that when someone gains rating, rating is also removed from the team (and players involved) that lost the duel.

Example of how Leetify Rating is calculated.
See a clip for the corresponding round here. Click the image for a larger version.
Example of how Leetify Rating is calculated.
See a clip for the corresponding round here. Click the image for a larger version.

Benchmarks for Leetify Rating

To more easily help you understand what is a good or bad performance in Leetify Rating, here are our benchmarks for Leetify Rating:

  • Great: Above +7.43
  • Good: Between +3.04 and +7.43
  • Average: Between -3.04 and +3.04
  • Subpar: Between -3.04 and -7.43
  • Poor: Below -7.43

As you can see, this rating is symmetric about zero. Zero means you did not change your team’s odds of winning the round on average. A positive rating means the player tended to improve their team's odds of winning, and a negative rating means that the player tended to hurt their team’s odds of winning the round.

These benchmarks are computed across all Leetify users on a single-match basis. The average range corresponds to one standard deviation from the mean, good and subpar are defined by two standard deviations, and great and poor are set by three standard deviations. These benchmarks are not applicable when rating is averaged across many matches, as this will change the variance of the dataset.

Future upgrades

While this rating improves on previously used ratings by taking more of what actually matters in terms of winning games of CS:GO into account, there are still limitations and edge-cases where, through chance or through actively looking to simply maximize your rating instead of winning the game, you can get to situations where the goals of getting a high rating and winning the match are not completely aligned.

We recognize that Leetify Rating is not perfect and as such already have a few things we’re considering for future updates, among those are updates to the win probability model (or even possibly moving to a map win probability model instead of a round win probability model), even more advanced logic for handling trades and better dealing with calculating rating for players who (correctly) choose to save equipment and thereby lose the round.

With that said, we feel like the rating system is already in a place where it’s significantly better than anything else out there, and will now enter a period of gathering data from its live implementation as well as feedback from both our user base and the wider CS:GO community as a whole. Once that’s done, we intend to continue updating Leetify Rating until it’s as near a complete system as a “single metric” can be for valuing player’s impact.

Any such future updates will be properly communicated with the community and will be made in a way that minimizes confusion when comparing matches from different versions of Leetify Rating.

We want your feedback!

As always, you are our most valuable resource! Let us know on the Leetify Discord how you feel about the rating, if you find any situations where it behaves strangely, or how accurately you feel it depicts the different players' impact in a match.