tsfeatures
计算时间序列数据的各种特征。这是R包_tsfeatures_的Python实现。
安装
你可以通过Python包索引安装tsfeatures
的发布版本:
pip install tsfeatures
使用方法
tsfeatures
的主要函数默认计算Montero-Manso、Talagala、Hyndman和Athanasopoulos在他们的FFORMA模型实现中使用的特征。
from tsfeatures import tsfeatures
这个函数接收一个包含unique_id
、ds
、y
列的面板pandas数据框,以及可选的数据频率参数。
<img src=https://raw.githubusercontent.com/FedericoGarza/tsfeatures/master/.github/images/y_train.png width="152">
tsfeatures(panel, freq=7)
默认情况下(freq=None
),该函数会尝试推断每个时间序列的频率(使用pandas的infer_freq
函数处理ds
列),并根据内置的FREQS
字典分配季节性周期:
FREQS = {'H': 24, 'D': 1,
'M': 12, 'Q': 4,
'W':1, 'Y': 1}
你可以使用dict_freqs
参数来使用自己的字典:
tsfeatures(panel, dict_freqs={'D': 7, 'W': 52})
可用特征列表
特征 | ||
---|---|---|
acf_features | heterogeneity | series_length |
arch_stat | holt_parameters | sparsity |
count_entropy | hurst | stability |
crossing_points | hw_parameters | stl_features |
entropy | intervals | unitroot_kpss |
flat_spots | lumpiness | unitroot_pp |
frequency | nonlinearity | |
guerrero | pacf_features |
查看文档以了解特征的描述。要使用包中包含的特定特征,你需要导入它:
from tsfeatures import acf_features
tsfeatures(panel, freq=7, features=[acf_features])
你还可以定义自己的函数,并将其与包含的特征一起使用:
def number_zeros(x, freq):
number = (x == 0).sum()
return {'number_zeros': number}
tsfeatures(panel, freq=7, features=[acf_features, number_zeros])
tsfeatures
可以处理接收numpy数组x
和频率freq
(即使你不使用它,这个参数也是必需的)并返回一个字典的函数,字典以特征名称为键,特征值为值。
R实现
你可以使用这个包在Python内部调用R的tsfeatures
(你需要安装R、forecast
和tsfeatures
包;以及Python包rpy2
):
from tsfeatures.tsfeatures_r import tsfeatures_r
tsfeatures_r(panel, freq=7, features=["acf_features"])
注意,这个函数接收的是字符串列表,而不是函数列表。
与R实现的比较(绝对差之和)
非季节性数据(100个每日M4时间序列)
特征 | 差异 | 特征 | 差异 | 特征 | 差异 | 特征 | 差异 |
---|---|---|---|---|---|---|---|
e_acf10 | 0 | e_acf1 | 0 | diff2_acf1 | 0 | alpha | 3.2 |
季节性周期 | 0 | 尖峰 | 0 | diff1_acf10 | 0 | arch_acf | 3.3 |
周期数 | 0 | 曲率 | 0 | x_acf1 | 0 | beta | 4.04 |
线性度 | 0 | 交叉点 | 0 | 非线性 | 0 | garch_r2 | 4.74 |
hw_gamma | 0 | 凸凹性 | 0 | diff2x_pacf5 | 0 | 赫斯特指数 | 5.45 |
hw_beta | 0 | diff1x_pacf5 | 0 | 单位根_kpss | 0 | garch_acf | 5.53 |
hw_alpha | 0 | diff1_acf10 | 0 | x_pacf5 | 0 | 熵 | 11.65 |
趋势 | 0 | arch_lm | 0 | x_acf10 | 0 | ||
平坦点 | 0 | diff1_acf1 | 0 | 单位根_pp | 0 | ||
序列长度 | 0 | 稳定性 | 0 | arch_r2 | 1.37 |
要复现这些结果,请使用:
python -m tsfeatures.compare_with_r --results_directory /some/path
--dataset_name Daily --num_obs 100
季节性数据(100个小时级M4时间序列)
特征 | 差异 | 特征 | 差异 | 特征 | 差异 | 特征 | 差异 |
---|---|---|---|---|---|---|---|
序列长度 | 0 | seas_acf1 | 0 | 趋势 | 2.28 | 赫斯特指数 | 26.02 |
平坦点 | 0 | x_acf1 | 0 | arch_r2 | 2.29 | hw_beta | 32.39 |
周期数 | 0 | 单位根_kpss | 0 | alpha | 2.52 | 低谷 | 35 |
交叉点 | 0 | 非线性 | 0 | beta | 3.67 | 峰值 | 69 |
季节性周期 | 0 | diff1_acf10 | 0 | 线性度 | 3.97 | ||
凸凹性 | 0 | x_acf10 | 0 | 曲率 | 4.8 | ||
稳定性 | 0 | seas_pacf | 0 | e_acf10 | 7.05 | ||
arch_lm | 0 | 单位根_pp | 0 | garch_r2 | 7.32 | ||
diff2_acf1 | 0 | 尖峰 | 0 | hw_gamma | 7.32 | ||
diff2_acf10 | 0 | 季节性强度 | 0.79 | hw_alpha | 7.47 | ||
diff1_acf1 | 0 | e_acf1 | 1.67 | garch_acf | 7.53 | ||
diff2x_pacf5 | 0 | arch_acf | 2.18 | 熵 | 9.45 |
要复现这些结果,请使用:
python -m tsfeatures.compare_with_r --results_directory /some/path \
--dataset_name Hourly --num_obs 100
作者
- Federico Garza - FedericoGarza
- Kin Gutierrez - kdgutier
- Cristian Challu - cristianchallu
- Jose Moralez - jose-moralez
- Ricardo Olivares - rolivaresar
- Max Mergenthaler - mergenthaler