首先我们导入需要的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
import seaborn as sns
from sklearn.model_selection import train_test_split
其次我们看看数据长啥样
data = pd.read_csv('data.csv',encoding='gbk')
data.head()
# 首先看下整个测试数据集的样本分布
data.groupby(['status']).count()
#大概3:1,预期是未逾期的三分之一左右,那我们就遇到了第一个问题,样本分布不均衡
# 查看数据整体概况
data.info()
data.shape
# 特征太多了,这样看好像也看不出啥,换个方式,只看缺失值的情况
# 查看每个特征缺失值的数量
pd.set_option('display.max_rows',999) #这里查看数据的数量首先,所以修改默认的查看数量
data.isnull().sum()
#可以看到student_feature 特征缺失的数据较多
# 看下数值变量与status之间是否存在相关性
numerical_columns = []
for column_dtype in zip(data.columns,data.dtypes):
#print(column_dtype[1])
if column_dtype[1] != 'object':
numerical_columns.append(column_dtype[0])
numerical_columns
%matplotlib auto
plt.figure(figsize=(20,16))
sns.heatmap(data[numerical_columns].corr(),annot=True,fmt = '.2f',cmap = 'coolwarm')
#我想我应该太天真了,啥都看不到,真的,太密集了
此处图略去,放了也看不清
# 不知道怎么分析哪些是无用特征
# 先把异常值删除,对缺失数据进行补充
# 但是这里也不好判断异常值啊,因为部分异常值他可能就是逾期用户的数据
# 所以这里有一个思路,针对逾期和非逾期用户分开处理特征值,此次先不处理,先处理缺失值
# 缺失值的处理有多种填充方式,但是由于我对数据集还不是很了解,所以我先不做处理
直接划分数据集:
y = data['status']
X = data.drop(columns=['status'])
x_train,x_test,y_train,y_test = train_test_split(X,y,test_size = 0.3,random_state = 2018)
反思:做的很差,面对如此多的特征完全不知道如何下手,怎么判断哪些特征是无用特征,对于逾期用户本身就是异常用户该如何删除缺失值不知道如何处理,缺失值的填充方式,如何快速了解数据集