项目总结 | 对【时间】构建的特征工程

写文章的目的在于之前面试的时候,提到某一个时间序列项目的特征工程处理。我说的大多数都是一些数据清洗、数据去除异常点、针对数据特性做出的特别的特征工程的操作,然后面试官给我的建议是下一次面试多说一下常规的特征工程处理,因为这样面试官才会跟你有共鸣,能更好的理解你说的特征工程是什么。

本文主要讲述一些比较有意思的特征工程。但是这个有意思就是不那么普通,但是也不那么特殊,让人看了耳目一新的那种感觉。

有趣的特征工程

【节假日消耗的能源更多?】
不管是什么任务中,预测家庭能源消耗、预测消费情况等等,节假日都是一个需要注意的特征,因为放假了就会消耗更多的能源,产生更多的消费购物

不过需要注意的是:欧美国家的一些节假日和中国不一样,所以需要看一下欧美的法定节假日日期以及周末的放假日期。

【分离时间戳产生更多特征?】
一般时间戳timestamp可能是这样的格式:13:21 20/3/1997,这样的话,可以把这个timestamp分离成5个特征:hour,minute,day,month,year。

进一步的,可以对小时数据进行数据探索分析,看看是否存在白天黑夜的不同导致的对预测结果的影响?对day和month进行分析,看看是否存在节假日对预测结果的影响。

【日期数据的循环性】
通常对于上面的hour特征是[0,23]的,但是其实0点和23点并不像数字本身看起来差别那么巨大,所以可以使用cos或者sin来将时间变成一个循环。相似的是星期一与星期日的差别。

【其他的tricks】

  1. 人造节日是否考虑进去?中国的6.18,5.20,11.11,12.12等
  2. 季节导致的偏移是否存在?可能同样的情况春天发生和秋天发生并不相同?

常规的特征工程

滑动窗口法。寻找100个时间相邻的样本的某一个特征的某一个统计特性,比如:

  • 均值mean()
  • 中位数median()
  • 最大值max()
  • 最小值min()
  • 标准差std()
  • 四分位点quantile(q=0.25)/quantile(q=0.75)
  • 数据的偏度df.skew()
  • 数据的峰度df.kurt()
  • 数据的绝对离差df.max(),数据与其均值的差的绝对值的平均值
  • 绝对值的最大值
  • 绝对值的最小值
  • 梯度的绝对值
  • 最大值与最小值的差值
  • 最大值与最小值的倍数
  • 使用时间序列的shift偏移

周期性的特征工程

部分时间特征是具有周期性的。可能是一个月是一个周期,也可能一个季度,一年等等。为了寻找这个周期性,可以使用自相关系数来寻找。简单的说,就是通过平移特征工程,然后绘制自相关系数随着平移距离的函数图像。

有了这个周期性之后,就可以构建更多的特征。比方说同比(去年同月)或者环比(相邻月份)。环比和同比一般都是比率,我们可以再构建这个环比的梯度,类似二阶差分。

卡尔曼滤波器

在百度搜索“时间序列 滤波”等关键词的时候,会发现有下面的内容:



使用kalman滤波器好像可以作为时间序列的一种特征工程。

其实是这样的,在处理一些微观数据的时候,有的时候观测仪器会存在测量误差,这个时候我们可以使用卡尔曼滤波器来进行一定的矫正。

对于每一个时间点的数据,获取的方法有两个:

  • 第一个就是观测,但是测量的结果不一定准确,可能受限于测量仪器的精度?
  • 第二个就是用这个时间点之前的所有数据,预测这个时间点的数据,当然,这个预测值也是不准的。
  • 可否利用这两种方法,相互促进,预测的值更准,或者说让观测到的值更接近本质?Kalman Filter卡尔曼滤波器就这样做的。

这里不加赘述了,更多内容可以看这篇文章,通俗讲解了卡尔曼滤波器以及python实现方法,方便下次直接拿轮子来用:
kalman filter-卡尔曼滤波器与python实现



posted @ 2020-07-27 06:40  忽逢桃林  阅读(193)  评论(0编辑  收藏
Flag Counter