目的:针对银行客户行为和统计数据实现客户流失预测任务。
一. 数据准备
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")