基于深度LightGBM集成学习模型的谷歌商店顾客购买力预测

2019-01-06 07:27叶志宇冯爱民高航
计算机应用 2019年12期
关键词:机器学习数据挖掘

叶志宇 冯爱民 高航

摘要:针对轻量化梯度促进机(LightGBM)等集成学习模型只对数据信息进行一次挖掘,无法自动地细化数据挖掘粒度或通过深入挖掘得到更多的数据中潜在内部关联信息的问题,提出了深度LightGBM集成学习模型,该模型由滑动窗口和加深两部分组成。首先,通过滑动窗口使得集成学习模型能够自动地细化数据挖掘粒度,从而更加深入地挖掘数据中潜在的内部关联信息,同时赋予模型一定的表示学习能力。然后,基于滑动窗口,用加深步骤进一步地提升模型的表示学习能力。最后,结合特征工程对数据集进行处理。在谷歌商店数据集上进行的实验结果表明,所提深度集成学习模型相较原始集成学习模型的预测精度高出6.16个百分点。所提方法能够自动地细化数据挖掘粒度,从而获取更多数据集中的潜在信息,并且深度LightGBM集成学习模型与传统深度神经网络相比是非神经网络的深度模型,参数更少,可解释性更强。

关键词:机器学习;轻量化梯度促进机;数据挖掘;深度模型;集成学习;特征工程

中图分类号: TP391.4文献标志码:A

Customer purchasing power prediction of Google store based on deep LightGBM

ensemble learning model

YE Zhiyu, FENG Aimin*, GAO Hang

(College of Computer Science and Technology, Nanjing University of Aeronautics and Astronautics, Nanjing Jiangsu 211100, China)

Abstract: The ensemble learning models such as Light Gradient Boosting Machine (LightGBM) only mine data information once, and cannot automatically refine the granularity of data mining or obtain more potential internal correlation information in the data by deep digging. In order to solve the problems, a deep LightGBM ensemble learning model was proposed, which was composed of sliding window and deepening. Firstly, the ensemble learning model was able to automatically refine the granularity of data mining through the sliding window, so as to further mine the potential internal correlation information in the data and a certain expressive learning ability was given to the model. Secondly, based on the sliding window, the deepening step was used to further improve the representation learning ability of the model. Finally, the dataset was processed with feature engineering. The experimental results on the dataset of Google store show that, the prediction accuracy of the proposed deep ensemble learning model is 6.16 percentage points higher than that of original ensemble learning model. The proposed method can automatically refine the granularity of data mining, so as to obtain more potential information in the dataset. Moreover, compared with the traditional deep neural network, the deep LightGBM ensemble learning model has fewer parameters and better interpretability as a non-neural network.

Key words: machine learning; Light Gradient Boosting Machine (LightGBM); data mining; deep model; ensemble learning; feature engineering

0引言

今廣泛应用于数据挖掘任务的集成学习[1]模型主要有随机森林(Random Forest, RF)[2]、轻量化梯度促进机(Light Gradient Boosting Machine, LightGBM)[3]、Catboost(gradient boosting with Categorical features support)[4]。随机森林属于集成学习中的bagging[5],而LightGBM、Catboost属于集成学习中的boosting[6],都是基于梯度促进决策树(Gradient Boosting Decision Tree, GBDT)[7]的集成学习模型,且具有预测精度高、训练速度快、占用内存少等优点,成为解决数据挖掘问题的主流方案;但目前对于集成学习模型的应用,大都只是将所得到的特征集整块地放入模型中进行训练学习,其对数据关联关系只进行一次挖掘,挖掘粒度较为粗糙,不具备深度挖掘的能力,因而亦无法自动挖掘出数据间更为深入的关联关系。

为了获取更多的数据关联信息,目前主流方法都是依靠人工设计的特征工程对原始特征集进行处理,将处理后的数据再整体放入集成学习模型中进行训练。人工设计的特征工程非常依赖设计人员的经验积累以及大量的数据分析工作,因而,如何能够使得LightGBM等模型自动地获取深度信息成为关键。

对于如何自动地获取数据中的深度信息,深度网络在图像处理以及自然语言处理任务上都获得了很出色的成绩。例如:长短期记忆(Long Short Term Memory, LSTM)模型[8]及其变型[9-11]被广泛地应用于自然语言处理等任务上;深度卷积神经网络(Deep Convolutional Neural Network, DeepCNN)[12]则被广泛地应用于图像处理任务中。其中,表示学习能力[13]被公认为是深度网络中不可或缺的一部分。若能够赋予集成学习模型一定的表示学习能力,将使其能够自动地挖掘数据中更为深入的关联关系。

深度森林[14]的提出给深度模型带来了新的思考方向——能够做成深度形式的模型不只有神经网络。借鉴深度森林的思想,本文通过将LightGBM、Catboost模型做成深度的形式,从而使其具有挖掘数据中深度信息的能力。首先,通过加入滑动窗口对特征集进行划分,细化数据挖掘粒度,从而使得模型能够潜在地具有情境意识或结构意识;然后,在滑动窗口的基础上,通过加深操作进一步地提升模型的表示学习能力。与原始集成学习模型相比,本文所提的深度集成学习模型能够自动地发掘更多特征之间的潜在关系,对数据潜在信息进行深入挖掘,而不是仅停留在已有的特征层面上;并且,所使用的基础模型是集成树模型,树模型与其他模型相比具有更好的可解释性,其树节点的划分思想与人类的思考过程是非常相似的,有助于对模型的分析和研究。

除此之外,本文还提出了半自动化特征工程来进一步强化模型的挖掘信息能力。在数据挖掘领域,特征工程往往起着很重要的作用,不同特征工程得到的特征集不同,一个好的特征工程可以揭示数据集中更多的关联信息,从而使得机器学习模型得到更加精准的预测;而特征工程[15]的设计又非常依赖人工分析,一旦涉及到人工的方式就非常耗时耗力,特别是当数据量非常庞大的时候,因而如果能通过自动化生成特征和人工分析相结合的方式来获取更多潜藏信息将会大幅减少人工操作量,同时还能提高预测的精确度。最后,将本文所提的方法应用在谷歌商店顾客数据集上,验证了本文方法的可行性、有效性。

1.1LightGBM

LightGBM是对GBDT的高效实现,尽管已经有了一些关于GBDT实现的算法,例如XGBoost(eXtreme Gradient Boosting)[16]、pGBRT(parallel Gradient Boosted Regression Trees)[17]、scikit-learn(machine learning in Python)[18]等;但是當数据的特征维度高、样本个数多时,它们的表现就不尽如人意了。其中,最主要的原因在于以上的实现算法都需要对所有数据样本遍历,然后估计所有可能划分点的信息增益,这项操作是非常耗时的。因而,LightGBM提出了GOSS(Gradient-based One-Side Sampling)和EFB(Exclusive Feature Building)两种解决方法。

GOSS算法(算法1)排除了大部分具有小梯度的样本,只使用剩余的样本来进行信息增益估计,LightGBM[3]研究表明:具有较大梯度的样本在计算信息增益的时候扮演着更加重要的角色,GOSS可以通过更加小规模的数据来获得非常精准的信息增益计算。

EFB算法(算法2和算法3)通过将互斥的特征捆绑在一起,来减少特征数目。互斥特征意味着它们几乎很少同时出现非零值,并且LightGBM也表明:找到最优互斥特征捆绑是NP(Non-deterministic Polynomial)难问题,但是贪心算法能够获得非常好的近似概率。

算法1GOSS。

输入训练数据I, 迭代次数d,大梯度数据采样率a,小梯度数据采样率b,损失函数loss,弱学习器L。程序前

models←{}, fact←(1-a)/b

1)topN←a×len(I),randN← b×len(I)

2)for i=1 to d do

3)preds←models.predict(I)

4)g← loss(I,preds),w←{1,1,…}

5)sorted← GetSortedIndices(abs(g))

6)topSet← sorted[1: topN]

7)randSet← RandomPick(sorted[topN:len(I)],randN)

8)usedSet← topSet+randSet

9)w[randSet]×=fact∥给小梯度数据分配权重参数

10)newModel←L(I[usedSet],-g[usedSet],w[usedSet])

11)models.append(newModel)程序后

算法2Greedy Bundling。

输入特征集F,最大冲突计数K;

输出捆绑集bundles。程序前

构造图G

1)searchOrder←G.sortByDegree()

2)bundles←{},bundlesConflict←{}

3)for i in searchOrder do

4)needNew← True

5)for j=1 to len(bundles) do

6)cnt←ConflictCnt(bundles[j],F[i])

7)if cnt+bundlesConflict[i]≤K then

8)bundles[j].add(F[i]),needNew← False

9)break

10)if needNew then

11)将F[i]作为新的捆绑束bundle加入到捆绑集bundles中程序后算法3Merge Exclusive Features。

输入数据的数目numData,一束关于互斥特征的捆绑特征F;

输出新的直方图newBin,直方图区间binRanges。程序前

1)binRanges←{0},totalBin←0

2)for  f  in F do

3)totalBin+=f.numBin

4)binRanges.append(totalBin)

5)newBin←new Bin(numData)

6)for i=1 to numData do

7)newBin[i]←0

8)for j=1 to len(F) do

9)if F[j].bin[i]≠0 then

10)newBin[i]←F[j].bin[i]+binRanges[j]程序后

1.2Catboost

首先,该模型通过在训练的过程中处理和利用类属特征,而不是在预处理阶段进行此操作。其次,该模型使用了新的模式来计算叶节点的值,从而减少了过拟合现象。对于某个样本的某个类属特征的替换式如下:

∑p-1j=1[xσj,k=xσp,k]Yσj+a·P∑p-1j=1[xσj,k=xσp,k]+a

2本文模型

本文提出的深度集成学习模型主要由两部分组成:

1)滑动窗口。在原始特征向量上进行滑动,自动地将原始特征集分割成多个不同的窗口,从而实现进行深度特征抽取,滑动窗口的大小自主选择,步长固定为1;假设,全特征向量用full_cols表示,滑动窗口大小为window_size,总的滑动窗口数目为len(full_cols)-window_size+1。

2)加深。将第一块中每个窗口所产生的预测结果串联成一个全新的特征向量,再将新的特征向量放入所选基础模型中进行训练,这样会产生预测结果,将预测结果与输入的特征向量串联作为下一层的输入;可以不断迭代来加深模型深度。

2.1滑动窗口

为了使得集成学习模型能够自动地细化数据挖掘粒度并且在数据集上潜在地具有情境意识或结构意识,本文提出将滑动窗口(对应图1中内部和外围虚线框)预测结果以及原始特征向量串联作为新的特征向量,具体算法流程见算法4。并且,在进行训练的时候都采用K折交叉验证方式进行訓练,避免出现过拟合现象。

算法4滑动窗口产生新特征。

输入原始数据集为D,window size为w;

输出将full_cols与each_time_cols预测结果串联。程序前

1)full_cols=D.columns

2)window_size=len(full_cols)

3)LightGBM/Catboost对window_size数据进行训练,产生预测结果

4)window_size=w

5)for i in range(len(full_cols)-window_size+1)

6)each_time_cols=full_cols[i:i+window_size]

7)LightGBM/Catboost对each_time_cols数据进行训练,并产

生预测结果程序后

从图1和算法4可以清晰地看到,图1中最外围虚线框对应着算法4中第2)步:全特征训练及其预测结果,图1中内部虚线框对应着算法4中第4)步:滑动窗口训练及其预测结果,图1的最右输出向量对应着算法4的输出;无论是全特征还是滑动窗口都可看作滑动窗口,只是window_size不同。

根据最终评判指标的变化来对window_size进行调整,例如:window_size从小到大进行变化,当window_size偏小时,所产生的新特征向量维数就更大;若在增大window_size时预测误差越来越小,则继续增大window_size,直到预测误差增加时停止增加window_size。

2.2加深

为了使本文所提的算法也能具有一定的深度网络中的表示学习能力[13],因而在滑动窗口的基础上,对于模型层次进行加深,通过加深模型层次的方式来进一步提升算法表示学习能力,具体算法步骤见算法5。

算法5深度LightGBM/Catboost集成学习模型。

输入滑动窗口输出的特征向量,深度参数Depth;

输出学习模型预测值。程序前

1)for i in range(Depth)

2)输入向量放入LightGBM/Catboost模型进行训练

3)if i==0

4)预测结果作为新特征与输入向量串联

5)else

6)预测结果覆盖输入向量中对应位置特征值

7)更新过的输入向量作为下一层输入向量程序后

在该部分,本文首先将滑动窗口部分的输出特征向量作为输入。对于LightGBM/Catboost+滑动窗口模型进行加深的算法5,其算法流程为:首先,将输入特征向量放入学习模型进行训练,同样也将采用K折交叉验证进行训练。其次,如若当前所处深度等于1,则将学习模型的预测结果和输入特征向量串联;如若当前所处深度大于1,则将学习模型的预测结果覆盖到输入特征向量中存储上一层预测结果的位置。图2中每层输出特征向量的第一个虚线框代表着每层学习模型的预测结果。最后,达到指定深度时,将学习模型的预测结果输出。图2所展示的是Depth=2时模型结构,通过控制Depth参数来调整模型的深度。

深度的确定依据最终预测结果的精度,若层次过深、精度下降,则减少加深层次、调整深度以达到最优精度输出。

除了将LightGBM和Catboost做成深度形式以外,还将LightGBM+Catboost集合做成深度形式。在对LightGBM+Catboost进行加深之前,首先,按照算法4分别生成对应于LightGBM和Catboost的全特征预测值以及滑动窗口预测值,假设:len(full_cols)=100,window_size=25,那么滑动窗口阶段所输出的特征向量维数d=len(full_cols)+2+2(len(full_cols)-window_size+1)=254;接下来,关于深度模型的具体操作见算法6。算法6中i==0的情况对应着图3中Depth=1的过程,在图3中可以清楚地看到,Depth=1时,输入向量和输出向量之间的差异。

算法6深度LightGBM+Catboost集成学习模型。

输入滑动窗口输出的特征向量,深度参数Depth;

输出加权求和的预测结果。程序前

1)for i in range(Depth)

2)输入向量分别放入LightGBM和Catboost学习模型进行训练

3)if i==0

4)LightGBM和Catboost预测结果分别作为新特征与输入向量串联

5)else

6)LightGBM和Catboost预测结果分别覆盖输入向量中对应位置特征值

7)更新过的输入向量作为下一层输入向量

8)LightGBM和Catboost预测结果分别乘上wlgb、wcat,相加得到最终预测结果程序后

2.3特征工程

将通过分析谷歌商店顾客数据集中的各个特征在LightGBM中重要性表现来进行特征工程操作。对原始特征集中几个较重要的特征进行解释说明,如表1所示。

首先,将原始谷歌商店顾客数据集放入LightGBM训练的结果如表2所示。

从表2可以发现,关于pageviews(每次会话中页面浏览次数)的特征权值最大,而在原始数据集中对于pageviews的操作有sum、count、mean。通过分析可知,进行上述操作的特征都是属于数值型特征,对于数值计算的指标不仅仅是以上3种。

于是,本文的特征工程自动地对数值型特征进行处理,对其进行sum、count、mean、median、std统计分析,最终获得基于数值型特征的额外统计分析特征。而原始数据集中对于totals_newVisits(每次会话中新访问次数总和)却没有进行处理,通过分析pageviews产生衍生特征的过程,对totals_newVisits按照network_domain(網络管区)、region(地理区域)分组进行count、sum、mean、median、std操作来获取额外的新特征。在进行上述两个操作后,再将获得的新数据集放入LightGBM中进行训练,可以得到表3所示的特征权值排序。

如果只是一直不停地增加特征,不但增加运行时间,还使得预测精度下降。从表2和表3中可以观察到,后半部分特征的权值远远大于前半部分特征,并且有一些特征的权值几乎为零。

而这些对于学习模型没有帮助的特征是多余的,本文通过删除Date_Hour(会话发生在几时)、Date_Is_year_start(会话是否发生在一年的开端)、Date_Is_year_end(会话是否发生在一年的末尾)、Date_Is_quarter_start(会话是否发生在季度的开端)、Date_Is_quarter_end(会话是否发生在季度的末尾)等权值偏低的特征,最终所得数据集再放入LightGBM中训练,便可得到表4中所示的特征权值排序。

从表4中可以观察到,在删除了一些特征之后,整体特征的权值分布更加均匀了,而且在图中的最后几名特征也有了一定的贡献,虽然也很低,但不像表2和表3中贡献几乎为0。

通过上述两种操作来实现半自动化特征工程,其中对于数值型特征的操作属于自动化处理,而删除特征操作属于人工分析的方式。

3实验与结果分析

3.1数据集

本文所使用的数据集是来自Kaggle网站上2018年9月份左右举办的Google Analytics Custmer Revenue Prediction比赛数据集,通过分析Google Merchandise Store(also known as GStore swag is sold)的顾客数据集来预测将来每位顾客的购买力,可以确保数据来源的真实性和有效性,同时也能验证本文所提方法的实际性。本文所述的原始数据集,指的是在进行过数据清洗和一定的特征工程操作后所得到的数据集,数据集及其评测指标如表5所示。表5中,训练集之所以比测试集多了一列特征的原因是:多出的一列是预测目标,也就是客户购买力。其中均方根误差(Root Mean Squard Error, RMSE)的计算式为:

RMSE=1n∑ni=1(yi-y^i)2

其中,y^i是预测某客户购买力的自然对数,并且yi是实际某客户购买力总和加1的自然对数。RMSE越小表明预测结果越准确。

在关于客户购买力预测问题上,往往存在着80/20定律,该定律证明了在许多商业贸易中,大部分的利润来源于一小部分的顾客。

通过对数据进行简单的分析可以发现,比赛所给出的数据的确符合80/20准则,图4显示了有进行商品购买的用户大多集中在编号700000以上,而在此之前的用户几乎都不产生任何利润。

3.2结果分析

[10]BAO W, YUE J, RAO Y. A deep learning framework for financial time series using stacked autoencoders and long-short term memory [J]. PloS One, 2017, 12(7):  Article No. e0180944.

[11]SHAO X, MA D, LIU Y, et al. Short-term forecast of stock price of multi-branch LSTM based on K-means [C]// Proceedings of the 2018 International Conference on Systems and Informatics. Piscataway: IEEE, 2018: 1546-1551.

[12]SIMONYAN K, ZISSERMAN A. Very deep convolutional networks for large-scale image recognition [EB/OL]. [2019-03-20]. https://arxiv.org/pdf/1409.1556.pdf.

[13]BENGIO Y, COURVILLE A, VINCENT P. Representation learning: a review and new perspectives [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013, 35(8): 1798-1828.

[14]ZHOU Z-H, FENG J. Deep forest: towards an alternative to deep neural networks [C]// Proceedings of the 26th International Joint Conference on Artificial Intelligence. Menlo Park: AAAI Press, 2017: 3553-3559.

[15]SCOTT S, MATWIN S. Feature engineering for text classification [C]// Proceedings of the 1999 International Machine Learning Conference. San Francisco: Morgan Kaufmann Publishers Inc., 1999: 379-388.

[16]CHEN T, GUESTRIN C. XGBoost: a scalable tree boosting system [C]// Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. New York: ACM, 2016: 785-794.

[17]TYREE S, WEINBERGER K Q, AGRAWAL K, et al. Parallel boosted regression trees for Web search ranking [C]// Proceedings of the 2011 International Conference on World Wide Web. New York: ACM, 2011: 387-396.

[18]PEDREGOSA F, VAROQUAUX G, GRAMFORT A, et al. Scikit-learn: machine learning in python [J]. Journal of Machine Learning Research, 2011, 12: 2825-2830.

YE Zhiyu, born in 1994, M. S. candidate. His research interests include machine learning, data mining, tree model, deep model.

FENG Aimin, born in 1971, Ph. D., associate professor. Her research interests include machine learning, data mining.

GAO Hang, born in 1964, Ph. D., associate professor. His research interests include multimedia technology, embedded system.

收稿日期:2019-04-29;修回日期:2019-07-25;錄用日期:2019-07-26。

作者简介:叶志宇(1994—),男,福建三明人,硕士研究生,主要研究方向:机器学习、数据挖掘、树模型、深度模型;冯爱民(1971—),女,江苏南京人,副教授,博士,主要研究方向:机器学习、数据挖掘;高航(1964—),男,江苏南京人,副教授,博士,主要研究方向:多媒体技术、嵌入式系统。

文章编号:1001-9081(2019)12-3434-06DOI:10.11772/j.issn.1001-9081.2019071305

猜你喜欢
机器学习数据挖掘
数据挖掘技术在内河航道维护管理中的应用研究
数据挖掘综述
软件工程领域中的异常数据挖掘算法
基于词典与机器学习的中文微博情感分析
基于网络搜索数据的平遥旅游客流量预测分析
前缀字母为特征在维吾尔语文本情感分类中的研究
基于支持向量机的金融数据分析研究
基于R的医学大数据挖掘系统研究
机器学习理论在高中自主学习中的应用
一本面向中高级读者的数据挖掘好书