Prophet 时间序列预测算法
Posted 龙凌云端
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prophet 时间序列预测算法相关的知识,希望对你有一定的参考价值。
Prophet 时间序列预测算法
一、背景
时间序列预测是一种预测未来数据的方法,对于时间序列的分析,我们可以采用传统的统计学方法,例如 ARIMA、Exponential Smoothing等,这些方法通过分析过去的数据建立模型来预测未来的趋势,但是这些方法有一个限制就是必须满足某些假设条件,例如数据的稳定性,缺失值的处理等等。
因此,近年来出现了一些新的时间序列预测方法,例如 Facebook开源的Prophet,它是一种具有高度灵活性的时间序列预测算法,它能够处理数据的不稳定性,缺失值,异常值等等,同时还能够自动检测周期性的趋势和节假日的影响,可以应用于多种行业和领域。
二、Prophet 的基本原理
Prophet 的基本原理是将时间序列分解成趋势项、季节项和假日项,并在此基础上使用加法模型进行预测。具体地,假设时间序列 y(t) 由以下三个部分组成:
- 趋势项 g(t):描述时间序列的长期趋势,通常采用带有自动回归项和季节项的分段线性模型来拟合。
- 季节项 s(t):描述时间序列的周期性变化,通常采用傅里叶级数来拟合。
- 假日项 h(t):描述时间序列中的异常事件(如节假日、促销等),通常采用自定义二进制变量来表示。
将趋势项、季节项和假日项相加,得到时间序列的预测值:
y(t) = g(t) + s(t) + h(t) + ε(t)
其中,ε(t) 是误差项,通常假定为正态分布。
三、Prophet 的使用方法
1、环境准备
首先,我们需要安装 Prophet 和其所依赖的 Python 包。可以通过以下命令进行安装:
pip install fbprophet numpy pandas matplotlib
2、数据准备
为了进行销售量预测,我们需要先准备一些历史销售数据。这里我们使用一个示例数据集 sales.csv
,包含日期和销售量两列。数据集可以通过以下链接下载:
https://raw.githubusercontent.com/facebook/prophet/master/examples/example_retail_sales.csv
我们可以使用 Pandas 库读取数据集:
import pandas as pd
sales = pd.read_csv(\'sales.csv\')
接下来,我们需要将数据集转换为 Prophet 所需的格式。
Prophet 要求数据集至少包含 ds
和 y
两列,分别表示日期和预测值。
在这里,我们将 ds
列设置为日期列,并将 y
列设置为销售量列。
sales = sales.rename(columns=\'ds\': \'date\', \'y\': \'sales\')
sales[\'date\'] = pd.to_datetime(sales[\'date\'])
最后,我们还需要将数据集拆分为训练集和测试集。这里我们将最后 12 个月的数据作为测试集。
test_size = 12
train = sales.iloc[:-test_size]
test = sales.iloc[-test_size:]
3、模型训练
数据准备好了,接下来我们就可以开始训练 Prophet 模型了。Prophet 的使用流程大致如下:
- 创建一个 Prophet 模型对象
- 用训练集数据拟合模型
- 使用模型对未来数据进行预测
from fbprophet import Prophet
# 创建 Prophet 模型对象
model = Prophet()
# 拟合模型
model.fit(train)
# 构建未来时间序列
future = model.make_future_dataframe(periods=test_size, freq=\'M\')
# 使用模型进行预测
forecast = model.predict(future)
在上面的代码中,我们创建了一个 Prophet 模型对象 model
,并使用训练集数据对其进行拟合。
然后,我们使用 make_future_dataframe
方法构建一个包含未来 12 个月的时间序列,并使用 predict
方法进行预测。
需要注意的是,Prophet 的预测结果包含许多列,其中包括:yhat
列为预测值,yhat_lower
列为预测值的下限,yhat_upper
列为预测值的上限。
4、评估优化
在进行时间序列预测之后,我们需要对预测结果进行评估和优化。
Prophet 提供了许多方法来评估模型的拟合程度,例如可视化预测结果、计算预测误差等。
1)可视化预测结果
import matplotlib.pyplot as plt
# 可视化预测结果
fig = model.plot(forecast)
plt.show()
这里,我们使用plot
方法将预测结果可视化,然后使用Matplotlib将其绘制出来。
2)计算预测误差
# 计算预测误差
from fbprophet.diagnostics import performance_metrics
df_perf = performance_metrics(forecast)
通过对预测结果进行评估,我们可以确定模型的拟合程度,进而进行优化,例如调整模型参数、增加更多的历史数据等。
3)查看预测结果的组成部分
model.plot_components(forecast)
这将生成一个包含趋势、季节性和假期效应的可视化图。
以上就是如何使用Prophet进行时间序列预测的基本步骤。
当然,在实际应用中,可能需要进行更多的数据处理和调整(如自定义季节性、设置假期、置信区间等),以确保获得最佳的预测结果。
四、总结
Prophet 是一款功能强大的时间序列预测工具,使用简单,同时具有较高的预测准确率。
如果是对时序数据进行预测的场景,推荐使用 Prophet !!!
PS
关于 Prophet 参数说明,请参考博客:https://www.cnblogs.com/miracle-luna/p/17368601.html
如何使用机器学习算法进行能耗预测 2:算法与架构
文章大纲
业务逻辑与技术方案架构
- 时间序列预测概念
时间序列就是利用过去一段时间的数据来预测未来一段时间内的信息。
时间序列模型依赖数值在时间上的先后顺序,同样大小的值改变顺序后输入模型,产生的结果是不同的。同理,不同分布的数据,产生的结果是不同的。 - 预测模式
单步预测:使用滞后的观测值 x_t-1 来预测当前时间的值 x_t
多步预测:使用过去的观测序列
以上是关于Prophet 时间序列预测算法的主要内容,如果未能解决你的问题,请参考以下文章