设想你是交响乐团的指挥。你面前摆着三种“声部”:鼓手敲出稳定的节拍(日周期)、弦乐奏响反复的主旋律(周周期)、铜管撑起整个乐章由缓到急的大结构(年周期)。只看任何一行谱子,都会错失其他声部;真正的音乐,永远是所有声部同时奏响的。 现实世界的时间序列也是如此。电力负荷、零售销量、交通流量,往往同时跳动着日、周、年三种节律——早晨和傍晚用电双峰,周末和平时购物行为不同,夏季与冬季负荷天差地别。经典的 SARIMA 一次只认一个周期,面对多周期只好顾此失彼。多重季节性建模,就是教你像指挥家一样,先听清每个声部,再让它们各归其位,最终合奏出一支可预测的乐曲。本文将用“指挥一场多声部交响乐”的思路,带你掌握多周期识别、傅里叶基展开、TBATS 与 Prophet 两大建模方案。

岗位关联

掌握多重季节性建模,意味着你能胜任电力、零售、交通等高频多周期场景的预测任务——这是时序分析岗的硬通货,也是从“会跑单周期模型”迈向“能解决真实业务问题”的关键一步。

目录
  1. 可视化演示
  2. 多周期识别
  3. 傅里叶基展开
  4. TBATS模型
  5. Prophet方案
  6. 建模流程
  7. 实战应用
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示时序数据中日、周、年三重周期叠加现象,傅里叶基展开多周期建模方法,以及SARIMA、TBATS、Prophet三种模型对比。切换模式探索不同环节。

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

三重周期叠加分解 日周期(频率24h)、周周期(频率168h)、年周期(频率8760h)以不同频率叠加形成复合波形 SARIMA只能建模单一周期,其余周期信息残留在残差中导致预测偏差 y(t) = f_day(t) + f_week(t) + f_year(t) + ε(t) 多重季节性建模同时刻画所有周期成分

多周期识别

走进排练厅,指挥家的第一件事不是翻开总谱,而是闭眼静听——分辨此刻到底有几种乐器在响。鼓点的密集敲击、弦乐的悠长乐句、铜管的宏大铺陈,三者交织成一条完整的声波。时间序列也是一样:日周期是每天重复的“鼓点”(用电高峰、早高峰车流),周周期是每周循环的“主旋律”(周末出游、工作日通勤),年周期则是跨年的“大结构”(冬夏用电差异、年度促销节奏)。

周期可视化是最直接的“听声辨位”。把24小时的数据画成曲线,你会看到早晚两个驼峰;把同一周的7天叠在一起对比,能发现周一与周六形态迥异;把12个月的均值连成线,夏季与冬季的差异一目了然。多层小图叠加在一起,就像把混音轨拆成三条独立音轨,每条声部的主轮廓清晰浮现。

如果肉眼还不够有说服力,就请出自相关函数(ACF)这个“声学仪器”。它测量的是“相隔 k 步的数据有多像”。假设数据存在24小时周期,那么在 lag = 24、48、72 处会依次出现显著峰值,就像你在山谷里大喊,每隔固定秒数听到一次回声。自相关诊断把这些回声的位置和强度量化,帮你确认周期到底存不存在、周期有多长。

识别声部是后续一切的基础。只有明确知道乐团里有日、周、年三种节律,你才能在建模时分别为它们安排专属的“乐手”。多周期识别不是终点,而是指挥家手上的第一份声部清单。

rk=∑t=1n−k(yt−yˉ)(yt+k−yˉ)∑t=1n(yt−yˉ)2r_k = \frac{\sum_{t=1}^{n-k}(y_t-\bar{y})(y_{t+k}-\bar{y})}{\sum_{t=1}^{n}(y_t-\bar{y})^2}
自相关系数 r_k 衡量间隔 k 步的两个数据点之间的相似程度。若 r₂₄ 显著为正,说明存在24步的周期回声。
  1. 分子(协方差求和)把相隔 k 期的每一对数据,分别减去整体均值后相乘再累加。它捕捉的是“相隔 k 步的两个点是否同涨同跌”。
    ∑t=1n−k(yt−yˉ)(yt+k−yˉ)\sum_{t=1}^{n-k}(y_t-\bar{y})(y_{t+k}-\bar{y})
  2. 分母(方差归一)把所有数据偏离均值的平方和算出来,作为总波动尺度的基准,让分子不再是量纲相关的大数。
    ∑t=1n(yt−yˉ)2\sum_{t=1}^{n}(y_t-\bar{y})^2
  3. 比值 r_k(回声强度)分子除以分母得到介于 -1 到 1 之间的相关系数。r_k 接近1,说明 k 步之后形态高度重现,周期回声极强。
    rk=协方差方差r_k = \frac{\text{协方差}}{\text{方差}}

傅里叶基展开

既然听清了三个声部,指挥家要做的下一件事,是把每条旋律翻译成乐谱上的基础音符。任何再复杂的波形,都能由一组简谐波(正弦与余弦)组合出来——这就是傅里叶基展开的哲学:用简单的音符拼出复杂的和弦。

正弦余弦项是乐谱上的基础音符:一个周期的波形被拆成若干对 \(\cos\) 与 \(\sin\) 的组合。谐波频率则像是泛音——基频决定周期长度(例如24小时),倍频则负责刻画周期内部的细微起伏(比如一天里的早、晚双峰)。逼近能力正是傅里叶展开的精髓:K 越大,加入的谐波越多,拟合的曲线越能贴近真实波形,就像把旋律交给更多乐器合奏,声音层次越丰富。

在建模时,我们为每个识别出的周期(日周期 P=24、周周期 P=168)分别生成一组傅里叶特征,把它们作为回归变量喂给模型。这就是多周期显式建模:每个周期都有自己的“声部轨道”,互不干扰,协同奏效。

傅里叶基展开是打通多周期建模的“万能钥匙”。它不挑模型——线性回归、TBATS、Prophet 内部都在用它;也不需要你为每个周期发明新方法,只要把周期长度 P 告诉它,音符就会自动排好。

yt=a0+∑k=1K[akcos⁡(2πktP)+bksin⁡(2πktP)]y_t = a_0 + \sum_{k=1}^{K} \left[ a_k \cos\left(\frac{2\pi k t}{P}\right) + b_k \sin\left(\frac{2\pi k t}{P}\right) \right]
这条公式把时间序列 y_t 表示为截距 a₀ 加上 K 对正余弦谐波的和。P 是周期长度,k 是谐波序号,a_k 与 b_k 是每个谐波对应的权重。
  1. 基线截距 a₀序列围绕的整体水平,相当于乐队的基准音量,不随周期波动。
    a0a_0
  2. 频率因子(2πk / P)决定第 k 个谐波“转多快”。k=1 是基频,k=2 是二倍频,频率越高,波形越密。
    2πkP\frac{2\pi k}{P}
  3. 余弦项(a_k cos(……))负责描述周期波形的“对称部分”,例如用电曲线的平滑上升段。
    akcos⁡(2πktP)a_k \cos\left(\frac{2\pi k t}{P}\right)
  4. 正弦项(b_k sin(……))负责描述不对称的“陡峭部分”,例如早高峰的急剧拉升。
    bksin⁡(2πktP)b_k \sin\left(\frac{2\pi k t}{P}\right)
  5. 求和(Σ 到 K)K 个谐波累加,相当于把多个声部叠加,共同逼近真实曲线。
    ∑k=1K[akcos⁡(⋅)+bksin⁡(⋅)]\sum_{k=1}^{K} \left[ a_k \cos(\cdot) + b_k \sin(\cdot) \right]

TBATS模型

有了傅里叶这把钥匙,指挥家还需要一套完整的“排练方法论”。TBATS 就是这样一位严谨的指挥家:它的名字拆开就是五条工作指令——三角函数季节项(Trigonometric)、Box-Cox 变换、ARMA 误差、趋势项(Trend)、季节项(Seasonal)。合起来,它能同时管理多个周期的声部。

模型结构好比总谱的排版:观测值被拆成“季节项之和 + 趋势 + 误差”三大板块。多季节项相加是最关键的动作——日、周、年每个周期各占一行谱,互不干扰,最后直接相加成最终旋律。每个季节项内部,正是用傅里叶三角函数来描述的,所以 TBATS 能处理分数周期和超长周期,而普通 SARIMA 只能硬啃一个整周期。Box-Cox变换像是调音师,先把数据的“音量”(波动幅度)压缩到合适范围,让高处的音不再盖过低处的音。ARMA误差则负责处理那些没被季节项解释干净的“余音”,把残差中的自相关性再捋顺一层。

TBATS 的优雅在于“分工明确”。你不需要手工把日、周、年拆成三份分别建模,它会在一次拟合中同时估计全部声部,并自动决定每个周期需要几个傅里叶谐波。对电力负荷这种“日周双峰 + 年季节”的复杂数据,TBATS 是一员可靠的大将。

yt(ω)=μ+∑i=1nst,i+at+dt+εty_t^{(\omega)} = \mu + \sum_{i=1}^{n} s_{t,i} + a_t + d_t + \varepsilon_t
公式表示:经过 Box-Cox 变换后的观测值 = 常数项 + 多个季节项之和 + 平滑趋势 + ARMA 误差项。每个季节项 s_{t,i} 对应一个周期(日、周、年)。
  1. 上标 (ω)(Box-Cox 变换后)ω 是变换参数,把原始 y_t 压缩到对称分布,稳定方差。
    yt(ω)y_t^{(\omega)}
  2. 常数 μ(全局基线)整个序列的平均水位,相当于乐队的基本音量。
    μ\mu
  3. 季节项求和(Σs_{t,i})遍历 n 个周期,每个周期用傅里叶三角函数生成自己的季节分量,然后叠加。
    ∑i=1nst,i\sum_{i=1}^{n} s_{t,i}
  4. 趋势项 d_t 与误差项d_t 是缓慢漂移的整体走势,ε_t 是白噪声,a_t 则是 ARMA 过程,刻画残差的短期依赖。
    at+dt+εta_t + d_t + \varepsilon_t

Prophet方案

如果说 TBATS 是事无巨细的古典指挥家,那么 Prophet 更像一位深谙大众口味的流行音乐制作人。它由 Facebook 开源,目标很简单:让非专家也能在几分钟内获得靠谱的多周期预测。它的总谱只有三行:趋势、季节、假日。

趋势函数\(g(t)\) 刻画乐曲的整体走向——是平稳推进,还是到某个时间点后突然加速(相当于切分音)。Prophet 内置了分段线性趋势和逻辑斯蒂增长两种可选乐章,自动在数据中寻找“转调点”。季节分解\(s(t)\) 用傅里叶级数分别建模年周期和周周期——年季节用 \(P=365\),周季节用 \(P=7\),每天的数据还会自动叠加上日周期。你只需指定“我有哪些周期”,剩下的谐波选择交给它。假日效应\(h(t)\) 是 Prophet 的独门绝技:把节假日当作“临时加演场次”,一个特殊日子对预测的影响独立建模,不会污染常规季节项。例如春节、双十一这些日子,即使不在周/年规律内,也能被单独捕捉到。

Prophet 与 TBATS 的差别,就像流行制作人与古典指挥家的差别:Prophet 更擅长处理“不规律的特殊日子”,而且接口极其简单(两行代码出结果);TBATS 则在多个严格周期叠加的场景里数学上更精致。选择谁,取决于你的乐曲里有没有“临时加演”。

y(t)=g(t)+s(t)+h(t)+εty(t) = g(t) + s(t) + h(t) + \varepsilon_t
观测值 = 趋势 + 季节 + 假日 + 噪声。Prophet 用加法或乘法组合这三部分,既保留整体走向,又照顾周期和特殊事件。
  1. 趋势项 g(t)分段线性或逻辑斯蒂曲线,管理长期走势与突变点。
    g(t)g(t)
  2. 季节项 s(t)多个傅里叶级数的和,分别针对年、周、日周期。
    s(t)=∑P∑k[ak,Pcos⁡(2πktP)+bk,Psin⁡(2πktP)]s(t) = \sum_{P} \sum_{k} \left[ a_{k,P}\cos\left(\frac{2\pi k t}{P}\right) + b_{k,P}\sin\left(\frac{2\pi k t}{P}\right) \right]
  3. 假日项 h(t)每个节假日设一个指示变量,它的影响就是单独一个回归系数。
    h(t)=∑eκe⋅1{t∈holidaye}h(t) = \sum_{e} \kappa_e \cdot \mathbb{1}\{t \in \text{holiday}_e\}
  4. 噪声项 ε_t正态分布残差,吸收不可解释的随机波动。
    εt\varepsilon_t

建模流程

指挥家的方法再厉害,也得按流程排练才能登台。多重季节性建模的完整流程,可以用三个词概括:调音 → 选人 → 彩排。

数据准备是“调音”。首先确定采样频率并统一时区,把缺失值填补好,异常值像走调的音符一样揪出来修正。接着用前面学过的可视化与 ACF 手段识别周期——是只有日周两重,还是日周年三重?这决定了傅里叶特征里要写几组周期 P。模型选择是“选人”。如果你的数据是严格的小时级多周期且不希望太多手工干预,TBATS 是首选;如果你的业务场景里节假日影响巨大、需要快速上线,Prophet 更合适;如果你想完全掌控特征工程、把周期项喂给任意回归模型,那么直接用傅里叶展开 + LightGBM 也是常见做法。评估预测是“彩排与正式演出”:用时间序列交叉验证(滚动预测)来模拟真实上线后的表现,而不是随机打乱数据——时间不可倒流,未来的数据不能偷看。

流程的意义在于让“指挥”变得可复现、可迭代。每一次彩排(评估)暴露的问题——某个声部太响(季节性过拟合)、某个时间点突然跑调(异常值干扰)——都反馈回数据准备或模型选择环节,逐步逼近真实演出效果。

MAPE=100%n∑t=1n∣yt−y^tyt∣\text{MAPE} = \frac{100\%}{n}\sum_{t=1}^{n}\left|\frac{y_t - \hat{y}_t}{y_t}\right|
MAPE(平均绝对百分比误差)把每个预测误差换算成百分比再取平均。它直观且无量纲,是业务方最容易理解的预测质量指标。
  1. 误差绝对值(|y_t - ŷ_t|)预测值与真实值之间的绝对差距,避免正负抵消。
    ∣yt−y^t∣|y_t - \hat{y}_t|
  2. 除以真实值 y_t把绝对误差转化为“相对误差”,这样 100 和 10000 的误差才有可比性。
    yt−y^tyt\frac{y_t - \hat{y}_t}{y_t}
  3. 求和与取平均把所有时刻的相对误差累加,再除以 n,得到平均相对误差。
    1n∑t=1n∣⋅∣\frac{1}{n}\sum_{t=1}^{n}\left|\cdot\right|
  4. 乘以 100%把小数变成百分比,业务解读更友好。
    MAPE=100%×平均相对误差\text{MAPE} = 100\% \times \text{平均相对误差}

实战应用

当指挥家带着方法论走上真实舞台,会发现每个行业都有自己的“曲目特色”。多重季节性建模的三大经典战场是电力、零售与交通。

电力负荷是含三重周期的标准案例:一天之内早晚双峰由居民用电驱动,一周之内工作日与周末负荷形态迥异,一年之内冬夏因供暖和制冷出现两个年峰。用 Volt 瓦特级数据训练一个 TBATS 或带傅里叶项的模型,把日周年的权重都估计出来,电网调度就能提前 24 小时甚至一周安排发电计划。零售销量的声部更加复杂:日周期来自开门关门流量,周周期来自周末购物潮,年周期来自季节换装和节日备货,外加双十一这类突发事件——这正是 Prophet 假日项大显身手的场景。交通流量则是日周周期的重度叠加者:早晚高峰严格按日循环,工作日与周末的流量模式完全不同,黄金周和春节还会产生年度的迁徙高峰。

在真实项目中,一个合格的多周期模型往往能为业务带来两个直接收益:更准的短期调度(日/周周期)和更稳的长期规划(年周期)。这正是“同时搞定多个周期”的价值所在——不让任何一个声部被埋没。

yt=Tt+St+Rty_t = T_t + S_t + R_t
成功建模的最终形态,就是把这支交响乐拆成可解释的声部:趋势 T_t(长期走向)、季节性 S_t(多重周期)、残差 R_t(随机杂音)。听懂它,就能预测它。
  1. 趋势分量 T_t长期增减方向,例如逐年增长的用电需求。
    TtT_t
  2. 季节分量 S_t由日、周、年等多重周期性组成,是本文的核心声部。
    St=Sday,t+Sweek,t+Syear,tS_t = S_{\text{day},t} + S_{\text{week},t} + S_{\text{year},t}
  3. 残差分量 R_t无法解释的随机波动,理想情况下应是白噪声。
    RtR_t

AI 应用场景

电网负荷预测

阶段:时序特征工程与预测建模

解决的问题:传统方法只用单一周期或人工挑周期,导致用电高峰时段预测偏差巨大。多重季节性建模自动识别日、周、年三重周期,将早晚峰、工作日/周末差异、冬夏负荷差纳入同一模型,显著提升 24 小时与未来一周的负荷预测精度。

具体案例:某省级电网调度中心使用小时级负荷数据训练 TBATS 模型,输入过去 3 年的数据,自动估计日出双峰、周末低谷与夏季冷负荷周期。模型输出未来 7 天的 24×7 小时负荷曲线,调度员据此安排机组启停与购电计划,将高峰时段预测误差从 8% 降到 4% 以内。

零售销量预测与备货

阶段:季节性分解与特殊事件建模

解决的问题:零售数据既有每周的周末高峰,又有换季和节假日的年周期,还要应对双十一等“突发大促”。传统 SARIMA 顾此失彼,Prophet 通过趋势+多周期傅里叶项+假日回归三条轨道,同时管理这些节律,使补货计划不再依赖拍脑袋。

具体案例:某连锁超市总部对 2000 家门店的 SKU 日销量建立 Prophet 模型。模型对年季节设置 P=365 的傅里叶级数,对周季节设置 P=7,并将春节、中秋、双十一作为假日回归变量。系统在每周日自动生成下周每日各门店的订货建议,滞销库存下降 20%,缺货率降低 15%。

Python 演示

python45 行
"""多重季节性建模演示:用傅里叶特征拟合并预测多周期时间序列"""import numpy as npfrom sklearn.linear_model import LinearRegression  def make_fourier_features(t, periods, K=3):    """为每个周期生成 K 对 cos/sin 傅里叶特征"""    features = []    for p in periods:        for k in range(1, K + 1):            features.append(np.cos(2 * np.pi * k * t / p))            features.append(np.sin(2 * np.pi * k * t / p))    return np.column_stack(features)  def main():    # 模拟含日(24h)、周(168h)、年(8760h)三周期的时间序列    np.random.seed(42)    n = 8760 * 2  # 两年小时级数据    t = np.arange(n)    periods = [24, 168, 8760]     y = np.zeros(n)    for p in periods:        y += np.sin(2 * np.pi * t / p) + 0.5 * np.cos(4 * np.pi * t / p)    y += np.random.normal(0, 0.15, n)     # 用傅里叶特征训练线性回归    X = make_fourier_features(t, periods, K=3)    model = LinearRegression()    model.fit(X, y)    r2 = model.score(X, y)     # 预测未来30天    t_future = np.arange(n, n + 24 * 30)    X_future = make_fourier_features(t_future, periods, K=3)    y_future = model.predict(X_future)     print(f"训练集 R2 = {r2:.4f}")    print(f"未来 30 天预测均值 = {y_future.mean():.4f}")    print(f"未来 30 天预测峰值 = {y_future.max():.4f}")  if __name__ == "__main__":    main()
目的:演示“傅里叶基展开”如何用一个线性回归同时拟合日、周、年三个周期,并预测未来30天的走势。
  1. periods = [24, 168, 8760]声明三个已知周期:日、周、年,每个周期对应一个“声部”。
  2. features.append(np.cos(2 * np.pi * k * t / p))为第 k 个谐波生成余弦特征,这是傅里叶基展开的核心。
  3. np.column_stack(features)把多个周期的正弦余弦列拼成特征矩阵,喂给回归模型。
  4. model.fit(X, y)线性回归自动学习每个谐波的权重 a_k 和 b_k,完成“指挥家”的角色。
  5. make_fourier_features(t_future, periods, K=3)用同一套特征生成函数构造未来时段的输入,实现外推预测。

常见误区

误区既然多重季节性好,那我就把日、周、年、月、季度全都塞进模型,让傅里叶特征越多越好,模型一定更准。

正解特征越多的同时,过拟合风险也越大。K 个谐波意味着每个周期要新增 2K 个系数,训练数据量不足时,模型会把噪声也当作周期学进去。而且许多“周期”在实际业务中根本没有稳定重演(如“季度”在大多场景只是短趋势),加了反而干扰。正确的做法是先用 ACF 和可视化确认显著周期,再从小 K 值开始,用验证集打分决定是否增加谐波。

为何常见:人容易把“模型复杂”等同于“模型强大”,却忘了奥卡姆剃刀原则:如无必要,勿增实体。初学者常常一步到位塞入所有周期,看到训练集 R² 很高就以为成功了。

误区机器学习都讲究交叉验证,那我用 train_test_split 随机把数据打乱,80% 训练 20% 测试,结果也差不多。

正解时间序列最忌讳“偷看未来”。随机打乱后,训练集里混入了未来数据,模型等于提前知道答案,验证分数虚高。正确做法是滚动预测(时间序列交叉验证):始终用过去预测未来,比如用第1~12月预测第13月,用第1~13月预测第14月,逐步推进。

为何常见:初学者从表格建模迁移到时序建模,沿用 sklearn 默认的随机切分套路,没有意识到时间数据自带的顺序本身就是最强信息。

误区年份周期就是 365 天,周周期就是 7 天,写死这个数字就可以了。

正解业务中的周期往往不是整数。日内周期受日出日落影响会随季节缓慢漂移,周周期在假期会走形,年周期在闰年或调休时长度变化。更稳妥的做法是让模型(TBATS 的三角函数项)自适应周期长度,或对数据进行“周对齐”“月对齐”预处理后再做傅里叶展开。

为何常见:教材里的周期都是标准整数,容易让人形成“周期即固定常数”的思维定势,忽略了真实业务中日落、调休、节假日带来的不规则偏移。

误区TBATS 和 Prophet 都能处理多周期,那就统一用 Prophet 吧,反正它代码简单、效果也不差。

正解没有万能模型。TBATS 在严格周期、强季节性的电力数据上往往更准;Prophet 在节假日密集、增长趋势变化的零售数据上更灵活;傅里叶+LightGBM 在特征丰富的大数据场景更占优。成熟做法是把多种模型作为 baseline 同时跑,用滚动验证对比 MAPE,再决定谁上场。

为何常见:工具选择的“惯性”很强——人一旦学会某个好用工具,就容易在所有问题上套用它,忽略了不同场景对季节性与事件性的侧重完全不同。

面试题

Q1. 多重季节性与普通季节性的核心区别是什么?

单选题 · easy

  • A.多重季节性只适用于高频数据
  • B.数据中同时存在多个周期叠加← 正确答案
  • C.普通季节性无法处理任何周期
  • D.多重季节性不需要识别周期

答案:B。多重季节性的本质是一条时间序列同时叠加了日、周、年等多个周期性声部,故选 B。A 错,低频数据也可能有多周期;C 错,普通季节性至少能处理一个周期;D 错,识别周期仍是第一步。

Q2. 识别时间序列周期最常用的统计工具是什么?

单选题 · easy

  • A.直方图
  • B.散点图
  • C.自相关函数← 正确答案
  • D.饼图

答案:C。自相关函数(ACF)通过计算间隔 k 步的数据相似度,在周期整数倍处显示峰值,是识别周期的标准工具。直方图看分布、散点图看关系、饼图看占比,都不直接揭示周期性,故排除。

Q3. 傅里叶基展开中,参数 K 的作用是什么?

单选题 · mid

  • A.控制周期长度的单位
  • B.控制谐波数量的个数← 正确答案
  • C.决定时间序列的均值
  • D.设定预测步长的长度

答案:B。K 是傅里叶级数的谐波数量上限,K 越大加入的高频成分越多,拟合波形越精细,故选 B。K 不控制周期长度(那是 P 的事),也不决定均值和步长,故排除其他选项。

Q4. 关于 TBATS 模型,下列说法正确的是?

多选题 · mid

  • A.能够处理多个季节周期← 正确答案
  • B.内部使用傅里叶三角函数← 正确答案
  • C.只能处理单个季节周期
  • D.包含 Box-Cox 变换← 正确答案

答案:ABD。TBATS 的 T(三角函数)正是用傅里叶级数刻画多个季节项,S(季节)支持多周期叠加,B(Box-Cox)负责方差稳定,故 A、B、D 正确。C 与“多季节项相加”的核心设计矛盾,排除。

Q5. Prophet 中 h(t) 模块专门建模什么?

单选题 · mid

  • A.节假日等特殊事件效应← 正确答案
  • B.白噪声随机波动
  • C.多重周期的季节项
  • D.长期线性趋势

答案:A。Prophet 的结构是 y = g(t) + s(t) + h(t) + ε,其中 h(t) 专门为节假日和特殊事件建模,独立的回归系数让“临时加演”不污染常规周期,故选 A。噪声是 ε 项,季节是 s(t),趋势是 g(t)。

Q6. 对于小时级电力负荷数据,最合理的周期配置是什么?

单选题 · hard

  • A.仅 P=7
  • B.P=24 与 P=168← 正确答案
  • C.仅 P=365
  • D.P=24 与 P=7

答案:B。小时级数据天然含日周期(24小时)和周周期(24×7=168小时),故选 B。A 的 P=7 只捕捉周周期不捕捉日内波动;C 只捕捉年周期完全不够;D 的 P=7 对小时数据意义不大,应为 P=168。

Q7. 关于自相关函数诊断周期,下列说法正确的有哪些?

多选题 · hard

  • A.如果存在日周期,ACF 在 lag=24 处出现峰值← 正确答案
  • B.ACF 峰值越高说明周期越强← 正确答案
  • C.ACF 无法识别嵌套的多周期
  • D.ACF 计算需要先移除趋势← 正确答案

答案:ABD。ACF 在周期整数倍处出现显著峰值(A 正确);峰值大小反映周期性强度(B 正确);ACF 可以同时显示多个周期的峰值,并非无法识别(C 错误);趋势会掩盖周期性,通常先做差分或去趋势再诊断(D 正确)。

Q8. 下面哪个业务场景最不可能需要多重季节性建模?

单选题 · easy

  • A.商场每分钟客流量
  • B.城市每日气温记录← 正确答案
  • C.电网每小时的负荷
  • D.网站每秒的请求量

答案:B。每日气温记录只有年周期,数据点本身是日粒度,不存在日内或周内多周期叠加,最不需要多重季节性,故选 B。商场客流有日/周/年周期,电网负荷和网站请求都有明显的日内与周内模式。

Q9. 关于傅里叶基的谐波数量 K,正确的理解有哪些?

多选题 · mid

  • A.K 越大拟合越灵活← 正确答案
  • B.K 过大容易过拟合← 正确答案
  • C.K 越小一定越好
  • D.K 可用验证集调优← 正确答案

答案:ABD。K 增大带来更多高频谐波,拟合能力上升但过拟合风险加大(A、B 正确);K 不是越小越好,太小会欠拟合丢失波形细节(C 错误);实践中用滚动验证选择 K 是最稳妥的方式(D 正确)。

Q10. TBATS 与 SARIMA 相比,最大的优势是什么?

单选题 · mid

  • A.不需要任何数据预处理
  • B.能同时处理多个季节周期← 正确答案
  • C.预测速度一定更快
  • D.不需要设置任何参数

答案:B。SARIMA 的 S 部分只能指定一个季节周期,而 TBATS 的多季节项相加机制可以同时覆盖日、周、年等多个周期,这是它最大的优势,故选 B。A、C、D 都过于绝对,TBATS 仍需数据清洗、参数配置,速度也不一定更快。