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

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

一、时间序列的概念

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

二、时间序列分析的目的

  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.rhkb.cn/news/404929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用vs配置opencv环境(属性表方法)

opencv官网:https://opencv.org/releases/ 老手回忆(新建属性表) Step1: 安装VS,安装openCV Step2: 新建项目,新建项目属性表,debug|x64新建属性,命好名字 Step3: VC目录-包含目录中添加: 安装…

经典游戏,用java实现的坦克大战小游戏

今天给大家分享一个使用java编写的坦克大战小游戏,整体还是挺好玩的,通过对这款游戏的简单实现,加深对java基础的深刻理解。 一、设计思路 1.坦克大战小游戏通过java实现,其第一步需要先绘制每一关对应的地图,地图包括…

WPF中RenderTransform,LayoutTransform区别

RenderTransform RenderTransform 是在渲染阶段应用的变换。它不会影响控件的布局,只会影响控件的外观。常用于动画和视觉效果。 • 应用时机:在控件已经完成布局之后。 • 影响范围:仅影响控件的外观,不影响布局。 • 常见用途&…

探索 HarmonyOS 的层叠布局:灵活的 Stack 容器

在应用开发中,灵活的布局设计是提高用户体验的关键之一。HarmonyOS 提供了丰富的布局组件,其中层叠布局(Stack Layout)是一个强大的工具,可以帮助开发者轻松实现元素的重叠显示。本文将深入探讨 Stack 容器的功能和应用…

【设计模式】六大原则-下

❓首先什么是设计模式? 😵相信刚上大学的你和我一样,在学习这门课的时候根本不了解这些设计原则和模式有什么用处,反而不如隔壁的C更有意思,至少还能弹出一个小黑框,给我个hello world。 ✨ 如何你和我一样…

ArcGIS Pro基础:状态栏显示栏的比例尺设置和经纬度位置

上图所示,界面下方最左侧是显示的比例尺,可以进行选择设置,也可以进行自定义设置 上图所示,可以手动录入比例尺,同时也可以对比例尺设置别名,比如【实验1】作为特定比例尺的标记 如上图所示,可以…

KEEPALIVED高可用集群最详解

目录 一、高可用集群 1.1 集群的类型 1.2 实现高可用 1.3 VRRP:Virtual Router Redundancy Protocol 1.3.1 VRRP相关术语 1.5.2 VRRP 相关技术 二、部署KEEPALIVED 2.1 keepalived 简介 2.2 Keepalived 架构 2.3 Keepalived 环境准备 2.3.1 实验环境 2…

嵌入式初学-C语言-二七

文件操作 概述: 什么是文件: 是保存在外存储器(磁盘,u盘,移动硬盘等等)上的数据的集合。 文件操作体现在哪几个方面: 文件内容的读取文件内容的写入 数据的读取和写入可被视为针对文件进行…

Day42 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II

语言 Java 739. 每日温度 每日温度 题目 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该…

关于windows环境使用nginx的一些性能问题

遇到的问题 最近在一个windows环境中部署nginx,遇到了以下问题: 1. nginx启动了九个线程(1master8woekr),但是所有链接都被1个woker接收,其余worker不工作 2. 用户端访问web很慢,登录服务器使…

k8s搭建

环境: 操作系统:win10 虚拟机:virtual box linux发行版:CentOS7.9 linux内核(使用uname -r查看):3.10.0-957.el7.x86_64 master和node节点通信的ip(master): 10.0.0.198 0.检查配置 本次搭建的集群共三个节…

deepspeed的并行模式介绍笔记

1.整体框架 2.并行模式 1.数据并行DDP 数据切分以后,分开单张卡训练得到参数,然后综合在单卡计算。 要点:前向计算和反向计算两步骤走并汇总。 1.前向计算 需要留一块主卡一定空间用于综合。 2.反向传播 利用前向传播的汇总参数得到各个…

Leetcode Java学习记录——动态规划基础

概念 首先想到递归、分治。动态规划本质也一样。 共性:找到重复子问题 差异性:有最优子结构,中途可以淘汰次优解。 动态规划是分治最优子结构。 例题 斐波那契数列 递归实现,时间复杂度是指数级。 最基础的写法为 int fib(i…

Linux CentOS java JDK17

1. 下载 cd /usr/local/ wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2. 解压 tar -zxf jdk-17_linux-x64_bin.tar.gz 3.配置环境变量 vim /etc/profile // 在末尾处添加 export JAVA_HOME/usr/local/jdk-17.0.12 #你安装jdk的路径&…

idea和jdk的安装教程

1.JDK的安装 下载 进入官网,找到你需要的JDK版本 Java Downloads | Oracle 中国 我这里是windows的jdk17,选择以下 安装 点击下一步,安装完成 配置环境变量 打开查看高级系统设置 在系统变量中添加两个配置 一个变量名是 JAVA_HOME …

大模型日报|10 篇必读的大模型论文

大家好,今日必读的大模型论文来啦! 1.斯坦福推出大模型网络安全能力和风险评估框架 Cybench 用于网络安全的语言模型智能体(agent)能够自主识别漏洞并执行漏洞利用,有可能对现实世界造成影响。政策制定者、模型提供者…

vue通过iframe预览 pdf、word、xls、ppt、txt文件

vue通过iframe预览 pdf、word、xls、ppt、txt文件 iframe中预览只能直接打开pdf文件&#xff0c;其他文件需要通过office365预览。 效果&#xff1a; 组件代码&#xff1a; <!--* fileName: 文件预览-FileView.vue* date: yanghaoxing-2024-08-16 09:32:24 !--> <…

ModuleNotFoundError: No module named ‘pywin32_bootstrap

ModuleNotFoundError: No module named ‘pywin32_bootstrap 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社…

4.展示功能的测试及缓冲-《篮球比赛展示管理系统》现场管理员角色操作手册

本平台属于富客户端类型&#xff0c;展示元素包括精美图片、高级动画、透明视频等&#xff0c;所以为了保证画面的呈现速度&#xff0c;一定要在比赛之前&#xff0c;把所有的展示功能在电脑过一遍&#xff0c;浏览器自动产生一个数据缓冲&#xff0c;便于提高现场画面的展示放…

springboot的学习(三):开发相关

简介 一些开发测试时用到的技术。 springboot 热部署 修改了代码&#xff0c;服务器不需要重启可以直接看到新的修改的效果。仅仅加载当前开发者自定义开发的资源&#xff0c;不加载jar资源。 在pom.xml配置文件中添加&#xff1a; <dependency><groupId>org.s…