银行客户流失预测

针对银行客户流失预测,主要流程分为:特征预处理、特征选择,分类模型选择与训练。主要工作如下:

1:特征预处理与选择

对性别进行哑变量处理;

对是否有****信息将布尔值转换01表示;

画出年龄直方图可以看出大致呈正态分布,对年龄分段处理后缺失值采用插补方式;

资产当前总额=存储类资产当前总额=本币存储当前总金额   月日均余额=存储类资产月日均余额=本币存储月日均余额  分别删除其中两项;

针对*NUM,*DUR,*AMT,*BAL字段分别进行特征提取(SelectKBest)达到降维效果;

最后整合数据,特征标准化处理最终为44个特征(StandardScaler)。

2:分类模型选择与训练

数据集划分:采用K折交叉验证,train_test_split自主切分数据集

模型选择:采用了决策树,提升树(GBDT/XGBoost),SVM(libsvm)神经网络(多层感知器算法)分别训练模型

3:对应python主要代码:

  • decisiontree.py
from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score

X_train,X_test,y_train,y_test=train_test_split(StS,y,test_size=0.4,random_state=0)
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X_train, y_train)
pre_labels = clf.predict(X_test)
print(‘accuracy score:‘,accuracy_score(y_test,pre_labels,normalize=True))
print(‘recall score:‘,recall_score(y_test,pre_labels))
print(‘precision score:‘,precision_score(y_test,pre_labels))
print(‘f1  score:‘,f1_score(y_test,pre_labels))
  • XGBoost.py
import xgboost as xgb
from sklearn.preprocessing import StandardScaler
#记录程序运行时间
import time
start_time = time.time()
from xgboost.sklearn import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,classification_report,roc_auc_score
bankChurn = pd.read_csv(‘D:/work/lost data and dictionary/test/bankChurn.csv‘)#原始数据
bankChurn_data = pd.read_csv(‘D:/work/lost data and dictionary/test/bankChurn_data.csv‘)#预处理数据
Y_train=bankChurn[‘CHUR0_CUST_I0D‘]#标签
StS=StandardScaler().fit_transform(bankChurn_data)
X_train,X_test,y_train,y_test=train_test_split(StS,Y_train,test_size=0.4,random_state=None)
print(X_train.shape, X_test.shape)
#模型参数设置
xlf = xgb.XGBClassifier(max_depth=10,
                        learning_rate=0.1,
                        n_estimators=10,
                        silent=True,
                        objective=‘binary:logistic‘,
                        nthread=-1,
                        gamma=0,
                        min_child_weight=1,
                        max_delta_step=0,
                        subsample=0.85,
                        colsample_bytree=0.7,
                        colsample_bylevel=1,
                        reg_alpha=0,
                        reg_lambda=1,
                        scale_pos_weight=1,#这个值是因为类别十分不平衡。
                        seed=1440)

xlf.fit(X_train, y_train, eval_metric=‘error‘, verbose = True, eval_set = [(X_test, y_test)],early_stopping_rounds=100)
# 计算 auc 分数、预测
preds = xlf.predict(X_test)
pre_pro = xlf.predict_proba(X_test)[:,1]
print(‘accuracy score:‘,accuracy_score(y_test,preds ,normalize=True))
print(‘classification report:‘,classification_report(y_test,preds ))
print(‘precision score:‘,precision_score(y_test,preds ))
print(‘roc_auc_score:%f‘ % roc_auc_score(y_test,pre_pro))
#输出运行时长
cost_time = time.time()-start_time
print("xgboost success!",‘\n‘,"cost time:",cost_time,"(s)......")
  • libsvm.py
import os
os.chdir(‘C:\libsvm-2.81\python‘)
from svmutil import *
from sklearn.metrics import accuracy_score,classification_report
y,x=svm_read_problem(‘bankchurnLibsvm.txt‘)#转换成libsvm格式
# print(type(x))
x=np.array(x)
y=np.array(y)
stratified_folder=StratifiedKFold(n_splits=4,random_state=0,shuffle=True)
for train_index,test_index in stratified_folder.split(x,y):
    print(‘shuffled train index:‘,train_index)
    print(‘shuffled test index:‘, test_index)
    print(‘shuffled x_train:‘, x[train_index])
    print(‘shuffled x_test:‘, x[test_index])
    print(‘shuffled y_train:‘, y[train_index])
    print(‘shuffled y_test:‘, y[test_index])
    print(‘.......‘)
y_train=list(y[train_index])
y_test=list(y[test_index])
x_train=list(x[train_index])
x_test=list(x[test_index])
m=svm_train( y_train,x_train,‘-c 4  -g 2‘)
p_label,p_acc,p_val=svm_predict(y_test,x_test,m)
print(‘accuracy score:‘,accuracy_score(y_test,p_label ,normalize=True))
print(‘classification report:‘,classification_report(y_test,p_label ))
  • BPtest

    import pandas as pd
    import numpy as np
    from sklearn.model_selection import cross_val_score
    from sklearn.neural_network import MLPClassifier
    from sklearn.metrics import accuracy_score,roc_auc_score
    from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,classification_report
    bankChurn = pd.read_csv(‘D:/work/lost data and dictionary/test/bankChurn.csv‘)
    X_data = pd.read_csv(‘D:/work/lost data and dictionary/test/bankChurn_data.csv‘)
    X_data=X_data.values[:,:]
    Y_label=bankChurn[‘CHUR0_CUST_I0D‘]
    Y_label=Y_label.values[:]
    data=np.hstack((X_data,Y_label.reshape(Y_label.size,1)))##将样本集与标签合并
    np.random.shuffle(data)##混洗数据
    X=data[:,:-1]
    Y=data[:,-1]
    train_x=X[:-8620]
    test_x=X[-8620:]
    train_y=Y[:-8620]
    test_y=Y[-8620:]#数据5:5
    ######mlpclassifier_data():###多层感知机算法,BP算法
    classifier=MLPClassifier(hidden_layer_sizes=(30,),activation=‘logistic‘,max_iter=1000)
    clf=classifier.fit(train_x,train_y)
    train_score=classifier.score(train_x,train_y)
    test_score=classifier.score(test_x,test_y)
    print(‘train_score:‘,train_score)
    print(‘test_score:‘,test_score)
    ####得到其他分类效果####
    pre_labels = clf.predict(test_x)
    pre_pro = clf.predict_proba(test_x)[:,1]
    print(‘accuracy score:‘,accuracy_score(test_y,pre_labels,normalize=True))
    print(‘recall score:‘,recall_score(test_y,pre_labels))
    print(‘classification report:‘,classification_report(test_y,pre_labels))
    print(‘precision score:‘,precision_score(test_y,pre_labels))
    print(‘f1  score:‘,f1_score(test_y,pre_labels))
    print(‘roc_auc_score:%f‘ % roc_auc_score(test_y,pre_pro))
    

    运行结果比较:

      DT XGBoost Libsvm BP
    Accuracy 0.856 0.91 0.894 0.90
    Precision 0.86 0.89 0.84 0.88
    Recall 0.86 0.91 0.89 0.90
    F1
    score
    0.86 0.89 0.85 0.87
时间: 2024-12-13 15:43:30

银行客户流失预测的相关文章

KNIMI数据挖掘建模与分析系列_004_利用KNIMI做客户流失预测

利用KNIMI做客户流失预测 老帅 20150801 http://blog.csdn.net/shuaihj 一.测试数据 中国移动客服数据 需要测试数据,请留下邮箱 二.统计已流失客户 1.读取移动客服数据(客户流失.xlsx) 2.统计已流失客户 参数设置 统计结果 3.数据流 三.贝叶斯预测客户流失 1.字符类型转换 将"流失"列转换为字符串类型 2.划分训练集和测试集 取30%作为训练数据,剩余70%作为测试数据,我们将预测这70%客户的流失率: 设置"流失&quo

基于Apache Spark机器学习的客户流失预测

流失预测是个重要的业务,通过预测哪些客户可能取消对服务的订阅来最大限度地减少客户流失.虽然最初在电信行业使用,但它已经成为银行,互联网服务提供商,保险公司和其他垂直行业的通用业务. 预测过程是大规模数据的驱动,并且经常结合使用先进的机器学习技术.在本篇文章中,我们将看到通常使用的哪些类型客户数据,对数据进行一些初步分析,并生成流失预测模型 - 所有这些都是通过Spark及其机器学习框架来完成的. 使用数据科学更好地理解和预测客户行为是一个迭代过程,其中涉及: 1.发现和模型创建: 分析历史数据.

大数据时代,银行BI应用的方案探讨

大数据被誉为21世纪发展创造的新动力,BI(商业智能)成为当下最热门的数据应用方案.据资料显示:当前中国大数据IT投资最高的为五个行业中,互联网最高.其次是电信.金融.政府和医疗.而在金融行业中,银行拨得头筹,其次才是证券和保险. 如何有效应用大数据.云计算等新信息技术,创造价值和财富,创造未来,是我们面临的巨大机遇和挑战. 下面把银行大数据应用做个详细全面的介绍. 一.大数据金融应用场景 从大数据技术特性以及银行近几年的应用探索来看,大数据在银行商业智能方面的应用主要体现在以下几个方面: 1.

民生银行十五年的数据体系建设,深入解读阿拉丁大数据生态圈、人人BI 是如何养成的?(转载)

早在今年的上半年我应邀参加了由 Smartbi 主办的一个小型数据分析交流活动,在活动现场第一次了解到了民生银行的阿拉丁项目.由于时间关系,嘉宾现场分享的内容非常有限.凭着多年对行业研究和对解决方案的嗅觉与敏感性,意识到这个阿拉丁项目的完整性和独特性超出了以往我所接触过的所有 BI 领域的项目案例,很值得再次深入的探讨.学习与研究.对于很多公司在建设自身的 BI 或者大数据平台体系上,这个项目案例有很好的参考与借鉴意义.(另外一个我个人比较推崇的大数据建设的案例是美的的大数据平台建设案例.) 在

大数据应用场景

了解客户 1. 社交媒体客户分析 2.推广优化 3.市场细分 4.客户利润率 5.点击流分析 6.CDR分析 7.多渠道交互分析 8.忠诚度项目分析 9.客户流失预测 在速度和规模上实现新产品创新 1.社会媒体-产品/品牌情感分析 2.品牌战略 3.市场分析 4.射频识别与追踪分析 5.交易型分析创建基于产品/服务视角 零延迟操作 1. 智能电网/计量管理 2.分配负荷预测 3.销售报告 4.库存和销售优化 5.期权交易 6. ICU患者监控 7.疾病监控 8. 交通网络优化 9. 存储性能 1

离线轻量级大数据平台Spark之MLib机器学习库概念学习

Mlib机器学习库 1.1机器学习概念 机器学习有很多定义,倾向于下面这个定义.机器学习是对能通过经验自动改进的计算机算法的研究.机器学习依赖数据经验并评估和优化算法所运行出的模型.机器学习算法尝试根据训练数据使得表示算法行为的数学目标最大化,并以此来进行预测或作出决定.机器学习问题分类为几种,包括分类.回归.聚类.所有的机器学习算法都经过一条流水线:提取训练数据的特征->基于特征向量训练模型->评估模型选择最佳.特征提取主要是提取训练数据中的数值特征,用于数学建模.机器学习一般有如下分类:

微软机器学习Azure Machine Learning入门概览

Azure Machine Learning(简称“AML”)是微软在其公有云Azure上推出的基于Web使用的一项机器学习服务,机器学习属人工智能的一个分支,它技术借助算法让电脑对大量流动数据集进行识别.这种方式能够通过历史数据来预测未来事件和行为,其实现方式明显优于传统的商业智能形式.微软的目标是简化使用机器学习的过程,以便于开发人员.业务分析师和数据科学家进行广泛.便捷地应用.这款服务的目的在于“将机器学习动力与云计算的简单性相结合”.AML目前在微软的Global Azure云服务平台提

Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”. l“机器学习是对能通过经验自动改进的计算机算法的研究”. l“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准.” 一种经常引用的英文定义是:A computer program is said

数据分析在零售业八大应用点总结

1.销售指标分析: 主要分析各项销售指标,例如毛利.毛利率.坪效.交叉比.销进比.盈利能力.周转率.同比.环比等等:而分析维又可从管理架构.类别品牌.日期.时段等角度观察,这些分析维又采用多级钻取,从而获得相当透彻的分析思路:同时根据海量数据产生预测信息.报警信息等分析数据:还可根据各种销售指标产生新的透视表,例如最常见的ABC分类表.商品敏感分类表.商品盈利分类表等. 这些复杂的指标在原来的数据库中是难以实现的,老总们虽然知道他们非常有用,但由于无法得到,使得这些指标的地位也若有若无.直到BI