基于交叉表生成风控规则(Python)

大家好,我是东哥。

规则是风控策略中最常用的工具之一,生成、筛选、监控、调优,几乎每天都在打交道,本篇来介绍如何基于交叉表来生成风控规则,并且如何基于评估指标进行筛选。

出品人:东哥起飞

专栏:《100天风控专家

1.1. 交叉表的概念

什么是交叉表?

交叉表,顾名思义,就是两个或者两个以上的变量进行交叉判断。

比如下面这个示例,一个变量是“最近6个月新开信贷账户数”,另一个变量是“当前公积金状态”,这就是两个变量的交叉表形式,也叫“二维交叉表”,如果是两个以上的变量就是“多维交叉表”。

交叉表的形成,本质上就是变量的“笛卡尔积”。

在这里插入图片描述

1.2. 交叉表的特点

交叉表有什么特点?

按照规则的复杂度和数据维度两个角度来看,交叉表规则处于单变量规则和评分卡模型之间的中间形态。

  • 与单变量规则相比,交叉表拥有更多的维度,对于客户风险评估更加准确。
  • 与评分卡模型相比,交叉表虽变量维度少,但复杂度更低,迭代开发速度更快。
  • 在所有的工具中,交叉表属于一种中间的形态,同时兼顾了维度和复杂度两点。

在这里插入图片描述

1.3. 交叉表的前置条件

要生成二维交叉表,有3个前提条件:

1)基于IV筛选出预测效果好的变量池,从中选择交叉所需的变量组。

一般的原则是:交叉变量最好是不同维度的,且相互间的相关性不高,这样综合效果才会达到最优。

2)对变量进行分箱操作,连续型变量需要有排序性;

仍以下面的二维交叉表为例,我们看到“最近6个月新开信贷账户数”是连续型变量,“当前公积金状态” 是离散性变量。这里公积金状态有三个离散值,因此不需要分箱;而最近6个月新开账户数由于是连续型变量,是需要做分箱处理的。

3)总样本和坏样本数量足够多。

交叉表通过两两组合,有更多的格子。比如下面一维变量只有4个格子,而二维交叉表有12个格子,而总数量和总坏客户数是相同的,那么经过稀释后交叉表的每个格子数据量会变少。如果总样本数和坏客户数不够的话,那么分散到每个格子的数量就可能出现过少,或者没有数据的情况,导致无统计意义无法分析。因此如要保证每个格子都有足够的数据,总样本和坏样本数就必须足够多。
在这里插入图片描述

二、交叉表规则生成与评估

2.1. 三个步骤

交叉表规则制定一般有以下三个步骤:

在这里插入图片描述

2.2. 交叉表规则生成(1):透视表

在这里插入图片描述

2.3. 交叉表规则生成(2):计算指标

在这里插入图片描述

区间坏账率=每个格子的坏客户数/对应格子的总客户数,是上下两个交叉表每个格子对应位置的计算,比如蓝色框示例,4.43%=19/429;

客户占比=每个格子的客户数/总客户数,只需总客户数一个交叉表即可,比如红色框示例,3%=59/1967;

2.4. 交叉表规则生成(3):制定和评估

在这里插入图片描述

三、交叉表应用场景

3.1. 策略D类调优

1)背景介绍

某机构发现,近期市场环境不好,客户的贷后逾期率不断升高,业务部门提出需求:需要风控策略人员对贷前审批策略进行收紧,降低逾期风险,但同时不降低太多通过率,因为业务规模是本年的考核指标。

2)策略方案

该需求属于策略D类调优。可新增二维交叉表规则,比如右侧这条规则,命中率仅为1.68%,但拒绝客户中一半以上都是坏客户。

如果使用单变量规则,比如最近6个月新开信贷账户数>=3时拒绝,区间坏账率为25.47%,命中率则为8.19%,会降低很大通过率 。
在这里插入图片描述

二维交叉表规则:“最近6个月新开信贷账户数在(2.5,28]之间”且“当前公积金状态为2”,触发则拒绝,反之通过。


以下是基于交叉表生成规则的Python的实战案例部分。

<蓝1,绿2,红3,红3,红3,红3>

以上来自原创专栏《100天风控专家》规则篇分析全流程的节选内容,共100期以上视频更新,包括业务、产品、策略、模型、数据、系统6大核心模块,理论+Python代码实操,从零到一入门金融数据风控。规则篇课件内容如下。

<think>嗯,用户想了解十折交叉验证的原理和应用场景。首先,我需要回忆一下相关知识。十折交叉验证是机器学习中常用的模型评估方法,主要用于数据量有限时提高评估的准确性。原理应该是将数据集分成十份,轮流用其中九份训练,一份测试,重复十次取平均结果。这样可以减少过拟合和欠拟合的险,充分利用数据。 不过,用户之前提到过C语言的十折交叉验证和Python的应用,可能对实现细节感兴趣。需要分步骤解释,确保结构清晰。还要注意引用他们提供的资料,比如引用[1]和[2]。可能的应用场景包括模型选择、参数调优、数据分布不均的情况等。 用户可能想知道为什么是十折,而不是其他数目,比如五折或者留一法。需要解释折数的影响,十折在偏差和方差之间的平衡。另外,可能需要比较十折和其他方法的优缺点,比如训练时间、计算资源消耗等。 还要考虑用户可能的误区,比如十折交叉验证是否完全避免过拟合?其实它只能减少,不能完全避免,因为数据划分可能引入偏差。此外,每个折的划分是否随机,分层抽样保持数据分布的重要性也需要提到。 应用场景部分,需要具体举例,比如小数据集上的模型评估,比较不同算法的性能,或者调整超参数时的稳定评估。在工业界的应用,如金融风控、医疗诊断中的数据有限情况。 需要确保回答符合格式要求,行内公式用$...$,独立公式用$$...$$。检查LaTeX语法是否正确,比如积分符号、上下标等。最后生成相关问题,引导用户深入思考,比如十折的变种、与其他交叉验证方法的比较、实际应用中的注意事项等。</think>### 十折交叉验证原理与思想分步解析 #### 一、核心思想 十折交叉验证(10-fold cross validation)是$S$折交叉验证的特例,通过将数据集$D$均匀划分为10个互斥子集$D_1,D_2,...,D_{10}$,执行10轮训练-验证: $$D = \bigcup_{i=1}^{10}D_i,\quad D_i \cap D_j = \emptyset\ (i \neq j)$$ 每轮取$D_i$作为验证集,其余9个子集合并为训练集,最终评估指标取10次结果的平均值[^1]。其核心价值在于: 1. 提升有限数据利用率(每个样本都被用于训练和验证) 2. 降低数据划分偶然性带来的评估偏差 #### 二、工作流程 ```python from sklearn.model_selection import KFold import numpy as np # 示例数据集 X = np.array([[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16],[17,18],[19,20]]) y = np.array([1,1,0,0,1,0,1,0,1,0]) kf = KFold(n_splits=10) for train_index, test_index in kf.split(X): print("TRAIN:", train_index, "TEST:", test_index) ``` #### 三、数学表达 设模型为$f: X \rightarrow Y$,损失函数为$L$,则最终评估指标: $$\text{Score} = \frac{1}{10}\sum_{i=1}^{10} L(f_{D \setminus D_i}(X_{D_i}), Y_{D_i})$$ 其中$f_{D \setminus D_i}$表示在第$i$折使用除$D_i$外数据训练得到的模型。 #### 四、技术特点对比 | 方法 | 数据利用率 | 计算成本 | 方差制 | |------|-----------|----------|----------| | 留出法 | ~70% | 低 | 差 | | 5折交叉验证 | 80% | 中 | 良 | | **10折交叉验证** | **90%** | 较高 | 优 | | 留一法 | 100% | 极高 | 波动大 | #### 五、典型应用场景 1. **小样本建模**(n < 10,000) 2. **模型选择**:比较不同算法在相同划分下的表现 3. **超参数调优**:配合网格搜索确定最优参数组合 4. **数据分布验证**:检测模型对数据分布的敏感性 5. **特征工程评估**:验证特征选择的有效性[^2] #### 六、实践注意事项 1. **分层抽样**:分类任务需保持各类别比例 2. **数据泄露预防**:特征工程应在划分后进行 3. **随机种子设置**:保证实验结果可复现 4. **计算资源评估**:时间复杂度为$O(kn)$,k为折数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值