Question

Gaming Retention

  • 13 July 2017
  • 1 reply
  • 203 views

Userlevel 4

Day 1 Retention is the one metric that game developers obsess over the most. This is for good reason; if most players fail to return promptly then how can they possibly be expected to progress and monetize? Day 1 Retention, that is the fraction of players that return one day after install, is not actually a very powerful diagnostic tool on its own. It is merely a symptom of the underlying broken game mechanics. But being able to identify a poor D1 metric can allow game developers to iterate quickly and improve their game and hopefully lead to improved monetization.


Data Types and Technical Info

This pattern will work with data from most application event tacking software. We need only the users registration date and user event information including the event date (date user used application) and a user id.


Example Output

The output from this pattern allows us to very flexibly slice and dice into the d1 retention for any specific application. We can then analyze the retention rate by any time period and across any specific cohort of the data to identify and isolate insights.



Try it Yourself - How it’s Done


The below code block assumes we have two tables:



  1. User table - a user table that contain user specific information such as registration date and demographic information

  2. User Event Table - an events table that tracks events at a user level


Code:


dimension: d1_retained{
group_label: "D Retained (yes/no)"
type: yesno
sql: date_diff('day',${player.registration_raw},${event_raw}) = 1;;
}

measure: tot_retained_d1 {
group_label: "D Retention"
label: "D1 Total Retained"
description: "actual total of retained d1 customers"
type: count_distinct sql: ${user_id} ;;
filters: {field: d1_retained value: "yes"}
}

measure: d1_retention_rate {
group_label: "Retention Rate"
description: "Total users who used game 1 day after registration"
value_format: "0.00\%"
type: number
sql: 1.0*${tot_retained_d1}/ nullif(${player.count},0)*100;;
}

Of course this block of code can be extended out to D3, 7 ,14 and 21 intervals by creating a replica of the above block and updating the yesno dimension .


1 reply

Nice one - thanks Marcus!

Reply