注:以下总结参考CDA李御玺老师课件。
一、影响分类正确率的三个因素
(一)数据(Data)
• 若数据质量差(有空值(Null Values)、错误(Wrong Value)、离群值(Outlier)),容易造成分析结果不正确
• 若数据在目标字段上分布不平衡,容易造成模型无法建置
• 若训练数据太少,容易造成模型不稳定及效能不彰
(二) 属性(Attribute)
• 重要属性是否收集完整,不重要的属性是否有事先移除
• 属性间的相关性是否能掌握
(三)算法(Algorithm)
• 参数设定是否最佳
• 进阶算法(集成算法、深度学习算法)是否有使用
• 不同效能评估下的作法调整(F1, Profit)
二、数据清洗的主要工作
(一) 噪声(Noise)消除
1、噪声有哪些?
• 噪声包含错误值(类别型字段)及离群值(数值型字段)
2、噪声的后果?
• 噪声使探勘结果有相当大的偏差,必须将噪声移除或将其做适当的处理
3、 噪声的侦测方法
• 针对类别型字段,检视其分布 (找错误值)
• 针对数值型字段,检视其分布 (找离群值)
4、噪声的处理方法
(1)错误值(类别型字段)
• 视为空值
(2)离群值(数值型字段)
• 视为空值
• 天花板/地板法(盖帽法) • 函数校正法
• 取log10, log2, ln等
(二)空值(Missing Value)填补
1、数据遗缺原因
• 数据建立时未输入
• 故意或是不小心造成数据没有被输入
• 设备故障
• 例如收款机故障,导致顾客消费明细无法输入
• 因数据内容不一致而被删除
• 当数据内容不一致时,为了避免错误的数据影响分析的准确性,可能会
将该项数据以空值取代,因此产生数据的遗缺
2、数据遗缺处理方法——直接忽略法
(2.1)当数据有遗缺值时,则将整笔数据删除
• 处理数据遗缺最简单的方法
• 搜集的数据量很多,而遗缺数据只占一小部分时,便可直接删除
• 进行分类建模时,若数据的分类标记(Class Label)为空值,这笔数据因无
法被正确分类,便可直接删除
• 缺点
• 数据遗缺比例很可观时,会造成大量数据流失
(2.2)当字段有遗缺值时,则将整个字段删除
• 处理数据遗缺最简单的方法
• 遗缺数据占整个字段所有数据的比例过大时(>50%),便可直接删除
(2.3)当字段有遗缺值时,则将整个字段转换成指示变量(Indicator
Variable)
• 处理数据遗缺的特殊方法
• 遗缺数据占整个字段所有数据的比例过大时(>50%),便可使用此法
• 使用此法的理论基础为空值也是行为的另一种呈现
3、数据遗缺处理方法——人工填补法
• 处理数据遗缺的现象,可采用人工来填补
• 当某会员数据的生日字段有遗缺,可打电话询问该会员,以取得其生日
并加以填补
• 了解数据遗缺原因,采用适当的值填补
• 性别可用身分证字号来补
• 一些比例型的字段
• 缺点
• 当数据遗缺较多时,耗时且人力负担沉重
4、数据遗缺处理方法——自动填补法
(4.1)类别字段
(4.1.1)填入一个通用的常数值
• 如填入“未知/Unknown”,成为一个新的类别
(4.1.2)填入该字段的众数(Mode)
• 缺点是不够客观
• 可用分群的方式,分群求众数
(4.1.3)更精确作法是利用模型求出较可能的值来填入
• 把填遗缺值的问题当作是分类的问题
• 李老师用XGBoost方法,该方法的优点是传入的特征允许有缺失值的。
(4.2)数值字段
(4.2.1)填入一个通用的常数
• 如填入0(但需Check其意义)
(4.2.2)填入该字段的整体平均值(Mean)
• 不会对统计结果造成太大的影响
• 缺点是不够客观
• 可用分群的方式,分群求平均值
(4.2.3)更精确作法是利用模型求出较可能的值来填入
• 把填遗缺值的问题当作是预测的问题
• 李老师用XGBoost方法,该方法的优点是传入的特征允许有缺失值的。
• python自带用KNN模型填充
三、特征筛选
(一)以统计为基础的关键特征分析
1、定类特征的重要程度
(1.1)传统上可用卡方检定进行相关性检定
(1.2)利用卡方检定去计算各个类别型的输入属性与目标属性间的相关
程度
• 首先必需先计算其卡方值
• 然后根据卡方值查表算出P‐value
• P‐value越小代表此属性与目标属性间的相关程度越大,也越重要
• 在95%的信心水平之下,P‐value<0.05则为显著(重要)的关键属性
2、定量特征的重要程度
(2.1) 传统上可用T检定及ANOVA检定进行重要性分析
(2.2)利用ANOVA检定去计算各个数值型的输入属性与目标属性间的相
关程度
• 首先必需先计算其F‐value
• 然后根据F‐value查表算出P‐value
• P‐value越小代表此属性与目标属性间的相关程度越大,也越重要
• 在95%的信心水平之下,P‐value<0.05则为显著(重要)的关键属性
• 可接受标签是多分类
(2.3)利用T检定去计算各个数值型的输入属性与目标属性间的相
关程度
• P‐value越小代表此属性与目标属性间的相关程度越大,也越重要
• 在95%的信心水平之下,P‐value<0.05则为显著(重要)的关键属性
• 只接受标签是二分类
(二)降维
如:PCA
(三)利用算法输出关键特征
如:决策树
四、Python数据预处理常用函数
from sklearn.impute import SimpleImputer
# 1、使用训练集数据来训练我们的填补器,本质是在生成训练集中的众数,然后用训练集中的众数来同时填补训练集和测试集。
from sklearn.preprocessing import MinMaxScaler #归一化
# 1、改变数据分布形状
# 2、可批量处理多个特征
from sklearn.preprocessing import StandardScaler #标准化
# 1、不改变数据分布形状
# 2、可批量处理多个特征
from sklearn.preprocessing import PolynomialFeatures #多项式特征
from sklearn.preprocessing import binarize #二值化
# 1、用于伯努利贝叶斯算法,该算法要求每个特征是二分类的
from sklearn.preprocessing import OneHotEncoder #独热编码
# 1、即0-1编码,某一个定类特征有c类别,就产生c列新的特征
# 2、可批量处理多个特征
# 3、类似功能函数get_dummies()哑变量化
from sklearn.preprocessing import LabelEncoder #标签编码
# 1、编码:0,1,2,3,....
# 2、一般用于标签编码,也可用于定序特征进行编码
# 3、一次只能处理一个特征
from sklearn.preprocessing import OrdinalEncoder
# 1、编码:0,1,2,3,....
# 2、可批量处理多个定类特征,返回定序特征
# pip install mlxtend
from mlxtend.preprocessing import TransactionEncoder
# 1、编码:False True
# 2、用于关联规则
# 3、可批量处理
from sklearn.model_selection import train_test_split
# 1、stratify:实现分层抽样