查看原文
其他

风控规则的决策树可视化(升级版)

东哥起飞 Python数据科学
2024-08-24
上一篇我们介绍了如何通过交叉表来生成规则:基于交叉表制定风控规则全流程(Python),本篇我们来介绍一种可以生成多规则的方法,决策树。除了做模型以外,也可以用来挖掘规则,原理是一样的。
下面通过sklearn的决策树方法来实现风控规则的发现,同时分享一种可以更新决策树节点信息的方法,以辅助制定风控规则。

sklearn决策树

Sklearn中有两个决策树API方法,分别是:
  • tree.DecisionTreeClassifier:CART分类树
  • tree.DecisionTreeRegressor:CART回归树
要注意的是,Sklearn没有对ID3和C4.5算法的实现,就只有CART算法,并且是调优过的。下面是官方文档的说明。
X = df[df.columns.difference([yflag,'issue_d','address','emp_title','earliest_cr_line','title'])]
y = df[yflag]

# 划分数据集
x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

# 按照最优的方式分裂
model=tree.DecisionTreeClassifier(criterion="gini",
                                  splitter='best',
                                  random_state=42,
                                  max_depth=3,
                                  min_samples_leaf=0.05,
                                  min_samples_split=0.05)
model = model.fit(x_train,y_train)

dot_data=tree.export_graphviz(model,
                              feature_names=X.columns,
                              filled=True,
                              rounded=True,
                              out_file=None)
graph=graphviz.Source(dot_data)
graph
在信贷风控中,使用决策树生成规则后要通过命中、精准率、召回率等指标进行评估和筛选,而sklearn模型输出的树节点可视化图不包含这些信息,下面提供一种优化方法,可以输出我们想要的结果。

可视化更新

该方法仍然使用export_graphviz可视化方法,但会在此基础上做一些内容的优化调整。
dot_data = tree.export_graphviz(tree_model)
以上代码返回的dot_data是一个长字符串,如下示例,该字符串包含了树分裂的所有分裂点和叶子节点信息。
因此,我们通过正则表达式的方法对该字符串进行信息的替换和更新,比如下面循环对每个节点更新recall召回率指标。
 item = re.sub(r'>,''<br/>recall_rate = ' + str(round(recall_rate * 1002)) + '%'+'>, ', item)
命中率,精准率等其他指标也是同样的操作。同时我们也对每个节点更新了颜色的变化,如果相关指标达到要求就置为橘色,这样就可以轻松地看出哪些节点区分效果更好。
if bad_rate >= rule_criterion['bad_rate_criterion'and reject_rate >= rule_criterion['reject_rate_criterion']:
    item = re.sub(r'(?<=fillcolor=").*?(?=")''orange', item)
最终的效果是,将决策树节点信息进行全部更新,输出一个新的决策树。这里的分裂方式和数量都没有变化,只是可视化显示的信息有变化。
可以看到,新的可视化结果,每个节点都有精准率、召回率、命中率的指标了。
以上内容是《100天风控专家》规则篇的内容之一,本专栏共更新100期以上,涵盖业务、产品、策略、模型、数据、系统等6大核心模块,永久回看,课件+数据+代码均支持下载学习。

感兴趣的朋友可以向我咨询,同时也有免费的风控交流群,分享风控行业信息、讨论策略模型方法。

长按识别,备注:风控
👇点击原文了解风控课程
继续滑动看下一个
Python数据科学
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存