Python 中的时间序列特征自动提取工具:tsfresh

什么是 tsfresh?

tsfresh 是一个开源的 Python 库,全称为 Time Series Feature Extraction Based on Scalable Hypothesis tests。它能够自动从大量时间序列数据中提取数百种特征,并通过统计检验筛选出对目标变量有显著影响的特征,从而实现高效、可扩展的时间序列特征工程。

主要特点:

  • ✅ 自动提取超过 70 种类型的特征(如均值、方差、偏度、过零率、傅里叶系数等)
  • ✅ 支持大规模数据集的并行处理
  • ✅ 内置特征选择机制,基于假设检验过滤无关特征
  • ✅ 易于集成到机器学习流程中
  • ✅ 支持多变量时间序列

安装 tsfresh

你可以通过 pip 安装 tsfresh:

python 复制代码
pip install tsfresh

如果你需要使用部分高级功能(如 R 熵计算),还可以安装完整版本:

python 复制代码
pip install tsfresh[complete]

基本使用示例

下面我们通过一个简单的例子来展示如何使用 tsfresh 提取时间序列特征。

1. 准备数据

假设我们有一个包含多个时间序列的数据集,每个序列属于某个类别(如正常/异常)。数据格式如下:

python 复制代码
import pandas as pd

# 示例数据:id 表示不同样本,time 是时间戳,value 是观测值,kind 可用于多变量
data = pd.DataFrame({
    'id': [1, 1, 1, 2, 2, 2, 3, 3, 3],
    'time': [0, 1, 2, 0, 1, 2, 0, 1, 2],
    'value': [1.2, 3.4, 2.1, 0.5, 0.8, 1.0, 5.0, 4.8, 5.2]
})

y = pd.Series([0, 1, 0], name='target', index=[1, 2, 3])  # 标签:样本 id 对应的目标值

注意:tsfresh 要求输入的时间序列数据为长格式(long format),即每行代表一个时间点,通过 id 列区分不同样本。

2. 特征提取

使用 extract_features 函数自动提取特征:

python 复制代码
from tsfresh import extract_features

# 提取所有特征
features = extract_features(data, column_id='id', column_sort='time')
print(features.shape)  # 输出特征矩阵的维度

此时 features 是一个 DataFrame,每一行对应一个 id,每一列是一个提取出的特征(如 __mean, __std, __maximum, 等)。

3. 特征选择

并非所有提取的特征都对预测有用。tsfresh 提供了 select_features 函数,基于假设检验(如 Mann-Whitney U 检验)筛选出与目标变量显著相关的特征:

python 复制代码
from tsfresh import select_features

selected_features = select_features(features, y)
print(f"原始特征数: {features.shape[1]}, 筛选后特征数: {selected_features.shape[1]}")

你也可以一步完成提取和选择:

python 复制代码
from tsfresh import extract_relevant_features

relevant_features = extract_relevant_features(data, y, column_id='id', column_sort='time')

高级功能

1. 自定义提取哪些特征

你可以通过 default_fc_parameterskind_to_fc_parameters 控制提取的特征种类:

python 复制代码
from tsfresh.feature_extraction.settings import MinimalFCParameters

# 只提取少量基本特征(速度快)
features_minimal = extract_features(
    data,
    column_id='id',
    column_sort='time',
    default_fc_parameters=MinimalFCParameters()
)

其他预设配置包括:

  • ComprehensiveFCParameters:全部特征(默认)
  • EfficientFCParameters:平衡速度与覆盖范围
  • MinimalFCParameters:仅基础统计量(均值、方差等)

你也可以自定义参数字典,只启用特定特征。

2. 多变量时间序列支持

如果数据包含多个变量(如温度、湿度、压力),可以使用 kind 列区分:

python 复制代码
multi_data = pd.DataFrame({
    'id': [1, 1, 1, 1, 1, 1],
    'time': [0, 1, 0, 1, 0, 1],
    'kind': ['temp', 'temp', 'humidity', 'humidity', 'pressure', 'pressure'],
    'value': [20.1, 20.3, 45.0, 46.2, 1013, 1012]
})

features_multi = extract_features(
    multi_data,
    column_id='id',
    column_sort='time',
    column_kind='kind',
    column_value='value'
)

3. 并行加速

tsfresh 支持并行特征提取,提升大数据集的处理效率:

python 复制代码
features = extract_features(
    data,
    column_id='id',
    n_jobs=4  # 使用 4 个 CPU 核心
)

实际应用场景

  • 设备故障预测:从传感器时间序列中提取振动、温度变化特征,训练分类模型判断是否即将故障。
  • 金融交易信号识别:分析股价走势,提取波动性、趋势强度等特征辅助量化交易。
  • 用户行为分析:从用户点击流时间序列中提取活跃度、周期性等特征进行分群或流失预测。
  • 医学信号处理:从 ECG、EEG 信号中自动提取节律、幅值等特征用于疾病诊断。

注意事项与最佳实践

  1. 数据预处理:确保时间序列无缺失或异常值,必要时进行插值或平滑。
  2. 时间排序 :建议指定 column_sort 以保证时间顺序正确。
  3. 内存管理 :特征数量可能非常庞大,对于超长时间序列或大量样本,建议使用 EfficientFCParameters 或分批处理。
  4. 领域知识结合:虽然 tsfresh 自动化程度高,但结合业务理解手动构造特征仍能提升模型性能。

总结

tsfresh 是一个强大而灵活的时间序列特征提取工具,极大地简化了特征工程流程。它不仅节省了开发时间,还通过统计检验帮助识别真正有用的特征,避免过拟合。无论是学术研究还是工业应用,tsfresh 都是处理时间序列数据时值得信赖的助手。

通过合理配置参数、结合后续建模流程,tsfresh 能够成为构建时间序列机器学习系统中的核心组件。


参考资料

相关推荐
玄同765几秒前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子5 分钟前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
Max_uuc16 分钟前
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector
开发语言·jvm·c++
白日做梦Q16 分钟前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习
故事不长丨16 分钟前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
牵牛老人19 分钟前
【Qt 开发后台服务避坑指南:从库存管理系统开发出现的问题来看后台开发常见问题与解决方案】
开发语言·qt·系统架构
froginwe1128 分钟前
Python3与MySQL的连接:使用mysql-connector
开发语言
喵手30 分钟前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手38 分钟前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集
熊猫_豆豆43 分钟前
YOLOP车道检测
人工智能·python·算法