决策树项目——电信客户流失预测

AUC性能测量

在机器学习中,性能测量是一项基本任务。因此,当涉及到分类问题时,我们可以依靠AUC - ROC曲线。当我们需要检查或可视化多类分类问题的性能时,我们使用AUC(曲线下面积)ROC(接收器工作特性)曲线。它是检查任何分类模型性能的最重要评估指标之一。

AUC的含义

AUC是衡量学习器优劣的一种性能指标。从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。AUC越大,说明模型对正负样本的区分能力越强,模型的性能也就越好。

AUC的优点

AUC考虑了分类器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。它不受样本不平衡问题的影响,因此是一个相对稳健的评价指标。

项目案例:

python 复制代码
import pandas as pd


# 可视化混淆矩阵
def cm_plot(y, yp):
    from sklearn.metrics import confusion_matrix
    import matplotlib.pyplot as plt

    cm = confusion_matrix(y, yp)
    plt.matshow(cm, cmap=plt.cm.Blues)
    plt.colorbar()
    for x in range(len(cm)):
        for y in range(len(cm)):
            plt.annotate(cm[x, y], xy=(y, x), horizontalalignment='center',
                         verticalalignment='center')
            plt.ylabel('True label')
            plt.xlabel('Predicted label')
    return plt


# 导入数据
datas = pd.read_excel(r"E:\xwechat_files\wxid_qi43v1w2nqcb12_e432\msg\file\2025-12\电信客户流失数据.xlsx")
# 将变量与结果划分开
data = datas.iloc[:, :-1]  # 1、datas.年龄    datas[年龄]   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=42)
# 定义决策树
from sklearn import tree

dtr = tree.DecisionTreeClassifier(criterion='gini', max_depth=8, random_state=60)
dtr.fit(data_train, target_train)

"""
训练集混淆矩阵
"""
# 训练集预测值
train_predicted = dtr.predict(data_train)

from sklearn import metrics

# 绘制混淆矩阵
print(metrics.classification_report(target_train, train_predicted))
# 可视化混淆矩阵
cm_plot(target_train, train_predicted).show()

"""
测试集混淆矩阵
"""
# 测试集预测值
test_predicted = dtr.predict(data_test)  # 直接得到预测的结果

# 绘制混淆矩阵
print(metrics.classification_report(target_test, test_predicted))
# 可视化混淆矩阵
cm_plot(target_test, test_predicted).show()
# 对决策树测试集进行评分
dtr.score(data_test, target_test)

'''AUC值的计算'''
y_pred_proba = dtr.predict_proba(data_test)
a = y_pred_proba[:, 1]
auc_result = metrics.roc_auc_score(target_test, a)

'''绘制AUC-ROC曲线'''
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve  # 得到不同阈值的roc

# 计算ROC曲线的点
fpr, tpr, thresholds = roc_curve(target_test, a)  # 用来计算不同阈值下的fpr和tpr,

# 绘制ROC曲线
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve(area=%0.2f)' % auc_result)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')  # 函数来绘制一条从点 (0,0) 到点 (1,1) 的线段。
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()
# 到逻辑回归里
相关推荐
小哈里42 分钟前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
小π军1 小时前
最大重叠区间数量
数据结构·算法
猎头南楼2 小时前
大模型后训练与 Agent 自迭代:两类工程能力的观察
人工智能·深度学习·机器学习
镜像视界(浙江)科技有限公司2 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
a187927218312 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记2 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Navigator_Z3 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
wzdark3 小时前
多维数组在算法设计中的存储映射问题4
算法
Zzj_tju4 小时前
VLM 读图评测:先审计评分器,再判断读错还是算错
人工智能·深度学习·机器学习·语言模型
Phil3234 小时前
多智能体不是越多越好:Google《Towards a Science of Scaling Agent Systems》论文深度解读
算法