计算应用程序的保留率?

Calculating retention rate for an application?

尝试一些营销分析。 使用 R 和 SQL.

这个数据集:

                           user_id install_date app_version
1 000a0efdaf94f2a5a09ab0d03f92f5bf   2014-12-25          v1
2 000a0efdaf94f2a5a09ab0d03f92f5bf   2014-12-25          v1
3 000a0efdaf94f2a5a09ab0d03f92f5bf   2014-12-25          v1
4 000a0efdaf94f2a5a09ab0d03f92f5bf   2014-12-25          v1
5 000a0efdaf94f2a5a09ab0d03f92f5bf   2014-12-25          v1
6 002a9119a4b3dfb05e0159eee40576b6   2015-12-29          v2
                   user_session_id     event_timestamp   app time_seconds
1 f3501a97f8caae8e93764ff7a0a75a76 2015-06-20 10:59:22  draw          682
2 d1fdd0d46f2aba7d216c3e1bfeabf0d8 2015-05-04 18:06:54 build         1469
3 b6b9813985db55a4ccd08f9bc8cd6b4e 2016-01-31 19:27:12 build          261
4 ce644b02c1d0ab9589ccfa5031a40c98 2016-01-31 18:44:01  draw          195
5 7692f450607a0a518d564c0a1a15b805 2015-06-18 15:39:50  draw          220
6 4403b5bc0b3641939dc17d3694403773 2016-03-17 21:45:12 build          644

link for the dataset

我想创建一个如下所示的情节:

但像这样按版本展示它(只关注此图的版本部分 - 就像上图一样,但每个版本 1 次,如下图所示):

基本上,显示每个版本整个月的保留率和流失率。 这是我到目前为止所做的:

ee=sqldf("select user_id, count(user_id)as n ,strftime('%Y-%m', event_timestamp) as dt ,app_version 
from w 
group by user_id ,strftime('%Y-%m', event_timestamp),app_version 
having count(*)>1 order by n desc")

ee

                              user_id   n      dt app_version
1    fab9612cea12e2fcefab8080afa10553 238 2015-11          v2   
2    fab9612cea12e2fcefab8080afa10553 204 2015-12          v2
3    121d81e4b067e72951e76b7ed8858f4e 173 2016-01          v2
4    121d81e4b067e72951e76b7ed8858f4e 169 2016-02          v2
5    fab9612cea12e2fcefab8080afa10553  98 2015-10          v2

以上显示使用该应用程序的唯一身份用户超过 once.So 这些是保留率分析所指的人群。 我遇到的困难是通过 event_timestamp 列中的 事件 通过时间总结每个 user_id 以找到保留/流失结果,就像我的第一张图片提及。

我不认为你的问题很清楚,我也不认为你确切地知道你想做什么。您说您正在尝试使用 R 来计算流失率和保留率,但您没有提供实际的 R 代码,只提供了 SQL 看起来像 运行 的语句来自 R 环境。

如果您想知道 SQL 一步完成所有这些,您需要问一个不同的、更好的问题。但是,鉴于您提供了一个 .csv 数据文件,我忽略了您问题的 SQL 部分并提供了一个 R 解决方案,包括数据处理。

library(dplyr)
library(zoo)
library(ggplot2)
library(reshape2)
library(scales)

df <- 
  read.csv([location of the .csv on your machine], header = TRUE) %>%
  mutate(month = format(as.Date(event_timestamp), format = "%Y-%m"))

installs <- #calculates all installs for all versions of the app by month
  df %>% 
  group_by(user_id) %>%
  slice(1) %>%
  group_by(month) %>%
  summarise(tot_installs = n())

last_use_date <- #finds the last time a user actually used any version of the app (i.e., when they "churned" away)
  df %>%
  group_by(user_id, month) %>%
  summarise(tot_uses = n()) %>%
  group_by(user_id) %>%
  filter(month == max(month)) %>%
  group_by(month) %>%
  summarise(stopped_using = n())

installs %>%
  full_join(last_use_date) %>%
  mutate(cum_sum_install = cumsum(tot_installs), 
         cum_sum_stopped = cumsum(stopped_using), 
         Churn = cum_sum_stopped/cum_sum_install, 
         Retention = 1 - Churn) %>%
  select(month, Churn, Retention) %>%
  melt(id.vars = "month") %>% # melt the data frame for easy plotting
  ggplot(aes(x = month, y = value, fill = variable)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(name = "", values = c("red", "blue")) +
  labs(x = "Month", y = "") +
  scale_y_continuous(labels = percent) +
  theme(legend.position = "bottom", 
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))