1. 引言
随着我国国民经济的飞速发展,人民的生活水平明显提高,以电子商务为代表的新兴产业快速发展。购物网站聚集了海量的商品和用户信息,用户可以通过网站的商品搜索,足不出户,及时方便的获取海量的商品和用户信息,购买心仪的商品,而不是局限于线下购买这种传统的交易方式,极大的方便了用户的购买体验。本文主要解决的是消费者网上购买行为预测问题。希望网站能够根据用户的喜好推荐用户感兴趣的商品,提高用户的体验,改善互联网的购物环境。
对于该问题国内方面,李旭阳 [1] 等人提出了长短期记忆网络(Long Short-Term Memory, LSTM)和随机森林(Random Forest, RF)相结合的预测模型进行研究,它们从原始数据中分别提取静态特征和动态特征,对这些特征通过LSTM进行特征选择,再用随机森林算法做预测。马倩 [2] 先通过特征工程从原始数据中提取出客户和商品的相关特征,接着对基于决策树的极限梯度提升算法(Extreme Gradient Boosting, XGBoost)和逻辑回归算法(Logistic Regression, LR)分别用人工赋权重法和线性模型学习赋权重法融合后对商品平台商品复购做预测。陈龙 [3] 通过当前较为流行的三种梯度提升算法分别用投票法和堆叠法做融合后对商品购买行为做预测。张震 [4] 通过对装袋算法(Bootstrap aggregating, Bagging)方法改进提出了一种细分化集成模型融合单一算法,提高了商品复购行为的预测准确率。邹润 [5] 对商品平台关于商品的点击数据设计了直接特征、转化率特征、时间特征和转化率特征,用随机森林的方法做特征选择后,再用渐进梯度回归树的方法取得较好的预测结果。
国外方面,Y Tian等人根据个人与个人之间的电子商务(Consumer to Consumer, C2C)线上线下购销量具有显著差异的缺点,构建了一种使用用户交易频率和时间的预测模型,通过在真实交易数据中验证其准确性。通过传统的Pareto/NBD模型,为预测C2C电子商务下用户重复购买行为提供了一个简单而强大的工具 [6]。Zuo Y等人通过采用支持向量机(support vector machines, SVM)模型处理消费者在超市产生的射频识别数据,研究发现SVM模型与线性回归等预测模型相比,显著提高了消费者购买行为的预测准确率 [7]。HJ Chang等人通过聚类分析和关联规则分析提出了潜在客户购买行为的预测模型,其中聚类分析提取搜集忠诚客户的个人信息数据用于定位潜在客户属性,关联规则分析提取忠诚客户购买行为的特征用于检测客户对热销商品的兴趣 [8]。YS Cho等人提出了一种基于最近一次消费、消费频率和消费金额,即RFM (Recency, Frequency, Monetary)模型的新增量加权挖掘方法,用于消费者购买行为中的预测,并为了验证其有效性,收集了网上商城的化妆品用户消费行为数据集中进行实验 [9]。
本文通过阿里巴巴天池大赛所提供的数据进行数据处理后做特征工程,生成新的衍生特征,再通过互信息的方法进行特征选择,通过文章提出的BalanceCascade [10] 采样方法对数据进行采样,用软投票策略将分类算法融合后进行预测,将预测结果与传统的机器学习方法做出的预测结果作对比,也将简单欠采样,EasyEnsemble [11] 和BalanceCascade的采样方法做出的预测结果作对比,得出结论。
2. 特征模型
本文所使用的数据来源于阿里巴巴提供的2014年11月18日到2014年12月18日的10,000名用户在某网站上的用户与商品的历史交互记录。但是无法从这些数据中得到实用的特征数据,所以我们必须对原始数据进行特征提取。原始数据有如下特征。
文章根据表1所给出的原始特征来提取新的特征,同样也把它们分为用户特征,商品特征和用户–商品特征3个特征类别。
2.1. 特征提取算法
算法1:特征提取算法
输入:天池大赛记录的数据
输出:商品特征,用户特征,商品–用户特征
(a) 统计测试样本和训练样本的数据中发生购买行为和未发生购买行为的数据item_id和user_id;
(b) 遍历样本数据之前的1天,3天,5天,7天,9天内每个item_id发生的购买,浏览,收藏,加购物车的行为次数;
(c) 遍历样本数据之前的1天,3天,5天,7天,9天内每个user_id发生的购买,浏览,收藏,加购物车的行为次数;
(d) 遍历样本数据之前的1天,3天,5天,7天,9天内每个user_id对应的item_id发生的购买,浏览,收藏,加购物车的行为次数;
(e) 分别构造商品特征,用户特征,商品-用户特征,即将(b),(c)和(d)所统计的行为次数进行加权或作相除形成新的特征。
2.2. 用户特征
用户特征保留了原始特征User_id,而对于特征User_geohash缺失数据超过了总数据的三分之二,并且对数据进行了加密处理,因此数据间不具有相关性,所以本文决定把该特征值剔除掉。新加入的用户特征如表2。
2.3. 商品特征
商品特征保留了原始特征item_id和item_category,增添了新的商品特征,新加入的特征如表3。
2.4. 用户–商品特征
对于用户–商品特征,本文将用户购买商品的时间划分为日期和具体的时刻,用户–商品的原始特征无法作为所需要的特征直接运用,但是用户特征,商品特征以及用户–商品特征当中的新特征都是从特征Behavior_type和Time中提取出来的。新加入的用户–商品特征如表4。
由于不同的时间刻度对当前的预测影响不同,所以文章取了5个时间刻度9天,7天,5天,3天,1天,对不同的时间刻度又形成了新的不同特征,再加上保留的部分特征,总共有108维特征。
3. 算法介绍
3.1. 互信息算法
互信息 [12] 是信息论里一种有用的信息度量,它可以看成是一个随机变量包含另一个随机变量的信息量。
设两个随机变量
的联合分布为
,边缘分布分别为
,
,互信息
是联合分布
的相对熵,即
(1)
文章用公式(1)计算每一个特征和目标值的互信息值,通过大小顺序排列,选择互信息值较大的特征。
3.2. XGBoost算法
XGBoost [13] 由华盛顿大学陈天奇博士提出,它是Gradient Boosting实现的有监督学习算法,可以解决分类、回归等问题。训练采用的数据集样本为
,其中
,
。
表示具有m维的特征向量,
表示样本标签,模型包含K棵树,则XGBoost模型的定义如下:
(2)
表示第K棵决策树,决策树会对样本特征进行映射,使每个样本落在该树的某个叶子节点上。每个叶子节点均包含一个权重分数,作为落在此叶子节点的样本在该树的预测值
。计算样本在每棵树的预测值(即
)之和,并将其作为样本的最终预测值。
XGBoost的目标函数定义如下:
(3)
目标函数Obj有两项组成:第一项为损失函数,用于评估模型预测值和真实值之间的损失和误差,该函数必须是可微分的凸函数;
项为正则项,用来控制模型的复杂度,正则化项倾向于选择简单的模型,避免过拟合。正则化项的定义如下:
(4)
第一项
通过叶子节点树及其系数控制数的复杂度,值越大则目标函数越大,从而抑制模型的复杂程度。第二项为L2正则项,用于控制叶子节点的权重分数。
为找到最优的
使目标函数最优,对公式中的目标函数,XGBoost采用了近似的方法。对式(3)改写:
(5)
式(5)中,
为第
轮样本
的模型预测值,
为第s轮训练的新子模型。
XGBoost引入泰勒公式近似和简化目标函数。取二阶泰勒公式的定义如下:
(6)
将式(6)中的
看作x,将
看作
,对XGBoost目标函数进行泰勒展开
(7)
式(7)中
为损失函数的一阶梯度统计;
为二阶梯度统计。
、
分别如下:
, (8)
(9)
去掉常数项
,并将
表达式代入公式,则式(7)转换为
(10)
3.3. 随机森林
随机森林 [14] 是一种集成学习方法,由美国科学家Leo Breiman在2001年提出的一种机器学习方法。该方法结合Bagging集成学习理论和随机子空间方法,将多个决策树作为基分类器,以一定策略选取部分属性和数据分别建树;在预测阶段根据森林中各棵树的预测结果进行投票表决,最终表决结果为随机森林预测结果。
3.4. 软投票策略
软投票策略 [15] 预测模型将所有模型预测样本以某一类别的概率的平均值作为标准,概率最高的对应的类型为最终的预测结果。将XGBoost和RFC两个算法通过软投票的方法进行预测,得到比单一算法更好的预测结果。
3.5. BalanceCascade算法
BalanceCascade算法是一个对于EasyEnsemble的算法的改进,它是借鉴了AdaBoost的纠错思想,选择更多不同的样本进行学习,从而求得更好的预测结果。
输入样本:小类样本集P,大类样本集N,其中
;从N中采样的子集个数T,迭代次数s;训练AdaBoost集成学习器
输出:集成模型
(a)
,
,其中f为误报率(即判定为小类的大样本占比),训练
;
(b) Repeat;
(c) 对N随机采样得到子集
,其中
;
(d) 由P和
训练AdaBoost集成学习器
,其中弱学习器
的个数为
,相应权重为
。该集成学习器的阈值为
。公式如下:
(11)
(e) 调节阈值
使得
的假正率为f;
(f) 移除N中被
正确分类的全部样本;
(g) Until
;
(h) 输出集成学习器:
(12)
4. 本文算法模型构建
预测用户购买主要分为三个步骤:1) 产生训练样本子集;2) 训练集分类器;3) 基分类器融合。
4.1. 产生训练样本子集
先将数据集分为购买和未购买两大类,再从这两类数据中进行随机抽样,使抽取的测试集数据中购买和未购买两类数据比例接近数据集中购买与未购买的数量比,再对抽取的数据进行特征提取,得到本文的训练样本子集。
4.2. 训练基分类器
随机森林是机器学习中常用的解决分类问题算法之一,是一个包含多个决策树的分类器。
XGBoost是基于提升树模型设计的,而提升树被认为是性能最好的机器学习算法之一。此外,XGBoost还支持二阶导数运算和并行计算,可以利用正则项控制模型复杂度,因此准确度高。
本文选择XGBoost和随机森林作为基分类器,由于BalanceCascade利用了集成策略,分别对每一组数据训练参数调优耗费时间过长,用集成后预测的结果来逐步调节算法的关键参数,从整体的角度进行调节参数,可以节约大量的时间,得到较优的结果。最后通过软投票方法将两种算法融合后做预测。
4.3. 算法融合方法
在本文的算法模型中运用了软投票的算法融合方法,在做对比实验中运用了经典的堆叠法(Stacking)做算法融合和当下较为流行的XGBoost和逻辑回归算法相结合的模型 [16]。软投票方法在第二章进行了介绍,堆叠法是一种分层的集成模型,第一层用XGBoost和随机森林对训练样本做预测,第二层用逻辑回归算法将上一层的结果进行训练后再预测。XGBoost和逻辑回归结合的方法最早用于互联网广告点击通过率预测,XGBoost不仅是一个分类算法也是一个天然的特征处理器,通过样本落在XGBoost叶子节点上的位置构造一个新的特征,再通过逻辑回归算法做预测。
4.4. 基分类器的集成
通过前面的工作,可以得到m个不同的训练集,用软投票策略融合XGBoost和随机森林作为基分类器。运用BalanceCascade的方法将这些基分类器通过公式(12)联合起来做预测。
给定样本
,
,集成模型有个基分类器
,则对于样本x,其集成输出的结果为
(13)
4.5. 本文算法描述
算法2:BalanceCascade-XGBoost&RFC
输入:未购买行为样本集N和发生购买行为样本集P,且使得样本集N与P的比值关系满足数据集中未购买行为和发生购买行为的数据比;
基分类器的个数T;
输出:购买行为预测结果
;
(a) 令
,且分类器
;
(b) 从样本集中N划分m份子样本集
;
(c) 从样本集中N中除去
的数据后,对剩余的数据做不重复随机抽样,选取和样本集P相同数量的子样本集
;
(d) 将样本集
分别与样本集P组合成训练集train_datai,把训练过train_datai的分类器
去预测数据
;
(e) 删除数据集N中分类器
预测数据集
的正确的数据,更新样本集N;
(f) 用融合分类器
去预测样本集的结果,令
,回到第(c)步重复执行,当
时结束并执行下一步;
(g) 分别用XGBoost和随机森林去训练T个训练集train_datai,并用软投票方法将XGBoost和随机森林结合后对测试集test_data预测得到T个结果;
(h) 用投票法将T个结果结合起来做出最终的二分类预测结果。
4.6. 本文算法优势
在处理样本类别不平衡问题上,本文采用BalanceCascade的采样方法,并与简单欠采样和EasyEnsemble的采样方法作对比。从算法上看,采用BalanceCascade采样方式,预测大类样本的准确率足够高时,不用刻意的的调节阈值。利用集成学习策略,从大类样本中随机抽样得到和小类样本数量相同的数据,在每一次迭代中,都要对大类样本的数据进行一次筛选,使能够选出更为不同的数据进行学习。而且BalanceCascade方法在对数据预测时候运用了Bagging的思想,能够更加充分的运用大类样本数据。同样在做预测的时候,本文选取的软投票策略将XGBoost和随机森林算法相融合。在该问题,XGBoost和随机森林是预测效果很好的分类算法,但在预测的时候仍有些预测数据概率接近0.5产生预测失误,用软投票策略可以更好的降低这一误差,结果也证明如此。
5. 参数优化
5.1. XGBoost调优
Max_depth、min_child_weight和colsample_bytree是XGBoost的三个重要参数。Max_depth为决策树的最大深度,本文将其设置为1~32。Min_child_weight表示叶节点的最小样本权重,本文将其取值范围设置为1~6。Colsample_bytree表示样本特征采样比,本文将其取值范围设为0.5~1。通过对这些参数的逐一搜索,得到的XGBoost算法的最优参数选择如下:max_depth为12,min_child_weight为2,colsample_bytree为0.68。
5.2. 随机森林调优
N_estimators、max_depth、min_child_leaf是随机森林的三个重要参数。N_estimators是决策树的数量,本文将其取值范围设为10~200,其中max_depth为决策树的最大深度,本文将其取值范围设置为1~40。Min_child_leaf表示最小的叶节点样本数,取值范围设置为1~50。通过对这些参数逐一搜索,得到随机森林的最优参数选择如下:n_estimators为140,max_depth为36,min_samples_leaf为8。
6. 实验及结果分析
6.1. 实验数据集
本文实验数据来源于阿里巴巴天池大赛提供的2014年11月18日到2014年12月18日本文选用天池大赛中阿里巴巴移动电商平台数据集进行测试,包括11月18日到12月18日的2,084,859条用户历史购买行为数据:包含用户标识、商品标识等6条字段,10,000名用户,1054种类的422,858件商品,对11月27日,28日和29日数据用户对商品的购买行为作为实验数据。其中,行为信息有浏览、收藏、加购物车、购买四种方式。
6.2. 数据预处理
对于提供的数据,将重复的数据去掉,再用本文给出的采样方法来抽取数据,通过特征工程对抽取的数据生成衍生特征,其中产生了许多空数据,为了能够更好的处理数据,对空数据进行了填充。文章并没有用传统的方法填充数据,而是根据文章产生空数据的特点,如在提取购买浏览转化率的特征时,用户没有浏览商品,则购买浏览转化率的空值意义更接近于无穷大,所以文章用远大于其它特征值的数字进行填充。购买收藏转化率和购买购物车的转化率都是用同样的方法进行填充。得到了新的108维特征,对数据进行归一化处理后,通过互信息方法对数据进行特征选择,选择了在前58位的特征值。
6.3. 评价指标
文章采用精确率P、召回率R和F1值三个指标来对模型的性能进行评估。其中文章将预测类别组合化为真正例(TP)、假正例(TN)、真负例(FP)、假负例(TN),计算公式为
6.4. 实验设计
为了验证本文提出的预测模型及算法的有效性,实验使用上述的数据集和评价标准,用软投票的方法将预测结果较好的算法进行融合并与当前热门的机器学习模型和不同的算法融合模型进行纵向对比。再对数据集进行不同采样方法的横向对比,其中包括简单欠采样,EasyEnsemble和BalanceCascade三种种采样方法。最后文章对特征选择前和特征选择后的数据结果进行对比。
6.5. 实验结果
以查准率P、召回率R和F1值为评价指标,当前热门的机器学习方法进行纵向对比,与不同的采样方法进行横向对比,特征选择前的表5和特征选择后的表6进行对比。
Table 5. Comparison of different algorithms before feature selection
表5. 特征选择前的不同算法对比
Table 6. Comparison of different algorithms after feature selection
表6. 特征选择后的不同算法对比
(a) 对比实验中,本文所提出的基于BalanceCascade用软投票方法将XGBoost和随机森林融合的方法做预测的F1值最高,则对用户购买行为预测效果最好;
(b) BalanceCascade方法比EasyEnsemble和简单欠采样方法预测结果更好,说明BalanceCascade对于平衡样本和数据训练的效果更好;
(c) 进行特征选择后的预测结果与特征选择前的预测结果相差不大,甚至在一些算法的预测结果还略优于特征选择前的结果,说明特征选择不仅能够减少计算量,还能减少一些带有噪声的数据;
(d) 基于BalanceCascade的软投票策略的方法的分类效果比其它的模型要优秀很多,主要是因为BalanceCascade的采样方法能够使大类样本的数据更加的充分的利用,而且在一些方面也降低了模型的偏差和方差。使用软投票的方法对XGBoost和随机森林算法融合得到的预测的结果比其它算法融合方法得到的预测结果更好,且也优于其它的单一算法。
7. 总结
本文通过分析阿里巴巴天池大赛所提供的数据,从用户,商品和用户–商品三个方面整理得到了108个不同特征,对数据信息进行了全面有效的挖掘。文章使用互信息的方法对数据进行特征选择,一方面是为了降低计算量,另一方面消除数据部分噪声。在处理类别不平衡问题方面,使用了BalanceCascade算法,并与EasyEnsemble算法和简单采样法作比较,它利用了集成学习机制,将从大类样本随机抽取和小类样本数量相同的数据进行学习,借鉴了自适应提升算法的思想,用软投票策略融合XGBoost和随机森林的算法作为基分类器进行预测,在每次迭代中删除与从大类样本随机抽取的数据属性相近的数据,使得下次迭代随机抽取的数据更加“与众不同”。并且使得全局不会丢失重要信息。本文章算法结合了Bagging和Boosting思想,降低了偏差和方差。通过用软投票的方法将XGBoost和随机森林进行融合的方法与单一的算法相比,它使得预测的结果概率更加均衡,降低了单一算法预测结果产生的偏差。在与热门的机器学习算法进行对比实验后,本文提出方法具有更高的F1值,也使得模型更加有效。
8. 展望
XGBoost和逻辑回归算法相结合的模型虽然在预测结果稍差于本文提出的算法模型,但是由于使用逻辑回归算法做预测,极大的缩短了算法的执行时间,从而提高了算法效率,且预测的准确率高于单一的逻辑回归算法,这说明XGBoost构造的特征比原始数据的特征更有助于做预测。实际生活中商品销售预测的数据量较大,在特征工程设计较好的情况下,运用这种方法效率更高。设计实用的特征工程则是该问题的一个研究方向。
基金项目
国家自然科学基金(12071293);国家教育部人文社科规划基金项目(16YJA630037);上海市一流学科建设项目(S1201YLXK)。