当前位置: 首页 > news >正文

深度学习篇---Prophet时间序列预测工具


文章目录

  • 前言
  • 一、什么是Prophet?
    • 易用性
    • 自动化
    • 灵活性
    • 鲁棒性
    • 快速拟合
  • 二、Prophet的核心原理
    • 1. 趋势模型
      • a. 分段线性模型(默认)
      • b. 逻辑增长模型
    • 2. 季节性模型
    • 3. 节假日效应
  • 三、Prophet使用方法
    • 安装Prophet
    • Python基本使用示例
      • 1. 准备数据
      • 2. 创建并拟合模型
      • 3. 创建预测数据框
      • 4. 生成预测
      • 5. 可视化结果
  • 四、关键参数说明
    • growth
    • linear
    • logistic
    • seasonality_mode
    • additive
    • multiplicative
    • changepoint_prior_scale
    • seasonality_prior_scale
    • holidays_prior_scale
  • 五、高级功能
    • 自定义季节性
    • 调整变点
    • 交叉验证
    • 性能评估
  • 六、实际应用建议
    • 数据准备
    • 模型调优
    • 结果解释
    • 局限性
  • 七、与其他工具的对比


前言

本文简单介绍了Prophet时间预测工具的使用等相关知识。


一、什么是Prophet?

Prophet是Facebook核心数据科学团队开发的一个开源时间序列预测工具,于2017年发布。它专门为业务预测任务设计,具有以下特点:

易用性

易用性:无需深厚的时间序列分析专业知识即可使用

自动化

自动化:自动检测时间序列中的趋势、季节性和节假日效应

灵活性

灵活性:允许用户轻松加入领域知识调整模型

鲁棒性

鲁棒性:对缺失数据和异常值有较好的处理能力

快速拟合

快速拟合:基于Stan的底层实现,计算效率高

Prophet特别适合具有强烈季节性效应多个季节历史数据的时间序列,也适用于历史数据较少的情况。

二、Prophet的核心原理

Prophet使用了一个可分解的加法模型,将时间序列分解为三个主要部分:

y(t) = g(t) + s(t) + h(t) + εₜ
其中:
g(t):趋势函数,模拟非周期性变化
s(t):季节性成分,表示周期性变化(如周、月、年季节性)
h(t):节假日效应,表示不规则日程的影响
εₜ:误差项,表示模型未捕捉的随机变化

1. 趋势模型

Prophet提供了两种趋势模型可选:

a. 分段线性模型(默认)

g(t) = (k + a(t)ᵀδ)·t + (m + a(t)ᵀγ)
适用于具有明显变化点的趋势

b. 逻辑增长模型

g(t) = C / (1 + exp(-k(t - m)))
适用于有饱和增长限制的数据

2. 季节性模型

使用傅里叶级数来拟合周期性模式

s(t) = Σ[aₙ·cos(2πnt/P) + bₙ·sin(2πnt/P)]
其中P是周期(年周期为365.25,周周期为7)

3. 节假日效应

通过为每个节假日指定一个时间窗口,模型在该窗口内添加额外的参数来捕捉节假日影响。

三、Prophet使用方法

安装Prophet

# Python安装(需要先安装pystan)
pip install prophet
# R安装
install.packages("prophet")

Python基本使用示例

import pandas as pd
from prophet import Prophet

1. 准备数据

# 数据需要包含两列:ds (日期) 和 y (值)
df = pd.read_csv('example_data.csv')  # 或创建DataFrame
df['ds'] = pd.to_datetime(df['ds'])

2. 创建并拟合模型

model = Prophet(growth='linear',  # 趋势类型 ('linear' 或 'logistic')seasonality_mode='additive',  # 季节性模式 ('additive' 或 'multiplicative')yearly_seasonality=True,  # 是否拟合年季节性weekly_seasonality=True,  # 是否拟合周季节性daily_seasonality=False,  # 是否拟合日季节性changepoint_prior_scale=0.05,  # 趋势灵活度seasonality_prior_scale=10.0,  # 季节性强度holidays_prior_scale=10.0,  # 节假日强度
)
### 添加自定义节假日(可选)
holidays = pd.DataFrame({'holiday': 'spring_festival','ds': pd.to_datetime(['2020-01-25', '2021-02-12', '2022-02-01']),'lower_window': -7,'upper_window': 7,
})
model.add_country_holidays(country_name='CN')  # 添加中国节假日
model.add_holidays(holidays)  # 添加自定义节假日
### 拟合模型
model.fit(df)

3. 创建预测数据框

future = model.make_future_dataframe(periods=365)  # 预测未来365天

4. 生成预测

forecast = model.predict(future)

5. 可视化结果

fig1 = model.plot(forecast)  # 预测图
fig2 = model.plot_components(forecast)  # 分解图

四、关键参数说明

growth

growth: 趋势类型

linear

‘linear’: 线性趋势(默认)

logistic

‘logistic’: 逻辑增长趋势(需指定cap和floor列)

seasonality_mode

seasonality_mode: 季节性模式

additive

‘additive’: 加法模型(默认)

multiplicative

‘multiplicative’: 乘法模型

changepoint_prior_scale

changepoint_prior_scale: 控制趋势灵活度

值越大,趋势越灵活(可能过拟合)

值越小,趋势越刚性(可能欠拟合)

seasonality_prior_scale

seasonality_prior_scale: 控制季节性强度

值越大,季节性效应越强

holidays_prior_scale

holidays_prior_scale: 控制节假日效应强度

五、高级功能

自定义季节性

model.add_seasonality(name='monthly', period=30.5, fourier_order=5)

调整变点

model = Prophet(changepoints=['2020-01-01', '2021-01-01'])  # 手动指定变点
饱和预测(逻辑增长):df['cap'] = 100  # 上限
df['floor'] = 0  # 下限
future['cap'] = 100
future['floor'] = 0
model = Prophet(growth='logistic')

交叉验证

from prophet.diagnostics import cross_validation
df_cv = cross_validation(model, initial='730 days', period='180 days', horizon='365 days')

性能评估

from prophet.diagnostics import performance_metrics
df_p = performance_metrics(df_cv)

六、实际应用建议

数据准备

  1. 确保日期列格式正确
  2. 处理缺失值和异常值
  3. 对于逻辑增长模型,明确指定上限和下限

模型调优

  1. 通过交叉验证选择最佳参数
  2. 尝试不同的季节性模式
  3. 添加领域特定的节假日和事件

结果解释

  1. 使用plot_components理解趋势和季节性
  2. 检查预测的不确定性区间

局限性

  1. 不适用于高频率数据(如秒级、分钟级)
  2. 对长期预测(远超出历史数据范围)可能不准确
  3. 对突变型时间序列(如加密货币价格)效果有限

七、与其他工具的对比

特性 Prophet ARIMA LSTM
易用性 高 中 低
自动化程度 高 低 中
处理季节性 优秀 中等 优秀
解释性 高 中 低
训练速度 快 中等 慢
数据需求 少 中等 多
趋势变化处理 优秀 差 优秀

Prophet特别适合业务场景中时间序列预测,尤其是那些具有明显季节性且需要快速部署的场景。对于更复杂的时间序列或需要更高精度的预测,可能需要考虑更高级的模型如深度学习时间序列模型


相关文章:

深度学习篇---Prophet时间序列预测工具

文章目录 前言一、什么是Prophet?易用性自动化灵活性鲁棒性快速拟合 二、Prophet的核心原理1. 趋势模型a. 分段线性模型(默认)b. 逻辑增长模型 2. 季节性模型3. 节假日效应 三、Prophet使用方法安装ProphetPython基本使用示例1. 准备数据2. 创…...

TDengine JAVA 语言连接器

简介 本节简介 TDengine 最重要且使用最多的连接器, 本节内容是以教科书式方式列出对外提供的接口及功能及使用过程中要注意的技术细节,大家可以收藏起来做为今后开发 TDengine 的参考资料。 taos-jdbcdriver 是 TDengine 的官方 Java 语言连接器,Java…...

vue3工程中使用vditor完成markdown渲染并防止xss攻击

vue3工程中使用vditor完成markdown渲染并防止xss攻击 背景环境解决方案引入依赖 组件封装实现效果 背景 做oj系统时,题目使用的时markdown语法字符串,前端查看时需要将markdown转html再渲染到页面上。 环境 vitevue3pnpm 解决方案 引入依赖 pnpm install vdit…...

Java面向对象编程详解

面向对象编程是Java的核心特性之一,它通过类和对象的概念来解决实际问题,使程序设计更加符合人类对事物的认知方式。本文将深入探讨Java中的面向对象编程概念和特性。 1. 面向对象的基本概念 1.1 什么是面向对象? 面向对象程序设计(Object …...

重温java 系列一 Java基础

文件拷贝的5种方式 传统字节拷贝 public static void main(String[] args) throws IOExecption{try(InputStream is new FileInputStream("source.txt");OutputStream os new FileOutputStream("target.txt")){byte[] buffer new byte[1024];int leng…...

Java基础 4.7

1.成员方法传参机制 引用数据类型的传参机制 引用类型传递的是地址(其实也是值,只不过值是地址),可以通过形参影响实参! public class MethodParameter01 {public static void main(String[] args) {int[] arr {1,…...

基础IO(一)之回顾C语言文件接口

文章目录 共识原理回顾C文件接口打开文件的方式以w的方式打开文件以a的方式打开文件 stdin & stdout & stderr 共识原理 1.文件内容属性 就算内容是空的,也会有属性,内容和属性(两者都是数据)都要在磁盘当中保存 2.文件分为 打开的文件 和 没…...

PandaAI:一个基于AI的对话式数据分析工具

PandaAI 是一个基于 Python 开发的自然语言处理和数据分析工具,支持问答式(ChatGPT)的数据分析和报告生成功能。PandaAI 提供了一个开源的框架,主要核心组件包含用于数据处理的数据准备层(Pandas)以及实现 …...

Rollup详解

Rollup 是一个 JavaScript 模块打包工具,专注于 ES 模块的打包,常用于打包 JavaScript 库。下面从它的工作原理、特点、使用场景、配置和与其他打包工具对比等方面进行详细讲解。 一、 工作原理 Rollup 的核心工作是分析代码中的 import 和 export 语句…...

【NLP 56、实践 ⑬ LoRA完成NER任务】

目录 一、数据文件 二、模型配置文件 config.py 三、数据加载文件 loader.py 1.导入文件和类的定义 2.初始化 3.数据加载方法 代码运行流程 4.文本编码 / 解码方法    ① encode_sentence(): ② decode(): 代码运行流程 ③ padding(): 代码…...

Unity ViewportConstraint

一、组件功能概述 ViewportConstraint是一个基于世界坐标的UI边界约束组件,主要功能包括: 将UI元素限制在父容器范围内支持自定义内边距(padding)可独立控制水平和垂直方向的约束 二、实现原理 1. 边界计算(世界坐…...

项目实战--路由权限

封装 单独抽象成组件,写一个新的关于路由的NewsRouter.jsx: import SideMenu from "../../components/sandbox/SideMenu"; import TopHeader from "../../components/sandbox/TopHeader"; import { Routes, Route } from "re…...

Async 注解原理分析

Async 注解由 Spring 框架提供,被该注解标注的类或方法会在 异步线程 中执行。这意味着当方法被调用时,调用者将不会等待该方法执行完成,而是可以继续执行后续的代码。 Async 注解的使用非常简单,需要两个步骤: 在启…...

pyTorch-迁移学习-图片数据增强-四种天气图片的多分类问题

目录 1.导包 2.加载数据、拼接训练与测试数据的文件夹路径 3数据预处理 3.1数据增强 3.2用分类存储的图片数据创建dataloader 4.加载预训练好的模型 (迁移学习) 4.1固定、修改预训练好的模型 5.将模型拷到GPU上 6.定义优化器与损失函数 7.学习率衰减 8.定义训…...

Linux脚本基础详解

一、基础知识 Linux 脚本主要是指在 Linux 系统中编写的用于自动化执行任务的脚本程序,其中最常用的便是 Bash 脚本。下面我们将从语法、使用方法和示例三个方面详细讲解 Linux 脚本。 1. 脚本简介 定义:Linux 脚本是一系列命令的集合,可以…...

MQTT-Dashboard-数据集成-WebHook、日志管理

常用的 Docker Volume 命令及其用法。 1、创建数据卷 使用 docker volume create 命令可以创建一个新的数据卷。例如,创建一个名为 my_volume 的数据卷: docker volume create my_volume 2、列出数据卷 使用 docker volume ls 命令可以列出所有的数据卷…...

Elixir语言的移动应用安全

Elixir语言的移动应用安全解析 引言 在当今的数字化时代,移动应用已经成为我们日常生活中不可或缺的一部分。从购物、社交到在线银行,几乎每一个生活领域都与移动应用紧密相连。然而,随着应用的普及,安全问题也随之而来。如何确…...

【科学技术部政务服务平台-用户注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

HTTP 教程 : 从 0 到 1 全面指南 教程【全文三万字保姆级详细讲解】

目录 HTTP 的请求-响应 HTTP 方法 HTTP 状态码 HTTP 版本 安全性 HTTP/HTTPS 简介 HTTP HTTPS HTTP 工作原理 HTTPS 作用 HTTP 与 HTTPS 区别 HTTP 消息结构 客户端请求消息 服务器响应消息 实例 HTTP 请求方法 各个版本定义的请求方法 HTTP/1.0 HTTP/1.1 …...

【LeetCode 热题100】139:单词拆分(动态规划全解析+细节陷阱)(Go语言版)

🚀 LeetCode 热题 139:单词拆分(Word Break)| 动态规划全解析细节陷阱 📌 题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请判断 s 是否可以由字典中出现的单词拼接成。 说明:不要求字典…...

2025年招投标行业的深度变革:洞察趋势,把握未来

2025年,随着政府工作报告对招投标行业的一系列改革措施的提出,整个行业正面临一场前所未有的深度变革。这些政策旨在推动全国统一大市场的建设、加速数字化转型、促进绿色低碳发展,并强化风险防控。在这场变革中,企业不仅要适应新…...

树莓派学习专题<3>:使能VNC远程桌面与VNC文件传输

树莓派学习专题<3>:使能VNC远程桌面与VNC文件传输 1. 配置VNC2. 使用VNC viewer连接到树莓派3. 使用VNC viewer传输文件 1. 配置VNC 在终端或SSH中,使用如下命令打开树莓派系统配置项: sudo su raspi-config以上两项…...

AI烘焙大赛中的算法:理解PPO、GRPO与DPO最简单的方式

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...

qt自定义信号槽需要注意的事项

在 Qt 中,自定义信号和槽是与事件和对象交互的核心机制之一。创建自定义信号和槽时,有几个重要事项需要注意,以确保它们能够正确工作。以下是一些需要注意的关键点: 1. 信号和槽的声明 信号声明:信号应该在 signals …...

OpenCV--图像轮廓检测

在图像处理与计算机视觉领域,轮廓检测是一项极为关键的技术。轮廓作为物体边界的重要表征,承载了图像中物体的形状、尺寸和位置等关键信息。通过轮廓检测,我们能够提取出图像中物体的轮廓,为后续的物体识别、图像分割、形状分析等…...

从搜索丝滑过渡到动态规划的学习指南

搜索&动态规划 前言砝码称重满分代码及思路solution 1(动态规划)solution 2(BFS) 跳跃满分代码及思路solution 1(动态规划)solution 2 (BFS) 积木画满分代码及思路动态规划思路讲解solution 前言 本文主要是通过一些竞赛真题…...

通用文字识别技术的出现,深刻改变信息的处理方式

在数字化浪潮席卷全球的今天,文字作为人类文明最基础的载体,正经历着一场前所未有的技术革命。通用文字识别(OCR,Optical Character Recognition)技术已经从简单的"图片转文字"工具,进化为能够理…...

linux 下du 和 ls-alh 的区别

我一直以为du -m 可以显示文件大小。发现不对。正确的做法你是用ls -alh 来使用...

【k8s学习之CSI】理解 LVM 存储概念和相关操作

鸟哥的 Linux 私房菜 – Quota, Software RAID, LVM, iSCSI 0 | 理解 vg 相关概念 在 Linux LVM(逻辑卷管理) 中,以下是 partition(分区)、PV(物理卷)、VG(卷组)、LV&am…...

【分享开发笔记,赚取电动螺丝刀】使用STM32F103的hal库,采用PWM+DMA发送方式驱动WS2812的RGB彩灯

简单和大家介绍一下本文章的主要内容:使用STM32F103C8最小系统板,使用STM32 cubeMX 6.14版本生成底层的驱动库、结合定时器的PWM 输出功能、使用DMA发送数据的 方式,驱动WS2812 的RGB三色灯。 本次小的DIY所需的物料:stm32f103c8…...

CubeMX配置STM32VET6实现网口通信(无操作系统版-附源码)

下面是使用CubeMX配置STM32F407VET6,实现以太网通讯(PHY芯片为LAN8720)的具体步骤总结: 一、硬件连接方式: 硬件原理图: 使用外部晶振为PHY芯片提供时钟。 STM32F407VET6 与 LAN8720 采用 RMII 模式连接。…...

一种反激式开关电源设计流程

引:随着生产和技术的发展,对环保和能源的要求也越来越高,开关电源的应用也越来越广泛,开关电源电路结构种类繁多,包括单端转换器和双端转换器。本文介绍一种利用反激式变换电路实现5V开关电源的设计方法,以…...

数据结构实验3.2:链栈的基本操作与括号匹配问题

文章目录 一,问题描述二,基本要求三,算法分析(一)链栈的存储结构设计(二)链栈基本操作的时间复杂度分析(三)括号匹配算法分析 四,示例代码五,实验…...

一周学会Pandas2 Python数据处理与分析-NumPy算术运算和统计计算

锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 算术运算 数组的灵魂就在于可以进行批量的运算而不是要在循环里面进行元素的运算: 示例: …...

2011年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2011年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

科普:GBDT与XGBoost比较

本文不去讲GBDT与XGBoost算法的原理及算法本身,而是从应用者的角度,对二者比较,以便选择。 XGBoost是GBDT的“工程化增强版”,在保持Boosting核心思想的同时,通过数学优化(二阶导数、正则化)和工…...

大数据技术之 Scala(5)

以下是今天学习的知识点与代码测试: 一、不可变数组与可变数组的转换 说明 arr1.toBuffer //不可变数组转可变数组arr2.toArray //可变数组转不可变数组 arr2.toArray 返回结果才是一个不可变数组,arr2 本身没有变化arr1.toBuffer 返回结果才是一个可变…...

int 与 Integer 的区别详解

1. 本质区别 特性intInteger类型基本数据类型(Primitive)包装类(Wrapper Class)存储位置栈(或作为对象成员在堆中)堆(对象实例)默认值0null(可能导致 NullPointerExcept…...

初阶数据结构(3)顺序表

Hello~,欢迎大家来到我的博客进行学习! 目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现初始化尾插头插尾删头删查找指定位置之前插入数据删除指定位置的数据销毁 1.线性表 首先我们需要知道的是,…...

智能DNS解析:解决高防IP地区访问异常的实战指南

摘要:针对高防IP在部分地区无法访问的问题,本文设计基于智能DNS的流量调度方案,提供GeoDNS配置与故障切换代码示例。 一、问题背景 运营商误拦截或线路波动可能导致高防IP在福建、江苏等地访问异常。传统切换方案成本高,智能DNS可…...

瑞芯微RK3568嵌入式AI项目实战:项目方向(三)

基于RK3568的成熟开源项目和实战资源丰富,以下是针对小白的精选推荐及学习路径规划,结合多个开源项目和详细教程,帮助快速入门嵌入式开发: 一、OpenHarmony智能设备开发 1. 凌蒙派-RK3568开发板项目 项目特点:支持Op…...

go游戏后端开发26:红中麻将发牌逻辑

首先,麻将游戏创建房间的逻辑与之前我们做过的“赢三张”创建房间的逻辑是一致的,整体上没有问题。不同之处在于,我们在创建房间时会根据游戏类型来创建对应的“game”,即创建的是麻将的“game”。大家之前写过相关代码&#xff0…...

DataFrame的遍历、排序、去重与分组

一.遍历 1.1 series遍历 import pandas as pds pd.Series([a,b,c,d,e,f],index[1,2,3,4,5,6])for i in s:print(i) a b c d e f 可见,遍历series会直接拿到其中的值 1.2 DataFrame遍历 1.2.1 直接遍历 import pandas as pd data {name: [Alice, Bob, Charlie]…...

QEMU源码全解析 —— 块设备虚拟化(17)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(16) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 《KVM实战 —— 原理、进阶与性能调优》—— 任永杰 程舟,机械工业出版社...

Java 中使用 File 类创建文件

文章目录 Java 中的 File 类一、文件(File)定义 二、File 类的介绍1 创建文件对象的相关构造器2 createNewFile() 的作用3 获取文件相关信息的常用方法4 目录的操作和文件的删除 Java 中的 File 类 在 Java 中,文件和文件流是处理数据输入/输…...

PowerBI-按钮过滤筛选-宜宾五粮液股份有限公司财务分析

下面为Powerbi制作的财务主题数据分析模版,以可视化的效果展示了某股份有限公司的财务关键指标数据,如营业收入、净利润、毛利率和净利率等。以瀑布图的方式展示了利润表项目金额情况,以树图方式展示了企业资产负债数据。另外图表可以进行筛选…...

【PyQt5】QSS样式表如何使用

在 PyQt5 中,使用 QSS(Qt Style Sheets)来为窗口中的各个控件添加样式是非常方便的,类似于 HTML 中的 CSS。你可以通过 QWidget.setStyleSheet() 方法应用 QSS 样式,或者通过 .qss 文件来设置样式。 基本步骤&#xf…...

数据结构:用生活中的例子解释 AOE 网中活动的最早和最迟开始时间的含义和计算方法

生活实例:装修房子中的活动安排 假设你要装修一套房子,主要流程如下: 拆旧(活动 A,3 天) → 拆旧完成(事件 X)水电改造(活动 B,4 天) → 水电完…...

第二篇:系统分析师——7-11章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中,训练快速阅读能力、掌…...

二十七- Scala

抽象属性和方法 1. 基本语法: 定义抽象类:abstract class Person{} //通过 abstract 关键字标记抽象类 定义抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性 定义抽象方法:def hello():String //…...