2. 数据稀疏基础

数据稀疏(Data Sparsity)是层级预测与调和权重学习中最为棘手的底层挑战之一。当观测矩阵中零值或缺失值占比过高时,模型难以捕捉真实信号,梯度更新不稳定,调和权重估计极易偏向极端值。本章从成因与度量两个维度建立稀疏性的量化认知,为后续参数调优提供诊断依据。

2.1 稀疏数据的三大成因

稀疏性并非单一现象,而是由三种不同机制叠加产生。理解成因有助于选择针对性的预处理策略与调优方向。

成因类型 定义 典型场景 对调优的影响
缺失值(Missing Values) 数据采集、传输或存储过程中部分观测值未被记录 传感器故障、用户未填写字段、日志截断 导致梯度计算偏置,需引入掩码或插值
零膨胀(Zero Inflation) 真实分布中零值比例远超标准分布预期 零售销量(多数商品多数天销量为0)、点击率 使损失函数被零值主导,需调整样本权重
高维低样本(High Dimension, Low Sample Size) 特征维度远大于样本数量,即 p ≫ n 基因表达数据、文本词袋、推荐系统用户-物品矩阵 协方差矩阵奇异,调和权重估计需正则化
调优提示: 在层级预测中,零膨胀与高维低样本往往同时出现(如多层级SKU销量预测)。此时不要单独处理某一成因,而应设计联合正则化策略,例如在调和权重中加入L1惩罚以自动筛选有效层级。

2.2 稀疏度度量指标

仅定性描述稀疏性是不够的,必须使用定量指标来评估稀疏程度,并据此设定调优阈值。以下四个指标构成稀疏度诊断的基础工具集。

  1. 零值比例(Zero Ratio, ZR)
    最直观的指标:ZR = (零值元素个数) / (总元素个数)。ZR > 0.8 通常视为高度稀疏。
  2. 缺失率(Missing Rate, MR)
    专门针对缺失值:MR = (缺失元素个数) / (总元素个数)。MR > 0.5 时需谨慎使用默认填充策略。
  3. 有效样本密度(Effective Density, ED)
    考虑非零非缺失的有效观测:ED = (非零且非缺失元素个数) / (总元素个数)。ED < 0.1 表示信号极度稀疏。
  4. 维度-样本比(Dimension-Sample Ratio, DSR)
    针对高维低样本:DSR = p / n。DSR > 10 时协方差矩阵不可逆,必须引入收缩估计或降维。
诊断阈值速查:
  • ZR > 0.9 → 考虑零膨胀模型(如ZINB)或二阶段预测
  • MR > 0.3 → 优先使用矩阵分解或深度生成模型进行缺失值填补
  • DSR > 5 → 在调和权重中加入L2正则或使用经验贝叶斯收缩

2.3 稀疏成因与度量指标的关系图谱

下图展示了三种稀疏成因与四个度量指标之间的映射关系,以及对应的调优切入点。该图可作为参数调优前的快速诊断参考。

稀疏成因与度量指标关系图谱 稀疏成因 → 度量指标 → 调优切入点 缺失值 零膨胀 高维低样本 缺失率 (MR) 零值比例 (ZR) 有效样本密度 (ED) 维度-样本比 (DSR) 掩码机制 / 插值填补 零膨胀损失函数 / 样本重加权 正则化 / 收缩估计 / 降维 图例说明 • 实线箭头表示主要映射关系:缺失值 → 缺失率(MR);零膨胀 → 零值比例(ZR)与有效样本密度(ED);高维低样本 → 维度-样本比(DSR) • 虚线箭头表示零膨胀也会影响有效样本密度(ED),因为大量零值降低了有效观测比例 • 调优切入点需根据主导成因选择:缺失值优先处理MR,零膨胀优先处理ZR,高维低样本优先处理DSR • 当多个指标同时超标时,采用联合正则化策略(如弹性网络 + 零膨胀损失)

2.4 稀疏度计算代码示例

以下Python代码演示如何快速计算上述四个稀疏度指标,并输出诊断建议。该代码可直接嵌入数据预处理流水线。

import numpy as np

def sparsity_diagnostics(matrix, missing_mask=None):
    """
    计算稀疏度诊断指标
    
    参数:
        matrix: np.ndarray, 观测数据矩阵
        missing_mask: np.ndarray (bool), True表示缺失, 默认None自动检测NaN
    
    返回:
        dict: 包含ZR, MR, ED, DSR及诊断建议
    """
    total = matrix.size
    n_samples, n_features = matrix.shape
    
    # 缺失值检测
    if missing_mask is None:
        missing_mask = np.isnan(matrix)
    n_missing = np.sum(missing_mask)
    mr = n_missing / total
    
    # 零值检测(排除缺失位置)
    valid_mask = ~missing_mask
    n_zeros = np.sum(matrix[valid_mask] == 0)
    zr = n_zeros / total
    
    # 有效样本密度
    n_effective = total - n_missing - n_zeros
    ed = n_effective / total
    
    # 维度-样本比
    dsr = n_features / n_samples
    
    # 诊断建议
    suggestions = []
    if mr > 0.3:
        suggestions.append("缺失率过高,建议使用矩阵分解或深度生成模型填补")
    if zr > 0.8:
        suggestions.append("零值比例极高,考虑零膨胀模型或二阶段预测")
    if dsr > 5:
        suggestions.append("维度-样本比超标,需加入L2正则或使用收缩估计")
    if ed < 0.1:
        suggestions.append("有效信号极度稀疏,建议增加样本量或特征筛选")
    
    return {
        "zero_ratio": zr,
        "missing_rate": mr,
        "effective_density": ed,
        "dim_sample_ratio": dsr,
        "suggestions": suggestions
    }

# 示例:生成一个稀疏矩阵并诊断
np.random.seed(42)
sparse_mat = np.random.poisson(lam=0.3, size=(100, 50))  # 零膨胀
sparse_mat[np.random.rand(100, 50) < 0.1] = np.nan       # 加入缺失

result = sparsity_diagnostics(sparse_mat)
for key, val in result.items():
    if key == "suggestions":
        print(f"\n诊断建议 ({len(val)} 条):")
        for s in val:
            print(f"  - {s}")
    else:
        print(f"{key}: {val:.4f}")
常见陷阱: 不要将缺失值直接填充为0后再计算零值比例。这会导致ZR被严重高估,掩盖真实的零膨胀结构。正确的做法是先分离缺失掩码,再分别计算MR和ZR。

2.5 稀疏度对调和权重学习的直接影响

在层级预测的调和权重学习中,数据稀疏会引发三个关键问题,需要在参数调优时特别关注:

  • 协方差矩阵奇异: 当DSR > 1时,样本协方差矩阵不可逆,导致最优调和权重(基于最小方差)无法直接求解。此时需引入收缩估计(如Ledoit-Wolf)或伪逆。
  • 权重估计方差过大: 有效样本密度ED越低,权重估计的方差越大,容易出现过拟合。建议在损失函数中加入权重范数惩罚项。
  • 层级间相关性失真: 零膨胀会扭曲层级间的相关系数估计,使调和权重偏向于忽略稀疏层级。可考虑使用稀疏相关矩阵估计(如graphical lasso)。