基于决策树的规则挖掘实战分析,值得细嚼慢咽

今天,为大家分享基于决策树算法的风控规则挖掘实战分析哦。

基于决策树挖掘风控规则实战分析

图片

决策树算法

1.来源背景

决策树算法最早于20世纪60年代提出,由于其直观易懂的特点,迅速成为人们研究和解决决策问题的重要工具。随着机器学习的发展,决策树算法逐渐演化为一种强大的预测和分类方法。其中,CART算法作为决策树算法的重要分支,于1984年由Breiman等人提出,以其出色的性能和灵活的应用而受到广泛关注。

2.CART算法

CART(Classification And Regression Tree)算法是一种基于GINI系数的决策树算法。它通过计算GINI系数来度量节点的纯度,进而选择最佳的切分点将样本划分为不同的子集。CART算法在构建决策树时,采用贪心策略,以最小化GINI系数的变化作为判断标准,逐步构建出一个优化的决策树模型。此外,CART算法还支持分类问题和回归问题,使其具备更广泛的应用。

基于决策树的规则挖掘实战分析,值得细嚼慢咽_第1张图片

3.应用场景和优势

CART算法在各个领域有着广泛的应用。在金融领域,CART算法可以帮助银行和保险公司进行客户信用评估和风险预测;在医疗领域,CART算法可用于疾病诊断和药物反应预测;在市场营销中,CART算法可用于用户分类和推荐系统等。相比其他算法,CART算法具有简单易懂、计算效率高、可解释性强等优势,因此备受青睐。

4.决策树算法逻辑

对于分类问题,CART算法使用GINI系数来度量一个节点的纯度。GINI系数衡量了从一个数据集中随机选择两个样本,这两个样本属于不同类别的概率。具体而言,对于一个节点上的样本集合,其GINI系数的计算公式如下:

GINI(p) = 1 - Σ(pi^2)

其中,p是节点上每个类别的概率,pi表示某个特定类别的概率。

在构建CART决策树时,算法会根据GINI系数的变化选择最佳的切分点,将样本分为不同的子集。这个过程会递归地进行,直到满足某个停止条件,例如树的深度达到一定的限制或节点上的样本数量小于某个阈值。最终构建出的CART决策树可以用于做分类或回归。

需要注意的是,CART算法可以用于分类问题和回归问题。在分类问题中,每个叶节点代表一个类别;而在回归问题中,每个叶节点代表一个数值。因此,CART算法是一种灵活且广泛应用于各种场景的决策树算法。

基于决策树的规则挖掘实战分析,值得细嚼慢咽_第2张图片

5.决策树剪枝

训练集中预测值和真实值越接近说明拟合效果越好,但是有时数据过度地拟合训练数据,导致模型的泛化能力较差,在测试数据中的表现并不好。

为了防止模型发生过拟合,可以对“完全生长”的CART树底端剪去一些枝,使得决策树变小从而变得简单。

其实剪枝分为预剪枝和后剪枝,预剪枝是在构建决策树的过程中,提前终止决策树的生长,从而避免过多的节点产生。但是由于很难精确判断何时终止树的生长,导致预剪枝方法虽然简单但实用性不强。

后剪枝是在决策树构建完成之后,通过比较节点子树用叶子结点代替后的误差大小,如果叶子结点合并后误差小于合并前,则进行剪枝,否则不剪枝。

图片

挖掘规则逻辑

CART决策树的构建是一个递归过程,可以大致分为以下几个步骤:

1. 数据准备:

- 收集数据:确保数据集中包含目标变量和预测变量。

- 数据清洗:处理缺失值、异常值,可能需要进行数据转换或编码。

2. 特征选择:

- 对于每一个节点,计算每个特征的最佳分割点,这通常根据GINI指数或均方误差(回归树的情况下)来确定。

- 选择具有最小GINI指数(分类)或最小均方误差(回归)的特征和对应的分割点。

3. 树的构建:

- 使用上一步找到的最佳分割点,将数据分为两个子集。

- 对每个子集递归执行步骤2,继续分割,直至满足停止条件。

- 停止条件包括:达到最大深度、节点中的样本数量少于最小分割所需样本量、节点的纯度(GINI指数或均方误差)已经足够低或其他自定义条件。

4. 剪枝:

- 树构建完成后,可能会进行剪枝操作以避免过拟合。

- 剪枝包括预剪枝(在构建过程中提前停止树的增长)和后剪枝(在树构建完成后去除一些分支)。

- 选择最优的剪枝参数(如最小的成本复杂度剪枝)以提高模型的泛化能力。

5. 模型评估:

- 在独立的测试集上评估模型的性能。

- 使用适当的评估指标,如准确率、召回率、ROC曲线、均方误差等来评估分类或回归树的表现。

6. 使用模型:

- 将评估合格的模型应用于实际的分类或回归问题中。

- 决策树模型可以直接对新的数据样本做出预测。

这个过程可以通过机器学习库(如Python的scikit-learn)中的CART实现自动完成。模型构建后,你可以使用各种方法对决策树进行可视化,直观了解模型的决策路径。

7.cart树每个treenode存储了哪些数据?

在CART决策树中,每个节点(TreeNode)通常存储以下数据:

  1. 划分特征:这是用于根据某种条件划分数据集的特征。例如,如果一个节点用"年龄 > 30"作为分割条件,那么"年龄"就是这个节点的划分特征。

  2. 划分阈值:与划分特征配合使用,定义了数据应如何分割。在上面的例子中,阈值是30。

  3. 左子节点:满足划分条件的数据子集的节点。例如,在上面的"年龄 > 30"例子中,大于30岁的数据会被划分到左子节点。

  4. 右子节点:不满足划分条件的数据子集的节点。在上面的例子中,30岁及以下的数据会被划分到右子节点。

  5. 类标签:只在叶节点中有效。表示该节点所代表的数据子集中最常见的类别。当新数据通过决策树进行预测时,最终到达的叶节点的类标签就是其预测结果。

  6. 数据子集:节点当前代表的数据子集。在许多实际实现中,为了节省内存,节点可能不直接存储数据子集,而是存储数据索引或其他引用。

  7. 基尼不纯度或其他不纯度指标:代表当前数据子集的不纯度。在构建树的过程中,这个指标用于判断是否应该继续划分当前节点。

  8. 其他可选信息:如节点深度、父节点引用、数据点的数量等。

8.决策树算法

```python
# 导入所需的库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 读取数据
data = pd.read_csv('credit_data.csv') # 假设数据保存在名为credit_data.csv的文件中

# 数据预处理
# 对于决策树算法,需要将文本数据转换为数字数据
data['income'] = data['income'].map({'high': 1, 'low': 0})
data['age'] = data['age'].map({'young': 0, 'middle-aged': 1, 'senior': 2})

# 划分特征和标签
X = data.drop('default', axis=1)
y = data['default']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建决策树模型
model = DecisionTreeClassifier()
# 在训练集上拟合模型
model.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
```

9.决策树参数介绍

在Python中,使用`scikit-learn`库的`DecisionTreeClassifier`或`DecisionTreeRegressor`类可以实现基于分类和回归树(CART)算法的决策树。这些类的关键参数如下:

### DecisionTreeClassifier

1. `criterion`: 用来测量分割质量的函数。对于分类树,默认是`'gini'`(基尼不纯度),也可以选择`'entropy'`(信息增益)。

2. `splitter`: 用于在节点分割时选择最优分割策略的方法。默认是`'best'`,表示选择最优分割,也可以设置为`'random'`随机分割。

3. `max_depth`: 树的最大深度。如果没有设置,那么节点会扩展直到所有叶子节点都是纯净的(所有的样本都属于同一个类),或者包含的样本数小于`min_samples_split`。

4. `min_samples_split`: 分割一个节点需要的最小样本数,默认是2。

5. `min_samples_leaf`:

一个叶子节点需要包含的最小样本数,默认是1。

6. `max_features`: 分割节点时考虑的最大特征数。可以设置为整数、浮点数、字符串或者`None`。默认是`None`,表示考虑所有的特征。

7. `random_state`: 控制算法随机状态的整数。可以用于确保多次运行的可复现性。

8. `max_leaf_nodes`: 最大叶子节点数量,如果设置了这个参数,那么`max_depth`将会被忽略。

这些参数对于避免过拟合、优化计算效率和决策树的性能都非常关键。

### DecisionTreeRegressor

回归决策树`DecisionTreeRegressor`的参数和分类决策树`DecisionTreeClassifier`大体相同,不同之处在于回归树的默认`criterion`是`'squared_error'`,表示使用均方差分割;其他参数功能与分类树保持一致。

这些参数允许对决策树的训练和结构进行细粒度的控制,但同时也需要注意,不合理的参数设置可能会导致模型过拟合或者欠拟合。通常需要通过交叉验证来选择最合适的参数。

图片

风控实战代码

调用sklearn中的决策树回归模型,设定树的最大深度为2层。将x作为挖掘变量,将creditability作为y标签。使用graphviz对输出结果进行可视化展示。

基于决策树的规则挖掘实战分析,值得细嚼慢咽_第3张图片

基于决策树的规则挖掘实战分析,值得细嚼慢咽_第4张图片

可视化

基于决策树的规则挖掘实战分析,值得细嚼慢咽_第5张图片

基于决策树的规则挖掘实战分析,值得细嚼慢咽_第6张图片

规则生成

基于决策树的规则挖掘实战分析,值得细嚼慢咽_第7张图片

你可能感兴趣的:(智能风控,决策树,算法,机器学习,人工智能,数据挖掘,数据分析,python)