Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >时间序列神器Prophet: 如何实现突变点预测

时间序列神器Prophet: 如何实现突变点预测

原创
作者头像
皮大大
发布于 2024-11-22 05:52:07
发布于 2024-11-22 05:52:07
24102
代码可运行
举报
文章被收录于专栏:时序预测时序预测
运行总次数:2
代码可运行

公众号:尤而小屋 编辑:Peter 作者:Peter

大家好,我是Peter~

本文是时间序列预测神器Prophet的第三篇:使用Prophet实现突变点预测

在真实的时间序列数据中常常会出现轨迹的突变点,Prophet会自动检测这些点

导入库

代码语言:python
代码运行次数:1
运行
AI代码解释
复制
import numpy as np
import pandas as pd
import os
import datetime 
import time
import re
np.random.seed(42)   

import plotly_express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import matplotlib.pyplot as plt
%matplotlib inline
# 设置支持中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] 
# 设置图像标题字体
plt.rcParams['axes.unicode_minus'] = False
import seaborn as sns
sns.set_theme(style="darkgrid")

import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.tsa.stattools import adfuller
from sklearn.metrics import r2_score,mean_squared_error,mean_squared_log_error

from prophet import Prophet 

import warnings
warnings.filterwarnings('ignore')

读取数据

读取在线数据:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
df = pd.read_csv("https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv")
# df.to_csv("data.csv",index=False)  # 保存到本地
df

自动预测突变点

默认情况下,只有在时间序列的前80%才会推断出突变点;但是可以通过参数changepoint_range进行设置,例如,Python中的m = Prophet(changepoint_range=0.9)。这意味着将在时间序列的前90%处寻找潜在的突变点。

搭建模型

In 3:

代码语言:python
代码运行次数:1
运行
AI代码解释
复制
m = Prophet()
m.fit(df)
09:18:15 - cmdstanpy - INFO - Chain [1] start processing
09:18:16 - cmdstanpy - INFO - Chain [1] done processing

Out3:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
<prophet.forecaster.Prophet at 0x784fe27ee9e0>

3.2 构建预测数据

In 4:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
future = m.make_future_dataframe(periods=365)  # 指定预测一年的数据
future

实施预测过程:

In 5:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
forecast = m.predict(future)
forecast.head()

全部字段信息:

In 6:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
forecast.columns  # 生成预测数据的全部字段信息

Out6:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
Index(['ds', 'trend', 'yhat_lower', 'yhat_upper', 'trend_lower', 'trend_upper',
       'additive_terms', 'additive_terms_lower', 'additive_terms_upper',
       'weekly', 'weekly_lower', 'weekly_upper', 'yearly', 'yearly_lower',
       'yearly_upper', 'multiplicative_terms', 'multiplicative_terms_lower',
       'multiplicative_terms_upper', 'yhat'],
      dtype='object')

3.3 模型可视化

In 7:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from prophet.plot import add_changepoints_to_plot
fig = m.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), m, forecast)

4 调整趋势的灵活性

如果趋势变化出现了过拟合(灵活性过高)或欠拟合(灵活性不足)的情况,你可以通过使用输入参数changepoint_prior_scale来调整稀疏先验的强度。默认情况下,这个参数被设置为0.05,增加它的值会使趋势更加灵活。

In 8:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
m = Prophet(changepoint_prior_scale=0.5)  # 默认值
forecast = m.fit(df).predict(future)
fig = m.plot(forecast)

减少这个值,会导致趋势拟合得灵活性降低:

In 9:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
m = Prophet(changepoint_prior_scale=0.001)   
forecast = m.fit(df).predict(future)
fig = m.plot(forecast)

增加值的效果:

In 10:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
m = Prophet(changepoint_prior_scale=1)   
forecast = m.fit(df).predict(future)
fig = m.plot(forecast)

5 指定突变点位置

除了使用自动变点检测之外,还可以使用changepoints参数手动指定潜在变点的位置。

In 11:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
m = Prophet(changepoints=['2014-01-01'])  #  指定突变点的位置
forecast = m.fit(df).predict(future)
fig = m.plot(forecast)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
prophet快速开发教程
安装完Anaconda后配置清华镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes
lovelife110
2021/01/14
1.6K0
prophet快速开发教程
时间序列预测神器Prophet【入门教程1】
Prophet是一种基于加法模型的时间序列预测工具,由Facebook的数据科学团队开发。它可以处理时间序列数据中的多种复杂性,包括趋势变化、季节性变化以及节假日效应等。
皮大大
2024/08/07
7720
「经验」时间序列预测神器-Prophet『实现篇』
阅读建议:本文为Prophet代码实现篇,如对模型原理有疑惑的同学,建议先看完「原理篇」后,再开始此篇的学习。
小火龙说数据
2022/06/30
1.5K0
「经验」时间序列预测神器-Prophet『实现篇』
Prophet调参[通俗易懂]
细心的同学可能会问,可不可能出现同一个模型既有linear趋势,又有logistic趋势,就像下面这样:
全栈程序员站长
2022/07/04
2.4K0
Prophet调参[通俗易懂]
我用Facebook开源神器Prophet,预测股市行情基于Python(系列2)
Prophet已经创建了所需的模型并匹配数据。Prophet在默认情况下为我们创建了变化点并将它们存储在.changepoints中。默认情况下,Prophet在初始数据集的80%中添加了25个变化点。在初始化prophet时,可以使用n_changepoints参数更改点的数量(例如,model= prophet (n_changepoints=30))
量化投资与机器学习微信公众号
2018/11/16
2.5K0
Prophet 初学笔记[通俗易懂]
(二)Prophet 预测模型 class,与官方 Prophet 结构相似,但不继承
全栈程序员站长
2022/09/06
5830
我用Facebook开源神器Prophet,预测时间序列基于Python(代码+论文)
Prophet是Facebook 开源一款基于 Python 和 R 语言的数据预测工具。Facebook 表示,Prophet 相比现有预测工具更加人性化,并且难得地提供 Python 和R的支持。它生成的预测结果足以和专业数据分析师媲美。
量化投资与机器学习微信公众号
2018/11/16
3.1K0
R+python︱Facebook大规模时序预测『真』神器——Prophet(遍地代码图)
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/57419862
悟乙己
2019/05/27
3K0
时间序列预测神器Prophet【入门教程2-饱和预测】
默认情况下,Prophet 使用线性模型来进行预测。然而,在预测增长时,通常存在一个可达到的最大点:如总市场规模、总人口规模等。这个点被称为承载能力(carrying capacity),并且预测应该在这个点上达到饱和。
皮大大
2024/09/05
2060
时间序列预测(一)基于Prophet的销售额预测
传统的时间序列算法很多,例如AR、MA、ARIMA等,对于非专业人员来说显得很难上手。而Prophet相对来说就友好多了,而且预测效果又很不错,所以用它来预测时间序列数据再适合不过了。本文主要参考基于facebook的时间序列预测框架prophet的实战应用[1]。
HsuHeinrich
2023/05/25
1.2K1
时间序列预测(一)基于Prophet的销售额预测
python | prophet的案例实践:趋势检验、突变点检验等
5年前prophet刚出来的时候试用过R版本的prophet: R+python︱Facebook大规模时序预测『真』神器——Prophet(遍地代码图)
悟乙己
2022/09/01
2.7K0
python | prophet的案例实践:趋势检验、突变点检验等
使用Prophet预言家进行时间序列预测
prophet(读作 ˈprɒfɪt)这个英文单词的意思是先知,预言家(没错,就是天黑请睁眼的那位😋)。顾名思义,它能够预测未来。
lyhue1991
2023/11/27
7670
使用Prophet预言家进行时间序列预测
手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)
对于任何业务而言,基于时间进行分析都是至关重要的。库存量应该保持在多少?你希望商店的客流量是多少?多少人会乘坐飞机旅游?类似这样待解决的问题都是重要的时间序列问题。
数据派THU
2018/07/30
4.5K0
手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)
prophet Seasonality, Holiday Effects, And Regressors季节性,假日效应和回归
https://github.com/lilihongjava/prophet_demo/tree/master/seasonality_holiday_effects__regressors
lovelife110
2021/01/14
2.7K0
prophet Seasonality, Holiday Effects, And Regressors季节性,假日效应和回归
时间序列预测(三)基于Prophet+XGBoost的销售额预测
前面我们介绍了如何使用Prophet和LSTM,不知道你们发现了没有,前者似乎太简单了,后者呢好像又很复杂。那有没有什么很好的方法能很好的中和下呢?
HsuHeinrich
2023/05/25
1.4K0
时间序列预测(三)基于Prophet+XGBoost的销售额预测
Facebook时序预测工具Prophet实战分析
去年Facebook开源了一套时序预测工具叫做Prophet。Prophet是一个预测时间序列数 据的模型。 它基于一个自加性模型,用来拟合年、周、季节以及假期等非线性趋势。 它在至少有一年历史数据的日常周期性数据,效果最好。 Prophet对缺失值,趋势的转变和大量的异常值是有极强的鲁棒性。Prophet中文翻译是:“先知”。名字还是挺贴切的。在看完本篇文章后,你将会知道:
全栈程序员站长
2022/09/07
2.4K0
Facebook时序预测工具Prophet实战分析
深入剖析时序Prophet模型:工作原理与源码解析|得物技术
随着得物业务的快速发展,积累了大量的时序数据,这些数据对精细化运营,提升效率、降低成本有着重要作用。在得物的时序数据挖掘场景中,时序预测Prophet模型使用频繁,本文对Prophet的原理和源码进行深入分析,欢迎阅读和交流。
得物技术
2024/06/04
6240
深入剖析时序Prophet模型:工作原理与源码解析|得物技术
prophet Trend Changepoints趋势变化点
https://github.com/lilihongjava/prophet_demo/tree/master/trend_changepoints
lovelife110
2021/01/14
1.2K0
prophet Trend Changepoints趋势变化点
用fbprophet预测北京未来一个月的气温
  fbprophet是facebook开源的时序数据预测包,提供了简洁的python和R api,可以对时序数据做一些预测,也提供了有些简单的趋势分析。更多细节可以看下官方文档。官方doc中给了一个数据集作为prophet的入门,这里我也只是按照官方的入门文档编写了的代码,很简单,只是把数据集换成了北京这8年来的每日温度数据,温度数我从网上爬取的,爬虫源码和数据可以从我github上找到。
xindoo
2021/01/22
1K0
用fbprophet预测北京未来一个月的气温
prophet Multiplicative Seasonality乘法季节性
https://github.com/lilihongjava/prophet_demo/tree/master/multiplicative_seasonality
lovelife110
2021/01/14
9480
prophet Multiplicative Seasonality乘法季节性
推荐阅读
相关推荐
prophet快速开发教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验