实现回归树:探索数据中的隐秘模式

        在机器学习的广阔领域中,决策树是一种强大而灵活的工具,用于从数据中提取模式并做出预测。回归树是决策树的一种形式,专门用于解决回归问题。它能够将输入数据划分为不同的区域,并为每个区域分配一个目标值的预测值。

一、数据准备

      我们选择了一个包含电信客户流失数据的数据集,用以构建我们的预测模型。数据集中包括多个特征,如客户的账户信息、服务使用情况以及流失状态。

二、数据预处理

        在建立回归树之前,我们首先需要对数据进行预处理。这包括处理缺失值、进行特征工程以及将数据划分为训练集和测试集。通过这些步骤,我们确保模型在训练和测试阶段都能得到准确的数据支持。

import pandas as pd

# 读取电信客户流失数据
datas = pd.read_excel("电信客户流失数据.xlsx")

# 将特征和目标变量分开
data = datas.iloc[:, :-1]  # 特征
target = datas.iloc[:, -1]  # 目标变量

# 划分数据集为训练集和测试集
from sklearn.model_selection import train_test_split
data_train, data_test, target_train, target_test = train_test_split(data, target, test_size=0.2, random_state=60)

三、构建回归树模型

        我们使用Scikit-Learn库中的DecisionTreeClassifier来构建回归树模型。这里选择了基尼系数作为分裂标准,并限制树的最大深度为5,以控制模型的复杂度。

from sklearn import tree

# 初始化回归树分类器
dtr = tree.DecisionTreeClassifier(criterion='gini', max_depth=5, random_state=60)

# 在训练集上拟合模型
dtr.fit(data_train, target_train)

四、模型评估与优化

        完成模型训练后,我们需要评估其在训练集和测试集上的性能。这里使用了分类报告来展示模型在不同类别上的精确率、召回率和F1分数,以及ROC曲线和AUC值来评估模型整体的预测能力。

from sklearn import metrics

# 在训练集上进行预测并输出分类报告
train_predicted = dtr.predict(data_train)
print("训练集上的分类报告:")
print(metrics.classification_report(target_train, train_predicted))

# 在测试集上进行预测并输出分类报告
test_predicted = dtr.predict(data_test)
print("测试集上的分类报告:")
print(metrics.classification_report(target_test, test_predicted))

# 计算模型在测试集上的准确率
accuracy = dtr.score(data_test, target_test)
print(f"模型在测试集上的准确率: {accuracy:.2f}")

# 计算预测概率并绘制ROC曲线
y_pred_proba = dtr.predict_proba(data_test)[:, 1]
auc_result = metrics.roc_auc_score(target_test, y_pred_proba)

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve

# 绘制ROC曲线
fpr, tpr, thresholds = roc_curve(target_test, y_pred_proba)
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {auc_result:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend()
plt.show()

五、结果解释与优化

  • Precision(精确率):对于类别0(未流失客户),精确率为0.88,表示模型预测为未流失的客户中,有88%确实是未流失的。对于类别1(流失客户),精确率为0.78,表示模型预测为流失的客户中,有78%确实是流失的。

  • Recall(召回率):对于类别0,召回率为0.93,表示实际为未流失的客户中,有93%被模型正确预测为未流失。对于类别1,召回率为0.65,表示实际为流失的客户中,有65%被模型正确预测为流失。

  • F1-score:综合考虑精确率和召回率的调和平均值。类别0的F1-score为0.91,类别1的F1-score为0.71。

  • Accuracy(准确率):整体准确率为0.86,即模型在训练集上预测正确的比例。

1、测试集分类报告解释:
  • Precision:对于类别0,精确率为0.89;对于类别1,精确率为0.55。这表示在测试集上,模型对于预测未流失客户的精确度较高,但对于预测流失客户的精确度较低。

  • Recall:对于类别0,召回率为0.86;对于类别1,召回率为0.62。这表示在测试集上,模型能够较好地捕捉未流失客户,但对于流失客户的捕捉能力较弱。

  • F1-score:类别0的F1-score为0.88,类别1的F1-score为0.58。

  • Accuracy:整体准确率为0.81,即模型在测试集上的总体预测准确率。

2、结果优化建议:

不平衡类别处理:注意到流失客户(类别1)的精确率、召回率和F1-score较低,可以考虑使用类别平衡技术,如过采样(Oversampling)或欠采样(Undersampling),来改善模型对少数类别的预测能力。

模型调优:尝试调整决策树模型的超参数,如增加或减少最大深度、调整分裂标准等,以提高模型的整体性能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值