时间序列——季节系数法

注:参考司守奎老师的数学建模与算法书籍。

在数学建模问题中,有很多类问题具有“季节性特点”。类似于不同蔬菜在一年四季中的价格变化、季节性服装在一年四季的价格变化等……

对于季节性时间序列的预测,可以采用“季节系数法”来预测时间序列的变化趋势。在时间序列问题中,季节并不单纯代表一年四季,一些既有季度性、周期性的时间序列也可以用季节系数法来进行预测,例如月份。其步骤如下:

  1. 收集m年中n个季度的时间序列样本数据
  2. 计算所有季度的算术平均值
  3. 计算每年中相同季度的算术平均值
  4. 计算季度系数:每年相同季度的算术平均值/所有季度的算术平均值
  5. 确认预测时间序列中,m年数据各自的权重(采用自然序列取值,比如第一年为1,第二年为2……),这意味着距离越近的年份,在预测时间序列中所占权重越大。
  6. 计算下一年的年加权平均,用每年各季度数据总和乘每年的权数再累加,比上权数总和
  7. 计算下一年的季度平均值:上一步的结果/季度数n
  8. 计算每个月第j季度的预测值:预测的季度平均值*季度系数

下面介绍实例:
在这里插入图片描述
首先我们把销售额存储到文本文档seasons.txt中,具体格式如下图:
在这里插入图片描述
之后用matlab编写代码,如下所示:

%清空命令行和工作区
clc,clear

fprintf("计算开始\n");

%导入数据
data = load("test1.txt");
%将data转化为矩阵,行向量years表示年份,列向量seasons表示季节
[years, seasons] = size(data);  

%求所有数据的算术平均值
years_mean = mean(mean(data)); 
%求同季节的算术平均值
seasons_mean = mean(data);
%计算季节系数
bj = seasons_mean/years_mean;
%赋权
w  = 1 : years;
%预测下一年的年加权平均值,季节平均值,季节预测值
pre_year = w * sum(data ,2) / sum(w);
pre_season_ava = pre_year/seasons;
pre_seasons = pre_season_ava * bj;
%打印结果
fprintf("下一年的年加权平均值:%.2f\n",pre_year);
fprintf("下一年的季节平均值:%.2f\n",pre_season_ava);
fprintf("下一年四个季度的季节预测值:");
fprintf("%.2f ",pre_seasons);
fprintf("\n");
fprintf("计算完成");

结果如下图所示:
在这里插入图片描述

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值