时间序列预测(三)基于Prophet+XGBoost的销售额预测

news2024/11/29 11:54:42

时间序列预测(三)基于Prophet+XGBoost的销售额预测

前面我们介绍了如何使用ProphetLSTM,不知道你们发现了没有,前者似乎太简单了,后者呢好像又很复杂。那有没有什么很好的方法能很好的中和下呢?

已知的有,Prophet能很好的分解时间趋势,LSTM可以将其他信息加入训练,同样的如果没有时间序列,XGBoost也是可以训练其他信息进行预测的,那如果将Prophet分解的时间趋势也作为特征加入训练呢?是不是就兼顾了时间趋势和额外信息了。本文参考自将梯度提升模型与 Prophet 相结合可以提升时间序列预测的效果。

数据探索

以下数据如果有需要的同学可关注公众号HsuHeinrich,回复【数据挖掘-时间序列01】自动获取~

# 读取数据
raw_data = pd.read_csv('train.csv')
raw_data['datetime'] = raw_data['datetime'].apply(pd.to_datetime)
df_px = raw_data[['datetime', 'count']].copy()
df_px.rename(columns={'datetime': 'ds', 'count': 'y'}, inplace=True)

特征工程

# 切分数据集
num = 24*14 # 将最后2周划分为测试集
train, test = df_px.iloc[:-num,:], df_px.iloc[-num:,:]
# 模型拟合
m = Prophet(
                growth='linear',
                seasonality_mode='additive',
                interval_width=0.95,
                daily_seasonality=True,
                weekly_seasonality=True,
                yearly_seasonality=False
            )
m.fit(train)
<fbprophet.forecaster.Prophet at 0x7ff4e4fec730>
# 训练集提取preheat特征
predictions_train = m.predict(train.drop('y', axis=1))
# 测试集提取preheat特征
predictions_test = m.predict(test.drop('y', axis=1))
# 合并
predictions = pd.concat([predictions_train, predictions_test], axis=0)
# 将prophet的结果作为特征
df = pd.merge(raw_data, predictions, left_on=['datetime'], right_on=['ds'], how='inner')
df.drop('ds', axis=1, inplace=True)
df.set_index('datetime', inplace=True)
# 构造yhat滞后值
for lag in range(1,6):
    df[f'yhat_lag_{lag}'] = df['yhat'].shift(lag)
# 构造XGBR数据集
X = df.drop('count', axis=1)
y = df['count']
# 切分数据集
X_train, X_test = X.iloc[:-num,:], X.iloc[-num:,:]
y_train, y_test = y.iloc[:-num], y.iloc[-num:]

模型拟合

# 模型拟合
model_xgbr = XGBRegressor(random_state=0)  # 建立XGBR对象
model_xgbr.fit(X_train, y_train)
# 预测结果
pre_y = model_xgbr.predict(X_test)
# 评估指标
model_metrics_functions = [explained_variance_score, mean_absolute_error, mean_squared_error,r2_score]  # 回归评估指标对象集
model_metrics_list = [[m(y_test, pre_y) for m in model_metrics_functions]]  # 回归评估指标列表
regresstion_score = pd.DataFrame(model_metrics_list, index=['model_xgbr'],
                   columns=['explained_variance', 'mae', 'mse', 'r2'])  # 建立回归指标的数据框
regresstion_score  # 模型回归指标
explained_variancemaemser2
model_xgbr0.9997061.9845958.7825590.999703

结果展示

# 模型效果可视化
fig = plt.figure(figsize=(16,6))
plt.title('True and XGBR result comparison', fontsize=20)
plt.plot(y_test, color='red')
plt.plot(pd.Series(pre_y, index=y_test.index), color='green')
plt.xlabel('Hour', fontsize=16)
plt.ylabel('Number of Shared Bikes', fontsize=16)
plt.legend(labels=['True', 'Pre_y'], fontsize=16)
plt.grid()
plt.show()

在这里插入图片描述

哇塞,这预测结果有点夸张了。。。

# 输出特征重要性
features = X.columns  # 获取特征名称
importances = model_xgbr.feature_importances_  # 获取特征重要性

# 通过二维表格形式显示
importances_df = pd.DataFrame()
importances_df['features'] = features
importances_df['importance'] = importances
importances_df = importances_df.sort_values('importance', ascending=False)
importances_df.head(10)
featuresimportance
9registered0.939968
8casual0.058634
27yhat0.000115
32yhat_lag_50.000109
29yhat_lag_20.000101
15additive_terms0.000098
28yhat_lag_10.000098
31yhat_lag_40.000091
18daily0.000081
12yhat_upper0.000076

可以看到,除了时间趋势外,其他的一些因素也起到很重要影响

总结

基于ProphetLSTMProphet+XGBoost这三种方法,相信大家在做时间序列预测相关的任务时,应该可以得心应手了~

共勉~

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

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

相关文章

入门黑客(网络安全)需要准备什么?

之所以写这篇文章呢&#xff0c;是觉得大时代的发展&#xff0c;我们这个专业越来越受到重视了&#xff0c;所以&#xff0c;也想以自己的一些拙见&#xff0c;能帮到想入门网络安全的朋友 1.关于网上的培训 如果你想快速获得知识&#xff0c;培训无疑是最快最有效的捷径&…

ANR概述

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、ANR是什么&#xff1f;二、ANR超时阈值三、前后与台区别1.前台与后台服务的区…

核心案例 | 南京理工大学空地协同编队控制系统建设项目

项目名称&#xff1a;空地协同编队控制系统建设项目 场 地&#xff1a;室内/室外 关 键 词&#xff1a;自主导航与SLAM、集群协同决策、集群控制 南京理工大学核心案例(1) 01 项目背景 本项目通过集群四旋翼无人机、天地协同集群控制开发环境、无人机协同集群控制系统…

音频转换成mp3的方法

把音频转换为MP3格式是因为MP3格式可以更好地压缩音频文件&#xff0c;减小文件大小&#xff0c;便于存储和传输。此外&#xff0c;MP3格式已成为流行的音频格式之一&#xff0c;许多设备和软件都支持MP3格式&#xff0c;使得MP3格式成为了一种通用的音频格式。总的来说&#x…

log4Qt史上最详细介绍、编译和使用

文章目录 Log4Qt介绍下载log4qt源码测试例子&#xff08;源码使用&#xff09;将log4qt源码添加到工程测试代码日志配置文件&#xff1a;测试结果 总结log4qt更多请参考&#xff1a; 使用Log4Qt动态库一、创建Qt工程&#xff0c;命名为libLog4Qt二、在项目根目录下新建文件夹3r…

Simulink使能(Enable)、触发(Triggered)模块及其子系统的应用

Simulink中的使能&#xff08;Enable&#xff09;和触发&#xff08;Triggered&#xff09;模块及其子系统可以用于控制模型中的仿真运行时间和采样周期&#xff0c;从而提高模型的仿真效率和精度。 使用使能子系统 创建一个在控制信号为正值时执行的子系统。使用触发子系统 创…

如何系列 如何在Windows和Linux安装Nginx

文章目录 Windows一 下载Nginx二 启动Nginx三 验证 Linux一 安装依赖项二 下载Nginx源码包三 安装四 验证五 常用命令附录 Nginx是一款高性能的开源Web服务器和反向代理服务器&#xff0c;被广泛用于构建现代化的Web应用和提供静态内容。本篇博文将教你如何在Windows和Linux操作…

Vue 前端代码多地部署(打包后配置动态IP)

Vue 前端代码多地部署&#xff08;打包后配置动态IP&#xff09; 需求一、使用 config.json二、使用 config.js 需求 vue 代码打包之后&#xff0c;需要在多个地方部署。正常操作是&#xff1a;先改 ip 地址&#xff0c;再打包。这样每换一个地方部署&#xff0c;就需要重新打…

将自己写的nginx.conf运行到阿里云linux服务器上

首先 你要保证自己的nginx.conf没有问题 可以先在本地运行一下 然后来到nginx.conf文件的所在目录 利用 scp -r ./nginx.conf 用户名(如果之前没设置过就是 root)服务器公网地址:/etc/nginx/将文件传到服务器上去 这里需要注意 如果你的服务器之前没有装过nginx 是没有这个目…

C语言实现随机点名器

目录 1、程序描述 2、程序功能 3、功能详细实现过程 学生结构体声明和定义 菜单&#xff08;menu&#xff09;函数 文件读取和保存函数 查询函数 点名函数 rand函数 点名函数实现 点名次数归零函数 字体颜色变化函数 4、运行效果 5、源码分享 1、程序描述 只使用…

ANR实战案例 2 - 不同线程状态ANR示例

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、Blocked状态示例1.启动初始化阻塞案例trace1.tx 2.ConcurrentHashMap分段锁优…

互联网营销之何谓真需求-想知道如何挖掘真需求看这篇就对了

互联网营销思维是以爆品为核心的迭代思维&#xff0c;本文结合“生日蛋糕”、“方便面”、“蜜雪冰城”几个小例子&#xff0c;以及我们具体的工作&#xff0c;展开聊聊什么是“真需求”。 1. 互联网营销和传统营销的区别 1.1 传统的营销思维&#xff1a; “定位4P&#xff0…

亚马逊云科技:使用Inf2实例运行大语言模型GPT-J-6B基础设施

在2019年的亚马逊云科技re:Invent上&#xff0c;亚马逊云科技发布了Inferentia芯片和Inf1实例这两个基础设施。Inferentia是一种高性能机器学习推理芯片&#xff0c;由亚马逊云科技定制设计&#xff0c;其目的是提供具有成本效益的大规模低延迟预测。时隔四年&#xff0c;2023年…

金融行业软件测试面试必备:答案详解与干货技巧

大家好&#xff0c;今天我要和大家分享的是我多年从事金融行业软件测试的心得体会。由于金融行业涉及到的数据量非常大&#xff0c;系统功能也十分复杂&#xff0c;因此在招聘软件测试人员时&#xff0c;往往会提出一些具有挑战性的问题。 作为一个资深面试官&#xff0c;我也…

Android aidl及binder基础知识巩固

作者&#xff1a;义华 1、什么是binder binder是android framework提供的&#xff0c;用于跨进程方法调用的机制&#xff0c;具有安全高效等特点。 我们知道&#xff0c;在 Android 系统中&#xff0c;每个应用程序都运行在一个独立的进程中&#xff0c;各个进程之间需要进行…

Logstash-grok表达式常用模式与正则使用与测试

Logstash 常用字符解释常用模式使用方式 使用正则表达式使用方式 测试用例 常用字符解释 \ 表示匹配 \s* 匹配空格&#xff08;可多个&#xff09; \w 匹配字符&#xff08;可多个&#xff09;常用模式 %{HOSTNAME}&#xff0c;匹配请求的主机名 %{TIMESTAMP_ISO8601:time…

探索智能化:TOOM解析未来稿件校验系统的技术进展与应用展望

在信息时代&#xff0c;随着大数据、人工智能和自然语言处理等技术的快速发展&#xff0c;稿件校验系统正朝着智能化的方向迈进。智能化的稿件校验系统能够更准确、高效地检测虚假信息、抄袭行为以及提升文章质量。本文将探讨智能化稿件校验系统的技术进展与应用展望&#xff0…

NC与单一窗口数据对接丨外贸软件

在国际贸易通关过程中&#xff0c;所涉及相关部门的信息管理&#xff0c;主要是以数字化流程系统为主&#xff0c;让每个部门业务的申请、办理、回复采用电子化和互联网化。由于每个环节部分的数据壁垒未打通&#xff0c;数据无法协同共享&#xff0c;导致在口岸通关的过程中&a…

Swoole定时器实现毫秒级任务调度

简介 Timer 毫秒精度的定时器&#xff0c;底层基于 epoll_wait 和 setitimer 实现&#xff0c;数据结构使用最小堆&#xff0c;可支持添加大量定时器&#xff0c;使用最小堆数据结构实现的定时器&#xff0c;类似 JavaScript 的 setInterval&#xff0c;Swoole 定时器的添加和…

I2C通信协议原理和MPU6050

一、串口通讯 只能在两个设备之间进行 若要三台设备两两通信&#xff0c;则每个设备得需要两组窗口&#xff0c;为3组相互独立的窗口通讯 为解决这个问题&#xff1a;设计了总线通讯&#xff0c;有多种&#xff0c;I2C为其中一种 二、I2C通信 &#xff08;1&#…