风控领域的“规则学习(Rule Learning)”

风控领域的“规则学习(Rule Learning)”


一、什么是规则学习

规则学习(Rule Learning)是一种机器学习技术,旨在从给定的训练数据中自动学习出一组规则或条件,以便对新的未见过的数据进行分类或预测。规则学习是一种归纳学习(Inductive Learning)的方法,它通过观察和分析大量的训练数据,从中归纳出潜在的模式和规律。这些规则通常采用"If-Then"的形式,其中"If"部分表示一组输入特征或条件,"Then"部分表示相应的输出类别或决策。例如,“如果客户年龄大于等于 18 岁且月收入大于等于 5000 元,则批准贷款申请”。这样的规则不仅易于理解,还可以直接应用于实际业务中,帮助金融机构做出决策。

二、为什么要使用规则学习

规则学习在机器学习和人工智能领域之所以重要,主要基于以下几个理由:

  • 可解释性:与一些“黑盒”模型(如深度学习)相比,规则学习生成的模型易于理解。每条规则都是明确的“如果-那么”声明,使得非专业人士也能理解模型的决策过程。
  • 简洁性:规则通常很简短,专注于数据中的关键特征,使得模型不仅易于理解,而且高效。
  • 灵活性:规则学习可以应用于分类、回归甚至是模式识别任务,能够处理数值型和类别型数据。
  • 适用于小数据集:与需要大量数据的模型不同,规则学习方法可以在相对较小的数据集上有效工作。

三、金融风控与规则学习

在金融风控领域,可解释性是一项至关重要的要求。金融风控指的是金融机构利用各种技术手段对贷款、投资、交易等进行风险管理和控制的过程。在金融领域,决策的合理性和透明性对于保护客户利益、维护市场稳定至关重要。因此,金融监管机构和金融机构自身对于风控模型的可解释性要求越来越高。

在追求可解释性的同时,金融机构还需要保证模型的准确性和有效性。正是由于上述种种要求,在金融风控领域,规则学习(Rule Learning)成为了一个备受关注的方法。

规则学习在金融领域有着广泛的应用。例如,在信用评分模型中,规则学习可以帮助金融机构根据客户的个人信息和信用历史制定贷款审批规则;在反欺诈系统中,规则学习可以帮助识别异常交易和行为,并及时采取措施防止损失;在投资组合管理中,规则学习可以帮助投资者根据市场趋势和风险偏好制定投资策略等等。

总的来说,金融风控领域对于可解释性的要求推动了规则学习等可解释性强的技术的发展和应用。规则学习不仅能够帮助金融机构提高风控效率和准确性,还能够增强客户信任和监管透明度,对于维护金融市场稳定和保护投资者利益具有重要意义。

四、规则学习实现方案

最为常见规则学习的实现方案是使用决策树来生成规则,在这种方法中,通过构建一棵树来表示一系列的决策规则,树的每个节点代表一个属性测试,每个分支代表一个测试结果,而叶子节点则包含一个类别标签。在训练阶段,算法通过对数据集进行递归地划分,选择最佳的属性和划分方式来构建决策树。在预测阶段,输入样本通过树的分支进行测试,最终落入某个叶子节点,从而确定其类别。

在具体实现中往往还会使用决策树可视化等手段来帮助更好地挖掘规则。
在这里插入图片描述
尽管决策树在规则学习中被广泛使用,但SkopeRules作为一种新兴的规则学习方法相对较少被介绍。SkopeRules是一种基于随机森林的规则学习算法,它通过结合随机森林的优点和基于规则的学习,能够更好地解决复杂的分类和回归问题。SkopeRules的核心思想是在随机森林的基础上,提取出具有解释性的规则集合,这些规则集合可以被解释为人类可理解的决策规则,从而增强了模型的可解释性。本文将重点介绍SkopeRules算法的原理、应用和性能,以期为读者提供对规则学习的新视角和理解。

五、SkopeRules

主要目标
SkopeRules,就像“Scope Rules”的发音,它的思想基于“我可以解释(I can explain)”的观点。“Skope”是“Scores”和“Rules”两个词的混合,意味着它的目标是寻找能够归纳出一种“评分规则”的模式。

SkopeRules的主要目标是为了提供一个简单、易解释的模型,这样即使是在处理非常复杂的问题时,也能够让用户清楚地理解决策依据。SkopeRules从随机森林中挖掘出来的规则都是非常有洞察力的,它们不仅可以用于预测,更为重要的是,可以为决策过程提供关键的理解。

工作流程
SkopeRules通过随机森林在特征空间的差异化采样,构造出多个不同的特征子集,然后在每个子集上进行规则学习,最后合并所有子集上学习的规则,筛选出最优解释性的规则。相比较于简单的决策树规则挖掘,这样的过程不仅有利于模型的稳定性,而且有助于模型在更广阔的特征空间内捕获更多样化的数据模式。

特点优势

  1. 易解释性:SkopeRules生成的规则简洁且具有解释性,能够为用户直接了解决策依据。
  2. 稳健性:SkopeRules通过随机抽取特征子集和基于随机森林的规则学习来增加模型的稳健性。
  3. 多样性:SkopeRules算法不仅可以挖掘单一的规则,还可以抓住数据存的多样性,挖掘多条规则。
  4. 可定制性:SkopeRules允许用户设置筛选规则的准则,包括精度、支持度和平衡度,使得其可以根据不同场景做出定制化规则挖掘。
  5. 实用性:SkopeRules的结果不仅能用于预测,而且可以用于模型结果的理解和决策引导。

实现代码

# 安装skrules算法包
pip install skrules
import pandas as pd
from skrules import SkopeRules
from sklearn.utils.class_weight import compute_sample_weight
from sklearn.model_selection import GridSearchCV
import warnings

# 忽略所有警告
warnings.filterwarnings("ignore")

# 读取数据
data = pd.read_excel('/home/mw/input/02182598/oil_data_for_tree.xlsx')

在这里插入图片描述

# 不均衡数据集调整样本权重
sample_weight=compute_sample_weight('balanced',data.bad_ind)

model = SkopeRules(max_depth_duplication=2,
                 n_estimators=30,
                 precision_min=0.5,
                 recall_min=0.0,
                 feature_names=feature_list,max_depth=10)
model.fit(data[feature_list], data.bad_ind, sample_weight)

# 输出skoperules生成的规则
model.rules_

[('total_oil_cnt > 3.5 and pay_amount_total <= 323598.296875 and pay_amount_total > 307330.09375 and call_source <= 0.5',
  (1.0, 0.06775700934579439, 1)),
 ('total_oil_cnt <= 31.5 and total_oil_cnt > 30.5 and pay_amount_total <= 349201.0 and call_source <= 0.5',
  (1.0, 0.056386899780940886, 3)),
 ('total_oil_cnt <= 31.5 and total_oil_cnt > 30.5 and call_source <= 0.5',
  (0.8846153846153846, 0.05596107055961071, 1)),
 ('total_oil_cnt <= 16.5 and total_oil_cnt > 15.5 and pay_amount_total > 81791.09765625 and source_app <= 0.5 and call_source > 0.5 and oil_amount <= 112.30500030517578 and discount_amount <= 76210.0 and pay_amount > 339157.5',
  (0.9333333333333333, 0.03398058252427184, 1))]

skrules参数解释

  • feature_names: 列表,元素为字符串,指定特征的名称。这主要用于生成规则的解释性文字,方便对规则进行理解。
  • max_depth_duplication: 整数,默认值为2。该参数用来控制规则的复杂度,避免复杂度过高的规则。这对规则的可解释性非常重要。限制在规则提取过程中相同条件的重复深度,以避免生成过于复杂或冗余的规则,提高规则的多样性和灵活性。
  • n_estimators:整数。用于指定生成的决策树的数量。一般来说,树的数量越多,训练时间越长,但是可以生成更多的规则,且模型的训练精度可能会提高。
  • precision_min:浮点数。该参数用于控制规则的质量。只有当规则的精度(预测正确的结果占所有匹配结果的比例)大于等于precision_min时,规则才会被选择。增加precision_min 可以过滤掉精度较低的规则,但也可能导致可用规则数量的减少。
  • recall_min:浮点数。该参数控制规则的覆盖度。只有当规则的召回率(预测正确的结果占所有真实结果的比例)大于等于 recall_min时,规则才会被选择。增加 recall_min 可以使得选择的规则覆盖更多的实例。
  • rules_selection:字符串,可选值有’precision’(选择精度最高的规则) , ‘recall’(选择召回率最高的规则),或 ‘f1_score’(选择 F1分数最高的规则)。

skrules结果解释
例:[(‘__C__2 > 2.449999988079071’, (1.0, 1.0, 8)), (‘__C__3 > 0.800000011920929’, (1.0, 1.0, 7)), (‘__C__2 > 2.599999964237213’, (1.0, 1.0, 3)), (‘__C__3 > 0.75’, (1.0, 1.0, 2))]

规则的条件表达式

  • __C__2 > 2.449999988079071’:这是一个规则的条件,表示特征 __C__2 的值大于 2.449999988079071 时,该规则被触发。__C__2 是特征的名称,可能是在数据预处理时分配的一个名称,具体指代哪个特征需要根据数据集的上下文来理解。

规则的性能指标元组

  • (1.0, 1.0,8):这个元组表示对应规则的性能指标。通常,这些指标包括精确度(precision),召回率(recall)和规则支持度(support)。
  • 精确度 (Precision): 第一个值 1.0 表示当该规则预测正类时,预测正确的比例为100%。精确度越高,表示规则在预测正类时越准确。
  • 召回率 (Recall): 第二个值 1.0表示该规则能够捕捉到的正类实例占所有正类实例的比例也是 100%。召回率越高,表示规则能够覆盖的正类实例越多。
  • 支持度(Support): 第三个值表示符合这条规则的数据点数量。例如,8 表示有 8个实例满足这个规则的条件。支持度可以帮助我们了解规则覆盖的数据量大小。

总结

欢迎关注我的公众号~

  • 33
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值