模型简介

时间序列分析模型是一个很常用的预测模型。给出一组跟时间相关的数据(或者说时间序列),该模型可以预测未来的数据。往往一个时间序列会呈现一定的周期性。比如,洪涝灾害在夏季高发,那么洪涝灾害的发生频率就以一年为周期。一个时间序列的典型分解式为Xt=mt+St+YtX_t=m_t+S_t+Y_tXt​=mt​+St​+Yt​。mtm_tmt​为趋势项,即数据在年与年之间的变化规律;StS_tSt​为周期已知(比如一年)的周期项,反映数据在月与月之间的变化规律;YtY_tYt​是随机噪声项,反映数据受到未知因素的干扰。时间序列分析模型就是通过一定的方法,把数据中的趋势项和周期项剥离出来,从而达到对真实数据的拟合及预测。

模型求解

假设我们现在有一个时间序列X=(xij)n∗TX=(x_{ij})_{n*T}X=(xij​)n∗T​。n表示年数,T表示周期(一般取T代表月数,即T=12)。xijx_{ij}xij​表示第i年第j月的某个数据。

提取周期项

周期项,即前文提到的StS_tSt​。SjS_jSj​表示第j月的数据特征(是一个数)。
先计算每一年的平均值,Xi‾=∑j=1TXijT\overline{X_i}=\frac{\sum_{j=1}^{T}{X_{ij}}}{T}Xi​​=T∑j=1T​Xij​​
再对每个月的数据零均值化,stij=Xij−Xi‾st_{ij}=X_{ij}-\overline{X_i}stij​=Xij​−Xi​​
对于这些零均值化的数据,每年第j月的数据的平均值即为第j月的数据特征,Sj=∑j=1TstijnS_j=\frac{\sum_{j=1}^{T}{st_{ij}}}{n}Sj​=n∑j=1T​stij​​
这样,就把周期项SjS_jSj​求出来了。

拟合趋势项

趋势项,即前文提到的mtm_tmt​。
由于趋势项和周期没有关系,所以为了拟合方便,先把原始的矩阵X拉成直线,令xk=xij,k=(i−1)∗T+jx_k=x_{ij},k=(i-1)*T+jxk​=xij​,k=(i−1)∗T+j
再把周期项给减掉,nxk=xk−Sjnx_k=x_k-S_jnxk​=xk​−Sj​
这样nxknx_knxk​就只剩下趋势项和随机噪声项了。那么为了避免随机噪声项的干扰,我们就需要对nxknx_knxk​进行曲线拟合。一般是采用线性拟合(即一次函数拟合)。
假设线性拟合的结果为{mk}\{m_k\}{mk​},那么{mk}\{m_k\}{mk​}就是能反映数据走向的趋势项。

得到预测值

设k=(i−1)∗T+jk=(i-1)*T+jk=(i−1)∗T+j,则mk+Sjm_k+S_jmk​+Sj​表示第i年第j月的预测数据。

代码

这是我写的时间序列分析模型的matlab代码,里面的变量名称基本和文章保持一致。为了让代码读起来更加舒适,我添加了大量的注释,帮助大家理解。在遇到真实情景的时候,只需要按照题目要求在上面进行一些小小的改动就可以运行了。

T=12;%T表示周期,也就是月数
n=4;%n表示年数
z=1;%z表示要预测的年数
x;%x为直线型的原始数据,需要导入
D=reshape(x,T,n)';%把直线型的数据处理成T*n的矩阵
aver=mean(D');%求每年的平均值
st=zeros(n,T);
for i=1:nfor j=1:Tst(i,j)=D(i,j)-aver(i);%对每个月的数据零均值化end
end
S=zeros(1,T);
S=sum(st)/n;%计算周期项
nx=zeros(n*T,1);
for i=1:nfor j=1:Tk=(i-1)*T+j;nx(k)=x(k)-S(j);%拉直并减去周期项end
end
coef=polyfit(1:n*T,nx,1);%用一次函数拟合nx,得到系数
m=zeros(1,(n+z)*T);
for i=1: (n+z)*Tm(i)=coef(1)*i+coef(2);%m为对nx线性拟合的结果
end
xx=zeros(1,(n+z)*T);
for i=1: n+zfor j=1:Tk=(i-1)*T+j;xx(k)=m(k)+S(j);%趋势项加上周期项,得到预测结果end
end
plot(x);%绘制实际数据
hold on
plot(1:(n+z)*T,xx);%绘制预测数据
xlabel('月数');
ylabel('数据值');
legend('实际数据','预测数据');

应用实例

以2021年五一杯数学建模比赛B题第二小问的数据为例。进行了一些数据处理之后,得到了4年的出警次数(共48个数据),如下:
79 95 98 51 275 67 63 40 50 31 38 43 58 28 44 14 148 87 23 42 49 33 65 68 54 129 68 71 107 119 59 50 46 44 40 63 67 76 73 44 138 146 72 30 41 26 25 36
将这些数据命名为x,导入到程序中,得到的结果如下:

可以看出,虽然存在一定误差,但是时间序列分析模型对这种带有一定周期性的数据,预测结果还是比较好的。

总结

时间序列分析模型是一个简单又有效的一个模型,也是数学建模比赛中的一个非常好用的预测模型。其实它不仅仅可以处理跟时间相关的数据,也可以处理其它的看上去有周期性的数据。为什么说要看上去有周期性呢,因为周期T在模型中是需要你自己输入的。要是看不出来周期,还是换个方法吧。

数学建模之时间序列分析模型相关推荐

  1. 【数学建模】多元回归分析模型(评价与决策)

    文章目录 一.算法介绍 二.适用问题 三.算法总结 四.应用场景举例 五.SPSS操作 六.实际案例 七.论文案例片段(待完善) 多元回归分析模型主要针对数学建模问题中的一些小的子问题进行求解,如果想 ...

  2. 数学建模之时间序列模型及其应用

    摘要 时间序列模型就是将预测对象按照时间顺序排列起来,用这一组时间序列过去的变化规律,推断今后变化的可能性及变化趋势.变化规律. 时间序列模型也是一种回归模型,其一方面承认事物发展的延续性,运用过去的 ...

  3. 数学建模——ARIMA时间序列预测模型Python代码

    import pandas # 读取数据,指定日期为索引列data = pandas.read_csv('D:\\DATA\\pycase\\number2\\9.3\\Data.csv' ,inde ...

  4. 数学建模传染病模型_数学建模| 时间序列模型

    1 数学建模 时间序列模型 1.与实践有关系的一组数据,叫做时间序列: 2.得到时间序列的数据后,要构建模型,其中平稳时间序列的模型,是本节课重点介绍的: 3.y=at+季节性+周期性 一.     ...

  5. 数学建模-预测模型总结(适用范围、优缺点)【灰色预测模型、插值与拟合、时间序列预测法、马尔科夫预测、差分方程、微分方程模型、神经元网络】

    基于数学建模的预测方法种类繁多,从经典的单耗法.弹性系数法.统计分析法,到目前的灰色预测法.当在使用相应的预测方法建立预测模型时,我们需要知道主要的一些预测方法的研究特点,优缺点和适用范围.下面就当下 ...

  6. python数学建模--时间序列模型--指数平滑

    目录 时间序列 指数平滑 一次指数平滑 预测示例 二次指数平滑 预测示例 三次指数平滑 本博客参考:<python数学实验与建模 > 时间序列 时间序列数据是按照时间顺序排列的.随着时间变 ...

  7. 图书销量时间序列预测_数学建模_Prophet实现

    图书销量时间序列预测_数学建模_Prophet实现 前言 主要参考 代码 库导入与函数设置 导库 展示函数 取数据函数 训练函数 评估函数 数据预处理 数据集划分 数据分布查看 销售曲线查看 销售预测 ...

  8. 2021年暑假数学建模第一次模拟赛:新冠疫情预测(插值,时间序列,微分方程建模)

    本系列赛题.数据获取: 2021年暑假数学建模模拟赛(赛题+数据+分析) 不直接提供论文等资料,分析已经很详细了 整理不易,欢迎点赞+关注+收藏 2021年暑假数学建模第一次模拟赛:新冠疫情预测(插值 ...

  9. 数学建模:14 时间序列

    目录 步骤 基本概念 时间序列分解 叠加 / 乘积模型 使用SPSS的实例 步骤 指数平滑模型 Simple模型 线性趋势模型 布朗线性趋势模型 阻尼趋势模型 简单季节性 温特加法模型 温特乘法模型 ...

最新文章

  1. mysql 存储过程 获取错误,MySQL存储过程相互调用并获得错误码示例
  2. android 回退 activity,Android Activity要点(2)
  3. Debian 系统修改语言为英文
  4. python——获取数据类型
  5. Zabbix RCE with API JSON-RPC
  6. 如何根据进程号去查端口号?
  7. bigdecimal 保留两位小数_openpyxl修改单元格格式(隐藏小数、设定百分数位数)...
  8. java selenium环境安装
  9. webstorm的个性化设置settings
  10. 网易MCtalk泛娱乐科技峰会:泛娱乐的未来时代属于科技创新者
  11. Egret之属性绑定
  12. 程序员如何和产品经理优雅的干架
  13. 【优化算法】麻雀搜索优化算法(SSA)【含Matlab源码 1288期】
  14. java程序员选择多个offer时需要看重哪些?_27 道阿里巴巴 Java 面试题,你会几道?...
  15. automation服务器不能创建对象的终极解决办法!
  16. Python高级教程
  17. 对曲面的积分求椭圆的面积_此题是关于数学考研的曲面积分题∫∫(xdydz+ydzdx+zdxdy)/(x2+y2+z2)3/2,曲面是上半椭圆球面...
  18. 小程序setData执行后,页面没有刷新
  19. MAP实现一个key,对应多个Value值。
  20. 51Nod 圆与三角形

热门文章

  1. Navicat Premium 连接服务器oracle 提示ORA-01017:用户名/口令无效;登陆被拒绝
  2. vue项目运行不成功--@1.0.0 dev: **`webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
  3. 网络是怎样连接的 - 读书笔记
  4. vue项目中引入字体包
  5. php递归算法经典实例,php递归算法应用实例
  6. HenCoder Android 开发进阶:自定义 View 1-5 绘制顺序
  7. B站 唐宇迪 深度学习笔记
  8. matlab画直线,对比原数据与拟合直线
  9. Android 是否正在播放音视频
  10. oracle表最大条数,oracle 数据表最大多少条记录