连续变量转换

159 阅读7分钟

连续变量转换是数据预处理和特征工程中的关键步骤,常用于解决偏态分布、异方差性、非线性关系等问题,以满足统计模型(如线性回归、方差分析等)对数据的假设(如正态性、方差齐性)或提升机器学习模型的性能。下面详细介绍三种常见方法:

1. 基于经验累积分布函数的方法 (ECDF-based Transformation)

  • 核心思想:  利用数据自身的经验累积分布函数将原始数据映射到一个目标分布(通常是标准正态分布或均匀分布)。

  • 步骤:

    1. 计算ECDF:  对于样本数据 X = {x1, x2, ..., xn},其经验累积分布函数定义为:
      ECDF(x) = (number of xi ≤ x) / n
      它表示小于等于 x 的观测值在总样本中所占的比例(在 0 到 1 之间)。

    2. 映射到均匀分布:  将每个原始数据点 xi 代入其自身的 ECDF 函数,得到 pi = ECDF(xi)。根据概率积分变换,如果 X 的累积分布函数是 F(x),则 F(X) 服从 [0, 1] 上的均匀分布。因此,pi 可以被看作是来自均匀分布 U[0,1] 的一个近似值。

    3. 映射到目标分布(通常是正态):  将均匀分布的值 pi 通过目标分布的分位点函数(Quantile Function / Percent Point Function / PPF)进行逆变换。

      • 最常见的目标:标准正态分布 (N(0,1)):
        zi = Φ^{-1}(pi)
        其中 Φ^{-1} 是标准正态分布的分位点函数(例如 Python 中的 scipy.stats.norm.ppf 或 R 中的 qnorm)。
      • 其他目标:  理论上可以映射到任何分布的分位数函数。
  • 结果:  转换后的数据 Z = {z1, z2, ..., zn} 近似服从标准正态分布 N(0,1)

  • 优点:

    • 非参数:  不需要对原始数据的分布做任何参数假设,适用于各种形状的分布。
    • 严格单调:  保持原始数据的顺序关系不变。
    • 处理任意分布:  理论上可以将任何连续分布转换为任何其他连续分布(通过两次 ECDF/PPF 映射)。
  • 缺点:

    • 依赖样本:  ECDF 完全基于样本数据计算,对样本量敏感。小样本时可能无法准确反映总体分布或产生不稳定的转换结果。
    • 对异常值敏感:  最小值和最大值会映射到 -∞ 和 +∞(对于正态目标),极端异常值会对转换后数据的尺度产生很大影响。
    • 训练/测试集处理:  在建模时,必须使用训练集计算 ECDF。然后用训练集的 ECDF 去转换测试集数据。不能直接在测试集上独立计算 ECDF。
    • 解释性差:  转换后的值失去了原始数据的物理或业务意义,难以直接解释。
    • 边界问题:  ECDF(x_min) = 1/n > 0 和 ECDF(x_max) = 1,映射到正态分布时,Φ^{-1}(1/n) 和 Φ^{-1}(1) 分别是一个有限负值和 +∞。通常需要将 pi 调整为 (number of xi ≤ x - a) / (n + b) 的形式(如 (rank(xi) - 0.5) / n 或 (rank(xi) - 0.375) / (n + 0.25))以避免无穷大。
  • 别名/变种:  Rank-based Inverse Normal Transformation (Rank-INT), Van der Waerden scores(使用 (rank(xi) - 0.5)/n 映射到正态分布)。

2. Box-Cox 变换 (Box-Cox Transformation)

  • 核心思想:  通过寻找一个最优的幂变换参数 λ (lambda),使变换后的数据尽可能接近正态分布。它是一种参数化的幂变换族。

  • 公式:  仅适用于严格正的数据 (x > 0)。
    y(λ) = { (x^λ - 1) / λ, if λ ≠ 0; ln(x), if λ = 0 }

  • 参数 λ 的选择:  核心目标是找到使变换后数据最接近正态分布的 λ。通常使用最大似然估计 (MLE)

    • 对于一系列候选 λ 值(如 -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2),计算每个 λ 变换后的数据 y(λ)
    • 假设 y(λ) 服从正态分布 N(μ, σ²)
    • 计算变换后数据的对数似然函数值(或等价地,最小化变换后数据的偏度和峰度)。
    • 选择使似然函数最大(或偏度峰度最接近0)的 λ。通常选择使 y(λ) 的均值和方差稳定(或残差平方和最小)的 λ
  • 常见 λ 值的含义:

    • λ = 1: 接近原始数据((x-1)/1 ≈ x
    • λ = 0.5: 平方根变换(近似)
    • λ = 0: 对数变换 (ln(x))
    • λ = -0.5: 倒数平方根变换
    • λ = -1: 倒数变换 (1/x)
  • 优点:

    • 参数化且系统化:  通过估计 λ 自动找到合适的变换形式。
    • 目标明确:  直接优化变换后数据的正态性。
    • 可解释性相对较好:  常见的 λ 值对应的变换有直观意义(如对数、平方根)。
    • 处理右偏态有效:  对处理正值的右偏态(长尾在右侧)数据特别有效。
  • 缺点:

    • 仅限于正值:  最大的限制是不能处理零或负数。
    • 参数估计依赖正态假设:  λ 的 MLE 估计基于变换后数据是正态的前提,这可能不完美。
    • 训练/测试集处理:  在建模时,必须使用训练集估计 λ。然后用训练集的 λ 去转换测试集数据。
    • 对异常值敏感:  幂变换对极端值敏感。
  • 实现:  Python (scipy.stats.boxcox),R (boxcox in MASS package)。

3. Yeo-Johnson 变换 (Yeo-Johnson Transformation)

  • 核心思想:  Box-Cox 变换的推广,使其能够处理零和负数。它同样通过寻找最优的幂变换参数 λ 来改善数据的正态性、方差稳定性或线性关系。

  • 公式:  适用于所有实数 (x ∈ R)。公式根据 x 是否大于等于0以及 λ 是否等于0或2分为四种情况:
    y(λ) = { [(x + 1)^λ - 1] / λ, if λ ≠ 0, x >= 0; ln(x + 1), if λ = 0, x >= 0; -[(-x + 1)^{(2-λ)} - 1] / (2 - λ), if λ ≠ 2, x < 0; -ln(-x + 1), if λ = 2, x < 0 }

  • 参数 λ 的选择:  方法与 Box-Cox 变换完全相同,使用最大似然估计 (MLE) 在一系列候选 λ 值中选择能使变换后数据最接近正态分布的那个 λ

  • 常见 λ 值的含义 (对于 x >= 0):  与 Box-Cox 相同(λ=1:接近原始;λ=0:log(x+1);λ=0.5:类似平方根)。

  • 优点:

    • 处理零和负数:  最大优势是解决了 Box-Cox 的关键限制。
    • 参数化且系统化:  同 Box-Cox。
    • 目标明确:  同 Box-Cox。
    • 灵活性:  通过不同的 λ 值,可以处理各种偏态分布(左偏和右偏)。
  • 缺点:

    • 公式稍复杂:  定义比 Box-Cox 复杂一些。
    • 参数估计依赖正态假设:  同 Box-Cox。
    • 训练/测试集处理:  必须使用训练集估计 λ 并应用于测试集。
    • 对异常值敏感:  同 Box-Cox。
    • 解释性:  对于 x < 0 的部分,变换的解释性不如 x >= 0 的部分直观。
  • 实现:  Python (scikit-learn.preprocessing.PowerTransformer(method='yeo-johnson')),R (powerTransform in car package)。

总结与比较

特征基于 ECDF (Rank-INT)Box-Cox 变换Yeo-Johnson 变换
适用范围任何连续分布仅限严格正数 (x > 0)所有实数 (x ∈ R)
核心原理非参数 (ECDF + PPF)参数化 (幂变换 + MLE 找 λ)参数化 (广义幂变换 + MLE 找 λ)
目标分布标准正态 (或其他指定分布)正态正态
处理偏态所有类型主要用于右偏 (需正数)左偏和右偏
对样本量依赖
对异常值敏感度
训练/测试处理关键 (用训练集 ECDF)关键 (用训练集 λ)关键 (用训练集 λ)
解释性相对较好 (常见 λ)相对较好 (x>=0 部分),x<0 稍差
处理零/负值不能
主要优势无需分布假设,严格单调系统化处理正值偏态系统化处理所有实数的偏态
主要劣势小样本/异常值敏感,解释性差只能处理正数公式稍复杂

选择建议:

  1. 数据包含零或负数:  直接选择 Yeo-Johnson 变换。

  2. 数据严格为正:

    • 如果你想用一种参数化、系统化的方法寻找最优幂变换,选择 Box-Cox 或 Yeo-Johnson (两者对正值效果类似,Yeo-Johnson 在 λ 估计上可能略有数值稳定性优势)。
    • 如果你对原始分布没有信心,或者希望转换更加稳健(不依赖特定参数形式),或者需要映射到特定分布(不仅仅是正态),考虑 基于 ECDF 的方法。但要注意其样本依赖性和异常值敏感性。
  3. 需要保持单调性:  三种方法都是单调变换。

  4. 解释性需求:  Box-Cox/Yeo-Johnson 的常见 λ 值(如对数、平方根)比 ECDF 转换后的分数更容易解释。