概述
1.问题提出:某游戏公司用户数量停滞问题,进行针对性运营策略
2.业务目标:
- 抽取目标用户集
- 根据用户行为特征调整游戏运营策略
- 增加用户游戏兴趣
3.问题分析流程
- 计算用户的业绩指标(KPI)
- 提取用户行为特征提取重要特征属性(PCA降维)
- 根据用户特征属性进行聚类发现不同用户群体(K-means聚类算法)
- 计算每类用户的平均KPI
4.分析结果
4.1抽取用户行为分析所需用户集(过滤掉行为频率低的用户)
将用户根据参与次数分为三类,取前两类参与度较高的用户行为数据作为数据源
4.2根据用户特征进行K-Means聚类
4.3 聚类结果结合用户特征,应用雷达图进行展示与分析
根据PCA降维得到的重要特征中,根据6个重要特征构建了雷达图,并对5个用户群体进行分析
4.4结合用户群体KPI进行用户行为分析,给出运营策略
分析结果:
#1用户群体,各项技能等级较低,技术较差,但是游戏KPI贡献度较高
#2用户群体,对战敌方首领较多,援救他人较多,但是游戏KPI贡献度较低
#3用户群体,参与游戏度和等级较高,技术最好,但是游戏KPI贡献度较低
#4 用户群体,经常帮助他人的用户,技术较好,但是游戏KPI贡献度最低
#5用户群体,经常互帮互助的用户群体,游戏KPI贡献度最高
运营策略:
- 增加互帮互助的可能性,提高组队性能,优化组队方式
- 对于新手用户给予技术扶持,让其多尝试不同角色,推荐较高战力装备
- 对于技术较好用户,推荐难度较高的任务
- 优化用户间的交流机制方便用户群体组队交流
主要代码:
1.提取分析数据源(过滤频率低的用户)
# 读入数据
# DAU
dau <- readDau("game-01", "2013-05-01", "2013-10-31")
head(dau)
# DPU
dpu <- readDpu("game-01", "2013-05-01", "2013-10-31")
head(dpu)
# Action
user.action <- readActionDaily("game-01", "2013-10-31", "2013-10-31")
head(user.action)
# 将DAU和DPU合并
# 合并消费额数据
dau2 <- merge(dau, dpu[, c("log_date", "user_id", "payment"), ],
by = c("log_date", "user_id"), all.x = T)
# 添加消费额标志位
dau2$is.payment <- ifelse(is.na(dau2$payment), 0, 1)
head(dau2)
# 将无消费记录的消费额设为0
dau2$payment <- ifelse(is.na(dau2$payment), 0, dau2$payment)
head(dau2)
# 按月统计
# 增加一列表示月份
dau2$log_month <- substr(dau2$log_date, 1, 7)
# 按月统计
mau <- ddply(dau2, .(log_month, user_id), summarize, payment = sum(payment),
access_days = length(log_date))
head(mau)
# 确定排名的范围
library(ykmeans)
library(ggplot2)
library(scales)
# A47为排行榜得分
user.action2 <- ykmeans(user.action, "A47", "A47", 3)
# 每个类的人数
table(user.action2$cluster)
# 排行榜得分的分布
ggplot(arrange(user.action2, desc(A47)),
aes(x = 1:length(user_id), y = A47,
col = as.factor(cluster), shape = as.factor(cluster))) +
geom_line() +
xlab("user") +
ylab("Ranking point") +
scale_y_continuous(label = comma) +
ggtitle("Ranking Point") +
theme(legend.position = "none")
2.根据用户行为特征进行聚类分析,给出最优聚类结果
# 限定排名靠前的用户
user.action.h <- user.action2[user.action2$cluster >= 2,
names(user.action)]
# 进行主成分分析
# 用于机器学习的库
# 利用库中包含的函数进行数据的前期处理
library(caret)
user.action.f <- user.action.h[, -c(1:4)]
row.names(user.action.f) <- user.action.h$user_id
head(user.action.f)
# 删除那些信息量小的变量
nzv <- nearZeroVar(user.action.f)
user.action.f.filterd <- user.action.f[,-nzv]
# 删除那些相关性高的变量
user.action.cor <- cor(user.action.f.filterd)
highly.cor.f <- findCorrelation(user.action.cor,cutoff=.7)
user.action.f.filterd <- user.action.f.filterd[,-highly.cor.f]
# 进行主成分分析
# pca
user.action.pca.base <- prcomp(user.action.f.filterd, scale = T)
user.action.pca.base$rotation
# 进行聚类
user.action.pca <- data.frame(user.action.pca.base$x)
keys <- names(user.action.pca)
user.action.km <- ykmeans(user.action.pca, keys, "PC1", 3:6)
table(user.action.km$cluster)
ggplot(user.action.km,
aes(x=PC1,y=PC2,col=as.factor(cluster), shape=as.factor(cluster))) +
geom_point()
3.根据重要特征属性进行分析(雷达图)
# 计算每个类的平均值
user.action.f.filterd$cluster <- user.action.km$cluster
user.action.f.center <-
ldply(lapply(sort(unique(user.action.f.filterd$cluster)),
function(i) {
x <- user.action.f.filterd[user.action.f.filterd$cluster == i,
-ncol(user.action.f.filterd)]
apply(x, 2, function(d) mean(d))
}
))
# 生成用于雷达图的数据
library(fmsb)
# 对雷达图所需的数据进行整理的函数
createRadarChartDataFrame <- function(df) {
df <- data.frame(df)
dfmax <- apply(df, 2, max) + 1
dfmin <- apply(df, 2, min) - 1
as.data.frame(rbind(dfmax, dfmin, df))
}
# 排除相关性较高的变量
df <- user.action.f.center[, -(ncol(user.action.f.center) - 1)]
df.cor <- cor(df)
df.highly.cor <- findCorrelation(df.cor, cutoff = 0.91)
# 手动调整使得数据易于解释
df.filterd <- df[, -df.highly.cor]
# 生成雷达图所需的数据
df.filterd <- createRadarChartDataFrame(scale(df.filterd))
names(df.filterd)
names(df.filterd) <- c("级别", "救援他人的次数", "被救援的次数", "对战敌方首领的次数",
"参与战斗的次数", "参与游戏的次数")
radarchart(df.filterd, seg = 5, plty = 1:5, plwd = 4, pcol = rainbow(5))
legend("topright", legend = 1:5, col = rainbow(5), lty = 1:5)
4.计算每个用户群体的KPI
# 计算每个类的KPI
user.action.f.filterd$user_id <-
as.numeric(rownames(user.action.f.filterd))
user.action.kpi <- merge(user.action.f.filterd, mau,by = "user_id")
ddply(user.action.kpi, .(cluster), summarize,
arpu = round(mean(payment)),
access_days = round(mean(access_days)))
最后
以上就是和谐眼睛为你收集整理的用户行为分析-解决某游戏公司用户数量停滞问题,给出营销策略的全部内容,希望文章能够帮你解决用户行为分析-解决某游戏公司用户数量停滞问题,给出营销策略所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复