检测出最小的异常值 用于替换异常值
minUpperBound = min([val for (val, out) in zip(df.DebtRatio, mad_based_outlier(df.DebtRatio)) if out == True]) 这句话的意思是 mad_based_outlier(df.DebtRatio) 返回true的时候 说明大于阈值 是异常值 找到所有的异常值 然后取最小值 得到最小的异常值
- 替换异常值
大于异常值的数都用异常值替换
查看这一列的数据情况
画一个箱线图
查看月收入的数据情况
同样的方式 找最小的异常值 大于最小异常值的数值都用异常值替换
其他参数类似 不重复说了
数据切分
将数据切分成训练集和测试集
- 导入库
from sklearn.model_selection import train_test_split
- 训练数据和测试数据分割
Y = df["SeriousDlqin2yrs"] X = df.iloc[:, 1:] # 测试和训练数据进行3:7的比例进行切分 random_state定一个值是的每次运行的时候不会被随机分 X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=123) train = pd.concat([Y_train, X_train], axis=1) test = pd.concat([Y_test, X_test], axis=1) train.to_csv('TrainData.csv',index=False) test.to_csv('TestData.csv',index=False)
探索性分析
一般用直方图、散点图、箱线图分析 下面利用直方图和核密度估计画图,Age、MonthlyIncome、NumberOfOpenCreditLinesAndLoans大致呈正太分布,符合统计分析
fig = plt.figure() # alpha:设定图表颜色 fig.set(alpha=0.2) # subplot2grid 在一张大图里分列几个小图 #在网格的特定位置创建轴对象 # 允许轴对象跨越多个行或列 # 纵轴2,横轴3 位于第一个位置 plt.subplot2grid((2, 3), (0, 0)) # hist 直方图 # bins 设定直方图中分组的数量 # figsize 是一个tuple,用来指定width和height的inch(厘米) train["age"].plot(kind="hist", bins=30, figsize=(12, 6), grid=True) plt.title("Hist of Age") # 解决中文的显示问题 plt.rcParams["font.sans-serif"]=["SimHei"] # 解决保存图像是负号'-'显示为方块的问题 plt.rcParams["axes.unicode_minus"] = False plt.tight_layout() # 调整子图之间的间距,紧凑显示图像 plt.show()
特征选择
1、变量分箱 将连续变量离散化 将多状态的离散变量合并成少状态 2、变量分箱重要性 a 稳定性 避免特征中无意义的波动对评分带来波动 b 健壮性 避免极端值的影响 3、变量分箱优势 a 可以将缺失值作为独立的箱带入模型中 b 将所有的变量变换到相似的尺度上 变量分箱劣势 a 计算量大 b 分箱之后需要编码 4、变量分箱常用方法 a 有监督 a-1 Best-Ks a-2 ChiMerge (卡放分箱) b 无监督 b-1 等距 b-2 等频 b-3 聚类
后续
下一篇写下 特征分箱等实现逻辑