计算应用程序的保留率?
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
我想创建一个如下所示的情节:
但像这样按版本展示它(只关注此图的版本部分 - 就像上图一样,但每个版本 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))
尝试一些营销分析。 使用 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
我想创建一个如下所示的情节:
但像这样按版本展示它(只关注此图的版本部分 - 就像上图一样,但每个版本 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))