数据质量与值插补:从偏差检测到数据修复
立即解锁
发布时间: 2025-09-07 01:59:22 阅读量: 13 订阅数: 21 AIGC 


数据清洗的艺术与实践
# 数据质量与值插补:从偏差检测到数据修复
## 1. 数据质量中的过采样问题
### 1.1 过采样的概念与应用场景
在数据收集过程中,过采样(oversampling)是一种常见的策略。民意调查公司常常会故意采用过采样,其目的是针对总体中不常见的类别或值范围进行更多的选取,以填补参数空间;或者对于分析目的需要高辨别度的子群体进行过采样。过采样的应用场景不仅局限于民意调查中的人类受试者,在其他领域,如回旋加速器中产生的稀有粒子、研究森林中的稀有植物等情况也会用到。
例如,皮尤研究中心在收集数据时会明确记录过采样方法以及对总体分布的预期。相关 2010 年民意调查的详细信息可查看:[https://www.pewsocialtrends.org/2010/02/24/millennials-confident-connected-open-to-change/](https://www.pewsocialtrends.org/2010/02/24/millennials-confident-connected-open-to-change/) 。不过在本次练习中,我们假设数据没有足够的文档和元数据,这种情况在现实中很常见。原始数据可从 [https://www.gnosis.cx/cleaning/pew-survey.csv](https://www.gnosis.cx/cleaning/pew-survey.csv) 获取。
### 1.2 任务分析
#### 1.2.1 任务 1:判断年龄的过采样和欠采样情况
读取数据后,需要判断哪些年龄段被故意过采样或欠采样以及程度如何。为每个观测添加一个名为 `sampling_multiplier` 的新列,将“中性”情况记为 1x。例如,如果认为 40 岁的受试者被过选 5 倍,则赋值 5.0;如果认为 50 岁的受试者被系统地欠选 2 倍,则赋值 0.5。同时要考虑到 2010 年美国人口年龄分布并非均匀,且样本量约为 2000,有 75 种可能的年龄,由于随机性导致的子组大小的非均匀性应编码为 1.0。
#### 1.2.2 任务 2:对分类值进行多布尔编码
部分分类字段可能编码了相关但不同的二进制值,如关于技术的问题:
```python
import pandas as pd
pew = pd.read_csv('data/pew-survey.csv')
print(list(pew.q23a.unique()))
```
输出:
```
['New technology makes people closer to their friends and family',
'New technology makes people more isolated',
'(VOL) Both equally',
"(VOL) Don't know/Refused",
'(VOL) Neither equally']
```
由于前两个描述可能被调查者同时相信或都不相信,将它们分别编码为布尔值是合理的。对于拒绝回答的情况,需要在重新编码时做出决策。要确定哪些分类值应更好地编码为多个布尔值,并相应地修改数据集,同时解释和说明每个字段的决策理由。
#### 1.2.3 任务 3:判断其他人口统计字段的过采样情况
除年龄外,还需判断其他人口统计字段是否被过采样。虽然列名大多晦涩难懂,但可以假设具有表示意见程度的定性答案的字段是被调查的因变量,而非人口统计自变量。例如:
```python
print(list(pew.q1.unique()))
```
输出:
```
['Very happy', 'Pretty happy', 'Not too happy', "(VOL) Don't know/Refused"]
```
完成此任务可能需要参考外部数据源,如查找 2010 年美国时区的大致人口分布,并与数据集中的分布进行比较:
```python
print(list(pew.timezone.unique()))
```
输出:
```
['Eastern', 'Central', 'Mountain', 'Pacific']
```
#### 1.2.4 任务 4:对有序编码字段进行重新编码
像任务 3 中的 `q1` 字段是明显的有序编码。虽然无法直接为“非常开心:相当开心”与“相当开心:不太开心”分配相对比率,但这三个值的排名很明显,将它们编码为序数 1、2 和 3 是合理且有用的。当然,也需要对拒绝回答的情况进行编码。重新编码所有相关字段以利用这种直观的领域知识。
### 1.3 数据偏差与周期性
数据集中的偏差是一个常见问题,数据集很少能完全代表总体,往往会从总体中进行倾斜和选择以形成特定的画面。偏差有时是有意且合理的,用于填补参数空间;有时则反映了潜在现实中数量或类别的分布。检测偏差是解决问题的第一步。
与偏差相关但略有不同的是数据的周期性。当数据以某种方式排序(通常是时间序列)时,特定的数据系列通常具有“信号”和“变化”的成分,将它们分离是很有用的。信号在某种程度上也是一种偏差,它提供了在时间 T 测量值更可能接近 M 的预期。识别信号是数据分析的重要方面,同时识别与信号的偏差也能提供有趣的额外信息。
## 2. 值插补的必要性与决策因素
### 2.1 值插补的背景
数据可能因各种原因出现缺失或不可信的情况。在处理这些数据时,有时直接丢弃是最佳选择,但很多时候通过某种方式插补值以保留观测中的其他特征更有用。在进行值插补时,重要的是记录插补值与原始数据集值之间的差异,常见的方法是维护数据的不同版本以及可重复执行修改的脚本。
### 2.2 插补与丢弃记录的决策因素
是否插补值还是丢弃记录并非非此即彼的选择,决策时通常需要考虑以下几个因素:
- **数据量**:如果数据有限,保留尽可能多的记录尤为重要,因为机器学习模型通常数据越多表现越好。如果丢弃缺失数据后仍有大量记录(如数万条),可能对插补的担忧会减少;但如果只有数百条记录,每条记录都很珍贵,不过插补错误也可能产生不成比例的影响。
- **缺失数据的偏差情况**:如果缺失记录可能涉及与总体数据集特征或模式不同的观测,那么挽救这些记录就尤为重要。例如,某个传感器位置或时间段与缺失数据密切相关,该位置或时间段可能是捕捉所建模领域某些方面所必需的。
- **偏差相关决策**:可以决定丢弃属于“随机缺陷”子集的缺失数据记录,但对于有系统性缺失数据的记录要保留,因为它们涉及问题参数空间的不同区域。
- **记录的特征数量**:一个有五个特征且其中两个缺失的记录,对于好的模型来说可能保留的有用信息不多;而一个有五十或一千个特征且只有一个缺失的记录,更值得修复。
- **缺失值的角色**:如果监督学习训练集中的目标特征缺失,插补可能作用不大;而插补输入特征通常更有用,但该输入特征在问题或领域中的角色也会有所不同,从“业务目的”角度来看,某个特定特征可能是关键的,插补此类中心任务重要的特征通常不明智。
### 2.3 典型值插补的概念
典型值插补是一种简单的方法,即假设缺失值与同一特征的总体趋势相似。在某些情况下,领域知识可以告知合理的默认值;若没有这些背景知识,现有数据也能为插补提供指导。
### 2.4 典型表格数据的插补示例
以 UCI 机器学习库中
0
0
复制全文
相关推荐








