林国顺 王 野
(大连海事大学航运经济与管理学院 辽宁 大连 116026)
2018年中国网络购物交易规模可达8万亿元,网络购物的用户规模高达6.39亿,网民使用率达74.8%。淘宝天猫移动月活跃用户就高达1.04亿[1]。如此庞大的数据量的高效使用已经成为互联网公司面临的一个关键性问题。为进一步分析网购消费者行为习惯特征,掌握网购消费者的行为意图和真实需求,有必要对网购消费者的异常行为进行检测研究。
目前,在异常检测领域的相关研究中,主要的检测方法有时间序列方法、基于统计的方法和基于距离的方法等[2]。其中:时间序列的方法对于高度复杂非线性的数据集的分类效果不佳;基于统计的方法常常需要许多的先验条件才可以应用,往往实际的数据集难以符合这些前提条件;基于距离的方法在数据量大、数据类别分布极为不均衡的情境下分类效果不佳。
随着网络购物的不断发展、网购人数的不断增长,网购消费者的行为信息也越来越多,越来越复杂,所得到的数据往往呈现出极高维度的分类id所组成的属性特征[3],导致常用的检测方法实验效果达不到预期,准确率低、精准率低,不能满足实际应用中需求。
孤立森林作为一种无监督检测算法,已经被应用到很多异常检测领域,特别是异常用电方面[4]。国内外学者通过分析异常用户的历史行为信息为电力系统[4]、网络攻击[5]和网络安全[6]等多个领域建立了孤立森林异常用户行为检测模型,并在实验中取得了不错的效果。
自编码器(autoencoder,AE)是一种无监督的学习算法,主要用于数据的降维或者特征的提取[7],能够解决多分类算法在处理高纬度数据集时分类效果差的问题,目前已经被国内外许多学者应用在了各个领域,尤其是图像检测领域[8],达到了不错的实验效果。
网购消费者行为数据是一种数据量庞大、数据维度很高且行为特征需要人为构建的一类数据。本文通过人工特征构造的方式提取了22维特征,使用主成分分析的方式对数据进行降维得到了最佳的降维参数5,并以此为依据搭建了一个含两个编码器的栈式堆叠自编码神经网络进行特征压缩,克服了数据维度高的问题。以此输出数据为训练数据构建孤立森林模型对网购消费者异常行为进行检测研究,加入主成分降维数据以及模糊C均值方法进行对比分析,来验证检测模型的合理性和有效性。
孤立森林(Isolation Forest)[9]不需要有标签的数据进行模型训练,属于无监督方法。通过孤立异常数据点来实现数据异常检测,具有线性时间复杂度和计算率高的特点,适用于处理大数据问题,但不适用于处理特别高维的数据问题。孤立森林的实现包括构建包含t个iTree的孤立森林和对数据进行检测两个步骤。
1.1.1构建包含t个iTree的孤立森林
孤立森林算法的目标是对数据集进行子采样并构造iTree, 然后将多个iTree集成(ensemble)为iForest用以检测异常数据, 其实现步骤如下。
步骤1在训练数据中随机地选取Ψ个样本点作为子样本集,作为树的根节点。
步骤2随机指定一个维度(特征),在当前节点数据中随机产生一个切分点(p值产生于当前节点数据指定维度的数据大小范围之间,min
步骤3根据此p值生成一个超平面,切割数据空间,将当前数据空间切分为两个子空间,将指定维度中大于p值的数据放入左子空间,小于p值的数据放入右子空间。
步骤4在子节点中递归步骤2和步骤3,不断构造形成新的子节点,直到子节点中只有一个数据项(无法进行分割)或者本棵iTree已经达到预先设定的高度(停止分割)。
通过上述方式构建了n棵iTree之后,就完成了iForest的训练。构建过程如图1所示。
图1 i Forest构建过程
1.1.2对数据进行检测
利用上述构建的iForest对测试数据集进行测试。对于一个训练数据项x,令其遍历每一棵iTree,然后计算x最终落在每棵树的第几层(树的高度),记为h(x)。遍历所有树后,可以得到数据项x在每棵树的平均高度值E(h(x))。获得每个数据项的平均高度值后,根据预先设定的阈值,可以判断低于此阈值的测试数据即为异常值。因为iTree的结构与二叉搜索树相似,所以设置标准平均搜索长度c(Ψ),其计算式为:
c(Ψ)=2H(Ψ-1)-(2(Ψ-1)/Ψ)
(1)
H(x)=ln(x)+ζ
(2)
式中:ζ是欧拉常数。根据式(1)定义数据项x是异常值的评分s(x,Ψ),其计算式为:
(3)
式中:h(x)为数据项x在iTree中的高度;E(h(x))为数据项x在iForest中的平均高度。0
(1)E(h(x))越接近于0,s越接近于1,那么数据x越可能是异常值。
(2)E(h(x))越接近于n-1,s越接近于0,那么数据x越可能是正常值。
(3)E(h(x))越接近于c(Ψ),s越接近于0.5,如果所有数据的s都接近于0.5,那么整个数据集中不存在异常值[8]。
1.2.1传统自编码器
自编码器(AE)是Rumelhart于1986年提出的一种特征表示学习方法[7],是一类典型的无监督神经网络模型,由编码器与解码器共同组成,其输入节点数与输出节点数相同,在保持输入与输出的误差尽可能小的前提下对隐含层特征进行提取[10],其结构如图2所示。
图2 自编码器结构
图2是一个单隐藏层的自编码器,这个自编码器的输入是一个n维向量,经过编码器进行压缩,得到一个三维向量,再经过解码器进行解码得到与输入向量相近或相等的n维向量。
按照图2的结构,自编码器的编码解码过程如下。
(1) 在编码阶段,编码器将输入数据映射到隐含层以提取输入数据的特征:
Z=h(h)(W(h)X+b(h))
(4)
(2) 在解码阶段,解码器将编码器的输出结果作为输入数据将隐含层的特征映射到输出层,实现输入数据与输出数据相等的结果:
Y=h(o)(W(o)Z+b(o))
(5)
式中:X是一个n维的数据项;W(h)、b(h)是编码阶段的权重项与偏置项;W(o)、b(o)是解码阶段的权重项与偏置项;h(h)、h(o)分别是编码阶段和解码阶段的激活函数,通常使用的函数是Sigmoid、tanh和ReLU等。
如果N表示样本总量,n表示数据项的维度,那么损失函数定义如下:
(6)
为了防止模型过拟合,损失函数加入惩罚项后定义如下:
(7)
式中:λ为惩罚系数。
传统自编码器关于隐藏层有三种形式:压缩结构、稀疏结构和等维结构。这三种结构是根据隐藏层中神经元个数进行划分的[11]。图2所示为压缩结构,即原始数据维数大于隐藏层的维数。若原始数据维数小于隐藏层的维数则为系数结构。压缩结构可以实现对原始数据进行压缩,即降维的效果。前提条件是原始数据各个维度之间隐含某些联系,那么自编码神经网络就可以识别出各个维度间的关联性, 在输出层重构原始数据,达到降维的效果。
1.2.2栈式堆叠自编码器
栈式堆叠自编码器(Stacked AutoEncoder,SAE)是Hinton对自编码器进一步改进提出的一种网络[7],堆叠自编码网络是一种由多个自编码器连接而成的网络,其前一层自编码器的输出作为其后一层自编码器的输入。编码过程就是逐层来执行每一个编码器,实现特征的逐层压缩。同样的解码过程就是逐层执行每一个解码器,实现数据的重构,其第一层编码结构如图2所示。
本文所采用的数据集是阿里巴巴天池大数据平台提供的公开数据集,是淘宝的商品推荐系统的真实流量日志中收集得到的数据,数据包含从2018年9月15日到2018年9月24日共计10天832 858条记录。存在一定量的异常数据,该数据集以各种属性的id值形式给出,原始数据包括以下10个维度:时间戳;用户ID;是否是异常值标签;用户在过去3天内单击的品牌ID;用户在过去3天内单击的产品ID;用户前一天搜索的类别ID;用户在过去3天内单击的项目ID;用户在过去3天内查看但未单击的项目ID;用户在过去3天内单击的店铺ID;用户在过去3天内查看但未单击的店铺ID。数据集完整不含有任何缺失值。
建立异常行为检测模型需要对数据进行一定的处理。为避免反复出现的数据干扰模型构建,删除统计数据时发现的冗余数据,删除之后留下6 388位用户的610 790条记录。
由于原始数据所提供的特征全部是各种属性的ID值,不能用于模型的输入数据,需要将其转化为数值型特征。具体步骤如下。
步骤1将原始数据的各种ID值转化为ID的个数特征,记为F1-F7。
步骤2构建随时间变化的原纪录中的ID在新记录中的消失率,记为F1_old-F7_old。
步骤3构建随时间变化的新纪录中的ID在原纪录中的产生率,记为F1_new-F7_new。
步骤4提取用户10天之内的总操作次数、每天每位用户记录的每一项不重复行为的重复次数得到二者之比,记为F_ratio。
步骤5提取记录发生在哪天的特征,记为date。
结合以上提取的所有特征以及用户ID共计24维,在此基础上对新数据集进行去重处理,此时数据集共计179 747条记录,24维特征。
由于孤立森林算法是一种具有线性时间复杂度、计算率高,适用于处理大数据问题,但不适用于处理特别高维的数据问题的算法,因此在进行模型拟合前,需要对当前数据集进行降维处理。
(1) 对于数据集采用主成分分析(PCA)的方法进行降维,经过Kaiser-Meyer-Olkin(KMO)对数据结构的总体分析,结果显示为0.677,数据集符合主成分分析的基本要求,可以进行主成分提取。经过PCA提取主成分分析可以将数据集降维至5维,其可解释总方差累计值达到了73%。
(2) 建立栈式堆叠自编码器(SAE),构建一个包含两个编码器的神经网络对数据集进行降维处理。因为要对数据集进行降维处理,需要对数据进行进一步的归一化处理,针对F1-F7的特征做归一化处理后建立如下网络,参数如表1所示。
表1 栈式堆叠编码器网络参数表
(3) 建立模糊C均值聚类模型,进行分类。模糊C均值是Bezdek[12]提出的一种硬C均值聚类(Hard C-Means, HCM)的增广算法,属于无监督学习算法。模型参数设置聚成两类,迭代停止条件设置为误差小于0.005,最大的迭代次数设置为1 000。
(4) 建立孤立森林模型,进行分类。初始模型参数设置建立iTree时每次使用样本数100,建立iTree树100棵,数据集包含异常比率为0.2。
为了评价分类模型的好坏并且选择最优的分类模型,需要一些评价指标作为衡量标准。针对相关的问题选择合理的评价指标对于分类问题有着重要的作用。
在分类问题中最常用的分类指标是Accuracy,用来计算模型分类准确率的指标,它返回被正确分类的样本比例。其公式如下:
(8)
式中:n为预测正确的样本数;N为样本总数。
由于本文的实验是异常检测,其类别数据有着极为不均衡的特点,如果仅靠分类准确率这一指标来判断模型好坏,将会导致模型尽可能多的测试数据预测为正常值,导致模型失去意义。因此采用混淆矩阵对模型进行进一步的评价。
对于二分类问题而言,所有问题都可以被分为0和1两类,混淆矩阵是一个2×2的矩阵,如表2所示,其中:T和F表示真实值是异常值和不是异常值;P和N表示检测结果是异常值和不是异常值。
表2 混淆矩阵表
根据混淆矩阵衍生出来的指标有精准率,即在预测值为正例的样本中预测正确的比例,其公式如下:
(9)
召回率,即真实值为正例的样本中预测正确的比例,其公式如下:
(10)
实验选用数据集中的前9天数据作为训练集,第10天的数据作为测试集进行测试。利用栈式堆叠自编码孤立森林对数据集进行异常行为检测,同时加入主成分孤立森林、栈式堆叠自编码模糊C均值、主成分模糊C均值进行结果对比。
本文采用Python语言TensorFlow环境,对数据集分别应用栈式堆叠自编码孤立森林、主成分孤立森林、栈式堆叠自编码模糊C均值和主成分模糊C均值进行分类结果比较。
为获得合适的孤立森林参数,首先建立栈式堆叠自编码器,栈式堆叠自编码器的第二隐藏层作为降维后的特征输出,其隐藏层神经元的个数确定为主成分分析降维后的维度5,对栈式堆叠自编码神经网络的参数选取首先迭代30 000次,得到图3所示的优化曲线。
图3 栈式堆叠自编码神经网络优化曲线
根据图3,选择迭代次数5 000作为最佳的网络训练参数。本文采用网格搜索的方法对孤立森林参数进行选取。在数据集上,分别将主成分降维后的数据集以及栈式堆叠自编码降维后的数据集进行实验,得到最佳参数如表3所示。
表3 最佳参数表
实验前,对原始数据的分布进行考察,分别对全部原始数据绘制分布图,得到图4原始数据分布图和图5原始仅正常数据分布图。可以看出异常数据对于数据的分布有很大的影响,经过游程检验,得到P值为150.667,即正常数据与异常数据明显构成两个总体,因此对于此数据集进行异常检测是有意义的。
图4 原始数据分布图
图5 原始仅正常数据分布图
利用栈式堆叠自编码神经网络对原始数据进行降维处理,对降维后的数据绘制分布图,得到图6降维后的数据分布图和图7降维后的仅正常数据分布图。从图4-图7可以看出,降维的操作保留了原始数据的大致特征,异常数据影响着数据的分布。
图6 降维后的数据分布图
图7 降维后的仅正常数据分布图
经过自编码器-孤立森林模型检测后,对检测后的数据绘制分布图,得到图8模型检测后的正常数据分布图以及图9模型检测前后的正常数据分布图。可以看出,经过模型检测后的数据分布与检测前剔除异常数据的分布几乎完全拟合,可以看出模型的检测是有效的。
图8 模型检测后的正常数据分布图
图9 模型检测前后的正常数据分布图
为了验证模型的性能,将栈式堆叠自编码孤立森林、主成分孤立森林、栈式堆叠自编码模糊C均值和主成分模糊C均值以上四种分类模型进行比较分析。对于每一种方法均采用网格搜索方法进行参数调节,模型与指标衡量结果如表4所示。
表4 模型对比分析表
根据表4的结果对比,可以看到:栈式堆叠自编码神经网络(SAE)的降维效果整体优于主成分(PCA)的降维效果;栈式堆叠自编码神经网络与孤立森林结合的方式在指标准确率、精准率的衡量下效果最好。选择这两指标作为衡量标准,是因为在网购消费者异常行为检测这一问题中,本文更加关注异常行为被正确识别出来的比率。
本文提出一种基于自编码器-孤立森林的网购消费者异常行为检测方法,采用栈式堆叠自编码网络作为降维方法,避免了高维的特征带来的维度灾难,充分地利用了深度学习网络自动学习复杂特征表示的能力。利用PCA降维后的特征个数作为自编码网络的输出层神经元个数,减少了自编码网络的训练次数,加快了网络训练速度。实验结果表明,该方法对网购消费者异常行为的检测准确率达到了92%,检测的精准率达到了82%。效果明显优于PCA与孤立森林和模糊C均值结合的方法,具有较好的实用性以及实际运用价值。
下一步工作将从以下几方面展开:分析经过模型识别出来的异常行为、判断出现的原因、异常行为归类、针对每一类异常行为的对策以及收集并使用更多网购消费者行为信息输入模型,进一步提高分类准确率和精准率。