变异的概念:流程变体、偏差、异常

今天我们来聊聊变异这个概念。嗯,说实话,很多人把流程变体、偏差、异常混为一谈,但其实它们是三个不同的层次。

我记得刚接触流程挖掘那会儿,导师甩过来一个日志文件让我分析。我盯着字段里的活动名称,完全看不出门道。后来花了整整一周才弄明白——流程不是铁板一块,每次执行都可能不一样。这种不一样,就是变异。

但变异分等级。有些变异是“正常的走法”,有些是“稍微偏了点”,还有些则是“必须拉红灯”的。下面我按自己的理解,把它们拆开讲清楚。

流程变体 – 变异的第一层

什么是流程变体?说白了,就是同一条流程在实际执行中产生的不同路径。比如一个采购流程,有的订单要走经理审批,有的因为金额小直接跳过。这两种路径,就是两个变体。

我在项目中做过一个客户投诉处理流程的分析,日志里有130万条事件。我粗筛了一遍,居然跑了400多种变体。最频繁的变体占了35%,最少的只出现过1次。你能想象吗?同一个流程,最后跑出400种走法。

我的习惯: 拿到日志第一件事,先跑变体分析。看看变体数量和帕累托分布。如果前5个变体已经覆盖了80%的执行,那重点就放在这5个上面。

流程变体可以用轨迹表示。每条轨迹就是活动序列。比如:A→B→C→D 和 A→C→B→D,就是两个变体。注意,即便活动一样,顺序不同也算不同变体。

# 用Python统计变体(示意)
from pm4py.objects.log.importer.xes import importer as xes_importer

log = xes_importer.apply("order_handling.xes")
variants = list(log)

# 每个变体是一个列表
for i, variant in enumerate(variants[:5]):
    print(f"变体{i+1}: {len(variant)}条轨迹")
    print("  → " + " → ".join(variant[0]))

这里要注意:变体多不代表有问题。它可能只是业务允许的多种合法路径。但变体数量突然增多,或者出现全新变体,就值得深挖了。

偏差 – 对比参照线的差异

偏差是啥?就是对某个“理想流程”或“标准流程”的偏离。

这里的关键是“参照线”。没有参照线,就谈不上偏差。我们通常用流程模型(比如 BPMN 图、Petri 网)作为参照线。日志里的行为如果跟模型不一致,就产生偏差。

偏差分两种:

  • 插入性偏差 – 实际执行中多做了模型里没有的活动。比如模型里没有“重新审核”,但日志里出现了。
  • 遗漏性偏差 – 实际执行中跳过了模型里要求的活动。比如模型要求“审批→付款”,但实际从“审批”直接跳到“发货”,漏了付款。

我在一个银行信贷流程里遇到过离谱的遗漏性偏差:模型里要求“信用评估必须由风控经理签字”,但实际日志显示有27%的案例直接跳过了这个环节。这就是根因关联风险。

偏差度量公式(我自己常用的):

偏差度 = (不一致的事件数 / 总事件数) × 100%

例如某流程共1000个事件,其中80个不符合模型
偏差度 = (80/1000) × 100% = 8%

一般偏差度超过15%就算高偏差,需要介入。

偏差不一定就是坏。有时是模型过时了,实际流程已经优化。但偏差一定意味着“需要解释”。记住这个原则:每条偏差背后都有原因。

异常 – 需要重点关注的极端变异

异常是偏差中最极端的那一类。它通常违反业务规则、超过阈值、或者频繁出现在错误路径中。

我个人的定义是这样的:

  • 如果某个行为在日志中出现的概率低于1%,且违反了硬性规则(比如金额超过限额却无特批),那就是异常。
  • 如果某个轨迹的执行时间超过正常值3个标准差,那也是异常。
  • 如果某个活动从未出现在历史变体中,但突然冒出100次,那也是异常。
避坑指南: 我曾经犯过一个错——把所有低频变体直接标记为异常。结果发现有些低频变体其实是春节促销期的特批路径,完全合法。低频 ≠ 异常!异常必须结合业务规则和上下文判断。

检测异常我常用两种方法:

方法适用场景例子
规则基检测明确知道哪些行为不允许“金额>10万必须两人会签” → 日志里只有一人签 → 异常
统计基检测没有明确规则,但数据有分布规律处理时长 > 均值+3σ → 异常

异常处理流程我建议这样走:

  1. 自动化检测:用规则+统计跑一遍所有案例,标记异常候选。
  2. 专家复核:让业务人员看异常候选,排除误报。
  3. 根因分析:找出为什么出现异常,是流程漏洞还是人为错误。
  4. 反馈闭环:把确认的异常补入规则库,下次就能自动拦截。

哦对了,还有一个概念叫做“异常簇”。当多个异常在时间或空间上聚集时,往往预示着系统性缺陷。比如某个部门的异常在一天内爆发了30次,那大概率不是个人问题,而是流程设计或者系统Bug。

三者的关系

很多人把变体、偏差、异常当成三个独立概念。其实它们是一条链上的不同位置:

  • 流程变体是所有实际执行轨迹的集合,包含一切。
  • 偏差是从变体中切出的一块——那些跟“标准”不一样的部分。
  • 异常又是从偏差中再切出的一块——最极端、最需要关注的偏差。
我的工作流:
  1. 先看变体分布,理解流程有没有“主流”和“支流”。
  2. 再算偏差度,找模型和现实的差距。
  3. 最后聚焦异常,处理真正有风险的少数案例。

三步下来,对流程的变异情况就有谱了。

下面这张图把三者的层级关系画出来了。你可以从外到内理解:最外圈是所有变体,中间是偏离标准的偏差,最内圈是需要处理的异常。

变体·偏差·异常层级关系 流程变体 所有实际执行轨迹 偏差 偏离标准模型 异常 极端偏差 由外向内聚焦 变体 偏差 异常

一句话总结: 变体是全集,偏差是参照偏离,异常是危险信号。别搞混。下次看到一堆日志,先按这个层次问自己:“这是正常变体、可理解的偏差、还是必须处理的异常?”