1、项目简介
1) 数据说明:
本数据集来自和鲸社区,共有7043条数据,共计21个字段数据包含以下字段:
- customerID :客户
- id gender : 性别
- SeniorCitizen : 是否为老年人,取值为0和1,0为否,1为是
- Partner : 是否拥有伴侣
- Dependents : 是否有家属
- tenure : 入网时长(月)
- PhoneService : 是否订阅电话服务
- MultipleLines: 是否有多条线路(是,否,没有电话服务)
- InternetService : 网络服务提供商(DSL,光纤,否)
- OnlineSecurity : 在线服务安全性(是,否,无网络服务)
- OnlineBackup : 在线备份服务(是,否,无网络服务)
- DeviceProtection :设备保护(是,否,无网络服务)
- TechSupport : 技术支持(是,否,无网络服务)
- StreamingTV :流媒体电视(是,否,无网络服务)
- StreamingMovies :流媒体电影(是,否,无网络服务)
- Contract :合同期限(每月,一年,两年)
- PaperlessBilling :是否无纸化账单(是,否)
- PaymentMethod :支付方式(电子支票,邮寄支票,银行自动转账,信用卡自动支付) - MonthlyCharges :每月收取费用
- TotalCharges :总收取费用
- Churn :是否流失
2)需求:
根据现有信息选择合适模型建模预测客户是否流失。
2、特征处理及选择
2.1、初步探索清洗
导入库并加载数据
# 导入常用库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 加载数据
data=pd.read_csv('tel_data.csv')
查看数据基本信息
data.info()
数据没有缺失值。
查看数据是否有重复值
# 查看数据是否有重复值
data.duplicated().value_counts()
# 对数据做描述性统计,查看特征情况
data.describe([0.1,0.25,0.5,0.75,0.9]).T
分离目标变量和特征变量
# 分离特征变量和目标变量
x = data.iloc[:, :-1]
y = data.iloc[:, -1]
删除customerID
# 特征变量中的customerID 对目标变量没有影响,将其删去
x.drop(columns='customerID',inplace=True)
2.2、特征处理
1)处理分类变量
考虑后续建模采用树模型,对类别变量进行顺序编码。
from sklearn.preprocessing import OrdinalEncoder
# 取出类别变量列名
category_list = x.columns[x.dtypes=='object'].tolist()
# 进行顺序编码
x_cate_rfc = OrdinalEncoder().fit_transform(x.loc[:,category_list])
2)处理连续型变量
对连续型变量进行标准化
# 取出连续型变量的列
qualitative_list = x.columns.tolist()
for i in category_list:
qualitative_list.remove(i)
ss = StandardScaler()
x_qualitative = ss.fit_transform(x.loc[:,qualitative_list])
3)处理目标变量
# 对标签进行编码
from sklearn.preprocessing import LabelEncoder
L_en = LabelEncoder()
L_en.fit(y)
y = pd