原文:
www.kdnuggets.com/2017/07/feature-engineering-help-kaggle-competition-3.html
作者:Gabriel Moreira,CI&T。
在第一部分和第二部分中,我介绍了Outbrain 点击预测机器学习竞赛以及我应对挑战的初步任务。我展示了用于探索性数据分析、特征工程、交叉验证策略和基本统计与机器学习的基线预测模型的主要技术。
在这一系列的最后一篇文章中,我描述了如何使用更强大的机器学习算法解决点击预测问题,以及将我推上排行榜第 19 位(前 2%)的集成技术。
预测点击率(CTR)的一个流行方法是使用正则化跟随者(FTRL)优化器的逻辑回归,这种方法已被谷歌用于生产环境中,每天预测数十亿次事件,使用相应的大特征空间。
这是一个线性模型,具有懒惰的系数(权重)表示方式,并且与 L1 正则化结合使用时,会导致非常稀疏的系数向量。这种稀疏性特征缩减了内存使用,使得对于具有数十亿维度的特征向量具有良好的可扩展性,因为每个实例通常只有几百个非零值。FTRL 通过从磁盘或网络中流式传输示例来提供对大数据集的高效训练——每个训练示例只需处理一次(在线学习)。
我尝试了两种不同的 FTRL 实现,分别在Kaggler和Vowpal Wabbit(VW)框架中可用。
对于 CTR 预测,理解特征之间的交互是非常重要的。例如,来自“Nike”广告商的广告的平均转化率可能会有所不同,这取决于显示广告的出版商(例如 ESPN vs. Vogue)。
我考虑了所有分类特征来训练Kaggler的 FTRL 模型。特征交互选项被启用,这意味着对于所有可能的两个特征组合,特征值被相乘并哈希(阅读关于特征哈希的内容,请参见第一篇文章),形成一个 2²⁸维度的稀疏特征向量。这是我最慢的模型,训练时间超过了 12 小时。但我的 LB 分数跃升至 0.67659,这是方法 #6的结果。
我还在VW上尝试了 FTRL,这是一个在 CPU 和内存资源使用方面非常快速和高效的框架。输入数据再次为分类特征,并添加了一些选定的数值分箱特征(阅读关于特征分箱的内容,请参见第一篇文章)。我的最佳模型在两小时内训练完成,并在方法 #7中获得了 0.67512 的 LB 分数。虽然准确率稍低,但比之前的模型快得多。
在第二个 FTRL 模型上使用 VW 时,我利用 VW 的超参数配置了仅一部分特征(命名空间)的交互(特征配对)。在这种情况下,交互仅配对了分类特征和一些选定的数值特征(没有分箱转换)。这一变化使得在方法 #8中取得了更好的结果:0.67697。
所有这三个 FTRL 模型都被集成到我的最终提交中,具体内容将在接下来的部分中描述。
一个最近的因式分解机变体,领域感知因式分解机 (FFM) 在 2014 年的两个 CTR 预测竞赛中取得了胜利。FFM 尝试通过学习每个特征交互对的潜在因子来建模特征交互。该算法以LibFFM框架的形式提供,并被许多竞争者使用。LibFFM 对大数据集的并行处理和内存使用非常高效。
在方法 #9中,我使用了分类特征,并将配对交互哈希到 700,000 维度。我的最佳模型仅用 37 分钟训练完成,并且成为了我的最佳单一模型,LB 分数为0.67932。
在方法 #10中,输入数据除了分类特征外,还包含了一些选定的数值分箱特征。训练数据增加到 214 分钟,LB 分数为0.67841。
对于方法 #11,我尝试训练一个 FFM 模型,仅考虑训练集中最后 30%的事件,假设在最后几天的训练可以提高对测试集未来两天(50%)的预测。LB 得分为0.6736,提高了这两天的准确性,但降低了测试集中之前事件的准确性。
在机器学习项目中,某些有前景的方法最终可能会失败。这发生在一些 FFM 模型上。我尝试将学习从 GBDT 模型转移到带有叶子编码的 FFM 模型,这是一种在 Criteo 竞赛中获胜的方法。然而,FFM 模型的准确性下降,可能是因为 GBDT 模型在这个上下文中不够准确,增加了更多的噪声而非信号。
另一个不成功的方法是训练独立的 FFM 模型,针对测试集中事件更多的地理区域,比如一些国家(美国 ~ 80%,加拿大 ~ 5%,英国 ~ 5%,澳大利亚 ~ 2%,其他 ~ 8%)和美国州(加州 ~ 10%,德州 ~ 7%,佛罗里达 ~ 5%,纽约 ~ 5%)。为了生成预测,每个测试集事件被发送到专门针对这些地区的模型。专门针对美国的模型在预测该地区的点击时表现良好,但在其他地区准确性较低。因此,使用全球范围的 FFM 模型表现更好。
我在最终的集成中使用了三种选择的 FFM 方法,接下来我将展示。
集成方法是将不同模型的预测结果结合起来,以提高准确性和泛化能力。模型预测的相关性越小,集成的准确性可能越好。集成的主要思想是,单个模型不仅受信号影响,还受随机噪声的影响。通过结合多个模型的预测,可以取消大量噪声,从而提高模型的泛化能力,如下所示。
来自竞赛不要过拟合
一种简单而有效的集成方法是通过平均合并模型预测。对于这次竞赛,我测试了许多加权平均类型,如算术、几何、调和和排序平均等。
我能找到的最佳方法是使用加权算术平均的logit(sigmoidal logistic 的逆)预测 CTR(概率),如公式 1 所示。它考虑了三种选择的 FFM 模型(方法 #9、#10 和 #11)以及一个 FTRL 模型(方法 #6)的预测。这种平均方法使我在方法 #12中得到了0.68418的 LB 得分,比我最好的单一模型(方法 #10,得分为 0.67932)有了显著提升。
方程 1 — 通过模型预测的 logit 加权平均进行集成
那时,比赛提交截止日期仅剩几天。我选择在剩余时间里使用学习排序模型进行集成,以合并最佳模型的预测。
该模型是一个GBDT,具有 100 棵树,并使用XGBoost的排名目标。这个集成模型考虑了最佳的 3 个 FFM 模型和 3 个 FTRL 模型的预测以及 15 个精选的工程数值特征(如用户浏览次数、用户偏好相似性和按类别的平均点击率)。
该集成层仅使用验证集数据进行训练(如第二篇文章中所述),在一种称为Blending的设置中。这样做的原因是,如果训练集的预测也被集成模型考虑,它会优先考虑过拟合的模型,从而降低其对测试集的泛化能力。在最后一天的比赛中,方法 #13 给了我最佳的公共 LB 得分(0.68688)。比赛结束后,我的私人 LB 得分被揭示(0.68716),让我在最终排行榜上保持在第 19 位,如下图所示。
Kaggle 的 Outbrain 点击预测最终排行榜
我没有跟踪确切的提交日期,但下图展示了我在比赛期间 LB 得分的演变情况。可以看出,第一次提交时得分有很大的跃升,但之后的改进变得更加困难,这在机器学习项目中是很常见的。
我在比赛期间的方法的 LB 得分
我从这次比赛中学到的一些东西包括:
-
良好的交叉验证策略对于竞争至关重要。
-
应该花费大量时间进行特征工程。在数据集上添加新特征往往需要更多的努力和时间。
-
哈希是稀疏数据的必备方法。实际上,在简单性和效率方面,它的表现优于独热编码(OHE)。
-
OHE 类别特征对于决策树集成并不理想。根据竞争对手分享的经验,树集成使用原始类别值(id)并且树木足够多时表现更好,因为这将减少特征向量的维度,提高随机特征集包含更多预测特征的机会。
-
测试许多不同的框架对学习很有帮助,但通常需要大量时间来将数据转换为所需格式、阅读文档和调整超参数。
-
阅读关于主要技术(FTRL 和 FFM)的科学论文对于调整超参数非常重要。
-
研究论坛帖子、公共 Kernel(共享代码)以及竞争者分享的过去解决方案是学习的好方法,对比赛至关重要。每个人都应该有所回馈!
-
基于平均的集成方法大大提高了准确性,与机器学习模型融合提升了标准,堆叠是必须的。我没有时间探索堆叠,但根据其他竞争者的说法,使用固定折叠上的外部折叠预测增加了用于集成训练的可用数据(完整训练集),并提高了最终集成的准确性。
-
不应在比赛最后时刻才生成提交文件!
Kaggle 就像是前沿机器学习的大学,对于那些决定接受挑战并从过程中和同伴中学习的人来说。这是一次非常有趣的经历,能够与世界级数据科学家竞争和学习。
谷歌云平台在这个过程中是一个很棒的合作伙伴,提供了所有必要的工具来克服大数据和分布式计算的难关,而我的注意力和努力则集中在登顶山峰上。
个人简介: 加布里埃尔·莫雷拉 是一位热衷于利用数据解决问题的科学家。他是航空技术学院(Instituto Tecnológico de Aeronáutica - ITA)的博士生,研究推荐系统和深度学习。目前,他是 CI&T 的首席数据科学家,领导团队利用机器学习解决客户的挑战性问题,处理大规模和非结构化数据。
原文。经许可转载。
相关:
-
特征工程如何帮助你在 Kaggle 比赛中表现出色 – 第一部分
-
特征工程如何帮助你在 Kaggle 比赛中表现出色 – 第二部分
-
独家:对杰里米·霍华德关于深度学习、Kaggle、数据科学等的采访
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持组织的 IT 需求