想象你是一位厨师,面对顾客“明天想吃什么”的提问,你不会只盯着今天买的菜,而是会回忆:上周哪些菜卖得最好?最近几天大家口味偏咸还是偏淡?过去三天的备货趋势怎么样?这种“回看历史、提炼规律”的本事,正是时序预测中特征工程的核心思想。 在时间序列预测里,模型一开始什么都看不懂——它只有一串数字。滑动窗口就是你的“记忆工具”:让你取出最近 N 天的数据,加工成模型能理解的特征。滞后变量告诉你“昨天和前天发生了什么”,滚动统计量告诉你“最近一周是平稳还是起伏”。两者组合起来,就像厨师既记得具体菜名,又掌握了口味趋势。 本文会把这一整套特征工程方法讲透:窗口大小怎么定、滞后阶数怎么选、怎样避免“偷看未来”的信息泄漏,以及如何把这些特征喂给树模型。读完你就能动手搞定销量、负荷、流量等常见的时序预测任务。

岗位关联

滑动窗口特征工程是时序预测的核心基本功,也是“时序+机器学习”技术栈里性价比最高的一环——掌握它,你就能独立构建出可靠的预测特征管线。

目录
  1. 可视化演示
  2. 时序特征为何不可缺失
  3. 滞后变量提取
  4. 滚动统计量
  5. 滑动窗口形态
  6. 窗口大小与滞后阶数选择
  7. 信息泄漏防护
  8. 与树模型配合
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示时序数据中滑动窗口的构建过程,提取滞后变量和滚动统计量作为特征,直观理解时序特征工程的核心方法。

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

滑动窗口特征工程 滑动窗口:在时序数据上滑动固定大小窗口提取特征 滞后变量:使用过去t-k时刻的值作为当前特征 滚动统计:窗口内均值/方差/最值等统计量 X_t = f(x_{t-1}, x_{t-2}, ..., x_{t-w}) 滑动窗口是时序特征工程的基础方法

时序特征为何不可缺失

厨师站在灶台前,面对明天的菜单。如果只看今天的菜篮——只有一棵白菜、三条鱼——他无从下手。但当他翻开记忆账本:上周三红烧肉卖得最好、这几天的客人口味偏辣、节假日前后销量总会翻倍——一切豁然开朗。模型也是一样:给它一个裸的时间序列数字,它只会说“这只是一个数”;给它构造好的特征,它才能看出“昨天涨了、最近在波动、周末有峰值”。

所谓特征工程,就是把原始数据变成模型能理解的语言。在时序场景中,历史信息天然藏在一串连续的数字里,无法直接暴露给模型。滑动窗口就是那道“记忆透镜”——透过它,模型得以窥见时间结构。

xt∈R⇒ft=[f1(xt−1,…,xt−L), f2(xt−1,…,xt−L), …]\displaystyle x_t \in \mathbb{R} \quad \Rightarrow \quad \mathbf{f}_t = \left[ f_1(x_{t-1}, \ldots, x_{t-L}), \ f_2(x_{t-1}, \ldots, x_{t-L}), \ \ldots \right]

1. 原始数值:时刻 \\(t\\) 的单点观测,如当天销量。

xt∈Rx_t \in \mathbb{R}

2. 过去长度:选择最长回顾范围 L,即记忆深度。

xt−1, xt−2, …, xt−Lx_{t-1}, \ x_{t-2}, \ \ldots, \ x_{t-L}

3. 特征函数:把历史序列映射成标量特征。

f1(⋅), f2(⋅)f_1(\cdot), \ f_2(\cdot)

4. 特征向量:多个特征拼接,成为模型输入。

ft=[f1,f2,…]\mathbf{f}_t = [f_1, f_2, \ldots]

窗口的宽度就决定了“记忆账本”的厚度。没有这些特征,任何模型都会因缺乏时间上下文而沦为“盲人摸象”。构造特征是时序预测的第一步,也是成败的分水岭。

滞后变量提取

厨师回忆昨天、前天分别做了什么菜——这是最直接的历史记忆。滞后变量做的事情完全一致:把过去第 k 天的观测值直接作为今天的特征。假如今天编号 t,那么 \\(x_{t-1}\\) 就是“昨天值”,\\(x_{t-7}\\) 就是“上周同一天的值”。它们不加修饰地摆在模型面前,让模型自己学会利用它们。

滞后变量是时序特征中最简单也最可靠的成员。它几乎不引入噪声,直接保留原始信息的颗粒度。对于树模型而言,一个 \\(x_{t-1}\\) 可能就贡献了最重要的分裂依据——比如“昨天销量 1000 件,明天可能也接近 1000 件”。

lag_1=xt−1,lag_7=xt−7,lag_k=xt−k\displaystyle \text{lag\_1} = x_{t-1}, \quad \text{lag\_7} = x_{t-7}, \quad \text{lag\_k} = x_{t-k}

1. 滞后 1 阶:昨天的值。

lag_1=xt−1\text{lag\_1} = x_{t-1}

2. 滞后 7 阶:上周同天的值,捕捉周期。

lag_7=xt−7\text{lag\_7} = x_{t-7}

3. 通用形式:任意 k 天前的值,k 即滞后阶数。

lag_k=xt−k\text{lag\_k} = x_{t-k}

滞后阶数的选取很有讲究。预测日销量,lag1 到 lag7 都是合理候选;预测小时负荷,lag24 能抓住“昨天同一时刻”的用电模式。阶数越多,模型接触的历史“切片”越丰富,但也可能带来冗余。用自相关分析能帮你判断:哪些阶数的滞后值与当前值关系紧密,优先选用它们。

滚动统计量

滞后变量给了模型“具体某天发生了什么”,但样本总会有波动。厨师不仅记得昨天做了红烧肉,还知道“这周整体口味偏辣、客流波动不大”。滚动统计量就是这种“总结式记忆”:它在每个时刻,对最近一个窗口内的数值求均值、方差、最大值等,把一段历史浓缩成一个统计量。

滚动均值是最常用的代表——它能平滑短期抖动,显露趋势的方向。滚动方差则告诉你这段日子是平静还是动荡,比如“最近几天销量忽高忽低”可能预示促销活动或异常事件。滚动最大值与最小值可以标识“这段时间的巅峰与谷底”。多个统计量组合起来,模型既能看清方向,也能感知风险。

meant=1W∑i=1Wxt−i,stdt=1W∑i=1W(xt−i−meant)2\displaystyle \text{mean}_t = \frac{1}{W} \sum_{i=1}^{W} x_{t-i}, \qquad \text{std}_t = \sqrt{\frac{1}{W} \sum_{i=1}^{W} \left( x_{t-i} - \text{mean}_t \right)^2}

1. 窗口求和:把窗口内 W 个历史值相加。

∑i=1Wxt−i\sum_{i=1}^{W} x_{t-i}

2. 求平均:除以窗口宽度,得到均值。

1W∑i=1Wxt−i\frac{1}{W} \sum_{i=1}^{W} x_{t-i}

3. 计算偏离:每个历史值减去均值,求平方。

(xt−i−meant)2\left( x_{t-i} - \text{mean}_t \right)^2

4. 汇总求根:平均后开根号,得到标准差。

1W∑i=1W(xt−i−meant)2\sqrt{\frac{1}{W} \sum_{i=1}^{W} \left( x_{t-i} - \text{mean}_t \right)^2}

滚动统计量的价值在于“抗噪”。原始单点可能剧烈跳动,但一轮窗口的均值往往稳定得多。这就像厨师不会因为一天卖得差就改菜单,而是看一周的整体反馈。滚动统计量在销量预测、服务器负载预测里几乎必用,因为它能把“嘈杂”的历史提炼成“平滑”的规律。

滑动窗口形态

窗口并非只有“正装”一种形态。厨师有的习惯翻看最近三天,有的会侧重最近一天、淡化更早的记忆——滑动窗口的设计也有多种变体。最基本的形态是固定窗口:窗口内每个历史值权重相等。它的直觉是“最近 W 天的每一天都同等重要”。

加权窗口则认为“越近越重要”,比如指数加权窗口会给昨天的数值更高的权重,让特征更贴近期现状。长周期窗口则跨越多个周期,比如用过去 28 天覆盖四个完整周,捕捉稳定的周期模式。不同形态服务于不同场景:突发敏感型业务适合加权窗口,平稳周期性业务适合固定宽窗。

WMt=∑i=1Wwi⋅xt−i,∑i=1Wwi=1\displaystyle \text{WM}_t = \sum_{i=1}^{W} w_i \cdot x_{t-i}, \qquad \sum_{i=1}^{W} w_i = 1

1. 权重分配:每个历史点有权重 \\(w_i\\)。

wi∈[0,1]w_i \in [0, 1]

2. 加权求和:历史值与权重相乘累加。

∑i=1Wwi⋅xt−i\sum_{i=1}^{W} w_i \cdot x_{t-i}

3. 归一约束:所有权重相加等于 1。

∑i=1Wwi=1\sum_{i=1}^{W} w_i = 1

在实际落地中,固定窗口实现简单、可解释性强,常作为 Baseline;加权窗口略微复杂,但能适应“近因效应”明显的场景;长周期窗口则有助于模型看到“去年同期”的背景值。窗口形态的选择本质上是你对“时间如何影响未来”的假设。

窗口大小与滞后阶数选择

厨师面临一个难题:账本到底记多少天好?只记 3 天太短,看不到周期;记 365 天又太长,噪音太多,还让模型变笨。窗口大小与滞后阶数的选择是特征工程的核心权衡。

一方面,领域知识直接给出答案:日销量预测天然看 7 天周期,窗口宽度设 7;小时负荷预测看 24 小时周期,窗口设 24。另一方面,自相关分析是客观工具:画出滞后 k 与当前值的相关系数,找到相关性高的 k 作为候选滞后阶数。最后用交叉验证拍板:不同窗口宽度各自训练一次,用验证集误差定胜负。

ρk=Cov(xt,xt−k)Var(xt)⋅Var(xt−k)\displaystyle \rho_k = \frac{\text{Cov}(x_t, x_{t-k})}{\sqrt{\text{Var}(x_t) \cdot \text{Var}(x_{t-k})}}

1. 协方差:衡量两个时刻数据的共同变化程度。

Cov(xt,xt−k)\text{Cov}(x_t, x_{t-k})

2. 方差乘积:标准化分母,消除量纲影响。

Var(xt)⋅Var(xt−k)\sqrt{\text{Var}(x_t) \cdot \text{Var}(x_{t-k})}

3. 相关系数:取值在 -1 到 1 之间,越大越相关。

ρk=CovVar⋅Var\rho_k = \frac{\text{Cov}}{\sqrt{\text{Var} \cdot \text{Var}}}

实际操作中,先把自相关图画出来,挑出几个显著的 k;再把候选窗口宽度(如 3、7、14、28)逐一尝试,交给时序交叉验证去筛选。记住一个朴素原则:窗口小则特征少、欠拟合风险高;窗口太大会淹没近期信号。平衡之道,永远以验证集的表现说话。

信息泄漏防护

厨房里有一条铁律:做今晚的菜,绝不能用明天的食材。信息泄漏是时序特征工程最致命的错误——它的本质是“特征里混入了未来信息”,让模型在训练时偷看到了答案,上线后立刻失灵。

最典型的泄漏场景有两个。第一,特征构造时使用了未来时刻的统计量,例如用 t+1 天的值计算 t 天的滚动均值;第二,数据切分时没有按时间顺序,随机打乱了训练集与验证集,让“未来样本”混入训练。前者让模型“开卷考试”,后者让验证结果“虚高”。特征缩放同样要小心:均值方差标准化只能以训练集的历史数据拟合,绝不能让验证集参与计算。

特征t 只允许使用 {x1,x2,…,xt},不得使用 {xt+1,xt+2,…}\displaystyle \text{特征}_t \ \text{只允许使用} \ \{x_1, x_2, \ldots, x_t\}, \quad \text{不得使用} \ \{x_{t+1}, x_{t+2}, \ldots\}

1. 可用信息:只能依赖当前与过去。

{x1,x2,…,xt}\{x_1, x_2, \ldots, x_t\}

2. 禁用信息:任何未来观测都不允许进入特征。

{xt+1,xt+2,…}\{x_{t+1}, x_{t+2}, \ldots\}

3. 特征合规:满足条件才是无泄漏特征。

特征t⊆过去信息\text{特征}_t \subseteq \text{过去信息}

符合直觉的防泄漏措施包括:训练-验证按时间点切分(如前 80% 时间训练、后 20% 验证);构建滞后特征时确保偏移为正;归一化参数只在训练段上拟合。许多项目在原型阶段表现惊艳,上线后崩塌,原因就是“信息泄漏”这个隐形杀手。

与树模型配合

当特征工程完成,一桌“菜”已经备好,接下来就是大厨展身手的时候了。LightGBM、XGBoost 这类树模型可以直接吃下滞后变量和滚动统计量这些表格型特征,不需要额外的“摆盘”处理。这也是为什么“滑动窗口特征+树模型”成为工业界最经典的时序预测组合。

树模型天然擅长捕捉特征间的非线性关系。例如“s 滞后 7 天值高 + 滚动均值低 = 异常回落”这种模式,树模型可以自动学习到;而线性模型就难以表达这种交互。因此,特征工程的目标不是让特征“看起来漂亮”,而是把时间结构暴露给树模型,让它自己挖掘规律。

y^t=T(lag1,lag7,mean7,std7,…)\displaystyle \hat{y}_t = \mathcal{T}\left( \text{lag}_1, \text{lag}_7, \text{mean}_7, \text{std}_7, \ldots \right)

1. 特征输入:多个滑动窗口特征。

lag1,lag7,mean7,std7\text{lag}_1, \text{lag}_7, \text{mean}_7, \text{std}_7

2. 树模型映射:从特征空间到预测值的非线性映射。

y^t=T(⋅)\hat{y}_t = \mathcal{T}(\cdot)

3. 预测输出:模型给出的未来时刻估计值。

y^t\hat{y}_t

实际训练中,LightGBM 能高效处理几百个滑动特征而不过拟合。配合早停和时序交叉验证,一个轻量级预测系统就搭建完成了。这也是大多数电商销量预测、云资源调度、流量预估系统的标配方案。

AI 应用场景

电商销量预测

阶段:特征工程

解决的问题:传统做法只用“当日销量”预测次日销量,完全忽视周期性(周末效应、节假日)与近期趋势。滑动窗口特征将最近 7 日销量、滚动均值、滚动标准差纳入特征集,让模型立刻感知“大盘趋势”与“波动状态”,滞后 7 阶变量则自动捕捉“上周同期”的周期信号。

具体案例:某电商平台运营 SKU 的日销量预测。工程师构造 lag1、lag7、lag14、mean7、std7、max7 共 6 个特征,投入 LightGBM 回归模型,验证集 MAPE 从原来的 38% 降至 22%,且预测曲线更贴合促销前后的波动。

云服务器负载预测

阶段:时序特征处理与模型训练

解决的问题:服务器负载波动剧烈,单点观测无法反映真实压力趋势。通过滚动统计量(如最近 10 分钟的 CPU 平均负载、峰值、方差),模型能够区分“平稳期”与“突发高峰”,从而提前扩容。

具体案例:某云厂商用 1 分钟粒度负载数据构建滑动窗口特征,窗口宽度取 10 与 60 两个尺度,分别捕捉短期抖动与长期趋势;LightGBM 预测未来 5 分钟负载,弹性伸缩模块依据预测值自动加减容器实例,资源浪费减少 30%。

金融时序风控特征

阶段:特征构造与防泄漏校验

解决的问题:交易序列存在强自相关,欺诈行为往往表现为“偏离个人常规”——即滚动均值附近的异常抖动。滑动窗口提取滚动均值、滚动极差、滚动标准差后,风控模型能够量化“偏离程度”,识别异常交易。

具体案例:某支付平台为每个用户构造近 30 笔交易的滚动均值与标准差,计算“当前交易偏离均值的倍数”作为特征,异常交易召回率提升 25%。同时利用时间顺序切分严格防止标签泄漏,保证线上效果与离线评估一致。

Python 演示

python42 行
import numpy as npimport pandas as pdfrom sklearn.model_selection import TimeSeriesSplitfrom sklearn.metrics import mean_absolute_errorfrom lightgbm import LGBMRegressor np.random.seed(42) # 1. 构造模拟日销量数据(含趋势、周期、噪声)dates = pd.date_range('2023-01-01', periods=365, freq='D')trend = np.linspace(50, 80, 365)season = 10 * np.sin(np.arange(365) * 2 * np.pi / 7)noise = np.random.normal(0, 5, 365)sales = trend + season + noisedf = pd.DataFrame({'date': dates, 'sales': sales}) # 2. 滑动窗口特征工程df['lag_1'] = df['sales'].shift(1)df['lag_7'] = df['sales'].shift(7)df['lag_14'] = df['sales'].shift(14)df['mean_7'] = df['sales'].rolling(window=7).mean()df['std_7'] = df['sales'].rolling(window=7).std()df['max_7'] = df['sales'].rolling(window=7).max() # 3. 丢弃含有 NaN 的初始窗口df = df.dropna().reset_index(drop=True)feature_cols = ['lag_1', 'lag_7', 'lag_14', 'mean_7', 'std_7', 'max_7']X = df[feature_cols]y = df['sales'] # 4. 按时间顺序切分训练/测试集split_idx = int(len(df) * 0.8)X_train, X_test = X.iloc[:split_idx], X.iloc[split_idx:]y_train, y_test = y.iloc[:split_idx], y.iloc[split_idx:] # 5. 训练 LightGBM 并评估model = LGBMRegressor(n_estimators=200, learning_rate=0.05, random_state=42, verbose=-1)model.fit(X_train, y_train)pred = model.predict(X_test)mae = mean_absolute_error(y_test, pred)print(f'MAE on test set: {mae:.2f}')print('Feature importance:', list(model.feature_importances_))
目的:完整演示“滑动窗口特征构造→时序切分→树模型训练评估”的流水线,是工业时序预测的最小可运行原型。
  1. df['sales'].shift(1)滞后 1 阶:把昨天销量拉过来当特征,shift 是滞后变量的核心操作。
  2. df['sales'].rolling(window=7).mean()滚动均值:对最近 7 天求平均,捕捉“这周卖得怎么样”。
  3. .rolling(window=7).std()滚动标准差:数值大说明近期波动剧烈,模型可据此调整预期。
  4. df.dropna()丢弃初始窗口缺失值,因为前 14 天没有完整的滞后历史。
  5. model.fit(X_train, y_train)把滑动窗口特征直接喂给 LightGBM,树模型自动学习组合模式。

常见误区

误区我认为滞后特征越多越好,把 lag1 到 lag50 全部放进去,模型看到的信息越多,预测应该更准。

正解滞后阶数过多会引入大量冗余特征,增加训练开销,甚至导致过拟合——模型记住了历史噪声而非规律。就像厨师把三个月前每天的菜名都背下来,反而模糊了对近期口味的判断。真正有效的阶数应当基于自相关分析挑选,或由交叉验证决定,通常 1 到 14 阶就足够覆盖日维度的大多数场景。

为何常见:超参数“加量”的直觉在深度学习中常成立,但在特征工程里,特征维度增长会带来维度灾难,树模型的分裂也会被无关特征干扰。

误区训练集和测试集随机打乱多省事,反正都是同一个数据集,模型不会作弊的。

正解时序数据一旦随机切分,“未来数据”就会混入训练集。模型有机会“看到”测试期附近的信息,导致验证集评分虚高,上线后立刻失灵。就像厨师练习时偷偷用了明天的菜,真正做菜时就露馅。正确做法是按时间顺序切分:前 80% 时间训练,后 20% 验证,所有特征构造都不得使用未来数据。

为何常见:传统表格分类任务中随机切分是标准做法,直接把同一套流程搬到时序任务就会踩坑。

误区有了滚动均值、滚动标准差,滞后变量就不重要了,统计量已经包含了历史信息。

正解滚动统计量是“压缩”后的摘要,丢失了具体某天的原始值。例如 lag7 能告诉模型“上周二恰好是促销日,销量特别高”,而滚动均值无法还原这一信息。两者是互补关系:滞后变量提供精确到天的记忆,滚动统计量提供窗口层面的趋势与波动。实际项目中通常同时使用两者。

为何常见:直观上均值、方差似乎“概括了一切”,但时序预测对具体日期的异常值敏感,原始滞后值的分辨率不可替代。

误区设置窗口宽度为 7,就等于同时处理了滞后 7 阶的特征,两者是一回事。

正解窗口宽 7 意味着“计算统计量时回顾 7 天”,产生的是均值、方差这类聚合特征;滞后 7 阶则是“把第 7 天前的原始值单独作为一个特征”。窗口宽度决定统计量的“视野”;滞后阶数决定原始值的“取点”。二者维度不同,常配合使用。比如 window=7 的均值配合 lag1、lag7,既看整体又看具体时刻。

为何常见:两个概念都涉及“回顾历史长度”,初学者容易在语义上混淆,误以为同一参数控制一切。

面试题

Q1. 滞后变量"lag_7"在日销售数据中的含义是什么?

单选题 · easy

  • A.未来第 7 天的销售预测值
  • B.7 天前那天的实际销量值← 正确答案
  • C.最近 7 天的平均销量
  • D.当前时间窗口的宽度

答案:B。lag_7 通过 shift(7) 将第 t-7 天的原始值作为时刻 t 的特征,选项 B 正确。A 是未来信息,违反防泄漏原则;C 是滚动均值;D 是窗口宽度,均与“滞后变量”定义不符。

Q2. 滚动统计量中的“滚动标准差”主要刻画了时序的什么特性?

单选题 · easy

  • A.长期增长趋势
  • B.近期数据的波动程度← 正确答案
  • C.数据的周期性长度
  • D.未来数据的均值水平

答案:B。标准差衡量数据偏离均值的程度,滚动标准差对每个窗口计算该值,反映近期是平稳还是动荡。趋势由均值刻画,周期由自相关分析刻画,未来均值涉及泄漏,故其他选项错误。

Q3. 下列关于信息泄漏的说法,正确的是哪一项?

单选题 · mid

  • A.训练集与测试集随机划分可提升模型泛化能力
  • B.构造特征时可以使用未来一小段数据补充信息
  • C.特征时刻 t 只能使用 t 时刻及之前的数据← 正确答案
  • D.特征缩放可以让全量数据参与计算以提升精度

答案:C。防泄漏黄金法则是“构造 t 时刻特征时,不得使用 t+1 及之后数据”。A 随机划分在时序中必泄漏;B 直接使用未来数据是泄漏;D 缩放若用全量统计量,验证集信息混入训练。C 完全正确。

Q4. 窗口宽度为 7 的滚动均值,与滞后 7 阶特征的主要区别是?

单选题 · mid

  • A.两者完全相同,只是实现方式不同
  • B.滚动均值是聚合值,滞后变量是原始值← 正确答案
  • C.滞后变量能抵抗噪声,滚动均值不能
  • D.滚动均值更适合线性模型,滞后变量适合树模型

答案:B。滚动均值对窗口内 7 个值取平均,是“摘要特征”;滞后变量保留某一天原始值,是“点特征”。B 正确。A 混淆概念;C 相反,滚动均值更抗噪;D 对模型类型无此区分。

Q5. 自相关系数 rho_k 的用途是?

单选题 · mid

  • A.衡量第 k 天前数据与当前数据的线性相关程度← 正确答案
  • B.计算窗口内数据的均值
  • C.消除时序数据的季节性
  • D.决定树模型的最大深度

答案:A。自相关系数用于评估“距离 k 步之前的值”与当前值的相关性,数值高提示该滞后阶数值得选为特征。B 是滚动均值;C 是差分/季节分解;D 是模型超参数,均不相关。

Q6. 关于滑动窗口特征构造,以下哪些是正确的?

多选题 · mid

  • A.加权窗口会给近期数据更大的权重← 正确答案
  • B.固定窗口内所有历史点权重相等← 正确答案
  • C.窗口宽度越宽一定越好
  • D.长周期窗口可覆盖多个完整周期← 正确答案

答案:ABD。A 正确,加权窗口凸组合中近值权重更大;B 正确,固定窗口平均分配权重;C 错误,窗口过宽引入噪声且丢失近期信号;D 正确,如 28 天窗口覆盖 4 个完整周。

Q7. 在时间序列交叉验证中,为什么不能用普通的 K-Fold 随机切分?

单选题 · hard

  • A.会导致训练集和测试集特征分布完全一致
  • B.随机打乱会把未来数据混入训练集,造成泄漏← 正确答案
  • C.因为 K-Fold 无法运行在树模型上
  • D.因为时间序列数据量通常不够 K 折

答案:B。普通 K-Fold 随机划分假设样本独立同分布,但时序数据存在时间依赖,随机打乱后未来样本会进入训练集,模型“偷看答案”。时间序列需要按时间顺序切分(如 TimeSeriesSplit),保证训练集永远在测试集之前。

Q8. 以下哪个特征构造方式不会引起信息泄漏?

单选题 · hard

  • A.用 t+1 天的真实值填充 t 天的缺失值
  • B.用全量数据的均值做标准化后训练模型
  • C.对训练段拟合标准化参数,应用于测试段← 正确答案
  • D.在特征中加入未来一周的节假日标记

答案:C。C 只使用训练段统计量,无泄漏。A 用未来值填充过去缺失,泄漏;B 标准化用了全量数据含验证集信息;D 额外的未来信息也属于泄漏(若该标记包含未来事件)。

Q9. 在销量预测项目中,你准备使用滑动窗口特征,合理的设计包括哪些?

多选题 · hard

  • A.滞后阶数取 1、7、14 覆盖日周期← 正确答案
  • B.滚动均值窗口取 7 与 28 两个尺度← 正确答案
  • C.把测试集数据放进训练集一起训练
  • D.用 TimeSeriesSplit 进行模型选择← 正确答案

答案:ABD。A 日销量预测采用日周期相关滞后合理;B 多尺度窗口能同时捕捉短期与长期趋势;C 测试集进训练集必泄漏;D 时序交叉验证是正确评估方式。综合来看 ABD 正确。

Q10. 树模型(如 LightGBM)使用滑动窗口特征的优势是什么?

单选题 · easy

  • A.能自动提取时间序列的深度语义特征
  • B.可以直接把滞后变量和滚动统计量当普通特征处理← 正确答案
  • C.不需要特征工程就能理解时间顺序
  • D.在所有场景下一定优于循环神经网络

答案:B。树模型把每个特征独立看待,滞后值与滚动均值就是普通数值型特征,自动学习分裂组合。A 是深度学习的特性;C 错误,树模型不理解“顺序”语义;D 过度绝对化,RNN 在长序列场景有优势。