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

作者 Dance with Ensemble 
伊瓢 编译 
量子位 出品 | 公众号 QbitAI

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

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

Avito需求预测挑战赛

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

冠军方案

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

640?wx_fmt=png

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

640?wx_fmt=jpeg

整个网络的第一层包含一些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

加入社群

量子位AI社群19群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

640?wx_fmt=jpeg

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值