There are many different Key Performance Indicators (KPI) used in online games to determine the success of a game. One of the most basic, most common and most important metrics is the retention rate.
Retention rate measures the amount of players who join a game and return to continue playing after a predefined time period.
Most common is the use of three different time frames, the 1-day retention rate, the 7-day retention rate and the 28-day retention rate (some use 30 days but because 28 days is exactly 4 weeks later and some players tend to play always on the same weekdays, 28 days is probably the better metric). Usually the retention rate is given as a percentage of returning players.
A successful facebook game for example should have retention rates somewhere near 40-20-10, which means 40% of the players return on the next day to continue playing, 20% should return after 7 days and 10% after 28 days.
Sadly retention rate is often calculated in different ways and even many commercially offered metrics tools either don't feature this very important indicator at all, or use very different ways to calculate it.
Definition of Retention Rate
I like to offer the definition as it is widely used in the gaming industry, for a better comparison with KPI published by gaming companies.
|1-Day Retention Rate
|The number of players who return to the game right on the next day after their first visit, divided by the number of all new players on the first day.
|If a game has 100 new players on Monday and on Tuesday 44 out of these 100 players return to play again, we have a 1-day retention rate of (44/100) = 0.44 or 44%.
|7-Day Retention Rate
|The number of players who return to the game 7 days after they started to play, divided by the number of all new players on the first day.
|We had 100 new players on Monday. The next Monday, 7 days later, 25 out of these 100 players return to play again. This is a 7-day retention rate of (25/100) = 0.25 or 25%.
|28-Day Retention Rate
|The number of players who return to the game four weeks after their first visit, divided by the number of all new players on the first day.
|After four week, 13 of the 100 players from the first Monday return to the game. This is a 28-day retention rate of (13/100) = 0.13 or 13%.
There are some things to notice:
- Only new players are counted. Only players who joined the game for the first time on the first day of the equation are counted. For the above examples, only players who joined on the first Monday for the first time. All players who played already before do not count, even when they played on the Monday.
- Only players returning on the specific day are counted. For example, it doesn't matter for the 28-day retention rate if a player returned on the 27th day or the 29th day. Neither does is matter if he played for 27 consecutive days in a row. Only the players returning exactly on the 28th day are counted.
- All new players from the first day are counted. If one of these players did not return on the next day and not on the 7th day, he is not counted for the 1-day retention and 7-day retention. But if he returns exactly on the 28th day to play again, he is counted for the 28-day retention rate.
This is just one possible way to calculate the retention rate, as an example.
Lets say we have a MySQL database with all Player logins in a Table "PlayerLogin", with fields for "PlayerID" and the "TimeStamp" of the login.
First we get the count of all first time players for each day from the database:
SELECT Date_format(MinDate, '%Y-%m-%d') AS SourceDate,
Count(pid) AS FirstTimePlayerCount
FROM (SELECT DISTINCT PlayerID AS pid,
Min(Timestamp) AS MinDate
GROUP BY pid) b
GROUP BY SourceDate
ORDER BY SourceDate ASC;
The result may look like this:
There were 29,480 new players in the 1st of January, who did never login before, and 24,059 on the 2nd and so on.
Next we check how many of these players returned after 1 day (change the "1" to "7" or "28" for 7 or 28 days):
SELECT Count(DISTINCT a.PlayerID) AS ReturningPlayerCount,
Date_format(b.TimeStamp, '%Y-%m-%d') AS RetentionDate,
Date_format(a.JoinDate, '%Y-%m-%d') AS SourceDate
FROM (SELECT DISTINCT PlayerID,
Min(TimeStamp) AS JoinDate
GROUP BY PlayerID) a
JOIN PlayerLogin b
ON a.PlayerID = b.PlayerID
AND Datediff(b.TimeStamp, a.JoinDate) = 1
GROUP BY RetentionDate
ORDER BY RetentionDate ASC
The result may look like this:
11,473 of the 29,480 new players from the 1st of January logged in on the 2nd January etc.
The retention rate for the date "RetentionDate" is now calculated as "ReturningPlayerCount" (on the date "RetentionDate")/"FirstTimePlayerCount" (on the date "SourceDate")*100
|1-Day Retention on
So the 1-day retention rate on the 2nd of January was 38.9%, the 1-day retention rate on the 3rd of January was 43.2% and so on. Retention rates for other time frames are also calculated the same way.
Interpretation of the Retention Rate Numbers
Retention rate is just a snapshot at a specific point in time. There is no real value in these numbers by itself. But they are very useful in relation to other, known retention rates and general experience in comparing these numbers. (And they are used for other KPI calculations – which makes it important to understand what these numbers really mean)
Because they only work in comparison to other retention rates, it's very important to get the calculations right and in the same way each time and for each game.
As stated in the beginning, for social games on facebook a retention rate of 40-20-10 is what a developer should try to achieve. If it's 35-18-8 this may still be fine, even 30% 1-day retention should mostly be ok, but if it's closer to 25-10-5 the game is likely in trouble. Then again, of course there are niche games for a smaller target audience and this may result in much lower retention rates while still being successful.
For a new game the numbers are usually much higher, especially if everyone invited his friends first – so it's better not to take the numbers too seriously in maybe the first month. There is also a big impact from marketing. An email campaign to invite players back, who didn't login for 27 days, will probably spike the 28-day retention rate. If there is a big new advertising campaign for new players, there will probably be much more new players than returning players on the first day of the campaign and the retention rate may drop. Even postings on the facebook wall of the game can have a big impact on the retention rate (actually it is a good opportunity to measure how big the impact of wall postings is to a game – and which wall postings have the most impact).
It is very unlikely to boost the retention with game design or polishing after a game is released. It may improve by 1-3% but that's pretty much it. The only exception is if something is blocking the players, like game breaking bugs or a blocking level design.
It is a good idea to measure more than just the general retention rate. It may be good to know the retention by language or the retention by advertising campaigns or marketing channels, by age or gender, by browser or Flash version, hardware platform, gaming performance and much more. This metric alone can help a lot to target the right group of players for advertising or to find the best direction to further improve the game.