最终成绩:复赛第二,决赛亚军。
比赛地址:http://challenge.xfyun.cn/2019/gamedetail?type=detail/mobileAD

赛题背景

讯飞AI营销云基于深耕多年的人工智能和大数据技术,赋予营销智慧创新的大脑,以健全的产品矩阵和全方位的服务,帮助广告主用AI+大数据实现营销效能的全面提升,打造数字营销新生态。

广告欺诈是数字营销面临的一个重大挑战,随着基础技术的成熟化(篡改设备信息、IPv4服务化、黑卡、接码平台等),广告欺诈呈现出规模化、集团化的趋势,其作弊手段主要包括机器人、模拟器、群控、肉鸡/后门、众包等。广告欺诈不断蚕食着营销生态,反欺诈成为数字营销领域亟待突破的关键问题。

数据说明

本次比赛为参赛选手提供了5类数据:基本数据、媒体信息、时间、IP信息和设备信息。基本数据提供了广告请求会话sid,以及“是否作弊”的标识。媒体信息、时间、IP信息和设备信息等4类数据,提供了对作弊预估可能有帮助的辅助信息。

出于数据安全保证的考虑,所有数据均为脱敏处理后的数据。数据集提供了若干天的样本,最后一天数据用于预测,不提供“是否作弊”标识,其余日期的数据作为训练数据。

解决方案

数据预处理

这一题数据预处理占了很多篇幅,主要包括两部分:对无意义字符或乱码的处理;基于业务需要的数据处理。在我们的方案中,着重对操作系统(osv),手机制造厂商(make)和机型(model)进行处理。有些 osv 包含无意义的字段,比如“??????????????????????????؉*o\x18”或“..þ\x06<þ\x1f<þf<þ`<þ]>þܾþ\x08?þ2?þz?þ|?þ\u07ffþ?þ”,我们直接将其全部替换成-1。osv 主要由“.”分隔的数字组成,如7.1.9的形式,但在实际数据中包含一些由其他字符甚至字母分隔的osv,将这些分隔符替换成“.”,保证统一性。

make 最主要的问题是同一厂商下的中英文名称共存,比如“华为”和“huawei”没有必要认为其是两个不同的厂商(滑稽),所以统一将中文名称转成小写英文名称。此外对于一些过于精细化的分类进行粗放,比如“荣耀”归到“huawei”,“m1”,“m2”,“m3”全都归到“xiaomi”。

model 大部分数据格式都是“厂商 具体机型”,但很多数据都是采用厂商自己独有的编号,比如 OPPO 就有“PACM00”,“PBAM00”…因为 OPPO 这类数据较多,所以特意对其进行标准格式转换。

1
2
3
4
5
6
7
8
9
data['model'].replace('PACM00',"OPPO R15", inplace=True)
data['model'].replace('PBAM00',"OPPO A5", inplace=True)
data['model'].replace('PBEM00',"OPPO R17", inplace=True)
data['model'].replace('PADM00',"OPPO A3", inplace=True)
data['model'].replace('PBBM00',"OPPO A7", inplace=True)
data['model'].replace('PAAM00',"OPPO R15_1", inplace=True)
data['model'].replace('PACT00',"OPPO R15_2", inplace=True)
data['model'].replace('PABT00',"OPPO A5_1", inplace=True)
data['model'].replace('PBCM10',"OPPO R15x", inplace=True)

以上三列数据还存在一个共有问题:存在一些 url 编码字符,将其转换成对应的字符。另外对于’h’, ‘w’, ‘ppi’这些数值属性的缺失值,采用同一设备生产厂商下该属性的平均值填充。

特征工程

这一题有个明显的特点就是类别特征特别多,众所周知 catboost 擅长处理类别特征,所以直接将原始特征喂到 catboost,相对于其他模型效果非常好。在我的理解中,判断欺诈行为,其实就是通过多因素的累加来逐步确认欺诈的可能性,比如说来自某个城市的点击欺诈行为可能性为20%,假如其同时又是使用的某个欺诈行为频繁的机型,则欺诈可能性就又会提高。所以在这题中,对类别特征进行大量的交叉组合是有效的,这也是为什么 catboost 的效果要好,catboost 会自动进行类别特征的组合。在比赛交流群,有人问既然 catboost 已经能够完成特征组合,那么特征工程还有必要做大量的组合特征吗?我认为是必要的,这个道理其实和“深度模型理论上能够完成特征的高阶组合,但在比赛中人工特征工程还是存在的”一样,都是为了在源头上降低拟合的难度,提升性能的上限。

我们还可以根据 count 和 nunique 来挖掘欺诈行为,比如 imei 是手机串号,一部手机对应一个唯一的 imei。欺诈团伙为了躲避制裁往往会刷机,从而改变 model 值,比如将原本的华为手机刷成小米。针对以上行为,我们可以统计 imei 有多少个不同的 model ,通过这个特征判断这是一个存在刷机行为的设备。类似的,针对设备挂代理可以统计 imei 有多少个不同的 city。我们也可以构造其他特征来寻找欺诈行为,比如欺诈团伙会同时控制大量的手机进行广告点击,因此会大量采购某些价廉的机型,对应的这些机型会点击大量且不同的广告。这都是可以通过 count 和 nunique 特征和正常点击行为分开的,因为正常的用户不会去点击那么多广告。

除了 count 和 nunique 统计特征,还可以模仿点击率构造欺诈率特征,比如某个 model 或者 city,欺诈次数占总次数的比率。构造欺诈率特征的出发点来自赛题背景中所说的“广告欺诈呈现出规模化、集团化的趋势”,规模化,集团化的显著特点就是欺诈行为集中在某个城市,大量使用某个机型进行欺诈。此外,赛题中的 ip 信息也可以用来发现规模化,集团化行为,ip 能给出很多有用信息,比如 ip 能反应运营商,设备所在网段,从而反应这部分设备是否处在一个大量且集中的环境下,如下图所示。所以可以对 ip 按’.‘进行分段,取前一个,前两个,前三个作为新的网段类别特征,相较于 city 进一步细化了集团化,规模化概念。

手机集群(图片来自网络)
手机集群(图片来自网络)

模型

这题毫无疑问采用 catboost 比较好,但巨大的数据量加上大量的类别特征导致十分吃内存,模型训练完成回退到最优迭代轮次的时候经常内存溢出。初赛的时候采用 lgb 和 catboost 进行投票,到复赛直接就 catboost 但模型了。最后复赛 A 榜98.26379,B 榜98.24133,还是很稳定的。

总结

观看现场前三的答辩,总体思路上大家都差不多。第三名队伍小兔子乖乖采用了“伪标签”,将测试集当中预测概率值大于0.999的作为正样本,小于0.001的作为负样本加入到训练集重新训练,提高了训练集的数据量,这一做法使得模型效果提高了0.0035左右。第一名直接是一个公司组的队伍,其主要亮点就在于通过部分有规则碰撞的方式还原 MD5 加密了的 imei,然后对还原后的 imei 进行截断,具体流程见下图。

imei 逆向1
imei 逆向1
imei 逆向2
imei 逆向2

参考资料