One question that comes up when first getting into CS:GO eSports is the role that the economy plays in the game. Players and viewers new to the game sometimes do not realize that you do not get the same weapon(s) every round, as you might in other first person shooter (FPS) eSports such as Call of Duty. Instead, the economy adds a layer of complexion to what is otherwise a painfully simple game.

Put simply, at the beginning of each round, there is a freeze period with no action in which players are able to purchase weapons and grenades for themselves and their teammates (grenades cannot be transferred). Money is accumulated in the course of normal play through completing objectives such as eliminating opponents, planting or defusing the bomb, and winning rounds. In order to make things interesting for the losing team, however, there is a progressive round loss bonus. If you are trying to understand the game on a deeper level, it may be worth your while to read more about this loss bonus system, since it is more detailed than I want to go in this article.

All in all, at the beginning of the round, based on the map score and economies of both teams, each team generally decides on an economic strategy for that particular round (which also affects future rounds). This “buy” decision takes a few general forms:

The goal of this article is simply to assess the win rates for these differing strategies. The analysis differentiates between T and CT sides, since the weapons purchasable by each side differ. Additionally, I will adjust for the map win rates for each side.

econ_data<- DBI::dbGetQuery(con, "select m.map, r.round_id,
       (cast(r.side = 'T' as integer)*(r.t_elim + r.t_exploded) + 
        cast(r1.side = 'T' as integer)*(r1.t_elim + r1.t_exploded)) as t_win,
       (cast(r.side = 'CT' as integer)*(r.ct_elim + r.ct_defused + r.ct_time) + 
        cast(r1.side = 'CT' as integer)*(r1.ct_elim + r1.ct_defused + r1.ct_time)) as ct_win,
       (cast(r.side = 'T' as integer)*e.value + 
        cast(r1.side = 'T' as integer)*e1.value) as t_value,
        (cast(r.side = 'CT' as integer)*e.value + 
        cast(r1.side = 'CT' as integer)*e1.value) as ct_value
from hltv_rounds r inner join hltv_rounds r1
on (r.map_id, r.round_id) = (r1.map_id, r1.round_id)
and r.team != r1.team
inner join hltv_economy e
on (r.map_id, r.team, r.round_id) = (e.map_id, e.team, e.round_id)
inner join hltv_economy e1
on (r1.map_id, r1.team, r1.round_id) = (e1.map_id, e1.team, e1.round_id)
inner join hltv_maps m
on m.map_id = r.map_id
inner join hltv_matches mtch
on m.match_id = mtch.match_id
where age(now(), mtch.match_time) < interval '12 months'
and r.round_id not in (1,2,15,16)
and m.map != 'Default'
and (cast(r.side = 'T' as integer)*e.value + 
        cast(r1.side = 'T' as integer)*e1.value) is not null
and (cast(r.side = 'CT' as integer)*e.value + 
        cast(r1.side = 'CT' as integer)*e1.value) is not null
;")

econ_data$map<- trimws(econ_data$map)

HLTV defines the four “buy” decisions as follows:

Due to the similarity in prices of anti-eco weaponry and force buy, I have grouped both of these into one group. One way to improve this analysis in the future would be to get weapon purchase data, as opposed to simply having the amount of equipment value (as I have here).

## set cutoff vals
eco<- 5000
buy<- 20000

econ_data$t_class<- ifelse(econ_data$t_value >= buy, "FULL", ifelse(econ_data$t_value <= eco, "ECO", "SEMI"))
econ_data$ct_class<- ifelse(econ_data$ct_value >= buy, "FULL", ifelse(econ_data$ct_value <= eco, "ECO", "SEMI"))

First, we see the full buy vs full buy rounds for each map.

econ_data %>%
  group_by(map, t_class, ct_class) %>%
  summarize(count = n(), t_wins = sum(t_win), ct_wins = sum(ct_win)) %>%
  mutate(t_wr = t_wins/count, ct_wr = ct_wins/count) %>%
  filter(t_class == "FULL" & ct_class == "FULL")

We see that the full buy vs full buy rounds make up the vast majority of rounds played on each of these maps. The T/CT win rates for these rounds are very similar to the overall T/CT win rates for each of these maps, which verifies this fact. It is not surprising that the win rates are close to 50/50 since both teams having a buy round ensures that the firepower is nearly equal on both sides.

Perhaps more interesting, however, is how the full buys fare against an opposing eco round or a semi buy.

econ_data %>%
  group_by(map, t_class, ct_class) %>%
  summarize(count = n(), t_wins = sum(t_win), ct_wins = sum(ct_win)) %>%
  mutate(t_wr = t_wins/count, ct_wr = ct_wins/count) %>%
  filter(t_class == "FULL" & ct_class == "SEMI")
econ_data %>%
  group_by(map, t_class, ct_class) %>%
  summarize(count = n(), t_wins = sum(t_win), ct_wins = sum(ct_win)) %>%
  mutate(t_wr = t_wins/count, ct_wr = ct_wins/count) %>%
  filter(t_class == "SEMI" & ct_class == "FULL")

The T full buy vs CT semi buy results do not vary widely by map. Nuke, interestingly, has the lowest T win rate (71.63%) in this analysis. This might have to do with Nuke being a more “rotation-heavy” map, where teams can gain an advantage through team play, more so than on other maps. Inferno features the highest T win rate (76.27%) in this analysis. This makes sense given the heavy utility usage rate on Inferno: a CT semi buy either features full utility and limited firepower or limited utility and almost-full firepower (no AWP). As such, the T side can take advantage of the limited-strength CT side.

The T semi buy vs CT full buy results are slightly more interesting. The T win rates stretch from 22.4% (Train) to over 29% (Dust2). The interesting part, in my opinion, are the maps on which these extremes occur. The high T semi buy win rate on Dust2 might be explained by the feasibility of rushing (and holding) the B site. Often, rushing B on Dust2 at least ensures a bomb plant, which is essential for building the T economy. Of course, the B site on Dust2 is also very defendable once it is controlled. For the same reasons explained above, I was surprised to see that Inferno featured one of the higher T semi buy win rates vs full buy (28.25%). This could be because of the “rushability” of both sites, given that the CT side has a lot of ground to cover in order to rotate. On the lower end of the spectrum was Train, with a T semi buy vs full buy rate of 22.4%. This, of course, makes sense given the rifle-dependent nature of Train.

Overall, however, we see that the full buy vs full buy win rates hovered around 50/50, while the semi buy vs full buy win rates tend to be around 25/75, in favor of the full buy. Next, we will evaluate the eco buy vs full buy.

econ_data %>%
  group_by(map, t_class, ct_class) %>%
  summarize(count = n(), t_wins = sum(t_win), ct_wins = sum(ct_win)) %>%
  mutate(t_wr = t_wins/count, ct_wr = ct_wins/count) %>%
  filter(t_class == "FULL" & ct_class == "ECO")
econ_data %>%
  group_by(map, t_class, ct_class) %>%
  summarize(count = n(), t_wins = sum(t_win), ct_wins = sum(ct_win)) %>%
  mutate(t_wr = t_wins/count, ct_wr = ct_wins/count) %>%
  filter(t_class == "ECO" & ct_class == "FULL")

Unsurpisingly, there is not a ton of variation in these win rates by map. The T eco win rates vs CT full buy hover around 5%, while the CT eco win rates vs T full buy hover around 6-6.5%, with a couple of maps having a CT eco rate over 7%. This discrepancy makes some sense, given that the CT side has a slight advantage on most maps.

One interesting result from the eco analysis is that Dust2 and Inferno also have the highest T eco win rates against full buy. This echoes the T semi buy result as well, and I imagine that it is for the same reason.

In conclusion, I hope that this has provided a light primer into the economy in CS:GO and how it affects round outcomes. We see that the vast majority of rounds are full buy vs full buy, which feature a very even win rate for each side, with a slight difference in map effect. Semi-buy rounds are generally successful around a quarter of the time against a full buy, and eco rounds are generally successful around 5-7% of the time. Teams must make these economic decisions in a short “freeze period” before each round, so having a solid idea how often they can expect to win the round can factor heavily into their decision.