从贝贝网电商推荐比赛说起:有用户数据(userid)、商品数据(itermid)、行为数据。
(最近数据挖掘比赛很火啊,京东杯、摩拜杯、蚂蚁杯
分类问题竞赛
基于训练数据、提取特征训练模型,做分类
基于用户前期行为,预测未来行为(有时序)
比如电商推荐:有用户数据(userid)、商品数据(itermid)、行为数据
预测的是未来五天的对商品的label(0或者1买不买)
评分公式:模型预测0.4+userid和itermid对0.6
(两个模型:一个模型预测对每个商品会不会买,另一个模型预测用户最可能买哪个商品)
怎么构建训练集?–划窗思想
优点:增加很多训练样本
用后五天购买过的ui对作为label往前寻找前n天,根据后五天的交互来赋值。
比如前面n天10万对交互购买,后五天有100对购买
一个模型负责预测用户,第二个模型预测ui对的label是1还是0
前期数据处理、特征工程
这次比赛
1000多维,通过树模型来筛选700多维特征,模型整体框架:
每一个训练集就是每一个时间窗口,这里取4个窗口
不是给多少数据就用多少,很多数据都是应该过滤掉的。
会设置采样比,有用特征可能没被才到。特征选择也很重要。
控制正负采样比。(根据评分公式)
总而言之的细节
起始值的处理:数值型用平均数或者中位数;类别型要是有缺失值就是单别为一类,类别型一般要one-hot处理
异常值处理:统计中发现有一段时间数据分布明显
增删样本:把一看就不会购买的人(无效用户)直接抛弃。删样本可以用树模型来搞:树模型训练,每个样本分到叶子节点上(应该具有一致表现),看样本离群程度,选topk
上下采样来控制正负样本比(xgboost可以直接设参数,其他需要手动改,比如负样本随机采样百分之五十)
数值型数据的特征工程:树模型来搞,可以不需要做归一化,因为分裂节点标准都是暴力来选取。要是用线性模型或者梯度下降,还是需要做归一化(在高维空间是狭长的模型,不适合求最优解)
类别型数据的特征工程:树模型+one hot。但是如果某类别有成千上万,就不用onehot。(直接把树丢进去,比如有100类,分为0-99,直接丢树)当然如果用逻辑回归之后onehot效果之后会非常好。
特征选择:L1正则可以让特征稀疏,或者PCA降维,也可以树模型直接来选—训练完之后输出特征重要性
基于赛题场景设计特征:不是所有赛题都适合树模型。有些用FM可能也很好。
模型选择
加入规则特征很重要,前期不上模型,或者在模型中加入规则函数(晚点上模型,前期先发现规则)
lightgbm是nips2017才发,区别是按叶子来分裂…可以看泽康聚聚pdf
FFM:因子分解机,台湾大学的库,线性模型基础上考虑交叉组合特征
模型融合
深度学习来做分类问题其实效果不太好,不如FFM。纯结构化数据还是不适合深度学习,LSTM和CNN做分类还是不太好。
这部分一般是在比赛结束前几天搞一下,最常用是四种
重点
1、选择合适的验证集,线下的验证集一定要选好,不然可能线下线上趋势不一样。(线上线下分布要基本一致,或者说,预测周末,验证集也找周末)
什么叫合适:训练出来的模型得到的分数的趋势变化和线上趋势要差不多,才有利于后期线下调试
2、数据挖掘比赛中模型创新很少,大部分时间在搞数据清洗,搞数据分析,搞特征工程,这三块至少占百分之七十。