热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IJCAI18阿里妈妈搜索广告转化预测总结

IJCAI-18阿里妈妈搜索广告转化预测总结,Go语言社区,Golang程序员人脉社

1. 比赛背景

官网介绍:本次比赛以阿里电商广告为研究对象,提供了淘宝平台的海量真实交易数据,参赛选手通过人工智能技术构建预测模型预估用户的购买意向,即给定广告点击相关的用户(user)、广告商品(ad)、检索词(query)、上下文内容(context)、商店(shop)等信息的条件下预测广告产生购买行为的概率(pCVR),形式化定义为:pCVR=P(cOnversion=1 | query, user, ad, context, shop)。
结合淘宝平台的业务场景和不同的流量特点,我们定义了以下两类挑战:
(1)日常的转化率预估

(2)特殊日期的转化率预估


2. 比赛数据

    本次比赛为参赛选手提供了5类数据(基础数据、广告商品信息、用户信息、上下文信息和店铺信息)。基础数据表提供了搜索广告最基本的信息,以及“是否交易”的标记。广告商品信息、用户信息、上下文信息和店铺信息等4类数据,提供了对转化率预估可能有帮助的辅助信息。
    用于初赛的数据包含了若干天的样本。最后一天的数据用于结果评测,对选手不公布;其余日期的数据作为训练数据,提供给参赛选手。
    在上述各张数据表中,绝大部分样本包含了完整的字段数据,也有少部分样本缺乏特定字段的数据。如果一条样本的某个字段为“-1”,表示这个样本的对应字段缺乏数据。


3. 数据预处理

首先,我们针对数据做了一个整体分析:

  1. 虽然个别数据有缺失值,但均在1%以下,对整个训练结果影响非常轻微。
  2. 对每个特征进行可视化分析,有些特征符合正太分布,例如:各个用户等级数目,各个店铺的评价等级数目。有些特征符合长尾分布,例如:展示页面点击次数,各个广告商品的销量等级数目。
  3. 日常的转化率和点击次数都很稳定,周末也相同。特殊日期转化率是正常日期的4倍以上。

3.1 缺失值处理

基于数据基本比较完好,我们不用做什么额外的学习,来补全缺失值,仅通过中位数或者众数补全即可。

当然,我们也需要看看数据中有没有异常数据。对于本题目来说,除了-1代表缺失值来说,没有特别的异常数据。

对于树模型来说,我们可以不做任何处理,因为树模型本身就具有处理缺失数据的能力,而比赛提供的数据缺失值又非常稀少,所以可以忽略。

对于SVM,LR,神经网络模型来说,我们通过中位数,均值,众数任选一补全即可。

3.2 归一化

对于LR,SVM,神经网络等数值运算型的模型来说,数值是否稳定,具有非常重要的意义。

对于长尾分布的数值特征,一般采用取log,再进行最大最小归一化(Min-Max Scaling 又称为Min-Max normalization)

对于正太分布的数值特征,一般采用正则归一化(Z-score normalization)

我们在神经网络wide_deep模型中采用了Min-Max Scaling来进行归一化操作。

对于非数值化的类别特征,我们它进行0-n数值化编码,使之可以分类,也可以作为连续型特征使用。


4. 特征提取

特征主要分成几大类:

  1. 原始特征。对原始特征进行一些简单处理,例如日期,类别,属性列表等。
  2. 交叉特征。不同值和值之间的交叉特征。例如性别和商品类别交叉,城市和商品类别交叉等。
  3. 计数特征。例如均值,最大值,中位数,众数,最小值。
  4. 比例特征。包括商品转化率,用户转化率等关于转化率特征,以及属性占比特征。

4.1 原始特征

1. 日期特征。我们把单个日期字段(context_timestamp)给拆分出来,分成日(day)和小时(hour)。

2. 商品类别列表。根据数据特点,只有第二个类别有用,我们取item_category_list第二列作为特征。

3. 商品属性列表。我们直接按照排列顺序进行特征拆分。将一个item_property_list拆分成10个特征。

其他原始变化特征:

1. 商品属性数目/商品类别数目。

2. 连续型特征分段。在本赛中用处不大,因为很多数值型特征已经被处理过成level级别的数据了,如果没有处理过的话,可以自己处理,例如年龄分段,店铺评价数量分段。本题中,我们对商店物流评分,服务评分,描述评分,评价评分进行分段。

Tips: 连续型特征分段的好处。

  1. 避免异常值对模型的影响,例如一个年龄为300的人就会对LR模型造成很大困扰。
  2. 分段之后可以做离散化(one-hot)处理。例如年龄30岁和35岁,其实兴趣应该变化不大。例如18岁和23岁,人的兴趣会有极大的转变。那我们按10-20,20-30,这样进行处理,并进行离散化,这样能大概区分出10个特征。
  3. 分段之后就可以与其他离散化特征进行特征交叉操作,挖掘出更多的潜在信息。
  4. 简化模型特征,降低过拟合风险。

4.2 交叉特征

特征交叉是对两个或者三个或更多个离散化变量进行组合,可以获得非线性的特征,从而获得更多的潜在信息。

举个例子:例如男性对化妆品品类应该不太感兴趣,对运动类品类更有兴趣,女性恰好相反。从特征表达的角度来讲,男性这个特征对化妆品为1,对运动类也为1。品类这个特征不能反应出性别对品类是否感兴趣。于是我们进行特征组合,【性别-品类】。这样 【性别-品类】特征中 男性-化妆品 在男性下为0,在女性下为1。

我们对在该比赛做了以下尝试:

  1. 用户性别和其他用户信息的两两组合。
  2. 商品销售信息和其他商品信息的两两组合。

4.3 计数特征

计数特征非常多样,常见的有统计次数,最大值,最小值,均值,众数,中位数等等。

这个比赛的特征主要分成三个对象:商品,商铺,用户。

我们分别对着三个对象进行特征描述。下面以用户为例子:

  1. 关于用户的各类均值特征,主要是对关于商品和商铺求均值。例如:平均消费商品价格,平均商品销量水平,平均商铺评分。
  2. 用户关于item_id 和 cat_id 的时间差特征。
  3. 统计用户当天该次点击之前的点击次数。
  4. 是否为用户第一次点击,中间点击,最后一次点击。

4.4 比例特征

比例特征是特征中重要性非常高的一类特征,因为比起交叉特征,更能体现出用户的兴趣,以及商品的内在特质。从特征角度来说,他是分布在0-1之间的稠密性连续型特征,比起0-1类特征包含了更多的信息。而且它数值波动小,更适合模型去拟合。

比例特征包括各类组合特征的统计,以及出现次数比例统计,以及相关转化率统计。下面以用户例子:

  1. 计算关于用各个性别中的各个年龄比例,各个职业占比比例,各个用户等级级别比例。同理可得。
  2. 用户属性和商铺对象属性,商品对象属性的交叉。例如各个用户性别中各个商品销量等级比例,比如男性用户中商品销量等级为1的商品的占所有男性用户商品的比例。
  3. 各类属性转化率特征。用户转化率,用户性别转化率,用户职业转化率等。

4.5 其他特征

这个比赛我们后期没有取得很好的单模型效果,与前排大佬的最好单模型效果差了接近2个千分点。我猜测主要原因是没有利用好广告预测属性和商品本身属性,我们只是对比了一下广告预测属性和商品本身属性是否相同这一特征。

本次冠军在github上分享了他的处理思路:主要是通过属性来描述用户对属性的偏好,从而得到足够的信息来判断用户转化率。

  1. 对属性做one-hot处理(但是由于属性ID太多,one-hot内存爆炸,很好奇冠军是怎么处理的,后期再更新)
  2. groupby 用户ID,对每个属性出现次数做一个均值处理,当作用户的偏好特征 
  3. groupby 商品ID,对上述得到的用户属性偏好均值再求均值,得到商品的均值偏好特征。

本次比赛冠军分享:商品属性处理


5. 特征选择

这个比赛让我感受到,特征选择不是必须的,如果你特征构建的好的话,全部都用上是一个不错的选择。但是如果你特征实在是太多了,可以通过特征选择选择出多个效果相似,但是差异性较大的特征子集。这样我们在后期融合的时候,可以得到较大的提升。另外,由于初赛数据集太小,所以特征选择出现了很好的效果,一般来说,特征越多引入的噪音也越多。

特征选择一般有三种方法:1. 过滤式(filter)2. 包裹式(wrapper)3. 嵌入式(embedding)

  1. filter式比较简单。主要就是一个打分函数,对每个特征打分,然后根据规则选择特征。例如信息增益(可以根据树模型得到),卡方检验(检验特征与结果分布的独立性),皮尔逊相关系数。
  2. 包裹式就比较消耗时间。主要是逐个或者随机加入特征,再训练模型检验效果是否提升,如果是则加入,如果否则抛弃。有很多启发式算法可以应用在其中,例如粒子群,退火算法。该方法在比赛中应用最广。
  3. 嵌入式为L1正则式。

在复赛情况下,由于数据量太大,有前排大佬分享,可以通过线上线下数据对特征先做一个检测,如果分布不同则直接去除掉,减少特征子空间。之后再通过启发式算法进行特征选择。通过选择出多套结果优秀且不同的特征子集后,进行模型融合。


6. 模型构建

对于这种比赛,亲测lgb和xgb效果是别的模型无可比拟的。wide_deep 和 wide_cross 神经网络模型无法也超越这两个树模型。

对于lgb,xgb为什么在各个比赛中大显身手,乃至无可比拟。个人觉得是因为

  1. 特征偏少,最多也在百和千这个量级。
  2. 特征稠密,多数为连续数值型特征。
  3. 特征和预测结果存在着大量的非线性关系。
  4. 训练数据量偏少,复赛中虽然共有1000万数据,但是实际上真正可用的也就是特殊日期那一天的上午100万条。
  5. 特征构成复杂,既有连续型特征,也有数值型特征。


7. 模型融合

我们尝试了传统的stacking方法,效果不好,原因不详。

冠军把前7的数据对特殊日期进行预测,把预测结果作为特征输入到特殊日期模型中,我觉得是一个很好的想法,之前一直想怎么利用好前7天的数据,也只是想在加入更多的数据量这个层面上思考,并没有思考说做一个模型进行预测。但是我们有把wide_deep神经网络的输出结果当作特征输入xgb模型中,注意输入之后一定要有不同(要么之后模型的特征空间不同,要么是模型的数据集不同),所以输入之后我们在训练xgb的时候删掉了wide_deep用到的特征。

我们后来试了一个融合的骚操作,就是依据下面这个公式,但是进行逆向融合,也就是先求逻辑函数的逆操作,然后进行逻辑函数操作,融合提升了一个万分点。



8. 比赛总结

这场比赛有几个失误的点:

1. 初赛很认真地做了各种特征分析,特征分布,乃至把预测属性和真实商品属性也考虑了,在复赛中却没有静下心来再次分析。(也是下意识觉得初赛和复赛数据分布应该差不多,结果啪啪啪打脸)

2. 在复赛中没有好好做特征选择,而是盲目用了全部特征进行训练,导致模型提升很被动。(其实也有因为初赛最后所有特征加起来比特征选择结果好的因素)

3. 没有划分好线下预测集。这个问题特别大,因为不能在线下很好地预估模型的效果,包括特征选择和模型调优都存在过拟合的风险。必须要划分好预测集,使得线下线上同升同降,这样能大大减少工作量。

总的来说,还是很感谢两位队友,一位来自西电,一位来自浙大。作为第一次参加的萌新,能取得初赛第7,复赛第23名的成绩还是感到满足。









推荐阅读
  •     目标检测是计算机视觉一个非常重要的子任务。目标检测需要发现并准确定位自然图片中的物体。在2012年之前,目标检测主要基于手工设计的特征以及传统分类器。2012年以后,出现了 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • TensorFlow基础知识深化讲解
    批标准化批标准化(batchnormalization,BN)是为了克服神经网络层数加深导致难以训练而诞生的。深度神经网络随着深度加深,收 ... [详细]
  • 本文深入解析了Python在处理HTML过滤时的实现方法及其应用场景。通过具体实例,详细介绍了如何利用Python代码去除HTML字符串中的标签和其他无关信息,确保内容的纯净与安全。此外,文章还探讨了该技术在网页抓取、数据清洗等领域的实际应用,为开发者提供了宝贵的参考。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • linux用通配符排除指定字符结尾文件的一种方法,Go语言社区,Golang程序员人脉社 ... [详细]
  • IIS配置大全:从基础到高级的全面指南
    IIS配置详解:从基础到高级的全面指南IIS前端配置与web.config文件紧密相关,相互影响。本文详细介绍了如何设置允许通过的HTTP请求方法,包括HEAD、POST、GET、TRACE和OPTIONS。提供了两种主要的配置方法,并探讨了它们在实际应用中的优缺点。此外,还深入讲解了其他高级配置选项,帮助读者全面提升IIS服务器的性能和安全性。 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • Python正则表达式详解:掌握数量词用法轻松上手
    Python正则表达式详解:掌握数量词用法轻松上手 ... [详细]
  • 在一系列的学习与实践后,Jsoup学习笔记系列即将进入尾声。本文详细介绍了如何使用Jsoup实现从Saz文件到Csv格式的数据解析功能。未来,计划将此功能进一步封装,开发成具有用户界面的独立应用程序,以增强其实用性和便捷性。对于希望深入掌握Jsoup技术的开发者,本文提供了宝贵的参考和实践案例。 ... [详细]
author-avatar
so-sweet天地
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有