python 如何从这个分类问题中提取有意义的简单规则?

gopyfrb3  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(91)

我有这样的问题:客户手工创建订单,这可能是错误的。提交错误的订单代价高昂,这就是为什么我们要努力降低错误率。
我需要检测导致错误的因素,以便创建新规则,例如产品“A”和类型“B”不能放在一起。所有解释变量都是分类变量。
我有两个问题:
1.我应该采取什么方法来提取简单但有用的规则,以给予给人类Maven进行进一步的审查?一个有用的规则应该涵盖尽可能多的错误,同时涵盖尽可能少的非错误。
1.如何确保考虑变量交互作用?
下面是一个样本数据集和我采用的一个简单方法--找到错误比例高的变量作为规则。我手工创建了一个交互项(基于先验知识,但可能遗漏了其他项)。
我也尝试过使用分类模型(LASSO、决策树、RF),但我遇到了一个问题:1.高维(特别是当包括许多交互时),2.提取简单规则,因为模型即使在正则化的情况下也使用许多系数。

import pandas as pd

# Create sample dataset for task
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]
                        })

# Variable interaction based on prior knowledge
groups = df['product_type'] = df['product'].astype(str) + '_' + df['type'].astype(str)
X = df.drop('error', axis=1)

# Find groups with high portion of errors
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

    # Save groups with high portion of errors
    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)

感谢您的帮助!

wtzytmuj

wtzytmuj1#

我应该采取什么方法来提取简单但有用的规则,以给予给人类Maven进行进一步的审查?
您可以尝试浅装袋模型。例如,XGBClassifier(n_estimators = 100, max_depth = 2)
其思想是,每个集合元素代表一些对应于高风险的特征组合。
如何确保考虑变量交互作用?
决策树模型易于可视化和解释,并且自动进行特征交互。
想象一下下面的拆分逻辑:

if product == 1:
  if extra == 3:
    return "high risk"
  else:
    return "no risk"
else
  return "no risk"

如您所见,此决策树仅在product == 1 and extra == 3时对总风险评分有贡献,这是一个功能交互。

相关问题