Statitics for the NA server


Server Activity Statistics


Description

Ratio between players who have played in the last 3 months or not.

Code

stats/active_players.go

Methodology

  • count the number of players with ‘last battle date’ >= ‘current_date() - 3 months’
  • count the number of players with ‘last battle date’ < ‘current_date() - 3 months’

Display a pie chart with the 2 values and their respective ratio.

Caveats

None identified.


Description

This chart represent on x,y,z axis:

  • x: Month of Account creation
  • y: Month of Last Battle
  • x: Number of players who have created their account month x and played their last battle month y

This chart uses a logarithmic scale. The high number of players playing just for one or two months makes it necessary.

Code

/start_stop_heatmap.go

Methodology

Here is how this graph is computed

  • Select all players
  • trim account creation date to “Year-Month” to get “start_month”
  • trim last battle date to “Year-Month” to get “stop_month”
  • group players by (start_month, stop_month)
  • for each (start_month, stop_month) pair, compute the number of players
  • display the result in a 3D Bar graph (using log scale)

Caveats

Last Battle date must not be misinterpreted for “player left game” date, specially for the most recent months.


Description

The chart displays the following counts for each month:

  • The number of accounts created (shown in blue)
  • The number of players who played their last battle this month (shown in red)

Code

stats/player_gain_loss.go

Methodology

The number are computed as follows:

  • number of accounts created: Take the account creation date, keep only the the year and the month (e.g. ‘2020-07’), group by month, count the number of players each month.
  • number of players who played their last battle this month: Take the last battle date, keep only the the year and the month (e.g. ‘2020-07’), group by month, count the number of players each month.

The last 2 months are not displayed.

Caveats

A player who played his last battle this month (red) does not equate to a player leaving the game.

A reasonable assumption would be that players who have not been active for just a few months are likely to come back. On the other hand, a player who last played 2 or 3 years ago has likely left the game for good (but returning players do exist).

Please keep these caveats in mind when interpreting the red portion of the graph, as it does not directly indicate a definitive loss of players.


Description

This chart illustrates the net difference between the number of accounts created and the number of players who played their last battle in each month.

Code

stats/player_gain_loss.go

Methodology

The numbers displayed on the chart are calculated using the following methodology:

  • Determine the number of accounts created each month by extracting the account creation date, keeping only the year and month (e.g., ‘2020-07’). Group the accounts by month and count the number of accounts in each month.
  • Calculate the number of players who played their last battle in each month by extracting the last battle date, keeping only the year and month (e.g., ‘2020-07’). Group the players by month and count the number of accounts in each month.
  • Compute the net difference between the number of accounts created and the number of players who played their last battle for each month.

The last 2 months are not displayed.

Caveats

As for the previous graph, “last battle date” doesn’t equate to “player left the game date”.

This means that:

  • net gains are underestimated
  • net losses are overestimated

This is especially true for more recent months.

Please keep these caveats in mind when interpreting this chart, as it does not directly indicate a definitive loss of players.


Description

Estimation of the number of random battles per month.

Code

/stats/average_monthly_battles.go

Methodology

This chart is computed as follows:

  1. Create a counter for each month
  2. For each player:
    • compute the average number of random battles per day between the account creation and the last battle
    • each month between the account creation and the last battle, increment the counter by day_in_month * average_battle_per_day for this player (for the month of account creation and last battle, only the appropriate portion of the month is taken).
  3. Plot the month counters on the chart.

Caveats

It’s important to consider the following caveats when interpreting the chart:

  • This method provides an estimation and does not rely on actual historic data.
  • The estimation assumes an even distribution of battles for each player, whereas players may not play at a constant rate.
  • The estimation may under-estimate the number of battles in the most recent months.
  • The estimation does not account for players who may have created their account and remained inactive for months or years before actively playing (old WoT players for example).
  • This chart appears to be less inaccurate than the “Estimated Active Players Each Month” chart, but further verification is required.

Please keep these caveats in mind when analyzing the chart, as it provides only an estimate and may not reflect the actual distribution of battles.


Player Base Statistics


Description

The blue curve in the graph represents the distribution of players based on their win rate, considering only players who have reached a minimum number of battles.

Each point (x, y) on the graph represents the following:

  • x: The win rate range of the players.
  • y: The number of players whose win rate falls between x and x + “step”.

The green curve represents the Normal Distribution, which is obtained using the population’s average win rate and its standard deviation.

The graph’s subtitle displays the following information:

  • Mean: The average win rate of the player population.
  • Standard Deviation: The measure of the spread or dispersion of win rates within the population.
  • Population Size: The total number of players considered in the analysis.
  • Step: The interval used for dividing win rates into ranges.

By visualizing this graph, you can observe the distribution of players’ win rates and compare it to the expected Normal Distribution based on the population’s average win rate and standard deviation.

Code

/stats/player_winrate.go

Methodology

  • Take all the intervals (wr-1, wr-2) of length “step” between 0% and 100% (e.g. 50.5% -> 51.0%).
  • For each interval, count the number of players with a win rate between wr-1 and wr-2.
  • From this, compute the Normal Distribution and we display the 2 curves.

Caveats

Spikiness

Due to a large number of players having a low battle count, the distribution of Win Rates is not evenly spread.

For instance, if many players have only 4 battles, the graph will show spikes at 0% (0/4), 25% (14), 50% (24), 75% (34), and 100% (44) win rates. As a result, when considering low minimum battle thresholds, the charts may appear “spiky” around these win rate values. To partially compensate for this effect, wider steps are used in the charts with lower battle thresholds. This helps to smooth out the spikes and provide a clearer representation of the distribution.

With higher minimum battle thresholds, this issue disappears.

Other

Keep in mind it’s a simple player distribution.

As it’s more likely to encounter a frequent player with 2000, 5000 or +10000 battles, specially at high tiers, this chart doesn’t reflect what your MM looks like.

This is especially true for the chart using the lowest threshold (1 battle) as it contains all the players trying the game for a few battles and leaving after that (not to mention protected MM bellow 200 battles).


Description

See Previous chart(s) description.


Description

See Previous chart(s) description.


Description

Displays the average Win Rate by battle count (steps of 500 battles)

Code

stats/winrate_battles.go

Methodology

  • Divide the number of random battles of each player by 500 (Integer Division)
  • Group by this value, and compute the average win rate of each Group
  • Plot the chart

We ignore players with less than 30000 (not enough players with that many battle for the average to be significant)

Caveats

None identified.


Description

Displays the proportion of hidden profiles.

Code

stats/hidden_profile.go

Methodology

  • Count players with an hidden profile
  • Count players with a public profile
  • Plot

Caveats

None identified.


Description

TODO

Code

stats/in_clan.go

Methodology

  • Count players in clans (clan_id not equal 0)
  • Count players without clans
  • Plot

Caveats

None identified.


Description

Plot a random sample (5000 entries) of players by “solo+div win rate” x “div win rate”.

Each blue dot is a player, with the following coordinates:

  • x: Random Win Rate
  • y: Division Win Rate

The green line represent “win rate” = “div win rate”.

If a player’s dot is above this line, the player has a better division win rate.

If a player’s dot is bellow this line, the player win rate than division win rate.

Code

/stats/matrix_div_wr.go

Methodology

  • Select a random sample of players with at least 100 random battles and 100 division random battles.
  • Plot them on a scatter chart

Caveats

None identified.


Description

Count the number of players by number of battles (range of 500).

This chart uses a logarithmic scale.

Code

/stats/player_random_battle_chart.go

Methodology

  • Divide the number of random battles of each player by 500 (Integer Division)
  • Group players by this value, and compute the number of players for each Group
  • Plot the chart

Caveats

None identified.


Problematic Charts


Description

Estimation of the number of active players each month.

Code

active_players_monthly.go

Methodology

Take each months an account was created (trick to get all the individual months in the lifespan of the game). For each month, count the number of players who have created their account before the end of the month and have their last battle after the last day of the month.

Caveats

This graph is problematic, counting a player “active” only based on account creation date and last battle date is too much of an approximation.

It over-estimates the number of active players, making for a misleading graph.

This chart will be removed.


Description

The chart displays the following counts for each month:

  • The number of accounts created with at least the set minimum number of battles at present (shown in blue).
  • The number of players with at least the set minimum number of battles at present, who played their last battle in that month (shown in red).

Code

stats/player_gain_loss.go

Methodology

The number are computed as follows:

  • filter the accounts with to get all the accounts with more than the minimum number of battles
  • number of accounts created: Take the account creation date, keep only the year and the month (e.g. ‘2020-07’), group by month, count the number of players each month.
  • number of players who played their last battle this month: Take the last battle date, keep only the year and the month (e.g. ‘2020-07’), group by month, count the number of players each month.

The last 2 months are not displayed.

Caveats

As for the previously mentioned, “last battle date” doesn’t equate to “player left the game date”. So “losses” are over-estimated

In addition, players are not “born” with 200 or 2000 battles.

On average a player plays ~1 battle per day (between account creation and last battle date), this means it takes ~6 months to reach 200 battles.

This means “gains” are under-estimated

This chart will be removed.

This graph might get replaced an estimation based on the battle per day distribution.


Description

This chart illustrates the net difference between the number of accounts created and the number of players who played their last battle in each month.

The players must have, presently, the minimum number of battles specified.

Code

stats/player_gain_loss.go

Methodology

  • filter the accounts with to get all the accounts with more than the minimum number of battles
  • number of accounts created: Take the account creation date, keep only the year and the month (e.g. ‘2020-07’), group by month, count the number of players each month.
  • number of players who played their last battle this month: Take the last battle date, keep only the year and the month (e.g. ‘2020-07’), group by month, count the number of players each month.
  • Compute the net difference between the number of accounts created and the number of players who played their last battle for each month.

Caveats

Same as before, but worse, here we under-estimate account creations and over-estimate losses.

This double approximation renders this chart far too approximative.

This chart will be removed.


Description

See Previous chart(s) description.


Description

See Previous chart(s) description.


Other Considerations


Data Collection

Code

You can find the code in the following file: wows.go.

Methodology

To collect player statistics, the code utilizes the WoWs API provided by Wargaming.

However, due to limitations in the API, it is not possible to retrieve a complete list of all players directly. Instead, a search endpoint is available, which allows searching for players based on a nickname prefix. The prefix must have a minimum length of 3 characters, and the API returns a maximum of 100 profiles sorted alphabetically.

To overcome these limitations, a creative algorithm is implemented with the following steps:

  1. Start with the shortest prefix ‘000’ (the first prefix alphabetically).
  2. Perform a search using the current prefix.
  3. If the search result contains fewer than 100 players:
    • If the prefix ends with the last character in the alphabet (”_”), reduce the prefix size by 1 and move to the next prefix.
    • If the prefix does not end with the last character, set the prefix to the first len(current_prefix) + 1 characters of the last entry’s nickname from the search result and move to the next prefix.
  4. Repeat steps 2-3 until the prefix loops back to ‘000*’.

Once all the players are retrieved using this method, an iteration is performed to gather additional details such as the number of battles, account creation date, etc. Clans are also scanned.

Additionally, the code includes a clean-up process to identify and remove potential QA/test accounts created by Wargaming. These accounts exhibit similar nickname patterns and identical statistics. Examples of these patterns are “pt*tpt,” “lp_ru_prod*,” and “auto_*.” On the European server alone, there are approximately 330,000 such accounts.

The implementation of this algorithm is complex and error-prone. However, the code has successfully collected the following player counts (as of 2023/05/24) which looks consistent:

  • EU: 7,058,091 players
  • NA: 3,576,287 players
  • ASIA: 3,894,958 players

Please note that running the complete data collection process for each server takes a considerable amount of time, approximately 1 to 2 days per server.

Collect/Report Genation Frequency

This project collects data and generate the present report once per month, toward the end of the month.

About the CIS -> EU migration

Apparently, accounts which were migration from CIS to EU where migrated in full, including account creation date.

This means that charts related to accounts on the EU server are actually:

  • EU + migrated portion of CIS before September 2022
  • EU alone after September 2022 (with the influx of CIS players)

This is why no spikes are visible around that time.

Clans were recreated fresh however.

Final Notes

This project is on going and still early on. New charts will be added, problematic charts will be deleted and existing charts tweaked/improved.

This project will also improve over time by having a data history. One of its big flaw currently is the lack of historic data, which leads to numerous approximations.

With historic data, these approximations will partially disappear over time.