贪心科技机器学习训练营(五)

先把来源写上

来源:贪心学院,https://www.zhihu.com/people/tan-xin-xue-yuan/activities

以前文章

机器学习中的逻辑回归

【机器学习】银行贷款违约预测

还有好多好文,欢迎关注我

在这里插入图片描述

逻辑回归预测银行客户是否会开设定期存款账户
逻辑回归要求预测值为 0 或者 1, 自变量特征值应该彼此独立。

该数据集来自UCI机器学习库(http://archive.ics.uci.edu/ml/datasets/Bank+Marketing),葡萄牙银行的电话营销。 分类目标是预测客户是否会开设到定期存款账户(预测值y)。

import pandas as pd
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt
# 字体大小
plt.rc("font", size=14)
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import seaborn as sns
sns.set(style="white")
sns.set(style="whitegrid", color_codes=True)

在这里插入图片描述

输入特征的含义:
银行客户数据:
  • 年龄(数字)
  • 工作:工作类型(分类:“行政”、“蓝领”、“企业家”、“女佣”、“管理”、“退休”、“自雇”、“服务”、“学生”、“技术人员”、“失业”、“未知”)。
  • 婚姻:婚姻状况(分类:“离婚”、“已婚”、“单身”、“未知”;注:“离婚”表示离婚或丧偶)
  • 教育(分类:‘basic.4y’、‘basic.6y’、‘basic.9y’、‘high.school’、‘文盲’、‘professional.course’、‘university.degree’、‘unknown’)
  • 违约:信用违约?(分类:“否”、“是”、“未知”)
  • 住房:有住房贷款吗?(分类:“否”、“是”、“未知”)
  • 贷款:有个人贷款吗?(分类:“否”、“是”、“未知”)
与当前活动的上一个联系人相关:
  • 联系人:联系人通信类型(分类:“手机”、“电话”)。
  • 月:每年的最后一个联系月(分类:“一月”、“二月”、“三月”、…、“十一月”、“十二月”)。
  • 每周10天:每周的最后一个联系日(分类:“周一”、“周二”、“周三”、“周四”、“周五”)。
  • 持续时间:上次接触持续时间,以秒为单位(数字)。重要提示:此属性高度影响输出目标(例如,如果持续时间=0,则y=‘no’)。然而,在执行呼叫之前,持续时间还不知道。而且,在通话结束后,Y显然是已知的。因此,这个输入应该只包含在基准测试中,如果想要有一个现实的预测模型,那么应该丢弃它。
其他属性:
  • 活动:在此活动期间为此客户端执行的联系人数(数字,包括最后一个联系人)
  • PDAys:上次从上一个活动联系客户后经过的天数(数字;*999表示以前没有联系客户)
  • 上一个:在此活动之前为此客户端执行的联系人数(数字)
  • poutcome:上一次营销活动的结果(分类:“失败”、“不存在”、“成功”)。
社会和经济背景属性
  • EMP.var.rate:就业变化率-季度指标(数字)
  • cons.price.idx:消费者价格指数-月度指标(数字)
  • cons.conf.idx:消费者信心指数-月度指标(数字)
  • 欧元同业拆借利率300万欧元:欧元同业拆借利率3个月利率-每日指标(数字)
  • 雇佣人数:员工人数-季度指标(数字)
输出变量(所需目标):
  • Y-客户是否已认购定期存款?(二进制:“是”,“否”)
data['education'].unique()
np.where 用法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

pd.crosstab用法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pd.get_dummies用法处理独热编码

在这里插入图片描述

处理文本的数据

在这里插入图片描述

在这里插入图片描述

使用SMOTE进行过采样(重点)

创建我们的训练数据后,我将使用SMOTE算法(合成少数过采样技术)对已经开户的用户进行上采样。 在高层次上,SMOTE:

通过从次要类(已经开户的用户)创建合成样本而不是创建副本来工作。
随机选择一个k-最近邻居并使用它来创建一个类似但随机调整的新观察结果。
使用如下命令安装: conda install -c conda-forge imbalanced-learn

X = data_final.loc[:, data_final.columns != 'y']
y = data_final.loc[:, data_final.columns == 'y'].values.ravel()
# 过采样
from imblearn.over_sampling import SMOTE
os = SMOTE(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
columns = X_train.columns
os_data_X,os_data_y=os.fit_sample(X_train, y_train)
os_data_X = pd.DataFrame(data=os_data_X,columns=columns )
os_data_y= pd.DataFrame(data=os_data_y,columns=['y'])
# we can Check the numbers of our data
print("过采样以后的数据量: ",len(os_data_X))
print("未开户的用户数量: ",len(os_data_y[os_data_y['y']==0]))
print("开户的用户数量: ",len(os_data_y[os_data_y['y']==1]))
print("未开户的用户数量的百分比: ",len(os_data_y[os_data_y['y']==0])/len(os_data_X))
print("开户的用户数量的百分比: ",len(os_data_y[os_data_y['y']==1])/len(os_data_X))
过采样以后的数据量:  51134
未开户的用户数量:  25567
开户的用户数量:  25567
未开户的用户数量的百分比:  0.5
开户的用户数量的百分比:  0.5

现在我们拥有完美平衡的数据! 您可能已经注意到我仅对训练数据进行了过采样

from sklearn.linear_model import LogisticRegression
from sklearn import metrics
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
logreg = LogisticRegression()
logreg.fit(os_data_X, os_data_y.values.reshape(-1))
y_pred = logreg.predict(X_test)
print('在测试数据集上面的预测准确率: {:.2f}'.format(logreg.score(X_test, y_test)))

在测试数据集上面的预测准确率: 0.86

在这里插入图片描述

from sklearn.metrics import roc_auc_score
from sklearn.metrics import roc_curve
logit_roc_auc = roc_auc_score(y_test, logreg.predict(X_test))
fpr, tpr, thresholds = roc_curve(y_test, logreg.predict_proba(X_test)[:,1])
plt.figure()
plt.plot(fpr, tpr, label='Logistic Regression (area = %0.2f)' % logit_roc_auc)
plt.plot([0, 1], [0, 1],'r--')
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(loc="lower right")
plt.savefig('Log_ROC')
plt.show()

在这里插入图片描述

不使用过采样

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘要努力。

顺便点一个赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值