深度学习(1):BP神经网络实现银行客户流失预测

目的:针对银行客户行为和统计数据实现客户流失预测任务。

一. 数据准备

1. 数据集:

"select-data.csv"作为训练样本,数据预处理方式:归一化、数值化。

CreditScore:信用分数

EB:存贷款情况

EstimatedSalary:估计收入

Gender:性别(0,1)

Geography:用户所在国家/地区

HasCrCard:是否具有本行信用卡

IsActiveMember:是否活跃用户

NumOfProducts:使用产品数量

Tenure:当了本银行多少年用户

Exited:是否已流失,这将作为我们的标签数据

2. 导入库

  • XGBoost有一个很有用的函数“cv”,这个函数可以在每一次迭代中使用交叉验证,并返回理想的决策树数量。

  • xgboost的正则化参数的调优。(lambda, alpha)。这些参数可以降低模型的复杂度,从而提高模型的表现。

  • 使用方法其中一个是:estimator = xgb.XGBClassifier()/xgb.XGBRegressor()
  • from sklearn.metrics import 评价指标函数名称
  • from sklearn.preprocessing import StandardScaler数据标准化,

    常用的标准化方式是,减去平均值,然后通过标准差映射到均至为0的空间内。系统会记录每个输入参数的平均数和标准差,以便数据可以还原。很多ML的算法要求训练的输入参数的平均值是0并且有相同阶数的方差例如:RBF核的SVM,L1和L2正则的线性回归。

  • from sklearn.externals import joblib

    Joblib是一组在Python中提供轻量级管道的工具。特别是:函数的透明磁盘缓存和延迟重新计算(记忆模式),简单并行计算。Joblib经过了优化,特别是在处理大型数据时速度更快、更健壮,并且对numpy数组进行了特定的优化。保存或加载模型时用得到。

分类指标

(1)accuracy_score(y_true,y_pre) : 精度

(2)auc(x, y, reorder=False) : ROC曲线下的面积;较大的AUC代表了较好的performance。

(3)average_precision_score(y_true, y_score, average=‘macro’, sample_weight=None):根据预测得分计算平均精度(AP)

(4)brier_score_loss(y_true, y_prob, sample_weight=None, pos_label=None):The smaller the Brier score, the better.

(5)confusion_matrix(y_true, y_pred, labels=None, sample_weight=None):通过计算混淆矩阵来评估分类的准确性 返回混淆矩阵

(6)f1_score(y_true, y_pred, labels=None, pos_label=1, average=‘binary’, sample_weight=None): F1值 F1 = 2 * (precision * recall) / (precision + recall) precision(查准率)=TP/(TP+FP) recall(查全率)=TP/(TP+FN)

(7)log_loss(y_true, y_pred, eps=1e-15, normalize=True, sample_weight=None, labels=None):对数损耗,又称逻辑损耗或交叉熵损耗

(8)precision_score(y_true, y_pred, labels=None, pos_label=1, average=‘binary’,) :查准率或者精度; precision(查准率)=TP/(TP+FP)

(9)recall_score(y_true, y_pred, labels=None, pos_label=1, average=‘binary’, sample_weight=None):查全率 ;recall(查全率)=TP/(TP+FN)

(10)roc_auc_score(y_true, y_score, average=‘macro’, sample_weight=None):计算ROC曲线下的面积就是AUC的值,the larger the better

(11)roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True);计算ROC曲线的横纵坐标值,TPR,FPR
  TPR = TP/(TP+FN) = recall(真正例率,敏感度) FPR = FP/(FP+TN)(假正例率,1-特异性)

import pandas as pd
import xgboost as xgb

from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn import metrics

from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler

from sklearn.metrics import confusion_matrix
from sklearn.externals import joblib
from sklearn.metrics import accuracy_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import roc_curve, precision_recall_curve, auc, make_scorer, recall_score, accuracy_score, precision_score, confusion_matrix

import matplotlib.pyplot as plt

3.加载数据

  •  delimiter定界符
  • Python 使用特定符号或符号组合作为表达式、列表、字典、各种语句的字符串中的定界符,以及其他用途。
     
    (1)Python 定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
     
    (2)在 Python 定界符中的任何特殊字符都不需要转义;
     
    (3)Python 定界符中的 Python 变量会被正常的用其值来替换。
# load data
dataset = pd.read_csv('select-data.csv', delimiter=",")
  • 简单地查看数据——dataset.head( )
  • 审查数据的维度——dataset.shape
  • 审查数据的类型和属性——dataset.dtypes
  • 总结查看数据分类的分布情况——dataset.groupby(‘Target’).size()
  • 通过描述性统计分析数据——dataset.describe()
  • 理解数据属性的相关性——dataset.corr(method=‘pearson’)
  • 审查数据的分布状况——dataset.skew()
dataset.head()

4.查看数据情况

#查看数据情况
dataset.info()

 一共8149行,12列。

5.数据可视化

用 matplotlib能够完成一些基本的图表操作,而 Seaborn 库可以让这些图的表现更加丰富。

通过观察数据,我们对'age'进行直方图展示。但在绘图之前,我们观测到'age'字段中存在缺失值,需要先用 dropna() 方法删掉存在缺失值的数据,否则无法绘制出图形。

'kde' 是控制密度估计曲线的参数,默认为 True,不设置会默认显示,如果我们将其设为 False,则不显示密度曲线。

'bins'是控制分布矩形数量的参数,通常我们可以增加其数量,来看到更为丰富的信息。

import seaborn as sns

with sns.plotting_context("notebook",font_scale=1.5):
    sns.set_style("whitegrid")
    sns.distplot(dataset["Age"].dropna(),
                 bins=20,
                 kde=False,
                 color="green")
    plt.ylabel("Count")

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流萤数点

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值