正在加载中...

展开本页目录
算法教程Prophet-Prophet时间序列

Prophet-Prophet时间序列

No.052 · 在线教程

Prophet-Prophet时间序列模块采用可加性分解思想进行预测,将时间序列表示为趋势项、季节项与随机误差之和。其基础形式为:

Prophet-Prophet时间序列

1. 方法概述

Prophet-Prophet时间序列模块采用可加性分解思想进行预测,将时间序列表示为趋势项、季节项与随机误差之和。其基础形式为:

$$ y(t)=g(t)+s(t)+\varepsilon_t \tag{1} $$

其中:

  • \(g(t)\):趋势项(本实现采用分段线性趋势);
  • \(s(t)\):季节项(Fourier 级数);
  • \(\varepsilon_t\):随机误差项。

设观测样本为

$$ \mathcal{D}=\{(t_i,y_i)\}_{i=1}^{n},\quad t_i\in\mathbb{R},\ y_i\in\mathbb{R} \tag{2} $$

其中 \(t_i\) 为时间索引(由日期列 ds 映射而来),\(y_i\) 为目标变量(列 y)。

2. 趋势项建模(分段线性)

2.1 时间映射

将日期映射为起始时点后的天数:

$$ \tau_i=\frac{\mathrm{seconds}(t_i-t_0)}{24\times3600} \tag{3} $$

其中 \(t_0\) 为样本起始日期。

2.2 变点构造

在样本前 80% 区间中均匀设置潜在变点 \(c_k\)(数量为 \(K\)):

$$ \mathcal{C}=\{c_1,c_2,\ldots,c_K\} \tag{4} $$

定义分段线性基函数:

$$ \delta_k(\tau)=\max(0,\tau-c_k) \tag{5} $$

趋势项写为:

$$ g(\tau)=\beta_0+\beta_1\tau+\sum_{k=1}^{K}\gamma_k\,\delta_k(\tau) \tag{6} $$

3. 季节项建模(Fourier 级数)

对周期为 \(P\) 的季节性,采用阶数为 \(M\) 的 Fourier 展开:

$$ s_P(\tau)=\sum_{m=1}^{M}\left[a_m\sin\left(\frac{2\pi m\tau}{P}\right)+b_m\cos\left(\frac{2\pi m\tau}{P}\right)\right] \tag{7} $$

本模块支持:

  • 年季节性:\(P=365.25\),默认阶数 10;
  • 周季节性:\(P=7\),默认阶数 3;
  • 日季节性:\(P=1\),默认阶数 4(适用于小时级数据)。

总季节项为多周期叠加:

$$ s(\tau)=\sum_{P\in\mathcal{P}} s_P(\tau) \tag{8} $$

4. 参数估计(Ridge 回归)

将趋势基与季节基拼接为设计矩阵 \(X\),参数向量记为 \(\theta\)。

模型拟合目标为岭回归:

$$ \hat{\theta}=\arg\min_{\theta}\left\{\sum_{i=1}^{n}(y_i-X_i\theta)^2+\lambda\lVert\theta\rVert_2^2\right\} \tag{9} $$

预测值为:

$$ \hat{y}_i=X_i\hat{\theta} \tag{10} $$

残差定义:

$$ e_i=y_i-\hat{y}_i \tag{11} $$

不确定性(区间)使用残差标准差 \(\sigma\):

$$ \sigma=\sqrt{\frac{1}{n}\sum_{i=1}^{n}e_i^2} \tag{12} $$

95% 预测区间为:

$$ \hat{y}_{i,\mathrm{lower}}=\hat{y}_i-1.96\sigma,\qquad \hat{y}_{i,\mathrm{upper}}=\hat{y}_i+1.96\sigma \tag{13} $$

5. 训练/验证与未来预测

按时间顺序划分训练集与验证集,训练比例记为 \(r\in(0,1)\):

$$ n_{\mathrm{train}}=\lfloor rn\rfloor,\qquad n_{\mathrm{test}}=n-n_{\mathrm{train}} \tag{14} $$

流程为:

  1. 在训练集拟合模型;
  2. 对验证区间进行滚动外推,计算 holdout 指标;
  3. 在全量样本重拟合,并预测未来 \(h\) 期(forecast_periods)。

6. 评价指标

6.1 平均绝对误差(MAE)

$$ \mathrm{MAE}=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i| \tag{15} $$

6.2 均方根误差(RMSE)

$$ \mathrm{RMSE}=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2} \tag{16} $$

6.3 平均绝对百分比误差(MAPE,百分比)

$$ \mathrm{MAPE}=\frac{100\%}{n}\sum_{i=1}^{n}\left|\frac{y_i-\hat{y}_i}{y_i}\right| \tag{17} $$

6.4 决定系数(\(R^2\))

$$ R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i=1}^{n}(y_i-\bar{y})^2} \tag{18} $$

模块同时输出训练集指标与验证集指标,便于比较拟合能力与泛化能力。

7. 符号说明表

符号 含义
\(n\) 样本数
\(t_i\) 第 \(i\) 个时间点
\(y_i\) 第 \(i\) 个观测值
\(\tau_i\) 数值化时间索引(天)
\(K\) 变点数量
\(c_k\) 第 \(k\) 个变点
\(P\) 季节周期
\(M\) Fourier 阶数
\(X\) 设计矩阵
\(\theta\) 模型参数
\(\lambda\) 岭回归正则参数
\(\sigma\) 残差标准差
\(h\) 未来预测期数

8. 输出结果与图表说明

系统导出 Excel 多表(典型):

  • Parameters:参数名与取值;
  • Summary:样本量、训练/验证指标、频率、预测期等;
  • RawData:原始时间序列;
  • FitForecast:拟合与未来预测(含区间、趋势、季节项);
  • Residuals:残差序列;
  • HoldoutForecastHoldoutMetrics:验证集预测与指标;
  • Charts:图表路径索引。

系统图表(典型):

  1. chart_timeseries:实际值、拟合/预测值、预测区间;
  2. chart_components:趋势项与季节项;
  3. chart_residuals:残差分布与 QQ 图;
  4. chart_holdout:验证集实际值 vs 预测值。

9. 论文写作模板

9.1 方法描述模板

“本文采用基于可加性分解的 Prophet 时间序列方法进行预测建模。模型由趋势项、季节项与随机误差构成(式(1))。趋势项采用分段线性函数并引入潜在变点(式(4)–(6)),季节项采用 Fourier 级数展开(式(7)–(8))。参数通过带 L2 正则的最小二乘目标估计(式(9)),并基于残差标准差构建预测区间(式(13))。”

9.2 结果描述模板

“在训练集上模型达到 RMSE=\(\cdot\cdot\cdot\)、MAE=\(\cdot\cdot\cdot\)、MAPE=\(\cdot\cdot\cdot\%\)、\(R^2=\cdot\cdot\cdot\)。在按时间划分的验证集上,RMSE=\(\cdot\cdot\cdot\)、MAE=\(\cdot\cdot\cdot\)、MAPE=\(\cdot\cdot\cdot\%\)、\(R^2=\cdot\cdot\cdot\)。由图 \(\cdot\) 可见模型较好刻画了长期趋势与季节波动。”

9.3 图表与表格建议

  • 图 1:时间序列拟合与未来预测区间;
  • 图 2:趋势项与季节项分解图;
  • 图 3:残差诊断图;
  • 表 1:模型参数设置;
  • 表 2:训练集与验证集指标对比。

10. 实现说明与注意事项

就本项目当前可运行版本而言,Prophet 模块的真实核心位于:

  • 具体的算法2/Prophet-Prophet时间序列/core/calculator.py
  • 具体的算法2/Prophet-Prophet时间序列/core/prophet_calculator.py
  • 具体的算法2/Prophet-Prophet时间序列/ui/results_widget.py

其中真正控制结果文件内容的是 core/calculator.py

10.1 当前 Excel 工作簿与图表

根据 core/calculator.py 的实际实现,结果工作簿包含:

  • Parameters
  • Summary
  • RawData
  • FitForecast
  • Residuals
  • HoldoutForecast
  • HoldoutMetrics
  • Charts

程序当前固定导出四张核心图:

  • chart_timeseries.png
  • chart_components.png
  • chart_residuals.png
  • chart_holdout.png

因此,论文中关于趋势、季节、残差和验证集表现的说明,可以直接分别对应 FitForecastResidualsHoldoutForecast/HoldoutMetricsCharts

10.2 当前 results 目录与 repro 链路

当前结果目录通常形如:

results/Prophet-Prophet时间序列分析结果_<YYYYMMDD_HHMMSS>/

目录中通常包含:

  • Prophet-Prophet时间序列分析结果_<时间戳>.xlsx
  • Prophet时间序列复现结果_<时间戳>.xlsx
  • repro_prophet_template_<时间戳>.py
  • repro_inputs/prophet_input.csv
  • 四张标准图表

此外,基线与 UI 冒烟目录下也会保留:

  • window3_baseline_*
  • window3_uiflow_*

等测试结果目录,它们同样包含 xlsx + 图表 + repro_inputs + repro_template

10.3 当前项目实现的使用注意事项

  1. ds 列必须可解析为日期时间,y 列应为数值型;
  2. freq 可手动指定(如 D/W/M),留空时自动推断,失败则回退 D
  3. 日季节性适用于小时级数据,日频数据通常建议关闭;
  4. 若验证集 \(R^2\) 明显偏低,应检查结构突变、异常值、频率设定或季节项设置;
  5. 本模块为 Prophet 思想的工程化实现,适用于论文复现与应用研究场景;
  6. 若论文与程序输出保持一致,应把 SummaryFitForecastHoldoutMetricsCharts 视为标准结果集合,而不是只引用未来预测曲线。

附录 A:英文摘要段落(可直接用于论文)

This study applies a Prophet-style additive time-series model to forecast the target sequence. The observed series is decomposed into trend, seasonality, and random error components, i.e., \(y(t)=g(t)+s(t)+\varepsilon_t\). The trend is modeled by a piecewise linear function with potential changepoints, while seasonality is represented by Fourier series terms for yearly, weekly, and optional daily cycles. Model parameters are estimated via regularized least squares, and prediction intervals are constructed from residual variability. We evaluate model performance on both training and holdout sets using RMSE, MAE, MAPE, and \(R^2\), and provide component decomposition and residual diagnostic plots to support interpretability and robustness analysis.

附录 B:中文图表题注模板(可直接替换数值)

  • 图 1 Prophet 时间序列拟合与未来预测结果。黑色曲线为历史观测值,蓝色曲线为模型拟合/预测值,浅蓝色阴影表示 95% 预测区间。
  • 图 2 Prophet 成分分解图。上图为趋势项 \(g(t)\),下图为季节项 \(s(t)\),用于展示长期变化与周期性波动特征。
  • 图 3 残差诊断图。左侧为残差直方图,右侧为残差 QQ 图,用于检验误差分布形态与正态近似程度。
  • 图 4 验证集预测对比图。展示验证集真实值与预测值的时间序列对齐情况,用于评估模型外推能力。

图注撰写建议:

  1. 在图注中注明样本区间、预测步长与频率(如“日频,预测 30 期”)。
  2. 若论文含多组实验,建议在图注中注明参数版本(如“含年/周季节性,\(K=25\)”)。
  3. 指标结论建议与图注联动,例如“由图 4 可见验证集偏差主要出现在后段区间,与表 2 中 RMSE 上升一致”。

11. 单篇终审补充

11.1 图题与表题对齐建议

  • Parameters 表可写为:表X Prophet 参数设置与季节性配置。
  • Summary 表可写为:表X Prophet 拟合摘要与核心指标。
  • RawData 表可写为:表X Prophet 原始时间序列数据。
  • FitForecast 表可写为:表X Prophet 拟合与未来预测结果。
  • Residuals 表可写为:表X Prophet 残差结果。
  • HoldoutForecast 表可写为:表X Prophet 验证集预测结果。
  • HoldoutMetrics 表可写为:表X Prophet 验证集性能指标。
  • Charts 表可写为:表X Prophet 图表索引与路径。
  • chart_timeseries.png 建议写为:图X Prophet 拟合与未来预测图。
  • chart_components.png 建议写为:图X Prophet 成分分解图。
  • chart_residuals.png 建议写为:图X Prophet 残差诊断图。
  • chart_holdout.png 建议写为:图X Prophet 验证集预测对比图。

11.2 终审说明

  • 当前实现是 Prophet 思想下的简化可加模型,真实后端是分段线性趋势加 Fourier 季节项并用 Ridge 回归拟合;正文若强调“标准 Prophet 原库实现”,需要额外说明当前项目是工程化简化版。
  • FitForecast 同时包含历史拟合段和未来预测段,因此论文里引用该表时应区分“样本内拟合”和“样本外预测”两部分。
  • HoldoutForecastHoldoutMetrics 只有在做了保留集评估时才有意义,正文不要把它们写成所有运行都固定存在的结果表。
  • 图表结构是固定四类:总时间序列、成分分解、残差诊断、验证集对比。论文图题应以这四类为主,不要额外扩写“变点权重图”等当前程序未自动输出的图件。

11.3 全量强化补充

本次全量强化优先绑定的主工作簿目录为 具体的算法2/Prophet-Prophet时间序列/results/window3_uiflow_test_window3_timeseries_dynami14_prophet。其中主结果文件为 prophet_ui_flow.xlsx,实际工作表为 ParametersSummaryRawDataFitForecastResidualsHoldoutForecastHoldoutMetricsCharts。同目录下还可直接核验 4 张真实图件:chart_timeseries.pngchart_components.pngchart_residuals.pngchart_holdout.png,并存在 repro_inputs/prophet_input.csv 输入副本,因此 UI 结果页导出的主结果链是完整存在的。

不过,当前 UI 目录内没有同轮 repro 脚本;真实 repro 脚本证据位于基线目录 具体的算法2/Prophet-Prophet时间序列/results/window3_baseline_test_window3_timeseries_dynami2_prophet/repro_prophet_template_20260329_165436.py。该脚本内部当前写法为 SRC_FILE = 'results/window3_baseline_test_window3_timeseries_dynami2_prophet/repro_inputs/prophet_input.csv',并显式绑定 DS_COL = 'ds'Y_COL = 'y'FORECAST_PERIODS = 10YEARLY = TrueWEEKLY = TrueDAILY = FalseFREQ = 'D'TRAIN_RATIO = 0.8

因此 Prophet 这篇文档当前应明确区分两类真实证据:一类是 ui_flow 目录中的主工作簿与图件,另一类是 baseline 目录中的 repro 脚本与 repro_inputs/prophet_input.csv。两者都真实存在,但不属于同一个时间戳目录;正文引用时不能把它们误写成同一轮单次实验包。

12. 软件实现核查补充(2026-07)

  • 当前实现的主结果目录应写作 具体的算法2/Prophet-Prophet时间序列/results/window3_uiflow_test_window3_timeseries_dynami14_prophet,主工作簿为 prophet_ui_flow.xlsx
  • 正文应围绕 ParametersSummaryRawDataFitForecastResidualsHoldoutForecastHoldoutMetricsCharts 来写,图则对应 chart_timeseries.pngchart_components.pngchart_residuals.pngchart_holdout.png
  • 当前实现是工程化简化版 Prophet,不要直接写成原库 Prophet 的完整官方实现。
  • ui_flow 主结果与 baseline 复现脚本是两套证据,文中要分开写,不要混成同一次导出。