如何重构你的时间序列预测问题

你不必按照原样对你的时间序列预测问题进行建模。

有很多方法可以重新构建您的预测问题,既可以简化预测问题,也可以揭示更多或不同的信息进行建模。重构最终可以导致更好和/或更强大的预测。

在本教程中,您将了解如何使用Python重构您的时间序列预测问题。

完成本教程后,您将知道:

  • 如何将你的时序预测问题作为一个能替代的回归问题来进行重构。
  • 如何将你的时序预测问题作为一个分类预测问题来进行重构。
  • 如何用不同的时间范围重构时序预测问题。

让我们开始吧。

重构预测问题的好处

重新审视你的问题,是探索对将要预测的事物的另一种观点。

探索时间序列预测问题的替代框架有两个潜在的好处:

  1. 简化你的问题。
  2. 为集合预报提供基础

这两个好处最终将导致更加巧妙和/或更强大的预测。

1.简化你的问题

也许在预测项目上取得的最大好处是来自于重新构建问题。

这是因为预测问题的结构和类型有比其它问题如数据转换的选择,模型选择或模型超参数的选择多得多影响。

这是一个项目中影响最大的部分而且必须仔细考虑。

2.集合预报

除了改变你正在处理的问题之外,重构还有另外一个作用:它可以为你提供一套你可以建模的不同问题,这些不同问题是高度相关的。

这样做的好处是,框架可能会有所不同,需要在数据准备和建模方法上有所不同。

关于同一问题的不同观点模型可能会从数据输入中获取不同的信息,从而导致由不同方式产生的巧妙预测。这些预测可以被合并在一个集合中,以产生更好的预测。

在本教程中,我们将探讨可以考虑重新构建时间序列预测问题的三种不同的方法。

在我们进入之前,我们来看一个作为案例的简单单变量时间序列预测最低日温的问题。

最低每日温度数据集

这个数据集描述了澳大利亚墨尔本市十年(1981-1990)的最低日温度。

单位是摄氏度,有3650个观测值。数据的来源是澳大利亚气象局。

详细了解数据市场上的数据集

使用文件名“ daily-minimum-temperatures.csv ” 将最低日温度下载到当前工作目录。

注意:下载的文件包含一些问号(“?”)字符,在使用数据集之前必须将其删除。在文本编辑器中打开文件并删除“?”字符。也删除该文件中的任何页脚信息。

下面的例子将数据集加载为Pandas系列。

from pandas import Series
from matplotlib import pyplot
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)
print(series.head())
series.plot()
pyplot.show()

运行该示例将输出加载数据集的前5行。

Date Temperature
1981-01-01 20.7
1981-01-02 17.9
1981-01-03 18.8
1981-01-04 14.6
1981-01-05 15.8

时间序列的折线图也被创建。

最低每日温度数据集

朴素时间序列预测

朴素预测方法就是将上一期的实际数据作为下一期的预测值。

作为参考,我们把这个方法做出的预测成为朴素时序预测。

在这种情况下,我们可以移除时序中的季节性因素以达到时序的季节性平稳。

然后我们可以基于滞后观察的结果对时序建模。

例如:

Temp(t+1) = B0 + B1*Temp(t-1) + B2*Temp(t-2) ... Bn*Temp(t-n)

其中Temp(t + 1)是预测时序的下一个温度,B0Bn是从训练数据中学习到的系数,Temp(t-1)Temp(tn)是滞后的观察值。

这个方法的预测结果可能会很好甚至很多预测问题就是需要这种方法。

但此方法的风险在于,一个预先设想的关于如何构建问题的想法可能影响数据收集,进而可能限制结果。

回归框架

大多数时间序列预测问题是回归问题,需要预测实值输出。

下面是5种不同的方式,这个预测问题可以被重新表述为一个交替的回归问题:

  • 预测与前一天相比最低气温的变化。
  • 预测过去14天内相对于平均值的最低温度。
  • 预测相对于去年同月的平均最低温度。
  • 预测四舍五入到最接近5摄氏度的最低温度。
  • 预测未来7天的平均最低温度。

把温度看成一个线性变换可能并不会使问题变得简单且更容易预测,但它有可能会刺激新想法的生成,甚至产生可能让你考虑的新数据来源。

它也可以帮助你更清楚地思考如何使用预测以及对预测价值的实际要求是什么。

改变预测问题的粒度确实改变了问题的难度,如果问题的要求允许这样的重新定义,这个问题就非常有用。

下面是一个例子,重新设置最低日温度预测问题,以预测每日温度四舍五入到最接近的5倍数的值。

from pandas import Series
from pandas import DataFrame
from pandas import concat
from math import floo
# 加载数据
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)
# 创建滞后数据集
values = DataFrame(series.values)
dataframe = concat([values.shift(1), values], axis=1)
dataframe.columns = ['t-1', 't+1']
# 把预测值四舍五入到最近的5的倍数值
for i in range(len(dataframe['t+1'])):
    dataframe['t+1'][i] = int(dataframe['t+1'][i] / 5) * 5.0
print(dataframe.head(5))

运行该示例将输出重构的问题的前5行。

问题被定义为给定最低温度的前一天,摄氏度,最小值,精确到5度。

    t-1   t+1
0   NaN  20.0
1  20.7  15.0
2  17.9  15.0
3  18.8  10.0
4  14.6  15.0

分类框架

分类涉及预测分类或标签输出(如“热”和“冷”)。

下面是5种不同的方式,这个预测问题可以改写为一个分类问题:

  • 预测一个最低温度是冷的,中等的还是温暖的。
  • 预测最低温度的变化是小还是大。
  • 预测最低温度是否是每月最低。
  • 预测最小值是高于还是低于上一年的最低值。
  • 预测未来7天的最低气温是会上升还是下降。

转向分类可以简化预测问题。

这种方法打开了标签和二进制分类框架的概念。

输出变量的原始回归表示意味着大多数分类框架可能保持序数结构(例如冷,中,热)。这意味着所预测的类别之间存在有序的关系,预测“狗”和“猫”这样的标签可能不是这种情况。

序数关系允许一个难的分类问题以及一个整数预测问题,这个问题可以被事后整理成一个特定的类别。

以下是将最低日温度预测问题转化为分类问题的一个例子,其中每个温度值是冷,中,或热的序数值。这些标签被映射为整数值,定义如下:

  • 0(冷):<10摄氏度。
  • 1(中度):> = 10和<25摄氏度。
  • 2(热):> = 25摄氏度。

from pandas import Series
from pandas import DataFrame
from pandas import concat
from math import floo
# 加载数据
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)
# 创建滞后数据集
values = DataFrame(series.values)
dataframe = concat([values.shift(1), values], axis=1)
dataframe.columns = ['t-1', 't+1']
# 四舍五入预测值到最近的5的倍数
for i in range(len(dataframe['t+1'])):
    value = dataframe['t+1'][i]
    if value < 10.0:
        dataframe['t+1'][i] = 0
    elif value >= 25.0:
        dataframe['t+1'][i] = 2
    else:
        dataframe['t+1'][i] = 1
print(dataframe.head(5)

运行该示例将输出重新构建的问题的前5行。

给定前一天的最低温度(摄氏度),目标是预测温度为冷,中,热(分别为0,1,2)。

    t-1  t+1
0   NaN  1.0
1  20.7  1.0
2  17.9  1.0
3  18.8  1.0
4  14.6  1.0

时间的框架

另一个可以改变的轴是时间范围。

时间范围是正在预测的未来时间步数。

下面是5种不同的方式,这个预测问题可以在不同的时间范围内重新表达:

  • 预测未来7天的最低温度。
  • 预测30天内的最低温度。
  • 预测下个月的平均最低气温。
  • 预测下周最低气温最低的一天。
  • 预测一年的最低温度值。

但我们会很容易陷入需要一步预测的想法中。

关注时间范围内的问题的折射,会迫使你思考点与多步预测,以及未来要考虑的距离。

你可能能够预测到未来,但技能可能会有所不同,进一步降低你的计划。在考虑预测的视野时,还要考虑预测的最小可接受性。

下面的例子将最小日温度预测问题转换为预测未来7天的最低温度。

from pandas import Series
from pandas import DataFrame
from pandas import concat
from math import floo
# load data
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)
# Create lagged dataset
values = DataFrame(series.values)
dataframe = concat([values.shift(1), values, values.shift(-1),
    values.shift(-2), values.shift(-3), values.shift(-4), values.shift(-5),
    values.shift(-6)], axis=1)
dataframe.columns = ['t-1', 't+1', 't+2', 't+3', 't+4', 't+5', 't+6', 't+7']
print(dataframe.head(14))

运行该示例将输出转换数据集的前14条记录。

问题的定义是:给定从前一天的最低日温度,以摄氏度为单位,预测未来7天的最低日温度。

     t-1   t+1   t+2   t+3   t+4   t+5   t+6   t+7
0    NaN  20.7  17.9  18.8  14.6  15.8  15.8  15.8
1   20.7  17.9  18.8  14.6  15.8  15.8  15.8  17.4
2   17.9  18.8  14.6  15.8  15.8  15.8  17.4  21.8
3   18.8  14.6  15.8  15.8  15.8  17.4  21.8  20.0
4   14.6  15.8  15.8  15.8  17.4  21.8  20.0  16.2
5   15.8  15.8  15.8  17.4  21.8  20.0  16.2  13.3
6   15.8  15.8  17.4  21.8  20.0  16.2  13.3  16.7
7   15.8  17.4  21.8  20.0  16.2  13.3  16.7  21.5
8   17.4  21.8  20.0  16.2  13.3  16.7  21.5  25.0
9   21.8  20.0  16.2  13.3  16.7  21.5  25.0  20.7
10  20.0  16.2  13.3  16.7  21.5  25.0  20.7  20.6
11  16.2  13.3  16.7  21.5  25.0  20.7  20.6  24.8
12  13.3  16.7  21.5  25.0  20.7  20.6  24.8  17.7
13  16.7  21.5  25.0  20.7  20.6  24.8  17.7  15.5 

概要

在本教程中,您了解了如何使用Python重构您的时间序列预测问题。

具体来说,你了解到:

  • 如何设计你的时间序列问题的替代回归问题。
  • 如何将您的预测问题作为分类问题。
  • 如何设计预测问题的替代时间范围。

本文的版权归 QiqiHe 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

数据挖掘案例:基于 ReliefF和K-means算法的应用

.NET数据挖掘与机器学习 原文:http://www.cnblogs.com/asxinyu/archive/2013/08/29/3289682.html ...

2788
来自专栏用户2442861的专栏

相似图片检测:感知哈希算法之dHash的Python实现

某些情况下,我们需要检测图片之间的相似性,进行我们需要的处理:删除同一张图片、标记盗版等。 如何判断是同一张图片呢?最简单的方法是使用加密哈希(例如MD5, ...

441
来自专栏机器学习算法与Python学习

长文 | LSTM和循环神经网络基础教程(PDF下载)

目录: 前言 前馈网络回顾 循环网络 时间反向传播BPTT 梯度消失与梯度爆炸 长短期记忆单元(LSTM) 多时间尺度和远距离依赖 门控循环单元GRU LSTM...

40210
来自专栏null的专栏

机器学习中的特征空间

声明:这篇博文主要是对参考文献中的那个PPT的学习之后记下的一些笔记,整理出来与大家一起分享,若笔记中有任何错误还请不吝指出,文中可能会使用到原作者的一些图,若...

3296
来自专栏PPV课数据科学社区

【V课堂】R语言十八讲(八)—简单运算

这节我们将会讲解R语言基础的最后一节,数据的计算,包含了一些简单的统计数字特征和简单的四则运算,逻辑运算等等,也涉及到了矩阵方面的知识,由于数字特征,矩...

2294
来自专栏企鹅号快讯

Python数据分析与实战挖掘

基础篇 书推荐:《用python做科学计算》 ? 扩展库 简介 Numpy数组支持,以及相应的高效处理函数 Scipy矩阵支持,以及相应的矩阵数值计算模块 Ma...

3085
来自专栏AI派

如何使用sklearn加载和下载机器学习数据集

sklearn 中提供了很多常用(或高级)的模型和算法,但是真正决定一个模型效果的最后还是取决于训练(喂养)模型时所用的数据。sklearn 中的 sklear...

3955
来自专栏人工智能头条

李理:自动梯度求解 反向传播算法的另外一种视角

1424

用Pandas在Python中可视化机器学习数据

为了从机器学习算法中获取最佳结果,你就必须要了解你的数据。

1845
来自专栏AI研习社

史上最好记的神经网络结构速记表(下)

翻译 / 唐青 校对 / 李宇琛 整理 / 雷锋字幕组 本文提供了神经网络结构速查表,全面盘点神经网络的大量框架,并绘制直观示意图进行说明,是人手必备的神经网络...

40211

扫码关注云+社区