一种基于流行度分类特征的托攻击检测算法转让专利

申请号 : CN201510238156.8

文献号 : CN104809393B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李文涛高旻田仁丽熊庆宇文俊浩梁山

申请人 : 重庆大学

摘要 :

本发明涉及一种基于流行度分类特征的托攻击检测算法,该算法首先统计用户对项目的评分,构建用户评分矩阵;然后统计项目的项目流行度;其次确定用户流行度向量;再次计算基于流行度的分类特征值MUD,RUD和QUD;然后构建分类器,最后将新用户的用户流行度向量中的元素输入分类器中,即可判定该新用户为正常用户或虚假用户。本发明提供的检测算法,对用户类别有较好的判定效果,无论是在单纯的随机攻击、评价攻击、流行攻击或混淆技术干扰时的攻击时都有非常好的托攻击检测性能,并且计算代价低,检测时间更短。

权利要求 :

1.一种基于流行度分类特征的托攻击检测算法,其特征在于:包括如下步骤:S1:设存在一个具有N个用户的用户集,该用户集中的元素由正常用户和虚假用户两种类别组成,两类用户分别使用类标签0和1进行标注,0表示正常用户,1表示虚假用户,nu为用户集的元素,表示第u个用户,u=1,2,3,...,N;用户集中所有用户评价过的项目的并集构成项目集,项目集中共有M个项目,mi为项目集的元素,i=1,2,3,...,M;

获取用户集中所有用户对项目集中所有项目的历史评分数据,构建N×M的用户评分矩阵B,bui为用户评分矩阵的元素,表示第u个用户对第i个项目的评分,bui的值为评分数,如果第u个用户对第i个项目没有评分,则令bui为0;

S2:统计项目集中每个项目被正常用户评价的次数,采用项目流行度表示,记为d,di表示项目mi的项目流行度;

S3:根据步骤S1得到的用户评分矩阵和S2得到的项目流行度,确定用户流行度向量,方法如下:

1)设用户nu对项目mi做出过评价,则定义用户nu与项目mi有联系;

2)令u=1;

3)i遍历其取值,所有与用户nu有联系的项目构成联系项目集,联系项目集中共有Gu个元素,guk为联系项目集的元素,其表示第k个与用户nu有联系的项目;

4)设k=1;

5)确定项目集中与项目guk相应的项目,然后调用S2中该项目的项目流行度作为guk的项目流行度d'k;

6)保存与用户nu有联系的项目guk的项目流行度d'k;

7)令k=k+1;

8)如果k≤Gu,则返回步骤5),否则执行下一步;

9)与用户nu有联系的所有项目的项目流行度形成一个一维向量Du,记向量Du为用户流行度向量, 输出Du;

10)令u=u+1;

11)如果u≤N,则返回步骤3),否则结束循环;

S4:计算基于流行度的分类特征值,所述基于流行度的分类特征值包括用户流行度均值、用户流行度极差和用户流行度上四分位点,方法如下:

1)根据公式(3)计算用户流行度均值MUD:

其中,MUDu表示用户nu的用户流行度均值,d'k表示用户nu的用户流行度向量Du中的元素,Gu表示与用户nu有联系的项目的总数;

2)根据公式(4)计算用户流行度极差RUD:

RUDu=d'max-d'min,u=1,2,3...,N        (4);

其中,RUDu表示用户nu的用户流行度极差,d'max表示用户nu的用户流行度向量Du的元素中值最大的项目流行度,d'min表示用户nu的用户流行度向量Du的元素中值最小的项目流行度;

3)根据公式(5)计算用户流行度上四分位数QUD:

QUDu=d'k,u=1,2,3...,N          (5);

其中,QUDu表示nu的用户流行度上四分位数,d'k表示用户nu的用户流行度向量Du中元素按照其值由小到大排序后,处于前四分之一位置处的项目流行度;

S5:根据用户的类标签及其相应的基于流行度分类特征,采用分类算法得到分类器;

S6:对任何一个新用户,采用步骤S3-S4所述方法计算该新用户基于流行度的分类特征值,然后将该新用户的分类特征值输入步骤S5确定的分类器中进行分类,判定该新用户的类别。

2.如权利要求1所述的基于流行度分类特征的托攻击检测算法,其特征在于:所述步骤S5中的分类算法为决策树算法,步骤如下:S2a:由已知正常用户和虚假用户组成的所述用户集记为当前用户集S,S={n1,n2,...,nu,...,nN},用户nu的属性向量为Pu,Pu={a1u,a2u,...atu,...aLN}T,其中L=3,a1u,a2u和a3u分别表示MUDu,RUDu和QUDu;

S2b:采用连续属性离散化的方法,对当前用户集S中所有用户的属性向量中的元素进行处理,经过处理后,所有用户的每个属性根据其值被分箱分为V个子区间;

S2c:以属性MUD为根节点,根据当前用户集S中用户的MUD值将用户分到V个子区间中,形成V个当前用户子集;

以属性RUD为根节点,根据当前用户集S中用户的RUD值将用户分到V个子区间中,形成V个当前用户子集;

以属性QUD为根节点,根据当前用户集S中用户的QUD值将用户分到V个子区间中,形成V个当前用户子集;

S2d:根据公式(6)至(10)计算当前用户集S在每个属性下的信息增益率:其中,At,t=1,2,3,At表示属性,GainRatio(S,At)表示当前用户集S在属性At下的分类信息增益率,Gain(S,At)表示当前用户集S在属性At下的分类信息增益,Entropy(S)表示当前用户集S的信息熵,Sv表示第v个当前用户子集,Entropy(Sv)表示前用户子集Sv的信息熵,|Sv|表示第v个当前用户子集Sv中用户的数量,|S|表示当前用户集S中用户的数量,Z表示当前用户集S中正常用户的数量,J表示当前用户集S中虚假用户的数量,Zv表示第v个当前用户子集Sv中正常用户的数量,Jv表示第v个当前用户子集Sv中虚假用户的数量;

S2f:选择以信息增益率最大的属性为根节点将当前用户集S分成的V个当前用户子集;

S2g:判断每个当前用户子集中用户的数量和类别:

如果每个当前用户子集中用户的数量等于1或0,或者每个当前用户子集中用户的类标签相同时,执行步骤S2i;否则执行下一步;

S2h:v遍历其取值,v=(1,2,3,...,V),v每取一个值,将第v个当前用户子集作为当前用户集S,更新当前用户集S,并执行步骤S2c至步骤S2g所述的方法;

S2i:分类结束,输出分类器。

说明书 :

一种基于流行度分类特征的托攻击检测算法

技术领域

[0001] 本发明涉及信息安全领域,具体涉及一种基于流行度分类特征的托攻击检测算法。

背景技术

[0002] 推荐系统是电子商务领域中为用户选择潜在感兴趣项目的重要工具。协同过滤是推荐系统中广泛应用的一种技术,这种方法通过为目标用户寻找最相似用户作为最近邻,利用最近邻的购买信息产生推荐结果。这种工作模式在实际中十分有效,但是却容易受到托攻击(Shilling attacks)。托攻击者通过注入一定的虚假概貌成为正常用户的最近邻干扰推荐系统的推荐结果,从而增加或者减少目标项目的推荐频率,分别称为推攻击和核攻击(Push and Nuke Attacks),如何防范和检测托攻击成为当前推荐系统研究领域的热点之一。
[0003] 如果把托攻击检测看成对正常用户与虚假用户进行分类,那么其中就涉及到分类特征的选择,即寻找一系列的特征区分这两类用户。当前使用的分类特征大多是与用户对项目评分相关的,即从正常用户与虚假用户对项目评分的方式不同入手寻找相应的检测指标,这种方式的检测手段有两个问题:(1)某些正常用户与虚假用户的评分方式类似,容易造成对此类正常用户的误判;(2)实际中的攻击大多是经过混淆的,如对目标项目不评最高(低)分而是评次高(低)分或在原始评分基础上加入一个随机数作为噪音干扰,这样当前的检测指标难以胜任托攻击方式的各种变化。

发明内容

[0004] 针对现有技术存在的上述问题,本发明的目的是提供一种基于流行度分类特征的托攻击检测算法。
[0005] 为实现上述目的,本发明采用如下技术方案:一种基于流行度分类特征的托攻击检测算法,包括如下步骤:
[0006] S1:设存在一个具有N个用户的用户集,该用户集中的元素由正常用户和虚假用户两种类别组成,两类用户分别使用类标签0和1进行标注,0表示正常用户,1表示虚假用户,nu为用户集的元素,表示第u个用户,u=1,2,3,...,N;用户集中所有用户评价过的项目的并集构成项目集,项目集中共有M个项目,mi为项目集的元素,i=1,2,3,...,M;
[0007] 获取用户集中所有用户对项目集中所有项目的历史评分数据,构建N×M的用户评分矩阵B,bui为用户评分矩阵的元素,表示第u个用户对第i个项目的评分,bui的值为评分数,如果第u个用户对第i个项目没有评分,则令bui为0;
[0008] S2:统计项目集中每个项目被正常用户评价的次数,采用项目流行度表示,记为d,di表示项目mi的项目流行度;
[0009] S3:根据步骤S1得到的用户评分矩阵和S2得到的项目流行度,确定用户流行度向量,方法如下:
[0010] 1)设用户nu对项目mi做出过评价,则定义用户nu与项目mi有联系;
[0011] 2)令u=1;
[0012] 3)i遍历其取值,所有与用户nu有联系的项目构成联系项目集,联系项目集中共有Gu个元素,guk为联系项目集的元素,其表示第k个与用户nu有联系的项目;
[0013] 4)设k=1;
[0014] 5)确定项目集中与项目guk相应的项目,然后调用S2中该项目的项目流行度作为guk的项目流行度d'k;
[0015] 6)保存与用户nu有联系的项目guk的项目流行度d'k;
[0016] 7)令k=k+1;
[0017] 8)如果k≤Gu,则返回步骤5),否则执行下一步;
[0018] 9)与用户nu有联系的所有项目的项目流行度形成一个一维向量Du,记向量Du为用户流行度向量, 输出Du;
[0019] 10)令u=u+1;
[0020] 11)如果u≤N,则返回步骤3),否则结束循环;
[0021] S4:计算基于流行度的分类特征值,所述基于流行度的分类特征值包括用户流行度均值、用户流行度极差和用户流行度上分位点,方法如下:
[0022] 1)根据公式(3)计算用户流行度均值MUD:
[0023]
[0024] 其中,MUDu表示用户nu的用户流行度均值,d'k表示用户nu的用户流行度向量Du中的元素,Gu表示与用户nu有联系的项目的总数;
[0025] 2)根据公式(4)计算用户流行度极差RUD:
[0026] RUDu=d'max-d'min,u=1,2,3...,N    (4);
[0027] 其中,RUDu表示用户nu的用户流行度极差,d'max表示用户nu的用户流行度向量Du的元素中值最大的项目流行度,d'min表示用户nu的用户流行度向量Du的元素中值最小的项目流行度;
[0028] 3)根据公式(5)计算用户流行度上四分位数QUD:
[0029] QUDu=d'k,u=1,2,3...,N    (5);
[0030] 其中,QUDu表示nu的用户流行度上四分位数,d'k表示用户nu的用户流行度向量Du中元素按照其值由小到大排序后,处于前四分之一位置处的项目流行度;
[0031] S5:根据用户的类标签及其相应的基于流行度分类特征,采用分类算法得到分类器;
[0032] S6:对任何一个新用户,采用步骤S3-S4所述方法计算该新用户基于流行度的分类特征值,然后将该新用户的分类特征值输入步骤S5确定的分类器中进行分类,判定该新用户的类别。
[0033] 作为优化,所述步骤S5中的分类算法为决策树算法,步骤如下:
[0034] S2a:由已知正常用户和虚假用户组成的所述用户集记为当前用户集S,S={n1,n2,...,nu,...,nN},用户nu的属性向量为Pu,Pu={a1u,a2u,...atu,...aLN}T,其中L=3,a1u,a2u和a3u分别表示MUDu,RUDu和QUDu;
[0035] S2b:采用连续属性离散化的方法,对当前用户集S中所有用户的属性向量中的元素进行处理,经过处理后,所有用户的每个属性根据其值被分箱分为V个子区间;
[0036] S2c:以属性MUD为根节点,根据当前用户集S中用户的MUD值将用户分到V个子区间中,形成V个当前用户子集;
[0037] 以属性RUD为根节点,根据当前用户集S中用户的RUD值将用户分到V个子区间中,形成V个当前用户子集;
[0038] 以属性QUD为根节点,根据当前用户集S中用户的QUD值将用户分到V个子区间中,形成V个当前用户子集;
[0039] S2d:根据公式(6)至(10)计算当前用户集S在每个属性下的信息增益率:
[0040]
[0041]
[0042]
[0043]
[0044]
[0045] 其中,At,t=1,2,3,At表示属性,GainRatio(S,At)表示当前用户集S在属性At下的分类信息增益率,Gain(S,At)表示当前用户集S在属性At下的分类信息增益,Entropy(S)表示当前用户集S的信息熵,Sv表示第v个当前用户子集,Entropy(Sv)表示前用户子集Sv的信息熵,|Sv|表示第v个当前用户子集Sv中用户的数量,|S|表示当前用户集S中用户的数量,Z表示当前用户集S中正常用户的数量,J表示当前用户集S中虚假用户的数量,Zv表示第v个当前用户子集Sv中正常用户的数量,Jv表示第v个当前用户子集Sv中虚假用户的数量;
[0046] S2f:选择以信息增益率最大的属性为根节点将当前用户集S分成的V个当前用户子集;
[0047] S2g:判断每个当前用户子集中用户的数量和类别:
[0048] 如果每个当前用户子集中用户的数量等于1或0,或者每个当前用户子集中用户的类标签相同时,执行步骤S2i;否则执行下一步;
[0049] S2h:v遍历其取值,v=(1,2,3,...,V),v每取一个值,将第v个当前用户子集作为当前用户集S,更新当前用户集S,并执行步骤S2c至步骤S2g所述的方法;
[0050] S2i:分类结束,输出分类器。
[0051] 相对于现有技术,本发明具有如下优点:本发明提供的检测算法,对用户类别有较好的判定效果,无论是在单纯的随机攻击、评价攻击、流行攻击或混淆技术干扰时的攻击时,都有非常好的托攻击检测性能,并且计算代价低,检测时间更短。

附图说明

[0052] 图1为本发明方法的流程图。
[0053] 图2为项目流行度分布图,其中横坐标Degree表示项目流行度值,纵坐标Fraction表示频率值。
[0054] 图3为帕累托拟合项目流行度分布图,其中横坐标Degree表示项目流行度值,纵坐标Fraction表示频率值,图中虚线构成的曲线表示系统中项目流行度使用帕累托分布拟合后的理论累计概率分布,实线构成的曲线表示系统中项目流行度的实际经验累积概率分布。
[0055] 图4为正常用户的流行度均值分布图,其中横坐标#of user表示正常用户ID号,纵坐标Degree表示项目流行度。
[0056] 图5为随机抽取项目作为装填的用户流行度均值图,图5a为随机选择3%装填率项目的虚假用户的平均流行度分布,图5b为随机选择6%装填率项目的虚假用户的平均流行度分布,图5c为随机选择9%装填率项目的虚假用户的平均流行度分布,图5d为随机选择12%装填率项目的虚假用户的平均流行度分布,其中横坐标为#of user表示虚假用户的ID号,纵坐标Degree表示项目流行度。
[0057] 图6a为随机攻击模型下的虚假用户与正常用户MUD值的对比图,图6b是平均攻击模型下的虚假用户,其中横坐标#of user表示用户的ID号。
[0058] 图7为流行攻击模型下虚假用户与正常用户的RUD值对比图(选择项目与装填项目不同,这里装填率是5%,然后讨论不同比例下的选择项目对于结果影响),图7a表示0.01%选择项目下流行攻击模型下虚假用户与正常用户的RUD值对比图,的图7b表示0.1%选择项目下流行攻击模型下虚假用户与正常用户的RUD值对比图,其中横坐标#of user表示用户的ID号。
[0059] 图8为平均流行攻击模型下的虚假用户与正常用户的QUD值对比图。其中横坐标#of user表示用户的ID号。
[0060] 图9本发明方法与传统方法对比图,图9a,9b,9c和9d分别表示随机攻击模型、平均攻击模型、流行攻击模型、平均流行攻击下发明方法与传统方法算法性能,其中横坐标Filer Size%表示是装填率(虚假用户选择部分项目作为装填项目,这些项目的个数与项目集个数的比值),纵坐标F-measure表示F值(F值是检测效果的评价指标,是准确率和召回率的比值)。

具体实施方式

[0061] 本发明中用的术语定义:
[0062] 项目的流行度(Item Popularity Degree)指的是系统中某项目被所有用户评分的次数。
[0063] 项目流行度分布(Item Popularity Distribution)指的是系统中流行度为d的项目所占的比例,由于把系统中的所有项目作为总体,所以 其中dmax为系统中项目流行度的最大值,Pd可以定义为 其中md为di=d的项目个数,即流行度为d个项目个数,M为系统中项目的总个数。
[0064] 本发明中的系统由用户(正常用户和虚假用户),项目和用户对项目的评分构成。
[0065] 本发明从正常用户与虚假用户对评分项目选择方式不同入手,解决托攻击检测问题(即区分虚假用户与正常用户)。由于正常用户对项目的选择带有自己的偏好,而虚假用户大多是随机选择评分项目,并且项目的流行度(Item popularity Degree)具有长尾效应,因此两类用户概貌中项目的流行度分布情况可以看成是用不同方式从项目流行度服从的长尾分布中进行抽样的结果。当我们把用户概貌表示为已评分项目的流行度向量的形式,因此,我们从用户流行度向量(User popularity Degree Vector)的差异寻找特征用于区分两类不同用户,从而实现托攻击检测问题。
[0066] 本发明把两类用户的概貌看成从项目的流行度分布中抽样的结果,以提取基于流行度的分类特征从而得到两类用户流行度向量的差异;将基于流行度的分类特征作为分类指标用到托攻击检测中,实现托攻击检测。
[0067] 下面对本发明作进一步详细说明。
[0068] 参见图1,一种基于流行度分类特征的托攻击检测算法,包括如下步骤:
[0069] S1:设存在一个具有N个用户的用户集,该用户集中的元素由正常用户和虚假用户两种类别组成,两类用户分别使用类标签0和1进行标注,0表示正常用户,1表示虚假用户,nu为用户集的元素,表示第u个用户,u=1,2,3,...,N;用户集中所有用户评价过的项目的并集构成项目集,项目集中共有M个项目,mi为项目集的元素,i=1,2,3,...,M;
[0070] 获取用户集中所有用户对项目集中所有项目的历史评分数据,构建N×M的用户评分矩阵B,bui为用户评分矩阵的元素,表示第u个用户对第i个项目的评分,bui的值为评分数,如果第u个用户对第i个项目没有评分,则令bui为0;
[0071] S2:统计项目集中每个项目被正常用户评价的次数,采用项目流行度表示,记为d,di表示项目mi的项目流行度;
[0072] 本发明提供的方法中仅仅统计正常用户的对项目评价次数,原因是:①实际中攻击用户数量极少,统计正常用户全部不会造成很大偏差;②而且攻击者一般是系统评分到达一定程度后在攻击(才会有攻击目标)。所以统计正常用户的评分可以模拟现实的这种可能。
[0073] 我们统计了项目的评价次数,得到项目流行度的统计信息。如果统计项目流行度在每一个度数出现的频率,就可以得到项目流行度的分布,进而可以得到如图2所示的图形。
[0074] 从直观上判断项目的项目流行度分布有很厚的长尾,使用累计分布的对比来进一步分析项目流行度满足的分布。首先使用广义帕累托分布进行拟合,得到理想的分布,然后将实际的累计分布函数与理想分布的累计分布函数进行对比,得到图3的拟合效果对比图。通过以上的累积概率分布函数拟合图可知,项目流行度分布与帕累托分布具备一定相似性,即可以认为项目流行度分布服从长尾分布。
[0075] 通过上面的分析,可以得到一个结论:可预见的不平衡,即项目被关注(被评分次数)的概率是不均等的,部分项目的关注概率远远高于其他项目。这就导致了攻击者(虚假用户)在构建攻击概貌的时候,如果项目的选择是随机的,那么该用户流行度均值就会远远低于正常用户的平均流行度。
[0076] S3:根据步骤S1得到的用户评分矩阵和S2得到的项目流行度,确定用户流行度向量,方法如下:
[0077] 1)设用户nu对项目mi做出过评价,则定义用户nu与项目mi有联系;
[0078] 2)令u=1;
[0079] 3)i遍历其取值,(即遍历项目集中的所有项目,将与用户ni有联系的所有项目选出),所有与用户nu有联系的项目构成联系项目集,联系项目集中共有Gu个元素,guk为联系项目集的元素,其表示第k个与用户nu有联系的项目;
[0080] 4)设k=1;
[0081] 5)确定项目集中与项目guk相应的项目,然后调用S2中该项目的项目流行度作为guk的项目流行度d'k;
[0082] 6)保存与用户nu有联系的项目guk的项目流行度d'k;
[0083] 7)令k=k+1;
[0084] 8)如果k≤Gu,则返回步骤5),否则执行下一步;
[0085] 9)与用户nu有联系的所有项目的项目流行度形成一个一维向量Du,记向量Du为用户流行度向量, 输出Du;
[0086] 10)令u=u+1;
[0087] 11)如果u≤N,则返回步骤3),否则结束循环;
[0088] 正常用户的用户流行度均值分析:正常用户对于不同项目流行度的项目的选择不是随机的,往往带有一定的偏好,因此正常用户的用户流行度均值的分布呈现如图4的形式。从图4可以发现正常用户的用户流行度分布基本在数值100以上,经过统计可知平均流行度值大于100的用户数量在整个用户中的比例是99.26%。一个可能的原因就是正常用户偏向于选择项目流行度高且吻合自己偏好的项目。
[0089] 随机选择项目填充的用户(即虚假用户)其用户流行度分析:与正常用户不同,虚假用户选择的装填项目大多是任意选择的,而这些项目的项目流行度满足幂律分布,可以认为用户流行度是从项目流行度分布中抽样得出的。为说明情况,我们讨论项目装填规模是3%、6%、9%和12%时虚假用户的用户流行度均值的分布情况,见图5。
[0090] 从系统项目流行度总体中随机抽取填充率为3%、6%、9%和12%的项目作为填充,为了说明情况,重复试验10000次,这样可以看成是10000个虚假用户的概貌,通过计算这些用户的用户流行度均值,可以得到图5的分布,通过统计发现分别有比例为0.9908、0.9999、0.9999和1的用户流行度均值在100以下。项目的流行度可以看成服从幂律分布,所以如果随机选择项目作为装填项目得到的用户概貌,计算其所得到用户平均流行度数值与正常用户的平均流行度数值有显著区别。
[0091] S4:计算基于流行度的分类特征值,所述基于流行度的分类特征值包括用户流行度均值、用户流行度极差和用户流行度上分位点,方法如下:
[0092] 1)根据公式(3)计算用户流行度均值MUD:
[0093]
[0094] 其中,MUDu表示用户nu的用户流行度均值,d'k表示用户nu的用户流行度向量Du中的元素(即项目流行度),Gu表示与用户nu有联系的项目的总数;
[0095] 从上面的讨论可知如果一个用户的已评分项目是随机选择的,那么该用户的MUD值将远远低于正常用户,通过图6a和图6b可以发现当攻击规模为0.5%时,MUD值可以有效区分这两类用户。
[0096] 从图6a和图6b可以发现随机攻击模型下的虚假用户及平均攻击模型下的虚假用户这两种虚假用户的MUD值远远低于正常用户,且由于两种方式的攻击方式接近,所以MUD值的分布情况也很类似,这也说明可以使用MUD值作为分类特征进行托攻击检测。
[0097] 2)根据公式(4)计算用户流行度极差RUD:
[0098] RUDu=d'max-d'min,u=1,2,3...,N    (4);
[0099] 其中,RUDu表示用户nu的用户流行度极差,d'max表示用户nu的用户流行度向量Du的元素中值最大的项目流行度,d'min表示用户nu的用户流行度向量Du的元素中值最小的项目流行度;
[0100] 使用流行攻击模型进行攻击的虚假用户,除了选择部分装填项目,还会选择部分流行项目作为选择项目,随着选择项目的增加,虚假用户的MUD值会与正常用户的MUD值接近,但是虚假用户仍然会选择大部分的项目作为装填项目,因此虚假用户的流行度向量会产生一个有趣的现象:参见图7a和图7b用户概貌中某些项目的流行度值十分大,而某些项目的流行度值十分小,因此使用流行度最大值与最小值之间的差值进行流行度攻击者的检测,因此提出的RUD指标:可以发现尽管虚假用户可以通过加入多个流行项目提高自己的MUD值,但是虚假用户的RUD值会与正常用户造成偏差。
[0101] 3)根据公式(5)计算用户流行度上四分位数QUD:
[0102] QUDu=d'k,u=1,2,3...,N    (5);
[0103] 其中,QUDu表示nu的用户流行度上四分位数,d'k表示用户nu的用户流行度向量Du中元素按照其值由小到大排序后,处于前四分之一位置处的项目流行度;
[0104] 使用分段攻击模型进行攻击的虚假用户与使用流行攻击模型的虚假用户类似,需要选择部分选择项目,但是选择项目的选择方式不是取全局流行度最高的项目,而是取与目标项目类似的且评分值较高的项目。因此根据选择项目流行度的可能情况分为三种情况讨论:①选择的包含高流行度的项目,这时可以使用RUD对正常用户与虚假用户进行分类;②选择没有包含流行度高的项目,且选择项目流行度均偏低,这是可以使用MUD进行分类;
③选择的是流行度适中的项目,这种情况十分极端,因为加入的项目具有的流行度值并不是十分高,但是却可以提升整理的流行度值,因此可能造成RUD与MUD这两个指标都无法检测,且实际检测中不可能对三种情况一一检测,鉴于此,提出了第三个指标QUD。从图8可以发现,如果把一个用户概貌中的项目按照流行度升序排列,由于装填项目的存在,会发现至少一半的项目流行度十分低,因此通过使用QUD作为分类特征可以很好的区分虚假用户和正常用户。
[0105] S5:根据用户的类标签及其相应的基于流行度分类特征,采用分类算法得到分类器;
[0106] S6:对任何一个新用户,采用步骤S3-S4所述方法计算该新用户基于流行度的分类特征值,然后将该新用户的分类特征值输入步骤S5确定的分类器中进行分类,判定该新用户的类别。(即判定该新用户属于正常用户还是虚假用户)
[0107] 步骤S5中的分类算法为决策树算法,步骤如下:
[0108] S2a:由已知正常用户和虚假用户组成的所述用户集记为当前用户集S,S={n1,n2,...,nu,...,nN},用户nu的属性向量为Pu,Pu={a1u,a2u,...atu,...aLN}T,其中L=3,a1u,a2u和a3u分别表示MUDu,RUDu和QUDu;
[0109] S2b:采用连续属性离散化的方法,对当前用户集S中所有用户的属性向量中的元素进行处理,经过处理后,所有用户的每个属性根据其值被分箱分为V个子区间;(V表示子区间的个数)
[0110] S2c:以属性MUD为根节点,根据当前用户集S中用户的MUD值将用户分到V个子区间中,形成V个当前用户子集;
[0111] 以属性RUD为根节点,根据当前用户集S中用户的RUD值将用户分到V个子区间中,形成V个当前用户子集;
[0112] 以属性QUD为根节点,根据当前用户集S中用户的QUD值将用户分到V个子区间中,形成V个当前用户子集;
[0113] S2d:根据公式(6)至(10)计算当前用户集S在每个属性下的信息增益率:
[0114]
[0115]
[0116] 计算出用户集S分别在三个属性下的信息增益率,然后比较该三个信息增益率,选出最大信息增益率的属性。
[0117]
[0118]
[0119]
[0120] 其中,At,t=1,2,3,At表示属性,(A1表示属性用户流行度均值MUD,A2表示属性用户流行度极差RUD,A3用户流行度上四分位数QUD)GainRatio(S,At)表示当前用户集S在属性At下的分类信息增益率,Gain(S,At)表示当前用户集S在属性At下的分类信息增益,Entropy(S)表示当前用户集S的信息熵,Sv表示第v个当前用户子集,Entropy(Sv)表示前用户子集Sv的信息熵,|Sv|表示第v个当前用户子集Sv中用户的数量,|S|表示当前用户集S中用户的数量,Z表示当前用户集S中正常用户的数量,J表示当前用户集S中虚假用户的数量,Zv表示第v个当前用户子集Sv中正常用户的数量,Jv表示第v个当前用户子集Sv中虚假用户的数量;
[0121] S2f:选择以信息增益率最大的属性为根节点将当前用户集S分成的V个当前用户子集;(继续对V个当前用户子集进行分类)
[0122] S2g:判断每个当前用户子集中用户的数量和类别:
[0123] 如果每个当前用户子集中用户的数量等于1或0,或者每个当前用户子集中用户的类标签相同时,执行步骤S2i;否则执行下一步(对当前用户子集继续分类);
[0124] S2h:v遍历其取值,v=(1,2,3,...,V),v每取一个值,将第v个当前用户子集作为当前用户集S,更新当前用户集S,并执行步骤S2c至步骤S2g所述的方法;(即采用递归的方法逐层开叉,建立子树)
[0125] S2i:分类结束,输出分类器。
[0126] 决策树技术是一种对海量数据集进行分类的非常有效的方法。通过构造决策树模型,提取有价值的分类规则,具有分类精度高、生成的模式简单和对噪声数据有很好的健壮性的优点。采用决策树算法作为分类算法的优点有:①计算速度快;②可以转化为可读的规则;③精确度高;④可以处理连续属性;⑤两者结合的话能够灵活适应各种攻击。
[0127] 本发明方法记作DegreeSAD,;
[0128] 实验的参数包括三个:装填规模、攻击规模及攻击模型,其中,装填率取3%、6%、9%、12%、15%和20%,攻击强度取3%、5%、7%、10%和12%,攻击模型选择随机攻击、均值攻击、流行攻击与分段攻击的推攻击。将这三个参数进行组合,每一种组合对应一个实验设置,其中选择80%的数据样本作为训练集,20%的数据样本作为测试样本,通过在训练样本中训练一棵决策树,然后再在测试集上计算算法的准确率与召回率,并将每一个独立的实验进行100次后,统计得到最终的结果作为DegreeSAD的性能分析,得到结果表1-表4。
[0129] 表1 DegreeSAD检测随机攻击的准确率与召回率
[0130]
[0131] 表2 DegreeSAD检测平均攻击的准确率与召回率
[0132]
[0133] 表3 DegreeSAD检测流行攻击的准确率与召回率
[0134]
[0135] 表4 DegreeSAD检测分段攻击的准确率与召回率
[0136]
[0137] 为了对DegreeSAD算法的检测效果进行更为细致分析,将算法与Li等提出的LFAMR及mehta等提出的PCA VarSelec方法及利用DegSim和RDMA进行托攻击检测的RatingSAD方法。其中LFAMR与PCA VarSelect为无监督方法,DegreeSAD方法为有监督方法。由于DegreeSAD可以很容易与经典的无监督算法结合,所以论文将这四种方法进行一起讨论,并且着重与基于传统检测指标的RatingSAD方法进行比较。在相同配置下的情况对这四种算法进行比较,并且分析填充率为10%的时候,四种算法的检测效果,实验结果如图9所示。
[0138] RatingSAD的分类特征为DegSim和RDMA,这两个特征的计算方法如下:
[0139] 1)根据公式(11)计算Degsim(Degree of similarity with Top Neighbours):
[0140]
[0141] 其中Wuv为用户u与用户v的相似度,这里取前k个最相似的用户计算相似度的均值作为Degsim。
[0142] 2)根据公式(12)计算RDMA(Rating Deviation from Mean Agreement):
[0143]
[0144] 其中Nu为用户已评分项目的数目,ru,i为用户u对项目i的评分, 为项目i的评分均值,NRi为项目i被评分的次数。
[0145] 图9可以发现传统方法容易受到混淆版本的干扰且传统方法对于分段攻击没有很好的检测效果,而我们提出的方法针对四种攻击均具有较优的检测性能,并且由于不考虑评分特性,因此能够抗干扰。另外,DegreeSAD方法与传统的RatingSAD方法相比需要更低的时间代价,传统的方法中RDMA指标的计算需要计算项目均值并统计用户评分数与项目评分数,然后进一步计算出评分的偏差,且Degsim的计算不仅涉及用户与用户间相似度的计算,且涉及从用户的相似度向量中找到前面若干个值,涉及到的操作更加繁重。而本发明基于流行度的检测方法仅需要计算项目评分数与用户评分数,并统计用户评分分布。
[0146] 设m为实施例所选系统中用户的数目,n为该系统中项目的数目,传统方法的计算代价O(RatingSAD)为RDMA代价、Degsim代价、分类器训练代价之和,包括1)项目均值代价、项目评分数计算代价、用户评分数计算代价、RDMA计算代价之和;2)用户相似度计算代价、取前若干个相似度值代价、Degsim计算代价之和;3)分类器计算代价。由于项目评分数计算代价、用户评分数计算代价、项目评分均值计算代价及用户评分频率统计代价等均为O(n*m),而所有用户相似度的计算为O(m*m*n)=O(m2*n),所有用户RDMA计算中代价消耗为O(n*m),因此:
[0147] O(RatingSAD)=O(n*m+n*m2)+O(classifier)
[0148] =O(n*m2)+O(classifier)    (13);
[0149] 而本发明方法的计算代价O(DegreeSAD)包括1)项目评分数计算代价、用户评分数代价、用户评分频率统计代价;2)分类器代价,因此:
[0150] O(DegreeSAD)=O(n*m)+O(classifier)    (14);
[0151] 所以从时间复杂度上分析,本发明提供的方法至少比传统方法在分类特征的计算上快m倍,更适合于实际的系统。
[0152] 与无监督方法LFAMR及PCAVarSelect相比,PCAVarSelect在随机攻击、平均攻击以及流行攻击的检测上具有最好的检测效果,但是却无法检测分段攻击,而LFAMR方法在填充率提高时检测效果较好,并且对于各类攻击均具有良好的检测效果,但是在装填率较低时检测效果不佳。DegreeSAD方法在不同的填充率与攻击模型下均具有较好的检测效果。
[0153] 结合以上对比实验可以发现本发明提供的算法不仅在受到混淆技术干扰时比传统具有更好的托攻击检测性能,并且具有优于传统方法的计算时间。
[0154] 最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。