8 时间序列相关工具介绍

news2024/12/26 2:23:31

1 背景        

发现最近做的任务都是有关于时间序列任务的,做的方法全部偏向于如何对数据进行清洗、提取周期特征然后构造相关特征,这些工作都是比较偏向于传统时间序列模型的方案。

        现在深度学习这个火,比如循环神经网络分支:LSTM、GRU、Self_attention分支:Transformer、InFormer、AutoInformer等等。但是这些网络不好构建,如何使用需要门槛。那么今日我为大家推荐一个方法:NeuralForecast, 这个方法我测试了一下挺不错,我们看看包含什么模型:下面只是展示了部分,这些都是近期的SOTA,那么如何使用呢,让我们一起看看。

2 案例

完整代码在下面呢!

Quickstart - Nixtla

我直接拿别人的数据进行测试吧,国内什么时候能达到这样的水平呢,加油,同胞们!

Forecasting Models - Nixtla

我的环境:Python 3.10.0

matplotlib                3.9.2

neuralforecast            1.7.5

optuna                    4.0.0

numpy                     1.26.2

pandas                    2.2.3

scikit-learn              1.5.2

torch                     2.2.2

2.1 单变量TS

uniuqe_id:  可能是一个机场唯一的标识。

ds: 就是日期了

y: 单变量预测

数据类型:
---  ------     --------------  -----         
 0   unique_id  144 non-null    float64       
 1   ds         144 non-null    datetime64[ns]
 2   y          144 non-null    float32       

horizon = 12 : 这个就是我们需要预测的一个窗口(未来多少天的);

先把药使用的模型统统放在一个list中,然后通过NeuralForecast调用。

models
  • 类型: 列表
  • 描述: 包含一个或多个模型实例的列表。每个模型实例可以是 PatchTSTNBEATSNHITS 等。
freq
  • 类型: 字符串
  • 描述: 时间序列的频率,例如 'D' 表示每天,'H' 表示每小时。
from neuralforecast import NeuralForecast
from neuralforecast.models import LSTM, NHITS, RNN
horizon = 12

# Try different hyperparmeters to improve accuracy.
models = [LSTM(h=horizon,                    # Forecast horizon
               max_steps=500,                # Number of steps to train
               scaler_type='standard',       # Type of scaler to normalize data
               encoder_hidden_size=64,       # Defines the size of the hidden state of the LSTM
               decoder_hidden_size=64,),     # Defines the number of hidden units of each layer of the MLP decoder
          NHITS(h=horizon,                   # Forecast horizon
                input_size=2 * horizon,      # Length of input sequence
                max_steps=100,               # Number of steps to train
                n_freq_downsample=[2, 1, 1]) # Downsampling factors for each stack output
          ]
nf = NeuralForecast(models=models, freq='M')
nf.fit(df=Y_df)

 从下面的图可以看出,可以预测到数据趋势。

开箱子即用很方便的,气质单变量预测的场景非常少,那么多变量预测呢?

2.2 多变量TS

看到这里说明你还是很感兴趣的,那么继续介绍!先声明三个名词:

静态外生变量:往往是一些标识符,未来的数据可见

静态外生变量携带每个时间序列的时间不变信息。当模型使用全局参数来预测多个时间序列时,这些变量允许在具有相似静态变量水平的时间序列组内共享信息。静态变量的例子包括标识符,如地区标识符、产品组标识符等。

历史外生变量:未来的数据不可见

这种时间依赖的外生变量仅限于过去的观测值。

未来外生变量:未来的数据可见

与历史外生变量不同,未来外生变量在预测时是可用的。例子包括日历变量、天气预报和已知事件,这些事件可能会导致大的波动,如计划中的促销活动。

我们引入的数据往往是未来不可见的。

unique_id: 唯一标识符,未来可见。
ds :时间
gen_forecast:未来不可见的
system_load:未来不可见的
week_day: 未来可见的
---  ------        --------------  -----         
 0   unique_id     32160 non-null  object        
 1   ds            32160 non-null  datetime64[ns]
 2   y             32160 non-null  float64       
 3   gen_forecast  32160 non-null  float64       
 4   system_load   32160 non-null  float64       
 5   week_day      32160 non-null  int64         

数据包含两个标识符:一个是FR,那么我们看看数据什么样子:有趋势但是数据存在异常情况;

我们需要预测未来24个小时的数据,所以horizon = 24, 定义了两个模型,我注释了一个,那么看看:

futr_exog_list = ['gen_forecast', 'week_day'], 未来可见的数据,只不过特征gen_forecast是模型生成的# <- Future exogenous variables
hist_exog_list = ['system_load'], 这个数据未来不可见
 stat_exog_list = ['market_0', 'market_1'], 不随时间变化的,唯一标识符号

horizon = 24 # day-ahead daily forecast
models = [NHITS(h = horizon,
                input_size = 5*horizon,
                futr_exog_list = ['gen_forecast', 'week_day'], # <- Future exogenous variables
                hist_exog_list = ['system_load'], # <- Historical exogenous variables
                stat_exog_list = ['market_0', 'market_1'], # <- Static exogenous variables
                scaler_type = 'robust'),
          # BiTCN(h = horizon,
          #       input_size = 5*horizon,
          #       futr_exog_list = ['gen_forecast', 'week_day'], # <- Future exogenous variables
          #       hist_exog_list = ['system_load'], # <- Historical exogenous variables
          #       stat_exog_list = ['market_0', 'market_1'], # <- Static exogenous variables
          #       scaler_type = 'robust',
          #       ),                
                ]
nf = NeuralForecast(models=models, freq='H')
nf.fit(df=df,
       static_df=static_df)

其实我有个疑问,为什么数据不用关联,直接在fit方法里面static_df=static_df 指定下就能运行了。

2.3 自己的数据

这是我之前参加厦门空气质量预测的数据,最终获得了一个三等奖。我们看看怎么使用。

这一块其实也没什么,但是我的电脑不大行,必须上服务器,后面有机会我在测试吧,先给个案例。

# 定义回调函数来记录和打印损失
class LossCallback:
    def __init__(self):
        self.train_losses = []
        self.val_losses = []

    def on_epoch_end(self, epoch, logs):
        train_loss = logs.get('loss')
        val_loss = logs.get('val_loss')
        self.train_losses.append(train_loss)
        self.val_losses.append(val_loss)
        print(f"Epoch {epoch + 1}/{logs['epochs']} - Train Loss: {train_loss:.4f}, Val Loss: {val_loss:.4f}")

# 创建回调实例
loss_callback = LossCallback()



horizon = 7*24 # day-ahead daily forecast
models = [NHITS(h = horizon,
                input_size = 1*horizon,
                futr_exog_list = ['month', 'day', 'hour', 'dayofweek', 'dayofyear', 'sin_time','cos_time'], # <- Future exogenous variables
                hist_exog_list = ['so', 'no', 'pm10', 'co', 'o3', 'pm2.5'], # <- Historical exogenous variables
                stat_exog_list = [], # <- Static exogenous variables
                scaler_type = 'robust',
                max_steps=550,
                learning_rate=0.001,
               ),
          # BiTCN(h = horizon,
          #       input_size = 5*horizon,
          #       futr_exog_list = ['gen_forecast', 'week_day'], # <- Future exogenous variables
          #       hist_exog_list = ['system_load'], # <- Historical exogenous variables
          #       stat_exog_list = ['market_0', 'market_1'], # <- Static exogenous variables
          #       scaler_type = 'robust',
          #       ),                
                ]

feats = ['so', 'no', 'pm10', 'co', 'o3', 'pm2.5','month', 'day', 'hour', 'dayofweek', 'dayofyear', 'sin_time',
       'cos_time']
label = 'pm2.5'

nf = NeuralForecast(models=models, freq='H')
history = nf.fit(df=train_df_only[feats+['id','ds']],
       val_size = int(len(train_df_only) * 0.2),
       id_col = 'id',
    time_col = 'ds',
    target_col = label,
       verbose=1,
       #callbacks=[loss_callback]
    )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2181412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Typora 下载安装

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-adAnH 演示环境 操作系统&#xff1a;windows10 产品&#xff1a;typora 版本&#xff1a; 1.9.5 注意&#xff1a;如果需要其他版本可自行下载。 安装步骤 1、解压。 2、双击 "typora-setup-x64.…

基于SpringBoot+Vue的社区智慧消防管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

前端工程规范-3:CSS规范(Stylelint)

样式规范工具&#xff08;StyleLint&#xff09; Stylelint 是一个灵活且强大的工具&#xff0c;适用于保持 CSS 代码的质量和一致性。结合其他工具&#xff08;如 Prettier 和 ESLint&#xff09;&#xff0c;可以更全面地保障前端代码的整洁性和可维护性。 目录 样式规范工具…

国庆出行新伴侣:骨传导耳机分享,开启安全无忧的音乐旅行

随着国庆长假的脚步渐近&#xff0c;许多朋友已经开始规划自己的出游行程。无论是短途旅行还是长途跋涉&#xff0c;一款合适的耳机无疑是旅途中的良伴&#xff0c;特别是在户外活动频繁的假期&#xff0c;骨传导耳机因其独特的优点而成为了众多旅行者的首选。骨传导技术通过振…

心理咨询行业为何要有自己的知识付费小程序平台 心理咨询小程序搭建 集师saas知识付费小程序平台搭建

在快节奏的现代生活中&#xff0c;心理健康问题日益凸显&#xff0c;心理咨询行业迎来了前所未有的发展机遇。然而&#xff0c;传统咨询模式受限于地域、时间等因素&#xff0c;难以满足日益增长的多元化需求。在此背景下&#xff0c;搭建自己的知识付费小程序&#xff0c;成为…

python UNIT 3 选择与循环(2)

目录 1。循环的优化 经典优化分析&#xff1a; 未优化的代码&#xff1a; 细节分析&#xff1a; 优化后的代码&#xff1a; 优化的细节&#xff1a; 性能对比 优化的关键在于&#xff1a; 经典习题讲解&#xff1a;(紫色的解析请重点关注一下) 1。例三 个人代码解析…

Python发送邮件附件全攻略:从设置到发送!

Python发送邮件附件的详细步骤&#xff1f;如何利用Python发信&#xff1f; Python作为一种强大的编程语言&#xff0c;提供了丰富的库来帮助我们自动化这一过程。AokSend将详细介绍如何使用Python发送邮件附件&#xff0c;从基础设置到实际发送&#xff0c;带你一步步掌握这一…

【计算机网络】数据链路层理解

文章目录 一、引言二、MAC地址三、以太网四、交换机五、ARP与RARP1、ARP2、RARP 一、引言 数据链路&#xff0c;有时也指以太网、无线局域网等通信手段。数据链路层的协议定义了通过通信媒介互联的设备之间传输的规定。通信媒介包括双绞线电缆、同轴电缆、光纤、点播以及红外线…

值得去公司(完整榜单)

值得去公司 近日&#xff0c;脉脉出了一份《职得去公司》榜单&#xff1a; 前三名是 TAM&#xff08;老牌巨头百度日常掉队&#xff09;。 大家肯定好奇这个榜单怎么统计出来的。 这上面写的是根据「雇主指数」进行排名&#xff0c;广义的雇主指数包括了多个维度&#xff0c;包…

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三)

作为“贴代码”力推的一个CRUD实践项目PasteTemplate,在对现有的3个项目进行实战后效果非常舒服&#xff01;下面就针对PasteForm为啥我愿称为最佳CRUD做一些回答: 哪里可以下载这个PasteForm的项目案例 目前“贴代码”对外使用PasteForm的项目有"贴Builder(PasteSpide…

Redis: 主从复制读写分离环境搭建

概述 Redis 的单机模式实际上就是在一个服务器上装了一个单节点的Redis通过简单的配置和简单的命令启动起来就可以使用这种搭建环境&#xff0c;不保证高可用的情况下&#xff0c;完全没有问题如果说你的项目必须要具备高可用&#xff0c;而且 Redis 也要提供更高的性能这个单…

java项目实现钉钉异常告警实时监控

最近有个小伙伴问我&#xff0c;我们的项目核心业务的地方总是有异常&#xff0c;虽然有打印日志&#xff0c;但不能立马通知我&#xff1b;所以今天我就教大家如何实现异常报警实时提醒 1.需要有钉钉 自己新建的企业用户 2.建一个群&#xff0c;需要有三人以上&#xff1b;…

yolov8/9/10模型在仪表盘、指针表检测中的应用【代码+数据集+python环境+训练/应用GUI系统】

可视化训练系统 可视化应用系统 yolov8/9/10模型在仪表盘、指针表检测中的应用【代码数据集python环境训练/应用GUI系统】 背景意义 随着科学技术的快速发展&#xff0c;机器视觉以及人工智能等技术逐渐从理论走向实践&#xff0c;并在各个领域得到广泛应用。机器视觉检测系统…

TCP CUBIC 曲线对 BIC 折线的拟合

bic 旨在对 reno 改进&#xff0c;用二分逼近替换线性遍历逼近&#xff0c;时间规模从 O ( W m a x ) O(W_{max}) O(Wmax​) 下降到 O ( ln ⁡ W m a x ) O(\ln {W_{max}}) O(lnWmax​)&#xff0c;这是本质&#xff0c;而 cubic 可以看作对 bic 的 bugfix&#xff0c;解除了…

新书速览|MySQL 9从入门到性能优化:视频教学版

《MySQL 9从入门到性能优化:视频教学版》 本书内容 MySQL是流行的关系数据库管理系统之一&#xff0c;由于其体积小、速度快、总体拥有成本低、开放源码等特点&#xff0c;一般中小型企业甚至大型互联网企业的应用开发都选择MySQL作为数据库。《MySQL 9从入门到性能优化:视频教…

【经验分享】自动化测试框架实战

一、什么是自动化测试框架 在了解什么是自动化测试框架之前&#xff0c;先了解一下什么叫框架&#xff1f;框架是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法;另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应…

「iOS」——KVC

iOS学习 前言KVC模式KVC设值KVC取值KVC使用keyPathKVC处理异常处理不存在的key处理nil异常 KVC处理字典KVC高阶消息传递 总结 前言 对KVC模式的简单学习和总结。 KVC模式 KVC&#xff08;Key-Value Coding&#xff0c;键值编码&#xff09;是一种通过字符串来访问对象属性的机…

详解Linux文件系统

先来研究一下磁盘&#xff1a; LBA 磁头面数 所有磁头是共进退的。 每个扇区的大小假设为&#xff1a;512 磁盘的总容量&#xff1a;盘面*t*s*512 数组的下标范围&#xff1a;盘面*t*s LBA&#xff1a;xxx 假设xxx为LBA地址 xxx/1000h 及为h号盘面 xxx/100c 及c号磁道…

国产化框架PaddleYOLO结合Swanlab进行作物检测

1. 项目介绍 粮食安全&#xff0c;作为人类生存与发展的基石&#xff0c;始终是全球关注的焦点。它不仅仅关乎粮食的充足供应&#xff0c;更涉及粮食的质量安全、营养健康以及可持续生产等多个维度。在全球化、气候变化和资源环境约束日益加剧的背景下&#xff0c;如何确保粮食…

ComfyUI物品移除讲解

实现效果 一、下载插件 comfyui inpaint nodes 提供重绘功能节点&#xff0c;效果比自带的好很多 官方介绍 使用ComfyUI更好地进行修补的节点&#xff1a;用于SDXL&#xff0c;LaMa&#xff0c;MAT和各种其他工具的Foocus修补模型&#xff0c;用于预填充修补和去除区域。 插件…