LSTM模型集成方法在客户流失预测中的应用
2019-11-12严建峰
周 捷 严建峰 杨 璐 夏 鹏 王 猛
(苏州大学计算机科学与技术学院 江苏 苏州 215006)
0 引 言
对企业而言,客户流失被定义为客户放弃继续购买该企业的商品或服务的情况。客户的流失会对企业造成直接经济损失。随着市场竞争的激烈程度逐年增高,企业所面临的客户流失问题日益严重。研究发现,企业成功获取新客户所需要的成本远高于保留已有客户[1],这使得客户保留对于企业来说格外重要。保留现有客户的常用方法是准确识别出高流失倾向的客户,然后针对这些客户实施多样性的挽留策略。客户流失预测作为客户关系管理的重要组成部分,通过对客户的历史数据进行分析建模,旨在准确识别出高流失倾向的客户,为企业后续的客户挽留策略制定提供指导。
在过去数十年,客户流失预测已经在电信[2-3]、银行[4-5]、游戏[6-7]以及音乐流媒体[8]等不同领域内被广泛研究。学者通常把客户流失预测当作二分类数据挖掘任务处理,通过构造业务特征以及选择合适的分类器来预测客户未来流失与否。许多流行的机器学习模型和深度学习模型在客户流失预测中得到成功应用,如逻辑回归(Logistic Regression,LR)[9]、决策树(Decision Tree,DT)[10]、支持向量机(Support Vector Machine,SVM)[11]、多层反馈神经网络(Neural Networks,NN)[12]和卷积神经网络(Convolutional Neural Networks,CNN)[13]等。模型集成[14]是用来提升预测效果的一个有效方法,常用集成方法有bagging[15]、boosting[16]和stacking[17]。文献[18]使用XGBoost(eXtreme Gradient Boosting,XGB)预测因特网服务提供商的客户流失情况,该模型是boosting集成方法的一种。文献[19]对比了几种集成学习分类器,发现随机森林(Random Forest,RF)效果最好,该模型是bagging集成方法的一种变体。文献[2]通过投票法集成了K近邻(K-Nearest Neighbor,KNN)、随机森林以及Rotation Forest三种模型,实验发现这三种模型的集成输出增加了模型多样性的同时提高了分类效果。
与深度学习模型相比,传统机器学习模型存在特征工程对模型效果影响较大、模型容量小等缺点。目前客户流失预测任务中的模型集成方法的研究大多集中于传统机器学习模型方面,在深度学习模型集成方法方面的研究较少。文献[5]提出一种深度集成分类器用于银行客户流失预测,其采用k折交叉验证的stacking集成方法将深度学习模型和传统机器学习模型一起集成,这样可能会存在两个问题:一是通过k折交叉验证训练深度学习模型会带来高昂的训练时间成本;二是当用于集成的模型的性能相差较大时,会影响最终模型集成的效果。文献[20]提出snapshot模型集成方法,可以在训练单个深度学习模型的过程中得到多个具有不同权值的模型用于模型集成,降低了深度学习模型集成的时间成本,在多个图像数据集上进行实验,验证了该方法的有效性。
为了在客户流失预测任务中发挥深度学习模型集成的效果,本文提出一种基于长短期记忆网络(Long short-term memory,LSTM)的模型集成方法(snapshot weighted LSTM,swLSTM)。该方法首先选择LSTM作为基学习器。然后对snapshot模型集成方法的训练过程进行改进,一方面是引入样本权重调整方法,根据当前子模型对训练样本的预测结果为下一个子模型计算训练样本权重;另一方面将各个子模型在验证集上的输出和对应的样本标签重组为一个新的训练集,再在新的训练集上训练逻辑回归模型。实验表明,本文方法能够显著提升客户流失预测效果。
1 相关理论基础
1.1 长短期记忆网络
LSTM由Hochreiter等[21]提出,广泛用于序列建模,其中门机制以及细胞状态的引入较好地缓解了经典循环神经网络中存在的梯度消失等问题。
LSTM的基本单元包括输出门、输入门、遗忘门以及细胞状态,其中细胞状态可以保存长期历史信息,保证模型训练过程中信息的有效流通,门机制可以对信息量进行限制。基本单元的结构图如图1所示。
图1 LSTM单元结构图
图1中:t表示当前时刻,t-1表示上一时刻,Ct-1、ht-1分别表示上一时刻细胞状态和隐藏层状态的输出,Ct、ht分别表示当前时刻细胞状态和隐藏层状态的输出,it表示输入门,ft表示遗忘门,ot表示输出门,σ表示sigmoid激活函数。LSTM基本单元各组成部分的更新公式如下:
ft=σ(Wfxxt+Wfhht-1+bf)
(1)
it=σ(Wixxt+Wihht-1+bi)
(2)
(3)
ot=σ(Woxxt+Wohht-1+bo)
(4)
(5)
ht=ot·tanh(Ct)
(6)
式中:Wox、Wix、Wfx和Wcx分别表示输出门、输入门、遗忘门、细胞状态对当前时刻输入xt的权重;Woh、Wih、Wfh和Wch分别表示输出门、输入门、遗忘门和细胞状态对隐藏层ht的权重;b*表示偏置项。
1.2 Snapshot模型集成方法
Snapshot模型集成方法是Huang等[20]提出的基于深度学习的模型集成方法,该方法利用循环学习率的策略来训练深度学习模型。学习率变化计算式表示为:
(7)
式中:α0表示初始学习率。和原文中学习率在每个batch训练结束更新不同,本文实验中学习率会在每个epoch训练结束更新,t表示当前训练的epoch数,T表示训练总epoch数,M表示学习率的更新周期数。
该模型集成方法的具体过程为:首先,将模型的整个训练过程分为M个循环周期,每个循环周期内模型训练T/M个epoch,学习率按照式(7)更新;其次,在每个循环周期结束时,学习率降到最低,模型可以收敛到局部最优的状态,保存此时的模型作为一个子模型;接着,在当前模型的基础上,以一个较大的学习率α0开始一个新的循环周期,继续训练模型;最后,经过M个循环周期后可以得到M个子模型,直接取这些子模型输出的均值作为最终模型集成的输出。该方法显著减少了集成深度学习模型的时间。
1.3 Stacking模型集成方法
Stacking是一种强大的模型集成方法。该方法在原始数据集上训练初级学习器,利用初级学习器对原始样本的预测值构造一个新的数据集,新数据集和原始数据集中样本标签一一对应,最后在新的数据集上训练次级学习器。Stacking算法的具体流程如下[22]:
输入:训练集D={(x1,y1),(x2,y2),…,(xm,ym)}
初级学习器f1,f2,…,fM
次级学习器f
输出:H(x)=h′(h1(x),h2(x),…,hM(x))
1) fort=1 toM:
2)ht=ft(D)
3)D′=∅
4) fori=1 tom:
5) fort=1 toM:
6)oit=ht(xi)
7)D′=D′∪((oi1,oi2,…,oiM),yi)
8)h′=f(D′)
为了防止过拟合以及达到充分使用训练集的目的,一般采用k折交叉验证的方法来使用stacking模型集成方法算法,利用初级学习器未使用的样本来生成次级学习器的训练数据。
2 基于LSTM的模型集成方法
本文提出基于LSTM的模型集成方法,对应的客户流失预测框架如图2所示,包括数据源、样本特征处理、建模以及预测四个部分。首先,日志系统所收集的客户历史数据将存储于Hadoop分布式文件系统HDFS中;其次利用Spark进行特征的构造和样本的生成;接着利用生成的样本训练相应合适的模型;最后模型输出客户未来流失的概率。企业客户关系管理相关人员可以根据模型最终输出的客户流失概率对高流失倾向的客户的实施相应的维挽操作。
图2 客户流失预测框架
2.1 基本思想
在客户流失预测任务中,时序数据可以反映客户的潜在行为趋势,如何利用好时序数据显得尤为关键。相比于传统机器学习模型,LSTM由于其具有天然的序列建模优势,可以自动学习序列隐含信息以及复杂高阶特征,减少了对特征工程的依赖。同时对LSTM进行模型集成可以有效增加模型的准确性和鲁棒性,从而提高预测效果。此外,在客户流失预测的样本中,往往存在容易分类的样本以及难分类的样本,例如一个历史行为规律的客户,比较容易判断其流失与否,而一个历史行为非常不规律的客户,往往很难判断其流失情况。本文提出的swLSTM方法对snapshot方法训练过程进行了改进,在每个循环周期结束之后,根据当前模型对训练样本的预测值计算出训练样本的权重,下一个循环周期模型的训练便在带有当前计算出的样本权重的训练集上进行。在集成多个子模型的输出阶段,将各个子模型在验证集上的输出和对应的样本标签重组为一个新的训练集并在该训练集上训练逻辑回归模型作为最终输出,这相比直接平均子模型的输出作为最终输出来说可以进一步提高分类效果。
2.2 样本权重计算
假设训练集为D={(x1,y1),(x2,y2),…,(xm,ym)},本文提出的模型集成方法中针对样本xi的权重计算式表示为:
(8)
(9)
在snapshot模型集成方法中为训练样本设置权重有两个好处:一是在不同的循环周期中,可以让模型对不同样本的关注度不同,使得一些难分类的样本有机会被分得更准确,提高了单个子模型的分类效果;二是增加了各个子模型之间的差异性,有利于最终结果的集成输出。
2.3 LSTM模型
本文实验中使用的LSTM模型具体结构如图3所示。首先将不同时间跨度的时序特征输入到不同的LSTM分支中,本文使用的特征中包含两个不同时间跨度的时序特征集,所以模型包含两个LSTM分支;然后将各分支第一层LSTM层所有时间步上的隐藏状态输出到第二层LSTM中;接着第二层LSTM层仅将最后一个时间步的隐藏状态作为该分支的输出,不同分支的输出会拼接后输入到全连接层进行特征组合;最后将全连接层的输出输入到sigmoid层进行最终分类输出。
图3 LSTM模型结构图
2.4 算法流程
假设训练集D={(x1,y1),(x2,y2),…,(xm,ym)},验证集Dv={(x1,y1),(x2,y2),…,(xn,yn)},LSTM模型初始为f0,模型训练总的epoch数为T,循环周期数为M,初始学习为α0,训练集样本初始权重为W0=1,逻辑回归模型为h。训练swLSTM的详细步骤如下:
1) fork=1 toM;
2) 设置D的样本权重为Wk-1,按照式(7)对应的循环学习率策略,在fk-1的基础上使用带权重的训练集D继续训练T/M个epoch后得到fk。
3) fori=1 tom;
5) 将w0,w1,…,wm组织成Wk。
6) 设置逻辑回归所用训练集D′=∅。
7) fori=1 ton;
8) fork=1 toM;
9)oik=fk(xi),xi∈Dv
10)D′=D′∪((oi1,oi2,…,oiM),yi),yi∈Dv
11) 在D′上训练逻辑回归模型h。
12) 模型训练完毕,得到逻辑回归模型h以及M个LSTM子模型f1,f2…,fM。
在测试阶段,利用上述训练完毕的M个模型f1,f2…,fM对测试集进行预测,并生成新的测试集,具体步骤与上述训练步骤的第6步到第10步类似。然后用训练完毕的逻辑回归模型h对新的测试集进行预测得到最终预测结果。
3 实 验
3.1 实验环境
本文实验在Linux服务器上进行,具体硬件配置如下:内存为32 GB;CPU型号为Intel(R) Core(TM) i7- 4790 CPU @ 3.60 GHz,数量为1,核心数为8;GPU型号为GeForce GTX TITAN X,数量为1。实验中使用的主要工具包括:Python 3.5、Pytorch、XGBoost、Scikit-learn。
3.2 数据介绍
本文实验数据采用的是WSDM CUP 2018的数据,旨在预测某音乐流媒体服务商的付费订阅客户流失率。官方对于其付费订阅客户流失的定义为:当客户的付费订阅到期后的30天内,客户仍然没有续订,则判定该客户为流失客户,否则为非流失客户。
实验数据主要包括客户的交易日志数据以及听歌日志数据,表1展示了原始数据的部分字段名。
表1 原始数据字段示例
3.3 特征工程
在特征构造方面,原始数据中每条记录均带有时间信息,所以本文实验中使用的特征均为原始数据经过简单处理的结果,没有进行额外的特征工程。具体地,从客户交易日志中截取最近一年的数据,并且对不同客户的交易日志数据详情按照时间先后进行排序,得到交易时序特征,例如客户过去一年交易每次交易的金额、每次交易的付费订阅天数等,总计7种特征,序列长度为20;从客户听歌日志中截取最近一个月的数据,并且对不同客户的听歌日志详情按照时间先后进行排序,得到听歌日志时序特征,例如客户最近一个月每天听歌的时长、每天听歌的歌曲数量等,总计7种特征,序列长度为30。
在数据处理方面,对于特征中的缺失值用0填充,对于离散值类型的特征采用独热编码,对于连续值类型的特征进行标准化处理,这些处理方法有利于神经网络的训练。
3.4 训练样本
本文实验中,按照客户的订阅到期日进行训练样本生成,一个样本对应一个客户。具体地,2017年1月的样本生成过程如下:从2017年1月之前的客户交易数据中筛选出订阅到期日在2017年1月的所有客户,设为集合U。针对某客户ui∈U,其当前订阅到期日为ti0,从2017年1月之后的交易数据中确定ui的最早一次订阅交易日ti1,假设ti1和ti0之间的日期间隔天数为gap,ui对应的标签为yi,则如果gap>30,那么yi=1,否则yi=0。然后从ui的交易日志以及听歌日志数据中进行特征处理工作得到特征xi,最终ui对应的样本为(xi,yi)。本文实验所使用的训练集为2017年1月的样本,测试集为2017年2月的样本。训练集一共有670 897条样本,测试集合一共有447 266条样本。
3.5 评价指标
本文选择查准率(Precision)、查全率(Recall)、AUC以及PR-AUC作为实验指标,其中查准率和PR-AUC更为重要。PR-AUC在数据不平衡的情况下相比AUC更适合评价模型效果[23],本文实验数据中正样本占5.5%左右。
查全率和查准率的定义如下:
Recall=TP/(TP+FN)
(10)
Precision=TP/(TP+FP)
(11)
式中:TP、FN和FP分别表示真正例、假反例、假正例。本文实验计算TopN的查准率和查全率,详细步骤为:将模型对样本输出的预测概率值进行降序排序,将前N个样本标识为正例,其余标识为负例,并根据标识结果计算查全率和查准率。这前N个样本可以理解为模型预测出来的高流失倾向客户,企业可以对这部分客户实施针对性的挽留策略,在本文实验中N值设置为10 000。
AUC是ROC下的面积,值越大意味着模型效果越好。除了可以通过计算面积得到AUC值外,还可以通过如下公式计算:
(12)
式中:P表示所有正样本集合;K、N分别表示正样本、负样本的数量;ranku表示样本u在模型对所有样本的预测概率值中的排名。具体地,假设样本总量为n,则模型预测概率值最大的样本所对应rank值为n,模型预测概率值第二大的样本所对应的rank值为n-1,依此类推。
PR-AUC是PR曲线下的面积,PR曲线的横坐标为查全率,纵坐标为查准率。
3.6 实验参数
本文提出的swLSTM主要参数如下:所有LSTM层隐藏层单元数均为32;两层全连接层单元数分别为128、32,激活函数为relu;模型训练的循环周期数M为5,总epoch数T为100;batch size为512;初始学习率α0为0.003;逻辑回归模型训练的epoch数为6,batch size为64,学习率为0.001;式(9)中的超参数c为50;优化器为Adam。
3.7 实验结果
为了验证本文提出的swLSTM的有效性并进行超参数选择,总共进行了三组实验:实验一为现有方法与本文提出的方法对比实验;实验二为超参数c的选择实验;实验三为初始学习率的选择实验。
3.7.1比较实验
为了充分对比本文提出的swLSTM与单模型LSTM以及其他模型集成方法,本文采用了如下几个基准对比模型。
随机森林:该模型在工业界使用较多,是客户流失预测的常用模型,由多棵决策树通过bagging方法集成。实验中设置每棵决策树深度为10,数量为200。
XGBoost:该模型的基学习器为分类回归树,其对梯度提升算法进行改进,使得模型精度和训练效率得到了明显改善,且支持大规模机器学习。实验中设置每棵决策树深度为6,模型迭代200次,学习率为0.05。
LSTM:该模型是本文提出的模型集成方法中的基学习器。实验中设置每层LSTM隐藏层单元数均为32,两层全连接单元数分别为128和32,激活函数为relu。
avgLSTM:通过设置不同的随机种子训练3个结构如图3所示的LSTM模型,同时直接将这3个模型输出取平均作为集成输出。
StCNN:该模型由文献[5]提出,原文中初级学习器使用随机森林、XGBoost、KNN、DNN和CNN。由于KNN、DNN在本文实验中效果较差,所以将其替换成LSTM。次级学习器使用CNN。实验中除CNN外,其他模型的参数设置和上述几个对比模型参数设置一样。CNN包含两层一维卷积层,卷积核大小均为2,步长均为1,数量均为32。每一层卷积层之后会接上最大池化层,池化层核心大小均为2,步长均为2。最后包含两层全连接层,其单元数依次为32和16。
snapLSTM:该模型直接将snapshot模型集成方法应用于LSTM。
上述模型对训练集的使用方式不完全相同,为了公平对比,设置各个模型使用训练集的方式如下:随机森林、XGBoost、LSTM和StCNN对训练集进行4折交叉验证训练;snapLSTM直接使用全部训练集进行训练;本文提出的模型集成方法在子模型训练阶段,将训练集随机划出10%的数据作为子模型的验证集,剩余90%的数据作为子模型的训练集;在逻辑回归模型训练阶段,将上述子模型的验证集随机划出10%的数据作为逻辑回归模型的验证集,剩余90%的数据作为逻辑回归模型的训练集。
模型效果对比结果如表2所示。可以看出,本文提出的swLSTM各项指标均好于其他模型,相比于单模型LSTM,Precision、Recall、AUC和PR-AUC分别提升了4.67%、4.61%、0.55%和3.74%,这说明本文提出的基于LSTM的模型集成方法可以显著提升模型效果。LSTM的效果总体好于XGBoost和随机森林,主要原因是:这两个模型虽然属于集成学习模型,但是其基学习器是决策树,无法有效处理时序数据,特征工程的质量对模型效果影响较大,而本文训练样本中均为时序特征,LSTM可以自动学习其中的隐含序列信息。avgLSTM各项指标和LSTM基本持平,说明通过简单设置不同随机种子获得多个子模型进行平均输出不能明显改善预测结果。StCNN的AUC低于LSTM,其他指标有一定的提升,主要原因是:StCNN集成了多个差异性大的模型,可以总体带来模型效果的提升,但由于部分子模型的效果较差,导致最终集成带来部分指标下降的情况。snapLSTM相比于LSTM各项指标均有提升,同时本文提出的swLSTM各项指标均高于snapLSTM。本文比较了这两种模型集成方法生成的各个子模型之间的差异性,具体做法是:利用两种方法生成的子模型去预测相同的数据集,然后用预测值计算同一方法下不同子模型两两之间的最大信息系数(Maximal Information Coefficient,MIC)[24],MIC值越大代表越相关。两个模型计算出的MIC的值便可以表示这两个模型之间的相关性。最终根据snapLSTM生成的子模型计算出的MIC平均值为0.934,而根据swLSTM生成的子模型计算出的MIC平均值为0.912,说明swLSTM最终生成子模型之间的差异性要高于snapLSTM生成的子模型,而差异性高的子模型一般会带来较好的集成效果。
表2 模型效果对比结果
表3展示了各个模型的训练时间。XGBoost和随机森林的训练时间较短,主要原因是:这两个模型属于传统机器学习模型,模型参数较少,所需的计算量也较少,同时可以利用全部CPU核心并行计算,不需要花费太多的时间训练。LSTM训练时间是上述两个模型的4~7倍左右,主要原因是:该模型包含多层LSTM层,需要进行大量计算更新模型参数,尽管使用了GPU进行训练,但依旧会耗费大量训练时间,这也是训练深度学习模型的一个特点。avgLSTM需要依次训练三个同样的模型,所以花费时间是LSTM的3倍左右。snapLSTM训练时间是LSTM的1.6倍左右,主要原因是:在相同的batch size前提下,snapLSTM总计训练100个epoch,而LSTM是根据验证集的损失进行早停策略的训练,最终平均只训练了60个epoch。swLSTM训练时间比snapLSTM稍长,主要原因是:在每个训练循环周期结束时,模型需要预测全部训练样本并计算样本权重,此外逻辑回归模型的训练也需要耗费部分时间。StCNN训练时间最长,并且远多于其他模型,主要原因是:训练StCNN必须通过4折交叉验证进行,同时需要训练的模型有4个,总计需要训练16个模型的时间,每个模型均根据验证集的损失进行早停策略的训练。
3.7.2参数c选择实验
在本节实验中选择Precision和PR-AUC两个指标来分析式(9)计算样本权重步骤中不同的参数c对最终预测结果的影响。一方面是因为这两个指标更为重要,另一方面是因为相比其他两个指标,这两个指标的值变化幅度更大。图4为不同参数c的对比结果,可以看出,当c=50时,模型取得最好效果,所以本文最终设置c为50。同时还可以发现,当c<50时,指标总体呈上升趋势,而当c>50时,指标总体呈下降趋势。
图4 不同参数c对比结果
3.7.3初始学习率选择实验
从图5中可以看出,在初始学习率从0.01降低到0.003过程中,模型指标呈上升趋势,且在0.003处模型指标达到最优。当初始学习率从0.003降低到0.001时,模型指标下降明显。可能原因是:实验中优化算法选择的是Adam,其推荐的学习率为0.001,同时学习率变化周期为20个epoch,当初始学习率过高或者过低时,均会使得模型无法在有限的epoch内收敛到一个局部最优的状态;同时在学习率较低时,模型很难在新的训练周期开始时跳出当前的训练状态,使得得到的子模型之间差异性减小,影响最终模型集成效果。最终本文设置初始学习率为0.003。
图5 不同初始学习率对比结果
4 结 语
本文提出了一种基于LSTM的模型集成方法用于客户流失预测任务。该方法采用LSTM作为基学习器,避免了复杂的特征工程,充分利用了时序特征。通过改进snapshot集成方法,提高了子模型的分类效果,增加了不同子模型之间的差异性,提升了模型集成效果。实验结果表明,该方法可以在仅花费训练单个LSTM模型1.8倍时间的基础上,比Precision和PR-AUC分别提升4.67%和3.74%,具有较好的实用性。不过该方法仍存在不足,其对于样本权重的修改需要通过超参数控制,下一步将研究如何让样本权重的修改可以在模型训练中变得可学习。