全国大学生数学建模比赛——时间序列(详细解读)

news2024/9/20 1:06:41

全国大学生数学建模比赛中,时间序列分析是一种重要的方法。以下是对时间序列在该比赛中的详细解读:

一、时间序列的概念

时间序列是按时间顺序排列的一组数据。在数学建模中,时间序列数据通常反映了某个现象随时间的变化情况。例如,股票价格的历史数据、气温的逐天记录、销售额的逐月数据等都是时间序列。

二、时间序列分析的目的

  1. 预测未来值:通过对历史数据的分析,建立合适的模型来预测未来的时间序列值。这在很多实际问题中都非常重要,比如预测产品的销售量、股票价格走势等。
  2. 了解数据的特征:分析时间序列的趋势、季节性、周期性等特征,以便更好地理解所研究的现象。
  3. 评估模型的有效性:通过对模型的评估,确定其在预测和解释时间序列数据方面的准确性和可靠性。

三、时间序列分析的步骤

  1. 数据收集与预处理

    • 收集相关的时间序列数据,并进行初步的检查和清理,确保数据的准确性和完整性。
    • 可能需要对数据进行平稳化处理,去除趋势和季节性等因素,以便更好地进行建模。
  2. 模型选择与建立

    • 根据时间序列的特征和问题的要求,选择合适的时间序列模型。常见的模型包括自回归模型(AR)、移动平均模型(MA)、自回归移动平均模型(ARMA)、自回归积分移动平均模型(ARIMA)等。
    • 确定模型的参数,可以通过最小二乘法、极大似然估计等方法进行估计。
  3. 模型评估与诊断

    • 对建立的模型进行评估,常用的评估指标包括均方根误差(RMSE)、平均绝对误差(MAE)、平均绝对百分比误差(MAPE)等。
    • 进行模型诊断,检查模型是否满足假设条件,如残差是否为白噪声等。
  4. 预测与应用

    • 使用经过评估和诊断的模型进行预测,得到未来时间序列的值。
    • 根据预测结果,为实际问题提供决策支持。

四、时间序列分析的注意事项

  1. 数据质量:确保时间序列数据的质量是进行有效分析的基础。要注意数据的准确性、完整性和一致性。
  2. 模型选择:不同的时间序列模型适用于不同的情况,要根据数据的特征和问题的要求选择合适的模型。
  3. 模型假设:在建立时间序列模型时,要注意模型的假设条件,并进行适当的诊断和检验。
  4. 预测局限性:时间序列预测存在一定的局限性,预测结果只是基于历史数据的一种估计,实际情况可能会发生变化。
  5. 结果解释:对时间序列分析的结果要进行合理的解释,结合实际问题的背景和知识,避免单纯依赖数学模型。

数据例样:

"Month","Sales"
"1-01",266.0
"1-02",145.9
"1-03",183.1
"1-04",119.3
"1-05",180.3
"1-06",168.5
"1-07",231.8
"1-08",224.5
"1-09",192.8
"1-10",122.9
"1-11",336.5
"1-12",185.9
"2-01",194.3
"2-02",149.5
"2-03",210.1
"2-04",273.3
"2-05",191.4
"2-06",287.0
"2-07",226.0
"2-08",303.6
"2-09",289.9
"2-10",421.6
"2-11",264.5
"2-12",342.3
"3-01",339.7
"3-02",440.4
"3-03",315.9
"3-04",439.3
"3-05",401.3
"3-06",437.4
"3-07",575.5
"3-08",407.6
"3-09",682.0
"3-10",475.3
"3-11",581.3
"3-12",646.9

分析代码:

一、数据读取与预处理

data = pd.read_csv('shampoo.csv')
data['Month'] = pd.to_datetime(data['Month'], format='%m-%d')
data['Month'] = pd.to_datetime(data['Month'], format='%y-%m', yearfirst=True).dt.strftime('2024-%m')
print(data)
data.set_index('Month', inplace=True)

这段代码首先从 “shampoo.csv” 文件中读取数据并存储在data这个DataFrame中。然后对 “Month” 列进行两次格式转换,第一次将其转为日期类型,第二次将格式转换为 “2024-% m” 的形式,并将 “Month” 列设置为索引,方便后续基于时间的操作。

二、绘制原始时序图及平稳性检测

  1. 绘制时序图
data.plot(figsize=(10, 6))
plt.xlabel('Month')
plt.ylabel('Sales')
plt.title('Time Series of Sales')
plt.show()

通过调用data.plot()绘制了原始数据的时序图,设置了图形的大小为(10, 6),并添加了横轴标签 “Month”、纵轴标签 “Sales” 和标题 “Time Series of Sales”,最后显示图形,以便直观地观察销售额随时间的变化情况。

 

  1. 绘制自相关图和偏相关图
plot_acf(data, lags=9)
plt.title('Autocorrelation Plot')
plt.show()

plot_pacf(data, lags=9)
plt.title('Partial Autocorrelation Plot')
plt.show()

 

 

分别绘制了原始数据的自相关图和偏相关图,设置滞后阶数为 9,通过这两个图可以初步分析时间序列的自相关性和偏自相关性,为选择合适的时间序列模型提供参考。

  1. ADF 检验
adf_result = adfuller(data['Sales'])
print('ADF Statistic:', adf_result[0])
print('p-value:', adf_result[1])
print('Critical Values:', adf_result[4])

进行了 ADF(Augmented Dickey-Fuller)检验,以判断原始时间序列数据的平稳性。输出了检验统计量、p 值和临界值,通常如果 p 值小于一定的显著性水平(如 0.05),则可以认为序列是平稳的。

三、差分处理及再次检测平稳性

  1. 差分处理
diff_data = data.diff().dropna()

对原始数据进行一阶差分处理,并去除产生的缺失值。差分可以消除时间序列中的趋势和季节性,使序列更趋于平稳。

  1. 绘制差分后的时序图
diff_data.plot(figsize=(10, 6))
plt.xlabel('Month')
plt.ylabel('Sales (Differenced)')
plt.title('Differenced Time Series of Sales')
plt.show()

 

绘制差分后数据的时序图,观察差分后的序列变化情况,此时的纵轴标签变为 “Sales (Differenced)”,标题也相应地变为 “Differenced Time Series of Sales”。

  1. 绘制差分后的自相关图和偏相关图
plot_acf(diff_data, lags=9)
plt.title('Autocorrelation Plot (Differenced)')
plt.show()

plot_pacf(diff_data, lags=9)
plt.title('Partial Autocorrelation Plot (Differenced)')
plt.show()

 

 

再次绘制差分后数据的自相关图和偏相关图,以进一步分析差分后序列的相关性特征。

  1. ADF 检验(差分后)
adf_result_diff = adfuller(diff_data['Sales'])
print('ADF Statistic (Differenced):', adf_result_diff[0])
print('p-value (Differenced):', adf_result_diff[1])
print('Critical Values (Differenced):', adf_result_diff[4])

 

对差分后的序列进行 ADF 检验,确认差分后的序列是否平稳。输出了差分后的检验统计量、p 值和临界值。

四、使用 ARIMA 模型建模与预测

  1. 建模
model = ARIMA(data, order=(1, 1, 1))
model_fit = model.fit()

使用ARIMA模型对原始数据进行建模,指定模型的阶数为(1, 1, 1),即自回归阶数为 1、差分阶数为 1、移动平均阶数为 1。然后对模型进行拟合。

  1. 打印模型概要信息
print(model_fit.summary())

输出模型的概要信息,包括模型的参数估计、标准误差、t 值、p 值等,这些信息可以帮助评估模型的有效性和可靠性。

  1. 预测未来销售额
forecast_steps = 5
forecast = model_fit.forecast(steps=5)
last_month = data.index[-1]
future_months = pd.date_range(start=last_month, periods=forecast_steps + 1, freq='M')[1:]
forecast_df = pd.DataFrame({'Month': future_months, 'Forecasted Sales': forecast})
print('Forecasted Sales for the next 5 months:')
print(forecast_df)

设置要预测的未来步数为 5,使用拟合好的模型进行预测,得到未来 5 个月的销售额预测值。然后生成未来几个月的日期,创建一个包含日期和预测销售额的DataFrame,最后输出预测结果,为决策提供参考。

 

完整代码:

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
import io
# 读取数据并进行预处理
# 将字符串转换为DataFrame
data = pd.read_csv('shampoo.csv')

# 将'Month'列转换为日期类型
data['Month'] = pd.to_datetime(data['Month'], format='%m-%d')
# 将'Month'列转换为日期类型,并设置年份为2024年
data['Month'] = pd.to_datetime(data['Month'], format='%y-%m', yearfirst=True).dt.strftime('2024-%m')
print(data)
# 将日期列设置为索引
data.set_index('Month', inplace=True)

# 绘制时序图
data.plot(figsize=(10, 6))
plt.xlabel('Month')
plt.ylabel('Sales')
plt.title('Time Series of Sales')
plt.show()

# 检测序列的平稳性
# 自相关图
plot_acf(data, lags=9)
plt.title('Autocorrelation Plot')
plt.show()

# 偏相关图
plot_pacf(data, lags=9)
plt.title('Partial Autocorrelation Plot')
plt.show()

# ADF检验
adf_result = adfuller(data['Sales'])
print('ADF Statistic:', adf_result[0])
print('p-value:', adf_result[1])
print('Critical Values:', adf_result[4])

# 差分处理
diff_data = data.diff().dropna()

# 绘制差分后的时序图
diff_data.plot(figsize=(10, 6))
plt.xlabel('Month')
plt.ylabel('Sales (Differenced)')
plt.title('Differenced Time Series of Sales')
plt.show()

# 差分后的序列平稳性检测
# 自相关图
plot_acf(diff_data, lags=9)
plt.title('Autocorrelation Plot (Differenced)')
plt.show()

# 偏相关图
plot_pacf(diff_data, lags=9)
plt.title('Partial Autocorrelation Plot (Differenced)')
plt.show()

# ADF检验
adf_result_diff = adfuller(diff_data['Sales'])
print('ADF Statistic (Differenced):', adf_result_diff[0])
print('p-value (Differenced):', adf_result_diff[1])
print('Critical Values (Differenced):', adf_result_diff[4])

# 使用ARIMA模型建模
model = ARIMA(data, order=(1, 1, 1))
model_fit = model.fit()

# 打印模型的概要信息
print(model_fit.summary())

# 预测未来5个月的销售额
forecast_steps = 5
forecast = model_fit.forecast(steps=5)
# 生成未来几个月的日期
last_month = data.index[-1]
future_months = pd.date_range(start=last_month, periods=forecast_steps + 1, freq='M')[1:]

# 创建包含日期和预测销售额的DataFrame
forecast_df = pd.DataFrame({'Month': future_months, 'Forecasted Sales': forecast})

# 输出预测结果
print('Forecasted Sales for the next 5 months:')
print(forecast_df)

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

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

相关文章

编程中数据字典介绍

目录 第一章、快速了解数据字典1.1)数据字典介绍1.2)主动数据字典1.2.1)主动数据字典对表字段的描述1.2.2)主动数据字典对表索引的描述1.2.3)主动数据字典对表外键的描述1.3)被动数据字典1.4)数…

golang实现windows获取加密盘符的总大小

golang实现windows获取加密盘符的总大小 package mainimport ("fmt""syscall""unsafe" )type PartitionStyle uint32const (IOCTL_DISK_GET_DRIVE_LAYOUT_EX 0x00070050FILE_DEVICE_MASS_STORAGE uint32 0x0000002dIOCTL_STOR…

【生物特征识别论文分享】基于深度学习的掌纹掌静脉识别

(待更新)基于深度学习的生物特征识别(手掌静脉、手背静脉、手指静脉、掌纹、人脸等)论文模型总结 。具体方法包括:基于特征表征、基于传统网络设计与优化、基于轻量级网络设计与优化、基于Transformer设计与优化、基于…

Isaac Sim仿真平台学习(2)基础知识

目录 0.前言 1.isaac sim的组建 1.Isaac Lab的资料 2.PhysX 3.RTX 4.Digital Twins 5.Replicator 6.Omnigraph 0.前言 难得更新阿,今天黑猴发布了没有去玩,跑来更新博客,本来想着按宇树的go2开发指南去试试RL的,但可惜没成…

39_WAF的概念、功能,ModSecurity部署配置、LAMP环境部署、Ubuntu搭建DVWA靶机测试、测试WAF防御、OWASP规则集的部署

一、WAF的概念 WAF( Web Application Firewall ),即Web应用防火墙 通过执行一系列HTTP/HTTPS(应用层的协议)的安全策略为Web应用提供保护的一种网络安全产品。增加攻击者的难度和成本,但不是100%安全。工…

XRAY~漏洞扫描工具

有人说:“所有的漏扫工具都是人写出来的,既然是工具,肯定没有人厉害,但是,漏扫可以大大减少你的工作量” 4、⭐ XRAY xray 是一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成&…

五、2 移位操作符赋值操作符

1、移位操作符 2、赋值操作符 “ ”赋值,“ ”判断是否相等 1)连续赋值 2)复合赋值符

关于栈(顺序栈)的知识讲解

1.1 什么是栈 栈是只能在一端进行插入和删除操作的线性表(又称为堆栈),进行插入和删除操作的一端称为栈顶,另一端称为栈底。 特点:栈是先进后出FILO(First In Last Out) (LIFO(Last In First Out)) 1.2 顺序栈 1.2.1 特性 逻辑结构&#xff1…

推荐4款高效的视频剪辑神器。

很多人一开始,面对各种视频剪辑软件时会不知所措。不知道该选择哪一个,也知道如何使用。但是这几个软件,对于不太熟悉视频剪辑的朋友们来说简直就是神器,简单易上手,功能做的也非常的专业。 1、福昕剪辑软件 直达链接…

高性能 Web 服务器:让网页瞬间绽放的魔法引擎(下)

目录 一.Nginx 反向代理功能 1.缓存功能 2.http 反向代理负载均衡 二.实现 Nginx 四层负载均衡 三.实现 FastCGI 1.为什么会有FastCGI? 2.什么是PHP-FPM? 3.FastCGI配置指令 4.Nginx与php-fpm在同一服务器 5.Nginx配置转发 6. php的动态扩展模…

关于c++多线程中的互斥锁mutex

关于c多线程中的互斥锁mutex c中的多线程线程的基本概念C 标准库中的线程支持 多线程与主线程与join换一种方式理解线程互斥锁第一种第二种 子线程与互斥锁混合锁--看这个应该就明白了(这个主要使用的是嵌套锁)定义一个类创建线程 这个示例主要使用并列锁…

SAP负库存

业务示例 在系统中,对于一些物料而言,不能立即将收到的交货输入为收货。如果要使发货无论如何都是可以过帐的,则需要允许这些物料的负库存。 负库存 发货数量大于预订数量时,过帐该发货就会出现负库存。如果由于组织原因&#…

【人工智能】Transformers之Pipeline(十一):零样本图片分类(zero-shot-image-classification)

目录 一、引言 二、零样本图像分类(zero-shot-image-classification) 2.1 概述 2.2 技术原理 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 …

嵌入式软件--PCB DAY 1

一、入门 1.什么是PCB 随着技术的进步,我们已经可以将一个电子设备的主要功能全部集成在一块单独的电路板上。这种电路板可以由相关的机械设备像印刷一样生产出来。因此我们现在的电路板可以被称为印刷电路板(Printed Circuit Board)。 2.什么是PCBA …

洛谷B3981题解

题目描述 (你不需要看懂这张图片;但如果你看懂了,会觉得它很有趣。) JavaScript 是一种功能强大且灵活的编程语言,也是现代 Web 开发的三大支柱之一 (另外两个是 HTML 和 CSS)。灵活的 JavaScript 包含“自动类型转换…

C++实现——红黑树

目录 1.红黑树 1.1红黑树的概念 1.2红黑树的性质 1.3红黑树节点的定义 1.4红黑树的插入操作 1.5红黑树的验证 1.6红黑树的删除 1.7红黑树与AVL树的比较 1.8红黑树的应用 1.红黑树 1.1红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位…

系统架构:分而治之

系统架构:分而治之 引言“分而治之”在架构中的应用模块化设计分层化架构微服务架构 分而治之的优势降低复杂性提高灵活性和可扩展性增强可维护性促进团队协作 分而治之的劣势复杂性转移性能开销开发和运维的复杂性数据一致性挑战 结论 引言 “分而治之”是一种分析…

修改Patroni ttl和retry_timeout

参数解释 修改 & 查看 https://www.cnblogs.com/linyouyi/p/15714010.html

58.区间和

58.区间和 //卡码网题号58.区间和 /* //如果我查询m次&#xff0c;每次查询的范围都是从0到n-1&#xff0c;那么该算法的时间复杂度是O(n*m)&#xff0c; //如果查询次数非常大的话&#xff0c;这个时间复杂度也是非常大的。 #include<iostream> #include<vector> …

失易得数据恢复体验,2024精选数据恢复工具推荐!

数据丢失的风险无处不在&#xff0c;可能是由于硬件故障、软件错误、病毒感染或人为操作失误等原因。在这种情况下&#xff0c;数据恢复工具就显得尤为重要。本文将介绍几款市场上广受好评的数据恢复工具&#xff0c;帮助您在数据丢失后能够迅速找回宝贵的信息。 一、Foxit数据…