二分类重复数据预处理:空值与已知值匹配的最佳实践
重复记录匹配中缺失值的处理方案
问题背景
你正在处理重复/非重复的二分类任务,需要将成对记录转换为匹配特征+标签的格式。现有成对记录如下:
原始记录:
| Id | Name | Phone | City | |
|---|---|---|---|---|
| A1 | Mick | 12345 | m@m.com | London |
| A2 | Mick | 12345 | null | London |
转换后期望格式中,Email字段因一方缺失无法直接标记0/1(标记0会引入偏差),且数据集缺失值占比高,无法删除记录,需要合理的处理方案。
最佳实践方案
1. 拆分特征:分离匹配状态与缺失标记
不要用单一值表示匹配结果,拆成两个独立特征:
- 匹配状态列:仅当双方字段都有值时,匹配标1,不匹配标0;只要有一方缺失,标记为特殊值(如
2或NaN) - 缺失标记列:用0/1/2标记缺失组合:(都有值)=0,(一方缺失)=1,(都缺失)=2
比如你的例子中,Email字段可拆为:
| Email_Match | Email_Missing_Flag |
|---|---|
| 2 | 1 |
这种方式让模型能区分“明确不匹配”和“无法判断”两种场景,避免误将缺失等同于不匹配。
2. 用独立类别标记不确定状态
直接给“一方缺失”的情况分配独立类别,比如用2表示“匹配状态未知”,和明确匹配(1)、明确不匹配(0)并列。
这种方法无需拆分特征,仅扩展匹配值的类别,保留了数据的原始不确定性,模型训练时会自动学习该类别与重复标签的关联。你的例子中Email字段就标为2即可。
3. 基于字段权重的加权匹配
先根据业务经验给每个字段设置匹配权重(比如Phone权重0.4,Name权重0.2,Email权重0.1,City权重0.2),然后:
- 仅对双方都有值的字段计算匹配贡献(匹配则加对应权重,不匹配加0)
- 总权重得分超过阈值则标记为重复(Label=1),否则为非重复(Label=0)
- 缺失字段不参与权重计算,仅标记为“未参与”或特殊值
比如你的例子中,Email缺失,仅用Name、Phone、City的匹配计算总得分(0.2+0.4+0.2=0.8),远高于阈值(比如0.5),因此Label=1,Email字段标记为未参与即可。
4. 基于上下文的缺失值填充
如果数据量充足,可以用同组上下文填充缺失值:
- 按其他匹配的字段分组(比如Name+Phone+City),取组内该字段的众数填充缺失值
- 填充后再进行匹配标记
比如你的例子中,找到所有Name=Mick、Phone=12345、City=London的记录,用它们的Email众数(m@m.com)填充A2的Email,之后标记Email匹配为1。注意填充时要仅使用训练集数据,避免测试集数据泄露,可采用交叉验证的方式完成填充。
内容的提问来源于stack exchange,提问作者Jawad
相关产品推荐
相关产品推荐

