
本文介绍使用线性回归建模+标准化联合策略,在保留原始量纲关系的前提下,跨尺度(如 score1 与 score2)精准填补缺失值,避免简单缩放导致的信息失真。
本文介绍使用线性回归建模+标准化联合策略,在保留原始量纲关系的前提下,跨尺度(如 score1 与 score2)精准填补缺失值,避免简单缩放导致的信息失真。
在实际数据分析中,常遇到多源评分指标(如考试成绩、用户评分、模型置信度)处于不同量纲或分布范围的情形。直接对含缺失值的列进行 MinMax 或 StandardScaler 缩放会引入偏差——因为 fit_transform() 无法处理 NaN,而盲目用均值/中位数填充后再缩放又会扭曲变量间的真实线性关系。正确做法是:先构建回归模型刻画两列间的映射关系,再在标准化空间中预测并逆变换回原始尺度。
以下为完整实现流程(基于 scikit-learn 和 pandas):
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
# 构造示例数据
data = {
'Person': ['Alice', 'Bob', 'Charlie', 'Dave', 'John', 'Henry', 'Jane'],
'Score1': [5.6, 9.3, 7.2, -4.0, np.nan, 11.0, 3.0],
'Score2': [3.2, 8.7, np.nan, np.nan, 10.0, 13.0, 8.0]
}
df = pd.DataFrame(data)
# 步骤1:临时填充缺失值(仅用于后续标准化,不参与建模)
df['Score1_filled'] = df['Score1'].fillna(df['Score1'].mean())
df['Score2_filled'] = df['Score2'].fillna(df['Score2'].mean())
# 步骤2:标准化(统一量纲,使回归系数可比且稳定)
scaler = StandardScaler()
df[['Score1_scaled', 'Score2_scaled']] = scaler.fit_transform(
df[['Score1_filled', 'Score2_filled']]
)
# 步骤3:仅用完整样本(Score1 & Score2 均非空)训练回归模型
train_data = df.dropna(subset=['Score1', 'Score2'])
model = LinearRegression()
model.fit(train_data[['Score1_scaled']], train_data['Score2_scaled'])
# 步骤4:对 Score2 缺失的行,用其已知 Score1 推断 Score2
mask_score2_na = df['Score2'].isnull()
score1_scaled_missing = df.loc[mask_score2_na, 'Score1_scaled'].values.reshape(-1, 1)
predicted_score2_scaled = model.predict(score1_scaled_missing)
# 步骤5:将预测结果写入标准化列,并逆变换回原始尺度
df.loc[mask_score2_na, 'Score2_scaled'] = predicted_score2_scaled
df[['Score1', 'Score2']] = scaler.inverse_transform(df[['Score1_scaled', 'Score2_scaled']])
# 输出最终结果(Score1 缺失值暂未填补;如需双向填补,可对称重复流程)
print(df[['Person', 'Score1', 'Score2']].round(6))
✅ 关键设计说明:
- 标准化仅作用于填充后的辅助列,确保缩放过程无 NaN 中断;
- 回归模型严格基于原始非空配对样本拟合,保障统计有效性;
- 预测后通过 scaler.inverse_transform() 还原至原始量纲,结果可直接解读(如 Charlie 的 Score2 预测为 ≈8.21,符合其 Score1=7.2 在整体趋势中的合理位置);
- 若需同时填补 Score1 缺失值(如 John 行),可交换因变量/自变量角色,构建反向模型,实现双向插补。
⚠️ 注意事项:
- 该方法隐含假设两列存在近似线性关系。建议先绘制散点图(df.plot.scatter('Score1', 'Score2'))验证相关性;
- 若关系显著非线性,可替换为 PolynomialFeatures + LinearRegression 或 RandomForestRegressor;
- 对小样本(
此方案兼顾统计严谨性与工程实用性,是跨量纲缺失值填补的推荐范式。











