前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你的广告能打几分?Kaggle需求预测挑战赛冠军方案这样做丨教程

你的广告能打几分?Kaggle需求预测挑战赛冠军方案这样做丨教程

作者头像
量子位
发布2018-09-29 10:41:01
5620
发布2018-09-29 10:41:01
举报
文章被收录于专栏:量子位
作者 Dance with Ensemble 伊瓢 编译 量子位 出品 | 公众号 QbitAI

我们每天在网页上看到的各种电商广告,到底够不够吸引人?4个月前Kaggle和“俄罗斯版58同城”Avito办了个需求预测挑战赛,预测不同的广告能吸引用户多大的购买需求。

如今冠军已出炉,并且在社交网络上引起了一波关注收藏,量子位在此分享一下。

Avito需求预测挑战赛

网页上的卖货广告有好有坏,好的广告清晰明确的展示产品,恰到好处的描述卖点,能够精准的让那些对此产品有需求的人产生兴趣、点击查看。

而烂广告则表意不明、图片不清晰,或者让人觉得这压根就是个骗子。

所以,对同样的产品,好广告产生的需求高,烂广告产生的需求低。Kaggle的这次需求预测挑战,就是把“需求”用方差来定义:

公式中ŷ为预测值,y为实际值。

这场比赛在今年4月底推出,6月底截止,共有1873支队伍参赛,冠军奖励12000美元,亚军奖励8000美元,季军奖励5000美元。

冠军方案

冠军团队Dance with Ensemble的最终分数为0.2150,团队包含两名中国人、两名俄国人。领衔作者Little Boat目前Kaggle比赛排名第五。

之后,他们公开了自己的方案。

整个网络的第一层包含一些lgb模型、一些NN模型和一些xgb模型,第二层包含一些lgb模型、一些xgb模型和一些NN模型,一个NN作为最后一层。作者认为复杂的结构(3层)可能给提供了大约0.0002-0.0004分的改进。

他们还发现了一些基于主动训练+测试的特征,将最好的单个lgb提升到213X,最终贡献了0.0007的改善。

整个Dance with Ensemble团队四个人的部分合并时,他们模型的线性混合可以达到0.2133。

神经网络

如何用一个NN达到0.215X?

包括文本,分类,数字,图像在内,所有内容都很重要。作者是这样实现的:

1.得到了0.227X的数字特征和分类嵌入。

2.用2个RNN包含了titile和description,使用fastText预训练嵌入,通过一些调整,得分降至0.221X。

3.用自我训练fastText嵌入训练+测试,并主动训练、主动测试。事实证明,训练+测试的自我训练是最好的。得分达到0.220。

4.添加具有平均池化的VGG16顶层。这一步其实让分数变低了,在将文本,图像,分类,数字特征合并在一起之前做一些调整,分数约为0.219X。

5.尝试用CNN或Attention等调整文本模型,发现无效后使用2层LSTM,然后是dense层,这里可能有0.0003的改进。

6.尝试了用不同的CNN模型处理图像,固定的ResNet50中间层可能还有0.0005分的提升,分数变成了0.218X。

7.开始做各种调整,发现在文本和LSTM之间添加空间dropout有很大帮助,大概贡献了0.0007 - 0.001。精细调整的退出率总体上也有所帮助,这里改进了大约0.001 - 0.0015,所以现在的分数大约为0.2165 - 0.217。

8.开始整合所有特征,得到一个0.215分的NN!

9.如果你一直在保存模型,你可以在它们之上训练一个全连接的NN,还有大约0.008的改进。换句话说,用神经网络打进前10名很容易!

特征工程

文字特征

在标题,描述,标题+描述,标题+描述+param_1等上面,用了tfidf算法。保留所有xgb模型的稀疏特征; 使用svd和oof ridge为所有lgb模型保持多样化。

文本统计,比如字长、标题包含而描述中没有的特殊字词等。

图像特征

1.图像统计,参考:https://www.kaggle.com/shivamb/ideas-for-image-features-and-image-quality

2.三个预训的练神经网络模型的特征,参考:https://www.kaggle.com/wesamelshamy/high-correlation-feature-image-classification-conf

3.vgg16预训练网络特征

4.关键点特征,参考:https://www.kaggle.com/c/avito-demand-prediction/discussion/59414

分类特征

计算/统计各个级别的独特特征。

这些特征是为train + test和train + test + train_active + test_active生成的。例如,(parent_category_name,category_name,param_1)中的广告数量,(region,city)中的唯一user_id数量。

各种级别的目标编码。这些包括count> = 5000的类别的平均deal_probability; count> = 5000的类别的平均预测deal_probability(train + test)(注意,选择阈值使得cv / lb间隙保持大致相同。); OOF表示deal_probability编码; OOF表示deal_probability * min(1,log(count)/ log(10000))编码。

预测自变量特征

xgb预测价格,image_top_1;

lgb预测价格,image_top_1,item_seq_number(oof预测);

rnn预测day_diff = day_to - day_from

在不同分类级别的平均预测价格,image_top_1,item_seq_number,day_diff。

不同级别的差异特征,例如(price-xgb_price)/(category_name)级别的价格,log(image_top_1) - (resnet50_category1)级别的log(lgb_image_top_1)等。

尝试从文本特征预测parent_category_name和category_name(multicalss分类),但包括它们使cv略差。

user_id特征

路程特征,首先从(user_id,item_seq_number,activation_date)开始训练,然后计算旅程数量(和百分比)、不同级别的返程数量(和百分比),例如( user_id,parent_category_name),(user_id,parent_category_name,category_name,activation_date)等。

分类特征,将user_id视为分类变量,在(user_id)或(user_id,其他分类变量)级别生成特征。例如,unique item_seq_number,price range = log1p(max(price)) - log1p(min(price)))。

周期特征,由periods_train和periods_test生成。

传送门

作者原贴:

https://www.kaggle.com/c/avito-demand-prediction/discussion/59880

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Avito需求预测挑战赛
  • 冠军方案
  • 神经网络
  • 特征工程
  • 传送门
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档