时间序列数据的特征工程总结

        当下时间序列预测的方法主要有三种吧,第一个是传统的时间序列预测方法,典型代表有ARIMA和指数平滑法;第二个是基于机器学习的方法,目前用的最多的是lightgbm和xgboost,在很多时序预测比赛前几名的方案都可以看到这两种方法;第三个是基于深度学习的方法,如RNN、LSTM等。现在传统时序预测的方法的预测精度都已经不如基于机器学习和深度学习的方法了,但是后者依赖于特征工程,特征调教的好的话是可以达到很高的预测精度的,因此,本文就总结下时间序列数据常见的特征工程方法。
        一个典型的时间序列数据,会包含以下几列:时间戳,时序值,序列的属性变量,比如下图,日期就是时间戳,销量就是时序值,如果是多序列的话可能还会有序列的属性变量,如城市、产品、价格等。


        因此,时间序列的特征工程也大多是基于这三个数据衍生出来的:

接下来将一一展开:

1. 时间戳衍生的特征

        时间戳虽然只有一列,但是也可以根据这个就衍生出很多很多变量了,具体可以分为三大类:时间特征、布尔特征,时间差特征

1.1 时间特征

  • 季度
  • 天:一年、一月、一周的第几天
  • 小时
  • 分钟
  • ...

1.2 布尔特征

  • 是否年初/年末
  • 是否月初/月末
  • 是否周末
  • 是否节假日
  • 是否特殊日期
  • 是否早上/中午/晚上
  • ...

1.3 时间差特征

  • 距离年初/年末的天数
  • 距离月初/月末的天数
  • 距离周末的天数
  • 距离节假日的天数
  • 距离特殊日期的天数
  • ...

2. 时序值衍生的特征

        因为时间序列是通过历史来预测未来,那么,这个时序值的历史数据,也就是当前时间点之前的信息就非常有用,通过他可以发现时间序列的趋势因素、季节性周期性因素以及一些不规则的变动,具体来说这部分特征可以分为三种:滞后值、滑动窗口统计和拓展窗口统计。

2.1 滞后值

        也称lag feature,比如对于t时刻的数据,我们认为他是跟昨天的数据、上周同一天的数据、上个月同一天的数据、去年同期的数据是高度相关的,那么,我们就可以将t-1、t-7、t-30、t-365的数据用来做特征。
        但是在使用滞后值作为特征时需要注意一点,就是当在进行多步预测的时候,如果预测的horizon超过了滞后的期数,那么这时候就得使用递归的方式,将先前预测的值作为特征,举个例子,使用滞后一期的值作为特征,当前时间点为2021-07-10,我要预测2021-07-11和2021-07-12的股票价格,那么2021-07-11的值是可以预测的,因为我有2021-07-10的数据,但是2021-07-12的数据就不行了,因为我没有2021-07-11的数据,所以这时候一种做法就是将先前2021-07-11的预测值直接作为特征的输入,对于这种预测就得一行一行来,预测一行,拿预测值作为输入,再预测一行,再得到预测值,再预测一行,以此类推...

2.2 滑动窗口统计

        除了使用原始Lag值作为特征,还可以使用先前时间观察值的统计信息作为特征,这种类型的特征叫做滑动窗口统计,Rolling Window Statistics。比如对于t时刻,我们可以取前七天的统计值作为特征,也就是将t-1~t-8这个时间段数据的平均数、中位数、标准差、最大值、最小值等作为特征,这里指定的window就是7,也可以根据需要指定14,30等,可以发现,上面说的滞后值特征其实就是一种特殊的滑动窗口,他的window=1,然后滑动窗口统计也是可以指定滞后的期数来衍生出更多的特征的,比如七天前那个时刻的前七天数据的统计量。
同理,在构造这种特征的时候,也需要注意一下在多步预测时可能出现的问题。

2.3 扩展窗口统计

        另一种特征叫做扩展窗口统计(Expanding Window Statistics),其实也算是一种特殊的滑动窗口统计,不过他用来统计的数据是整个序列全部的数据,统计值可以是平均数、中位数、标准差、最大值、最小值等,这种特征一般是用在多序列建模,比如不同的股票价格,可能会有着不同的内在属性,在预测的时候用这个特征作为区分也是一种方式。

3. 序列属性衍生的特征

3.1 连续变量衍生

        一个序列可能会伴有多个连续变量的特征,比如说对于股票数据,除了收盘价,可能还会有成交量、开盘价等伴随的特征,对于销量数据,可能还会伴随有价格的特征。对于这种连续变量,可以直接作为一个特征,也可以像之前时序值衍生的特征那样做处理,或者也可以与先前的数据做差值,比如t时刻的价格减去t-1时刻的价格。但是一般这种连续变量使用不多,因为这些值在未来也很可能是不可知的,那怎么能当成造特征呢?比如我要预测明天股票的收盘价,要用成交量作为一个特征,但是我怎么知道明天的成交量呢?这又是一个预测问题了。

3.2 类别变量Encoding

        对于类别型变量,如果类别比较少,一般在机器学习里做的处理是one-hot encoding,但是如果类别一多,那么生成的特征是会很多的,容易造成维度灾难,但是也不能随便用label encoding,因为很多时候类别是不反应顺序的,如果给他编码成1、2、3、4、5,对于一些树模型来说,在分裂节点的时候可不管这些是类别型还是连续型,通通当作连续型来处理,这是有先后顺序的,肯定不能这么做。所以就有这么一种方式,就是和y做特征交互,比如预测销量,有一个特征是产品类别,那么就可以统计下这个产品类别下的销量均值、标准差等,这种其实也算是上面扩展窗口统计的一种。

4. 参考

  1. 《美团机器学习实践》
  2. 一度让我怀疑人生的时间戳特征处理技巧。
  3. Basic Feature Engineering With Time Series Data in Python
  4. 时间序列树模型特征工程汇总
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
时间序列特征工程的目标是使用过去的数据提取特征,以预测未来的时间序列。这个过程通常包括以下步骤: 1. 特征提取:特征提取是将时间序列转化为可供机器学习算法使用的特征向量的过程。可以通过在每个时间步骤中用一组统计数据总结过去的数据来完成。这些统计数据可以包括均值、方差、最小值、最大值、趋势等。 2. 自回归问题:将时间序列转化为自回归问题是一种常见的方法。这可以通过将过去的时间步骤作为解释变量,未来的时间步骤作为目标变量来实现。例如,可以使用过去24个时间步骤的值来预测未来12个时间步骤的值。这可以通过函数time_delay_embedding来完成。 3. 特性工程:特性工程是一个特别的过程,它基于数据科学家的领域知识和专业知识来创建特性。在多元时间序列中,特性工程可以包括创建滞后特性、移动平均特性、时序统计特性等。特性工程的目标是提取有意义的特性,以增强模型对未来的预测能力。 综上所述,时间序列特征工程可以通过提取特征、转化为自回归问题和进行特性工程来预测未来的时间序列。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [多元时间序列特征工程的指南](https://blog.csdn.net/m0_46510245/article/details/128159499)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值