## Abstract

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.

Retention Rate | Description | Example |
---|---|---|

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.

## Code Example

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

FROM PlayerLogin

GROUP BY pid) b

GROUP BY SourceDate

ORDER BY SourceDate ASC;

The result may look like this:

SourceDate | FirstTimePlayerCount |
---|---|

2013-01-01 | 29480 |

2013-01-02 | 24059 |

2013-01-03 | 25739 |

2013-01-04 | 23942 |

2013-01-05 | 25349 |

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

FROM PlayerLogin

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:

ReturningPlayerCount | RetentionDate | SourceDate |
---|---|---|

11473 | 2013-01-02 | 2013-01-01 |

10398 | 2013-01-03 | 2013-01-02 |

9984 | 2013-01-04 | 2013-01-03 |

12102 | 2013-01-05 | 2013-01-04 |

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 | Formula | Result |
---|---|---|

2013-01-02 | 11473/29480*100 | 38.9% |

2013-01-03 | 10398/24059*100 | 43.2% |

2013-01-04 | 9984/25739*100 | 38.8% |

2013-01-05 | 12102/23942*100 | 50.5% |

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.

Thank you very much for this detailed explanation of the retention rate. There is a lot of information about key performance indicators on the web, but I haven’t found exact mechanics and calculations anywhere else.

Great stuff on retention rates, thank you!

Your method of telling everything in this article is actually good,

all be capable of without difficulty understand it, Thanks a lot.

good article!

Very nice article, especially the clear example of retention rate calculation. Based on the example, if we want to get the average 1-Day retention rate from 2013-01-01 to 2013-01-04, just take the average of the result percentages or SUM(ReturningPlayerCount)/SUM(FirstTimePlayerCount)? The results have slight difference, the former is 42.87% and the latter is 42.59%. Which one is correct? Or the difference could be ignored?

Both are correct, depending on what you want to know 😉

If you like to get a moving average, then take the average for each day. If you sum up everything first, it might be that you have one day with a huge amount of new players and a very small retention the next day (for example if marketing offers the chance to win a great price for everyone who just logs in at least once – it may then happen that just everyone wants to win but doesn’t care for the game). If you work with the sum of players, you would end up with a huge number of players just because the one day, which will draw the retention down for the whole series. This is probably not what you want, when you want to look at the average retention for multiple days.

For the example, just try to replace the 29480 new players on the first day with 200000 to simulate such a case.

Seems I got some feeling from your explanation, thank you Wilfried!