from pandas import DataFrame
from numpy import nan as NA
from pandas import Series
import os
import pandas as pd
import numpy as np
import math
import random
from matplotlib import pyplot
from pandas.tools.plotting import scatter_matrix
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
from scipy.stats import chisquare
import numbers
import time
import datetime
from sklearn.preprocessing import LabelEncoder
import xgboost as xgb
from sklearn.metrics import accuracy_score
from xgboost import XGBClassifier
from sklearn.model_selection import KFold
from sklearn.cross_validation import cross_val_score
from sklearn.grid_search import GridSearchCV
from sklearn.model_selection import StratifiedKFold
#解决输出图片不能为含有中文
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
os.chdir('E://kaggle//risk')
bank_data=pd.read_csv('bankChurn_1.csv')
external_data=pd.read_csv('ExternalData_1.csv')
internal_dic=pd.read_csv('internal_dic.csv')
external_dic=pd.read_csv('external_dic.csv')
path='E://kaggle//risk//'
#观测单因子因素变量分布
#df--数据集
#col--需要研究的变量
#target--目标变量
#filepath--保存路径
#truncation-是否处理极端数据
def NumVarPerf(df,col,target,filepath,truncation=True):
#塞选出有效数据集
validDf = df.loc[df[col] == df[col]][[col,target]]
#测算有效数据集百分比,这里乘以1.0是因为python整数与整数相除还是整数,此举可以让结果变成浮点数。
validRcd=validDf.shape[0]*1.0/df.shape[0]
#以百分好数字输出
validRcdFmt='%.2f%%' %(validRcd*100)
#查看与提取一些统计量
descStats=validDf[col].describe()
mu='%.2e' % (descStats['mean'])
std='%.2e' % (descStats['std'])
maxVal= '%.2e' % (descStats['max'])
minVal = '%.2e' % (descStats['min'])
#类别型目标变量,不同类别所要研究自变量的数据,以下代码只适合两分类,且数字分别为0和1
x=validDf.loc[validDf[target] == 1][col]
y=validDf.loc[validDf[target] == 0][col]
#设定每个值的权重
xweights = 100*np.ones_like(x)/x.size
yweights = 100*np.ones_like(y)/y.size
#如果truncation为True,启用下方功能,主要作用是将超过95%分为点的数值改为95%分为点数值
if truncation == True:
pcnt95=np.percentile(validDf[col],95)
x=x.map(lambda x: min(x,pcnt95))
y=y.map(lambda y: min(y,pcnt95))
#使用matplotlib画图
#创建图画对象
flg1=pyplot.figure()
ax=flg1.add_subplot(111)
#画条形图
ax.hist(x,weights=xweights,alpha=0.5,label='流失客户')
ax.hist(y,weights=yweights,alpha=0.5,label='留存客户')
titleText = '是'+merge_dic[col]+'的条形图'+'\n'+'有效数据收集百分比为:'+str(validRcdFmt)+','+'Mean='+str(mu)+','+'Std='+str(std)
ax.set(title=titleText,ylabel='各数据分类百分比')
ax.margins(0.05)
ax.set_ylim(bottom=0)
pyplot.legend(loc='upper right')
figSavePath=filepath+str(merge_di
使用XGBT构建——互联网金融客户流失模型
最新推荐文章于 2023-09-11 11:08:34 发布
本文介绍如何利用XGBT算法构建一个互联网金融领域的客户流失预测模型,通过详细的数据分析和建模过程,帮助理解用户行为,降低客户流失率。
摘要由CSDN通过智能技术生成