如何从人工订单错误检测分类问题中提取实用简单规则?
业务场景与技术问题
业务背景
客户手动创建订单时易出现错误,错误订单提交成本高昂,需降低错误率。目标是检测错误诱因,生成类似「产品A与类型B不可搭配」的规则,所有解释变量均为分类变量。
核心技术问题
- 采用何种方法可提取简单且实用的规则供人类专家审核?实用规则需满足:覆盖尽可能多的错误,同时覆盖尽可能少的非错误。
- 如何确保变量交互作用被纳入考量?
现有尝试与痛点
- 简单方法:基于先验知识手动构建交互项,找出错误占比高的变量组作为候选规则,但可能遗漏其他交互项。
- 尝试分类模型(LASSO、决策树、随机森林),但遇到两个问题:
- 高维性(尤其是生成大量交互项时);
- 难以提取简单规则,即使正则化后仍使用大量系数。
示例数据集与代码
import pandas as pd # 创建任务用示例数据集 df = pd.DataFrame(data={'error':[0,1,0,0,0,0,0,1,1,1], 'product':[1,2,1,2,2,3,4,2,2,2], 'type':[1,1,2,3,3,1,2,1,4,4], 'discount_level':[5,3,3,4,1,2,2,1,4,5], 'extra1':[1,1,1,2,2,2,3,3,3,3], 'extra2':[1,2,3,1,2,3,1,2,3,1], 'extra3':[6,6,9,9,8,8,7,7,6,6] }) # 基于先验知识构建变量交互项 df['product_type'] = df['product'].astype(str) + '_' + df['type'].astype(str) X = df.drop('error', axis=1) # 找出错误占比高的变量组 groups_expl = pd.DataFrame() for col in X.columns: groups = df.groupby(col).agg(count_all=('error', 'count'), count_error=('error', 'sum')) groups['portion_error'] = groups['count_error'] / groups['count_all'] groups['column'] = col # 保存错误占比超过0.8的组 groups_expl = pd.concat([groups_expl, groups.loc[groups['portion_error']>0.8, :]], axis=0) groups_expl['col_val'] = groups_expl.index print(groups_expl)
解决方案建议
问题1:提取简单实用规则的方法
1. 关联规则挖掘(Apriori/FP-Growth)
针对分类变量场景,关联规则挖掘能直接找出错误样本里高频出现的变量组合,通过两个核心指标筛选规则:
- 置信度:规则覆盖的错误数/规则覆盖的总样本数,确保规则覆盖的样本中错误占比高(减少误判非错误);
- 支持度:规则覆盖的错误数/总错误数,确保规则覆盖足够多的错误样本。
可设置阈值(比如置信度>0.8、支持度>0.1)过滤候选规则,再交给专家审核。
2. 浅决策树规则提取
用限制深度的单棵决策树(深度设为2-3)代替集成模型,决策树的每个分支天然对应一条可读规则。例如深度为2的树会生成「product=2 AND type=1 → error=1」这类规则:
- 限制树深度避免规则过于复杂;
- 用基尼系数或信息增益选择分裂节点,优先区分错误/非错误能力强的变量组合;
- 生成规则后,计算每条规则的错误覆盖率和精确率,筛选符合要求的规则。
3. 卡方检验筛选变量组合
对所有可能的二元变量组合(如product+type、product+discount_level)做卡方检验,找出与error显著相关的组合,再计算该组合下各取值的错误占比,筛选高占比组合作为规则:
- 先通过卡方检验过滤无意义组合,减少候选数量;
- 适合变量数不是特别多的场景,避免高维爆炸。
问题2:纳入变量交互作用的方法
1. 自动生成低阶交互项(可控高维)
无需手动构建,自动生成所有二元变量组合,但通过以下方式控制高维性:
- 先做单变量筛选:去掉错误占比接近整体错误率的变量(无区分度);
- 对生成的交互项,用卡方检验或互信息过滤掉与error无关的组合,只保留显著相关的交互项进入后续规则挖掘。
2. 规则类算法自动发现交互
关联规则挖掘和浅决策树本身就能自动捕捉变量交互:
- 关联规则会直接输出多变量组合的规则(如
product=2 AND type=4 → error=1); - 浅决策树的分裂过程就是寻找最优交互的过程,比如第一层分裂用product,第二层用type,自然体现两者的交互关系。
3. 基于业务约束的交互项生成
结合业务先验知识,只生成有业务意义的交互项(比如产品+类型、产品+折扣等级,而非extra1+extra3这类无业务关联的组合),既减少高维问题,又确保交互项符合业务逻辑,后续规则更容易被专家接受。
实践落地建议
- 先做数据预处理:对每个分类变量,合并低频取值(比如出现次数<5的类别),减少变量基数,降低高维压力;
- 优先用关联规则挖掘或浅决策树生成候选规则,这两种方法生成的规则天然可读;
- 用错误覆盖率(规则覆盖的错误数/总错误数)和精确率(规则覆盖的错误数/规则覆盖的总样本数)作为核心筛选指标,比如要求精确率>0.8、覆盖率>0.1;
- 生成规则后,让业务专家从合理性角度二次筛选,去掉统计上显著但业务无意义的规则。
内容的提问来源于stack exchange,提问作者Dudelstein
相关产品推荐
相关产品推荐

