最完整的tsfresh教程:从安装到特征提取,一站式掌握时间序列分析
你是否还在为时间序列数据的特征工程烦恼?面对海量的时序数据,手动提取有效特征既耗时又容易遗漏关键信息。tsfresh(Time Series FeatuRe Extraction)作为一款强大的开源工具,能够自动从时间序列中提取1200+特征,帮助数据科学家快速构建预测模型。本文将从安装到高级应用,全面讲解tsfresh的核心功能,读完你将掌握:
- tsfresh的安装与环境配置
- 时间序列数据的标准化处理
- 特征提取全流程及参数调优
- 特征筛选与模型集成方法
- 工业级应用案例实战
什么是tsfresh?
tsfresh是一个用于时间序列特征工程的Python库,能够自动从原始时序数据中提取大量统计特征、时域特征和频域特征。其核心优势在于:
- 自动化特征生成:内置1200+特征计算器,覆盖从基础统计量到复杂谱分析的全维度特征
- 科学特征筛选:基于假设检验的特征相关性评估,自动过滤冗余特征
- 高效并行计算:支持多进程/分布式计算,轻松处理百万级时序数据
- ** sklearn兼容**:提供Transformer接口,可无缝集成到机器学习 pipelines
tsfresh已被成功应用于工业预测性维护[2]、火山喷发预测[4]、传感器异常检测[7]_等领域,是时序分析领域的重要工具。
图1:tsfresh可提取的时间序列特征类型示例,包括最大值、最小值、峰值数量等基础统计量及复杂特征
快速安装与环境配置
基础安装
tsfresh支持Python 3.7+环境,通过PyPI可快速安装:
pip install tsfresh
对于需要处理大规模数据的场景,建议安装Dask扩展以支持分布式计算:
pip install tsfresh[dask]
官方文档:docs/text/quick_start.rst
验证安装
安装完成后,可通过导入库并查看版本验证安装是否成功:
import tsfresh
print("tsfresh版本:", tsfresh.__version__)
数据格式规范
tsfresh要求输入数据遵循特定格式,以确保特征提取的准确性。主要支持两种数据格式:
长格式DataFrame
最常用的输入格式是包含以下列的DataFrame:
id列:时间序列的唯一标识符(column_id)time列:时间戳或排序键(column_sort)- 一个或多个
value列:时序观测值(如传感器读数)
示例数据格式:
| id | time | F_x | F_y | F_z | T_x | T_y | T_z |
|---|---|---|---|---|---|---|---|
| 1 | 0 | -1 | -1 | 63 | -3 | -1 | 0 |
| 1 | 1 | 0 | 0 | 62 | -3 | -1 | 0 |
| 2 | 0 | -2 | -1 | 64 | -2 | -1 | 0 |
数据格式文档:docs/text/data_formats.rst
宽格式字典
对于多类型时间序列数据,可使用字典格式,其中键为时序类型(kind),值为包含id、time和value列的DataFrame:
{
"temperature": pd.DataFrame({
"id": [1, 1, 2, 2],
"time": [0, 1, 0, 1],
"value": [23.5, 24.1, 22.8, 23.0]
}),
"pressure": pd.DataFrame(...)
}
核心功能实战
1. 特征提取全流程
以下以机器人故障检测数据集为例,展示tsfresh的完整特征提取流程。该数据集包含6个传感器的时序数据,需判断机器人是否发生故障[1]_。
步骤1:加载示例数据
tsfresh提供内置数据集,可直接加载用于测试:
from tsfresh.examples.robot_execution_failures import download_robot_execution_failures, load_robot_execution_failures
# 下载并加载数据
download_robot_execution_failures()
timeseries, y = load_robot_execution_failures()
# 查看数据基本信息
print("时序数据形状:", timeseries.shape)
print("标签分布:", y.value_counts())
数据集包含134个机器人的执行数据,其中timeseries为时序数据,y为故障标签(1表示故障,0表示正常)。
步骤2:可视化时序数据
正常与故障状态的时序数据存在明显差异,可通过可视化观察:
import matplotlib.pyplot as plt
# 绘制正常样本(id=3)
timeseries[timeseries['id'] == 3].plot(subplots=True, sharex=True, figsize=(10, 10))
plt.suptitle("正常状态传感器数据")
plt.savefig("normal_robot.png")
plt.show()
# 绘制故障样本(id=20)
timeseries[timeseries['id'] == 20].plot(subplots=True, sharex=True, figsize=(10, 10))
plt.suptitle("故障状态传感器数据")
plt.savefig("faulty_robot.png")
plt.show()
图2:正常状态下的机器人传感器数据(id=3)
图3:故障状态下的机器人传感器数据(id=20),可观察到明显的模式变化
步骤3:自动特征提取
使用extract_features函数提取特征,核心参数包括:
column_id:样本ID列名column_sort:时间排序列名default_fc_parameters:特征计算参数配置
from tsfresh import extract_features
# 提取所有特征
extracted_features = extract_features(
timeseries,
column_id="id",
column_sort="time",
n_jobs=4 # 使用4个进程并行计算
)
print("提取特征数量:", extracted_features.shape[1])
print("特征数据形状:", extracted_features.shape)
默认配置下,tsfresh会提取1200+个特征,涵盖:
- 基础统计量(均值、方差、极值)
- 时间域特征(峰值数量、斜率、自相关)
- 频域特征(傅里叶变换、小波系数)
特征提取源码:tsfresh/feature_extraction/extraction.py
2. 特征筛选与优化
处理缺失值
特征提取过程中可能产生NaN值(如某些特征计算器无法应用于特定数据),需进行缺失值填充:
from tsfresh.utilities.dataframe_functions import impute
# 填充缺失值(默认使用均值填充)
impute(extracted_features)
相关性筛选
使用select_features函数基于统计检验筛选与目标变量相关的特征:
from tsfresh import select_features
# 筛选相关特征
features_filtered = select_features(extracted_features, y)
print("筛选后特征数量:", features_filtered.shape[1])
筛选原理基于Benjamini-Yekutieli多重检验校正[2]_,通过以下步骤实现:
- 对每个特征进行假设检验(如ANOVA、Kruskal-Wallis)
- 计算特征与目标变量的p值
- 控制错误发现率(FDR),保留显著相关特征
特征筛选文档:docs/text/feature_filtering.rst
图4:tsfresh特征提取与筛选流程,包括特征计算、p值检验和多重检验校正三个阶段
3. 特征提取参数配置
tsfresh提供灵活的参数配置机制,可通过以下方式控制特征提取过程:
预设参数集
- ComprehensiveFCParameters:默认配置,包含所有特征(1200+)
- MinimalFCParameters:最小特征集,仅包含基础统计量(适合快速测试)
- EfficientFCParameters:高效特征集,排除高计算成本特征
from tsfresh.feature_extraction import MinimalFCParameters, EfficientFCParameters
# 使用最小特征集
minimal_fc_params = MinimalFCParameters()
features_minimal = extract_features(timeseries, column_id="id", column_sort="time", default_fc_parameters=minimal_fc_params)
# 使用高效特征集(适合大规模数据)
efficient_fc_params = EfficientFCParameters()
features_efficient = extract_features(timeseries, column_id="id", column_sort="time", default_fc_parameters=efficient_fc_params)
自定义特征参数
通过字典自定义需要计算的特征及参数:
# 自定义特征配置
custom_fc_parameters = {
# 无参数特征
"mean": None,
"maximum": None,
# 带参数特征
"quantile": [{"q": 0.25}, {"q": 0.5}, {"q": 0.75}],
"fft_aggregated": [{"aggtype": "centroid"}, {"aggtype": "variance"}]
}
# 使用自定义配置提取特征
features_custom = extract_features(
timeseries,
column_id="id",
column_sort="time",
default_fc_parameters=custom_fc_parameters
)
参数配置文档:docs/text/feature_extraction_settings.rst
4. 高级应用:特征命名规则
tsfresh采用结构化命名方式,便于理解特征含义:
{时间序列名称}__{特征计算器}__{参数名1}_{参数值1}__{参数名2}_{参数值2}
示例:
F_x__quantile__q_0.6:F_x传感器数据的0.6分位数T_z__cwt_coefficients__widths_(2,5,10)__coeff_14:T_z传感器数据的小波系数特征
特征命名规则:docs/text/feature_calculation.rst
工业级应用案例
预测性维护
在机器人故障检测案例中,使用筛选后的特征训练分类模型:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features_filtered, y, test_size=0.2, random_state=42)
# 训练随机森林模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
print("准确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
完整案例教程:[notebooks/01 Feature Extraction and Selection.ipynb](https://gitcode.com/gh_mirrors/ts/tsfresh/blob/41e54c6c3046476105f78a99826fa593fb361e6c/notebooks/01 Feature Extraction and Selection.ipynb?utm_source=gitcode_repo_files)
大规模数据处理
对于无法载入内存的大规模数据,使用Dask分布式计算:
# 大规模数据处理示例(需安装dask)
from tsfresh import extract_features
import dask.dataframe as dd
# 将pandas DataFrame转换为dask DataFrame
ddf = dd.from_pandas(timeseries, chunksize=1000)
# 使用dask提取特征
extracted_features = extract_features(
ddf,
column_id="id",
column_sort="time",
n_jobs=8, # 分布式计算
distributor="dask"
)
大规模数据处理文档:docs/text/large_data.rst
总结与展望
tsfresh作为自动化时序特征工程工具,极大简化了从原始数据到模型特征的转化过程。通过本文学习,你已掌握:
- tsfresh的安装与基础配置
- 时序数据的标准化处理
- 特征提取、筛选全流程
- 特征参数自定义与优化
- 工业级应用案例实现
未来,tsfresh将进一步优化计算效率,支持流数据处理,并扩展更多特征类型。建议结合官方文档和示例 notebooks深入学习:
- 官方教程:notebooks/
- API文档:docs/api/
- 贡献指南:docs/text/how_to_contribute.rst
通过tsfresh,让时间序列特征工程不再成为数据分析的瓶颈!
参考文献
.. [1] http://archive.ics.uci.edu/ml/datasets/Robot+Execution+Failures .. [2] Christ, M., Kempa-Liehr, A.W. and Feindt, M. (2016). Distributed and parallel time series feature extraction for industrial big data applications. .. [4] Dempsey, D. E. et al. (2020). Automatic precursor recognition and real-time forecasting of sudden explosive volcanic eruptions. .. [7] Teh, H. Y. et al. (2021). Expect the Unexpected: Unsupervised feature selection for automated sensor anomaly detection.
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00



