广告CVR一周总结
基于某一次天池预测比赛项目,一周完成baseLine的体验总结。
- 比赛要求:
本次比赛以阿里电商广告为研究对象,提供了淘宝平台的海量真实交易数据,参赛选手通过人工智能技术构建预测模型预估用户的购买意向,即给定广告点击相关的用户(user)、广告商品(ad)、检索词(query)、上下文内容(context)、商店(shop)等信息的条件下预测广告产生购买行为的概率(pCVR),形式化定义为:pCVR=P(conversion=1 | query, user, ad, context, shop)。
评估指标为:
- 机器学习中的数据预处理
在数据领域中,对数据进行可视化并进行分析对理解数据具有很好的帮助,非常重要。
数据的预处理中,包含数据的清洗、转化和降维。详细参考https://www.cnblogs.com/charlotte77/p/5606926.html
在真实的数据中,我们拿到的数据往往可能包含了大量的缺失值,可能包含大量的噪声,也可以因为人工等原因引入异常点离散点,需要我们对数据进行一波清洗操作。
- 对于比赛提供的原生数据与实际业务进行考虑并理解数据,可以对数据进行描述性统计分析,或者对数据进行可视化分析
- 缺失值处理:模型预测估计,特征统计值填补,特殊值(-1或NAN)代替,直接忽略不作处理,利用相似样本的均值,直接删除(如果缺失值所占比例不足3%删除样本;如果缺失值所占比例饿超95%且该特征实际意义不大,该特征直接删除)
- 异常值处理:通过统计分析法寻找异常点,然后进行删除、不处理、平均值代替或者视为缺失值
- 去重数据处理:对重复出现的数据进行丢弃 drop_duplicates
- 噪声数据处理:拟合数据
针对实际数据进行数据转化
- 无量纲化:标准化(scale/StandardScaler)、归一化(MinMaxScaler)、正则化(normalizing)
- 信息冗余/二值化:将数值特征转化成布尔值的过程,阈值处理实现二值化
- 定量特征:对一些不连续离散特征数据进行标签化LabelEncoder(categorical),对有序离散特征数据进行OneHotEncoder(get_dummies, LR和深度学习涉及该环节,且该转化会使矩阵稀疏化)
- 缺失值:同上
- 信息利用率:由于实际数据并非严格的线性,特征之间可能存在互相关系,所以需要多项式特征得到特征的高阶交叉项(PolynomialFeatures)
高维度数据增加模型的计算压力,且无关特征的干扰性强,故对数据进行降维(待研究。。。)
- PCA主成分分析法
- LI惩罚项的模型
- LDA线性判别分析法
- 机器学习中的特征工程
利用领域知识和现有数据,创造出新的特征,用于机器学习算法;可以手动(manual)或自动(automated)。神经网络的自动特征工程,常常不适用于现实中其他的复杂任务。同时,数据和特征工程决定了模型的上限,改进算法只不过是逼近这个上限而已。参考https://zhuanlan.zhihu.com/p/26444240?utm_source=weibo&utm_medium=social
个人感觉以上的数据预处理其实也是特征工程的一部分,而这部分主要是对数据构建完成后的数据集特征进行处理。
- 处理已有类别特征-如颜色、性别、国籍、邮政编码等
- 离散无序特征:为分类值,采用one-hot编码实现特征数值化
- 对不连续离散或非数值(文本,字符)类别特征:LabelEncoder标号处理,根据情况再做one-hot编码
- 数值特征(可以连续可以离散,实数值)-如年龄、价格等(对数据进行单调转换,不会对决策树算法造成影响)
- 标准化
- 连续数值特征离散化:根据实际模型应用情况可以对其进行阈值离散化
- 归一化
- 正则化
- 时间特征数据类型转化-如时间戳
- 针对时间戳提取相关的信息,如day、hour等等
- 特征选择-寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant)的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。(参考西瓜书11章)
- 去除相关性不大的特征,相关性较高的优选选择
- 取值变化较小的特征放弃,方差为0,不发散
- 过滤法https://baijiahao.baidu.com/s?id=1582723859862488016&wfr=spider&for=pc:先通过pearson相关系数等方法选择最优特征方案再进行模型选择,fearture_selection.SelectKBest/SelectPercentile
- 包裹法:将特征选择作为特征子集搜索问题,通过模型评估特征子集筛选最优特征子集(典型算法:递归特征删除算法)
- 嵌入式:将特征选择算法作为组成部分嵌入到学习算法中(决策树中每次迭代需要对特征进行择优便是这种思想)
- 特征构造
- 数值特征的简单变换,加减乘除
- 类别特征和数值特征的组合:通过pandas的groupby操作对某一类别特征的某一数值特征求统计值,(该比赛中,可以对用户的当小时/当天点击广告数进行统计)
- 通过决策树创造新的特征,将决策树模型的输出叶子节点作为新的特征加入模型中。(具体模块包实现方法:apply()以及decision_path())
- 模型选择
本比赛的模型模块包,基于python的sklearn机器学习工具包
https://www.jianshu.com/p/cd5a929bec33 Sklearn快速入门
http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030181 Sklearn0.18中文文档
https://zhuanlan.zhihu.com/p/29053940?group_id=916424345212342272 常见计算广告点击率预估算法总结
https://blog.csdn.net/july_sun/article/details/53088673 机器学习常见分类器比较
本次比赛的模型选择,先以LR完成基本的base_line,再跑RF、GBDT、XGBoost、LightGBM模型。GBDT+LR、FM和深度学习模型未研究
- LR模型
- 最简单的线性回归模型,但是其对正负样本的额平衡十分敏感,而该比赛项目中的交易样本与非交易样本的占比差很大
- 容易欠拟合
- 缺失值对模型的影响,需要进行处理
- 对特征值需要进行归一化或者标准化处理
在该模型方案中,我们将训练集和测试集的特征相结合进行缺失值处理、数据转化、特征提取构造、类别标签编码和oneHot编码、标准化处理等,然后跑模型
- RF随机森林模型-参考西瓜书第八章
- 对离群点非常敏感,缺失值对决策树模型的影响不大
- 过拟合
- 计算开销小。泛化能力强,
- 方差小,错误率低
在该模型方案中,我们将训练集和测试集的特征相结合进行数据转化、特征提取构造、类别标签编码、标准化处理(可有可无,不影响整体)等,然后跑模型
- GBDT梯度下降-https://www.cnblogs.com/rocketfan/p/4324605.html GBDT基本原理
- 降低偏差
- 比RF更易过拟合
- 不适合高维度稀疏矩阵
https://www.jianshu.com/p/005a4e6ac775 https://www.cnblogs.com/rocketfan/p/4324605.html(补) GBDT的基本介绍
https://blog.csdn.net/baoyan2015/article/details/56016169 随机森林、GBDT和LR的理解和对比
http://blog.sina.com.cn/s/blog_7103b28a0102w6zr.html GBDT和RF的比较
https://www.cnblogs.com/DjangoBlog/p/6201663.html GBDT调参干货
- XGBoost模型
- 相对于GBDT,在损失函数的优化上在泰勒公式展开后多利用了二阶求导函数
- 加了剪枝处理
- 在目标函数中引入正则化,防止过拟合
http://www.52cs.org/?p=429 陈天奇 XGBoost中文版原理介绍
https://blog.csdn.net/sb19931201/article/details/52557382 XGBoost入门
https://blog.csdn.net/qq_28031525/article/details/70207918 RF、GBDT和XGBoost的区别
- LightGBM模型
- 轻量级GBM梯度提升机
- 模型训练速度飞快,效率高
- 基于直方图的决策树算法
- 相对于XGBoost内存上优化
https://blog.csdn.net/niaolianjiulin/article/details/76584785 LightGBM原理介绍
http://www.360doc.com/content/18/0101/17/40769523_718161675.shtml GBDT、XGBoost和LightGBM介绍
https://blog.csdn.net/snoopy_yuan/article/details/75808006 参考同类型比赛经验,移动推荐算法
https://blog.csdn.net/weixin_37933986/article/details/68488339 机器学习常见损失函数
https://blog.csdn.net/google19890102/article/details/50522945 损失函数
https://www.lfd.uci.edu/~gohlke/pythonlibs/ 黑科技(里面包含很多python第三方库的下载资源)
https://blog.csdn.net/losteng/article/details/78378958 GBDT+LR
https://blog.csdn.net/lilyth_lilyth/article/details/48032119