趋近智
尽管均值、中位数或众数填充等方法能够补全缺失数据留下的空白,但它们本质上会丢弃一条信息:某个值最初是缺失的这个事实。有时,数据本身的缺失就带有预测能力。例如,如果未提供年龄的客户行为倾向不同,那么了解年龄信息缺失本身可能对您的模型来说是一个有用的信号。
这就是缺失值指示器发挥作用的地方。指示器本质上是一个添加到数据集中的新二元特征,它标志着特定列中的原始值是否缺失。通常,如果数据缺失,它取值为1;否则取值为0。
主要目的是保留缺失模式所传达的信息。请考虑以下几种情况:
使用 Pandas 在 Python 中创建指示器变量很直接。.isnull() 方法会返回一个布尔序列(数据缺失处为 True,否则为 False),该序列随后可以转换为整数(True 为 1,False 为 0)。
让我们通过一个例子来说明。假设我们有一个在 Age 和 Income 列中存在缺失值的 DataFrame:
import pandas as pd
import numpy as np
# 示例 DataFrame
data = {'ID': [1, 2, 3, 4, 5],
'Age': [25, 30, np.nan, 35, np.nan],
'Income': [50000, 60000, 75000, np.nan, 90000],
'Score': [85, 90, 78, 92, 88]}
df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)
# 识别有缺失值的列
cols_with_na = df.columns[df.isnull().any()].tolist()
# 创建指示器特征
for col in cols_with_na:
df[col + '_missing_indicator'] = df[col].isnull().astype(int)
print("\n带有缺失值指示器的 DataFrame:")
print(df)
运行这段代码会产生以下输出:
原始 DataFrame:
ID Age Income Score
0 1 25.0 50000.0 85
1 2 30.0 60000.0 90
2 3 NaN 75000.0 78
3 4 35.0 NaN 92
4 5 NaN 90000.0 88
带有缺失值指示器的 DataFrame:
ID Age Income Score Age_missing_indicator Income_missing_indicator
0 1 25.0 50000.0 85 0 0
1 2 30.0 60000.0 90 0 0
2 3 NaN 75000.0 78 1 0
3 4 35.0 NaN 92 0 1
4 5 NaN 90000.0 88 1 0
如您所见,Age_missing_indicator 和 Income_missing_indicator 这两列新列已被添加。它们在原始 Age 或 Income 列中对应值为 NaN 的地方包含 1,否则为 0。
一种常见且通常有效的方法是将指示器与填充方法结合使用。
NaN 值。from sklearn.impute import SimpleImputer
# 假设 df 是添加指示器后的 DataFrame
# 使用中位数填充原始 'Age' 列中的缺失值
median_imputer_age = SimpleImputer(strategy='median')
df['Age'] = median_imputer_age.fit_transform(df[['Age']])
# 使用均值填充原始 'Income' 列中的缺失值
mean_imputer_income = SimpleImputer(strategy='mean')
df['Income'] = mean_imputer_income.fit_transform(df[['Income']])
print("\n填充后的 DataFrame(带指示器):")
print(df)
结果 DataFrame:
填充后的 DataFrame(带指示器):
ID Age Income Score Age_missing_indicator Income_missing_indicator
0 1 25.0 50000.0 85 0 0
1 2 30.0 60000.0 90 0 0
2 3 30.0 75000.0 78 1 0
3 4 35.0 68750.0 92 0 1
4 5 30.0 90000.0 88 1 0
现在,Age 和 Income 列已没有缺失值,但相应的 _missing_indicator 列保留了原始缺失值位置的信息。您的机器学习 (machine learning)模型有可能从填充值和缺失模式中同时获取有用信息。
虽然有用,但请记住以下几点:
创建缺失值指示器是特征工程工具集中一种有用的方法。它实现起来简单,并能确保关于数据缺失的潜在有用信息在填充过程中不被丢失。尤其当您怀疑缺失模式本身可能提供有用信息或在使用基于树的模型时,可以考虑使用它。
这部分内容有帮助吗?
sklearn.impute模块的官方文档,描述了各种插补策略和add_indicator参数。© 2026 ApX Machine Learning用心打造