Competition09-时间序列

1 时间序列

1.1 简单定义

时间序列是按时间顺序索引的一系列数据点。

一般基于如下假设:

  • 数据文件中标签的值表示以等间隔时间进行的连续测量值。
  • 假设数据存在相关性,然后通过建模找到对应的相关性,并利用它进行预测未来的数据走向。

1.2 常见问题

  • 从变量变量角度,可以分为单变量时间序列和多变量时间序列
    • 单变量时间序列指仅具有的单个时间相关变量,所以仅受时间因素的影响。可能受到相关性、趋势性、周期性和循环性等因素的影响。一般该类问题可以看做是多变量时间序列的一部分。
    • 多变量时间序列具有多个时间相关变量,目标除了受到时间的影响外,还受到了其他因素影响。
  • 从预测目标角度,可以分为单步预测和多步预测
    • 单步预测是仅在训练集的时间基础上添加一个时间单位就可以作为测试集。实际上是一个普通回归问题,只不过输入变量不再是独立的特征变量,而是在时间线上有关系。
    • 多步预测需要多添几个时间单位作为测试集。一般有两种解决方法:
      • 第一种,step by step,以单步预测为基础,预测后就作为真实值加入训练集对下一个时间单位进行预测。缺点:误差累加。
      • 第二种,一次预测出所有时间步的结果,即看做多输出回归问题。这样避免了误差的累加,但是训练一对多的模型,加大了训练难度。、

1.3 交叉验证

一般来说为了模型稳定性,我们选择交叉验证。由于时间序列中包含时间结构,在保留这种结构的同时不能在折叠出现数据穿越的情况,使用滚动交叉验证

  • 思想是,使用初始时间到t时刻用来训练,然后从 t 到 t+n 时刻的数据用于线下验证,并计算批评价指标;
  • 接下训练数据扩展到 t+n 时刻,然后使用 t+n 到 t+2n时刻的数据进行验证;
  • 重复上面的步骤,直到达到最后一个标签值。验证次数可以自由控制,多次验证结果取平均值得到最终线下验证结果。

1.4 基本规则方法

由于数据中存在噪声或者由于发生了某些突发情况,导致模型不能学习到所有信息,使用规则方法能带来帮助。

  • 加权平均

    加权平均就是先获取最近 N 个时间单位的值,如果数据存在周期性,也可以环比提取,即昨天、上周、上个月对应单位的值;然后将提取出的数据加权求和,通常离当前时间点越近的数据重要程度越高。一般来说,N 值一般考虑短期历史数据。加权平均公式如下:
    y t = 1 N ( w 1 × y t − 1 + w 2 × y t − 2 + ⋯ + w N × y t − N ) y_t = \frac{1}{N}(w_1 \times y_{t-1} + w_2 \times y_{t-2} + \cdots +w_N \times y_{t-N}) yt=N1(w1×yt1+w2×yt2++wN×ytN)
    y y y 为当前时间单位的数值。

    对于 N 值得选择和权重的确定是困难的,所以可以通过简单地线性搜索来确定 N 值和权重,线下验证进行最优搜索方式的公式是:
    θ ˉ = a r g   m a x θ ∑ i = 1 N s c o r e ( y i , p r e d i ) \bar \theta = arg \ \mathop{max}_{\theta} \sum^N_{i=1} score(y_i, pred_i) θˉ=arg maxθi=1Nscore(yi,predi)

  • 指数平滑

    在时间预测问题中,距离预测单位越近的时间点越重要。将每个时间单位的权重按照指数及进行衰减,并最终进行加权,这种方法称为指数平滑。其公式为:
    y ^ t = a ∑ n = 0 t ( 1 − a ) n y t − n \hat y_t = a \sum_{n=0} ^ t (1 -a)^n y_{t - n} y^t=an=0t(1a)nytn
    其中, y ^ t \hat y_t y^t 是第 t t t 个时间点经过上面指数平滑后得到的值, y t − n y_{t - n} ytn 为第 t − n t - n tn 个时间点上的实际值, n n n 是取当前时刻的前 n n n 个历史数据。 a a a 可理解为可调节参数, a ∈ ( 0 , 1 ) a \in (0, 1) a(0,1) ,也称为记忆衰减因子。

2 时间序列模式

2.1 趋势性

趋势性就是在很长一段时间内呈现数据持续上升或者下降的变动,不仅线性的,周期也可以。一般可以分为一介趋势和二阶趋势进行构造。一阶主要为相邻时间单位的数据分差、比例,反应相邻时间单位数据变化程度;二阶在一阶基础上进一步构建,主要反应一阶变化快慢。

2.2 周期性

周期性是指一段时间序列内重复出现的波动,很多时间序列预测问题都存在周期性。

周期性可以通过环比表现,也就是说周期中相同位置的数据更相似。

2.3 相关性

时间序列中的相关性又称为自相关性,描述的是某一段序列存在相关性,这是必然的,否则就无法预测未来了。

2.4 随机性

随机性是除了上面三个毛事之外的随机扰动。针对随机性:(1) 可以通过简单的异常标注来解决,比如特殊日期、活动; (2) 进行预处理,删除异常值。

3 特征值提取方式

主要围绕时间序列的延迟(历史信息数据)展开,可以分为两类历史平移窗口统计两种。还有序列熵特征和额外补充的其他特征。

3.1 历史平移

时间序列数据存在前后关系,比如今天的气温受昨天的影响。也就是说,时间序列中越相近的标签,其相关性越高。借助这个特性构造历史平移特征,即直接将历史记录作为特征。

具体的,如果当前时刻为 t t t ,那么可以将 t − 1 、 t − 2 、 ⋯ t − n t - 1 、t - 2、\cdots t - n t1t2tn 时刻的值作为特征,这个值可以是标签值,也可以是与标签值存在关联性的值。

3.2 窗口统计

不同于历史平移从单个序列单位中提取特征,窗口统计是从多个序列单位中提取特征,窗口统计可以反映区间内序列数据的情况。比如最大值、最小值、均值、中位数和方差。窗口大小不固定。

3.3 序列熵特征

熵用来反映数据的确定性,用来挖掘数据序列的稳定性,计算公式为:
e n t r o p y ( X ) = − ∑ i = 1 N P { x = x i } ln ⁡ P { x = x i } entropy(X) = -\sum^N_{i=1} P\{x=x_i\}\ln P\{x=x_i\} entropy(X)=i=1NP{x=xi}lnP{x=xi}
代码的简单实现:

import math
import collections
def entropy(nums):
    count = collections.Counter(nums)
    n = len(nums)
    for k,v in count.items():
        count[k] = v / n
    res = 0
    for v in count.values():
      res -= v * math.log(v, 2)
    return res
res1 = entropy([1,2,1,2,1,2,1,2,1,2,1])
res2 = entropy([1,1,2,1,2,2,2,2,1,1,1])
res3 = entropy([1, 2, 1, 2, 1, 2, 1, 2, 1, 2 ])
res4 = entropy([1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1 ])
res5 = entropy([1, 2, 3, 4, 2, 1, 2, 4, 3, 2, 3, 4, 1, 1, 1 ])
res6 = entropy([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ])

print(res1, res2,res3, res4,res5, res6)

3.4 其他特征

除了上面三个外,还有很多常用特征,分为两类:

  • 时间特征:比如小时、天、周,一天中的某个时间段(如上午,下午),距离某日还有几天,是否为节假日;
  • 统计特征:基本的统计特征有最大值、最小值、均值、中位数、方差、标准差、偏度、峰值,另外还有一阶差分、二阶差分、比例相关特征。

4 模型多样性

一般来说,将以下这些模型都跑一边,首先可以找到好的单模,其实为后面的模型融合做准备。

4.1 传统的时序模型

差分自回归平滑平均模型(ARIMA)是一种常见的时序模型。它包括自回归模型(AR),p是自回归系数,移动平均模型(MA),q是移动平均窗口大小,d是成为稳定序列所进行的差分次数;I代表积分,表示数值以被当前值和先前值之间的差值替换(这个微分过程可能已经执行了不止一次)。

三次指数平滑主要是基于数据趋势性和季节性的描述,而ARIMA模型主要描述的数据之间的相互关系。它中的三部分的目的就是使模型更加容易拟合历史数据,能够在较大时间范围内获得较高的准确性。

  • 参数确定

    p、d和q均为非负数,首先进行d阶差分,将时间序列数据转换为平稳时间序列,然后分为求得平稳时间序列的ACF图和PACF图,通过这个两个图得到最佳的阶层p和阶数q。

4.2 树模型

树模型是比较通用的模型,当趋势性和季节性相对稳定,并且噪声较小的时候,树模型是非常合适的。可以通过一些处理来降低时间序列的趋势性,使之变得平稳。

使时间序列转换为平稳序列的方法有对数处理、一阶差分、季节性差分等。一般而言,先进行平稳性调整,然后进行训练,最后结果再进行转换即可。这三种方法可以单独使用,也可以组合。

4.3 深度学习模型

  • 卷积神经网络
  • 长短期记忆网络
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我哈士奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值