所有网络服务及在线游戏的硬伤是什么?也就是游戏开始头几分钟或几小时内出现的大量用户流失情况。已经有不少人通过多种方式探索这个问题的解决之道,其中多由界面的易用性和简洁性,免费试玩模式的有效性,难度曲线,以及新手教程质量等方面入手。这些都是公认的重要考虑因素。
而我们的目标是研究新用户为何早早退出游戏,并尝试预测哪些用户会提前离开。在此,我们以MMOPRG游戏《永恒之塔》为研究案例,但其研究结果也 适用于多种服务和游戏类型。虽然这款游戏在调查期间是一款纯订阅游戏,并采用7天免费试玩至20级的模式,多数流失用户还不到付费阶段就已经离开游戏。我 们主要研究的是促使用户离开的游戏内部因素。
行为研究表明,休闲玩家的注意力很有限。他们可能今天离开游戏,明天甚至就想不起来自己曾安装并玩过这款游戏。如果玩家离开游戏,我们就得立即采取措施让他们返回游戏。
但究竟该如何区分那些只是有事暂时无法登录游戏的玩家和真正的休闲玩家?最理想的方式恐怕就是在玩家仍在玩游戏时,就提前预测他们离开游戏的可能性——这种预测甚至要早于他们产生离开游戏的念头。
我们的目标很现实——在新玩家登录游戏当天就预测他们离开的概率。我们将7天处于非活跃状态的玩家定义为流失用户,目的并不是等待7天结束,确认玩家不会重返游戏,而是在他们最后一天玩游戏时预测其流失可能性。
技术支持
我们已经掌握大量数据。所幸《永恒之塔》这款韩国网游拥有理想的记录系统,它几乎可以追踪玩家每一步操作,支持查询玩家前10级,或者10小时内的玩游戏数据,可以锁定50%以上的早期流失用户。
我们使用的是两个Dual Xeon E5630 blades,它们都运行MS SQL 2008R2,其中一者作为数据仓库使用,另一个作为MS Analysis Services。我们只使用标准的微软BI软件栈。
第1阶段:误认为自己无所不知
身为富有经验,并且经历100多次测试的游戏设计师,我确信自己的能力足以解答所有关于用户流失的问题。玩家若不知如何在游戏世界中进行超时空传送,他可能就会退出游戏。首个敌人带来的致命一击,也可能让他退出。《永恒之塔》拥有绝妙的视觉效果,技术也很过硬,但却并不是一款适合新玩家的游戏。
所以我就先扮演“普通玩家”,在游戏试玩期中体验了两个种族的不同职业,详细记录了游戏玩法中的问题,并初步假设以下因素可能导致用户流失:
*种族和职业。我认为这是最主要的因素,因为发挥辅助作用的祭司的游戏玩法与强大的法师截然不同,这会影响玩家的游戏乐趣。
*玩家是否尝试过俄罗斯运营商Innova代理的其他游戏?(Innova游戏使用的是同一个帐号)
*玩家在不同程度和职业中尝试过多少个角色?
*玩家在试玩期间每个等级以及总体游戏过程中的死亡情况。
*与其他玩家的组队情况(包括高级和低级玩家)。
*玩家接收到的邮件及加入公会情况(以此检测是否存在铁杆玩家所掌握的“小号”)。
*每个等级及整个过程中完成的任务。
*在战斗中使用的技能种类。
这个列表描述了许多可能导致玩家离开游戏的因素。
我们的第一个数据挖掘模型的理念很简单,就是将布尔型变量视为一个离开用户,它可以指出用户今天会离开游戏,还是继续在游戏中逗留一段时间:
以上图表底部直线是一个简单的随机猜测。上方飙升的线段命名为The Transcendent One,它代表未来情况。这两者间有一个波动线段,代表我们的数据挖掘模型。我们的线段越接近The One,就说明预测结果越准确。这个图表主要针对第7级用户,但对第2至9级的玩家来说并无差别。
不幸的是,从中可以看出,我们的首个模型就像是抛硬币看正反面来预测未来情况。所以我们需要抽取其他假设进行分析:
现在情况略有好转,但预测的准确性仅超过50%,误报率仍然达到了惊人的28%。
注:准确率越高,这个模型检测到的真实流失用户也就越多。误报率是指将某些玩家预测为流失用户,而实际上并非如此。
第1阶段结果:我所有的初步想法都错了。
第2阶段:发现自己完全是新手
第一个也是最简单的数据挖掘算法就是Naive Bayes(朴素贝叶斯分类器),它极具人性化并且通俗易懂。但它表明原先的假设参数无法与真实的流失用户对应。第二种方法是Decision Trees(决策树),它指出我的一些想法确实很管用,但并不足以最大化提升预测准确率。
数据挖掘算 法知识:Naive Bayes在初步数据集分析以及指出参数之间关联性这方面作用很大,Decision Trees则擅长将数据集归纳为不同的子集,有利于区分流失用户及满意用户。这些方法都易于理解,但它们内部的数学原理及实用价值却极为不同。 Neural Network(神经网络)本质上是一个能够计算复杂变量关系的黑盒,它可以产生更准确的预测结果,但却不易为开发者所理解。
我和《永恒之塔》团队在头脑风暴过程中讨论了新手玩家的类型,游戏行为以及其他特征。我们都知道自己的亲友初次进入游戏的过程,以及他们的感受。
这番讨论结果使我重新修订了影响新手玩家的一些游戏内部因素列表(游戏邦注:例如,玩家是否扩展了仓库大小,跳过了复活点,使用了加速移动卷轴?),以及衡量玩家在游戏中一般活动的想法。
我们使用了如下参数:
*每个等级的杀敌数
*每个等级所完成的任务
*每个等级的游戏时间(以分钟为单位)
此时我们也完全修正了ETL部分(包括数据提取、转换以及加载)的内容,我们的SQL工程师也制作了一个高级的SSIS游戏记录处理器,提升了可扩展性,有利于添加新游戏事件。记录系统的容量已达千兆字节,所以我们可以轻松添加新的假设命题。
我们载入和处理新数据,审核了数据挖掘模型,并分析了结果。为了让结果更为简洁明了,在此我只发布修正后的结果:
注:第9级的准确率异常高,这与调查时期的游戏活动有关,所以可以忽略这个数据。
在此阶段,我们的模型准确率大为提高——尤其是第2级至第4级,不过6到8级的准确率仍然很不乐观。这种不准确的数据几乎没有用处。
Decision Tree表明一般活动参数正是关键的预测考虑因素。在这种情况 下,每级的游戏时间、每级杀敌数和每级完成任务等参数组成了我们预测模型的核心。其他参数对整体准确率的贡献率不足5%。另外,Decision Tree很简短,只有两三个分枝,这意味着它缺乏相关参数。我仍然无法理解为何这三个算法在不同等级的准确/召回率会如此不同。
第2阶段结果:我们通过一般活动参数取得了相当进展,虽然准确率仍然有待改进,但我们找到了正确的分析方法,即先使用Naive Bayes,之后再使用Decision Tree。
第3阶段:步入正轨
看到数据挖掘结果的准确率明显提升,我设置了三个发展向量,更多一般活动参数,更多游戏特定参数,以及更深入掌握微软BI工具。
经过对一般活动的试验之后,我们最终确定了以下关键因素:
*当前等级、之前等级及整体游戏时间
*每分钟杀敌数(包括当前/之前/整体等级情况)
*每分钟完任任务(同上)
*平均每天游戏时长
*玩游戏天数
*缺勤率(游戏邦注:这里指玩家在七天免费试玩期间缺席的天数)
这些参数极大提升了召回率(因此降低了误报率),Decision Tree最终开始尽情扩散出分枝。我们也看到不同数据挖掘算法针对所有等级的一致性,这表明预测过程已经趋于稳定,降低了随机性。Navie Byes在准确性上比Tree和Neural算法相差了足足10%。
新加入的个体参数实际上非常难以管理,手动分离自动攻击使用情况要涉及一些数学知识,SQL查询的第75百分位计算也是如此。但我们标准化了数据, 因此可以对比不同的游戏职业,数据挖掘模型接受的是分类索引数据而非原始数据。标准化和索引化新个体参数使整体预测精确度又提升了3-4%。
注:在网络游戏中,角色要使用技能及能力进行攻击。自动攻击是最基本和自由的招式。资深玩家使用所有技能时他们的自动攻击比率就会较低,不过游戏及 职业机制也会深刻影响这一参数。在《永恒之塔》中,法师这一比率的中间值是5%,而战士则是70%,即使是在同个职业中,标准偏差也会很高。
下一步就是参考《Data Mining with Microsoft SQL Server 2008》这本书,从中查找使用分析服务的决窍。这本书很有助于解释Decision Tree微调的复杂原理,它还让我认识到了正确数据离散化的重要性。
在以上例子中,我们通过手动操作实现了自动攻击参数的离散化。我刚开始处理这些数据时,就发现SQL Server的自动离散化是可以并且应该进行微调。手动调整数据会极大影响Tree的形状和精确度(对其他模型也同样会有影响,但是对Tree的影响更明显)。
我花了一整周时间挨个调整9个挖掘结构的30多个维度(每个游戏等级有一个结构,一共有9个等级)。从这一试验中可以发现一些有趣的模式,并且可轻松将7级和8级之间的精确度提升2%。例如,杀敌数是20,整体游戏时长是12,而每级游戏时长是7。
微调之后的结果极大减少了误报率,将Tree的数据提升至与Neural Network相当的水平:
第3阶段结果:我们终于得到了一些合适的数字,也搜集了大量关于玩家的有趣数据。
第4阶段:获得成功
坦白说,我认为我们已经到达到准确预测的极限。新参数和假设并没有再度提升精确度,这些模型已经稳定。78%的精确度 VS 16%的误报率已经足以展开预测流失用户的工作。
以免费订阅或高价值道具刺激他们重返游戏并不一定奏效(因为在俄罗斯这些赠品也支带来一些增值税),但向他们发个邮件总不会有什么问题吧?
当我们的数据挖掘项目进入第三个月时,我们发现数据有点过时了,因为那时的游戏已经更新了数次补丁。
重新载入这三个月所有更新、更大的数据集时,我发现了梯度图表发生了一些变化。虽然精确度/召回率仍然保持原状,但数据表现略有差别。
需要再次重新编写ETL程序,此时每个等级处理时间不足1分钟,所以增加一个数据集的等待时间是我们尚可接受的5分钟。但不幸的是,所以手动微调工作都要重做,不过从以下图表可以看出,增加数据集后,我们极大提升了模型的有效性!
但针对第1级的情况,我们确实无能为力。正如网络分析大师Avinash Kaushik所言,“我来,我吐,我闪”(I came, I puked, I left)。这些玩家创建了自己的角色之后就退出了游戏,我们针对他们的行动记录也非常之少。
以上所有数字均出自历史数据以及我们挖掘模型的一个学习数据集。但我是一个非常多疑的人,我还想要战斗测试结果。所以我们采用了新玩家(今天才注册 的用 户)数据,将其引进预测模型,并保存结果。7天之后,我们对比了一周前的预测流失用户以及他们真实的行为,获得了如下结果:
结果
我们终于成功实现了预测玩家是否将退出游戏的这一最初目标。看到如此之高的精确度/召回率,我们确信自己的积极和专注获得了回报。
但我们是否实现了第二个目标,判断玩家为何离开?没有。对我来说,这也是最有趣的结果——我们已经知道玩家可能离开的概率,却仍然不晓得他们为何离去。我在本文开篇列出了可能导致玩家早早离场的假设因素:
*种族和职业
*玩家是否尝试过其他的Innova游戏(我们用同一个帐号)
*玩家尝试过的种族和职业角色数量
*在免费试玩期间每级和整体死亡情况
*以及其他多种因素
我们测试了60多种个体及游戏特定参数。发现没有一者是导致用户离开的主因!也就是说,我们没有发现阻碍用户享受游戏乐趣的主要因素。
这个调查中的关键参数比较适用于试玩游戏首天的所获等级的情况,但低于考查7级游戏情况的需求,这相当于3个小时的游戏时间,意味着此时的用户流失率极高。另一批预测流失率的参数主要与整体活动有关:
*每级杀敌数
*每级完成任务
*每级游戏时长(分钟)
*每天游戏时长
总结
我们历时三个月,研究了两本书,并投入大量精力和热情从头创建了这个数据挖掘项目。团队中没有人曾有这方面经验。我们为Innova被动的分析系统 中制造了一个富有前瞻性的预测工具。我们可以及时接收潜在的流失用户信息,并给予他们一些极富个性化和关联性的决窍以提升游戏体验。
这个项目是针对《永恒之塔》这款MMOPRG而创建,但它也适用于其他游戏类型,甚至是一般的网络服务。
这是我们的首个数据挖掘项目,结束时间是2011年9月,并已根据我们现有的预测经验,聚类及分散分析,以及对用户群体的深入了解进行了重新编写,所以这个数据挖掘历程仍远未结束。