流程挖掘 · 手机学习手册

定位:这是差异化那一块,不是主线。目标不是精通 PM4Py,而是能在面试里讲清一件事——

事件数据不对,流程模型就是错的;数据质量问题会伪装成业务问题。


0. 怎么用

第一次(25 分钟):读 1 到 5 章,把"宽表变长表"和"变体"这两件事弄懂就够。

第二次(20 分钟):读 6 到 8 章,这三章是面试的区分度所在。

面试前:只看第 9 章(怎么讲你的项目)和第 10 章(追问速答)。

一句话验收:能用三分钟讲清"我们怎么把四套系统的日志变成流程模型,以及中间差点被什么数据问题骗过去"。


1. 一句话结论

流程挖掘不是"画流程图",而是用事件日志反推真实的业务过程,并证明这个反推是可信的。

技术上全部难点就两件:

  1. 怎么把业务数据变成事件日志——这是 ETL 问题。
  2. 怎么证明模型没画错——这是一致性检查问题。

其余都是工具。


2. 事件日志的三要素

流程挖掘吃的是事件日志,不是业务表。最小结构只有三列:

案件 ID(一个流程实例的标识,订单号、病历号)。缺了就无法把事件串成路径,只能做频次统计。

活动名(发生了什么业务动作)。缺了无法建流程模型。

时间戳(何时发生)。缺了无法排序、算时长、找瓶颈。

标准格式叫 XES,字段名分别是 case:concept:name、concept:name、time:timestamp。


3. 为什么业务表不能直接挖

宽表和长表

业务表是宽表:一个订单一行,下单时间、拣货时间、打包时间各占一列。

流程挖掘要的是长表:一个事件一行。

宽表里 OrderDate 和 PickedDate 是两个字段,模型根本不知道它们在同一条时间轴上。只有反透视成长表,下单 → 拣货 → 打包 才成为一条可被发现的路径。

三种写法

SQL:多次 SELECT ... UNION ALL,比 UNPIVOT 可移植(MySQL 没有 UNPIVOT)。数据量大时改成条件聚合,一次扫表。

pandas:先建"列名到活动名"的映射字典,再逐列展开——不要写死五次 melt,列一多就不可维护。

注意:反透视的真正难点不是 melt,而是判断哪些列算事件。有些日期列是事件(下单、发货),有些只是属性(注册日期)。混进去就会凭空多出一条脏路径。

三个必须处理的坑

日期格式混乱:2025/01/05、05-01-2025、中文日期混在一起。用 errors="coerce" 会静默变空值,事件凭空消失。正确做法是多格式逐个解析,失败的单独落隔离表——这本身就是一条质量证据。

时区不一致:跨系统事件顺序错乱,会出现逆向边。全部转 UTC 再转本地,并记录原始时区。

时间戳精度不一致:有的到天、有的到秒,同一天内的事件顺序就变成随机的,变体会暴涨。


4. 四类算法怎么选

Alpha 算法:教科书经典,产出 Petri 网。不能处理循环、重复活动、噪声、不完整日志,且不保证健全。只能用来讲原理,生产别用。

Heuristics Miner:启发式网,带频次和依赖度。抗噪声强,能过滤低频路径。但不保证模型健全。日志脏的时候用。

Inductive Miner:产出过程树、Petri 网或 BPMN。保证健全,能处理循环与并发,默认首选。

Split Miner / ILP:模型更简洁、更贴近业务可读,但要给业务方评审时才值得上。

选型一句话:脏日志用 Heuristics 过滤噪声;干净日志用 Inductive Miner 拿健全模型;要给业务看再压简。

健全性到底指什么

从初始标识出发,任何可达状态都能走到终止标识,且没有死变迁、没有残留 token。

Inductive Miner 从构造上保证这一点,Alpha 不保证——这就是它"教科书但不可用"的根本原因。


5. 变体:比一张图信息量大得多

变体 = 一条具体的事件序列。 一千个案件通常只归到几十个变体上,这个分布才是业务真相。

我本机实测的结果(电商履约,1,200 个案件、同一条管道):

怎么读这件事:

主路径只占一半多,说明"标准流程"实际只覆盖了一半订单——这本身就是治理议题。

变体数从"业务上应该的 4 种"涨到几十种,其中大部分是脏数据制造的假变体:时间戳倒挂把一条路径拆成两条,关键节点缺失把五步变成四步。

金句(面试直接用):变体数暴涨,第一个要怀疑的不是业务变复杂了,而是数据质量崩了。


6. 一致性检查:四个指标,缺一个都会自欺欺人

把发现的模型和日志对比,就是一致性检查。

Fitness(拟合度):模型能不能复现日志里的行为。低了说明模型漏了真实路径(欠拟合)。只追 fitness 会得到"意大利面模型",每条路径都允许。

Precision(精确度):模型有没有允许日志里没发生过的行为。低了说明模型太宽松。只看 precision 会让模型太紧,真实新路径全判违规。

Generalization(泛化):对未见行为的容忍度。低了说明把噪声当规则。采样少时这个指标不可信。

Simplicity(简洁度):模型好不好读。业务评审时它比前三个更重要。

Token-Based Replay 的直觉

拿模型当 Petri 网,把日志里每个事件当"消耗或生产 token"的动作。走不通就要"补 token"(missing)或"剩 token"(remaining)。

打分方式是缺的越少、剩的越少,拟合越好。

一个反直觉的结论

fitness 等于 1 不代表模型对。 它只代表"模型至少包含了日志里的所有行为",可能过度宽松。

真正可信的判断是 fitness 和 precision 一起看,再人工抽查低频变体。


7. PM4Py 速查

读日志:


import pm4py
log = pm4py.read_xes("sepsis.xes.gz")
df = pm4py.format_dataframe(df, case_id="case:concept:name",
                            activity_key="concept:name",
                            timestamp_key="time:timestamp")

发现模型:


dfg, start, end = pm4py.discover_dfg(log)
tree = pm4py.discover_process_tree_inductive(log)
net, im, fm = pm4py.discover_petri_net_inductive(log)
bpmn = pm4py.discover_bpmn_inductive(log)
hnet = pm4py.discover_heuristics_net(log)

一致性检查:


fit  = pm4py.fitness_token_based_replay(log, net, im, fm)
prec = pm4py.precision_token_based_replay(log, net, im, fm)
diag = pm4py.conformance_diagnostics_token_based_replay(log, net, im, fm)

三个踩坑提醒

返回类型:fitness_token_based_replay 返回的是字典(含 average_trace_fitness、percentage_of_fitting_traces),不是 float。直接当数字用会报错。

中文乱码:部分可视化后端不支持中文活动名,导出前映射成英文。

装不上:pip install pm4py 常因为 cvxopt、graphviz 编译失败。Windows 上优先用官方 wheel;实在不行就只装到能跑 discover_dfg 的程度——面试不需要你跑通全部功能,需要你讲清概念。


8. 日志质量陷阱(这一节最值钱)

流程挖掘对数据质量极其敏感,而且它会把数据质量问题伪装成业务问题:

时序倒挂(签收早于发货)→ 图上出现 签收 → 发货 的逆向边 → 业务方以为"流程被违规操作了"。

关键节点缺失 → 出现大量短变体(只有"下单 → 打包")→ 业务方以为"业务简化了流程"。

主键重复 → 同一案件重复事件、案件数虚高 → 业务方以为"业务量涨了"。

时间戳精度到天 → 同日活动顺序随机、变体暴涨 → 业务方以为"流程很不规范"。

我实测抓到的逆向边:打包→拣货 62 次、发货→打包 34 次、拣货→下单 33 次。这些全部来自故意埋的 2.5% 时序倒挂,没有一条是真实业务。

结论:治理动作必须发生在流程发现之前。反过来说——"我能从流程图上反推出哪条数据规则失守了",这句话在面试里非常加分。


9. 你的项目怎么讲

先改一个词

对外讲"流程数据平台",不要讲"流程挖掘算法平台"。

同一件事,前者让人想到数据工程,后者让人想到算法——而你是前者。

一句话定位

面向企业内部多套业务系统,把散在各系统里的业务日志通过 ETL 统一成标准事件模型,做质量校验后支撑上层流程分析,帮业务看清流程实际怎么跑、卡在哪。

你的角色边界(必须主动说)

不是算法开发。负责四块:

  1. 数据标准——定义事件模型字段口径,和业务方确认"一个案件怎么算、哪些节点算事件"
  2. ETL 与清洗——四套系统的字段映射、编码统一、时间格式统一、缺失与异常值处理
  3. 质量校验——自动化校验脚本,跑批输出质量报告,异常回流
  4. 文档——需求规格、详细设计、数据质量规范

算法组件是别人做的,你参与的是逻辑验证:用真实日志判断模型和业务是否吻合。

主动划边界的人会被认为可信,被追问才承认的人会被认为在吹。

六环节翻译成治理语言

业务调研 → 我做的其实是数据需求分析。

事件日志标准 → 数据标准:统一案例 ID、活动名、时间戳、资源字段。

ETL 清洗 → 数据集成:字段映射、编码统一、缺失值规则、输出质量报告。

流程建模验证 → 数据应用验证:判断模型和业务是否吻合,定位变体爆炸和噪声事件。

边界与性能 → 数据质量与性能治理:大数据量下的查询性能、异常事件干扰。

文档输出 → 交付物:需求规格、详细设计、数据质量规范、指标说明。

三个必答追问

问:这个项目和数据治理什么关系? 流程分析的前提是事件数据可用。我做的就是把四套系统标准化到统一事件模型——这本身就是数据集成、数据标准、数据质量三件事。最典型的例子是:上游时间戳倒挂,会让分析结果出现"签收早于发货"的逆向路径,也就是数据质量问题伪装成业务问题。

问:你有量化收益吗? 说实话没有可对外披露的业务收益数字,这类内部平台很难归因到营收。我能给的是过程指标:接入了哪几套系统、事件模型覆盖多少类活动、质量规则命中率的变化。我更愿意讲"原来要人工翻系统日志,现在能直接看到流程路径"这种效率变化。

问:才六个月,是不是没做完? 是阶段性交付。六个月完成了多系统接入、事件模型落地和第一批分析场景,后面转入运维迭代。这类平台的价值不在一次做完,在于能持续接新系统,所以我把标准文档和质量规范写得很细。


10. 高频追问速答

有了 BI 报表,为什么还要流程挖掘? BI 回答"多少单超时",流程挖掘回答"超时发生在哪一步、走了哪条路径"。前者是结果指标,后者是过程归因。

事件日志要多大才能挖? 没绝对门槛。一千个案件能看出主路径,要谈低频异常建议一万以上。

能不能不 ETL 直接连库挖? 能,但生产不建议——业务库结构一变就直接传导到分析层,且没法做可复现的清洗版本。

流程挖掘和 BPM 的区别? BPM 是设计流程并让它按设计跑(forward);流程挖掘是从数据反推流程真实长什么样(backward)。

你们的流程模型怎么维护? 诚实的答法:多数团队做不到持续在线的一致性检查,通常是季度级重跑加关键变更触发。编"我们实时监控"很容易被追问穿。

OCEL 是什么? 对象中心事件日志,允许一个事件关联多个对象,解决订单和包裹这类多对多交织场景,传统 XES 做不到。知道到这个程度就够。

为什么用 Inductive Miner 不用 Alpha? Alpha 不处理循环和噪声,也不保证健全性。Inductive Miner 保证健全,是默认选择。

变体太多怎么处理? 先合并语义等价的活动,再按主路径归类,低频变体单独标记和业务确认。但先怀疑数据质量——我实测过去重就能让变体少九个。


11. 自测


最后一句:流程挖掘这块,你能讲出的最有价值的话不是"我会 PM4Py",

而是"我见过数据质量问题把业务流程冤枉成违规操作"。

这句话背后有 62 次逆向边撑着。

生成于 2026-11-11 · 单文件离线可读

↑