赞
踩
AT&T数据,⽤户个⼈,通话,上⽹等信息数据,充分利⽤数据预测客户的流失情况,帮助挽留⽤户,保证⽤户基数和活跃程度。
数据集下载:电信客户数据集
导入所有用到的包
# 导入包
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score
from sklearn.linear_model import LogisticRegression
导入数据并查看数据信息
# 导入数据集,并查看数据基本信息
df = pd.read_csv('churn.csv', sep=',', encoding='utf-8')
df.info()
离散变量数值化,并去除没用的特征
# 离散型变量转化为数值型
churn_df = pd.get_dummies(df)
# 去除重复的数据
churn_df.drop(['Churn_No', 'gender_Female'], axis=1, inplace=True)
churn_df.columns = churn_df.columns.str.lower()
churn_df.head()
根据是否流失进行分组
churn_df = churn_df.rename(columns={'churn_yes':'flag'})
churn_df.flag.value_counts(1)
因为大部分数据都是0或者1,所以不对数据进行描述性分析
查看相关性
churn_df.groupby('flag').mean()
目标特征的相关性排序
cor_data = churn_df.corr()
cor_data[['flag']].sort_values('flag', ascending=False)
相关性热力图
sns.heatmap(data=cor_data)
相关性较强的四组分类统计图
sns.countplot(y = 'contract_month', hue='flag', data=churn_df)# 图1
sns.countplot(y = 'internet_other', hue='flag', data=churn_df) # 图2
sns.countplot(y = 'paymentelectronic', hue='flag', data=churn_df) # 图3
sns.countplot(y = 'streamingtv', hue='flag', data=churn_df) # 图4
由于数据比较准备,不用进行数据标准化处理,直接将特征工程和模型应用放在一起
四个特征属性进行训练
# 对数据集进行分割
y = churn_df['flag']
X = churn_df[['streamingtv', 'paymentelectronic','internet_other','contract_month']]
X_train, X_test, y_train, y_test = train_test_split(X,y, train_size=0.2, random_state=22)
# 由于数据集都是0和1,不用进行标准化或者归一化处理,直接进行模型训练
model = LogisticRegression()
model.fit(X_train, y_train)
print('系数:', model.coef_)
print('截距:', model.intercept_)
y_pre = model.predict(X_test)
print('模型评估:',classification_report(y_test,y_pre))
print('AUC值:', roc_auc_score(y_test, y_pre))
三个特征属性进行训练
# 对数据集进行分割
y = churn_df['flag']
X = churn_df[['streamingtv','internet_other','contract_month']]
X_train, X_test, y_train, y_test = train_test_split(X,y, train_size=0.2, random_state=22)
# 由于数据集都是0和1,不用进行标准化或者归一化处理,直接进行模型训练
model = LogisticRegression()
model.fit(X_train, y_train)
print('系数:', model.coef_)
print('截距:', model.intercept_)
y_pre = model.predict(X_test)
print('模型评估:',classification_report(y_test,y_pre))
print('AUC值:', roc_auc_score(y_test, y_pre))
从以上两组数据可以看出,一开始选的四个特征属性有一定的相关性,导致流失AUC值较低,但降为三个特征属性后,AUC值升高,精确率也得到升高。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。