# 决议树与PCA降维在电信客户流失预测中的应用

打印 上一主题 下一主题

主题 1680|帖子 1680|积分 5042

决议树与PCA降维在电信客户流失预测中的应用

在数据分析和机器学习领域,电信客户流失预测是一个经典的案例。本文将通过Python代码实现,探讨决议树模子在电信客户流失预测中的应用,并结合PCA降维技术优化模子性能,同时对比降维前后的模子结果。
数据预备

我们从一个名为“电信客户流失数据.xlsx”的Excel文件中导入数据。这些数据包含了电信客户的各种特性以及他们是否流失的标签。通过pandas库的read_excel函数,我们可以方便地将数据加载到DataFrame中。然后,我们将数据集分为特性变量(data)和目的变量(target),其中特性变量是客户的各种属性,目的变量是客户是否流失。
  1. import pandas as pd
  2. # 导入数据
  3. datas = pd.read_excel("电信客户流失数据.xlsx")
  4. # 将变量与结果划分开
  5. data = datas.iloc[:, :-1]  # 特征变量
  6. target = datas.iloc[:, -1]  # 目标变量
复制代码
数据预处理惩罚

为了使数据得当模子练习,我们首先对特性变量举行标准化处理惩罚。使用StandardScaler对数据举行标准化,使每个特性的均值为0,标准差为1。这一步调对于很多机器学习算法来说都是须要的,由于它可以消除差别特性之间量纲和数值范围的差异,进步模子的性能和稳定性。
  1. from sklearn.preprocessing import StandardScaler
  2. # 数据标准化
  3. scaler = StandardScaler()
  4. data_scaled = scaler.fit_transform(data)
复制代码
模子练习与评估

我们选择决议树作为分类模子。决议树是一种简单而强盛的分类算法,它通过递归地划分特性空间来构建树结构,从而实现对数据的分类。我们设置了决议树的最大深度为4,以防止模子过于复杂而导致过拟合。使用train_test_split函数将数据集划分为练习集和测试集,其中测试集占20%。然后,我们使用练习集对决议树模子举行练习,并在练习集和测试集上分别举行预测,生成混淆矩阵和分类报告。
  1. from sklearn.model_selection import train_test_split
  2. from sklearn.tree import DecisionTreeClassifier
  3. from sklearn.metrics import classification_report, confusion_matrix
  4. import matplotlib.pyplot as plt
  5. # 划分数据集
  6. data_train, data_test, target_train, target_test = train_test_split(
  7.     data_scaled, target, test_size=0.2, random_state=42)
  8. # 定义决策树
  9. dtr = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=42)
  10. dtr.fit(data_train, target_train)
  11. # 训练集混淆矩阵
  12. train_predicted = dtr.predict(data_train)
  13. print("训练集分类报告:")
  14. print(classification_report(target_train, train_predicted))
  15. # 测试集混淆矩阵
  16. test_predicted = dtr.predict(data_test)
  17. print("测试集分类报告:")
  18. print(classification_report(target_test, test_predicted))
复制代码
为了更直观地展示模子的分类结果,我们绘制了混淆矩阵的可视化图。混淆矩阵是一个表格,用于描述分类模子在测试集上的分类结果。通过混淆矩阵,我们可以清楚地看到模子对每个类别的预测情况,包括真正例、假正例、真负例和假负例的数量。
  1. # 绘制可视化混淆矩阵
  2. def cm_plot(y, yp):
  3.     cm = confusion_matrix(y, yp)
  4.     plt.matshow(cm, cmap=plt.cm.Blues)
  5.     plt.colorbar()
  6.     for x in range(len(cm)):
  7.         for y in range(len(cm)):
  8.             plt.annotate(cm[x, y], xy=(y, x), horizontalalignment='center',
  9.                          verticalalignment='center')
  10.     plt.ylabel('True label')
  11.     plt.xlabel('Predicted label')
  12. # 绘制训练集混淆矩阵
  13. cm_plot(target_train, train_predicted)
  14. plt.title("训练集混淆矩阵")
  15. plt.show()
  16. # 绘制测试集混淆矩阵
  17. cm_plot(target_test, test_predicted)
  18. plt.title("测试集混淆矩阵")
  19. plt.show()
复制代码

PCA降维

PCA(主成分分析)是一种常用的降维技术,它通过将原始数据投影到新的特性空间,保存数据的主要方差信息,从而减少数据的维度。在本例中,我们设置PCA保存95%的方差,这意味着降维后的数据将保存原始数据95%的信息。我们对练习集和测试集分别举行PCA降维,并使用降维后的数据重新练习决议树模子。

  1. from sklearn.decomposition import PCA
  2. # 应用 PCA 降维
  3. pca = PCA(n_components=0.95)  # 保留95%的方差
  4. data_train_pca = pca.fit_transform(data_train)
  5. data_test_pca = pca.transform(data_test)
  6. # 定义决策树
  7. dtr_pca = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=42)
  8. dtr_pca.fit(data_train_pca, target_train)
  9. # 测试集混淆矩阵(降维后)
  10. test_predicted_pca = dtr_pca.predict(data_test_pca)
  11. print("降维后测试集分类报告:")
  12. print(classification_report(target_test, test_predicted_pca))
复制代码
模子性能对比

通过对比降维前后的模子性能,我们可以发现一些有趣的现象。在未降维的情况下,模子的正确率达到了一定的程度,但在降维后,模子的正确率可能会有所变化。这可能是由于PCA降维固然减少了数据的维度,但同时也可能丢失了一些对分类有帮助的信息。然而,如果降维后的模子性能仍旧可以担当,那么PCA降维就可以在一定程度上简化模子,进步模子的练习速率和服从。
  1. # 对决策树测试集进行评分
  2. accuracy_no_pca = dtr.score(data_test, target_test)
  3. print(f"未降维的准确率: {accuracy_no_pca:.4f}")
  4. # 降维后的准确率
  5. accuracy_with_pca = dtr_pca.score(data_test_pca, target_test)
  6. print(f"降维后的准确率: {accuracy_with_pca:.4f}")
  7. # 输出结果
  8. print(f"降维前后准确率对比:")
  9. print(f"未降维: {accuracy_no_pca:.4f}")
  10. print(f"降维后: {accuracy_with_pca:.4f}")
复制代码
可视化决议树

为了更好地明白决议树模子的结构,我们可以将决议树可视化。通过plot_tree函数,我们可以清晰地看到决议树的每个节点和分支,相识模子是怎样举行分类的。
  1. from sklearn.tree import plot_tree
  2. # 可视化决策树(未降维)
  3. plt.figure(figsize=(12, 8))
  4. plot_tree(dtr, filled=True, feature_names=data.columns, class_names=["未流失", "流失"])
  5. plt.title("未降维的决策树")
  6. plt.show()
  7. # 可视化决策树(降维后)
  8. plt.figure(figsize=(12, 8))
  9. plot_tree(dtr_pca, filled=True, class_names=["未流失", "流失"])
  10. plt.title("降维后的决策树")
  11. plt.show()
复制代码
运行结果



总结

通过本文的实验,我们可以看到决议树模子在电信客户流失预测中的应用结果,以及PCA降维对模子性能的影响。在实际应用中,我们可以根据详细的数据和需求,选择合适的模子和降维方法,以达到最佳的预测结果。同时,可视化工具如混淆矩阵的可视化图和决议树的可视化图,也可以帮助我们更好地明白和评估模子的性能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表