52phm简介


专注于工业智能预警系统研发, 通过机理算法和数据驱动算法分析振动信号、音频、DCS、PLC信号、SCADA信号等设备运行状态数据对机器设备进行看病预诊,为机器设备健康运行保驾护航。 网站正在不断建设和完善过程中,欢迎大家给予建议和参与社区建设

联系我们


投稿说明


52phm,专注于预测性维护知识学习和交流,欢迎广大从事预测性维护行业人员投稿,投稿请联系管理员(wx: www52phmcn),投稿内容可以是:

  • 学习笔记
  • 技术理论
  • 工程案例
  • 行业资讯

加入我们


官方公众号:52phm,专注预测性维护的学习平台

2021-12-21 11:53:05    互联网    1040    当前专栏:时间序列预测    分类:算法开发    本站官网:www.52phm.cn   

公众号 ...

时间序列预测中特征构建

传统统计学习方法
naive approach, moving average, Holt linear, exponential smoothing, ARIMA, and Prophet

现代机器学习方法
树模型等

深度学习方法
LSTM、Seq2seq、Transform-XL等

树模型需要人为构建特征,同时预测值不可超越区间内取值的上限。深度学习网络,可以发现输入数据之间的交互关系,同时可以发现趋势。 根据数据可以尝试不同的方法,选择较优的方法。下面是树模型的构造特征的方法。

1. 时间戳特征

也是时点特征。

  • 年、月、日、时、分、星期等。
    由此扩展出来的是否周末(销量等差异)、节假日(销量差异)、白昼(温度差异)、是否发薪日等(月中、月末购买意向)、月份的第几周(上半月、下半月之类)等。

  • 小时0-23特征,0与23的差距并不像数值上的那么大,通过sin,cos处理将小时处理成循环取值。

  • 日期特征当做类别特征还是数值特征?
    对于趋势明显的,把其视为数值比类别效果好,这个我在M5上做过验证。解释如下:

    时间序列短期有周期性,长期整体呈现增长趋势。这样一来,时间特征的取值就有了可比较大小的意义。

    将时间直接作为类别特征,会有一些问题。 LGBM原生支持类别特征,它是这么处理的:利用many-vs-many切分方式将类别特征切到两个子集,不断穷举从而实现类别特征最优划分。穷举太慢,Fisher将时间复杂度由 优化到 。也就是,类别特征会不断地尝试分两堆,这两堆极可能不是时间连续的。总之,就是类别失去了取值大小比较的意义。

    【(扩展。不用one-hot,因为one-vs-rest的两大缺点: 1)one-hot其实是某一特征是某一个值与不是某一个值,特征取值很多时,会特稀疏,势必造成类别取值不进货表,用LGBM特征选择时用的增益体现不了,几乎都是整体的。 2)决策不准。因为第一个样本不均衡带来的,LGBM的决策依赖于数据的统计信息,不均衡,势必造成统计信息不准确,效果可能很差)。】

2. 时域特征

2.1 窗口统计特征

以上是时间点特征,这里是时间段特征。
个人解释,时间序列的预测在长期或短期内存在规律包括周期性等,这种规律性通过窗口内统计特征体现。

  • 均值

  • 中位数

  • 分位数

  • 最大/小值

  • 标准差

  • 偏度

  • 峰度

  • 极差

  • 四分位差

  • 0个数

  • 不同取值个数(nunique)

    以上特征就相当于另类编码,或离散化。涉及到平均情况以及离散程度等。

2.2 滞后特征

时间序列之所以可以预测,因为我们研究时间序列很重要的一个应用(或者出发点),是希望通过时间序列的历史数据来得到其未来的一些预测。换句话说,我们希望时间序列在历史数据上的一些性质,在将来保持不变,这不就是时间平移的不变性么?反过来想,如果时间序列不是平稳的,由历史数据得到的统计性质对未来毫无意义,那么研究时间序列还有什么意义呢?参考:https://www.zhihu.com/question/21982358/answer/67289142

这也就为滞后特征带来了意义。其实可以这样理解,当前或者未来所处的片段,是过去的一个缩影。

滞后1期、2期、3期。。。其实,这种连续的滞后是没必要的,极可能产生信息冗余,建议不要整太多。可以整一些滞后7、14、28、60、120等这种可以解释的。通常滞后特征与滚动、差分等一起使用。

  • 滞后滚动平均。shift(14).rolling(7).mean()(滞后14期的7步移动平均)
  • 滞后差分。shift(14).diff(1).(滞后14期的1阶差分,差分主要是去趋势)
  • 同比/环比等。 延伸。滞后、差分等特征会带来缺失值,处理:原文:https://www.kaggle.com/kyakovlev/m5-lags-features 或以下原话
  • M5比赛中数据量较多时。按日期删除一些行,其余保持原样(树模型有一些缺失策略)
  • -1填充。以便转为整型。
  • 平均值填充。(不建议)
  • 向前、前后填充等
# 原文
# There are few options to work 
# with NaNs in train set
## 1. drop it train_df[train_df['d']>MAX_LAG_DAY] 
## 1.1 in our case we already dropped some lines by release date
##     so you have find d.min() for each id
##     and drop train_df[train_df['d']>(train_df['d_min']MAX_LAG_DAY)] 
## 2. If you want to keep it you can 
##    fill with '-1' to be able to convert to int
## 3. Leave as it is
## 4. Fill with mean -> not recommended

下面说一说个人对滞后局限的理解:

  • 内存限制,不会滞后太多特征。
  • 冗余。稠密的lags也势必造成信息冗余,例如,滞后1、2、3等连续的期。
  • 滞后太多,在LGBM中做col sample时可能其他特征就被忽略了。
  • 训练、预测滞后。这决定了预测值是否作为滞后特征的问题。
    预测作为滞后特征。比如,在天级别预测任务中,构造滞后1期这个特征,在训练集上训练没毛病,预测第一天也没问题。问题就在预测第二天的这个滞后1期的特征怎么来?可以将预测出来的第一天的数据滞后给第二天当做特征。预测存在误差,这种可能存在误差传递并随时间加大的风险。

    预测不作为滞后特征。在M5的预测未来28天销量的任务中,滞后特征选择281,…作为滞后特征。这样就可以不用使用预测值作为滞后了。>预测不作为滞后特征。在M5的预测未来28天销量的任务中,滞后特征选择281,…作为滞后特征。这样就可以不用使用预测值作为滞后了。

3. 频域特征

做STFT之类。频域特征最大的问题就是对时间的不敏感,而且还存在边缘效应,所以在预测未来时间点的场景下,基本没有什么作用。参考:https://www.zhihu.com/question/304796104/answer/547001050

4. 类别编码

这里是对类别特征进行聚合统计信息,相当于另类编码。

  • 单独统计。按州计算销量均值、标准差等统计信息。
  • 组合统计。按州、店铺联合特征计算销量统计信息。
  • ID类特征Embedding。
  • 另类TS。

    这里说的TS就是类似Catboost做的事情,直接类别特征TS会造成目标泄露、过拟合问题。Catboost提出了数据虚拟时间的概念,也就是数据有一个顺序,我们可以对当前特征值位置之前的y求均值作为该处特征值的编码。以下是科大讯飞温室温度预测中的特征处理方式,源于【Coggle数据科学】
# 历史信息提取
data_df['dt'] = data_df['day'].values  (data_df['month'].values - 3) * 31 # 有了大小的可比较概念

for f in ['outdoorTemp','outdoorHum','outdoorAtmo','indoorHum','indoorAtmo', 'temperature']:
    tmp_df = pd.DataFrame()
    for t in tqdm(range(15, 45)):
        # 类似Catboost的TS编码,有一个时间顺序的概念
        tmp = data_df[data_df['dt']&lt;t].groupby(['hour'])[f].agg({<!-- -->'mean'}).reset_index() 
        tmp.columns = ['hour','hit_{}_mean'.format(f)]
        tmp['dt'] = t
        tmp_df = tmp_df.append(tmp)

    data_df = data_df.merge(tmp_df, on=['dt','hour'], how='left')

5. 交叉特征

上面都已经提到了组合特征,这里再强调一下,多个特征组合也是非常重要。LGBM中内含互斥特征捆绑EFB策略,即EFB算法利用特征和特征间的关系构造一个加权无向图,并将其转换为图着色的问题来求解,求解过程中采用的贪心策略。说白了就是对于稀疏特征,将特征与特征之间共同取值为非0的较少的特征进行合并。这里其实主要是减少特征数量,从而减少耗时。我们构造的交叉特征可以反应不同特征组合,从而可能发现惊喜。以下是科大讯飞温室温度预测中的交叉特征处理方式,源于【Coggle数据科学】

# 基本交叉特征
for f1 in tqdm(['outdoorTemp','outdoorHum','outdoorAtmo','indoorHum','indoorAtmo']group_feats):

    for f2 in ['outdoorTemp','outdoorHum','outdoorAtmo','indoorHum','indoorAtmo']group_feats:
        if f1 != f2:
            colname = '{}_{}_ratio'.format(f1, f2)
            data_df[colname] = data_df[f1].values / data_df[f2].values

以下源于M5的id交叉信息的统计特征。

########################### Apply on grid_df
#################################################################################
# lets read grid from 
# https://www.kaggle.com/kyakovlev/m5-simple-fe
# to be sure that our grids are aligned by index
grid_df = pd.read_pickle('../data/output/grid_part_1.pkl')
grid_df[TARGET][grid_df['d']&gt;(1941-28)] = np.nan
base_cols = list(grid_df)

icols =  [
            ['state_id'],
            ['store_id'],
            ['cat_id'],
            ['dept_id'],
            ['state_id', 'cat_id'],
            ['state_id', 'dept_id'],
            ['store_id', 'cat_id'],
            ['store_id', 'dept_id'],
            ['item_id'],
            ['item_id', 'state_id'],
            ['item_id', 'store_id']
            ]

for col in icols:
    print('Encoding', col)
    col_name = '_''_'.join(col)'_'
    grid_df['enc'col_name'mean'] = grid_df.groupby(col)[TARGET].transform('mean').astype(np.float16)
    grid_df['enc'col_name'std'] = grid_df.groupby(col)[TARGET].transform('std').astype(np.float16)

keep_cols = [col for col in list(grid_df) if col not in base_cols]
grid_df = grid_df[['id','d']keep_cols]

先写到这里,后期想到再补充。

原文链接:https://wanpingdou.blog.csdn.net/article/details/107692618

免责声明


[推荐] 时间序列预测算法总结

2021-12-25 19:42:49    互联网    471    分类:算法开发    专栏:时间序列预测   


[推荐] 时间序列预测

2021-12-25 19:45:22    互联网    649    分类:算法开发    专栏:时间序列预测   


[推荐] 统计学——时间序列预测

2021-12-25 19:49:30    互联网    505    分类:算法开发    专栏:时间序列预测   



转发此文章到社区


关注公众号进群

让志同道合读者学习交流



提升预测精度:时间序列探索性数据分析-EDA

提升预测精度:探索性数据分析-EDAsales_train_validation.csv参考:Python版本EDA+传统时间序列方法:<li>整体聚合销量时间序列。 <ul>- 销售额普遍上升,这对沃尔玛来说是个好消息。我们可以找出一些每年的季节性,在圣诞节下降,这是一年中唯一的商店关闭的日子

2021-12-21 14:15:31    互联网    477    分类:算法开发    专栏:时间序列预测   


时间序列--平滑+特征工程

https://machinelearningmastery.com/moving-average-smoothing-for-time-series-forecasting-python/平滑的希望是消除噪声,更好地揭示潜在的因果过程的信号。移动平均线是时间序列分析和时间序列预测中常用的一种简单的平滑方法。计算移动平均线需要创建一个新的序列,其中的值由原始时间序列中原始观测值的平均值组成。...

2021-12-21 15:46:28    互联网    540    分类:算法开发    专栏:时间序列预测   


时间序列

时间序列的定义所谓时间序列就是按照时间的顺序记录的一列有序数据。对时间序列进行观察、研究、找寻他发展变化的规律,预测他将来的走势就是时间序列分析,时间序列分析方法只适用于近期与短期的预测。相关特征统计量:均值函数序列:反映的是时间序列每时每刻的平均水平方差函数序列:反映的是时间序列围绕其均值做随机波动时平均的波动程度协方差函数和相关系数度量的是两个不同的事件彼此之间的相互影响...

2021-12-21 15:49:41    互联网    539    分类:算法开发    专栏:时间序列预测   


时间序列特征构造:以电力负荷预测为例讲解(python语言)

大家好,我是yudengwu时间序列特征构造时间序列问题,首先不管是回归问题,还是分类问题。一个模型的好坏,决定因素由数据集的大小,特征值的选取和处理,算法。其中最重要的是特征值的选取和处理。今天与总来讲解下时间序列的特征构造问题。该特征构造部分可以用于其他数值数据。时间序列特征构造分类为 :时间特征,时间历史特征,时间交叉特征时间特征连续时间:持续时间,间隔时间离散时间:年,季度,季节,月,星期,日,等节假日,节假日第几天上午,早上,中午,晚上年初,年末,月初,月末,周

2021-12-21 15:54:27    互联网    940    分类:算法开发    专栏:时间序列预测   


时间序列预测的8种常用方法简介

时间序列预测8种常用方法简介,包括朴素预测法、简单平均法、移动平均法、简单指数平滑法、霍尔特(Holt)线性趋势法、Holt-Winter方法、AMRIA。

2021-12-25 19:46:21    互联网    862    分类:算法开发    专栏:时间序列预测   


基于LSTM的股票时间序列预测(附数据集和代码)

LSTM数据集实战如果对LSTM原理不懂得小伙伴可以看博主下一篇博客,因为博主水平有限,结合其他文章尽量把原理写的清楚些。数据集首先附上数据集链接:https://pan.baidu.com/s/1AKsz-ohmYHr9mBEEh76P5g提取码:6owv这个数据集是关于股票的,里面有日期,开盘价等信息。既然是时间序列预测,我们最关心的是预测值在时间维度上的走势如何,那我们只要最后一列volume和第一列date这两列就好了。实战先是导入相关包,一些常见的包就不详细说了,我们需要的Se

2021-12-25 19:48:44    互联网    842    分类:算法开发    专栏:时间序列预测   


TensorFlow实现时间序列预测

常常会碰到各种各样时间序列预测问题,如商场人流量的预测、商品价格的预测、股价的预测,等等。TensorFlow新引入了一个TensorFlow Time Series库(以下简称为TFTS),它可以帮助在TensorFlow中快速搭建高性能的时间序列预测系统,并提供包括AR、LSTM在内的多个模型。&#13;时间序列问题&#13;  一般而言,时间序列数据抽象为两部分:观察的时间...

2021-12-25 19:50:04    互联网    756    分类:算法开发    专栏:时间序列预测   


用 XGBoost 进行时间序列预测

XGBoost是梯度分类和回归问题的有效实现。它既快速又高效,即使在各种预测建模任务上也表现出色,即使不是最好的,也能在数据科学竞赛的获胜者(例如Kaggle的获奖者)中广受青睐。XGBo...

2021-12-25 19:51:41    互联网    619    分类:算法开发    专栏:时间序列预测   


python 时间序列预测 —— XGBoost

XGBoost Regression

2021-12-25 19:52:19    互联网    458    分类:算法开发    专栏:时间序列预测   


使用2D卷积技术进行时间序列预测

本文将展示一种新的时间序列预测方法。目标数据集在这个项目中使用的数据是来自北卡罗来纳州夏洛特分校的全球能源预测竞赛的数据。您可以在这里找到更多信息:http://www.drhongtao.com/gefcom/2017你需要知道的是,这些数据是来自能源网络的各种读数。我们的目标是利用这些数据点预测电网的实时能源需求。数据点还包括露点和干球温度,因为空调是能源消耗的主力。我们的目标变量是RTDemand(Real Time energy demand):电网的实时能源需求。数据具有清晰的日周期特征。

2021-12-25 19:54:22    互联网    483    分类:算法开发    专栏:时间序列预测   


  • 52phm公告

  • 在这里,可以学习接触到工业互联网技术知识以及落地案例,其中涵盖工业数据集、工业标准库、机理模型、设备知识、机器学习、 深度学习、特征工程、振动分析、工业视觉、边缘硬件及传感器等技术知识!


时间序列预测   
  • 关于站长


  •         从事设备故障预测与健康管理行业多年的PHM算法工程师(机器医生)、国际振动分析师, 实践、研发和交付的项目涉及“化工、工业机器人、风电机组、钢铁、核电、机床、机器视觉”等领域。专注于工业智能预警系统研发, 通过机理算法和数据驱动算法分析振动信号、音频、DCS、PLC信号、SCADA信号等设备运行状态数据对机器设备进行看病预诊,为机器设备健康运行保驾护航。


当前文章目录


52phm社区

52phm社区,专注预测性维护的学习平台!

Saas体验

+ 工业demo学习系统

技术博客

+ 博客首页    + 算法开发    + 边缘感知   

+ 设备机理    + 开发环境

+ 论文速递   

友情链接

+ 在码圈

联系我

Copyright© 2021 52phm社区

京ICP备2021029973号-1