另一篇博文地址:时间序列arima预测:https://blog.csdn.net/u014281392/article/details/77585419

做时间序列预测,
传统模型:比如ARIMA模型,一次只能对一组时间序列数据进行预测,比如预测某个品牌下某家店未来销售额。

现实情况中需要预测某个品牌下每家店未来的销售额。也就是说,如果这个品牌在某地区一共有100家店,我们就需要给出这100家店分别对应的销售额预测值。
此时传统模型便不再适合。

时间序列预测模型建模思路

  1. 初始数据集

    一开始拿到的数据可能是分好训练集、测试集的,也可能是没分好的。这里我按照竞赛的情况假设一开始的数据集分有训练集和测试集。

对于时间序列数据来说,训练集即为历史数据,测试集即为新数据。历史数据对应的时间均在时间分割点之前(如2018年以前某品牌每家店每天的销售数据),新数据对应的时间均在分割点之后(如2018年以后某品牌每家店每天的销售数据)。

历史数据和新数据均包含N维信息(如某品牌每家店的地理位置、销售的商品信息等),但前者比后者多一列数据:Target,即要预测的对象,如销售额。

基于给出的数据,我们的预测任务是:根据已有数据,预测测试集的Target(如,根据某品牌每家店2018年以前的历史销售情况,预测每家店2018年1月份头15天的销售额)

  1. 数据处理
    在构建预测特征上,截面数据和时间序列数据遵循的逻辑截然不同。下面两张图分别是二者的数据处理逻辑示意图。

首先来看针对截面数据的数据处理思路。


对于截面数据来说,训练集数据和测试集数据在时间维度上没有区别,二者唯一的区别是前者包含要预测的目标变量,而后者没有该目标变量。

一般来说,在做完数据清洗之后,我们用“N维数据”来分别给训练集、测试集构建M维预测特征(维度相同),然后用机器学习算法在训练集的预测特征和Target上训练模型,最后通过训练出的模型和测试集的预测特征来计算预测结果(测试集的Target)。

此外,为了给模型调优,我们一般还需要从训练集里面随机分割一部分出来做验证集。

而时间序列的处理思路则有所不同


时间序列预测的核心思想是:用过去时间里的数据预测未来时间里的Target。

所以,在构建模型的时候,所有过去时间里的数据(训练集里的N维数据和Target,如2018年以前每家店的地理信息、所卖商品信息、日销售额等)都应该拿来构建预测特征。

而新数据本身的N维数据(如2018年1月头15天每家店的地理信息、所卖商品信息等)也应该拿来构建预测特征。

前者是历史特征(对应图上的预测特征A),后者是未来特征(对应图上的预测特征B)。二者合起来构成总预测特征集合。

最后,用预测模型和这个总的预测特征集合来预测未来Target(如未来销售额)。

看到这里,一个问题就产生了:既然所有的数据都拿来构建预测特征了,那预测模型从哪里来?没有Target数据,模型该怎么构建?

你可能会说,那就去找Target呗。对,没有错。但这里需要注意,我们要找的不是未来时间下的Target(毕竟未来的事还没发生,根本无从找起),而是从过去时间里构造“未来的”Target,从而完成模型的构建。这是在处理时间序列上,逻辑最绕的地方。

3. 模型构建
用机器学习算法构造时间序列预测模型,关键的思路在于,通过时间滑窗,人为地构造“未来”Target,来给算法进行学习。

有点绕,请看下面的示意图

和之前一样,从时间的角度上来看,我们有历史数据,和新数据。但这里,我们不能简单地把历史数据作为训练集、把新数据作为测试集。

怎么做呢。

首先,在历史数据上,我们通过截取不同时间窗口的数据来构造一组或几组数据。比如,我的历史数据是2017年 1月到12月每家店每天的销售数据,那么我可以截取3组数据(见上图的深绿、浅绿部分):2017年1月到10月的数据、2017年2月到11月的数据、2017年3月到12月的数据。

然后,人为地给每组数据划分历史窗口(对应上图的深绿色部分)和未来窗口(对应上图的浅绿色部分)。比如,对于2017年1月到10月的数据,我把1月到9月作为历史窗口、10月作为未来窗口,以此类推。

接着,分别给每组数据构建预测特征,包括历史特征(预测特征A)和未来特征(预测特征B)。而此时,每组数据还有预测Target。

这个时候,我们把得到的所有预测特征(我的例子里是三组预测特征)都合并起来作为训练集特征、把所有预测Target(我的例子里是三组预测Target)合并起来作为训练集Target,之后就可以构建机器学习模型了。

有了训练集和训练模型,还差测试集。测试集的构建遵循之前的数据处理逻辑,拿历史数据构建历史特征,拿新数据构建未来特征,然后把这些特征加入到从训练集上训练出的预测模型中去,即可得到任务需要的最终预测值。

这里需要注意,划多少个时间窗口因数据而异。此外,数据的历史窗口(图上深绿部分)和未来窗口(图上浅绿部分)可以是定长也可以是变长,看具体情况。

以上就是我最近总结出的用机器学习算法构建时间序列预测模型的建模思路。

时间序列预测竞赛代码:
https://github.com/wepe/O2O-Coupon-Usage-Forecast

转载来源:https://blog.csdn.net/weixin_42587745/article/details/82965531

机器学习做多维时间序列预测相关推荐

  1. 机器学习多步时间序列预测解决方案

    点击上方入口立即[自由构建 探索无限] 一起共赴年度科技盛宴! 1 简介 近年来,随着机器学习与深度学习的发展,以及 Amazon SageMaker (https://aws.amazon.com/ ...

  2. keras 多维时间序列预测

    原文链接 from math import sqrt from numpy import concatenate from matplotlib import pyplot from pandas i ...

  3. 机器学习与时间序列预测

    机器学习与时间序列预测  爱斯翠摩鸡 关注 2018.03.15 14:02* 字数 2186 阅读 2711评论 8喜欢 9 前言 在所有的预测问题里面,时间序列预测最让我头疼. 做时间序列预测,传 ...

  4. 【深度学习论文翻译】基于LSTM深度神经网络的时间序列预测(Time Series Prediction Using LSTM Deep Neural Networks)

    目录 一.前言 二.摘要 三.什么是LSTM神经元? 四.简单正弦波示例 五. 不那么简单的股票市场 六.多维LSTM预测 七.结论 一.前言 最近需要用到时间序列,在网上也找到了一篇相关的文章及源代 ...

  5. 【时序】时间序列预测真的需要深度学习吗?

    论文名称:Do We Really Need Deep Learning Models for Time Series Forecasting 论文下载:https://arxiv.org/abs/2 ...

  6. SLS机器学习介绍(05):时间序列预测

    00系列文章目录 0.1 算法原理目录 SLS机器学习介绍(01):时序统计建模 SLS机器学习介绍(02):时序聚类建模 SLS机器学习介绍(03):时序异常检测建模 SLS机器学习介绍(04):规 ...

  7. 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

    多维时序 | MATLAB实现基于VMD-SSA-LSSVM.SSA-LSSVM.VMD-LSSVM.LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSS ...

  8. adf机器_智能运维高招 | 基于机器学习的磁盘故障预测

    原标题:智能运维高招 | 基于机器学习的磁盘故障预测 导读 RGF算法+迁移学习精确预测硬盘故障.<Predicting Disk Replacement towards Reliable Da ...

  9. 机器学习(MACHINE LEARNING)使用ARIMA进行时间序列预测

    文章目录 1 引言 2 简介 3 python代码实现 4 代码解析 1 引言 在本文章中,我们将提供可靠的时间序列预测.我们将首先介绍和讨论自相关,平稳性和季节性的概念,并继续应用最常用的时间序列预 ...

  10. 机器学习笔记 时间序列预测(基本数据处理,Box-Cox)

    数据调整 调整历史数据通常会导致更简单的预测任务. 在这里,我们处理四种调整:日历调整.人口调整.通货膨胀调整和数学变换. 这些调整和转换的目的是通过消除已知的变化源或通过使整个数据集的模式更加一致来 ...

最新文章

  1. pear Auth的使用
  2. cordova 更改app版本_ionic项目中使用cordova-hot-code-push插件
  3. scala学习笔记-Array、ArrayBuffer以及遍历数组(7)
  4. MySQL基础操作(一)
  5. Docker,一个傲娇的男人
  6. iOS 开发中,单款应用程序的最大可用内存是多少?
  7. 序列中连续值之间的差值列表
  8. 创建对象、原型、原型链
  9. 2017-02-26,周日整理
  10. 使用Palette来对图片进行颜色提取
  11. 我的搜狗拼音皮肤和细胞词库都发布咯!
  12. 施一公:优秀的科学家如何成长?
  13. 深入理解CAS-认证原理
  14. ISP Pipeline lens shading
  15. 2D物理引擎--谁碰了我的奶酪
  16. Android手机录制屏幕及转GIF
  17. android2.2智能手机,Jelly 2:全球最小的Android 10 4G智能手机
  18. Android手电筒案例
  19. SPI器件的菊链配置
  20. windows安装Rocket因为JAVAHOME空格导致找不到加载类问题

热门文章

  1. Excel 如何在替换0时,不替换含0的值?
  2. cas39828-57-4/四对甲氧苯基卟啉镍/Nickel(II) tetramethoxyphenylporphyrin/分子式:C48H36N4NiO4/分子量:791.53/保存注意事项
  3. 华为无线AC间三层漫游
  4. 猿辅导运营实习个人面试总结
  5. 程序员副业赚钱之我是如何通过编程实现财务独立的
  6. kubeadm搭建k8s高可用集群(keepalived+nginx+3master)
  7. python游戏设计论文_02 讲:用 Python 设计第一个游戏
  8. 你真的了解过度绘制吗?
  9. 基于ZC706开发板进行SD卡烧写
  10. 《图书管理系统——“书籍借出”模块》项目研发阶段性总结