[数学建模从入门到入土] 数据预处理

数学建模从入门到入土 数据预处理

个人导航

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

文章目录

检查缺失值

可以使用sns.heatmap传入一个pandas矩阵df.isna()

py 复制代码
plt.figure(figsize=(12, 6))
sns.heatmap(df.isna(), cbar=False)   # True/False 的"缺失矩阵"
plt.title("Missing Values Heatmap (df)")
plt.xlabel("Columns")
plt.ylabel("Rows")
plt.tight_layout()
plt.show()

不能是序列

数据分析

1.某列数据长啥样(分布/偏态/长尾/多峰)
  • 直方图 + KDE(密度曲线) :看偏态、长尾、多峰(可能暗示混合人群/不同机制)
    • 右偏: 大多数值偏小, 右边拖着一条很长的尾巴
    • 左偏: 大多数值偏大, 左边拖着一条很长的尾巴
  • ECDF(经验累积分布):比直方图更稳,看"百分位"很直观(比如 95% 都在多少以内)
  • QQ-plot :判断是否近似正态(决定后续用均值方差还是分位数/IQR更合适)
    • 长尾: QQ-plot 右端(或两端)明显"翘飞"
    • 短尾: QQ-plot 两端可能更贴近或向内弯

-> 决定是否要 log 或 Box-Cox:

  • (非负)右偏+长尾 -> data = log1p(x)
  • (非负)左偏+长尾 -> z = x_max - x; data = log1p(z)
2.log做了什么

没改变的:

  • 排序不变: "谁大谁小""百分位""ECDF 的相对位置"这些结构都保留
  • 分组差异方向不变: A 组整体比 B 组大,log 后仍然大

改变了的:

  • 把"加法尺度 "变成"乘法尺度 "
    • 原来差异看的是 x 2 − x 1 x_2-x_1 x2−x1
    • log 后差异看的是 log ⁡ x 2 − log ⁡ x 1 = log ⁡ ( x 2 / x 1 ) \log x_2-\log x_1 = \log(x_2/x_1) logx2−logx1=log(x2/x1),也就是倍率差
  • 压缩右尾,降低极端值对模型的"统治力"

log将乘法噪声变成加法噪声

log 后相当于更在意相对误差

log 不是万能的,确实有几种情况不该乱用:

  1. 你的业务/题目关心的是绝对差
    例如成本差 100 元就是 100 元,不能被压扁成"相对差"
  2. 你必须在原尺度做线性加和约束
    例如 x 1 + x 2 = 总量 x_1+x_2=\text{总量} x1+x2=总量 这类守恒结构,在 log 空间会变复杂

其实不需要"永久改数据": log变换只用于建模/拟合/稳定方差

  • 建模使用: y ′ = log ⁡ ( 1 + y ) y' = \log(1+y) y′=log(1+y)

  • 还原采用: y = exp ⁡ ( y ′ ) − 1 y = \exp( y') - 1 y=exp(y′)−1

异常值修正

可以画箱线图, 小提琴图展示

1. I Q R IQR IQR

给定数据 x 1 , ... , x n x_1,\dots,x_n x1,...,xn

  1. 计算第一四分位数 Q 1 Q_1 Q1(25%分位)和第三四分位数 Q 3 Q_3 Q3(75%分位)

  2. 计算四分位距
    IQR = Q 3 − Q 1 I \text{IQR}=Q_3-Q_1I IQR=Q3−Q1I

  3. 定义异常阈值(常用)
    L = Q 1 − 1.5 IQR U = Q 3 + 1.5 IQR L = Q_1 - 1.5\text{IQR} \\ U = Q_3 + 1.5\text{IQR} L=Q1−1.5IQRU=Q3+1.5IQR

若 x i < L x_i<L xi<L 或 x i > U x_i>U xi>U,判为异常

更严格可用 3 IQR 3\text{IQR} 3IQR

更适合:

  • 非正态/偏态/长尾的数值数据(IQR不依赖均值方差)
  • 样本量中等及以上(分位数更稳定)
  • 横截面数据:一次性观测、无明显时间结构(例如:地区指标、个人样本特征、实验测量)

不太适合或要小心:

  • 强季节性/趋势的时间序列:高峰可能被误判(更建议对"残差"用IQR)
  • 离散取值很少(例如只有 0/1/2/3)时,分位数可能堆叠,阈值不敏感
  • 多峰分布:不同簇之间的"正常差异"可能被误判为异常(更适合先分群再做IQR)
2. 3 I Q R 3IQR 3IQR

3 I Q R 3IQR 3IQR 是在箱线图规则基础上采用更宽松的阈值,用于只筛出"极端异常值",避免把偏态/长尾分布中的正常大值误判为异常

给定数据 x 1 , ... , x n x_1,\dots,x_n x1,...,xn

  1. 计算第一四分位数 Q 1 Q_1 Q1(25%分位)和第三四分位数 Q 3 Q_3 Q3(75%分位)

  2. 计算四分位距
    IQR = Q 3 − Q 1 \text{IQR}=Q_3-Q_1 IQR=Q3−Q1

  3. 定义极端异常阈值
    L = Q 1 − 3 IQR U = Q 3 + 3 IQR L = Q_1 - 3\text{IQR} \\ U = Q_3 + 3\text{IQR} L=Q1−3IQRU=Q3+3IQR

若 x i < L x_i<L xi<L 或 x i > U x_i>U xi>U,判为极端异常值

3. 中位数绝对偏差MAD

用"中位数 + 绝对偏差"的方式衡量离群程度,比IQR更抗极端点,属于非常稳健的尺度估计

  1. 中位数
    m = median ( x ) m=\text{median}(x) m=median(x)

  2. MAD
    MAD = median ( ∣ x i − m ∣ ) \text{MAD}=\text{median}\bigl(|x_i-m|\bigr) MAD=median(∣xi−m∣)

  3. 稳健 z 分数(常用版本)
    z i = 0.6745 x i − m MAD z_i = 0.6745\frac{x_i-m}{\text{MAD}} zi=0.6745MADxi−m

其中 0.6745 是为了让它在正态分布下与标准差可比

常用判别: ∣ z i ∣ > 3.5 |z_i|>3.5 ∣zi∣>3.5 视为异常

更适合:

  • 含少量极端离群点的数据(MAD受极端点影响很小)
  • 长尾/重尾分布(金融、网络流量、故障数据、能耗等)
  • 样本量较小到中等也能比较稳定(比均值方差靠谱)
  • 你希望检测规则"尽量不被异常值本身带偏"的场景

不太适合或要小心:

  • MAD=0 的情况 :当大量数据重复/离散(比如很多相同值)会出现 MAD 为 0,需改用 IQR、或在分母加很小的 ϵ \epsilon ϵ
  • 强趋势/季节性时间序列同样建议先去趋势/季节或对残差用MAD,否则正常结构会被当异常
  • 多峰分布/混合人群:同样建议先分群再做MAD
4. IQR vs MAD
  • 担心"极端离群点会影响阈值本身" → 优先用 MAD
  • 想要"简单、图形化、容易解释(箱线图)" → 用 IQR
  • 时间序列 :不管用谁,更推荐对残差 e t = x t − x ^ t e_t=x_t-\hat x_t et=xt−x^t 做 IQR/MAD,而不是对原值直接做
5.处理方法
  1. 缩尾: 压回阈值
  2. 用局部信息插补: 插值方法
  3. 删除: 只有在明确"数据错误/不可用"时删除

特征筛选

并非所有特征都对模型的结果有显著影响

为了提高计算效率并进一步对自变量的重要性(自变量对因变量的影响程度)进行排序

相关推荐
2601_9539880710 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·后端·物联网·tcp/ip·数学建模·前端框架
数模竞赛Paid answer1 天前
2026年华东杯数学建模C题收益率预测问题解题全过程文档及程序
算法·数学建模·数据分析·华东杯
数模竞赛Paid answer2 天前
2026年电工杯数学建模A题绿电直连型电氢氨园区优化运行求解全过程论文及程序
算法·数学建模·电工杯
AI Dog2 天前
MathHub:数学建模学习社区,内置数学建模智能体Modulus
学习·数学建模·智能体·modulus·数学建模智能体
统计学小王子2 天前
分类模型评价指标——R语言(数学建模常用)
数学建模·分类·r语言
数模竞赛Paid answer3 天前
2026年华东杯数学建模B题医药物流安排问题解题全过程文档及程序
算法·数学建模·数据分析·华东杯
数模竞赛Paid answer3 天前
2020年深圳杯数学建模A题关于国家“先行示范区”建设中的医疗和养老保障问题解题全过程论文及程序
算法·数学建模·数据分析·深圳杯
数模竞赛Paid answer3 天前
2021年深圳杯数学建模C题配电网可靠性和故障软自愈研究解题全过程论文及程序
算法·数学建模·数据分析·深圳杯
数模竞赛Paid answer4 天前
2026年华数杯数学建模A题微构体中填充导电介质的仿真优化解题全过程及程序
数学建模·数据分析·华数杯
数模竞赛Paid answer4 天前
2021年深圳杯数学建模B题背向瑞利散射光纤激光传感器设计解题全过程论文及程序
数学建模·数据分析·深圳杯