Deep Learning商户续约预测(高斯贝叶斯分类模型)

代码实现如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd

from sklearn.naive_bayes import GaussianNB

from sklearn.model_selection import cross_val_score,train_test_split

from sklearn.metrics import make_scorer,accuracy_score,confusion_matrix

import seaborn as sns

import matplotlib.pyplot as plt



#解决中文乱码问题

plt.rcParams['font.sans-serif'] = ['FZSongYi-Z13S']

#解决负号无法正常显示的问题

plt.rcParams['axes.unicode_minus']=False

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#读入数据,划分训练集和测试集

data=pd.read_csv("高斯贝叶斯.csv")

print(data.info)  #查看data数据信息

features=["注册时长","营收收入","成本"]

x=data[features]

y=data["是否续约"]

#划分训练集和测试集

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 用于绘制数据特征分布
def DrawHist(s):

l = len(s.columns)

fig = plt.figure(figsize=(10,l*3))

for i in range(0,1):

col_name = s.columns[i]

ax1 = fig.add_subplot(l,1,(i+1)) # 创建子图

ax1.set_title(col_name)

s[col_name].hist(bins=30,ax=ax1)

s[col_name].plot(kind = 'kde', secondary_y=True,ax=ax1)

plt.grid()

1
2
3
#绘制数据分布,观察数据分布是否符合高斯分布
DrawHist(x)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#建立高斯贝叶斯模型,使用全部数据进行K折交叉验证模型得分,K=10

gaussianNB=GaussianNB()

#K折交叉验证

kcvs=cross_val_score(gaussianNB,x,y,cv=10,scoring=make_scorer(accuracy_score))

#求10次准确率的平均分

kcvs_mean=kcvs.mean()

print("kcvs_mean:{}".format(kcvs_mean))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
labels=["不续约","续约"]

#使用训练集数据,训练模型

gaussianNB.fit(x_train,y_train)

#使用测试集数据,模型预测

y_test_predict=gaussianNB.predict(x_test)

#绘制混淆矩阵

Cm=confusion_matrix(y_test,y_test_predict,labels=labels)

Cm=pd.DataFrame(Cm,columns=labels,index=labels) #给混淆矩阵坐标轴加上标签

#绘制热力图

sns.heatmap(Cm,annot=True,fmt="d")  #fmt="d" 让数值不要以科学计数法显示

1
2
3
4
5
6
# 对华北地区进行预测

data_north = pd.read_csv("华北地区.csv")

print(data_north.describe())

1
2
3
4
data_north["预测续约"] = gaussianNB.predict(data_north[["注册时长","营收收入","成本"]])   # 预测是否续约

data_north

尾巴