查看全课大纲(第 8 / 35 节)
- 1.特征工程简介
- 2.特征工程的处理流程
- 3.数据与特征概述
- 4.数据统计、相似度与数据探索
- 5.数据探索工具 Pandas_profiling
- 6.工具应用:《泰坦尼克》分析报告
- 7.构造一个微型链家租房数据集用于演示
- 8.数据预处理综述
- 9.缺失值处理实操
- 10.异常值处理实操
- 11.连续值特征构建
- 12.类别型数据特征构建
- 13.特征幅度缩放
- 14.特征离散化
- 15.特征编码:让类别数据参与建模
- 16.特征变换
- 17.时间特征
- 18.特征衍生
- 19.自动化特征工具
- 20.特征选择综述
- 21.特征选择方法
- 22.过滤式特征选择方法实操
- 23.包裹式特征选择方法
- 24.嵌入式特征选择
- 25.混序法与混合法特征选择
- 26.特征降维综述
- 27.案例实操:特征降维
- 28.特征监控概述与指标
- 29.Iris 数据集特征漂移检测案例
- 30.特征监控实战:用分布对比检测数据漂移
- 31.实时特征监控
- 32.电商销量预测项目背景介绍
- 33.数据预处理和特征工程(一)
- 34.数据预处理和特征工程(二)
- 35.数据建模
数据预处理综述
约 9 分钟
小象实战讲义 · 特征工程精讲与实践
大家好,欢迎回到小象的《特征工程精讲与实践》课程。在上一章,我们学习了如何对数据进行探索性分析,对数据的全貌有了清晰的认识。然而,现实世界中的数据往往并不完美,存在各种“脏数据”问题,直接用于建模会严重影响模型效果。因此,在正式进行特征工程和建模之前,我们必须对数据进行“净化”处理,这就是本章的核心——数据预处理。本节作为本章的开篇,将系统性地介绍数据预处理的目标、作用以及主要方法,为你后续深入学习缺失值与异常值处理打下坚实基础。
💡 核心导读
本节你将了解到:
- 为什么需要数据预处理:理解现实世界数据的不完整性、不一致性等问题,以及这些问题对数据挖掘的负面影响。
- 数据预处理的目标与作用:明确预处理的核心目标是提升数据质量,进而提升模型的收敛效率和最终性能。
- 数据预处理的主要方法:系统学习数据清洗、数据集成、数据变换和数据规约这四大类方法及其各自的任务。
- 缺失值与异常值处理的初步认识:初步了解处理缺失值和异常值的常见思路,为后续小节做铺垫。
一、为什么需要数据预处理?
在学习和研究机器学习、深度学习算法时,我们接触到的样例数据集(如 Iris、Boston 房价等)通常都是经过精心整理、非常“干净”的。然而,在工业界的实际业务场景中,我们面对的数据往往是另一番景象。
现实世界中的数据,由于数据采集、传输、存储以及用户行为等多种原因,常常是不完整、不一致、含有噪声甚至冗余的“脏数据”。例如:
- 数据不完整:用户在填写问卷时跳过了某些选项(如性别、年龄未填)。
- 数据不一致:同一用户在不同页面填写的信息存在冲突(如职业信息前后矛盾)。
- 数据含噪声:存在明显偏离正常范围的异常值(如年龄登记为 300 岁)。
- 数据冗余:多个数据源中存在重复记录,或某些特征可由其他特征推导出来。
如果直接使用这样的“脏数据”进行数据挖掘或建模,不仅过程会非常困难,而且最终模型的效果也往往难以令人满意,无论怎么调参都难以达到理想状态。因此,为了从根本上提升数据挖掘的质量和模型解决问题的效果,数据预处理技术应运而生。
二、数据预处理的目标与作用
数据预处理的核心目标是 提升数据质量。围绕这个核心目标,预处理过程通常还会带来一些附加产出:
- 生成新特征:在预处理过程中,通过对原始数据的整合、变换,可能会构造出对建模更有价值的新特征字段。
- 整合数据:将来自不同数据源、不同格式的业务相关数据,整合成一张统一、一致的大表,便于后续分析。
总而言之,数据预处理的作用就是充当一个“净化器”,对包含脏数据的原始数据进行清洗和整合。经过预处理的数据,质量更高、更规整,能够显著提升后续模型训练的收敛效率以及最终的模型性能。
三、数据预处理的主要方法
数据预处理并没有一个放之四海而皆准的标准化流程。具体需要做什么,完全取决于我们面对的具体任务和数据集的特征。不过,业界通常将数据预处理的主要方法归纳为以下四类:
1. 数据清洗 (Data Cleaning)
数据清洗是预处理中最关键、对最终结果影响最大的环节。它的核心任务是去除数据中的噪声和无关数据。具体来说,主要处理以下三类问题:
- 缺失值:数据中某些字段的值没有记录。
- 异常值:数据中明显偏离正常分布范围的极端值。
- 噪声:数据中存在的随机误差或干扰。
我们将在本章后续小节中,重点讲解缺失值和异常值的检测与处理方法。
2. 数据集成 (Data Integration)
在业务中,我们分析一个问题所需的数据可能分散在多个不同的数据源中。数据集成的任务就是将多个数据源中的数据结合起来,并存放在一个一致的数据存储(如一张数据库表)中。在这个过程中,需要解决的主要问题包括:
- 实体识别:如何确定不同数据源中的记录是否指向同一个实体(如同一个用户)。
- 冗余问题:识别并处理重复的数据记录或可相互推导的特征。
- 数据值冲突:解决同一实体在不同数据源中属性值不一致的问题(如手机号码格式不同)。
3. 数据变换 (Data Transformation)
数据变换的目的是把原始数据转换成为更适合数据挖掘的形式。常见的变换方法包括:
- 数据标准化/归一化:将不同量纲的特征缩放到相同的数值区间。
- 数据离散化(分箱):将连续型特征转换为离散的区间。
- 数据泛化:用更高层次的概念替换低层次的数据(如用“青年”替代具体的年龄“23”)。
这部分内容与特征工程中的特征构建、特征变换有较多重叠,有时会在预处理阶段完成,有时则放在专门的特征工程环节。我们会在后续章节详细展开。
4. 数据规约 (Data Reduction)
当数据集非常庞大时,直接在其上进行数据挖掘可能效率低下。数据规约技术在尽可能保持数据原貌的前提下,最大限度地精简数据量,从而缩减数据规模,提高挖掘效率。主要方法包括:
- 维度规约:通过特征选择、主成分分析(PCA)等方法减少特征数量。
- 数量规约:通过抽样、聚类、直方图等方法减少数据样本的数量。
四、缺失值与异常值处理初探
作为数据清洗中最常见的两类问题,我们先对缺失值和异常值的处理思路建立一个初步印象。
缺失值处理
处理缺失值主要有两大思路:
- 丢弃法:如果缺失情况严重,可以考虑直接删除。
- 删除具有缺失值的样本:如果某一行(一条记录)中存在缺失值,则整行删除。
- 删除缺失值数量较多的特征:如果某一列(一个特征)缺失的比例非常高(如超过80%),则认为该特征信息价值太低,整列删除。
- 填充法:用某种估计值来填补缺失的位置。常见方法有:
- 人工补全:基于业务知识手动填写。
- 统计值填充:用该特征的均值、中位数、众数等进行填充。
- 模型预测填充:使用其他特征建立模型来预测缺失值,如 K-近邻、回归模型等。
- 高级方法:如多重插补、极大似然估计等。
异常值处理
处理异常值通常分两步走:
- 异常值检测:首先需要将异常值从数据中识别出来。常用方法有:
- 简单统计分析:观察数据的分布,对连续型特征绘制直方图、计算描述性统计量(如最大值、最小值)。
- 3σ原则(拉依达准则):对于近似正态分布的数据,认为超过均值±3倍标准差范围的值是异常值。
- 箱线图:通过四分位数和四分位距(IQR)来定义异常值的范围,是一种非常直观有效的检测方法。
- 异常值修正:检测出异常值后,可以选择以下方式处理:
- 删除含有异常值的记录:直接将整条异常样本删除。
- 视为缺失值:将异常值标记为缺失,然后使用处理缺失值的方法(如填充)来处理。
- 平均值修正:用前后两个正常观测值的平均值来替换异常值。
- 不处理:在某些场景下(如欺诈检测),异常值本身就是重要的研究对象,予以保留。
在接下来的两节中,我们将深入细节,通过代码实战来具体学习如何在 Python 中使用 pandas 和 scikit-learn 处理缺失值与异常值。
📝 动手练一练
- 概念辨析:数据预处理中的“数据集成”主要解决什么问题?请列举至少两个在数据集成过程中可能遇到的挑战。
👉 点击查看参考答案
数据集成的主要任务是将来自多个数据源的数据整合到一个统一、一致的数据存储中。它主要解决以下挑战:
- 实体识别问题:判断不同数据源中的两条记录是否指向现实世界中的同一个实体(例如,判断两个名字相近的用户ID是否属于同一个人)。
- 冗余与冲突问题:不同数据源可能包含重复的记录,或者对同一实体的同一属性记录了不同的值(例如,一个数据源记录用户年龄为25,另一个数据源记录为30),需要制定规则进行去重和冲突解决。
- 模式与格式不一致:不同数据源的数据表结构(模式)、编码格式(如日期格式为
YYYY-MM-DD还是MM/DD/YYYY)、度量单位可能不同,需要进行对齐和转换。
- 场景思考:假设你正在分析一个电商用户数据集,发现“年收入”这个特征有15%的缺失值。同时,通过箱线图你发现该特征存在一些极高的异常值(如年收入超过1亿元)。你会优先采用“丢弃法”还是“填充法”来处理缺失值?对于异常值,在什么情况下你可能会选择“不处理”?
👉 点击查看参考答案
- 对于缺失值:15%的缺失比例不算特别高,直接删除样本可能会损失较多信息。因此,优先考虑使用填充法。可以尝试使用该特征的非缺失值的中位数进行填充(因为收入数据通常偏态分布,中位数比均值更稳健),或者根据其他相关特征(如职业、城市、购物等级)进行分组,用组内中位数进行“同类均值插补”。在后续特征选择环节,也可以评估该特征的重要性再做决定。
- 对于异常值:在异常检测或风控模型等场景下,异常值本身就是模型需要学习和识别的模式。例如,在反欺诈系统中,异常高的消费金额或异常频繁的登录行为正是欺诈信号的体现。此时,我们不仅不会处理这些异常值,反而会将其作为重要的特征输入模型。因此,当业务目标就是识别“异常”时,应选择“不处理”。
本章小结
本节我们开启了《特征与数据预处理》篇章的学习,明确了数据预处理在机器学习管道中的关键地位。我们认识到,现实数据的“不完美”是常态,而预处理正是为了提升数据质量,为后续建模铺平道路。我们系统性地了解了数据预处理的四大类方法:清洗、集成、变换和规约,并对其中最核心的缺失值与异常值问题建立了初步的处理思路。
📋 行动清单
学完本节,你可以立即开始:
- 审视手头数据:打开你正在分析的任何一个数据集,尝试用
.info()和.describe()快速查看是否存在明显的缺失和异常(如最小值/最大值是否合理)。 - 明确预处理目标:为你当前的项目列出一个简单的数据预处理清单,思考需要优先处理的是缺失值、异常值,还是数据整合问题。
- 预习代码工具:提前了解 pandas 中处理缺失值的
.fillna()、.dropna()方法,以及用于描述性统计的.describe()方法,为下节的实战做好准备。
—— 小象教研组