详细的时间序列特征工程。

时间序列中的机器学习任务如磁盘故障预测、时间序列预测、时间序列异常检测、时间序列分类等等都建立在特征工程上。本项目实现时序场景下常用的特征。

时间序列的特征工程:

  1. 基本的统计特征 (均值方差等等)
  2. 分位数特征
  3. 自相关与周期特征
  4. 度量时序变化情况的特征
  5. 度量时序分散情况的特征
  6. 与信息论和信号处理相关的特征(熵 谱 小波分析)
  7. 峰值特征
  8. 位置特征(某个特征在时间窗口中的位置)
  9. 光滑特征(使用平滑方法 MA EMA 或滤波器对原始时序进行处理的结果)
  10. 专用特征(某些 paper 上提到的特征, 用于解决某个或某类特定问题)

以上的特征分类方法在理论上并不表明特征是互相独立的,只是一种习惯分类方法。

项目地址见:time series features

概率分布是随机变量的完整刻画,一旦知道随机变量的概率分布表达式就可以完整地导出该随机变量的数学性质,然而现实情况是我们很难从采样数据中推断随机变量的分布,为此,我们可以通过构造一个采样样本的函数来刻画该分布的一些特征。

实现模板

不带参数的特征:

1
2
3
4
5
6
def time_series_xx(series):
# 无参数的特征提取器实现模板
# 返回类型为 float 或 list
# 使用方法:
# feature = time_series_xx(series)
pass

带参数的特征:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class time_series_xx:

# 有参数的特征提取器实现模板
# 可以使用类继承方法实现
# 返回类型为 float、int 或 list
# 使用方法
# feature = time_series_xx(params)(series)

def __init__(self, param1, param2):
self.param1 = param1
self.param2 = param2

def __call__(self, series):
pass

使用

本项目依赖:numpyscipy

克隆项目到{your_path}

1
git clone https://github.com/allenwind/time-series-features.git

打开.bashrc添加项目路径到PYTHONPATH环境变量中,

1
export PYTHONPATH={your_path}/time-series-features:$PYTHONPATH

然后,

1
source ~/.bashrc

例子,

1
2
3
4
5
import tsfeatures

series = np.random.uniform(size=100)
features = tsfeatures.extract_time_series_statistics_features(series)
print(features)

基本统计特征

Mean

Median

Mode

Geometric mean

Harmonic mean

Variance

standard deviation

Skewness

kurtosis

Coefficient of variation

度量分散的特征

standard deviation

Range

Mean absolute deviation around a central point

m 包括 mean median mode 这三个统计量。

Median absolute deviation around a central point

absolute sum of changes

mean abs change

mean change

mean second derivative central

度量变化的特征

mean second derivative central

可以作为change特征。

最大绝对变化,

偏离均值的最大绝对变化,

平均绝对变化,

度量自相关和周期的特征

自相关和卷积在数学定义上很相似,需要区分。 自相关(f1等于f2)如下:

而卷积定义如下:

autocorrelation

l is lag

在编程实现上, 我们通常使用如下高效的计算方式:

自相关系数估计方法:

计算所有 lag 的自相关系数,即自相关函数:

partial autocorrelation

信息度量

abs energy

Approximate entropy

Sample entropy

binned entropy

cumulative sum

信息论角度看时间序列 representation

熵的计算方法

但是时间序列没有具体给出序列的分布,无法直接计算。但可以估计,具体的估计方法有三种:

  1. binned entropy
  2. approximate entropy
  3. sample entropy

分类特征

Discrimination power of measures for nonlinearity, c3

an estimate for a time series complexity, cid_ce

time reversal asymmetry statistic

Highly comparative feature-based time-series classification

时间序列的光滑处理

simple moving average

迭代处理

Cumulative moving average

Weighted moving average

Exponential moving average

Double exponential smoothing

for forecasting $F_{t+m}=s_{t}+m b_{t}$

类似的还有,Triple exponential smoothing。

实现

项目地址见:time series features

转载请包括本文地址:https://allenwind.github.io/blog/10951
更多文章请参考:https://allenwind.github.io/blog/archives/