使用skforecast进行时间序列预测

news2024/11/29 12:41:28

时间序列预测是数据科学和商业分析中基于历史数据预测未来价值的一项重要技术。它有着广泛的应用,从需求规划、销售预测到计量经济分析。由于Python的多功能性和专业库的可用性,它已经成为一种流行的预测编程语言。其中一个为时间序列预测任务量身定制的库是skforecast。

在本文中,将介绍skforecast并演示了如何使用它在时间序列数据上生成预测。skforecast库的一个有价值的特性是它能够使用没有日期时间索引的数据进行训练和预测。

数据集

我在本文中使用的数据集来自Kaggle,它通过加速度计数据提供了一个全面的窗口来了解各种体育活动。我们这里只提取了其中一个参与者的代表步行活动的加速信号。

数据集见这里:https://avoid.overfit.cn/post/de4e26b02fb74fb58c65ac2f86dce87c

超参数调优和滞后选择

第一步:将时间序列信号分为训练集、验证集和测试集。

 end_train = 2500
 end_val = 2750
 
 data_train = acc_x_walking[:end_train]
 data_val = acc_x_walking[end_train:end_val]
 data_test = acc_x_walking[end_val:]

Skforecast采用了类似于Sickit-Learn的结构,这是一个很多人都熟悉的框架。所以对五个模型进行超参数调优和选择滞后是一个简单的过程。

RandomForestRegressor、GradientBoostingRegressor、Ridge、LGBMRegressor和XGBRegressor都可以用于预测连续数值的回归模型。所以我们可以确定每个模型的最佳参数,使均方误差最小化。然后这些改进的参数将被整合到模型中来预测步行活动。

滞后决定了过去的滞后值(时间步长)的最大数量,这些滞后值将被用作预测未来的特征。它表示有多少过去的观测将被视为预测下一个观测的输入特征。

步长指定进入未来进行预测的步数。它表示预测范围或模型应该预测的时间步数。

 # Models to compare
 models = [RandomForestRegressor(random_state=42), 
           GradientBoostingRegressor(random_state=42),
           Ridge(random_state=42),
           LGBMRegressor(random_state=42),
           XGBRegressor(random_state=42)]
 
 # Hyperparameter to search for each model
 param_grids = {'RandomForestRegressor': {'n_estimators': [10, 50, 100], 'max_depth': [5, 15, 30, 45, 60]},
                'GradientBoostingRegressor': {'n_estimators': [10, 50, 100], 'max_depth': [5, 15, 30, 45, 60]},
                'Ridge': {'alpha': [0.01, 0.1, 1]},
                'LGBMRegressor': {'n_estimators': [10, 50, 100], 'max_depth': [5, 15, 30, 45, 60]},
                'XGBRegressor': {'n_estimators': [10, 50, 100], 'max_depth': [5, 15, 30, 45, 60]}}
 
 # Lags used as predictors
 lags_grid = [2, 5, 7]
 
 df_results = pd.DataFrame()
 for i, model in enumerate(models):
 
     print(f"Grid search for regressor: {model}")
     print(f"-------------------------")
 
     forecaster = ForecasterAutoreg(
                      regressor = model,
                      lags      = 2
                  )
 
     # Regressor hyperparameters
     param_grid = param_grids[list(param_grids)[i]]
 
     results = grid_search_forecaster(
                   forecaster         = forecaster,
                   y                  = data_train,
                   param_grid         = param_grid,
                   lags_grid          = lags_grid,
                   steps              = 250,
                   refit              = False,
                   metric             = 'mean_squared_error',
                   initial_train_size = 50,
                   fixed_train_size   = True,
                   return_best        = False,
                   n_jobs             = 'auto',
                   verbose            = False,
                   show_progress      = True
               )
     
     # Create a column with model name
     results['model'] = list(param_grids)[i]
     
     df_results = pd.concat([df_results, results])
 
 df_results = df_results.sort_values(by='mean_squared_error')
 df_results.head(10)

超参数调整过程的结果是一个DF,表示所使用的模型及其各自的均方误差和各种参数,如下所示。

通过超参数整定,得到的模型最优参数为:

GradientBoostingRegressor

  • max_depth=30
  • n_estimators=10
  • lags = 2

Ridge

  • alpha=1
  • lags = 2

RandomForestRegressor

  • max_depth=5
  • n_estimators=100
  • lags = 7

LGBMRegressor

  • max_depth=15
  • n_estimators=10
  • lags = 5

XGBRegressor

  • max_depth=5
  • n_estimators=10
  • lags = 2

预测

我们现在知道了应用于模型的最佳参数,可以开始训练了。将数据分成训练集和测试集。我们在上面分成验证机和测试集的原因是,测试集没有参与超参数调优过程的,所提它对于模型仍然是完全未知的。

 # Split train-test
 step_size = 250
 data_train = acc_x_walking[:-step_size]
 data_test = acc_x_walking[-step_size:]

下一步是创建和拟合预测模型。

 # Create and fit forecaster
 # GradientBoostingRegressor
 gb_forecaster = ForecasterAutoreg(
                  regressor = GradientBoostingRegressor(random_state=42, max_depth=30, n_estimators=10),
                  lags      = 2
              )
 
 # Ridge
 r_forecaster = ForecasterAutoreg(
                  regressor = Ridge(random_state=42, alpha=1),
                  lags      = 2
              )
 
 # RandomForestRegressor
 rf_forecaster = ForecasterAutoreg(
                  regressor = RandomForestRegressor(random_state=42, max_depth=5, n_estimators=100),
                  lags      = 7
              )
 
 # LGBMRegressor
 lgbm_forecaster = ForecasterAutoreg(
                  regressor       = LGBMRegressor(random_state=42, max_depth=15, n_estimators=10),
                  lags            = 5,
              )
 
 # XGBRegressor
 xgb_forecaster = ForecasterAutoreg(
                  regressor       = XGBRegressor(random_state=42, max_depth=5, n_estimators=10),
                  lags            = 2,
              )
 
 # Fit
 gb_forecaster.fit(y=data_train)
 r_forecaster.fit(y=data_train)
 rf_forecaster.fit(y=data_train)
 lgbm_forecaster.fit(y=data_train)
 xgb_forecaster.fit(y=data_train)
 
 # Predict
 gb_predictions = gb_forecaster.predict(steps=step_size)
 r_predictions = r_forecaster.predict(steps=step_size)
 rf_predictions = rf_forecaster.predict(steps=step_size)
 lgbm_predictions = lgbm_forecaster.predict(steps=step_size)
 xgb_predictions = xgb_forecaster.predict(steps=step_size)

下图展示了五种模型的预测结果很明显,除梯度增强外,所有模型都产生了平线的预测。这里的原因有很多,比如说对于其他几个模型,因为我们是介绍skforecast,所以没有设置全部的超参数,导致可能还没有拟合,这个可以再进行调整。

结论

skforecast是在Python中掌握时间序列预测的一个非常好的选择。它简单易用,是根据历史数据预测未来价值的好工具。

在本文的整个探索过程中,使用skforecast的特征来调整超参数,并为基本回归模型(如RandomForestRegressor, GradientBoostingRegressor, Ridge, LGBMRegressor和XGBRegressor)选择滞后。

skforecast的一个显著优势是用户友好的文档,它清楚地解释了模型的功能和参数。如果您正在寻找一种轻松有效的方法来探索时间序列预测,skforecast是一个非常好的选择。

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

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

相关文章

【数据库】执行计划中二元操作对一趟扫描算法的应用,理解代价评估的应用和优化,除了磁盘代价还有CPU计算代价不容忽略

二元操作的一趟算法 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定…

makefile项目构建

makefile项目构建 OVERVIEW makefile项目构建1.概念2.make选项3.makefile语法(1)基本语法(2)系统与自定变量(3)常用函数(4)模式匹配与伪目标 4.makefile编译流程(1&#…

机器学习---贝叶斯网络与朴素贝叶斯

1. 贝叶斯法则 如何判定一个人是好人还是坏人? 当你无法准确的熟悉一个事物的本质时,你可以依靠与事物特定本质相关的事件出现的次数来判断 其本质属性的概率。如果你看到一个人总是做一些好事,那这个人就越可能是一个好人。 数学语言表达…

C# APS.NET CORE 6.0 WEB API IIS部署

1.创建 APS.NET CORE6.0 WEB API项目 默认选项即可 源代码: 项目文件展开: launchSettings.json {"$schema": "https://json.schemastore.org/launchsettings.json","iisSettings": {"windowsAuthentication"…

记录华为云服务器(Linux 可视化 宝塔面板)-- Nginx篇

文章目录 配置Nginx服务器1、添加CentOS 7系统的Nginx yum资源库2、安装Nignx服务 设置Nginx安全级别(感觉可以先不设置)步骤一步骤二如有启发,可点赞收藏哟~ 配置Nginx服务器 1、添加CentOS 7系统的Nginx yum资源库 先安装rpm apt instal…

Linux 中的 ls 命令使用教程

目录 前言 如何运用 ls 命令 1、列出带有所有权的文件和目录 2、获取以人类可读的方式显示的信息 3、列出隐藏文件 4、递归列出文件 5、在使用 ls 时对文件和目录做区分 6、列出指定扩展名的文件 7、基于大小对输出内容排序 8、根据日期和时间排序文件 让我们来总结…

Nginx:配置文件详解

一、Nginx配置文件 main配置段:全局配置 events段:定义event工作模式 http {}:定义http协议配置 支持使用变量: 内置变量:模块会提供内建变脸定义 自定义变量:set var_name value 二、 主…

动态规划学习——斐波那契数列

目录 最长的斐波那契数列子序列的长度 1.题目 2.题目接口 3.解题思路及其代码 最长的斐波那契数列子序列的长度 1.题目 如果序列x_1&#xff0c;X_2&#xff0c;...&#xff0c;x_n 满足下列条件&#xff0c;就说它是斐波那契式的: 1.n > 3 2.对于所有i2 <n&a…

中间件介绍

一、中间件介绍 官方的说法&#xff1a;中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统&#xff0c;用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。 但是由于其影响的是全局&#xff0c;所以需…

HashMap的实现原;HashMap的工作原理;HashMap存储结构; HashMap 构造函数

文章目录 说一下HashMap的实现原理(非常重要)①HashMap的工作原理HashMap存储结构常用的变量HashMap 构造函数tableSizeFor() put()方法详解hash()计算原理resize() 扩容机制get()方法为什么HashMap链表会形成死循环 HashMap是我们在工作中使用到存储数据特别频繁的数据结构&am…

韵达快递查询,韵达快递单号查询,一键筛选出单号中的退回件

批量查询韵达快递单号的物流信息&#xff0c;并将其中的退回件一键筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 韵达快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#xff…

短期的规划

大方向&#xff1a; 学习编程的前期 大二上学期&#xff1a; 前期追求知识点的广度&#xff1a; 对各类数据结构的了解 熟悉数据库的各类操作&#xff0c;JDBC熟练使用 与此同时&#xff0c;提高写作能力&#xff0c;学习沉淀&#xff0c;提高技术影响力 大二的寒假&…

Java中的异常语法知识居然这么好玩!后悔没有早点学习

学习异常后&#xff0c;发现异常的知识是多么的吸引人&#xff01;不仅可以用来标记错误&#xff0c;还可以自己定义一个异常&#xff0c;用来实现自己想完成的业务逻辑&#xff0c;接下来一起去学习吧 目录 一、异常的概念及体系结构 1.异常的概念 2.异常的体系结构 3.异常…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《前景导向的主动配电网智能储能软开关规划方法》

这个标题涉及到电力系统中的主动配电网&#xff08;Active Distribution Network&#xff09;以及与之相关的智能储能软开关的规划方法。下面是对标题中各个关键词的解释&#xff1a; 前景导向的&#xff08;Future-oriented&#xff09;&#xff1a; 这表明该方法是以未来发展…

2022年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2022 年全国硕士研究生入学统一考试管理类专业学位联考数学试题一、问题求解&#xff1a;第 1∼15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分。下列每题给出的 A、B、C、D、E 五个选项中&#xff0c;只有一项是符合试题要求的&#xff0c;请在答&#xff0e;题…

strlen和sizeof练习题(以64位机器为例)

例一 一般情况下&#xff0c;数组名表示首元素地址&#xff0c;只有在以下的情况中数组名表示整个数组的地址&#xff1a; 1.sizeof&#xff08;数组名&#xff09;&#xff1a;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小 2.&数组名&#xff1a;这里的…

五种多目标优化算法(MOPSO、MOAHA、NSGA2、NSGA3、MOGWO)求解微电网多目标优化调度(MATLAB)

一、多目标优化算法简介 &#xff08;1&#xff09;多目标粒子群优化算法MOPSO 多目标应用&#xff1a;基于多目标粒子群优化算法MOPSO求解微电网多目标优化调度&#xff08;MATLAB代码&#xff09;-CSDN博客 &#xff08;2&#xff09;多目标人工蜂鸟算法&#xff08;MOAHA…

C语言进阶之笔试题详解(1)

引言&#xff1a; 对指针知识进行简单的回顾&#xff0c;然后再完成笔试题。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言&#xff1a; 知识简单回顾 指针是什么 指针变…

分布式篇---第七篇

系列文章目录 文章目录 系列文章目录前言一、如何将长链接转换成短链接,并发送短信?二、长链接和短链接如何互相转换?三、长链接和短链接的对应关系如何存储?四、如何提高系统的并发能力?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一…

航天宏图——宏图1号样例数据0.5米-5米分辨率(上海部分)

简介&#xff1a; 作为航天宏图“女娲星座”建设计划的首发卫星&#xff0c;航天宏图-1号可获取0.5米-5米的分辨率影像&#xff0c;具备高精度地形测绘、高精度形变检测、高分辨率宽幅成像以及三维立体成像等能力&#xff0c;在自然资源、应急管理、水利等行业与领域具有极高的…