catboost特征重要性feature importance计算逻辑深度揭秘(全网最全,硬核收藏)

作者Toby,来源公众号:python风控模型,catboost特征重要性计算逻辑

前几天有个用户咨询catboost变量重要性计算逻辑。catboost是非常智能算法,可以自动化处理缺失值,计算变量重要性,适合新手,少了很多数据预处理环节。Toby觉得这个问题很不错,特分享此文章。

CatBoost是一种机器学习算法,以其能够处理分类特征而无需进行独热编码而闻名。它基于梯度提升,特别适用于表格数据。CatBoost允许用户快速处理大数据集的分类特征。Catboost可以用来解决回归、分类和排序问题。

CatBoost的全称是“Categorical Boosting”,由Yandex开发。由于其高性能和易用性,CatBoost在竞赛和实际应用中被广泛使用。

图片

CatBoost是一种基于梯度提升算法的机器学习模型,它可以用于分类和回归任务。在CatBoost中,可以通过特征重要性来评估每个特征对模型预测的贡献程度。

catboost模型分析框架如下

图片

下图是官网对应目录

图片

计算变量重要性作用

-删除不必要的功能,简化模型,减少训练/预测时间

-为你的目标价值获取最具影响力的功能,并对其进行操作,以获得商业收益(例如:医疗保健提供者想要确定是什么因素在驱动每个病人患某些疾病的风险,以便他们可以直接使用目标药物解决这些风险因素)

CatBoost提供了一个属性feature_importances_来获取特征的重要性。你可以通过以下方式获取CatBoost模型的特征重要性:

import catboost# 训练模型model = catboost.CatBoostClassifier()model.fit(X_train, y_train)# 获取特征重要性feature_importance = model.feature_importances_

特征重要性值越高,表示该特征对模型的预测结果影响越大。你可以根据特征重要性的大小来选择最重要的特征进行特征选择,或者用于解释模型的预测结果。

CatBoost根据数据特征,智能为用户计算变量重要性。

cb = CatBoostRegressor()cb.get_feature_importance(type= "___")
 "type" possible values:  - PredictionValuesChange  - LossFunctionChange  - FeatureImportance      PredictionValuesChange for non-ranking metrics and LossFunctionChange for ranking metrics  - ShapValues      Calculate SHAP Values for every object  - Interaction      Calculate pairwise score between every feature

catboost特征重要性的框架如下:

图片

python调用catboost变量重要性的函数

图片

1.PredictionValuesChange

对于每个功能,PredictionValuesChange显示如果功能值更改,预测平均会更改多少。重要性值越大,如果该特性发生变化,则预测值的变化平均越大。

优点:计算成本很低,因为您不必进行多次训练或测试,也不会存储任何额外的信息。您将得到作为输出的标准化值(所有导入项加起来将达100)。

缺点:它可能会给排名目标带来误导性的结果,它可能会把群体特征放在首位,即使它们对所产生的损失价值有一点影响。

下图为官方介绍:

图片

图片

2.LossFunctionChange

为了获得这一特性的重要性,CatBoost简单地利用了在正常情况下(当我们包括特性时)使用模型获得的度量(损失函数)与不使用该特性的模型(模型建立大约与此功能从所有的树在合奏)。差别越大,特征就越重要。在CatBoost文档中没有明确提到我们如何发现没有特性的模型。

优点和缺点:这对于大多数类型的问题都很有效,不像PredictionValuesChange那样,在对问题进行排序时可能会得到误导的结果,同时它的计算量很大。

图片

图片

3. InternalFeatureImportance

每个输入特征及其组合(如果有)的重要性值。比较的叶对在这些叶的路径上的节点中具有不同的拆分值。如果满足分割条件(这个条件取决于特征F),则对象转到左子树;否则它将转到正确的一个。

图片

图片

Permutation

Permutation Importance: Permutation Importance是通过对特征值进行随机排列,然后计算模型性能的变化来评估特征的重要性。具体计算公式如下:

图片

图片

Shap Values

图片

SHAP值将预测值分解为每个特性的贡献。它比较基线预测(训练数据集目标值的平均值)和特征对单个预测值的影响。

Shapley Values: Shapley Values是基于合作博弈论的概念,用于评估每个特征对模型预测的贡献。具体计算公式如下: 

图片

图片

shap值的两个主要用例:

1.   特性的对象级贡献

shap_values = model.get_feature_importance(Pool(X_test, label=y_test,cat_features=categorical_features_indices),                                                                      type="ShapValues")expected_value = shap_values[0,-1]shap_values = shap_values[:,:-1]
shap.initjs()shap.force_plot(expected_value, shap_values[3,:], X_test.iloc[3,:])

图片

整个数据集的摘要(总体特性重要性)

shap.summary_plot(shap_values, X_test)

图片

虽然我们可以通过shap获得精确的特性重要性,但是它们在计算上比catboost内置的特性重要性更费时间。

虽然这两种方法都可以用于所有类型的度量,但是建议使用LossFunctionChangefor对度量进行排序。除了PredictionValuesChange之外,所有其他方法都可以使用测试数据,使用训练在列车数据上的模型来发现特征的重要性。

interaction变量交互

通过这个参数,您可以找到一对特性的重要性(两个特性的重要性)。

在输出中,您将得到每对特性的列表。列表将有3个值,第一个值是该对中第一个特性的索引,第二个值是该对中第二个特性的索引,第三个值是该对的特性重要性得分。具体实施请查看嵌入式notebook。每对特征的特征交互强度的值。当计算这些特征之间的相互作用时,观察到结果系综的所有树中的f2。如果两个特征的分割都存在于树中,那么我们将观察当这些分割具有相同的值而具有相反的值时,叶值会发生多大变化。

有趣的是,在单一功能重要性中,前两个功能不一定会成为最强的一对。

官网释义

图片

InternalInteraction内在交互

模型中使用的每对特征的特征交互强度的值。在内部,模型使用特征组合作为单独的特征。模型中使用的所有特征组合都单独列出。例如,如果模型包含名为F1的特征和特征的组合{F2,F3},则F1和特征组合{F2、F3}之间的交互将列在输出文件中。

下图是官方释义

图片

catboost有着复杂且智能的变量重要性计算方法,那我们到底该用哪一种合适呢?

为了更好地理解这些差异,下面是我们讨论的所有方法的结果:
 

图片

图片

CatBoost功能IMP.的结果预测-报告来自经典“成人”人口普查数据集,人们是否会有超过5万美元的收入(使用日志丢失)。

图片

图片

从上面的图中,我们可以看到,大多数方法在顶级特性上是一致的。看起来lossFunctionChange最接近shap(更可靠)。然而,直接比较这些方法是不公平的,因为预测值变化是基于训练数据,而其他所有方法都是基于试验数据。

我们还应该看到运行所有这些程序所需的时间:shap最慢,PredictionValuesChange最快

图片

参考链接

https://catboost.ai/en/docs/concepts/fstr#regular-feature-importance;

https://catboost.ai/en/docs/concepts/ostr;

更多关于catboost算法建模知识的同学可以收藏课程《python风控建模实战lendingClub》。

我们公司提供一对一机器学习模型定制服务,提供公司正规发票,如果你需要建模项目定制服务,留言联系。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值