在这个练习中,我们使用电信企业的客户流失数据集,Orange_Telecom_Churn_Data.csv。我们先读入数据集,做一些数据预处理,然后使用各种模型根据用户的特点来预测其是否会流失。
第一步:读入和处理数据
- 读入数据集,并查看其基本信息。
- 去除其中对预测无用的列,如“state",“area_code"和"phone_number”
- 把’intl_plan’和’voice_mail_plan’两列的值转换成布尔类型:‘yes’替换成’True’,'no’替换成’False’
# 读入数据集,并查看其基本信息
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv('Orange_Telecom_Churn_Data.csv')
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5000 entries, 0 to 4999
Data columns (total 21 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 state 5000 non-null object
1 account_length 5000 non-null int64
2 area_code 5000 non-null int64
3 phone_number 5000 non-null object
4 intl_plan 5000 non-null object
5 voice_mail_plan 5000 non-null object
6 number_vmail_messages 5000 non-null int64
7 total_day_minutes 5000 non-null float64
8 total_day_calls 5000 non-null int64
9 total_day_charge 5000 non-null float64
10 total_eve_minutes 5000 non-null float64
11 total_eve_calls 5000 non-null int64
12 total_eve_charge 5000 non-null float64
13 total_night_minutes 5000 non-null float64
14 total_night_calls 5000 non-null int64
15 total_night_charge 5000 non-null float64
16 total_intl_minutes 5000 non-null float64
17 total_intl_calls 5000 non-null int64
18 total_intl_charge 5000 non-null float64
19 number_customer_service_calls 5000 non-null int64
20 churned 5000 non-null bool
dtypes: bool(1), float64(8), int64(8), object(4)
memory usage: 786.3+ KB
# 去除“state","area_code"和"phone_number"三列
data = data.drop(["state", "area_code", "phone_number"], axis = 1)
# 把'intl_plan'和'voice_mail_plan'两列的值转换成布尔类型
data["intl_plan"] = data.intl_plan.map(lambda x: True if x=='yes' else False)
data["voice_mail_plan"] = data.voice_mail_plan.map(lambda x: True if x=='yes' else False)
第二步:生成X和y
- 将"churned"列之外的所有列作为X, "churned"列作为y
- 检查y列中所有类别的个数
- 划分成训练集和测试集
- 分别检查训练集和测试集中所有类别的个数
# 生成X和y
X = data[data.columns[:-1]]
y = data.churned
# 检查y中所有类别的个数
print(y.value_counts())
False 4293
True 707
Name: churned, dtype: int64
# 划分成训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 101)
# 分别检查训练集和测试集中所有类别的个数
print
8983


与梯度提升(Gradient Boost)算法模型&spm=1001.2101.3001.11974&articleId=129095256&d=1&t=3&u=5de3bd44b59e4c1db835e5b59df1b4cc)

被折叠的 条评论
为什么被折叠?



