前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >时序问题中强的不得了的特征。

时序问题中强的不得了的特征。

作者头像
炼丹笔记
发布2021-12-28 09:08:42
7740
发布2021-12-28 09:08:42
举报
文章被收录于专栏:炼丹笔记炼丹笔记

时间序列周期性特征

简介

在时间序列问题中,周期特征是异常重要的,例如:

  • 地铁流量预测中的周期性,每周一到周五的早上地铁流量就特别大,但是到了周末人就比较少;
  • 股票涨跌的预测问题中,在节假日之前,例如国庆等,白酒等的股价就会有提升;
  • 在降雨量的预测中,每年的某些时节,降雨量就会大幅提升;
  • 在电量预估问题中,因为夏天温度较高的原因,每年的夏天用电量会大幅提升;
  • ......

上面这些在某些固定时间点周而复始的出现某种现象的,我们一般称之为周期性,那么在时间序列问题中,我们如何捕捉这些周期性呢?

此处我们介绍两种常见的周期性特征。

  1. 周期性indicators:适合于观测较少的情况,比如每周观测一次的周期;
  2. 傅里叶特征:适合于存在许多观测的周期,比如每年每日观测周期;

时间周期特征

01周期性indicators

周期性indicators一般就是表示时间序列周期性的一些二元特征。例如每周一我们的数据呈现出某种周期性,我们会加入是否为周一来表示该信息,例如下表所示。

02傅里叶特征

周期性indicators一般是我们有一些先验知识,但是还有一类数据,它的周期可能是每隔20天一次的周期,我们可以很容易的从图像中观测到,但是往往没法使用周期性indicators来捕捉此类信息。

此时我们可以使用傅里叶特征尝试捕捉此类到信息。

  • 傅立叶特征就是一对正弦和余弦曲线,从最长的周期开始,每个潜在频率对应一对。傅里叶对建模年度周期性的频率:每年一次、每年两次、每年三次,依此类推。

如果我们把这些sine和cosine的曲线加入到我们的训练集合中,往往可以取得不错的帮助,尤其是对于线性类的模型。

代码

  • 代码摘自:https://www.kaggle.com/ryanholbrook/seasonality

01自己定义

代码语言:javascript
复制
import numpy as np


def fourier_features(index, freq, order):
    time = np.arange(len(index), dtype=np.float32)
    k = 2 * np.pi * (1 / freq) * time
    features = {}
    for i in range(1, order + 1):
        features.update({
            f"sin_{freq}_{i}": np.sin(i * k),
            f"cos_{freq}_{i}": np.cos(i * k),
        })
    return pd.DataFrame(features, index=index)


# Compute Fourier features to the 4th order (8 new features) for a
# series y with daily observations and annual seasonality:
#
# fourier_features(y, freq=365.25, order=4)

02使用statsmodels工具包

代码语言:javascript
复制
from statsmodels.tsa.deterministic import CalendarFourier, DeterministicProcess

fourier = CalendarFourier(freq="A", order=10)  # 10 sin/cos pairs for "A"nnual seasonality

dp = DeterministicProcess(
    index=tunnel.index,
    constant=True,               # dummy feature for bias (y-intercept)
    order=1,                     # trend (order 1 means linear)
    seasonal=True,               # weekly seasonality (indicators)
    additional_terms=[fourier],  # annual seasonality (fourier)
    drop=True,                   # drop terms to avoid collinearity
)

X = dp.in_sample()  # create features for dates in tunnel.index

适用问题

如果可视化分析中发现数据存在周期性的话,就可以使用上面的两种策略进行周期性特征的抽取。

参考文献

  1. Seasonality
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 炼丹笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档