4. 基于分布拟合的异常值识别方法

前三节我们主要依靠统计量(均值、标准差、四分位距)来划定异常边界,这类方法隐含了一个前提:数据大致服从某种对称分布。但在量子传感实验中,光子计数、单光子探测时间戳、超导量子比特读出电压等数据往往具有明显的非对称性甚至离散性。此时,更合理的做法是先为数据拟合一个合适的概率分布模型,再依据该分布的分位数或概率密度来判断哪些点"不该出现"。本节围绕高斯、泊松、拉普拉斯三类常用分布,讲解参数估计、拟合优度检验以及基于分位数的异常值标记流程,并讨论非高斯噪声下的局限。

一、为什么先拟合再判断

以光子计数为例:当平均光子数较低(如每采样窗口 λ≈5)时,计数只能取非负整数,分布明显右偏,用"均值±3σ"会把大量正常的高计数点误判为异常,同时把 0 计数附近的不合理点漏掉。若先拟合泊松分布 P(k)=λ^k e^(−λ)/k!,就能用泊松分布自身的上、下分位数(例如 0.5% 与 99.5% 分位点)作为边界,边界随 λ 自动调整,物理意义更清晰。电压采样数据则常呈近似高斯或拉普拉斯(尖峰厚尾)形态,需要先判断尾部厚度再选模型。

二、三类分布的适用场景与参数估计

高斯分布适用于大量独立噪声叠加后的连续量,如经过低噪声放大器的电压采样、多次平均后的磁强计输出。参数用样本均值与样本标准差估计(μ̂=x̄,σ̂=s),也可用稳健的中位数与 1.4826×MAD 估计,以减小异常点对参数本身的污染。

泊松分布适用于计数型数据:光子计数、离子阱荧光收集计数、单光子探测器单位时间脉冲数。其唯一参数 λ 用样本均值估计,λ̂=x̄;同时应检查方差是否接近均值(离散指数 D=s²/x̄,理想泊松情形 D≈1),若 D 显著大于 1 说明存在过离散,需考虑负二项分布或复合泊松模型。

拉普拉斯分布(双指数分布)适用于尖峰厚尾噪声,如某些低温电子学的 1/f 噪声经差分后的残差、锁相放大器输出的低频漂移残差。其密度为 f(x)=1/(2b)·exp(−|x−μ|/b),位置参数 μ 用中位数估计,尺度参数 b 用平均绝对偏差估计,b̂=(1/n)Σ|xᵢ−μ̂|。

三、拟合优度检验

拟合完成后不能直接使用,需要检验模型是否可信。连续分布常用 Kolmogorov–Smirnov 检验:把样本排序后计算经验分布函数与拟合分布函数的最大偏差 D,若 p 值小于 0.05 则拒绝该分布假设。离散的泊松数据更适合卡方拟合优度检验:将计数按区间合并(保证每箱期望频数≥5),计算 χ²=Σ(Oᵢ−Eᵢ)²/Eᵢ,自由度取箱数减 1 再减估计参数个数。此外可用 Q-Q 图目视检查尾部偏离:若高斯拟合的 Q-Q 图两端明显上翘,说明尾部比高斯厚,应改用拉普拉斯或 t 分布。

数据形态 → 分布模型选择 光子计数(离散) 非负整数、右偏 电压采样(连续) 近似对称 残差/漂移(连续) 尖峰厚尾 泊松分布 λ̂ = x̄,检验 D=s²/x̄ 高斯分布 μ̂=x̄,σ̂=s 或 1.4826·MAD 拉普拉斯分布 μ̂=中位数,b̂=平均绝对偏差 拟合优度检验 连续:K–S 检验(D, p) 离散:卡方检验 + Q-Q 图 p ≥ 0.05:接受模型 p < 0.05:换模型/查过离散 分位数边界与异常标记(泊松示例 λ=5) 计数 k P(k) 下分位 0.5% 上分位 99.5% k=1 标记异常 k≥11 标记异常 标记规则:k < F⁻¹(0.005) 或 k > F⁻¹(0.995) λ=5 时边界约为 k≤1 与 k≥11(示例值) 局限:过离散(D≫1)时泊松尾部过窄, 会大量误报,应改用负二项或经验分位数

四、基于分位数的异常值标记

得到可信分布后,异常判定不再依赖"3σ"这类固定倍数,而是用分布的分位点。设显著性水平 α=0.01,双侧判定即取 F⁻¹(α/2) 与 F⁻¹(1−α/2) 作为下、上边界,落在边界外的样本标记为异常。对高斯分布,这等价于约 ±2.58σ;对拉普拉斯分布,边界为 μ±b·ln(2/α),同样 α=0.01 时约为 μ±5.3b,比高斯的 ±2.58σ 更宽,正好体现了厚尾分布"极端值本就更多"的特点。对泊松分布,边界是整数分位点,例如 λ=5 时下边界约为 k≤1、上边界约为 k≥11(示例值,实际应由累积分布精确计算)。

实操中建议采用"两步标记":先用稳健参数(中位数、MAD)做粗筛,剔除明显离群点后再估计分布参数,最后用拟合分布的分位数做正式标记,避免异常点把参数本身拉偏。对时间序列数据,还应把分位数判定与局部窗口结合——例如对电压采样按 1 s 窗口分别拟合,而不是对整段数据用一个全局分布,否则缓慢漂移会被误判。

五、非高斯噪声下的局限性

分布拟合方法并非万能,主要局限有三点。其一,模型误设:若真实噪声是混合分布(如部分采样点受宇宙射线击中形成重尾),单一高斯或拉普拉斯拟合的 p 值会偏低,此时应改用混合模型或直接使用经验分位数(不假设分布形式)。其二,参数污染:极大似然估计对异常点敏感,少量强异常即可显著改变 σ̂ 或 b̂,导致边界被"撑大"而漏检,因此稳健估计不可省略。其三,小样本不可靠:当样本量只有几十个时,分位数估计本身方差很大,0.5% 分位点几乎无法稳定确定,此时宜放宽 α 或改用基于物理先验的阈值。此外,泊松假设要求计数独立且方差等于均值,若探测器存在死时间或串扰,实际方差会偏离,需先做离散指数检验再决定是否采用。

实用建议:对每一批量子传感数据,先画直方图与 Q-Q 图判断形态,再计算离散指数或峰度,据此选择分布;拟合后用 K–S 或卡方检验确认 p 值,最后才用分位数标记异常。整个流程的参数与检验结果应记录在实验日志中,便于复现与横向比较。

下面给出一段可直接参考的 Python 示例,演示泊松拟合、卡方检验与分位数标记的核心步骤(数据为模拟示例,非实测):

import numpy as np
from scipy import stats

rng = np.random.default_rng(7)
counts = rng.poisson(lam=5.0, size=2000)      # 模拟光子计数,示例数据
counts = np.append(counts, [0, 0, 14, 15])     # 人为加入可疑点

lam_hat = counts.mean()                        # 泊松参数估计
disp = counts.var() / lam_hat                  # 离散指数,理想≈1
lo = stats.poisson.ppf(0.005, lam_hat)         # 下分位边界
hi = stats.poisson.ppf(0.995, lam_hat)         # 上分位边界
mask = (counts < lo) | (counts > hi)           # 异常标记
print(f"lambda={lam_hat:.3f}, D={disp:.3f}, 边界=[{lo},{hi}], 异常数={mask.sum()}")

# 卡方拟合优度检验(合并期望频数过小的箱)
bins = np.arange(0, counts.max() + 2)
obs, _ = np.histogram(counts, bins=bins)
exp = stats.poisson.pmf(bins[:-1], lam_hat) * len(counts)
keep = exp >= 5
chi2 = ((obs[keep] - exp[keep])**2 / exp[keep]).sum()
p = 1 - stats.chi2.cdf(chi2, df=keep.sum() - 2)
print(f"chi2={chi2:.2f}, p={p:.4f}")

运行后应重点观察三个量:λ̂ 是否接近物理预期、离散指数 D 是否接近 1、卡方检验 p 值是否大于 0.05。若 D 明显大于 1 或 p 值很小,说明泊松模型不成立,应回到分布选择环节改用负二项分布或经验分位数,而不是强行用泊松边界标记。这样,分布拟合才真正成为异常识别的可靠依据,而非又一个被误用的固定阈值。