PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享(下)

简介: PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享(上):https://developer.aliyun.com/article/1492254


基于对我们有用的 WOE 分析变量是:pdays、previous、job、housing、balance、month、duration、poutcome、contact。

在下一步中,我们决定根据 WOE 结果和变量的先前结果删除无用的列。

我们删除的其中一个列是 poutcome,尽管它的 WOE 很高,但我们决定删除它,因为从 prevois 分析中我们看到它有许多未知的观察结果。

在可变持续时间的情况下,我们也可以看到WOE相当大,甚至可以说这个结果有点可疑。我们决定根据 WOE 结果放弃它,因为我们的模型应该根据过去的数据说明是否建议给某个人打电话。

在可变接触的情况下,我们放弃了它,因为对我们来说,接触形式在我们的模型中没有用。

我们还删除了变量 day 因为它对我们没有用,因为这个变量代表天数,而该变量的 WOE 非常小。我们删除的最后一个变量是变量 pdays,尽管这个变量 WOE 的结果非常好,但它对我们来说并不是一个有用的变量。

我们分析中剩下的列:


特征选择和工程


要执行我们的算法,我们首先需要将字符串更改为二进制变量。

data = pd.get_dummies(data=data, columns = \['job', 'marital', 'education' , 'month'\], \
                                   prefix = \['job', 'marital', 'education' , 'month'\])

我们更改了列的名称。

data.head(5)

创建虚拟变量后,我们进行了 Pearson 相关。

age = pearsonr(data\['age'\], data\['y'\])

sns.heatmap(corr

我们选择了数字列来检查相关性。正如我们所看到的,没有相关性。

我们查看因变量和连续变量之间的关系。

pylab.show()


交叉验证


经过所有准备工作,我们终于可以将数据集拆分为训练集和测试集。


算法的实现


逻辑回归

K=5
kf = KFold(n_splits=K, shuffle=True)
logreg = LogisticRegression()
\[\[7872   93\]
 \[ 992   86\]\]

\[\[7919   81\]
 \[ 956   86\]\]

\[\[7952   60\]
 \[ 971   59\]\]

\[\[7871   82\]
 \[1024   65\]\]

\[\[7923   69\]
 \[ 975   75\]\]

决策树

dt2 = tree.DecisionTreeClassifier(random\_state=1, max\_depth=2)
\[\[7988    0\]
 \[1055    0\]\]

\[\[7986    0\]
 \[1056    0\]\]

\[\[7920   30\]
 \[1061   31\]\]

\[\[8021    0\]
 \[1021    0\]\]

\[\[7938   39\]
 \[1039   26\]\]

随机森林

random_forest = RandomForestClassifier
\[\[7812  183\]
 \[ 891  157\]\]

\[\[7825  183\]
 \[ 870  164\]\]

\[\[7774  184\]
 \[ 915  169\]\]

\[\[7770  177\]
 \[ 912  183\]\]

\[\[7818  196\]
 \[ 866  162\]\]

KNN近邻

classifier = KNeighborsClassifier(n_neighbors =13,metric = 'minkowski' , p=2)
print("Mean accuracy: ",accuracyknn/K)
print("The best AUC: ", bestaucknn)
\[\[7952   30\]
 \[1046   15\]\]

\[\[7987   30\]
 \[1010   15\]\]

\[\[7989   23\]
 \[1017   13\]\]

\[\[7920   22\]
 \[1083   17\]\]

\[\[7948   21\]
 \[1052   21\]\]

高斯朴素贝叶斯

kf = KFold(n_splits=K, shuffle=True)
gaussian = GaussianNB()
\[\[7340  690\]
 \[ 682  331\]\]

\[\[7321  633\]
 \[ 699  389\]\]

\[\[7291  672\]
 \[ 693  386\]\]

\[\[7300  659\]
 \[ 714  369\]\]

\[\[7327  689\]
 \[ 682  344\]\]

``````
models = pd.DataFrame({
    'Model': \['KNN', 'Logistic Regression', 
              'Naive Bayes', 'Decision Tree','Random Forest'\],
    'Score': \[ accuracyknn/K, accuracylogreg/K, 
              accuracygnb/K, accuracydt/K, accuracyrf/K\],
    'BestAUC': \[bestaucknn,bestauclogreg,bestaucgnb,
                bestaucdt,bestaucrf\]})

我们看到根据 AUC 值的最佳模型是朴素贝叶斯我们不应该太在意最低的 R2 分数,因为数据非常不平衡(很容易预测 y=0)。在混淆矩阵中,我们看到它预测了漂亮的价值真正值和负值。令我们惊讶的是,决策树的 AUC 约为 50%。


欠采样


我们尝试对变量 y=0 进行欠采样

gTrain, gValid = train\_test\_split

逻辑回归

predsTrain = logreg.predict(gTrainUrandom)

predsTrain = logreg.predict(gTrain20Urandom)

predsTrain = logreg.predict(gTrrandom)

决策树

print("Train AUC:", metrics.roc\_auc\_score(ygTrds))

随机森林

print("Train AUC:", metrics.roc\_auc\_score(ygTr, predsTrain),
      "Valid AUC:", metrics.roc\_auc\_score(ygVd, preds))

KNN近邻

print("Train AUC:", metrics.roc\_auc\_score(ygTrm, predsTrain),
      "Valid AUC:", metrics.roc\_auc\_score(ygVal10, preds))

高斯朴素贝叶斯

print("Train AUC:", metrics.roc\_auc\_score(ygTraom, predsTrain),
      "Valid AUC:", metrics.roc\_auc\_score(ygid, preds))

过采样


我们尝试对变量 y=1 进行过采样

feates = datolist()
print(feures)
feaes.remove('y')

print(gTrainOSM.shape)
(31945, 39)
``````
smt = SMOT
(32345, 39)
``````
smt = SMOT
(32595, 39)
``````
ygTrain10OSM=gTrain10OSM\['y'\]
gTrain10OSM=gTrain10OSM.drop(columns=\['y'\])

逻辑回归

print("Train AUC:", metrics.roc\_auc\_score(ygTrin10SM, predsTrain),
      "Valid AUC:", metrics.roc\_auc\_score(ygValid, preds))

决策树

dt2.fit(,ygTranOS)
predsTrain = dtpreict(TrainOSM)
preds = dt2.predict(gValid)

随机森林

random_forest.fit(rainOSM, ygTranOS)
predsTrain = random_forest.prect(gTraiOSM)
p

KNN近邻

classifier.fit(granOSM, yTanOSM)
predsTrain = classifier.predict(gTaiSM)
preds = classifier.predict(Vaid)

高斯朴素贝叶斯

gaussian.fit(gTriOM, ygrainM)
predsTrain = gaussian.predcti)

结论


我们看到欠采样和过采样变量 y 对 AUC 没有太大帮助。

相关文章
|
机器学习/深度学习 算法 数据可视化
机器学习模型中特征贡献度分析:预测贡献与错误贡献
本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。
1484 4
|
机器学习/深度学习 数据采集 分布式计算
大数据分析中的机器学习基础:从原理到实践
大数据分析中的机器学习基础:从原理到实践
917 3
|
机器学习/深度学习 数据可视化 大数据
机器学习与大数据分析的结合:智能决策的新引擎
机器学习与大数据分析的结合:智能决策的新引擎
919 15
|
机器学习/深度学习 数据采集 运维
机器学习在运维中的实时分析应用:新时代的智能运维
机器学习在运维中的实时分析应用:新时代的智能运维
566 12
|
数据采集 移动开发 数据可视化
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
这篇文章介绍了数据清洗、分析、可视化、模型搭建、训练和预测的全过程,包括缺失值处理、异常值处理、特征选择、数据归一化等关键步骤,并展示了模型融合技术。
1899 1
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
|
机器学习/深度学习 数据可视化 数据挖掘
机器学习中空间和时间自相关的分析:从理论基础到实践应用
空间和时间自相关是数据分析中的重要概念,揭示了现象在空间和时间维度上的相互依赖关系。本文探讨了这些概念的理论基础,并通过野火风险预测的实际案例,展示了如何利用随机森林模型捕捉时空依赖性,提高预测准确性。
1316 0
机器学习中空间和时间自相关的分析:从理论基础到实践应用
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
644 4
|
机器学习/深度学习 分布式计算 算法
【大数据分析&机器学习】分布式机器学习
本文主要介绍分布式机器学习基础知识,并介绍主流的分布式机器学习框架,结合实例介绍一些机器学习算法。
|
机器学习/深度学习 人工智能 数据处理
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
探测外太空中的系外行星是天文学和天体物理学的重要研究领域。随着望远镜观测技术的进步和大数据的积累,科学家们已经能够观测到大量恒星的光度变化,并尝试从中识别出由行星凌日(行星经过恒星前方时遮挡部分光线)引起的微小亮度变化。然而,由于数据量巨大且信号微弱,传统方法难以高效准确地识别所有行星信号。因此,本项目旨在利用机器学习技术,特别是深度学习,从海量的天文观测数据中自动识别和分类系外行星的信号。这要求设计一套高效的数据处理流程、构建适合的机器学习模型,并实现自动化的预测和验证系统。
679 1
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
544 2

推荐镜像

更多