周末的步行街上,奶茶店老板阿茶翻开他的小账本,密密麻麻记着过去一年每天的销量:周末数字跳得高,周一回落到谷底;夏天冰饮卖爆,冬天热饮领跑;双十一那天,外卖订单差点把柜台挤爆。表面看,这些数字起起伏伏毫无规律,可阿茶隐约觉得,账簿里藏着几股“看不见的手”——越来越出名的长期趋势、四季轮换的季节节奏、偶尔爆发的大促冲击。Facebook开源的Prophet模型,就是一位“读账簿的高手”,它把这堆乱糟糟的数字拆成“趋势+季节+节假日”三部分,分别建模、逐个算清,最后相加还原成一条靠谱的预测曲线。本文就从阿茶的账簿出发,带你看懂Prophet的加法模型原理、三大组成项的数学机制、参数调优方法、不确定性估计,以及它与ARIMA家族的分工。学完你也能像阿茶一样,把一堆历史数字变成明天的销量底气。

岗位关联

掌握 Prophet 的分解式建模思维,你就能在销量预测、流量预警等实战任务中快速搭建出可解释、可调优、带置信区间的预测模型,这是时间序列从业者的核心技能之一。

目录
  1. 可视化演示
  2. 1. 时间序列基础
  3. 2. 加法模型原理
  4. 3. 趋势项建模
  5. 4. 季节项建模
  6. 5. 节假日效应
  7. 6. 参数调优实战
  8. 7. 不确定性估计
  9. 8. ARIMA模型对比
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示Prophet时间序列预测模的核心机制,通过架构/数据/状态/性能四种模式展示关键概念与交互流程。

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

Prophet时间序列预测模:Prop Prophet模型整体架构与加 趋势项建模:线性与饱和增长模式 核心机制可视化 Prophet时间序列预测模整体架构与关键组件

1. 时间序列基础

周六傍晚,步行街上的阿茶奶茶店又排起长队。他翻开随身小账本,上面密密麻麻记着过去一年每天的销量:工作日冷清时一天只卖40杯,周五晚上冲到120杯;七月酷暑冰饮卖断货,十二月热饮暖手又暖心;双十一那天,外卖订单差点把柜台挤爆。表面看,这些数字起起伏伏毫无规律,可阿茶隐约觉得,账簿里藏着几股“看不见的手”。

这种按时间先后记录的一串数字,就叫“时间序列”——横轴是日期,纵轴是销量。阿茶账簿里的三股手,正是时间序列最常见的三种成分:长期向上走的“趋势”,按日、周、年循环的“季节”,以及某天因故突然爆发的“节假日效应”。剩下的零散抖动,则是无法解释的随机噪声。Prophet模型的第一课,就是把这三股手从一团乱麻中分离出来。

数学上,经典的加法分解把它写成下面的形式:趋势项T描述大方向,季节项S描述周期波动,随机项R兜住一切偶然。Prophet正是基于这种分解思想,先分别刻画T和S,最后把误差交给噪声项处理。

阿茶豁然开朗:只要分开盘算这三股手,明天的销量就不再是玄学。可怎么分?Prophet的加法模型给出了标准“配方”——下一节,我们看它如何端出那杯“招牌三料奶茶”。

y(t)=T(t)+S(t)+R(t)y(t) = T(t) + S(t) + R(t)
这是时间序列最基础的“三股手”分解公式:趋势、季节、随机,三者相加还原原始序列。
  1. 趋势项 T(t)反映长期变化的大方向,比如店铺知名度一年内让销量从50杯涨到150杯。
    T(t)T(t)
  2. 季节项 S(t)反映固定周期内的重复波动,例如周末火爆、工作日平淡的规律。
    S(t)S(t)
  3. 随机残差 R(t)吸收无法归因的偶然抖动,如突如其来的暴雨让那天少卖十杯。
    R(t)R(t)

2. 加法模型原理

阿茶最拿手的是“招牌三料奶茶”:茶底打底、珍珠增口感、奶盖添风味。每一杯都是三样材料的加法混合。关键经验是:只有把三种料分开准备、按固定比例调配,才能稳定复刻同一种味道——如果一股脑全倒进去,今天茶浓明天奶多,味道全凭运气。Prophet做预测也坚持“配方透明”。

Prophet的完整加法模型可以写作:预测值 = 趋势函数 + 季节函数 + 节假日函数 + 噪声。趋势负责长期大盘,季节负责周期轮回,节假日负责一次性冲击,噪声吸收所有解释不了的细节。四个部分各司其职、互不干扰。

为什么“加法”这么妙?因为每一项都可以被单独解释和调整:预测新店,改趋势;换城市,改季节;搞大促,改节假日。这种可解释性让模型在工程落地时特别友好——老板问“为什么预测这么高”,你可以指着节假日项说“因为双十一”。

阿茶把这杯“三料奶茶”的方子记在墙上:茶底打底、珍珠增味、奶盖点睛,偶尔的抖动就当顾客口味漂移。接下来,他要研究茶底怎么选——也就是趋势项怎么建模。

y(t)=g(t)+s(t)+h(t)+ε(t)y(t) = g(t) + s(t) + h(t) + \varepsilon(t)
Prophet的核心公式:一杯奶茶=茶底(趋势)+珍珠(季节)+奶盖(节假日),再加一点顾客口味的随机抖动。
  1. 趋势函数 g(t)负责长期增长或衰减的大盘走向,类似茶底的基础分量。
    g(t)g(t)
  2. 季节函数 s(t)负责周期内的重复波动,类似珍珠嚼劲带来的稳定口感。
    s(t)s(t)
  3. 节假日函数 h(t)负责不规律日期的一次性冲击,类似双十一加的那勺奶盖。
    h(t)h(t)
  4. 噪声项 ε(t)吸收剩余误差,让模型不必强行解释每一次意外抖动。
    ε(t)\varepsilon(t)

3. 趋势项建模

阿茶发现,店不是匀速火起来的:前三个月每天只多卖0.2杯;第二季度一条短视频火了,销量突然跳涨;入秋后进入平台期。这条“先平、后陡、再平”的曲线,用一条直线永远拟合不好——它像一段段坡度不同的山路。

Prophet把这种“斜率分段变化”的点叫变点(changepoint)。它默认在历史区间内自动布置若干候选变点,让数据自己判断哪里坡陡、哪里坡缓。整体趋势是一条“分段线性”折线:每一段有自己的增长率和截距,段与段之间平滑衔接、不会断裂。

变点的设置不是拍脑袋:Prophet会给每个变点的增量加一个“先验约束”,让大多数变点保持安静,只有数据强烈支持时才让斜率改变。这样就避免了模型把一次偶然促销当成长期趋势。趋势项的数学形式如下:

阿茶在账本上画出三条折线段,每段的“陡峭程度”一目了然。但他也发现,单看趋势不够——同一天里不同季节的销量差别很大,这正是下一节“季节项”要解决的问题。

g(t)=(k+a(t)Tδ)t+(m+a(t)Tγ)g(t) = \left(k + \mathbf{a}(t)^{\mathsf{T}} \boldsymbol{\delta}\right) t + \left(m + \mathbf{a}(t)^{\mathsf{T}} \boldsymbol{\gamma}\right)
趋势公式的含义:基础斜率k,加上所有已发生变点带来的修正量,再乘以时间t,最后加一个保证曲线连续的截距修正。
  1. 基础增长率 k初始趋势斜率,相当于第一段折线的陡峭程度,比如每天多卖0.2杯。
    kk
  2. 变点指示向量 a(t)标记哪些变点已经发生的“开关向量”,发生过该位为1。
    a(t)\mathbf{a}(t)
  3. 增长率修正 δ每个变点对斜率的增量,叠加后形成新的分段斜率。
    δ\boldsymbol{\delta}
  4. 时间轴 t与最终斜率相乘,把增长率转化为累计增长量。
    tt
  5. 截距修正 γ保证折线在变点处不断裂的补偿偏移量。
    γ\boldsymbol{\gamma}

4. 季节项建模

阿茶的销量像呼吸——夏天冰饮高峰、冬天热饮高峰;又像心跳——周末顶峰、工作日低谷。但真实的季节形状不是标准正弦波:可能是双峰、平顶甚至尖峰。要用数学语言描述这种“不规则的周期”,需要更灵活的工具。

Prophet选择的是“傅里叶级数”:用一组不同频率的正弦波和余弦波相互叠加,逼近任意形状的周期曲线。就像演唱会上的乐队,吉它、鼓、键盘各自演奏不同频率的声波,合在一起就是丰富的旋律。对年季节,周期P取365;对周季节,周期P取7。

谐波阶数N决定细节丰富度:N越大,能刻画的波形越复杂,但也越容易把噪声当信号;Prophet默认年季节N=10、周季节N=3,是经验上的平衡点。季节项公式如下:

阿茶请来这支“乐队”,几支不同频率的波一合奏,周末峰、工作日谷便跃然纸上。可阿茶还有个疑问——双十一那种“一年就一次”的爆单,又该怎么处理?这就是节假日项的舞台。

s(t)=∑n=1N[ancos⁡(2πntP)+bnsin⁡(2πntP)]s(t) = \sum_{n=1}^{N} \left[ a_n \cos\left(\frac{2\pi n t}{P}\right) + b_n \sin\left(\frac{2\pi n t}{P}\right) \right]
傅里叶级数公式:把N对正余弦波按不同倍数频率叠加,就能拼出任何复杂的季节形状。
  1. 周期 P季节循环的天然长度,年季节取365天,周季节取7天。
    PP
  2. 谐波阶数 n第几号正余弦波,n越大细节越精细,波形越“曲折”。
    nn
  3. 傅里叶系数 a_n、b_n每一阶波的振幅大小,由模型从历史数据中自动学习。
    an,bna_n, b_n
  4. 累加求和把不同频率的波叠起来,合成复杂的周期形态。
    ∑n=1N\sum_{n=1}^{N}

5. 节假日效应

双十一那天,阿茶的订单量暴涨三倍。这股力量既不属于长期趋势,也不属于季节轮回——它是日历上某个特定日子的“一次性爆发”。如果单独建一个变量,把“是不是双十一”告诉模型,模型就能学习到它带来的额外销量。

Prophet把节假日处理得非常工程化:先维护一个“节假日字典”,比如“双十一”“春节”“店庆日”。对每一天,构造一个指示向量Z(t):当天落在某个节假日窗口内,对应位置记为1,否则为0。再让每个节假日学习一个影响系数κ。最终节假日效应就是两者相乘,多个节假日同时生效时各自相加。

这里还有两个贴心设计:一是“窗口”参数,允许节假日前几天就开始影响(比如大促预热);二是内置多国法定节假日表,一行代码就能导入中国节假日。节假日项的数学形式:

阿茶把双十一、春节、店庆一一登记进字典,模型的“尖峰”终于不再惊惶失措。但新问题来了——这些参数该怎么调?阿茶决定给模型“拧螺丝”。

h(t)=Z(t) κh(t) = \mathbf{Z}(t)\, \boldsymbol{\kappa}
节假日公式:指示向量Z决定“今天是不是节假日”,影响系数κ决定“这个节假日值几杯奶茶”。
  1. 指示向量 Z(t)t 是否落在某节假日窗口内,是则对应位为1,否则为0。
    Z(t)\mathbf{Z}(t)
  2. 影响系数 κ该节假日平均带来多少销量增量,由历史数据估计得出。
    κ\boldsymbol{\kappa}
  3. 向量点积同时生效的多个节假日效果各自相加,合成总节假日效应。
    Z(t) κ\mathbf{Z}(t)\, \boldsymbol{\kappa}

6. 参数调优实战

阿茶发现,同样的数据,把“允许趋势拐弯的力度”调大,模型变得过于敏感,把一次偶然促销当成长期趋势;调小了,又对真实的结构变化视而不见。这就像给音响拧低音旋钮,拧太猛震耳朵,拧太小听不见。

Prophet最核心的旋钮有两个:changepoint_prior_scale(趋势变点先验尺度,记为τ)和seasonality_prior_scale(季节先验尺度)。前者控制趋势的“拐弯自由度”,后者控制季节波动的“幅度自由度”。调大τ,趋势更愿意跟随数据的突然变化;调小τ,趋势更保守稳健。除此之外,seasonality_mode决定季节是加法还是乘法——乘法适合季节性随趋势放大的场景。

机器学习没有免费的午餐:过拟合与欠拟合的权衡,最终要靠交叉验证来裁决。把历史数据切成多段,逐段训练并考核预测误差,就能找到让误差最小的参数组合。变点修正量的先验分布是调参的理论依据:

阿茶像调配方一样试了几组参数,用交叉验证确定“茶底三勺、珍珠两份、奶盖半拳”的黄金配比。但阿茶还想知道:明天到底能卖多少杯?一个干巴巴的数字可不够——他要的是一个区间。

δj∼Laplace(0,τ)\delta_j \sim \mathrm{Laplace}(0, \tau)
变点先验公式:每个变点的修正量δ_j服从以0为中心、尺度为τ的拉普拉斯分布,τ决定了修正量允许“跑多远”。
  1. 变点修正量 δ_j第 j 个变点对增长率的调整幅度,正数加速、负数减速。
    δj\delta_j
  2. Laplace 分布一种在0附近概率极高的分布,代表“多数变点应该保持安静”的信念。
    ∼Laplace\sim \mathrm{Laplace}
  3. 尺度参数 τ控制修正量的整体规模,τ越大趋势越容易被拐弯。
    τ\tau

7. 不确定性估计

天气预报会说“明天23度,体感20到26度”,而不是一口咬定“23度整”。预测的意义在于让决策者知道风险边界。阿茶想,如果能告诉店长“明天预计卖80杯,大概率在70到90杯之间”,备货和招人就从容得多。

Prophet怎么算区间?靠蒙特卡洛模拟。模型训练好后,趋势、季节、节假日的参数都是带不确定性的分布。每次“模拟”从这些分布里重新抽取一组参数,算出一条完整的预测曲线;重复上千次,就得到上千条可能的未来路径。把它们按数值排序,取5%和95%的分位数,就是通常所说的95%预测区间。

模拟次数越多,区间越稳定。Prophet默认做1000次模拟,兼顾速度与精度——在工程里,区间比单点值更有决策价值,因为它诚实告诉了你“模型有多没把握”。

阿茶拿着“70到90杯”的区间,连暴雨天的备货都心里有数。那么问题来了——市面上还有别的预测工具,比如“钟表匠”ARIMA,阿茶该选哪个?

y~(t)=g~(t)+s~(t)+h~(t)+ε~(t)\tilde{y}(t) = \tilde{g}(t) + \tilde{s}(t) + \tilde{h}(t) + \tilde{\varepsilon}(t)
模拟公式:每一次模拟都对趋势、季节、节假日参数重新抽样,再加一段随机噪声,生成一条可能的未来。
  1. 模拟预测值 ỹ(t)一次随机抽样得到的完整预测曲线,多模拟几次就形成一个“预测扇面”。
    y~(t)\tilde{y}(t)
  2. 参数抖动的三项对趋势、季节、节假日参数分别重新抽样,体现估计不确定性。
    g~(t),s~(t),h~(t)\tilde{g}(t), \tilde{s}(t), \tilde{h}(t)
  3. 随机噪声 ε̃(t)额外加入的观测噪声,模拟现实世界中不可控的抖动。
    ε~(t)\tilde{\varepsilon}(t)
  4. 多次模拟取分位1000次模拟后取5%与95%分位数构成区间,即95%预测区间。
    95% interval\text{95\% interval}

8. ARIMA模型对比

街对面的老张开了一间修表铺。他修表全凭“齿轮咬合”的经验:过去齿轮怎么转,推断下一格怎么动。ARIMA就是这位钟表匠——它用自回归和移动平均去捕捉过去值之间的线性依赖,盯的是“序列内部的相关性”。

Prophet则像营养师,把食物拆成碳水、蛋白、脂肪再配餐,盯的是“成分结构”。两者的数据要求差异很大:ARIMA要求数据先差分平稳,要手动定阶(p,d,q),对缺失值和异常值敏感;Prophet自动分解、对残缺数据宽容,还能吃进节假日这种外部先验。它们不是替代关系,而是互补:平稳、短记忆的序列,ARIMA更紧凑;长季节、多噪声、带节假日的业务数据,Prophet上手更快。

选模型时要用统一标尺比较,最常用的是AIC信息准则——它不仅看模型拟合得好不好,还要惩罚参数过多的“花架子模型”。

阿茶在账本上同时试了两种方法:钟表匠ARIMA擅长平滑的周规律,而他的奶茶店既有旺季淡季、又有大促尖峰,Prophet的“分解配方”显然更合适。至此,阿茶已经能把一本乱账,变成一杯杯有把握的销量预测。

AIC=2k−2ln⁡(L^)\mathrm{AIC} = 2k - 2\ln(\hat{L})
AIC公式:参数个数k越少、拟合优度ln(L̂)越大,AIC越小,模型越值得选。
  1. 参数个数 k模型里需要估计的参数数量,相当于模型的“复杂度税”。
    kk
  2. 极大似然值 L̂模型能多大程度解释历史数据,数值越大说明拟合越好。
    L^\hat{L}
  3. 自然对数 ln把连乘的似然值变成可加的数值,方便计算与比较。
    ln⁡(L^)\ln(\hat{L})
  4. AIC 值复杂度与拟合优度的折中指标,越小说明模型越“性价比高”。
    AIC\mathrm{AIC}

AI 应用场景

电商平台大促销量预测

阶段:需求预测与库存计划

解决的问题:传统备货靠老师傅拍脑袋,大促前不是积压就是缺货。Prophet把“常年趋势+周季节+双十一窗口”拆开建模,每次预测还附带区间,让库存计划有了量化依据。

具体案例:某电商运营团队对某品牌保温杯用Prophet建模,调用add_country_holidays传入“双十一”,并用自定义假日窗口覆盖“预售期”,预测日均销量与真实误差约8%,据此提前调配仓储与物流资源。

SaaS网站流量异常预警

阶段:异常检测与运维告警

解决的问题:网站页面浏览量有显著周末低谷和工作日高峰,静态阈值告警频繁误报。Prophet拟合出“95%区间带”,实际流量跌破下界时自动触发告警,大幅降低误报率。

具体案例:某SaaS公司对官网日活建模,某日凌晨3点检测到流量跌出区间带,判断为CDN故障,自动生成运维工单,故障恢复时间缩短约60%。

Python 演示

python26 行
import numpy as npimport pandas as pdfrom prophet import Prophetimport matplotlib.pyplot as plt np.random.seed(42)days = pd.date_range('2023-01-01', periods=365, freq='D')trend = np.linspace(50, 150, 365)week_season = 10 * np.sin(2 * np.pi * np.arange(365) / 7)double11 = np.where((days.month == 11) & (days.day >= 1) & (days.day <= 11), 25, 0)noise = np.random.normal(0, 5, 365)y = trend + week_season + double11 + noise df = pd.DataFrame({'ds': days, 'y': y}) model = Prophet(changepoint_prior_scale=0.2, seasonality_prior_scale=12)model.add_country_holidays(country_name='CN')model.fit(df) future = model.make_future_dataframe(periods=30, freq='D')forecast = model.predict(future) fig = model.plot(forecast)plt.savefig('forecast.png', dpi=100) print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
目的:用Prophet对一份含趋势、周季节和双十一效应的模拟销量数据建模,预测未来30天,并输出点预测与95%区间。
  1. week_season = 10 * np.sin(2 * np.pi * np.arange(365) / 7)手工合成周期为7天的周季节成分。
  2. y = trend + week_season + double11 + noise按加法模型公式把各成分相加,造出一份“标准答案”数据。
  3. model = Prophet(changepoint_prior_scale=0.2, seasonality_prior_scale=12)适度调大趋势与季节的灵敏度,让模型更敢拟合变化。
  4. model.add_country_holidays(country_name='CN')一行代码导入中国法定节假日,让模型认识春节、国庆等特殊日期。
  5. model.fit(df)用历史数据训练,让模型自动学出趋势折点、季节波形和节假日力度。
  6. future = model.make_future_dataframe(periods=30, freq='D')生成未来30天的“空日历”,等待填入预测值。
  7. forecast = model.predict(future)输出完整预测表,包含点预测yhat和区间下上界。
  8. print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())打印最后几天的区间结果,直观评估预测风险带。

常见误区

误区很多人以为Prophet只支持按天为单位的数据,月度、小时数据都用不了,一拿到非日频数据就换工具。

正解Prophet对日粒度最友好,但也支持小时、分钟等子日数据,关键前提是数据必须包含至少两个完整的季节周期——比如按小时数据要能凑出至少两个完整的周循环,否则季节项根本学不出来。月度数据也可以,但只有年季节时需保证有两个完整年份。

为何常见:官方文档和绝大多数教程都以日频销量为例,给人留下“只支持日频”的第一印象。

误区以为Prophet开箱即用,拿默认参数跑一遍就能得到靠谱预测,预测不准就是数据的问题。

正解默认参数偏向通用场景。如果趋势突变频繁,要调大changepoint_prior_scale;如果季节性强且随趋势放大,要考虑seasonality_mode='multiplicative';还要根据周期个数调整seasonality_prior_scale。调参前后效果可能差出几个百分点误差。

为何常见:Prophet的API封装得非常简洁,fit加predict两行就出结果,容易让人忽略内部机制。

误区以为只要调用`fit`,模型就自动认识全世界所有国家的节假日,无需额外配置。

正解Prophet默认只会把你显式传入的holidays参数纳入模型。想用国家法定节假日,必须调用add_country_holidays(country_name='CN'),而且它对历史数据中该国的公共假日生效,自定义大促日仍需自己建DataFrame传入。

为何常见:“Prophet“这个名字给人”无所不知”的错觉,加上add_country_holidays一行代码太隐蔽,容易被忽略。

误区认为预测值一定会落在`yhat_lower`和`yhat_upper`之间,把区间当成硬性的上下限。

正解Prophet输出的是基于蒙特卡洛模拟的95%预测区间,反映模型对参数估计和未来噪声的不确定程度。它只是统计意义上的覆盖区间,不是保证线——真实值仍有约5%概率落在区间之外,极端事件还会让覆盖偏差更大。

为何常见:区间图看起来像一条“可信走廊”,用户容易类比置信区间,却忽略了它来自随机模拟而非严格数学证明。

面试题

Q1. Prophet的预测值由哪几部分相加得到?

单选题 · easy

  • A.趋势、季节、节假日与随机误差← 正确答案
  • B.均值、方差与偏度
  • C.自回归项与移动平均项
  • D.斜率、截距与误差项

答案:A。Prophet的核心是加法模型y(t)=g(t)+s(t)+h(t)+ε(t),对应趋势、季节、节假日和随机误差四项。就像阿茶的招牌奶茶由茶底、珍珠、奶盖三种料相加而成,选项A准确描述了这个结构。

Q2. 时间序列中“周末销量高、工作日低”属于哪种成分?

单选题 · easy

  • A.节假日项
  • B.随机误差
  • C.趋势项
  • D.季节项← 正确答案

答案:D。周末和工作日的规律以7天为周期反复出现,属于季节项。节假日项只针对特定日期的一次性冲击,趋势项描述长期方向,随机误差是无法解释的抖动,所以选D。

Q3. Prophet中用于拟合周期性效应的数学工具是?

单选题 · easy

  • A.泰勒展开
  • B.拉普拉斯变换
  • C.傅里叶级数← 正确答案
  • D.小波变换

答案:C。Prophet用傅里叶级数把不同频率的正弦波和余弦波叠加起来,逼近任意形状的季节曲线。泰勒展开用于多项式逼近,拉普拉斯变换多用于信号处理,小波变换则不是Prophet的默认工具,因此选C。

Q4. Prophet模型中changepoint_prior_scale参数主要控制什么?

单选题 · mid

  • A.季节项周期长度
  • B.节假日字典大小
  • C.预测区间宽度
  • D.趋势变点修正量的灵活度← 正确答案

答案:D。该参数是变点修正量先验分布Laplace(0,τ)中的尺度τ,τ越大趋势越容易被数据拐弯,越小越保守。它不控制季节周期、节假日字典或区间宽度,所以选D。

Q5. 关于Prophet的节假日效应,下列说法正确的是?

多选题 · mid

  • A.需要提前指定节假日列表← 正确答案
  • B.可以用add_country_holidays自动添加← 正确答案
  • C.节假日效应对预测没有影响
  • D.可设置影响的前后窗口← 正确答案

答案:ABD。Prophet的节假日必须通过holidays参数或add_country_holidays导入,而且支持设置lower_window和upper_window让假期前后也产生效应,所以A、B、D正确。节假日项是加法模型的重要组成,C说“没有影响”明显错误。

Q6. Prophet的不确定性区间是通过什么方式得到的?

单选题 · mid

  • A.解析推导置信区间
  • B.蒙特卡洛模拟多次采样← 正确答案
  • C.残差正态假设
  • D.贝叶斯变分推断

答案:B。Prophet对趋势、季节、节假日参数反复随机抽样,生成上千条未来路径,再取5%和95%分位数得到区间,这是典型的蒙特卡洛模拟。它不做解析推导,也不依赖残差正态假设,所以选B。

Q7. 季节项公式s(t)=Σ[aₙcos(2πnt/P)+bₙsin(2πnt/P)]中,P代表什么?

单选题 · hard

  • A.傅里叶阶数
  • B.先验尺度
  • C.周期长度← 正确答案
  • D.变点数量

答案:C。P是季节循环的周期长度,年季节P=365天、周季节P=7天。傅里叶阶数用n表示,先验尺度用τ表示,变点数量与P无关,因此选C。

Q8. 与ARIMA相比,Prophet的优势体现在哪些方面?

多选题 · hard

  • A.自动处理缺失值与异常点← 正确答案
  • B.能融入节假日先验← 正确答案
  • C.对数据平稳性要求更低← 正确答案
  • D.一定比ARIMA预测更准

答案:ABC。Prophet对缺失值宽容、支持外部节假日先验、不要求数据差分平稳,这些都是相对于ARIMA的工程优势。但“一定更准”不成立,平稳短记忆序列上ARIMA往往更紧凑,D说法绝对化,故不选。

Q9. Prophet趋势项中,变点处的增长率修正量δⱼ服从什么先验分布?

单选题 · hard

  • A.Laplace(0, τ)← 正确答案
  • B.Normal(0, 1)
  • C.Uniform(0, 1)
  • D.Poisson(λ)

答案:A。δⱼ服从以0为中心、尺度为τ的拉普拉斯分布,这个先验让多数变点修正量接近0,只有数据强烈支持时才显著改变斜率。正态、均匀和泊松分布都不是Prophet设计中的变点先验,所以选A。

Q10. 使用Prophet做销量预测时,哪些做法能降低过拟合风险?

多选题 · mid

  • A.调小changepoint_prior_scale← 正确答案
  • B.调小seasonality_prior_scale← 正确答案
  • C.增加傅里叶阶数
  • D.用交叉验证选择参数← 正确答案

答案:ABD。调小趋势和季节的先验尺度都会让模型更保守、不易记住噪声;交叉验证能从数据角度客观选出泛化能力最好的参数。增加傅里叶阶数会提高模型复杂度、加剧过拟合,所以C不选。