数据处理
缺失数据替换,拟合,虚拟变量
获取缺失值数据密度分布,找到需要填充的字段,并决策使用哪类填充方法
1
2tain_data.info() # 查看各字段null值分布情况
sns.boxplot(tain_data[tain_data.MonthlyIncome < 1000000]['MonthlyIncome'], palette='Set3', orient='v') # 绘制箱图看数据分布点,去除异常点替换缺失值(所有可用的填充方式) 后续新key 可能出现index数量和填充值不同的异常, 这里主要用于展示各类型填充, 正常使用,直接替换原key就没有异常了.
script 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27按平均值替换:适用于呈现正态分布定量/定比数据
tain_data['MonthlyIncomeAvg' ] = tain_data['MonthlyIncome'].fillna(tain_data['MonthlyIncome'].mean())
按中位数替换()
tain_data['MonthlyIncomeAvg' ] = tain_data['MonthlyIncome'].fillna(tain_data['MonthlyIncome'].median())
按众数替换(mode):适用于固定类数据
tain_data['MonthlyIncomeAvg' ] = tain_data['MonthlyIncome'].fillna(tain_data['MonthlyIncome'].mode())
按特殊值替换(unknown)
tain_data['MonthlyIncomeExp' ] = tain_data['MonthlyIncome'].fillna('unknown')
人工手工替换
tain_data['MonthlyIncomeMan' ] = tain_data['MonthlyIncome'].fillna(-1)
热卡替换
@todo
K最近邻法(K-means clustering)替换(选定相邻特征单位必须一致)
kmeans_data = tain_data[:,[5,6,7,4]]
know_data = kmeans_data[kmeans_data.MonthlyIncome.notnull()].fillna(0).values
unknow_data = kmeans_data[kmeans_data.MonthlyIncome.isnull()].fillna(0).values
knn = KNeighborsClassifier(n_neighbors=2, weights='distance') # 初始化knn模型
knn.fit(know_data[:,0:2],know_data[:,2]) #加载训练集数据,训练模型
tain_data.loc[tain_data.MonthlyIncomeKnn.isnull(),'MonthlyIncomeKnn'] = knn.knn.predict(unknow_data[:,0:2]) # 预测数据,填充原空数据
拟合缺失值(缺失值必须是连续定量,才可使用该方法预测)
script 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16回归预测
@todo
极大似然估计( Maximum likelyhood)
@todo
多重插补
@todo
随机森林方法拟合
process_miss = tain_data.iloc[:,[5,0,1,2,3,4,6,7,8,9]]
XTrain = know_data[:,1:]
yTrain = know_data[:,0]
random_forest = RandomForestRegressor(n_jobs=-1, random_state=0, max_depth=3, n_estimators=200) #初始化随机森林模型
random_forest.fit(xTrain,yTrain) #训练
predict = random_forest.predict(unknow_data[:,1:]).round(0) #预测
tain_data.loc[tain_data.MonthlyIncome.isnull(),'MonthlyIncome'] = predict虚拟变量
异常数据处理(离群值等)
直接删除异常边界值
script 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26同类绘制箱型图
fig = plt.figure() #画布
ax = fig.add_subplot(111) # 1*1 布局 第1处
ax.boxplot([data_train.percentage, data_train.DebtRation]) # 给坐标数据值
ax.set_xticklabels(['percentage','DebtRation']) #给坐标lable内容
去除掉不符合认知的数据
data_train = data_train[(data_train.age > 0) & (data_train.age <100)] # 取0-100范围数据为正常
data_train = data_train[(data_train.percentage<1) & (data_train.DebtRatio < 1)] # 百分比阈值不超过1
变量0-59天,60-89天,90-三个异常值处理 ,同类绘制箱式图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.boxplot([data_train['30-59'],data_train['60-89'],data_train['90-']])
ax.set_xticklabels(['30-59','60-89','90-'])
plt.show()
三个变量都有离群值,查看各个特征离群值数量
data_train[data_train['30-59']>30].shape
data_train[data_train['60-89']>60].shape
data_train[data_train['90-']>90].shape
离群值数量较少,全部删除
data_train= data_train[data_train['30-59']<30]
data_train = data_train[data_train['60-89']<60]
data_train = data_train[data_train['90-']<90]
data_train = data_train.reset_index(drop=True)#重设索引
数据切分
原文作者:Neo Anderson
原文链接:https://www.neofaster.cc/archives/42b282e4.html
发表日期:October 21st 2019, 3:29:30 pm
更新日期:August 27th 2021, 7:08:47 pm
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可
-
Next Post构建信用评分卡模型通用步骤实现细节(三) - 探索性分析(Exploratory Data Analysis)
-
Previous Post构建信用评分卡模型通用步骤实现细节(一) - 数据获取