检测异常样本的方法及装置
技术领域
本说明书一个或多个实施例涉及计算机安全领域,尤其涉及检测异常样本的方法和装置。
背景技术
随着计算机技术的发展,安全性成为日益关注的问题,例如计算机数据的安全性,电子支付的交易安全性,网络访问的安全性,等等。为此,在许多场景下,需要从大量样本中发现有可能影响安全性的异常样本,并针对这些异常样本采取措施。
例如,希望从大量交易操作样本中发现异常交易操作,从而提前防范欺诈交易;希望从网络访问的样本中检测异常访问,从而发现不安全的访问,例如黑客攻击;希望从进行各种操作的用户账户中发现异常账户,从而锁定涉嫌进行高风险操作(欺诈交易、刷单等虚假交易、网络攻击)的账户;希望从大量权益领取操作(例如,领取营销红包、奖励金、优惠券等操作)中发现异常操作,从而防范恶意领取优惠权益的“黑产”操作,等等。
然而,在许多情况下,异常样本的标定非常耗费时间和人力,并且非常困难,这使得常规典型的有监督学习方法难以发挥作用。因此,提出了一些无监督的方式,例如聚类方法,孤立森林,等等,试图从大量样本中检测出异常样本。
通常来说,无监督方法检测出的异常样本,是统计意义上偏离多数常规样本的那些离群样本(outlier),却不一定是业务需要的真正的异常样本。因此,常规无监督方法检测出的结果,往往会发给分析师,进一步进行人工分析和筛选,而不能直接使用。
有鉴于此,希望能有改进的方案,可以对例如孤立森林模型进行改进和更新,从而更加有效、更有业务针对性地进行异常样本的检测。
发明内容
本说明书一个或多个实施例描述了通过孤立森林模型检测异常样本的方法和装置,其中通过样本标注和反馈来更新孤立森林模型,使得模型的异常检测结果更加准确而有针对性。
根据第一方面,提供了一种检测异常样本的方法,包括:
将待测样本集中任意的第一样本输入孤立森林模型,得到该第一样本对应的第一路径,其中,所述孤立森林模型包括多棵孤立树,每个孤立树包括用于对样本进行划分的多个节点和节点之间的多条边,所述第一路径为所述第一样本在各个孤立树中从根节点到叶节点经过的边的集合;
将所述第一路径输入所述孤立森林模型对应的线性评估函数,得到该第一样本的异常分数,其中所述线性评估函数基于权重向量和路径向量而确定,所述权重向量包括为每个孤立树的每条边赋予的权重,所述路径向量指示输入样本的路径中包含的各条边;
根据所述待测样本集中各个样本的异常分数的排序,从所述待测样本集中选择出N个样本,其中N为大于1的自然数;
接收针对所述N个样本进行标注的N个标签,所述标签示出对应样本是否为目标异常样本;
根据所述N个样本的N个标签和预定形式的损失函数,更新所述权重向量,以使得更新后的线性评估函数用于检测异常样本。
根据不同实施方式,上述第一样本可以为以下样本之一:权益领取操作样本,交易操作样本,用户样本。
根据一个实施例,通过以下方式选择上述N个样本:按照所述异常分数从大到小的顺序,对所述各个样本进行排序;根据所述排序,选择前N个样本作为所述N个样本。
根据另一实施例,通过以下方式选择上述N个样本:按照所述异常分数从大到小的顺序,对所述各个样本进行排序;根据所述排序,选择前M个样本作为备选样本,其中M大于N;将所述前M个备选样本进行聚类,并确定各个类簇的代表样本;将所述各个类簇的代表样本确定为所述N个样本。
进一步的,可以如此确定各个类簇的代表样本:将所述前M个备选样本聚类为N个类簇;对于每个类簇,确定该类簇的类簇中心;将每个类簇中距离所述类簇中心最近的样本作为该类簇的代表样本。
根据又一实施例,通过以下方式选择上述N个样本:按照所述异常分数从大到小的顺序,对所述各个样本进行排序;根据所述排序,依次判断各个当前样本是否与待标注样本集中各已有样本的相似度小于预设阈值,在小于该预设阈值的情况下,将该当前样本添加到所述待标注样本集中;在所述待标注样本集中的已有样本达到N个时,将所述待标注样本集中的已有样本作为所述N个样本。
在一种实施方案中,更新所述权重向量包括:
对于所述N个样本的所述N个标签,确定所述损失函数相对于权重向量的下降梯度;
根据所述下降梯度,更新所述权重向量。
更具体的,在一个实施例中,标签的标签值为第一值或第二值,其中第一值为正数,示出对应样本是目标异常样本;第二值为负数,示出对应样本不是目标异常样本;在这样的情况下,所述损失函数基于所述线性评估函数与所述标签值的负值的乘积而确定;所述下降梯度基于所述标签值和所述路径向量而确定。
根据一种实施方式,针对所述N个样本的各个样本,根据对应的标签依次确定该样本对应的下降梯度,得到N个下降梯度;然后根据所述N个下降梯度中的各个下降梯度,依次更新所述权重向量。
根据另一种实施方式,基于所述预定形式的损失函数和所述N个标签,确定所述N个样本的总损失函数相对于权重向量的总下降梯度;根据所述总下降梯度,更新所述权重向量。
在一个实施例中,方法还包括,从所述待测样本集中移除所述N个样本,以更新所述待测样本集。
根据第二方面,提供一种检测异常样本的装置,包括:
路径获取单元,配置为将待测样本集中任意的第一样本输入孤立森林模型,得到该第一样本对应的第一路径,其中,所述孤立森林模型包括多棵孤立树,每个孤立树包括用于对样本进行划分的多个节点和节点之间的多条边,所述第一路径为所述第一样本在各个孤立树中从根节点到叶节点经过的边的集合;
分数获取单元,配置为将所述第一路径输入所述孤立森林模型对应的线性评估函数,得到该第一样本的异常分数,其中所述线性评估函数基于权重向量和路径向量而确定,所述权重向量包括为每个孤立树的每条边赋予的权重,所述路径向量指示输入样本的路径中包含的各条边;
样本选择单元,配置为根据所述待测样本集中各个样本的异常分数的排序,从所述待测样本集中选择出N个样本,其中N为大于1的自然数;
标签接收单元,配置为接收针对所述N个样本进行标注的N个标签,所述标签示出对应样本是否为目标异常样本;
模型更新单元,配置为根据所述N个样本的N个标签和预定形式的损失函数,更新所述权重向量,以使得更新后的线性评估函数用于检测异常样本。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
根据本说明书实施例提供的方法和装置,采用线性评估函数作为孤立森林模型计算样本异常程度的方式。对于孤立森林模型通过线性评估函数得出的备选异常样本,从中选择出N个样本,交由分析人员分析和标注。根据标注的标签,更新线性评估函数中的参数,从而更新孤立森林模型。如此,通过样本标注和反馈来自动更新孤立森林模型,使得模型的异常检测结果更加准确而有针对性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出了孤立森林中一棵孤立树的示意图;
图2示出根据模型评估结果优化模型的过程示意图;
图3示出根据标签反馈自动更新模型的过程示意图;
图4示出根据一个实施例的通过孤立森林模型检测异常样本的方法流程图;
图5示出根据一个实施例的检测异常样本的装置的示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
如前所述,在多种应用场景中,采用无监督的方式从待测样本集合中发现异常样本,其中,孤立森林模型是一种常用而典型的用于异常样本检测的无监督模型。由于该模型算法简单而高效,常用于网络安全中的攻击检测和流量异常等分析。
孤立森林模型的构建基于异常数据的两个特点:(1)异常数据只占少量;(2)异常数据特征值和正常数据差别很大。由于这两个特点,正常样本在特征空间的分布较为“稠密”,更难以将其孤立分离;而异常样本则分布稀疏,往往表现为“离群”的样本,比较容易对其进行孤立和分离。
基于以上的特点,并借鉴随机森林的思想,构建出孤立森林(Isolation Forest)模型。与随机森林由大量决策树组成一样,孤立森林也由大量的二叉树组成,其中的二叉树称为孤立树(isolationtree),简称iTree。iTree树和决策树类似,但是其构建过程更加简单,通常是通过随机过程构建。
假设样本集有N条样本,构建一颗iTree时,从N条样本中均匀抽样(一般是无放回抽样)出ψ个样本出来,作为这颗树的训练样本。在样本中,随机选一个特征,并在这个特征的所有值范围内(最小值与最大值之间)随机选一个值,对样本进行二叉划分,将特征值小于该值的样本划分到节点的左边,大于等于该值的样本划分到节点的右边。由此得到一个分裂条件和左、右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直到数据集只有一个样本或者达到了树的限定高度。
图1示出了一棵孤立树的示意图。在图1的示意图中,孤立树包含多个节点和连接节点的各条边。每个非叶节点对应样本的一项特征和基于该特征的分裂条件;样本经过这样的节点,根据分裂条件被划分到下游节点,直到到达叶子节点。例如,节点0为根节点,对应的特征为f1,分裂条件为f1>0.5。假定某个样本的特征f1的特征值大于0.5,那么该样本在节点0处沿右侧的边被划分到节点2,然后继续划分,例如沿着粗箭头指示的边构成的路径,最终被划分到叶子节点14。
如前所述,异常样本往往数据量较少,且特征值和正常样本差别很大。因此,对于构建的iTree,异常样本通常离根更近,而正常样本离根更远。一棵iTree的结果往往并不可靠,但是孤立森林算法通过多次抽取样本,构建多棵二叉树,最后整合所有树的结果,来确定样本的异常程度。具体的,一个样本沿着一棵孤立树从根节点到叶节点的路径长度(或者边的数目)被称为路径深度。可以根据样本在整个森林中各个孤立树中的路径深度,来确定该样本的异常得分,进而确定其异常程度。一般地,在各个孤立树中的平均深度越大,异常得分越低,样本越倾向于正常样本;平均深度越小,异常得分越高,样本越倾向于异常样本。
孤立森林模型作为无监督的异常检测模型,在一些场景下取得了一定的效果。然而,仍然存在一些不足和困扰,即,在许多情况下,孤立森林检测出的样本虽然是离群的异常样本,但是却并非业务感兴趣的目标样本。例如,在计算机安全应用中,样本数据包括各种计算机系统实体,例如进程、文件、netflow等的行为数据。在这样的情况下,密码文件相对于其他系统文件有可能呈现出统计上的离群特性,因而被确定为异常样本。然而,分析人员则可以理解出现这种统计上的偏差的原因在于文件本身特点,而不会对这样的样本感兴趣。
因此,通常情况下,孤立森林模型所输出的异常检测结果会发送给分析人员进行进一步分析,从而进一步锁定出业务感兴趣的目标异常样本。可选的,分析人员在对异常检测结果进行分析的同时,也对孤立森林模型的效果进行评估。模型的构建人员会基于分析人员的评估来优化模型,以期提高模型对业务的针对性,进而提高后续预测的准确性。
图2示出根据模型评估结果优化模型的过程示意图。如图2所示,建模人员利用常规算法构建出孤立森林模型IF,该模型对一些待测样本进行异常性打分,构成异常检测结果。这样的异常检测结果输出给分析人员,分析人员对异常检测结果进行分析,也对模型的效果进行评估。通常来说,分析人员对模型效果的评估为评估通过或不通过的简单结论。如果评估不通过,那么建模人员就需要根据自己对业务的理解和经验,来调整孤立树中的特征设计,甚至优化样本抽取方式,以期优化孤立森林模型。如此对模型进行更新之后,再次对样本进行异常性打分,再次交由分析人员进行分析和评估。这样的过程通常要往复多次。并且,每次进行模型优化时,主要是由建模人员基于经验进行尝试,人工成本高,且迭代过程复杂而繁琐。
考虑到以上问题,根据本说明书的实施例,基于图2所示的模型优化过程进行改进,提出图3所示的模型优化过程。如图3所示,将初步训练的孤立森林模型得到的异常检测结果输出给分析人员,分析人员在对异常检测结果进行分析的过程中,产生样本标签。具体地,分析人员可以对异常检测结果中提供的备选异常样本进行判断,确定其是否为感兴趣的目标异常样本,如此,为样本标注上其是否为目标样本的标签。之后,将样本标签反馈到模型,用于指引模型的更新方向,使得模型按照更新方向自动进行调整和优化。如此,使得分析人员的标注结果可以直接指导模型优化,避免建模人员人工尝试优化方向和优化方案。
图3过程中的核心难点在于,如何根据分析人员反馈的样本标签来进行模型更新。实际上,根据反馈进行模型更新的过程可以认为是一种在线学习(online learning)的过程,其中可以采用在线学习中的一些算法来实现。
在线凸优化OCO(online convex optimization)是在线学习的一种实现框架。在OCO框架中,在线学习的算法过程可以认为是与对抗性的环境进行交互的过程。具体的,任意的第t轮交互包括以下过程:
(1)算法从凸集合S中选择一个向量wt∈S;
(2)环境选择一个凸函数ft:S→R;
(3)得到损失ft(wt)
OCO训练和优化的目标是,多个回合选择的向量序列带来的累积损失更小。
在异常检测这一场景下,广义线性异常检测器GLAD(Generalized LinearAnomaly Detector)可以很好地适用于OCO框架。广义线性异常检测器GLAD通过一个特征函数和一个权重向量w来定义,其中特征函数可以将任一样本映射为n维向量,权重向量w为可调整的n维向量。相应的,GLAD将样本x的异常分数定义为:
其中,异常分数越大,样本x的异常程度越高。
针对GLAD检测器,在线学习的过程即为,根据反馈来调整权重向量w的过程。这一过程与OCO框架相吻合。更具体的,在GLAD每一回合t的学习中,执行以下过程:
(1)算法选择一个用于检测器的权重向量wt。在最初的回合中,权重向量wt具有初始值w0;在之后的回合中,算法根据上一回合结束时调整的方向确定本回合的权重向量。一旦给定权重向量wt,根据式(1),可以得到样本集中各个样本的异常分数。将其中分数最大的样本作为备选样本返回给分析人员。
(2)环境给出反馈。不同于凸函数形式的反馈,在异常检测的场景中,可以接收到分析人员对备选样本是否为目标样本的标注标签作为反馈,该标注标签表示为yt。
(3)接着,得到本回合的损失ft(wt),其中损失与权重向量wt以及标签yt相关,并可以通过多种形式的损失函数确定,例如,线性损失函数,对数似然损失函数等。于是,可以根据损失函数,确定损失减小的梯度方向,作为权重向量wt的调整方向,用于下一回合算法的学习。
如此,通过以上方式,使得GLAD检测器根据环境反馈不断得到更新和优化。
回到图3所示的更新孤立森林模型这一任务,可以设想,孤立森林模型虽然是一种树模型,但是也可以通过定义线性评估函数而表示为广义线性异常检测器GLAD的形式。在此基础上,可以采用OCO框架下的在线学习方式,根据分析人员反馈的样本标签,自动更新和优化孤立森林的模型参数,实现图3的方案。下面具体描述这一过程。
图4示出根据一个实施例的通过孤立森林模型检测异常样本的方法流程图。可以理解,该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。如图4所示,该过程至少包括以下步骤:
首先,在步骤41,将待测样本集中任意的第一样本输入孤立森林模型,得到该第一样本对应的第一路径。
如前所述,孤立森林模型包括多棵孤立树,每个孤立树包括用于对样本进行划分的多个节点和节点之间的多条边。假定当前待测样本集为D,x为D中任意的一个样本,为了描述的简单,将其称为第一样本。将第一样本x输入到孤立森林模型中,如图1所示,该样本会遍历孤立森林中的每颗孤立树,在每颗孤立树中,经历从根节点到叶节点的路径。在此,将该第一样本在孤立森林中经过的路径P称为第一路径,其中包括该样本在各个孤立树中从根节点到叶节点经过的边的集合。
然后,在步骤42,将上述第一路径输入与该孤立森林模型对应的线性评估函数,得到该第一样本的异常分数。
可以理解,这里的线性评估函数为针对孤立森林模型定义的函数,用于将其表示为广义线性异常检测器GLAD的形式。具体的,与前述公式(1)的形式类似的,孤立森林的线性评估函数SCORE可以基于权重向量w和路径向量而确定,其中权重向量w包括为每个孤立树的每条边赋予的权重,路径向量指示输入样本x的路径中包含的各条边。
更具体的,在一个例子中,线性评估函数可以写为:
其中:
w=(w1,w2,...,wn),wi为孤立森林中全部n条边中第i条边Ei对应的权重;
其中,如果样本x经过第i条边Ei,那么为1,否则为0。
需要理解,权重向量w和路径向量所针对的各条边需要按照同样的顺序排列,即wi和针对孤立森林中的同一条边Ei。
初始地,可以给孤立森林中各条边赋予同样的权重。也就是说,在一个例子中,令权重向量的初始值为:w0=(1,1,...,1)。在这样的情况下,得出的结果对应于样本x在孤立森林中经过的边的总数目。该总数目越小,根据公式(2)计算得到的异常分数越大,该样本的异常程度越高,异常可能性越大。
在初始值之后的回合中,权重向量会进行更新,逐渐地,各条边Ei被赋予不同的权重wi,该权重的值可以认为是穿过边Ei的路径成本。相应的,得出的结果对应于样本x在孤立森林中经过的边的总成本。该总成本越小,根据公式(2)计算得到的异常分数越大,该样本的异常程度越高,异常可能性越大。
可以看到,根据公式(2)计算得到的异常分数,与根据样本在各个孤立树中经过的路径深度判断样本异常程度的模型构思相吻合,并且,公式(2)将孤立森林模型表达为广义线性异常检测器GLAD的形式。如此,后续可以参照GLAD检测器学习的过程来调整孤立森林模型。
可以理解,步骤42中前述的第一样本为待测样本集D中任意的一个样本。当将第一样本对应的第一路径输入给公式(2)的线性评估函数,根据第一路径中包含的各条边可以直接得到路径向量的值;进一步结合当前的权重向量w,即可得到第一样本对应的异常分数。对于待测样本集中的每个样本,均执行以上操作,即可得到待测样本集中各个样本的异常分数。
于是,接下来,在步骤43,根据待测样本集中各个样本的异常分数的排序,从待测样本集中选择出N个样本(N>1),作为待标注样本输出给分析人员。
需要说明的是,在常规在线学习过程中,每一回合算法仅执行一个选择动作;应用到GLAD学习过程,对应于每次选择一个样本(异常分最高的样本)作为待标注样本。然而,在本说明书的一个实施例中,综合考虑分析人员的工作流程,对严格的在线学习的方式进行改进,每次选择一小批(mini batch)N个样本,供分析人员分析和标注。
以上N个样本的选择可以通过多种实施方式实现。
在一个实施例中,对于待测样本集D中的各个样本,按照异常分数从大到小的顺序进行排序,根据排序结果,选择前N个样本作为上述N个样本。如此选择出的N个样本,是异常分数最高的前N个样本。
在另一实施例中,除了希望选择出的样本异常分数比较高,异常可能性较大之外,还希望选择出的样本更加具有代表性,使得标注效率更高。这是因为,异常分数最高的前N个样本有可能彼此之间有一些相似性,这就会使得分析人员对类似的样本重复标注。因此,希望避免选择出的样本过于相似。
为此,在一个实施例中,首先,仍然按照异常分数从大到小的顺序,对待测样本集中的各个样本进行排序;然后根据排序,选择前M个样本作为备选样本,其中M大于N。例如,如果希望选择N=10个样本,那么可以预选出M=40个备选样本。然后,将这M个备选样本进行聚类,并确定各个类簇的代表样本;于是,可以将各个类簇的代表样本作为选择的N个样本。
上述将M个备选样本进行聚类的过程可以采用多种聚类算法实现,例如K-means算法,DBSCAN算法,等等。更具体的,可以预先设定将M个备选样本聚类为N个类簇,例如采用K-means时将K设置为N。对于N个类簇中的每个类簇,可以确定该类簇的类簇中心,例如,将该类簇中包含的所有样本的特征向量求均值,作为类簇中心。然后,将每个类簇中距离类簇中心最近的样本作为该类簇的代表样本,其中上述距离可以通过欧式距离,余弦距离等方式确定。或者,在另一例子中,也可以从每个类簇中随机选择一个样本作为代表样本。
如此,通过聚类的方式确定出N个样本,这N个样本由于分别来自不同类簇并代表不同类簇,因此可以避免选择出过于相似的样本。
在又一实施例中,还可以通过判断样本之间的相似度,选择出上述N个样本。具体的,首先仍然按照异常分数从大到小的顺序,对待测样本集中的各个样本进行排序。另外,可以建立待标注样本集DL。初始地,该样本集DL为空。然后根据排序顺序,依次判断各个样本。如果当前样本与待标注样本集DL中的各个已有样本的相似度均小于一定阈值,则将当前样本添加到样本集DL中,否则,判断下一样本。其中样本之间的相似度可以基于样本的特征向量之间的距离而确定,距离越近,相似度越大。持续上述过程直到待标注样本集DL中的样本数量达到N个,此时,将待标注样本集DL中的样本作为所选择的N个样本。如此,基于样本的异常分数和样本之间的相似度,选择出N个样本。
通过以上各种方式,选择出了N个样本,这N个样本会提供给分析人员进行分析。分析人员根据业务需要,判断这N个样本是否为业务感兴趣的目标样本,并根据判断结果为各个样本进行标注。
于是,在步骤44,接收到分析人员针对上述N个样本进行标注产生的N个标签,该标签示出对应样本是否为目标异常样本。
接着,在步骤45,根据上述N个样本的N个标签和预定形式的损失函数,更新线性评估函数中的权重向量w,以使得更新后的线性评估函数用于检测异常样本。
具体的,参考GLAD检测器在线学习的过程,可以利用一定形式的损失函数ft(wt),得到本回合t对应的损失,根据该损失确定权重向量wt的调整方向。一般地,损失与权重向量wt以及标签yt相关。并且直觉上,当标签指示出样本为正确的目标样本时,说明此时的权重向量w、进而此时的线性评估函数给出了相对正确的结果,损失函数应给出较小的损失值;而当标签指示出样本不是目标样本时,损失函数应给出较大的损失值。
在一个例子中,将标签yt的标签值设定为,用1指示出对应样本为感兴趣的目标样本,用-1指示出对应样本不是目标样本。这样的标签值设定方式还可以推广为,用第一值指示对应样本为感兴趣的目标样本,用第二值指示出对应样本不是目标样本,其中第一值是正数,第二值是负数。
对于以上的标签值设定方式,在一个具体例子中,可以采用如下线性形式的损失函数:
也就是,将损失函数设定为,线性评估函数SCORE与标签值负值的乘积。如此,如果标签yt=1,则异常分数(SCORE值)越大,损失函数值较小;这样的情况说明,将高异常分数的样本作为异常样本的选择是正确的,换而言之,该异常分数的计算是合理的;反之,如果异常分数很大,但是标签yt=-1,则会得到较大的损失函数值,这说明,异常分数的计算不够合理,当前的权重向量wt需要进行较大调整,以减小损失函数值。
在另一具体例子中,还可以采用对数似然形式的损失函数。具体的,可以采用以下式(4)形式的损失函数:
ft(wt)=-yt log(Pa(xt;wt)) (4)
其中,Pa(x;w)=exp(SCORE(x;w))/Z=exp(-w·φ(x))/Z, (5)
式(5)中,Z为归一化常数。
基于公式(4)形式的损失函数,也可以得到与公式(3)相似的结论,即当yt=1时,异常分数越大损失值较小,否则相反。
可以理解,损失函数的形式与标签值yt的设定也有关联。例如,当用yt=-1指示对应样本是目标样本,而用yt=1指示对应样本不是目标样本时,可以在前述(3)式或(4)式的基础上再乘以-1,得到相应的损失函数。
在如上选定了损失函数的基础上,就可以根据所选定的损失函数,基于步骤44得到的N个标签,以及N个样本的异常分数,确定损失值以及损失值减小的方向,用于调整权重向量w。进一步的,在一个实施例中,确定损失值减小最快的方向,即梯度方向,用于调整权重向量w。
更具体地,在一个实施例中,对于所述N个样本,确定损失函数相对于权重向量w的下降梯度;根据所述下降梯度,更新权重向量w。下面结合公式(3)描述该过程。应理解,对于公式(4)形式的损失函数可以进行类似计算。
一般地,损失函数相对于权重向量w的下降梯度,可以通过求损失函数相对于权重向量w的偏导来获得,因此,对于公式(3)形式的损失函数,相对于权重向量w的下降梯度可以表示为:
也就是说,对于线性形式的损失函数,其相对于权重向量的下降梯度通过对应样本xt的标签值yt和该样本的路径向量确定。
然而,应理解,公式(3)中的损失函数以及公式(6)中的损失函数梯度,都是针对回合t中某个样本xt而言的。在实施例的步骤43和44中,算法在一个回合中选择了N个样本,得到了N个标签。
那么,相应的,在一个实施例中,对于上述N个样本的各个样本,依次将其代入公式(6),根据对应的标签依次确定该样本对应的下降梯度,得到N个梯度,并依次按照N个梯度调整权重向量w,从而得到更新后的权重向量。
在另一实施例中,对于上述N个样本,在公式(3)针对单个样本的基础上进行求和,基于求和结果得到N个样本的总损失函数;相应的,计算总损失函数相对于权重向量的梯度,作为该批样本的总梯度。然后,基于该总梯度调整权重向量w。
在一个具体实施例中,权重向量w的调整过程可以表示为:
其中,η为学习的步长。
根据公式(7),在每个回合t,以η为步长沿着梯度调整当前权重向量wt,得到下一回合(t+1回合)的权重向量wt+1。如此,在下一回合,再次执行图4的过程,基于新的权重向量wt+1得到待测样本的异常分数,基于异常分数再次选择一批N个样本进行标注。如此多次执行图4的过程,每次对权重向量进行调整,直到达到预定收敛条件,例如,进行了预定数目的回合,或者,选择的N个样本中目标样本的占比超过一定比例,等等。
在一个实施例中,在每个回合,将已经选择和标注的N个样本从待测样本集中移除,以更新待测样本集,从而使得在以后的回合中,不会再次选择出同样的样本进行标注。
如前所述,权重向量w反映了孤立森林中各个孤立树的各条边的穿越成本,因此调整权重向量即调整了孤立森林中各条边在异常分数计算中的占比,进而调整了孤立森林模型计算样本异常分数的参数和方式。在图4所示的过程中,根据分析人员的反馈标签自动地、针对性地调整权重向量,进而调整孤立森林计算异常分数的方式,使得异常分数可以更准确地反映在业务感兴趣的方面中样本的异常程度。经过以上针对性的调整之后,孤立森林模型可以直接输出业务感兴趣的异常样本。因此,孤立森林模型的更新过程更加直接、高效,并且不依赖于建模人员的人工干预和尝试。
根据另一方面的实施例,提供了一种检测异常样本的装置,该装置可以部署在任何具有计算、处理能力的设备、平台或设备集群中。图5示出根据一个实施例的检测异常样本的装置的示意性框图。如图5所示,该装置500包括:
路径获取单元51,配置为将待测样本集中任意的第一样本输入孤立森林模型,得到该第一样本对应的第一路径,其中,所述孤立森林模型包括多棵孤立树,每个孤立树包括用于对样本进行划分的多个节点和节点之间的多条边,所述第一路径为所述第一样本在各个孤立树中从根节点到叶节点经过的边的集合;
分数获取单元52,配置为将所述第一路径输入所述孤立森林模型对应的线性评估函数,得到该第一样本的异常分数,其中所述线性评估函数基于权重向量和路径向量而确定,所述权重向量包括为每个孤立树的每条边赋予的权重,所述路径向量指示输入样本的路径中包含的各条边;
样本选择单元53,配置为根据所述待测样本集中各个样本的异常分数的排序,从所述待测样本集中选择出N个样本,其中N为大于1的自然数;
标签接收单元54,配置为接收针对所述N个样本进行标注的N个标签,所述标签示出对应样本是否为目标异常样本;
模型更新单元55,配置为根据所述N个样本的N个标签和预定形式的损失函数,更新所述权重向量,以使得更新后的线性评估函数用于检测异常样本。
在不同实施例中,第一样本可以为以下样本之一:权益领取操作样本,交易操作样本,用户样本。
在一个实施例中,样本选择单元53可以配置为:
按照所述异常分数从大到小的顺序,对所述各个样本进行排序;
根据所述排序,选择前N个样本作为所述N个样本。
在一种实施方式中,样本选择单元53可以进一步包括(未示出):
排序模块,用于按照所述异常分数从大到小的顺序,对所述各个样本进行排序;
选择模块,用于根据所述排序,选择前M个样本作为备选样本,其中M大于N;
聚类模块,用于将所述前M个备选样本进行聚类,并确定各个类簇的代表样本;
确定模块,用于将所述各个类簇的代表样本确定为所述N个样本。
进一步的,在一个例子中,上述聚类模块具体用于:将所述前M个备选样本聚类为N个类簇;对于每个类簇,确定该类簇的类簇中心;将每个类簇中距离所述类簇中心最近的样本作为该类簇的代表样本。
根据另一种实施方式,样本选择单元53可以配置为:
按照所述异常分数从大到小的顺序,对所述各个样本进行排序;
根据所述排序,依次判断各个当前样本是否与待标注样本集中各已有样本的相似度小于预设阈值,在小于该预设阈值的情况下,将该当前样本添加到所述待标注样本集中;
在所述待标注样本集中的已有样本达到N个时,将所述待标注样本集中的已有样本作为所述N个样本。
在一个实施例中,模型更新单元55包括(未示出):
梯度确定模块,配置为对于所述N个样本的所述N个标签,确定所述损失函数相对于权重向量的下降梯度;
向量更新模块,配置为根据所述下降梯度,更新所述权重向量。
在一个具体实施例中,标签的标签值为第一值或第二值,其中第一值为正数,示出对应样本是目标异常样本;第二值为负数,示出对应样本不是目标异常样本;在这样的情况下,所述损失函数基于所述线性评估函数与所述标签值的负值的乘积而确定;所述下降梯度基于所述标签值和所述路径向量而确定。
根据一种实施方式,上述梯度确定模块配置为:针对所述N个样本的各个样本,根据对应的标签依次确定该样本对应的下降梯度,得到N个下降梯度;所述向量更新模块配置为:根据所述N个下降梯度中的各个下降梯度,依次更新所述权重向量。
根据另一种实施方式,上述梯度确定模块配置为:基于所述预定形式的损失函数和所述N个标签,确定所述N个样本的总损失函数相对于权重向量的总下降梯度;所述向量更新模块配置为:根据所述总下降梯度,更新所述权重向量。
在一个实施例中,装置500还包括(未示出)样本集更新单元,配置为从所述待测样本集中移除所述N个样本,以更新所述待测样本集。
通过以上方法和装置,根据样本标注和反馈自动地更新孤立森林模型,使得模型的异常检测结果更加准确而有针对性。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图4所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图4所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。