用Prophet在Python中进行时间序列预测

简介: 用Prophet在Python中进行时间序列预测

预测通常被认为是报告的自然发展。报告可以帮助我们回答,发生了什么事?预测有助于回答下一个逻辑问题,将会发生什么?

Prophet的目的是“使专家和非专家可以更轻松地进行符合需求的高质量预测。

您将学习如何使用Prophet(在Python中)解决一个常见问题:预测下一年公司的每日订单。


 

数据准备与探索

Prophet最适合每日定期数据以及至少一年的历史数据。我们将使用SQL处理每天要预测的数据:

select
  date,
  value
from modeanalytics.daily_orders
order by date

现在,我们每天都有数据,我们可以将SQL查询结果集通过管道传递到Python笔记本中的pandas dataframe对象中。首先,将您的SQL查询重命名为Daily Orders。然后,在Python笔记本中,我们可以使用以下语句将查询结果集通过管道传递到数据框df

df = datasets["Daily Orders"]

为了快速了解您的数据框包含多少个观测值,可以运行以下语句,该语句将返回一个元组,分别包含数据框中的行数和列数:


df.shape


先知总是期望输入DataFrame中有两列:dsy。该ds列表示SQL查询中的日期 。要检查DataFrame中列的类型,可以在Python笔记本中运行以下语句:


df.dtypes


一旦确认数据框中的列是正确的数据类型,就可以ds在数据框中创建一个新列,该date列是该列的完全相同的副本,也可以创建一个新列,该列是该列y的完全相同的副本value

df['ds'] = df['date']
df['y'] = df['value']

然后,您可以重新调整该date列的用途,以用作数据框的索引:

df.set_index('date')


这会将您的数据框的索引转换为DatetimeIndex,这使熊猫能够将此数据集解释为Time Series

现在您已经准备好要与Prophet一起使用的数据,在将数据输入到Prophet中之前,将其作图并检查数据的外观是个好习惯。



Box-Cox变换

通常在预测中,您会明确选择一种特定类型的幂变换,以将其应用于数据以消除噪声,然后再将数据输入到预测模型中(例如,对数变换或平方根变换等)。但是,有时可能难以确定哪种功率变换适合您的数据。

Box-Cox变换是一种数据变换,用于评估一组Lambda系数(λ)并选择可实现最佳正态性近似值的值。


from scipy.stats import boxcox

boxcox方法需要一个输入:要转换的一维正数据数组。您也可以选择指定要用于转换的λ值(例如,对数转换的λ= 0)。否则,该boxcox方法将找到使对数似然函数最大化的λ并将其作为第二个输出参数返回。

对于我们的示例,我们将让该boxcox方法确定用于变换的最佳λ,并将该值返回给名为lam的变量:

# Apply Box-Cox Transform to value column and assign to new column y
df['y'], lam = boxcox(df['value'])

如果我们将新转换的数据与未转换的数据一起绘制,则可以看到Box-Cox转换能够消除随着时间变化而观察到的许多增加的方差:


预测

使用Prophet创建预测的第一步是将fbprophet库导入到我们的Python笔记本中:


import fbprophet


将Prophet库导入笔记本后,我们可以从 Prophet对象(创建实例)开始:

m = fbprophet.Prophet()


实例化Prophet对象后,就可以将模型拟合到历史数据中了。您可以通过fit在Prophet对象上调用方法并传入数据框来实现此目的:

使用Prophet通过Box-Cox转换的数据集拟合模型后,现在就可以开始对未来日期进行预测。

现在,我们可以使用该predict方法对未来数据帧中的每一行进行预测。

此时,Prophet将创建一个分配给变量的新数据框,其中包含该列下未来日期的预测值
yhat以及不确定性间隔和预测的组成部分。我们可以使用Prophet的内置plot帮助器功能将预测可视化:

在我们的示例中,我们的预测如下所示:


如果要可视化各个预测组件,则可以使用Prophet的内置plot_components方法:

plot_components在我们的示例数据上运行将返回以下一组组件可视化:


预测和组件可视化显示,Prophet能够准确地建模数据中的潜在趋势,同时还可以精确地建模每周和每年的季节性(例如,周末和节假日的订单量较低)。


逆Box-Cox变换

由于先知用于Box-Cox转换后的数据,因此您需要将预测值转换回其原始单位。要将新的预测值转换回其原始单位,您将需要执行Box-Cox逆转换。

 

inv_boxcox方法有两个必需的输入。要转换的数据数组和转换的λ值。我们将对预测数据帧中的特定列进行逆变换,并提供先前从存储在lam变量中的第一个Box-Cox变换中获得的λ值:

现在,您已将预测值转换回其原始单位,现在可以将预测值与历史值一起可视化:

相关文章
|
6月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
801 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
4月前
|
数据可视化 数据挖掘 数据安全/隐私保护
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
时间序列动量策略(TSMOM)是一种基于资产价格趋势的量化交易方法,通过建立多头或空头头寸捕捉市场惯性。然而,传统TSMOM策略因风险敞口不稳定而面临收益波动问题。波动率调整技术通过动态调节头寸规模,维持恒定风险水平,优化了策略表现。本文系统分析了波动率调整TSMOM的原理、实施步骤及优势,强调其在现代量化投资中的重要地位,并探讨关键参数设定与实际应用考量,为投资者提供更平稳的风险管理体验。
150 4
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
|
8月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
266 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
4月前
|
存储 数据采集 大数据
Python推导式进阶指南:优雅初始化序列的科学与艺术
本文系统讲解Python推导式的用法与技巧,涵盖列表、字典、集合推导式及生成器表达式。通过代码示例和性能对比,展示推导式在数据结构初始化中的优势:简洁高效、执行速度快30%-50%。文章分析基础语法、核心应用场景(如序列构造、键值对转换、去重运算)及嵌套使用,并探讨使用边界与最佳实践,强调可读性优先原则。最后指出,合理运用推导式能显著提升代码质量和处理效率,同时避免过度复杂化的陷阱。
96 0
|
8月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
276 37
Python时间序列分析工具Aeon使用指南
|
7月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
机器学习/深度学习 数据采集 算法
时间序列结构变化分析:Python实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
1239 1
|
机器学习/深度学习 算法 数据挖掘
6种有效的时间序列数据特征工程技术(使用Python)
在本文中,我们将探讨使用日期时间列提取有用信息的各种特征工程技术。
359 1
|
8月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
474 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
机器学习/深度学习 索引 Python
python之序列
python之序列
220 59

推荐镜像

更多