Prophet:一种大规模时间序列预测模型

article/2025/9/20 6:13:57

前言

Prophet是由facebook开发的开源时间序列预测程序,擅长处理具有季节性特征大规模商业时间序列数据。本文主要介绍了Prophet模型的设计原理,并与经典的时间序列模型ARIMA进行了对比。

1. Prophet模型原理

Prophet模型把一个时间序列看做由3种主要成分组成:趋势项、季节项、假期项。

其中趋势项模拟了时间序列的非周期变化,季节项模拟了时间序列的周期性变化,假期项模拟了假期或者其他突发事件的影响,为误差项。

1.1 趋势项

趋势项主要说明了数据的变化趋势,Prophet算法中主要运用了两种趋势项模型,饱和式增长模型与分段线性模型。

1.1.1 饱和式增长模型

最基本的饱和式增长模型表示为:

其中,代表承载能力,代表增长率,代表偏移量。该模型并不能完全反应数据特性,要对其进行改造。

首先,模型的承载能力不一定为常数,比如说访问互联网的人口是随时间提高的。因此可以替换为。同样的,成长率也不一定为常数,Prophet算法通过设置变点来拟合模型,假设在时间,设置变点,斜率变化通过表示,其中表示时间时刻的变化率。这样在时刻的变化率可以表示为:,变化率也可以通过化简为。

如果对变化率进行调整,相应的偏移量也要进行改变,以连接不同段的端点。第点的偏移量可以表示为:

a93e0c9bbcb31e501760b777540330a6.png

1.1.2 分段线性模型

对于不体现饱和增长的预测问题,可以考虑使用线性模型进行拟合,

同样的,为了使分段函数连续,

1.2 季节项

商业时间序列通常由于人类行为呈现多周期性,比如5天工作2天休息将会产生以周为周期的季节性效应,寒暑假会产生以年为周期的季节性效应。在Prophet模型中,通过傅里叶级数来拟合周期性效应:

其中为时间序列周期,为了拟合多周期性数据,可以取多值,一般为365.25对应年数据,7对应周数据。拟合周期项需要估计个参数,因此季节项可以表示为:

例如一个年季节性数据,且,则可以表示为:

1.3 假期项

节假日或者某些突发事件对商业性的时间序列数据有很大的影响,而且很多事件并不遵循季节性数据的规律,很难用季节性模型建模。Prophet算法中假设假期效应是独立的,对于假期,表示假期所影响的时间段,每个假期项对应参数,表示方式与季节项相似:

其中,

2. ARIMA模型

Arima模型是由AR、MA与差分法结合而成的一种时间序列预测算法,阶自回归模型表示为:

这就相当于将预测变量替换为目标变量的历史值的多元回归。

不同于使用预测变量的历史值来进行回归,移动平均模型(moving average model)使用历史预测误差来建立一个类似回归的模型。

我们将这个模型称之为模型,即阶移动平均模型。
结合MA与AR模型,我们可以得到ARIMA模型:

上式中是差分序列(它可能经过多次差分)。右侧的“预测变量”包括  的延迟值和延迟的误差。我们将这个模型称为模型,其中为差分次数。

3. 模型对比

ARIMA是自回归预测,它使用滞后值和误差项拟合时间序列,它假设时间序列的过去值与过去误差和未来值之间存在某种因果关系。

fea8bbb89eee399362ba3f641377dbf4.png

图1 arima预测

图1所示为arima预测,一般在短期预测中体现不错的效果,但长期的预测结果接近线性预测。

相反,Prophet不会寻找过去和未来之间的任何此类因果关系,它只是尝试找到适合数据的最佳曲线,使用线性或逻辑曲线以及季节性分量的傅立叶系数。

在ARIMA中,我们可以设置参数自回归分量p、差分次数d和移动平均分量q。为了调整ARIMA模型,我们可以使用自相关函数 (ACF) 和偏自相关函数 (PACF) 图来确定p和q的值。

而在Prophet中,我们可以设置线性或逻辑增长、假期、季节性和变化点。调整变点参数有助于模型捕捉训练数据中的趋势。Prophet提供了接口plot_components来分析数据的组成成份:f541295d2addc69d34070ab1fdc68f59.png

图2 prophet分解

图2展示了拟合数据的分解结果。当然,变点设置过多可能会导致模型过拟合,导致模型对未来数据的预测准确性下降。

不同于AIRMA模型要求等间隔采样,Prophet对于异常值、缺失数据和时间序列的剧烈变化具有鲁棒性。

Prophet模型参数可解释性更强,更加灵活,便于分析师对参数进行更改与扩展,比如说如果我们看到数据中存在一些突变值,可以根据需要设置合适的假期项来拟合数据。8918779ccdfa07d8363ea1a603721bb7.png

图3 prophet预测

图3展示了通过设置合理的假期项来拟合变化复杂的数据。

总结

本文从数学原理出发介绍了facebook开源的Prophet模型,希望能更好的帮助大家理解并使用。具体的程序使用方法可以参考prophet官方网站:https://facebook.github.io/prophet/


http://chatgpt.dhexx.cn/article/3caRhLxN.shtml

相关文章

Prophet模型的简介以及案例分析

目录 前言一、Prophet安装以及简介二、适用场景三、算法的输入输出四、算法原理五、使用时可以设置的参数六、学习资料参考七、模型应用7-1、股票收盘价格预测7-1-1、导入相关库7-1-2、读取数据7-1-3、数据预处理以及进行训练集和测试集的划分。7-1-4、实例化Prophet对象&#…

时序预测工具库(Prophet)介绍+代码

时序预测工具库(Prophet) 一、Prophet 简介二、Prophet 适用场景三、Prophet 算法的输入输出四、Prophet 算法原理五、与机器学习算法的对比六、代码6.1 依赖安装6.2 预测demo6.3 效果图 七、参考资料八、官方链接:九、案例链接: …

图的顺序存储及其深度优先遍历和广度优先遍历

图的基本概念 在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关&am…

算法模板-深度优先遍历

简介 深度优先遍历,顾名思义对于树或者图中的某个节点,尽可能往一个方向深入搜索下去。具体而言,从某个节点v出发开始进行搜索,不断搜索直到该节点的所有边都被遍历完。对于很多树、图和矩阵地搜索问题,深度优先遍历是…

图的深度优先遍历java代码详解

代码是根据矩阵来实现深度优先遍历的 邻接结点就是按照vertex中的顺序来一个一个来找的 if(edges[i][j]>0&&!isVisited[j]) { return j; } 就很好的说明了 如果没找到就return -1 回到dfs(i)这一层 再retur…

图(深度优先遍历、广度优先遍历)

文章目录 一、图的概述1.1 什么是图1.2 图对比线性表和树1.3 图的常见概念 二、图的存储方式2.1 邻接矩阵2.2 邻接表 三、图的遍历3.1 图的深度优先遍历3.1.1 什么是深度优先遍历3.1.2 深度优先遍历的步骤3.1.3 深度优先遍历代码实现 3.2 图的广度优先遍历3.2.1 什么是广度优先…

树与图的深度优先遍历

目录 一、概念 二、操作说明 1.树与图的深度优先遍历 2.树的DFS序 3.树的深度 4.树的重心 5.图的连通块划分 三、例题实践 1.树的重心例题实战 a.题目描述 b.解题思路 c.代码实现 一、概念 树与图的深度优先遍历:深度优先遍历,就是在每一个…

算法总结-深度优先遍历和广度优先遍历

深度优先遍历(Depth First Search,简称DFS) 与广度优先遍历(Breath First Search,简称BFS)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等。 一、深度优先遍历 深度优先…

图的两种遍历:深度优先遍历+广度优先遍历

一、深度优先遍历 1、简介 深度优先遍历是指按照深度方向搜索,它类似于树的先根遍历,是树的先根遍历的推广。 基本思想(通俗) 选一条路走到 底,直到 走不通,就 原路返回看看 是否还有路可走,如…

C++实现图的深度优先遍历和广度优先遍历

图的深度和广度优先遍历 图的深度优先遍历1、算法思想2、邻接矩阵构造图3、邻接表构造图 图的广度优先遍历1、算法思想2、邻接矩阵构造图 参考 图的深度优先遍历 1、算法思想 (1)从图中的某个初始点 v 出发,首先访问初始点 v.(…

深度优先遍历

1.先序序列为a,b,c,d 的不同二叉树的个数是 (14) 。 13 14 15 16 f(n)c(n 2n)/n1 2.在构建哈弗曼树时,要使树的带权路径长度最小,只需要遵循一个原则,那就是:权重越大的结点离树…

图的遍历——深度优先遍历与广度优先遍历

目录 何谓遍历? 图的遍历特点 图的遍历方式 深度优先搜索 过程分析 案例分析: 算法的代码实现 测试案例: 测试结果如下: 遍历非连通图 算法复杂度分析 额外补充 广度优先搜索 过程分析 辅助队列 算法的代码实现 队…

图的深度优先遍历和广度优先遍历

本文参考自《大话数据结构》 文章目录 定义图的存储结构邻接矩阵邻接表 图的遍历深度优先遍历邻接矩阵代码邻接表代码 广度优先遍历邻接矩阵邻接表 最小生成树最短路径算法 定义 图(Graph) 是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V&#xff0…

深度优先遍历和广度优先遍历

深度优先遍历和广度优先遍历 什么是 深度/广度 优先遍历? 深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。 这…

图的遍历(深度优先搜索)

1、深度优先搜索遍历过程 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出…

图的遍历算法之深度优先遍历(DFS)(C++)

图的深度优先遍历思想是: 从图中某结点出发,访问其某一相邻结点,再访问该结点的相邻结点,直至访问完所有的结点。 形象的比喻就是:一条路走到头,回头再走没走过的路。 可见,深度优先遍历是一…

图的深度优先遍历

一 图遍历介绍 所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略。 1 深度优先遍历 2 广度优先遍历 二 深度优先遍历基本思想 图的深度优先搜索(Depth First Search…

图的遍历 ——深度优先遍历

图的遍历 ——深度优先遍历 深度优先搜索(Depth First Search,DFS)是最常见的图搜索方法之一。 深度优先搜索沿着一条路径一直搜索下去,在无法搜索时,回退到刚刚访问过的节点。深度优先遍历是按照深度优先搜索的方式…

二、图的遍历——深度优先遍历

深度优先遍历,也有称为深度优先搜索,简称为DFS。 深度优先遍历其实就是一个递归的过程,它从图中某个顶点ⅴ出发,访问此顶点,然后从V的未被访问的邻接点出发深度优先遍历图,直至图中所有和V有路径相通的顶点…

图的遍历(深度优先遍历DFS,广度优先遍历BFS)以及C语言的实现

遍历的定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算. 一:深度优先遍历(DF&#xff…