村东头的小河上,立着一根锈迹斑斑的水位标尺。小林的工作,是每天清晨把水位记进本子。可生活总有意外:暴雨天他赶不及去河边,本子空了一格;风浪大的日子,标尺在水里晃来晃去,读数明显靠不住。到了月底要交总结时,小林盯着本子上的空白页和可疑数字发愁:这缺了的记录,到底该怎么补? 其实,小林面对的难题,正是数据科学家处理时序数据时的日常。传感器断连、网络抖动、人工漏记……真实世界的数据几乎永远带着空洞和毛刺。而补全空洞的三件常用工具,恰好对应三种生活智慧:「照抄昨天」的前向填充、「两点连线取中间」的线性插值、以及「请懂规律的老工程师出马」的卡尔曼平滑。 这篇文章,我们就跟着小林把三种策略一一试一遍,看看它们各有什么脾气、各自适合什么场景,最后把这套功夫搬进你的 Python 代码库。

岗位关联

缺失值填补是时序分析与预测的「地基工程」——数据质量直接决定下游模型的上限,掌握三种策略能让你的数据管线更稳、预测更准。

目录
  1. 可视化演示
  2. 缺失值现象:记录本上的“空白页”
  3. 前向填充法:照抄上一次的“偷懒智慧”
  4. 线性插值法:两点连线取中间的“折中方案”
  5. 卡尔曼平滑:请懂规律的老工程师出马
  6. 方法对比选型:三把武器怎么挑
  7. 工程实践:把补缺功夫搬进生产线
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示前向填充零阶保持、线性插值趋势连接与卡尔曼平滑最优估计三种缺失值填补方法。

本节配有交互动效(进入视口后自动加载,约 3KB)。

前向填充:零阶保持器 用上一个有效值填充缺失段,保持水平不变 仅使用过去信息,适合实时流式处理 y[t]=y[t-1] if y[t]=null 计算极快O(n)但对长缺失段效果差

缺失值现象:记录本上的“空白页”

小林月底翻本子,发现空白页还分好几种:有的是哪天偷懒没记,孤零零空一格;有的是出差一周,连续空一大段;还有的格子虽然写着数,但小林知道那是大风天抢记的,笔迹都在抖。空白格多不多、成不成片、可不可信,直接决定了他该用哪种补法。

数据世界里,“空白格”叫缺失值(missing value,程序里常写作 NaN),“风浪里的读数”叫噪声(noise)。传感器断电、网络丢包、人工误删,都会制造缺失;而缺失背后的原因不同,又分为完全随机缺失(MCAR)、随机缺失(MAR)和非随机缺失(MNAR)三种类型。其中非随机缺失最棘手——它本身就和数值有关,比如“水位太高时标尺被冲走”,补齐难度陡增。

面对缺失,第一步永远是体检:数一数到底空了多少。缺失率是最直观的指标:

搞清楚了“空白页”的规模,小林才能决定:是随手抄一抄,还是认真请工程师。而这正是接下来三种策略的登场顺序。

缺失率=缺失样本数样本总数×100%\text{缺失率} = \frac{\text{缺失样本数}}{\text{样本总数}} \times 100\%
缺失率就像本子上的“折页数量”,折页越多越要小心:小缺失可以随手补,大缺失必须认真选策略。
  1. 分子缺失样本数:记录本上空白格子的总数,也就是数据中 NaN 的个数,它衡量“丢了多严重”。
    缺失样本数\text{缺失样本数}
  2. 分母样本总数:理论上应该记录的总天数,即整条时间序列的长度,它给出比较的基准。
    样本总数\text{样本总数}
  3. 比例换算分子除以分母再乘以 100,把缺失程度变成百分数,方便和阈值比较、向团队汇报。
    ×100%\times 100\%

前向填充法:照抄上一次的“偷懒智慧”

小林想,水位一天之内不会暴涨暴跌,今天忘了记,那就把昨天的数抄一遍吧。这个办法听起来笨,但胜在快——翻一页就能填一行,而且大多数时候还挺像那么回事。

这种“拿最近一次有效观测去补缺失”的方式,就是前向填充(forward fill)。它的核心假设是:相邻时刻取值变化很小,缺失时刻的状态和上一次观测到的状态基本相同。在传感器偶发掉线、只缺一两个点的场景里,这个假设往往足够好;而且它实现成本极低,是工业流水线上最常用的“急救包”。

它的数学表达非常朴素:

前向填充的缺点一眼就能看穿:如果小林出差一周,回来把七天的记录全抄成出发那天的水位,这条曲线就像被人用直尺“压平”了,完全看不出河水的涨落。所以它只适合低频、短间隔的缺失——偶尔抄一次作业是偷懒的智慧,连抄七天就是自欺欺人了。

x^t=xt−k\hat{x}_t = x_{t-k}
今天的估计值,就是往前数 k 天那次真实观测的值。k 越大,说明缺失拖得越久,这个“抄作业”的假设也就越危险。
  1. 被估计值 $\hat{x}_t$今天本子上没记水位,我们要补上的那个数,带个帽子表示“估计出来的”。
    x^t\hat{x}_t
  2. 最近观测 $x_{t-k}$往前翻 k 天,最后一次真实记下的水位值,它是填写的唯一依据。
    xt−kx_{t-k}
  3. 步长 k缺失持续了几天,就往前翻几天;k=1 表示昨天有记录,k=3 表示已经空了三天。
    k∈{1,2,3,… }k \in \{1, 2, 3, \dots\}

线性插值法:两点连线取中间的“折中方案”

抄作业显然解决不了大段空白。小林换了个思路:既然出发前记了一个数,回来后又能记一个新数,那中间这段时间,水位是不是可以看成在缓慢地“顺着一条斜线走”?

这就是线性插值(linear interpolation)的直觉:把缺失区间前后两个有效观测点用直线连起来,中间每一个缺失时刻,都按它在区间里走过的“进度比例”取值。它不像前向填充那样完全无视变化,而是假设变化是均匀的,因此能保持趋势的连续性。

给定区间两端的时间点 $a$、$b$ 及其观测值 $x_a$、$x_b$,对任意缺失时刻 $t \in (a, b)$,填补公式是:

相比前向填充,线性插值在趋势型数据上漂亮得多:水位缓慢上涨时,补出来的曲线是连续且平滑的。可它也有软肋——它默认中间的变化是线性的,如果缺失期间恰好来了一场暴雨,水位先涨后落,这条“想当然”的直线就会错得离谱。换句话说,连线取中间的智慧,只适合风平浪静的日子。

x^t=xa+t−ab−a(xb−xa)\hat{x}_t = x_a + \frac{t-a}{b-a}\big(x_b - x_a\big)
这条公式翻译成人话就是:从起点出发,按“已经走了百分之多少的路程”的比例,把前后两个读数之间的差值均匀地挪一点过来。
  1. 前后锚点 $x_a$、$x_b$缺失区前最后一个有效观测和后第一个有效观测,像登山路两头的路标。
    xa,xbx_a, \quad x_b
  2. 进度比例 $\dfrac{t-a}{b-a}$时刻 t 在区间 [a, b] 里走过的位置比例,取值在 0 到 1 之间。
    t−ab−a\frac{t-a}{b-a}
  3. 总变化量 $x_b - x_a$后一个路标比前一个路标高(或低)了多少,是待分摊的“总账”。
    xb−xax_b - x_a
  4. 按比例分摊起点值加上“进度 × 总变化量”,得到 t 时刻的合理估计值。
    x^t=xa+λ(xb−xa),λ=t−ab−a\hat{x}_t = x_a + \lambda(x_b - x_a), \quad \lambda = \frac{t-a}{b-a}

卡尔曼平滑:请懂规律的老工程师出马

前两种办法都没法回答一个问题:要是标尺本身就不准呢?小林搬来救兵——退休水文工程师老周。老周看水位从不只看单次读数:他脑子里装着一套“水位变化规律”(比如河水涨落不会在一夜之间跳变),同时清楚标尺会被风浪干扰。他把规律预测和实际读数各自打一个“可信度折扣”,揉在一起得到更稳的估计,这便是卡尔曼滤波(Kalman filter)。

卡尔曼的核心是用两个方程描述系统,统称状态空间模型:

其中 $w_t$ 是过程噪声,体现“规律本身也有随机波动”;$v_t$ 是观测噪声,体现“标尺读数不可全信”。

有了模型还不够,卡尔曼每一轮还要做“预测—更新”两步递推。更新时,用一个可调节的权重——卡尔曼增益 $K_t$——来决定“信规律”还是“信读数”:

被噪声困扰的标尺读数,在卡尔曼手里就像被耐心安抚住了:每一次修正都只信一点点,长期下来,估计曲线既跟得上真实变化,又不会被单个坏点带偏。代价是,老周上岗前你得花功夫告诉他“规律长什么样”——也就是调好 $F$、$H$、$Q$、$R$ 这几个参数;模型没建对,最优估计也会变成最自信的错误。

xt=Fxt−1+wt,zt=Hxt+vtx_t = F x_{t-1} + w_t, \qquad z_t = H x_t + v_t
R 是观测噪声方差,它越大说明标尺越不可信,增益 $K_t$ 越小,估计越依赖规律预测;反之则更信任刚读到的数字。这套“预测—更新”的循环,就是卡尔曼抑制噪声、填补缺失的秘诀。
  1. 预测值 $\hat{x}_{t|t-1}$只按水位变化规律从过去外推出今天的估计,还没使用今天的读数。
    x^t∣t−1\hat{x}_{t|t-1}
  2. 残差 $z_t - H\,\hat{x}_{t|t-1}$今天标尺读数与预测值之差,是“读数带来的新信息”,可能被噪声污染。
    zt−H x^t∣t−1z_t - H\,\hat{x}_{t|t-1}
  3. 卡尔曼增益 $K_t$一个介于 0 和 1 之间的权重,用来给“新信息”打折,决定最终修正的幅度。
    Kt=Pt∣t−1HHPt∣t−1H+RK_t = \frac{P_{t|t-1} H}{H P_{t|t-1} H + R}
  4. 噪声权衡 RR 变大时增益变小,估计更平滑但也更迟钝;R 变小时增益变大,估计更跟手但也更毛躁。
    R↑  ⇒  Kt↓R \uparrow \;\Rightarrow\; K_t \downarrow

方法对比选型:三把武器怎么挑

补齐了三种方法,小林把“武器”一字排开:前向填充像一支铅笔,便宜、随写随用;线性插值像一把直尺,能把两点之间的线画得笔直;卡尔曼平滑则像一套精密仪器,精确但需要先读懂说明书。选型之前,得先定一个“准不准”的尺子。

最常用的评估指标是均方根误差(RMSE),它衡量填补值与真实值之间的整体偏差:

选型的大原则可以浓缩成三条:缺失率低、间隔短、变化慢,选前向填充;趋势平稳、区间适中、怕断档,选线性插值;噪声大、有物理模型、要实时在线估计,才值得上卡尔曼。说到底,没有哪一把锤子能拧螺丝,也没有哪种填补方法能通吃所有数据——先看清“记录本”的毛病,再挑趁手的工具。

RMSE=1n∑i=1n(yi−y^i)2\text{RMSE} = \sqrt{\frac{1}{n}\sum_{i=1}^{n}\big(y_i - \hat{y}_i\big)^2}
把每一处的误差先平方(防止正负抵消)、再平均、再开根号,得到的数越小,说明填补越贴近真实。它就像考试后的平均分,是所有填补策略统一的“评分标准”。
  1. 误差 $y_i - \hat{y}_i$第 i 个位置的真实值与填补值的差,反映这一处补得准不准。
    yi−y^iy_i - \hat{y}_i
  2. 平方求和把所有误差平方后累加,绝对值被放大,正负偏差不再互相抵消。
    ∑i=1n(yi−y^i)2\sum_{i=1}^{n}\big(y_i - \hat{y}_i\big)^2
  3. 取平均除以样本数 n,得到平均平方误差,消除样本量多少的影响。
    1n∑i=1n(yi−y^i)2\frac{1}{n}\sum_{i=1}^{n}\big(y_i - \hat{y}_i\big)^2
  4. 开根号还原开平方后量纲回到原始单位(比如米),数值直观、可解释。
    1n∑i=1n(yi−y^i)2\sqrt{\frac{1}{n}\sum_{i=1}^{n}\big(y_i - \hat{y}_i\big)^2}

工程实践:把补缺功夫搬进生产线

光会选还不够,小林把整套流程沉淀成一条流水线:先体检(检测哪里缺失),再对症(按缺失特征选策略),最后复诊(评估误差)。每一步都是固定动作,谁来了都能照着做。

流水线的核心逻辑,可以用一个分段函数概括:观测到的地方原样保留,缺失的地方交给策略去补:

在代码层面,pandas 的 Series.ffill() 和 Series.interpolate() 就是前两种策略的一行式实现;卡尔曼则可以封装成一个小函数。工程上要特别注意三点:一是批量处理多列数据时逐列应用策略并记录缺失掩码;二是评估时采用“挖洞法”,人为把已知数据挖成缺失来对比填补效果;三是所有填补逻辑必须在训练模型之前完成,且不能把测试集信息混进来,否则会造成数据泄漏。流水线建好之后,小林再也不用对着空白页发愁——数据进来,补好出去,一切自动。

x~t={xt,xt 已被观测x^t,xt 缺失\tilde{x}_t =\begin{cases}x_t, & x_t \text{ 已被观测} \\\hat{x}_t, & x_t \text{ 缺失}\end{cases}
“检测 → 填补 → 评估”三步走:以这条公式为骨架,用 pandas 的 isna() 找空白,用 ffill() 或 interpolate() 补洞,再人为挖洞验证填补质量。
  1. 上分支 $x_t$如果该时刻标尺读数真实存在,就原样保留,不做任何修改,避免画蛇添足。
    xt,若 xt 已被观测x_t, \quad \text{若 } x_t \text{ 已被观测}
  2. 下分支 $\hat{x}_t$如果该时刻是空白的,就用选定的策略(前向填充、线性插值或卡尔曼平滑)生成估计值填入。
    x^t,若 xt 缺失\hat{x}_t, \quad \text{若 } x_t \text{ 缺失}
  3. 输出完整序列 $\tilde{x}_t$逐时刻执行判断后,得到一条没有空洞的时间序列,可以直接喂给下游预测模型。
    x~t={xt,已观测x^t,缺失\tilde{x}_t = \begin{cases} x_t, & \text{已观测} \\ \hat{x}_t, & \text{缺失} \end{cases}

AI 应用场景

工厂传感器数据清洗

阶段:数据预处理(时序数据缺失值填补)

解决的问题:传统做法是发现缺失后直接丢弃整段数据或整行删除,导致样本量骤减、时间序列断裂。用前向填充 + 线性插值组合策略,可在不损失采样完整性的前提下补齐缺失,让下游预测模型获得连续、完整的数据输入。

具体案例:某汽车零部件产线的设备温度传感器每 10 秒上报一次数据,网络抖动导致某台设备连续 2 分钟无数据。数据工程师先用 isna() 定位空洞,判断为短间隔缺失后调用 ffill() 补全,再用 interpolate() 对温度缓慢变化段做平滑修正,产线监控大屏不再出现锯齿状断档。

金融行情分钟级数据修复

阶段:特征工程与数据预处理

解决的问题:行情源偶发 tick 丢失会造成 K 线不连续,直接影响技术指标计算。线性插值能保持价格趋势的连续性,卡尔曼平滑则能在盘口噪声较大时给出更稳定的中间价估计。

具体案例:某量化团队在回测时发现五分钟 K 线偶有跳空(数据提供商缺 tick),他们在分钟数据修复阶段先做缺失检测,对 ≤3 根的缺口用线性插值,对高频盘口数据用卡尔曼滤波去噪,回测曲线的异常尖峰明显减少。

智能穿戴设备心率监测

阶段:传感数据在线滤波与填补

解决的问题:手环佩戴松动时心率读数会同时出现缺失和跳变,单靠插值无法压制噪声。卡尔曼平滑利用“心率短时间内连续变化”的状态模型,对缺失处进行预测式填补,对噪声处进行滤波。

具体案例:某健康 App 团队在心率监测模块接入一维卡尔曼滤波,以时间间隔驱动状态方程,观测噪声方差 R 根据佩戴松紧度自适应调整,用户运动时的心率曲线比原先平滑 40%,且异常归零的缺失点显著减少。

Python 演示

python54 行
import numpy as npimport pandas as pd # 构造 30 天水位的观测序列, 单位: 米np.random.seed(42)t = np.linspace(0, 3, 30)true_level = 0.5 + np.sin(t) * 0.4observed = true_level + np.random.normal(0, 0.08, 30)observed[5:10] = np.nanobserved[18] = np.nan # 策略一: 前向填充ffill = pd.Series(observed).ffill().to_numpy() # 策略二: 线性插值linear = pd.Series(observed).interpolate(method="linear").to_numpy()  # 策略三: 一维卡尔曼平滑 (状态=水位, 观测=标尺读数)def kalman_fill(series, R=0.05, Q=0.01, F=1.0, H=1.0):    n = len(series)    x = series[0] if not np.isnan(series[0]) else 0.5    P = 0.1    filled = np.zeros(n)    for i in range(n):        x_pred = F * x        P_pred = F * P * F + Q        z = series[i]        if not np.isnan(z):            K = P_pred * H / (H * P_pred * H + R)            x = x_pred + K * (z - H * x_pred)            P = (1 - K * H) * P_pred        else:            x = x_pred            P = P_pred        filled[i] = x    return filled  kalman = kalman_fill(observed) # 只在缺失位置评估三种策略的填补误差miss_mask = np.isnan(observed)  def fill_error(pred):    return np.sqrt(np.mean((pred[miss_mask] - true_level[miss_mask]) ** 2))  print("前向填充填补误差: %.4f" % fill_error(ffill))print("线性插值填补误差: %.4f" % fill_error(linear))print("卡尔曼平滑填补误差: %.4f" % fill_error(kalman))print("缺失位置数量: %d" % miss_mask.sum())print("卡尔曼在缺失段估值示例:", np.round(kalman[6:9], 3))
目的:在同一份带缺失和噪声的水位数据上,对比前向填充、线性插值与一维卡尔曼平滑三种策略的填补误差(RMSE),用实验验证文中结论。
  1. observed[5:10] = np.nan人为挖掉一段连续 5 天的观测,构造出“记录空白页”,同时保留真实值作为评估基准。
  2. pd.Series(observed).ffill().to_numpy()pandas 一行实现前向填充,把每个 NaN 替换成最近一次有效观测。
  3. pd.Series(observed).interpolate(method="linear")按序列索引做线性插值,把缺失点落在前后两点的连线上。
  4. def kalman_fill(series, R=0.05, Q=0.01, F=1.0, H=1.0):手写一维卡尔曼滤波器,参数 R(观测噪声)和 Q(过程噪声)是调节“信读数还是信规律”的两个旋钮。
  5. K = P_pred * H / (H * P_pred * H + R)计算卡尔曼增益,R 越大增益越小,观测的信任度越低。
  6. x = x_pred + K * (z - H * x_pred)状态更新:用增益按比例吸收“读数与预测之差”,得到本次最优估计。
  7. miss_mask = np.isnan(observed)记录缺失位置掩码,只在这些位置计算误差,避免被正常观测的噪声干扰结论。
  8. np.sqrt(np.mean((pred[miss_mask] - true_level[miss_mask]) ** 2))缺失位置上的 RMSE,数值越小说明填补越接近真实水位。

常见误区

误区很多初学者在群里问“数据有缺失怎么办”,得到的回答永远是“用 pandas 的 ffill() 啊,一行搞定”。于是无论缺失多少、缺失在哪,我都直接 ffill(),反正看起来数据是齐了。

正解前向填充的本质假设是“值不随时间变化”。它在缺失率低、间隔短的场景下足够好,可一旦遇到强趋势、周期波动或长时间缺失,填补出来的就是一条让人哭笑不得的“平台直线”,趋势信息被彻底抹平。就像小林出差一周把七天记录全抄成出发那天的水位,月底总结根本无法反映河水的真实涨落。

为何常见:因为 ffill() 实在太好写了,一行代码零思考;加上小规模缺失时误差肉眼看不出来,久而久之就被当成了默认操作。

误区我觉得线性插值比前向填充高级多了,它把缺失区间用一条线连起来,曲线看起来完整又平滑,补出来的值肯定更接近真实值。

正解视觉上的“完整”不等于数值上的“准确”。线性插值默认缺失区间内数值呈线性变化,若真实过程是非线性的(比如暴雨导致水位先涨后落),直线会系统性失真。它适合趋势平稳、区间适中的场景,本质是用“简单假设”换“低方差”,换来这个好处的前提是数据别太折腾。

为何常见:人眼对“连续”天然有好感,一条笔直的连线让表格看起来“天衣无缝”,容易让人忽略它背后的线性假设。

误区听说卡尔曼是“最优估计”,那我把所有缺失数据都交给卡尔曼处理,精度一定最高,参数随便调个默认值就行。

正解卡尔曼的“最优”是有前提的:状态方程和观测方程要建得对,过程噪声 Q 和观测噪声 R 要调得合理。模型建错、参数乱给时,它输出的不是最优估计,而是“最自信的错误”——甚至比简单插值更离谱。它像老工程师的精密仪器,不读说明书就上手的后果往往很惨。

为何常见:卡尔曼涉及矩阵和概率论,看起来高深莫测;加上“最优估计”四个字自带光环,人们容易把它当成无需调参的万能解药。

误区以前处理表格数据时,遇到缺失我就 `dropna()`,把有空洞的行删掉,数据立刻变干净,模型也能跑起来,为什么要花时间补?

正解对独立样本的表格,删行尚可接受;但对时间序列,顺序本身就是信息。删行会切断趋势、滞后特征和周期结构,还可能改变采样频率,导致后续频域分析、自回归建模全部失真。更重要的是,时间序列样本通常很少,删掉的每一行都是宝贵信息。补一句:小林把一页记录撕掉,不代表那天的河水没有涨落。

为何常见:表格数据分析中“遇缺删行”是教科书级常规操作,很多人把这张经验照搬到时间序列上,忽略了序列对顺序的敏感性。

面试题

Q1. 前向填充法的核心假设是什么?

单选题 · easy

  • A.缺失值等于最近一次观测值← 正确答案
  • B.缺失值等于相邻观测的平均
  • C.缺失值随时间做线性变化
  • D.缺失值服从正态分布规律

答案:A。前向填充就是把最近一次有效观测直接抄过来,核心假设是“相邻时刻变化很小”。选项 B 是插值思路的一半,C 是线性插值的假设,D 是统计噪声的假设,都与前向填充无关。

Q2. 线性插值法最适合填补哪类缺失?

单选题 · easy

  • A.噪声较大的高频数据段
  • B.区间内趋势近似线性← 正确答案
  • C.完全随机的稀疏散点
  • D.长期缺失的大段空洞

答案:B。线性插值假设区间内数值均匀变化,所以最适合趋势近似线性的数据段。A 的噪声场景更适合卡尔曼,C 无趋势可循时插值没有依据,D 的长空洞会让“线性假设”越拉越长、误差累积。

Q3. pandas 中实现前向填充的常用方法是?

单选题 · easy

  • A.使用 fillna() 填充指定值
  • B.使用 dropna() 删除缺失行
  • C.使用 ffill() 向下填充← 正确答案
  • D.使用 interpolate() 插值

答案:C。ffill()(forward fill 的缩写)用上一个有效值向下填充,正是前向填充。dropna() 是删除,interpolate() 是插值,fillna(0) 是填常数,都不是前向填充。

Q4. 卡尔曼滤波每一轮递推包含哪两个阶段?

单选题 · mid

  • A.编码阶段和解码阶段
  • B.训练阶段和推理阶段
  • C.预测阶段和更新阶段← 正确答案
  • D.采样阶段和量化阶段

答案:C。卡尔曼每轮先由状态方程做预测(外推先验),再用观测值做更新(修正后验),周而复始。编码/解码是自动编码器的概念,训练/推理是机器学习流程,采样/量化是信号处理概念,都不是卡尔曼的递推结构。

Q5. 前向填充法存在哪些明显局限?(多选)

多选题 · mid

  • A.长期缺失会形成数据平台← 正确答案
  • B.会丢失趋势与周期信息← 正确答案
  • C.计算复杂度远高于插值
  • D.不适合缺失占比极低的场景

答案:AB。A 和 B 是前向填充的核心短板:一直抄旧值会让曲线变成平台、趋势消失。C 说反了,前向填充是所有方法里计算量最小的;D 也反了,缺失占比低时前向填充恰恰很合适。

Q6. 卡尔曼增益 K 值偏大时说明什么?

单选题 · mid

  • A.模型更信任预测值而非观测
  • B.模型更信任观测值而非预测← 正确答案
  • C.模型认为观测噪声无穷大
  • D.模型完全没有观测数据可用

答案:B。K 越大,更新时对残差的吸收比例越大,估计越贴近观测值;K 越小则越依赖预测。C 说反了,观测噪声无穷大时 K 趋近于 0;D 若没有观测,更新步骤根本不会发生。

Q7. 哪些场景更适合使用卡尔曼平滑?(多选)

多选题 · mid

  • A.传感器观测含有较强噪声← 正确答案
  • B.系统存在可描述的动态规律← 正确答案
  • C.完全没有物理模型的随机序列
  • D.需要在线实时估计的监控系统← 正确答案

答案:ABD。卡尔曼的用武之地是“有规律 + 有噪声”:A 靠滤波压噪声,B 靠状态方程描述规律,D 靠递推结构天然支持实时更新。C 恰恰相反,没有模型时卡尔曼无从预测,硬套只会输出自信的错误。

Q8. 卡尔曼滤波中观测噪声方差 R 偏大时有何影响?

单选题 · hard

  • A.增益 K 变大,更信任观测值
  • B.增益 K 变小,更信任预测值← 正确答案
  • C.增益 K 不变,估计保持原样
  • D.增益 K 变为零,输出恒定值

答案:B。在增益公式中,R 位于分母的加项,R 越大分母越大、K 越小,估计越依赖预测值;R 越小 K 越接近 1,越信任观测值。A 说反了,C 说 K 不受 R 影响也不对,D 的“恒为零”只在 R 无穷大时近似成立。

Q9. 哪种缺失模式最难被填补策略修复?

单选题 · hard

  • A.完全随机缺失 MCAR
  • B.随机缺失 MAR 模式
  • C.非随机缺失 MNAR 模式← 正确答案
  • D.均匀间隔缺失的模式

答案:C。MNAR 意味着缺失本身和数值大小有关(如水位太高冲走了标尺),缺失位置不是“随机丢的”,任何填补策略都缺少这部分信息。MCAR 和 MAR 的缺失位置与隐藏值无关,可以从其他信息间接估计,相对可修复。

Q10. 如何正确评估不同填补策略的效果?(多选)

多选题 · extreme

  • A.人为挖掉已知点构造验证缺失← 正确答案
  • B.用 RMSE 等指标对比真实值← 正确答案
  • C.直接观察填补曲线是否平滑
  • D.在未知区域用启发式规则打分

答案:AB。规范的评估是“挖洞法 + 量化指标”:先人为构造缺失,再比较填补值与已知真实值的 RMSE。C 的“看着平滑”是主观感受,不能当标准;D 的启发式打分没有真实值作为基准,无法验证误差大小。