游戏安全实验室 首页 活动 查看内容

2020游戏安全技术竞赛丨机器学习方向丨决赛答案详解

发布于:2020-4-15 14:27   |    103846次阅读 作者: 管理员    |   原作者: 刘思超

本答案为机器学习方向,决赛题目的答案


作者:刘思超

————以下为正文————



2020腾讯游戏安全竞赛机器学习方向

一等奖方案总结


一、数据分析

初赛的数据包含账号标签,账号登录信息,账号登出信息,账号创建信息,账号聊天信息。决赛的数据在初赛数据的基础上增加了帐号的详细金钱流水信息和物品流水信息。

观察训练数据的标签分布,发现正负样本分布非常不平衡,工作室账号仅占所有账号数量的13%左右,当然这也是比较符合实际情况的分布。

此次比赛训练集数据是 20200301日的账号数据,测试集数据是20200305日的账号数据。注意到20200301日是周日,20200305日是周四,数据分析发现这两天的金钱流水等数据信息分布差异非常大,猜想可能是游戏在一周不同天内有不同的副本或活动等。因此需要谨慎进行特征工程和特征筛选,避免过拟合到训练集特有特征,提高模型泛化性。

账号数据包含的特征除了少数连续型特征(等级,战斗力,时间,好友数量,发言条数,金钱/物品变动量)外,大多数都是离散的类别特征。因此在特征工程时,类别特征的处理非常关键。

在所有提供的文件中除了账号创建包含的样本数较少外,账号登录登出,金钱流水都涵盖了几乎所有账号,聊天和物品流水信息涵盖了绝大部分账号。

、建模思路

考虑将数据信息聚合到账号uin,即以某uin为单个样本。随后建模一个二分类模型,来分类打金工作室账号和非打金工作室账号。

LightGBM作为著名的Boosting系列集成学习算法GBDT的进阶版实现,得益于其强大的数据拟合能力和超高的运行效率,是数据竞赛最常用的模型之一。此次比赛我也采用了LightGBM模型,因此特征工程成为提升模型效果重点。

、特征工程

特征工程主要从实际业务背景出发,考虑工作室账号与非工作室账号在行为上的区别。由于样本以账号uin为单位,所以需要将账号uin的多条特征记录聚合在一起,聚合时采用min, max, mean, std, count, nunique等统计特征。

下面分别从几个不同文件阐述构造的具体特征情况。

创建特征:通过role_create文件,构造了账号创建时间,创建渠道的count编码,创建账号数量等特征。由于有创建账号记录的样本数量非常少,因此此部分特征聊胜于无。

登录特征:通过role_login文件,构造了账号登录时间特征。

登出特征:通过role_logout文件,构造了账号登出时间,登出账号数量,账号在线时长等特征。

账号角色特征:将role_loginrole_logout文件中的角色信息合并后去重,考察账号拥有多少角色,以及职业count特征。

账号信息特征:将role_loginrole_logout文件合并后对账号信息进行考察。主要包含以下特征:账号IP地址的count编码,WorldIdcount编码,账号好友数量,等级,战斗力的统计特征,账号登录登出次数,账号登录登出时所用系统,网络的count编码。

聊天特征:直接使用uin_chat文件的特征。

金钱流水特征:通过role_moneyflow文件,构造了账号金钱流水时间特征,以及在凌晨4-5点的流水数量和比例,主要金钱类型(类型1,3,4,5,6,7)的流水次数和金钱变动数量,主要流水原因(原因12, 58, 252, 253, 221, 125, 5, 3, 8, 126)的流水次数。

物品流水特征:通过role_itemflow,构造了主要物品类型(类型20025, 20035, 20036, 20028)的流水次数和物品变动数量,主要流水原因(原因84, 12, 85, 5)的流水次数。

通过以上特征工程构造了近170个特征,由于训练集和测试集样本特征分布差异巨大,我使用对抗验证行特征筛选。对抗验证具体方法是:将进行了特征工程后的训练集和测试集合并后,将原本训练集数据设置为正样本,原本测试集数据设置为负样本,输入模型进行二分类训练。如何在这个模型中一个特征的重要性越高,那么这个特征在原本训练集和测试集的分布就越不相同,这种特征就需要被剔除。使用对抗验证,尽可能除去在训练集和测试集中分布差异太大的特征,但由于训练集和测试集本身分布也存在不小的差异,无法做到分布完全接近,最终筛选出了150多个特征。

1 特征重要性

 

上图为模型特征重要性最高的几个特征,可以看到这些特征还是非常符合业务场景的,比如最长在线时间,IP地址出现次数,一天中有多少小时有金钱流水,在凌晨4-5点的金钱流水量等。

、模型训练

模型训练使用4个不同随机种子进行交叉验证集的划分,使用6折交叉验证进行模型训练。注意到样本类别分布非常不平衡,因此采用AUC作为模型验证时的评价指标。

训练集共有74704个账号,测试集共有75228个账号。训练集和测试集中分别有93375个账号没有登陆记录或登出记录。这种类型的账号在训练集中几乎都不是打金工作室账号,并且测试集中这375个样本通过模型预测出来也并不是打金工作室账号,因此后续模型训练时直接忽略这些账号,防止对模型产生噪声。

由于这次比赛采用的得分为4PR / (P+3R),其中PprecisionRrecall,类似F1-score,对阈值非常敏感,因此在验证集预测概率中进行阈值搜索保守选择阈值0.75,验证集分数达到了0.96+

2 阈值搜索

五、赛后思考

比赛时由于没有排行榜分数,无法得知模型在训练集上的效果。赛后询问得知测试集分数为92,与验证集分数96分差距还是较大的。个人认为除了模型本身泛化性能限制外,是由于31日和35日的游戏活动不同导致的。

由于训练集和测试集数据分布差异较大,并且存在许多匿名类型特征如金钱种类和物品种类等,为了减小过拟合,并没有构造太过复杂的特征,比如二阶或高阶交叉特征。

在知道具体游戏业务和特征含义的情况下,可以根据特征含义构造最合适的业务特征,可以进行高阶交叉特征的构造,提升模型效果。构造交叉特征除了手工进行特征工程外,也可以使用DeepFM等模型进行自动交叉特征构造。

分享到:
踩0 赞0

收藏

上一篇:2020游戏安全技术竞赛丨安卓客户端安全丨初赛答案详解

下一篇:2020游戏安全技术竞赛丨PC客户端方向丨RING0答案思路

最新评论
B Color Image Link Quote Code Smilies

发表评论

top 问题反馈

返回顶部