记一次时间序列算法的自回归预测--ARAutoreg

news2024/9/24 15:21:10

背景

最近公司给客户要做一些数据的预测,但是客户不清楚哪些做起来比较符合他们的,于是在经过与业务方的沟通,瞄准了两个方面的数据

1.工程数据:对工程数据做评估,然后做预警,这个想法是好的,但是由于这方面数据第一是不全,而且数据的准确程度有一些偏差,于是放弃了

2.财务数据:财务数据是个非常好的方向,首先财务数据是很准确的,而且规律性比较明显。

所以最终选了了财务数据分析这个角度。

注:本文中接下来做的所有数据都是虚拟数据,上面说的财务数据只是再说如何分析这个业务方向。

简介

基于以上我大概先说一下这个预测的方向:

由于博主是以做java和spark(scala)为主的人,所以对python用的比较少,过程中有不对的地方请大家批评指正。我们将向刚入行的小白开发者介绍如何使用Python实现AR(自回归)预测模型。AR模型是一种在时间序列预测中常用的模型,它基于过去的观测值来预测未来的值

我们将按照以下步骤进行操作

步骤描述
1导入所需的库
2加载时间序列数据
3拆分数据集为训练集和测试集
4训练AR模型
5使用AR模型预测未来值
6评估模型性能
7可视化预测结果

代码实现:

导入所需的库

首先,我们需要导入一些必要的库,包括pandas用于数据处理和statsmodels用于建立AR模型。

from statsmodels.tsa.ar_model import AR

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from pandas import Series,DataFrame

加载时间序列数据

def data_process():
    #接受csv格式数据,根据情况修改为自己的地址
    df = pd.read_csv(r"C:\Users\123\Downloads\funsbymonth.csv")

    fans = df['fans'].values
    data=pd.Series(fans)

    df['date'] = pd.to_datetime(df['date'])
    data_index = df['date'].values
    data.index =pd.Index(data_index)

    #data.plot(figsize=(12,8))
    #plt.show()

    return data,fans

#数据处理
data,fans = data_process()

这块我封装了一个方法,仅供参考

数据我也提供一下,可以供大家学习使用,需要的自取

date,fans
2021-6-30,12
2021-7-31,52
2021-8-31,58
2021-9-30,82
2021-10-31,65
2021-11-30,66
2021-12-31,16
2022-1-31,23
2022-2-28,54
2022-3-31,61
2022-4-30,78
2022-5-31,64
2022-6-30,56
2022-7-31,18
2022-8-31,16
2022-9-30,60
2022-10-31,75
2022-11-30,90
2022-12-31,63
2023-1-31,69
2023-2-28,15
2023-3-31,10
2023-4-30,60
2023-5-31,62
2023-6-30,78
2023-7-31,71

 拆分数据集

在建立AR模型之前,我们需要将数据集拆分为训练集和测试集。一般情况下,我们将大部分数据用于训练模型,少部分数据用于测试模型的预测效果。这里我们假设将前80%的数据用于训练,后20%的数据用于测试。

train_data = data.iloc[:int(0.8*len(data))]
test_data = data.iloc[int(0.8*len(data)):]

训练AR模型并预测

接下来,我们可以使用训练集的数据来训练AR模型。在这里,我们使用statsmodels库来构建AR模型。

def model_fit3(data,start,end,starTime):
    ar = AR(data).fit()
    arpredict_y3 =ar.predict(start=start, end=end ,dynamic = False)
    fig, ax = plt.subplots(figsize=(12, 8))
    ax = data.ix[starTime:].plot(ax=ax)
    arpredict_y3.plot(ax=ax)
    plt.show()
    return arpredict_y3

start = 10
end = len(fans)+3
starTime = '2022-1-31'
arpredict_y = model_fit3(data,start,end,starTime)

可视化结果

https://blog.51cto.com/u_16175449/6933670

https://blog.51cto.com/u_16175427/6815175

https://bbs.csdn.net/topics/392418314

https://blog.csdn.net/weixin_44034053/article/details/94359052

https://blog.51cto.com/u_13389043/6230021

https://blog.51cto.com/u_13389043/6230021

这里我在提供一种模型:自回归模型 AutoReg

上代码看看,数据集还是上面的数据集

import pandas as pd
from statsmodels.tsa.ar_model import AutoReg
import matplotlib.pyplot as plt

def data_process():
    #接受csv格式数据,根据情况修改为自己的地址
    df = pd.read_csv(r"C:\Users\allen_sun\Downloads\funsbymonth.csv")

    fans = df['fans'].values
    data=pd.Series(fans)

    df['date'] = pd.to_datetime(df['date'])
    data_index = df['date'].values
    data.index =pd.Index(data_index)

    #data.plot(figsize=(12,8))
    #plt.show()

    return data,fans

#数据处理
data,fans = data_process()

train_data = data.iloc[:int(0.8*len(data))]
test_data = data.iloc[int(0.8*len(data)):]

#模型训练
order = 9  # AR模型的阶数为2
model = AutoReg(train_data, lags=order)
model_fit = model.fit()

#模型预测
predictions = model_fit.predict(start=len(train_data), end=len(data)-1)

#模型评估
from sklearn.metrics import mean_squared_error, mean_absolute_error
#均方误差(MSE),结果越小越好
mse = mean_squared_error(test_data, predictions)
#平均绝对误差(MAE), 结果越小越好
mae = mean_absolute_error(test_data, predictions)
mse
mae

#print(predictions)


#预测起止点
start = 10
#预测长度,此长度表示向后预测4个阶段
end = len(fans)+3

order = 9  # AR模型的阶数为2
model = AutoReg(train_data, lags=order)
model_fit = model.fit()
arpredict_y3 =model_fit.predict(start=start, end=end ,dynamic = False)
fig, ax = plt.subplots(figsize=(12, 8))
#python自带的绘制曲线开始日期
starTime = '2022-1-31'
ax = data.ix[starTime:].plot(ax=ax)
arpredict_y3.plot(ax=ax)
plt.show()

评估项中的参数:

1.均方误差(MSE),结果越小越好。

2.误差均方根(RMSE),结果越小越好。

3.平均绝对误差(MAE),结果越小越好。

4.平均绝对百分误差(MAPE),结果越小越好。

效果:(也还行)

 https://blog.csdn.net/qq_40206371/article/details/121103377

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

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

相关文章

java 咖啡餐厅管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 咖啡餐厅管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…

【2023最新版】DataGrip使用MySQL教程

目录 一、安装MySQL 二、安装DataGrip 三、DataGrip使用MySQL 1. 新建项目 2. DataGrip连接MySQL 下载驱动文件 填写root密码 测试 成功 3. DataGrip操作MySQL 四、MySQL常用命令 1. 登录 2. 帮助 3. 查询所有数据库 一、安装MySQL MySQL是一种开源的关系型数据库…

java: 读取snakeyaml-1.26.jar各种jar包时出错; error in opening zip file

可能的问题 jar有问题idea没有权限等等其他问题。但执行后报错就是读取不了,还报error in opening zip file这个错。 解决问题 我的错就是jar包有问题。我先后进行了很多次把jar包位置里的东西全部删除,然后重新maven下载但是不管用。最后从网站上下载…

Kotlin委托Delegate托管by

Kotlin委托Delegate托管by import kotlin.reflect.KPropertyfun main() {var user: String by MyDelegate()user "fly"println(user) }class MyDelegate {private var v: String? nulloperator fun getValue(thisRef: Any?, property: KProperty<*>): Stri…

基于SSM的实验室耗材管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

解决方案 | 电子签让公共事业服务更便捷

为深入贯彻落实国务院关于深化“放管服”改革的号召&#xff0c;各地政府纷纷出台创新举措&#xff0c;优化营商环境&#xff0c;将公共事业服务纳入“一网通办”的范畴。 政策助力&#xff0c; 让公共事业服务实现“足不出户”线上办 上海&#xff1a;上海市大数据中心与国网…

Discourse 的无效附件清理

Discourse 对上传的附件会进行清理&#xff0c;对于一些没有任何被引用的附件&#xff0c;Discourse 会认为是垃圾而清理掉。 原因应该是为了降低存储空间的使用&#xff0c;但是我们目前使用的是 S3 &#xff0c;所以对存储空间并没有太多的要求。 根据官方的说法&#xff0…

SpringBoot配置优先级和Bean管理

SpringBoot配置优先级和Bean管理 1&#xff09;SpringBoot配置优先级2&#xff09;Bean管理【1】获取bean【2】bean作用域【3】第三方bean 1&#xff09;SpringBoot配置优先级 优先级(低>高) application.yaml(忽略)application.ymlapplication.propertiesjava系统属性(-Dxx…

LeetCode(力扣)78. 子集Python

LeetCode78. 子集 题目链接代码 题目链接 https://leetcode.cn/problems/subsets/description/ 代码 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:result []self.backtracking(nums, result, 0, [])return resultdef backtracking(self, nu…

容器编排学习(一)k8s集群管理

一 Kubernetes 1 概述 就在Docker容器技术被炒得热火朝天之时&#xff0c;大家发现&#xff0c;如果想要将Docker应用于具体的业务实现&#xff0c;是存在困难的一一编排、管理和调度等各个方面&#xff0c;都不容易。于是&#xff0c;人们迫切需要一套管理系统&#xff0…

MIT 6.S081学习笔记(第〇章)

〇、前言 本文涉及 xv6 《第零章 操作系统接口》相关&#xff0c;主要对涉及的进程、I/O、文件描述符、管道、文件等内容产生个人理解&#xff0c;不具有官方权威解释&#xff1b;文章的目录与书中的目录没有严格的相关性&#xff1b;文中会有问题 (Question) 字段&#xff0c…

uniapp里textarea多行文本输入限制数量

uniapp里textarea多行文本域实现输入计数 <template><view class"inputs"><textarea class"text1" maxlength50 placeholder请输入... input"sumfontnum"></textarea><text class"text2">{{fontNum}}/…

软件设计模式(三):责任链模式

前言 前面荔枝梳理了有关单例模式、策略模式的相关知识&#xff0c;这篇文章荔枝将沿用之前的写法根据示例demo来体会这种责任链设计模式&#xff0c;希望对有需要的小伙伴有帮助吧哈哈哈哈哈哈~~~ 文章目录 前言 责任链模式 1 简单场景 2 责任链模式理解 3 Java下servl…

【OJ比赛日历】快周末了,不来一场比赛吗? #09.09-09.15 #15场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-09-09&#xff08;周六&#xff09; #5场比赛2023-09-10…

Kafka3.0.0版本——消费者(独立消费者消费某一个主题中某个分区数据案例__订阅分区)

目录 一、独立消费者消费某一个主题中某个分区数据案例1.1、案例需求1.2、案例代码1.3、测试 一、独立消费者消费某一个主题中某个分区数据案例 1.1、案例需求 创建一个独立消费者&#xff0c;消费firstTopic主题 0 号分区的数据&#xff0c;所下图所示&#xff1a; 1.2、案…

【逗老师的无线电】MMDVM盒子安装高颜值仪表盘

目录 开篇、高颜值仪表盘展示1、实时通联卡片2、精简信息仪表盘3、主仪表盘 一、下载W0CHP-PiStar-Dash二、安装1、解压2、刻录SD卡 三、基础配置1、首次启动2、初始化配置2.1、先配置联网2.2、配置热点参数2.3、配置DMR参数2.4、显示屏配置 3、通联测试 四、进阶操作1、自定义…

Unity——脚本与导航系统(上)

Unity内置了一个比较完善的导航系统&#xff0c;一般称为Nav Mesh&#xff08;导航网格&#xff09;&#xff0c;用它可以满足大多数游戏中角色自动导航的需求。 一、导航系统相关组件 Unity的导航系统由以下几个部分组成&#xff1a; Nav Mesh。Nav Mesh与具体的场景关联&…

Linux目录结构和远程使用

目录名作用根目录 ‘/’文件系统结构的起始点/root系统管理员的工作目录/home普通用户工作目录/bin存放二进制可执行文件&#xff0c;存放最经常使用的命令/sbin系统管理员使用的系统管理程序/boot启动linux时使用的一些核心文件/dev设备文件&#xff0c;包括块设备和字符设备/…

Google Chrome如何同步书签

前提 先确保能科学上网 操作步骤 然后&#xff0c;要在设备之间同步Google Chrome书签&#xff0c;可以用以下步骤&#xff1a; 在您的Mac和Windows设备上安装Google Chrome浏览器。 在您的Google Chrome账户中启用同步功能。如果您还没有Google Chrome账户&#xff0c;请先…

导入jdk源码并进行使用

jdk下载地址 JDK1.8源码下载地址 idea打开jdk项目 打开项目结构&#xff0c;进入SDK这一栏&#xff0c;选择一个使用的jdk&#xff0c;选择jdk的类路径 将类路径进行删除&#xff0c;并且添加我们自己下载的jdk中的src文件夹到类路径