我们每天在网页上看到的各种电商广告,到底够不够吸引人?4个月前Kaggle和“俄罗斯版58同城”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