当前位置:   article > 正文

电信客户流失预测——逻辑回归实战_基于逻辑回归电信客户流失原因

基于逻辑回归电信客户流失原因

项目背景

AT&T数据,⽤户个⼈,通话,上⽹等信息数据,充分利⽤数据预测客户的流失情况,帮助挽留⽤户,保证⽤户基数和活跃程度。

数据信息

数据集下载:电信客户数据集

  1. CustomerID 客户ID
  2. Gender 性别
  3. partneratt 配偶是否也为att⽤户
  4. dependents_att 家⼈是否也是att⽤户
  5. landline 是否使⽤att固话服务
  6. internet_att/internet_other 是否使⽤att的互联⽹服务
  7. Paymentbank/creditcard/electroinc 付款⽅式
  8. MonthlyCharges 每⽉话费
  9. TotalCharges 累计话费
  10. Contract_month/1year ⽤户使⽤⽉度/年度合约
  11. StreamingTv/streamingMovies 是否使⽤在线视频或者电影app
  12. Churn 客户转化的flag

处理流程

  1. 基本数据处理
    • 基本数据信息
    • 缺失值和异常值处理
  2. 描述性分析(单变量分析)
    • 连续型变量的指标
    • 离散型变量的类别
    • 预测样本比例
  3. 相关性分析(多变量相关性)
    • 连续变量的相关性分析
    • 相关性热力图
  4. 特征工程
    • 数据分割
    • 数据标准化处理
  5. 逻辑回归模型
    • 逻辑回归应用
    • 模型评估

具体代码如下

导入所有用到的包

# 导入包
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

1.基本数据处理

导入数据并查看数据信息

# 导入数据集,并查看数据基本信息
df = pd.read_csv('churn.csv', sep=',', encoding='utf-8')
df.info()
  • 1
  • 2
  • 3

在这里插入图片描述
离散变量数值化,并去除没用的特征

# 离散型变量转化为数值型
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

描述性分析

根据是否流失进行分组

churn_df = churn_df.rename(columns={'churn_yes':'flag'})
churn_df.flag.value_counts(1)
  • 1
  • 2

在这里插入图片描述
因为大部分数据都是0或者1,所以不对数据进行描述性分析

相关性分析

查看相关性

churn_df.groupby('flag').mean()
  • 1

在这里插入图片描述
目标特征的相关性排序

cor_data = churn_df.corr()
cor_data[['flag']].sort_values('flag', ascending=False)
  • 1
  • 2

在这里插入图片描述
相关性热力图

sns.heatmap(data=cor_data)
  • 1

在这里插入图片描述
相关性较强的四组分类统计图

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
  • 1
  • 2
  • 3
  • 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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述
三个特征属性进行训练

# 对数据集进行分割
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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述
从以上两组数据可以看出,一开始选的四个特征属性有一定的相关性,导致流失AUC值较低,但降为三个特征属性后,AUC值升高,精确率也得到升高。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/584316
推荐阅读
相关标签
  

闽ICP备14008679号