前言
最近项目不是很赶,手头的活也做完了,也正好遇到今年的全国数模大赛,作为一个已经退休的数模老学长岂有不参与一下的理由!博主参与过十余次数学建模大赛,美赛获得过M奖,国赛二等奖。这次写此博文纯属于自娱自乐,大家可以参考,主要是E题正好命中我最近研究的课题,时间序列预测模型,正筹找不到数据呢,这不就来了~顺便还能给大家提供一点思路,当然粉丝内部可以得到更多的思路和代码,也是第一次写关于数模思路的文章,可能一些写入太多哈。期待各位的关注。
博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。
一、赛题分析
我们直接从赛题题目提出的问题来分析,进入赛题重述环节:
1.问题一
请对附件中的历史数据进行分析,选择 6 种应当重点关注的物料(可从物料需求出现的频数、数量、趋势和销售单价等方面考虑),建立物料需求的周预测模型(即以周为基本时间单位,预测物料的周需求量,见附录(1)),并利用历史数据对预测模型进行评价。
这里我们需要注意一下附件的说明:
将附件数据第 1 次出现的时间(2019 年 1 月 2 日)所在的周设定为第 1 周,以后的每周从周一开始至周日结束,例如,2019 年 1 月 7 日至 13 日为第 2 周,以此类推。
在制定本周的生产计划时,可以使用任何历史数据、需求特征以及预测数据,但不能使用本周及本周以后的实际需求数据。
服务水平 = 1 −缺货量/实际需求量 。
库存量和缺货量分别指物料在周末的库存量和缺货量。
再来看看附录数据:
非常标准的时序数据,太好了我之前做时序预测模型正好缺乏此时序数据,这里正好可以拿来使用一下。那么根据上述信息我们来着手问题分析了。
问题分析
首先我们抓住题目的重点-选择 6 种应当重点关注的物料,注意括号里面的内容:
可从物料需求出现的频数、数量、趋势和销售单价等方面考虑
题目也是给的很明显,那么我们就根据这些指标来进行相应的分析:
我们发现总共有22453行数据,从19年1月2日星期一到22年5月21日,这里我们需要看一下日期:
附件数据第 1 次出现的时间(2019 年 1 月 2 日)所在的周设定为第 1 周,那么也就是周三开始,到19年1月6日结束,这只有5天为第一周,与其他7天一周不同。再看22年5月21日:
那么最后一周也只有16号道21号这6天,这需要注意一下,第一周的仅有五天,而最后一周只有6天。周期余留问题解决后,我们在来统计一下物料出现的频率:
物料频率
这个好解决,直接Pandas分析即可:
觉大多数是出现在1-82的频次的,但是题目让我们选出六种那么我们需要综合考虑,我们可以进行排序将前10位的物料排名出来。
需求量
需求量分析的话就更简单,我们需要进行聚合操作之后再排序,考虑总体需求量即可,当然也可以做的更细,将时间和频率结合起来,但是不需要,因为我们后续会整合统一考虑。
依然选出前10,当然我们根据后续的选择可以扩大范围,不用那么着急:
趋势
趋势的话我们需要集合时间序列来分析,也就是物料需求的时序长度,这个也与频次有关。我们先来看一个物料的需求变化:
那么我们需要知道可以反应趋势的统计变量有哪些:
- MACD
- DMI
- DMA
- EXPMA
这几个随便挑一个用就行了,我这里有已经编写好了的MACD方法调用即可:
销售单价
销售单价最重要的考虑点是应该和需求量结合考虑的,而不应该单独考虑,我们需要计算成本:
成本=需求量*销售单价得到这个成本指标,再综合考虑。这里还有一个就是可以更加细化考虑的点:那就是销售单价趋势,这个方法和上述需求量趋势波动计算方法一样,采取趋势指标即可。
这里处理过程也是聚合操作,很简单不再展示,直奔周预测模型:
时序预测模型
终于到了时序预测模型了即以周为基本时间单位,预测物料的周需求量。那么关于时序预测模型在我全部系列文章已经写出:
此专栏将所有的时序预测模型展示出:
我们只需要将整合的特征数据代入计算,然后交叉验证正确性再选出最优秀的算法即可。