某SLG游戏公测期用户与付费分析

这次主要对某SLG游戏的用户及付费进行分析。数据来源为游戏玩家付费金额预测大赛-竞赛信息-DC竞赛


一.理解数据

下图为数据的部分截图:

某SLG游戏公测期用户与付费分析_第1张图片 图1

主要关键字有:用户ID, 注册时间, 付费金额,要塞(玩家主基地)等级,付费金额等。

将数据导入到Data Frame中:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#导入数据
game = pd.read_csv('D:\\data analysis\\dc-game\\tap4fun\\tap4fun\\tap_fun_train.csv')

查找是否有缺失值,得到结果为False,即没有缺失值:

#查找缺失数据
game.isnull().any().any()


二.清洗数据

去掉用户ID重复的行:

#去重
game = game.drop_duplicates(subset='user_id')

经过清洗后,可以发现总共有2288007条数据


三.分析数据

1.用户分析

首先分析玩家的注册信息,原始数据中给出的是每个玩家注册之后前7日的数据

#总注册人数
len(game['user_id'])

总注册人数为2288007人


接下来观察各个时间段的注册人数分布:

#去掉时间
def drop_time(series):
    time_list = []
    for li in series:
        time_list.append(li.date())
    return time_list
#每日注册人数分布
reg_user = game[['user_id', 'register_time']]
reg_user['register_time'] = pd.to_datetime(reg_user['register_time'])

reg_user[‘register_time’] = drop_time(reg_user[‘register_time’])


#查看注册分布
reg_user = reg_user.groupby([‘register_time’]).user_id.count()
#画图
plt.style.use(‘dark_background’)
fig = plt.figure(figsize=(14, 10))
plt.plot(reg_user)
plt.title(‘用户注册分布图’)
plt.show()

得到结果如下图所示:

某SLG游戏公测期用户与付费分析_第2张图片 图2

可以发现,在一月下旬迎来了一次注册的高峰,二月下旬又迎来一次注册的小高峰,可能是游戏内部活动吸引了大部分玩家,也可能是该公司对各个手游渠道加大了宣传的力度。但两次高峰过后每天的注册人数相较于高峰前并没有明显增长,对于游戏的整体热度并没有很大提升。


然后,将每日时长超过30分钟的用户划分成活跃用户,表示他们和游戏互动性较高,通过将活跃用户细分,并分析他们的数据,可以让游戏厂商更好地了解用户并且满足用户,使游戏运营活动做到有的放矢。

接下来,利用k-means方法对活跃用户进行细分:

#获取活跃用户(游戏时长大于30分钟小于24小时)
activate_user = data[(data[‘avg_online_minutes’]>=30) & (data[‘avg_online_minutes’]<=24*60)
#选取特征
activate_user_means = activate_user[[‘bd_stronghold_level’, ‘pvp_battle_count’, ‘pve_battle_count’, ‘avg_online_minutes’,
‘pay_count’, ‘pay_price’]]


#对玩家进行分类,将特征近似的分成一类,总共分成三类
estimator = KMeans(n_clusters=3)
res = estimator.fit_predict(activate_user_means)
#每一行数据对应的类
label_pred = estimator.labels_
#每一类的平均值
centroids=estimator.cluster_centers_


#将均值整合成DataFrame
means_data = {‘第一类’: centroids[0],
‘第二类’: centroids[1],
‘第三类’: centroids[2],}
activate_user_means = pd.DataFrame(means_data, index=[‘要塞等级’, ‘pvp次数’, ‘pve_次数’, ‘日均在线时间’,
‘付费次数’, ‘付费金额’])

这三类活跃用户的特征如下表所示:

某SLG游戏公测期用户与付费分析_第3张图片 表1

可以发现,第一类玩家各项指标都较低,可命名为萌新玩家, 样本量为125018;

第二类玩家的各项指标均高于第一类玩家,可命名为中端活跃玩家, 样本量为17893

第三类玩家所有指标都显著高于前两类玩家,可命名为高端死忠玩家, 样本量为149

在对各类用户进行定位后,我们可以给出一些针对性的运营活动,促进玩家留存以及玩家付费


2.付费分析

首先是计算各类付费指标:

付费率:

#付费率=付费人数/活跃用户
pay_user = game[game[‘pay_price’]>0]
pay_rate = pay_user[‘user_id’].count() / act_user[‘user_id’].count()
print(‘付费率为%.2f’ %(pay_rate))

付费率为0.29


ARPU:

#ARPU = 付费金额/活跃人数
arpu = pay_user[‘pay_price’].sum() / act_user[‘user_id’].count()
print(‘arpu为%.2f元’ %(arpu))

ARPU为8.55元


ARPPU:

#ARPPU = 付费金额/付费用户人数
arppu = pay_user[‘pay_price’].sum() / pay_user[‘user_id’].count()
print(‘arppu为%.2f元’ %(arppu))

ARPPU为29.52元


目前较好的手游ARPU超过5元;一般的手游ARPU在3~5元之间;ARPU低于3元则说明表现较差。可见该手游的盈利能力较好。


然后分析不同要塞等级的玩家的付费情况:

#统计各个等级的玩家到达人数,付费人数, 付费次数, 付费总额, 等级付费转化率,
等级人均付费次数, 等级人均付费总额
user = data[[‘user_id’, ‘bd_stronghold_level’, ‘pay_count’, ‘pay_price’]]

#汇总各等级人数分布,总付费次数, 总付费金额,
table = pd.pivot_table(user, index=[‘bd_stronghold_level’], values=[‘user_id’, ‘pay_count’, ‘pay_price’],
aggfunc={‘user_id’: ‘count’, ‘pay_count’: ‘sum’, ‘pay_price’: ‘sum’})
user_pay = pd.DataFrame(table.to_records())

#汇总各等级付费人数
pay_num = user[user[‘pay_count’]>0].groupby(‘bd_stronghold_level’).user_id.count()
user_pay[‘total_count’] = pay_num

#计算等级付费转化率,等级人均付费次数,等级人均付费总额
user_pay[‘user_payrate’] = user_pay[‘total_count’] / user_pay[‘user_id’]
user_pay[‘user_avgcount’] = user_pay[‘pay_count’] / user_pay[‘total_count’]
user_pay[‘user_avgmoney’] = user_pay[‘pay_price’] / user_pay[‘total_count’]

#修改列名
user_pay.columns = [‘要塞等级’, ‘付费次数’, ‘付费总额’, ‘达到人数’, ‘付费人数’, ‘付费转化率’, ‘人均付费次数’, ‘人均付费总额’]

#重置列名
user_pay = user_pay[[‘要塞等级’, ‘达到人数’, ‘付费人数’, ‘付费次数’, ‘付费总额’, ‘付费转化率’, ‘人均付费次数’, ‘人均付费总额’]]

得到结果如下表所示:

某SLG游戏公测期用户与付费分析_第4张图片 表2

接下来对付费转化率,人均付费次数和人均付费总额进行分析,观察不同等级在这些指标上的差异,从而制定相应的运营方案

某SLG游戏公测期用户与付费分析_第5张图片 图3 付费转化率 某SLG游戏公测期用户与付费分析_第6张图片 图4 人均付费次数 某SLG游戏公测期用户与付费分析_第7张图片 图5 人均付费总额

通过观察付费转化率可以发现,在10级之后,付费转化率呈现显著增长,在14级之后,趋近于100%。观察人均消费总额和人均消费次数可以发现,在10级之后,两项指标也同时呈现显著的增长。

通过观察各等级人数分布可以发现,绝大部分玩家的要塞等级停留在10级之前,而10级之后的玩家大多数可能都是游戏的核心玩家,所以愿意为游戏付费。因此对于10级之前的用户,可以通过问卷调查,所在等级处的领取任务分析等方式,了解10级以内的玩家对于游戏的评价,以及他们是否对完成任务感到困难。从而帮助他们平滑度过10级,感受到游戏的核心玩法。而对于付费次数和付费总额比较高的等级,比如20-23级,可以加强付费引导,从而提升游戏收入。



最后分析不同玩家的消费习惯

该游戏充值主要获得以下几种物品:资源类(木头、石头、象牙、肉、魔法等),加速券类(通用加速、建筑加速、科研加速、训练加速、治疗加速等)。

根据玩家充值金额大小, 将10级以上玩家分为高氪玩家(充值金额高于500元)普通玩家(充值金额低于500元),分别统计两种玩家的各类资源使用情况,最后绘图


首先分析玩家资源类消费情况

#分成高级和低级玩家
eli_uesr = game[(game[‘pay_price’]>=500) & (game[‘bd_stronghold_level’]>=10)]
nor_user = game[(game[‘pay_price’]《500》) & (game[‘bd_stronghold_level’]>=10)]


#统计两类玩家各自的资源使用情况
wood_avg = [eli_uesr[‘wood_reduce_value’].mean(), nor_user[‘wood_reduce_value’].mean()]
stone_avg = [eli_uesr[‘stone_reduce_value’].mean(), nor_user[‘stone_reduce_value’].mean()]
ivory_avg = [eli_uesr[‘ivory_reduce_value’].mean(), nor_user[‘ivory_reduce_value’].mean()]
meat_avg = [eli_uesr[‘meat_reduce_value’].mean(), nor_user[‘meat_reduce_value’].mean()]
magic_avg = [eli_uesr[‘magic_reduce_value’].mean(), nor_user[‘magic_reduce_value’].mean()]


data = {‘高端玩家’:[wood_avg[0], stone_avg[0], ivory_avg[0], meat_avg[0], magic_avg[0]],
‘低端玩家’:[wood_avg[1], stone_avg[1], ivory_avg[1], meat_avg[1], magic_avg[1]]}
resource = pd.DataFrame(data, index=[‘木头’, ‘石头’, ‘象牙’, ‘肉’, ‘魔法’])

#绘图
plt.style.use(‘dark_background’)
resource.plot(kind = ‘bar’, stacked=True, colormap= ‘PuBu’, figsize=(14, 10))
plt.title(‘玩家资源使用量’)
plt.show()

得到结果如下图所示:

某SLG游戏公测期用户与付费分析_第8张图片

可以发现,相对于其他资源,象牙和魔法类资源的平均使用量较少,木头和肉类的平均使用量较高。高氪玩家和普通玩家在木头和肉类资源上使用差距最小,而在象牙资源的使用上差距最大,是因为象牙资源在游戏中的用途相对高端一些,而木头和肉类是游戏发展过程中必需的资源。所以,高氪玩家在资源上的平均使用量要远远高于普通玩家,象牙资源最能够体现出一个玩家在游戏上的消费水平。


然后分析玩家加速券类的使用情况:

#各类玩家对加速券的使用情况
genral_avg = [eli_uesr[‘general_acceleration_reduce_value’].mean(), nor_user[‘general_acceleration_reduce_value’].mean()]
building_avg = [eli_uesr[‘building_acceleration_reduce_value’].mean(), nor_user[‘building_acceleration_reduce_value’].mean()]
reaserch_avg = [eli_uesr[‘reaserch_acceleration_reduce_value’].mean(), nor_user[‘reaserch_acceleration_reduce_value’].mean()]
training_avg = [eli_uesr[‘training_acceleration_reduce_value’].mean(), nor_user[‘training_acceleration_reduce_value’].mean()]
treament_avg = [eli_uesr[‘treatment_acceleration_reduce_value’].mean(), nor_user[‘treatment_acceleration_reduce_value’].mean()]


data = {‘高端玩家’:[genral_avg[0], building_avg[0], reaserch_avg[0], training_avg[0], treament_avg[0]],
‘低端玩家’:[genral_avg[1], building_avg[1], reaserch_avg[1], training_avg[1], treament_avg[1]]}


acceleration = pd.DataFrame(data, index = [‘通用’, ‘建筑’, ‘科研’, ‘训练’, ‘治疗’])
#绘图
plt.style.use(‘dark_background’)
acceleration.plot(kind = ‘bar’, stacked=True, colormap= ‘Reds’, figsize=(14, 10))
plt.title(‘玩家加速券使用量’)
plt.show()

得到结果如下图所示:

某SLG游戏公测期用户与付费分析_第9张图片

可以发现,通用类加速券的平均使用量最大,而治疗类加速券的平均使用量相比于其他加速券来说非常少,这主要和加速时间长短和使用范围有关。同时,也可以发现,高氪玩家和普通玩家在使用加速券方面的差距非常大。


四.总结

1.该游戏具有较大的用户基数,且新用户注册可能受游戏活动,版本更新的影响较大

2.该游戏的ARPU为8.5元,收入能力较好

3.对于游戏付费情况,两极分化情况十分严重,绝大多数玩家处于10级以内,且付费情况较差,而少数玩家在10级以上,且付费能力强(20级以上用户的付费转化率接近100%).因此对于如何让大多数玩家平滑过渡到10级,非常的重要。

4.高氪玩家在游戏消费上面,对象牙资源,和加速券的使用量远远高于普通玩家。

转载:https://zhuanlan.zhihu.com/p/43010150

你可能感兴趣的:(机器学习,数据挖掘)