3. 样本偏差类型(上):选择偏差(Selection Bias)

3.1 定义与核心概念

选择偏差是指在样本采集过程中,由于非随机的选择机制,导致采集到的样本无法代表目标总体真实分布的系统性偏差。在金融知识图谱构建与模型训练中,选择偏差会直接导致知识图谱的“认知盲区”——模型只学会了“被看见”的模式,而对“未被看见”的尾部风险、长尾客群或极端事件缺乏泛化能力。

核心公式表达:
若目标总体分布为 P(X, Y),实际观测到的样本分布为 P'(X, Y),则选择偏差可表示为:
P'(X, Y) ≠ P(X, Y | S=1),其中 S=1 表示样本被选入观测集。
当选择机制 S 与特征 X 或标签 Y 相关时,偏差即产生。

3.2 选择偏差的主要成因

在金融场景中,选择偏差的成因可归纳为以下四类,其中数据采集偏好是最常见且隐蔽的源头:

成因类别 具体描述 金融场景典型表现
数据采集偏好 采集渠道、时间窗口、数据源选择导致样本分布偏移 仅采集头部交易所数据,忽略场外市场;只抓取“热门”股票新闻
幸存者偏差 只观测到“存活”实体,忽略已退市、违约、消亡的实体 基金业绩分析只包含存续基金,忽略清盘基金
自选择偏差 样本是否被观测由实体自身行为决定 自愿披露财务数据的企业往往经营状况更好
截断/删失偏差 因阈值或条件限制,部分样本被系统性地排除 信用评分模型只覆盖有信贷记录的人群

3.3 选择偏差在金融知识图谱中的传导路径

选择偏差在知识图谱中会沿着实体-关系链路逐级放大,形成“偏差级联”效应。以下 SVG 展示了从数据采集到模型决策的完整传导路径:

选择偏差在金融知识图谱中的传导路径 数据采集偏好 仅覆盖头部/活跃数据源 知识图谱构建 实体/关系分布偏移 特征工程 缺失/偏态特征 模型训练 过拟合于有偏样本 决策输出 系统性误判 反馈循环 偏差自我强化 偏差放大循环

3.4 金融场景案例详解

案例一:债券违约预测中的幸存者偏差

场景描述:某机构基于交易所债券数据构建违约预测知识图谱,训练样本仅包含存续债券,未纳入已违约退市债券的历史数据。

  • 偏差表现:模型严重低估违约概率,对信用利差收窄的债券给出“安全”评级。
  • 量化影响:实际违约率是模型预测值的 3.2 倍(基于 2018-2023 年数据回测)。
  • 知识图谱后果:“发行人-担保-债券”三元组中,高风险关联关系被系统性遗漏。
校验方法:对比训练集与全量市场数据的违约率分布;使用 Kaplan-Meier 生存曲线估计删失样本的违约风险。

案例二:智能投顾中的自选择偏差

场景描述:某智能投顾平台基于用户交易行为数据训练资产配置模型,但数据仅来自主动使用该平台的用户。

用户群体 平均持仓周期 年化换手率 风险偏好
平台活跃用户(训练集) 45 天 8.2 倍 激进
全市场零售投资者 120 天 3.5 倍 均衡
偏差方向 低估 62.5% 高估 134% 右偏

知识图谱影响:“用户-持仓-基金”关系图中,长期持有型用户及其关联的稳健型基金被严重低估,导致推荐系统偏向高波动产品。

案例三:供应链金融中的数据采集偏好

场景描述:银行构建供应链知识图谱时,仅采集核心企业 ERP 系统中的交易数据,忽略二级、三级供应商的线下交易记录。

  • 偏差来源:数据采集渠道单一,偏好“数字化程度高”的企业。
  • 知识图谱表现:核心企业节点度(Degree)异常高,而中小供应商节点稀疏,形成“马太效应”。
  • 模型后果:链路预测模型对二级供应商的关联关系召回率仅 12%。

3.5 选择偏差的识别与校验框架

以下 SVG 展示了选择偏差的系统性校验流程,适用于金融知识图谱样本质量评估:

选择偏差校验框架 步骤1 数据溯源审计 采集渠道/时间/范围 步骤2 分布对比检验 KS检验/卡方检验 步骤3 缺失模式分析 MCAR/MAR/MNAR 步骤4 偏差量化评估 逆概率加权 输出:偏差诊断报告 偏差类型 + 严重程度 + 影响范围 ⚠ 关键原则 选择偏差的校验应在知识图谱构建阶段前置执行,而非模型训练阶段补救

3.6 选择偏差的量化评估方法

在金融知识图谱样本偏差校验中,推荐使用以下量化方法评估选择偏差的严重程度:

# 逆概率加权(IPW)估计选择偏差
import numpy as np
from sklearn.linear_model import LogisticRegression

def estimate_selection_bias(X, S):
    """
    X: 特征矩阵
    S: 选择指示变量 (1=被观测, 0=未被观测)
    返回: 每个样本的逆概率权重
    """
    model = LogisticRegression()
    model.fit(X, S)
    propensity = model.predict_proba(X)[:, 1]
    # 防止除零
    propensity = np.clip(propensity, 0.01, 0.99)
    weights = 1.0 / propensity
    return weights

# 计算加权后的分布差异
def weighted_ks_statistic(X, weights, reference_dist):
    """
    计算加权后的 Kolmogorov-Smirnov 统计量
    用于量化选择偏差程度
    """
    # 实现细节省略,返回偏差分数
    return ks_statistic
实践注意:逆概率加权方法依赖于“选择机制可忽略性”假设(即给定特征 X 后,选择 S 与结果 Y 独立)。在金融知识图谱中,若存在未观测的混淆变量(如企业隐性关联关系),IPW 估计可能仍有偏。建议结合双重稳健估计(Doubly Robust)方法进行交叉验证。

3.7 本章小结