PRIM(Patient Rule Induction Method)规则发现算法在风控中的应用

2023-10-20 19:40

本文主要是介绍PRIM(Patient Rule Induction Method)规则发现算法在风控中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在风控策略迭代过程中,我们通常需要从高维变量中搜索组合得到规则集(RuleSet),但是单纯依靠画格子、CART决策树等常规手段具有很高的挑战。此时,我们需要一种更为智能、更自动化的方法,从大量变量(高维空间)里找到最优规则集,这就是规则发现。
本文主要介绍一种规则发现算法,即病人规则归纳方法(Patient Rule Induction Method -PRIM),并紧密结合信贷风控业务知识,详细介绍理论和实践应用。

Part 1. 规则发现的概念

很多机器学习二分类问题抽象为 f(y|x) ,根据输入特征空间 X,预测个体发生目标事件的概率 P(y=1|X) 。然而,很多时候我们的目的不在于训练一个全局模型,而更为关注 y 值浓度很高(或很低)的某个局部空间。

现有 N个样本 {xi,y}^N ,我们希望从 M 维变量空间寻找一个子空间,使得这个子空间的目标变量浓度尽可能高。这个问题被称为子群识别(Subgroup Identification)。

为更容易理解子群识别的概念,我们以削苹果 为例。如图1所示,我们在苹果这个三维空间里横竖切几刀,找出了目标区域(芯),予以剔除(Peeling)。

而随着规则可解释性越来越受到大家关注,我们迫切需要找寻一些搜索过程透明、易于理解的智能算法来帮助我们进行规则发现。
在这里插入图片描述
为便于后文理解,我们定义如下概念:

#支持度(support):子群样本量相对于总体样本量的比例,反映规则命中率(hit rate)。

#正样本浓度:子群里正样本量相对于子群样本量的比例,反映坏人浓度(bad rate)。

#提升度(lift):子群正样本浓度相对于总体正样本浓度的提升,反映规则的提升杠杆。通常越大越好。

Part 2. 单维变量空间规则发现:巧用分位数

在贷前授信风险策略中,一般都会设置内部准入规则、反欺诈规则、外部准入规则、定额定价等环节。从更为抽象的角度,我们可将风控规则分为两种:

1、硬规则(hard rule):严拒规则,一般阈值固定下来后不再改变。典型的规则,包括严重多头借贷、高危设备行为等。

2、软规则(soft rule):信用模型分可归类于此。为控制通过率稳定,我们一般可调整模型分数的阈值cutoff。

那么,我们如何快速发现一些硬规则呢?假设变量具有一定的排序性,那么通常在两端的人群是目标群体。暂不考虑某些变量呈现两端风险低,而中间取值段风险高的情况,我们将实际场景简化为两种情况:

1、取值越小,坏人浓度越高
2、取值越大,坏人浓度越高

如图2所示, seg1 和 seg2 是潜在的目标子群体,分别对应分位数 x1-α 和 xα 。目标群体的规模可通过分位数 α 进行控制。
在这里插入图片描述
我们将目标子群体圈定出来,并评估坏人浓度,以及相对于总体的提升度(Lift)等指标。
在这里插入图片描述
我们可以暴力枚举出所有的变量规则,并结合业务含义筛选出满足要求的规则。对于排黑硬规规则的制定,这是一种颇为有效的方法。

rule_discover(input_df=df, var='score', target='is_bad')

在这里插入图片描述
在图3中,我们同样需要兼顾hit_rate和hit_bad_rate的关系,当hit_size过小时,计算hit_bad_rate容易发生波动,从而导致结果不可靠。

实现图3统计结果的Python代码如下所示:

def rule_evaluate(selected_df, total_df, target):"""规则评估"""# 命中规则的子群体指标统计hit_size = selected_df.shape[0]    hit_bad_size = selected_df[target].sum()hit_bad_rate = selected_df[target].mean()# 总体指标统计total_size = total_df.shape[0] total_bad_size = total_df[target].

这篇关于PRIM(Patient Rule Induction Method)规则发现算法在风控中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/249314

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

SpringCloud之consul服务注册与发现、配置管理、配置持久化方式

《SpringCloud之consul服务注册与发现、配置管理、配置持久化方式》:本文主要介绍SpringCloud之consul服务注册与发现、配置管理、配置持久化方式,具有很好的参考价值,希望... 目录前言一、consul是什么?二、安装运行consul三、使用1、服务发现2、配置管理四、数据持久化总

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时