深夜的小镇上,连环盗窃案让居民人心惶惶。警探老周翻出整整 30 天的目击记录,每天夜里都有人看到夜行者在不同地标之间移动:钟楼、酒馆、钱庄、马厩、井台。单看某个地点,钟楼和酒馆都出现过很多次;但老周把记录按时间顺序排成一条条“行动轨迹”后,发现了一个更微妙的规律——夜行者每次都是先摸到钟楼,再溜进酒馆,随后钱庄就会失窃。这种“一连串地点按固定顺序反复出现”的现象,就是序列模式挖掘要捕捉的东西。 如果把每个地点当作一个事件,把一晚的移动路径当作一条序列,那么老周就是在堆积如山的序列数据库中寻找频繁出现的“子序列模式”。不同于只看商品共现的关联规则挖掘,序列模式挖掘额外尊重时间先后:先钟楼再酒馆,和先酒馆再钟楼,是完全不同的两种作案习惯。GSP 与 PrefixSpan 就是两位风格迥异的侦探助手,一个靠逐层枚举候选,一个靠前缀投影递归,最终都能从数据里找出那些“习惯性动作”。

岗位关联

对 AI 从业者而言,序列模式挖掘是从点击流、交易流水、设备日志等有序数据中自动发现行为规律的核心基本功,也是推荐、风控、用户增长等场景中工程师的必备技能。

目录
  1. 可视化演示
  2. 序列模式:侦探的行动轨迹
  3. 序列数据库与支持度:卷宗里的概率
  4. GSP 算法:逐层候选的审讯法
  5. PrefixSpan 算法:前缀投影追查法
  6. 时间约束:步伐里的窗口规则
  7. 应用场景:从侦察卷宗到业务现场
  8. 算法对比与选型:挑选合适的老侦探
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

序列模式:侦探的行动轨迹

老周把 30 天的目击报告摊在桌上,每条记录都是一串地名:钟楼、酒馆、钱庄、马厩。他起初只统计每个地点单独出现的次数,但钟楼出现得频繁,酒馆也出现得频繁,两者都解释不了钱庄为何每次都在特定顺序后失窃。直到他把记录当作“一晚上走过的路线”来看,规律才浮出水面:夜行者并不是随机游走,而是反复上演同一套行动剧本。这套剧本的关键不是单个地点,而是地点之间的先后关系。

这里的“行动剧本”,就是计算机领域的序列(sequence)。序列由事件(item)按时间顺序排列而成,比如 <钟楼, 酒馆, 钱庄>。序列模式挖掘的任务,就是从大量序列组成的数据库里,找出反复出现的子序列(subsequence)。子序列不要求事件在原序列中连续相邻,只要求相对顺序一致:<钟楼, 钱庄> 可以对应真实轨迹 <钟楼, 酒馆, 钱庄>,中间多了一个酒馆,但仍然是一个合格的子序列。一个事件内部还可以同时发生多个动作,例如“买啤酒+买尿布”作为一个元素,内部项之间没有先后,只有元素之间才有先后。

对老周来说,子序列就是“作案习惯的骨架”:他想知道夜行者是否习惯先经过钟楼再摸进钱庄,至于中间是否绕路去酒馆、马厩,都不影响这个骨架成立。序列模式挖掘本质上,就是在无数条路线记录中自动找出这类骨架,并且判断哪些骨架真的稳定。

序列数据库与支持度:卷宗里的概率

老周的桌上有 100 条行动路线,每条路线都来自一位巡夜人的记录,构成一个“卷宗集合”。他现在要问:<钟楼, 酒馆, 钱庄> 这套顺序到底有多常见?如果只是偶尔出现,那可能只是巧合;如果 100 条里出现 60 次,那就是习惯。这里“路线集合”就是序列数据库 D,其中每一条完整记录叫一条序列。

为了量化“多常见”,需要支持度(support)这个概念,它表示一个候选模式 α 在序列数据库中被多少条序列包含。

老周把阈值定为 0.3:只有超过三成路线都出现过的行动顺序,才值得继续调查。低于阈值的路线组合,他会直接从嫌疑名单里划掉。这个“划掉”的动作看着简单,却是整个挖掘算法效率的关键——频繁的才有资格继续生长,冷门的直接淘汰。

support(α)=∣{s∈D:α⪯s}∣∣D∣\displaystyle \text{support}(\alpha)=\frac{|\{s\in D:\alpha\preceq s\}|}{|D|}
通俗说明:支持度就是“包含该顺序的路线条数 ÷ 全部路线条数”。老周看 100 条路线里有多少条完整走完了钟楼→酒馆→钱庄,再除以 100,得到这个作案手法的稳定度。
  1. 分母代表总序列数先把整个数据库铺开看,数一数一共有多少条完整序列,这就是比例的分母,也是所有路线记录的基数。
    ∣D∣|D|
  2. 分子代表命中序列数再数一数其中有多少条序列能够按原顺序找到候选模式 α 的全部事件,这个集合用事件序列与模式之间的偏序关系 $\alpha\preceq s$ 表示,只关心“至少完整包含一次”。
    {s∈D:α⪯s}\{s\in D:\alpha\preceq s\}
  3. 比值判定频繁性把分子除以分母,得到该模式在数据库中的出现密度。若这个值不小于预设的最小支持度阈值,就把它判定为频繁序列,进入下一轮挖掘。
    support(α)≥min_sup\text{support}(\alpha)\ge \text{min\_sup}

GSP 算法:逐层候选的审讯法

老周的第一套办法很实在:既然要确认长路线是否常见,那就从短路线开始试错。他先在 100 条路线里统计所有“两步路线”的频率,比如钟楼→酒馆、酒馆→钱庄、钟楼→钱庄,留下超过阈值的;然后把这些幸存路线分别延长一步,变成“三步路线”,再重新去路线堆里核验;如此反复,直到无法再延长。这个方法就像办案人员逐层审讯嫌疑人:先锁定一批可疑的两步组合,再追问第三步去向。

这就是 GSP(Generalized Sequential Pattern)算法的基本思路。它把候选模式按长度分层:首先由所有单事件生成 1-序列,扫描数据库得到频繁 1-序列;再用频繁 k-序列通过连接操作生成 k+1-序列候选,逐层向下推进。每一层新候选都必须重新扫描整个数据库统计支持度,所以 GSP 的扫描次数与模式长度成正比。

GSP 真正聪明的地方在于 Apriori 剪枝,也叫反单调性:一个序列如果不是频繁的,那么任何包含它的更长序列也一定不频繁。因为支持度只会随着模式变长而下降——老周如果发现“钟楼→钱庄”只在 10 条路线里出现,那么“钟楼→酒馆→钱庄”最多也只能在这 10 条路线里出现,绝不可能更多。于是,每次生成候选时都可以提前砍掉大量不可能频繁的长路线,避免无意义的扫描。

老周把这套方法称为“地毯式搜查”:每一步都老老实实把全城卷宗翻一遍,但每翻一轮,嫌疑路线都会少一大半。GSP 的优势是思想简单、实现直接,适合序列长度不长、模式相对稀疏的数据;代价则是当候选路线很多、序列很长时,反复扫描全库会变得非常耗时。

PrefixSpan 算法:前缀投影追查法

卷宗越堆越高,老周决定换个策略。他发现每次为了确认一条长路线,都要把整摞卷宗重头翻一遍,太浪费了。于是他想:既然已经锁定了“钟楼→酒馆”这个前缀,那之后第三步只会出现在“钟楼→酒馆”之后的记录片段里,为什么不先把这些后续片段单独抽出来,只看这一小摞?

这正是 PrefixSpan(Prefix-projected Sequential Pattern mining)的核心思想。它不再像 GSP 那样先生成大量候选再逐一验证,而是固定一个前缀,把所有包含该前缀的序列截取成“后缀片段”,构成一个更小的数据库,在这个小数据库里继续寻找能接在前缀后面的频繁事件。这个被截取出来的后缀片段集合,就叫投影数据库(projected database)。

假设老周已经确认前缀 α 频繁,现在想扩展一个新事件 β,把 α 和 β 拼成新前缀 α′。那么 α′ 的投影数据库,等价于先在原库上按 α 投影,再在这个投影库中按 β 截取后续部分。这个递归关系可以写成:

老周沿着“钟楼”出发,把所有钟楼之后的内容抽出来;再沿着“钟楼→酒馆”出发,把酒馆之后的内容抽出来;每深入一层,卷宗就越薄,调查范围就越聚焦。PrefixSpan 不用像 GSP 那样枚举海量候选,而是沿着前缀不断生长。代价是,每个频繁前缀都要额外维护一份投影数据库,内存开销会相应增加。

D∣α′=(D∣α)∣β\displaystyle D|_{\alpha'} = \bigl(D|_{\alpha}\bigr)\bigl|_{\beta}
通俗说明:左边是“钟楼→酒馆→钱庄”的后续路线;右边是先把所有经过钟楼、酒馆的路线挑出来,再从这些路线里进一步挑出钱庄之后的内容。两步投影拼起来,等于一次组合投影。
  1. 左侧组合前缀把当前前缀 α 和需要尝试的新事件 β 拼接成一个更长的前缀 α′,α′ 的投影数据库,是后续挖掘的“工作底稿”。
    D∣α′D|_{\alpha'}
  2. 右侧内层投影先把原数据库 D 按照前缀 α 做投影,也就是只保留所有能完整看到 α 的序列,并把 α 之后的内容留下来,构成一个后缀子库。
    D∣αD|_{\alpha}
  3. 右侧外层投影在这个已经缩小的后缀子库上,再按照 β 的位置进一步截取 β 之后的内容,得到最终的子数据库;两层投影与一次组合投影结果相同,因此可以直接递归调用。
    (D∣α)∣β\bigl(D|_{\alpha}\bigr)\bigl|_{\beta}

时间约束:步伐里的窗口规则

老周又发现一个细节:有些路线虽然顺序对得上,但夜行者从钟楼到酒馆足足隔了三个小时,跟“踩点后立刻销赃”的手法令人生疑。反过来,如果钟楼和酒馆几乎同一时刻出现,也可能是同一事件被重复记录。于是他给路线分析加上了两条纪律:第一步到第二步之间不能超过 28 分钟,也不能少于 8 分钟。

这就是序列模式挖掘中的时间约束。仅有先后顺序还不够,两个事件之间的跨度、间隔,往往才是业务上真正有意义的信号。最大间隔(max gap)约束限制了模式中相邻两个事件的最大时间跨度,避免把相隔太久的偶然事件强行串成模式;最小间隔(min gap)约束则规定相邻事件至少间隔多久,防止同一时刻发生的并列事件被误读为先后关系。

滑动窗口(sliding window)则是另一类常用约束:它把时间轴切成一个个固定长度的窗口,在窗口内允许事件顺序略有松动,或者把窗口内的事件当作一个整体来计算支持度。比如老周把一晚按 30 分钟切窗,只要钟楼和酒馆落在同一个窗口里,就算一次有效匹配,哪怕中间隔了一两个次要地点。

加了时间约束后,那条“钟楼→酒馆→钱庄”才真正从“顺序碰巧对”变成“节奏紧凑的作案流程”。在实际数据中,时间约束能显著降低无意义的偶然共现,让挖出的模式更贴近真实业务因果。

应用场景:从侦察卷宗到业务现场

老周的方法很快被商业界请去当了顾问。大型超市的运营者发现,只看“哪些商品经常一起买”还不够,顾客的真实决策是一个动作接一个动作的过程:从货架 A 走到货架 B,再到收银台。于是他们把购物路径、浏览点击按时序整理成序列数据库,用序列模式挖掘找出高转化路径。比如发现频繁子序列 <搜索冰箱 → 对比价格 → 加入购物车>,就把它作为推荐策略的触发条件。这对应“购物路径分析”场景。

手机 App 产品经理也遇到了类似问题:用户是否激活,往往不取决于“打开了哪几个页面”,而取决于“先打开哪个、再打开哪个”。把用户首次会话的事件流挖成序列后,团队发现 <导入数据 → 创建报表 → 邀请同事> 是留存用户的频繁子序列,于是把新手引导流程改造成这条路径,让新用户顺着高留存用户的习惯走。这就是“用户行为建模”。

工业领域同样如此。风力发电机的 SCADA 日志会记录一条条状态事件:叶片转速波动、齿轮箱温度升高、报警触发。序列模式挖掘能从海量日志中自动发现故障前的习惯性事件顺序,比如频繁子序列 <转速异常 → 温度升高 → 报警>,实现提前预警。工业 AI 工程师把这些模式嵌入监控系统,替代原来靠老师傅经验的规则库,这就是“工业应用”。

算法对比与选型:挑选合适的老侦探

老周手下的 GSP 和 PrefixSpan 两位侦探各有脾气。GSP 是地毯式搜查型:它逐层生成候选,每层都要扫描整个数据库,候选数量可能指数膨胀,但思路直白,对短序列和稀疏数据表现稳定。PrefixSpan 是目标追踪型:它通过前缀投影不断缩小卷宗范围,避免了大批候选的生成,但每一层投影都要额外保存后缀子库,内存消耗更高。

选择建议可以概括为三条:第一,如果序列库规模不大、模式长度较短,GSP 的实现简单、迭代清晰,是优先选择。第二,如果序列很长、模式稠密,PrefixSpan 的投影机制能大幅减少无效扫描,通常更划算。第三,如果硬件内存紧张且数据稀疏,GSP 类广度优先方法更省内存;如果希望单条长路径挖掘得更深,PrefixSpan 的深度优先递归更有优势。此外,真实工程中常常对两种算法做时间约束剪枝和抽样预估,再决定最终方案。

老周最后在总结报告里写道:没有绝对最好的侦探,只有最合适对手的办案方法。扫描次数少不代表零代价,内存换时间也不一定永远划算;把数据特征、支持度阈值和时间约束放在一起权衡,才能选出真正高效的模式挖掘方案。

AI 应用场景

电商购物路径分析

阶段:数据挖掘 / 行为分析

解决的问题:传统的转化率分析只统计入口和出口,忽略了用户“先做什么、后做什么”。序列模式挖掘能从交易日志中发现频繁出现的购物顺序,例如“搜索→比较→加入购物车→支付”,也能定位高流失路径“搜索→详情→立即跳出”,从而指导推荐位与营销策略。

具体案例:某电商平台对 30 天用户行为序列做 GSP 挖掘,发现“进入秒杀页→收藏商品→次日下单”是高频复购路径,于是给这类用户自动推送专属优惠券,订单转化率提升了 12%。

用户点击流行为建模

阶段:特征工程 / 用户增长

解决的问题:用户在 App 内的操作顺序往往比操作次数更能反映意图,但人工标注步骤成本极高。序列模式挖掘可以自动从点击流日志中提取“高留存用户的习惯性动作序列”,为新用户引导和功能推荐提供依据。

具体案例:某 SaaS 产品用 PrefixSpan 挖掘新用户首次会话点击序列,发现“导入数据→创建报表→邀请同事”是留存用户的频繁子序列,产品团队据此重排新手任务,最终 7 日留存率提高了 8 个百分点。

工业设备日志故障预测

阶段:异常检测 / 预测性维护

解决的问题:工业设备日志是一条条时间顺序事件流,故障发生前往往有固定的“前兆事件顺序”。传统人工规则无法覆盖所有故障组合,序列模式挖掘能自动发现频繁的状态迁移序列,实现提前预警。

具体案例:风电场的 SCADA 日志中,算法挖掘出“叶片转速波动→齿轮箱温度上升→振动报警”的频繁子序列,系统在真正故障前约 2 小时发出维护提醒,减少了非计划停机损失。

Python 演示

python52 行
# -*- coding: utf-8 -*-"""简化版 GSP:逐层生成候选序列并统计支持度。"""  def is_subsequence(sub, seq):    """判断 sub 是否为 seq 的子序列(保持相对顺序)。"""    it = iter(seq)    return all(x in it for x in sub)  def build_candidates(frequent, sequences):    """由长度为 k 的频繁序列扩展单个事件,生成长度为 k+1 的候选。"""    items = sorted({item for seq in sequences for item in seq})    cands = set()    for seq in frequent:        for item in items:            cands.add(seq + (item,))    return cands  def gsp(sequences, min_sup):    """GSP:从 1-序列开始逐层扫描数据库。"""    items = sorted({item for seq in sequences for item in seq})    results = []    candidates = {(item,) for item in items}    max_len = max(len(seq) for seq in sequences)     while candidates:        frequent = []        for cand in sorted(candidates):            sup = sum(1 for seq in sequences if is_subsequence(cand, seq))            if sup >= min_sup:                frequent.append(cand)        if not frequent:            break        results.extend(frequent)        candidates = build_candidates(frequent, sequences)        if len(frequent[0]) + 1 > max_len:            break    results.sort(key=lambda x: (len(x), x))    return results  if __name__ == "__main__":    db = [        ['A', 'B', 'C', 'D'],        ['B', 'C', 'E'],        ['A', 'B', 'D', 'E'],        ['A', 'C', 'D', 'E'],    ]    for pattern in gsp(db, min_sup=2):        print('<' + ','.join(pattern) + '>')
目的:实现一个可运行的简化 GSP,逐层生成候选且扫描数据库统计支持度,输出所有频繁子序列。
  1. def is_subsequence(sub, seq):判断候选模式是否是某条序列的子序列,这里用迭代器的“剩余部分继续查找”保证顺序。
  2. return all(x in it for x in sub)对模式里的每个事件,在序列中按顺序寻找,一旦全部找到就返回真。
  3. items = sorted({item for seq in sequences for item in seq})收集数据库中出现的所有不同事件,作为候选扩展的单元素集合。
  4. sup = sum(1 for seq in sequences if is_subsequence(cand, seq))逐条统计包含该候选模式的序列数,得到支持度。
  5. frequent.append(cand)只有当支持度不小于阈值时,才把候选模式保留为频繁序列。
  6. candidates = build_candidates(frequent, sequences)由本层频繁序列扩展单个事件,构造下一层更长的候选序列集合。
  7. if len(frequent[0]) + 1 > max_len:当下一层候选长度已经超过数据库中最长序列长度,再验证不可能有意义,直接结束循环。

常见误区

误区关联规则会统计“买啤酒→买尿布”,序列模式也统计“先买啤酒再买尿布”,感觉只是数据多了个时间字段,本质还是找频繁项集。

正解两者的核心差异在于是否尊重顺序。关联规则把同一时刻的行为看成无序项集,A→B 和 B→A 没有区别;序列模式把行为看成有序事件流,<A, B> 与 <B, A> 是两个完全不同的模式。老周眼里,“先到钟楼再去钱庄”和“先去钱庄再到钟楼”是两种截然不同的作案路线。

为何常见:两个概念都讲支持度、置信度,输出也都是“规则列表”,初学者很容易只看到外表相似,忽略最有价值的顺序维度。

误区同一晚夜行者在钟楼和钱庄之间往返了三次,那么这次记录包含 `<钟楼, 钱庄>` 三次,支持度应该算 3。

正解标准 GSP/PrefixSpan 的支持度按“序列数”统计,一条序列中模式无论出现几次,都只计 1 次。老周看的是“有多少条路线包含这个顺序”,而不是“一条路线上重复了几次”。这与关联规则中“一个购物篮里商品出现一次也算一项”的思路类似。

为何常见:日常语言里“出现次数”和“支持的记录条数”容易混为一谈,而数学定义明确是集合基数,不是重复计数。

误区剪枝能把不频繁的候选全部砍掉,那 GSP 应该很快,扫一遍数据库就能得出所有频繁序列。

正解Apriori 剪枝减少的是候选数量,但没有减少对候选的验证方式。GSP 每一层候选都要重新扫描整个数据库来统计支持度,模式越长,扫描轮数越多。老周每把路线延长一步,就要把卷宗从头翻一遍,剪枝只是保证翻卷宗次数尽可能少,并不能让他只翻一遍。

为何常见:大家把“剪枝省掉大量计算”误解成“省掉扫描”,其实剪枝发生在候选生成阶段,验证阶段依然需要全库访问。

误区PrefixSpan 号称 candidate-free,不需要候选集,那它应该既快又省内存,全面优于 GSP。

正解PrefixSpan 不需要全局候选集,但每个频繁前缀都要构造并保存一份投影数据库;前缀越多,投影库的存储开销也越大。它本质是用内存换扫描次数。对于长序列、稠密数据有优势,但在内存紧张的场景下未必比 GSP 更合适。

为何常见:“免候选”的口号给人一种零成本的印象,忘了投影本身也有存储代价。

误区只要 `A` 在 `B` 之前出现,不管隔了 1 分钟还是 3 小时,都应该算同一个序列模式。

正解时间约束在真实业务里非常关键。最大间隔限制相邻两事件不能相距太久,最小间隔防止同刻并列事件被当先后,滑动窗口则允许窗口内小幅顺序变化。不加约束,会挖出一堆“看似有序、实则无关”的长间隔模式。

为何常见:初学阶段只关注“保序”,忽略了时间窗口,导致模型输出大量无法解释的弱连接。

面试题

Q1. 序列模式挖掘与关联规则挖掘最本质的区别是什么?

单选题 · easy

  • A.统计商品的频次
  • B.考虑事件的先后顺序← 正确答案
  • C.使用聚类分组手段
  • D.不需要最小支持度

答案:B。序列模式挖掘的核心是顺序,<A, B> 与 <B, A> 要区分对待;关联规则把同一时刻的行为看作无序项集,不关心先后。因此 B 正确,A 是两者的共同基础,C 和 D 与主题无关。

Q2. 下列哪类数据最适合作为序列模式挖掘的输入?

单选题 · easy

  • A.一次购物篮商品清单
  • B.用户一周内的访问路径← 正确答案
  • C.用户性别年龄统计表
  • D.商品真实价格表

答案:B。访问路径天然具有时间先后,是标准序列数据。一次购物篮清单只反映共现,没有顺序,应交给关联规则;性别年龄表和价格表是静态属性,更不是序列。

Q3. 某候选模式在 20 条序列中出现于 5 条,它的支持度是多少?

单选题 · easy

  • A.0.05
  • B.0.25← 正确答案
  • C.0.50
  • D.5.00

答案:B。支持度等于包含模式的序列数除以总序列数,即 5 ÷ 20 = 0.25,对应 B。A 是 5 除以 100 的结果,C 是 10/20,D 是把出现条数直接当支持度,均不正确。

Q4. GSP 算法利用什么性质在逐层搜索时剪枝?

单选题 · mid

  • A.反单调性← 正确答案
  • B.对称性
  • C.完备性
  • D.随机性

答案:A。若子序列不频繁,则包含它的任何更长序列也一定不频繁,这就是 Apriori 的反单调性。它保证剪枝不会漏掉潜在频繁模式。对称性、完备性、随机性都不是 GSP 剪枝的依据。

Q5. PrefixSpan 中的“投影数据库”指的是什么?

单选题 · mid

  • A.按前缀截取后缀后的子库← 正确答案
  • B.原数据库的水平切割副本
  • C.数据库的加密压缩版本
  • D.全部候选序列的集合

答案:A。投影数据库是只保留包含指定前缀的序列,并截取前缀之后部分形成的子库。A 准确描述了这一过程。B 的“水平切割副本”和 C 的“加密压缩”都不是投影,D 是候选集而非投影库。

Q6. 最大间隔约束限制的是序列模式中的什么?

单选题 · mid

  • A.相邻两事件的最大跨度← 正确答案
  • B.数据库记录的总时长
  • C.支持度阈值的高低
  • D.序列模式的最大长度

答案:A。最大间隔约束用于避免把相隔太久的事件强行连成一个模式,限制的是相邻两事件的跨度,A 正确。数据库总时长、支持度阈值和模式最大长度都不是最大间隔约束的对象。

Q7. 数据库 D 为 [ABC, BAC, CBA],最小支持度为 2,下列哪个模式不是频繁序列?

单选题 · extreme

  • A.<B,A>
  • B.<C,A>← 正确答案
  • C.<B,C>
  • D.<A,C>

答案:B。逐条检验支持度:<B,A> 在 BAC、CBA 中各出现一次,支持度 2;<C,A> 只在 CBA 中出现,支持度 1,因此不频繁;<B,C> 在 ABC、BAC 中出现,支持度 2;<A,C> 也在 ABC、BAC 中出现,支持度 2。所以只有 B 不是频繁序列。

Q8. 时间约束通常包括下列哪些类型?

多选题 · mid

  • A.最大间隔← 正确答案
  • B.最小间隔← 正确答案
  • C.滑动窗口← 正确答案
  • D.支持度阈值

答案:ABC。最大间隔限制相邻事件的最远跨度,最小间隔限制最近跨度,滑动窗口以固定时间窗为单位聚合或计数,这三者都是时间约束。支持度阈值属于频率约束,不是时间维度。

Q9. 序列模式挖掘在工业界常被用于哪些任务?

多选题 · mid

  • A.购物路径分析← 正确答案
  • B.用户点击流建模← 正确答案
  • C.设备故障日志挖掘← 正确答案
  • D.图像风格迁移

答案:ABC。购物路径、点击流和设备日志都是有序事件流,适合用序列模式挖掘发现频繁行为或故障前兆。图像风格迁移属于图像生成任务,与序列模式无关。

Q10. 关于 GSP 与 PrefixSpan,下列说法正确的是?

多选题 · hard

  • A.GSP 先生成候选再剪枝验证← 正确答案
  • B.PrefixSpan 用投影库递归挖掘← 正确答案
  • C.GSP 每一层都要扫描数据库← 正确答案
  • D.PrefixSpan 依赖穷举全部候选

答案:ABC。GSP 是候选生成与验证的逐层扫描方法,A、C 正确;PrefixSpan 通过前缀投影递归缩小数据库,不依赖全局穷举候选,B 正确、D 错误。这也是两者最核心的差异。