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

问题描述 投票:0回答:0

我有这样一个问题:客户手工创建订单,这可能是错误的。提交错误的订单代价高昂,这就是我们努力降低错误率的原因。

我需要检测导致错误的因素,以便创建新规则,例如产品“A”和类型“B”不能放在一起。所有解释变量都是分类的。

我有2个问题:

  1. 我采用什么方法来提取简单但有用的规则以提供给人类专家进行进一步审查?一个有用的规则应该覆盖尽可能多的错误,同时覆盖尽可能少的非错误。
  2. 如何确保考虑到变量交互?

下面是一个示例数据集和我采用的一种简单方法——找到错误比例高的变量作为规则提出。我手工创建了一个交互项(基于先验知识,但我可能遗漏了其他项)。

我也尝试过使用分类模型(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)

谢谢你的帮助!

python scikit-learn classification rules interaction
© www.soinside.com 2019 - 2024. All rights reserved.