森林的电信客户分类预测"/>
基于随机森林的电信客户分类预测
一、 导入库包
import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from imblearn.over_sampling import SMOTE
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import tree
import prettytable
from sklearn.metrics import accuracy_score,auc,confusion_matrix,f1_score,precision_score,recall_score,roc_curve#分类指标库
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from subprocess import call
二、 数据审查
#读取数据
train_set=pd.read_excel('./typedata.xls',sheet_name='training')
test_set=pd.read_excel('./typedata.xls',sheet_name='test')
data=pd.concat([train_set,test_set])#合并两个工作表
#数据预览
print('{:-^60}'.format('预览前3条源数据'),'\n',train_set.head(3).T)
print('{:-^60}'.format('源数据描述性统计'),'\n',train_set.describe(include='all').round(2).T)#输出包括离散型变量在内的所有变量描述性统计
print('{:-^60}'.format('查看源数据的数据类型'),'\n',train_set.dtypes)
#查看缺失值
na_lines = train_set.isnull().any(axis=1)
print('{:-^60}'.format('查看缺失值'))
print ('具有缺失值的行记录总数: {0}'.format(na_lines.sum())
本实验源数据共有1990条记录,包含12个变量,其中GENDER、MARITAL_STATUS、PAY_METD、PAY_METD_PREV、CUSTOMER_TYPE均为离散型变量;AGE、CUSTOMER_CLASS、LINE_TENURE、SUBPLAN、SUBPLAN_PREVIOUS、NUM_TEL、NUM_ACT_TEL均为数值型变量;CUSTOMER_TYPE为目标变量,其余均为预测变量。
通过describe(include=‘all’)得到所有变量的最大值、最小值、唯一值个数、众数等数据信息,观察输出结果可知,SUBPLAN_PREVIOUS、NUM_TEL、NUM_ACT_TEL的均值与最大值相差较大,存在数据异常的可能性。此外,通过isnull()方法的输出结果可知,源数据没有缺失值。
三 、数据预处理及清洗
本实验的数据预处理及清洗包括类型转换、重复值处理、异常值处理、多重共线性问题、编码转换、样本不均衡处理。
1、查看数据类型可知,源数据年龄字段为浮点型。利用groupby()对年龄的值域分布进行统计,可知存在48条年龄为37.411584的异常记录,且根据经验判断,年龄为4同属于异常值,因此利用astype(int)将字段转成整数,并利用data[-data[‘AGE’].isin([4])]更新剔除年龄值为4的异常记录后的数据集。
print('{:-^60}'.format('年龄值域分布'),'\n',data.groupby(by='AGE')['CUSTOMER_TYPE'].count())
data['AGE']=data['AGE'].astype(int)#将年龄字段转成整数型
data=data[-data['AGE'].isin([4])
更多推荐
基于随机森林的电信客户分类预测
发布评论