[0060] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明进行进一步详细说明。
[0061] 相反,本发明涵盖任何由权利要求定义的在本发明的精髓和范围上做的替代、修改、等效方法以及方案。进一步,为了使公众对本发明有更好的了解,在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。
[0062] 如图1所示,本发明的一种基于上下文感知的多角度业务流程异常在线检测方法,包括以下步骤:
[0063] S1.数据预处理:输入原始日志,将其划分为训练数据集和测试数据集,对训练数据集使用过程发现技术Split Miner从中挖掘出Petri网流程模型其中 是由全部库所节点组成的有限集
合; 是由全部变迁节点组成的有限集合,且满足
是活动的有限集合;
是一组有向弧,表示流程中变迁与库所之间的关系; 是一个映射函数,将每个变迁节点 与 中的单个活动或者和不可观察到的活动⊥相映射;Minit表示Petri网的初始状态;
[0064] S2.上下文提取:首先利用重演技术基于步骤S1获得的Petri网流程模型PN 对当前轨迹进行重演,得到局部行为上下文e.lbc和全局上下文e.gbc;然后对事件的属性进行处理,得到当前执行活动的时间上下文e.tcv和属性上下文e.tcv,两者共同构成活动的数据上下文,具体包含以下子步骤:
[0065] S21.从PN中获取开始活动集合 结束活动集合 以及PN中的全部活动集合并初始化全局行为上下文向量vgbc为长度 的0向量,其中 为PN中库所节点的数量,第 位用于接收未知活动执行产生的托肯;
[0066] S22.对日志中的事件根据其发生时间先后进行排序,得到按发生早晚排好序的事件列表Elist;
[0067] S23.依次遍历Elist中的每个事件并根据事件的实例ID属性找到其所属的轨迹T;
[0068] S24.对Elist中的每个事件判断其执行活动;
[0069] S25.若当前事件的执行活动属于开始活动集 为开始活动,则执行以下操作:
[0070] (1)初始化当前活动的局部行为上下文向量vlbc为长度 的0向量;
[0071] (2)获得当前活动对应变迁节点的输入集合Spre和输出集合Spost;
[0072] (3)对Spre中的每个库所节点,将vlbc中该库所节点对应位置的数值加1,对vgbc执行相同的操作,然后将vlbc存储到当前事件e的属性e.lbc和当前轨迹T的属性T.lastState中,将vgbc存储到当前事件e的属性e.gbc中;
[0073] (4)对Spost中的每个库所节点,将Spre中库所节点的托肯转移到Spost的库所节点中,并对vlbc作出同样的转移,即该库所节点对应位置处的数值加1,被转移的库所节点对应位置处的数值减1,得到轨迹执行当前活动后的状态,并将其保存在当前轨迹T的属性T.nextState中;
[0074] S26.若当前事件执行的活动不属于 但属于 为普通活动,则执行以下操作:
[0075] (1)当前活动的局部行为上下文向量vlbc为T.nexState,全局行为上下文向量vgbc为vgbc+T.nextState‑T.lastState;
[0076] (2)获得当前活动对应变迁节点的输入集合Spre和输出集合Spost;
[0077] (3)对Spre中的每个库所节点,将vlbc中该库所节点对应位置处的数值减1,然后将vlbc存储到当前事件e的属性e.lbc和当前轨迹T的属性T.lastState中,将 vgbc存储到当前事件e的属性e.gbc中;
[0078] (4)对Spost中的每个库所节点,将Spre中库所节点的托肯转移到Spost的库所节点中,并对vlbc作出同样的转移,即该库所节点对应位置处的数值加1,被转移的库所节点对应位置处的数值减1,得到轨迹执行当前活动后的状态,并将其保存在当前轨迹T的属性T.nextState中;
[0079] S27.若当前事件执行的活动不属于 则当前执行的活动在PN模型中未出现过,为意外活动,则执行以下操作:
[0080] (1)当前活动的局部行为上下文向量vlbc为T.nexState,全局行为上下文向量vgbc为vgbc+T.nextState‑T.lastState;
[0081] (2)将vlbc存储到当前事件e的属性e.lbc和当前轨迹T的属性T.lastState中,将vgbc存储到当前事件e的属性e.gbc中;
[0082] (3)对vlbc中 位置上的数值加1来表示该活动执行后的状态,然后将vlbc存储到当前轨迹T的属性T.nextState中;
[0083] S28.若当前事件执行的活动属于结束活动集 则说明当前轨迹执行完毕,则执行以下步骤:
[0084] (1)从全局上下文vgbc中减去该轨迹带来的托肯,即vgbc=vgbc‑ T.lastState;
[0085] (2)局部行为上下文向量vlbc仍为T.nexState,保存事件的局部行为上下文和全局行为上下文;
[0086] S29.对Elist中的每个事件执行S24~S28的迭代过程,迭代结束后返回包含行为上下文属性的事件集Elist;
[0087] S210.对事件发生的时间戳进行处理,得到当前执行活动的时间上下文 e.tcv=[h,m,d,weekday,tsct,td],其中h,m,d,weekday分别表示该时间戳对应的小时、月份、天以及星期的信息,tsct表示当前时间戳距该实例开始时间戳的时间间隔,其计算需要当前实例第一个执行活动的开始时间戳,td表示当前时间戳距当天凌晨的时间间隔;
[0088] S211.对事件的其余属性根据其属性值是否为数值类型划分为类别属性和数值属性,对类别属性进行one‑hot编码,然后与数值属性构成的向量合并得到属性上下文e.dcv;时间上下文和属性上下文构成了活动的数据上下文;
[0089] S3.使用LSTM方法训练异常检测模型,具体包含以下步骤:
[0090] S31.对事件日志中的每个事件进行编码,使用S2中获得的变量表示事件对应的完整上下文信息,该变量由上一阶段获得的e.lbc,e.gbc,e.tcv,e.dcv四个向量级联而成;
[0091] S32.日志中的每条轨迹由一个二维矩阵表示,其中轨迹矩阵的每一行由其拥有的事件所对应的事件向量构成;
[0092] S33.设置统一的长度对轨迹矩阵的行数进行限制,统一为最长轨迹的长度,对于短的轨迹使用包含0的事件向量对其进行补充;
[0093] S34.对于每条轨迹,人为增加三个标签分别对应其是否存在行为异常、事件异常以及属性异常,得到编码为如下形式的轨迹:
[0094] T=(xtri,[lbi,lti,lai])
[0095] 其中xtri是第i条轨迹对应的轨迹矩阵,lbi,lti,lai∈(0,1)是其对应的异常标签即行为异常、时间异常和属性异常,若值为1则表明当前轨迹拥有此类异常,若值为0则说明没有此类异常;
[0096] S35.对所有训练数据,执行S31~S34的操作,得到如下训练集:
[0097]
[0098] 其中n表示训练集中的轨迹总数;
[0099] S36.以得到的训练集数据为基础,采用神经网络模型LSTM来训练异常检测模型,得到最终的异常检测模型,其中采用LSTM来训练异常检测模型,包括两种方式,第一种是分别单独训练三种异常的检测模型,第二种架构是则是让三种异常检测模型共享隐藏层,但拥有各自独立的输出层;模型训练过程中优选随机搜索法来获取模型的最优参数。
[0100] S4.进行待检测轨迹的异常检测,具体包含以下步骤:
[0101] S41.对待检测的轨迹执行S2,获得其执行的上下文信息;
[0102] S42.对待检测的轨迹执行S31~S34,得到编码后的轨迹;
[0103] S43.将编码后的轨迹输入到由S3训练得到的异常检测模型中,得到最终的检测结果,并发送给相关人员进行进一步的判决。最终的检测结果和轨迹数据将被保存下来用于下次检测模型的增量更新,以助于提高检测模型检测的正确率。
[0104] 实施例
[0105] 本实施例步骤与具体实施方式相同,在此不再进行赘述。下面就部分实施过程和实施结果进行展示:
[0106] 数据源获取:本实施例所用的原始日志文件是从4TU研究数据中心获得的四个真实的业务流程产生的日志:Helpdesk,BPIC2012_A,BPIC2012_O, BPIC2012_W。其中Helpdesk来源于意大利某软件公司服务台的票务管理流程,剩余三个日志来源于荷兰某财政机构,记录了申请贷款业务的流程的相关信息,它们是三个相互交织的子流程。其中每个日志中的相关统计信息见表1。由于真实日志中未提供有关实际异常的信息,因此有必要生成人为异常。执行以下操作来生成人为异常数据。对于行为异常执行以下两种突变操作:(1)活动插入:随机选择一个活动插入到当前轨迹中;(2)调整活动执行顺序:将当前轨迹中的一个活动随机移动至轨迹的另一个位置。对于属性异常,从日志中随机选择事件并对其执行资源进行替换,新的执行资源在原有日志中从未执行过该类活动。对于时间异常数据,将执行以下两种标记:(1)活动执行时间异常:对同一类活动,将对事件日志中该类活动的执行时间进行统计,得到其分布图,并选择其中执行时间最久的部分事件进行异常标记;
(2)实例执行时间异常:首先根据实例中执行活动的种类对实例进行分类(即拥有相同执行活动集合的实例将被划分为同一类),然后分别统计出每一类中执行时间最久的部分实例进行异常标记。
[0107] 为了验证本发明技术方案的技术效果,选取常用的四个指标:准确率、精确率、召回率以及F1分数来衡量检测的性能。此外,本实施例分别使用两种不同架构方案的LSTM模型的效果,SingleM表示第一种模型架构方案(单一模型),ShareM表示第二种模型架构方案(共享模型)。同时为了验证提出的基于重演提取的行为上下文对检测结果的影响,为训练模型分别生成了两类数据样本,其中第一类样本(withBC)将包含本发明提出的行为上下文信息和数据上下文信息,而第二种样本(withoutBC)则仅包含数据上下文(以往的工作均只使用了数据上下文信息)。
[0108] 图3、4、5、6分别展示了在四个数据集上使用本发明方法进行三类异常检测的准确率、精确率、召回率以及F1分数的变化。由图中可以看到,加入本发明提出的行为上下文信息后,三类异常检测精度均有不同程度的提高,这证明了本发明提出的基于重演技术提取得到的行为上下文信息的有效性。另外,对于两种模型架构方案,由图可见,共享模型在大部分情况下检测效果比起单一模型的检测效果略好,这是因为通过共享隐藏层,可以让模型学习到三类异常之间的一些内部联系。
[0109] 此外,本实施例还选用了分类模型支持向量机(SVM),K邻近算法(KNN) 和决策树(DT)作为对比算法来进一步证明本发明提出方法的有效性。我们选择上轮实验中共效果最佳的检测模型ShareM(withBC),并使用召回率和F1分数作为衡量指标。实验结果如表2所示,其中最佳结果将以粗体标记。从表中可以看出,本发明方法在F1分数上均取得了最好的效果。这是因为LSTM可以学习同一实例中活动之间的远程依赖关系,并且可以将之前执行的重要信息保留,从而充分利用了上下文信息进行异常判断。在召回率上本发明方法对行为异常的检测均取得了最佳的效果,这是由于本发明提出的方法利用了重演技术来提取实例的行为上下文使得检测模型得到的信息更加全面。而在时间异常和属性异常的检测上,本发明方法仅在大部分数据集上取得了最优效果,这是因为属性异常和时间异常都属于点异常,它们与实例中执行活动的相关属性紧密相关,而过长的执行轨迹可能会导致一部分重要信息被忽视,进而影响了检测结果。
[0110] 表1四个真实数据集的统计信息表
[0111]
[0112] 表2为本发明方法和其他算法的检测结果对比结果
[0113]
[0114] 以上所述的实施例只是本发明的一种较佳的方案,然其并非用以限制本发明。有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型。因此凡采取等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。