2026-09-22

What factors associated with a games popularity

Here we analyze several different components related to a game to determine if they can associated with a games popularity.

The total number of reviews is used as the measure of a games popularity.

Factors include:

-Positive review rate

-Price

-Genre

Steam Data

This dataset is from Steam, and includes:

## Number of games: 27075
## Average positive review rate: 71.4 %
## Median positive review rate: 76 %
## Average number of reviews: 1212
##                        name genres price positive_ratings
## 1            Counter-Strike Action  7.19           124534
## 2     Team Fortress Classic Action  3.99             3318
## 3             Day of Defeat Action  3.99             3416
## 4        Deathmatch Classic Action  3.99             1273
## 5 Half-Life: Opposing Force Action  3.99             5250
##   negative_ratings
## 1             3339
## 2              633
## 3              398
## 4              267
## 5              288

Data Preparation

The data was prepared for analysis by:

  • Creating total reviews variable from positive, and negative ratings

  • Calculating the positive review rate

  • Removing games with zero total reviews

  • Using log transformations for highly skewed variables to make data more presentable

  • Creating genre groups to compare them

g_clean <- games %>%
  mutate(
    tot_reviews = positive_ratings + negative_ratings,
    positive_rate = positive_ratings / tot_reviews * 100
  ) %>%
  filter(tot_reviews > 0)

Game Rating

The positive review rate is: \(\displaystyle \text{Positive Review Rate} = {\text{Positive Ratings} \over \text{Total Ratings}} \cdot 100\)

\(\displaystyle {900 \over 900+100}\cdot100 = 90\%\)

The game’s positive review rate is 90%.

\(\text{Total Reviews} = \text{Positive Ratings} + \text{Negative Ratings}\)

Game Rating histogram

Game Popularity

Here we use total reviews as the measure of popularity.

Reviews vs Ratings

Rating regression

#regression model
rating_model <- lm(
  log10(tot_reviews) ~ positive_rate ,
  data = g_clean
)

#results
summary(rating_model)
## 
## Call:
## lm(formula = log10(tot_reviews) ~ positive_rate, data = g_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.8569 -0.6528 -0.1026  0.5779  4.7146 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.1925901  0.0183032   65.16   <2e-16 ***
## positive_rate 0.0066434  0.0002435   27.28   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9359 on 27073 degrees of freedom
## Multiple R-squared:  0.02676,    Adjusted R-squared:  0.02672 
## F-statistic: 744.4 on 1 and 27073 DF,  p-value: < 2.2e-16

Rating vs Reviews regression

Game Price

The price are right-skewed, so a log transformation is used for analysis.

Price Regression

price_model <- lm(
  log10(tot_reviews) ~ log10(price+1),
  data = g_clean
)

summary(price_model)
## 
## Call:
## lm(formula = log10(tot_reviews) ~ log10(price + 1), data = g_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.5986 -0.6683 -0.0953  0.5672  5.1480 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       1.33587    0.01176  113.55   <2e-16 ***
## log10(price + 1)  0.48081    0.01497   32.13   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9311 on 27073 degrees of freedom
## Multiple R-squared:  0.03672,    Adjusted R-squared:  0.03669 
## F-statistic:  1032 on 1 and 27073 DF,  p-value: < 2.2e-16

Price vs Popularity

## NULL

Genre vs Popularity

genre_summary <- genre_data %>%
            group_by(genre) %>%
            summarise( 
              games = n(),
              m_reviews = median(tot_reviews)
            ) %>%
            arrange(desc(m_reviews))
            
genre_summary
## # A tibble: 7 × 3
##   genre      games m_reviews
##   <chr>      <int>     <dbl>
## 1 RPG         4311        61
## 2 Strategy    5247        46
## 3 Simulation  5194        41
## 4 Adventure  10032        39
## 5 Action     11903        37
## 6 Indie      19421        31
## 7 Casual     10210        22

Popularity vs Genre

Rating with Price

# Multiple regression with Rating and Price
RP_model <- lm(
  log10(tot_reviews) ~ positive_rate + log10(price+1),
  data = g_clean
)

summary(RP_model)
## 
## Call:
## lm(formula = log10(tot_reviews) ~ positive_rate + log10(price + 
##     1), data = g_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.6921 -0.6510 -0.0842  0.5677  5.0311 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      0.941955   0.019890   47.36   <2e-16 ***
## positive_rate    0.005885   0.000241   24.42   <2e-16 ***
## log10(price + 1) 0.442293   0.014889   29.71   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.921 on 27072 degrees of freedom
## Multiple R-squared:  0.05748,    Adjusted R-squared:  0.05742 
## F-statistic: 825.6 on 2 and 27072 DF,  p-value: < 2.2e-16

Rating, Price, and Popularity

Conclusion

  • Rating and price had statistically significant positive associations with popularity.

  • Together, rating and price explained about 5.75% of the variation in total reviews.

  • Median popularity differed across the genre groups examined.

  • Most variation remains unexplained, suggesting that other factors are also associated with game popularity.

Limitations

  • Total reviews are only a proxy for popularity.
  • Genre categories can overlap.
  • The dataset contains games only through May 2019.