tsmoothie简介
tsmoothie是一个强大的Python库,专门用于时间序列数据的平滑处理和异常检测。它采用向量化的方式,能够高效地处理单个或多个时间序列数据。这个库由Marco Cerliani开发,旨在为数据科学家和分析师提供一套全面的工具,以简化时间序列分析的过程。
主要特性
多样化的平滑技术
tsmoothie提供了丰富的平滑技术选择:
- 指数平滑
- 卷积平滑(支持多种窗口类型)
- 基于傅里叶变换的谱平滑
- 多项式平滑
- 样条平滑(线性、三次、自然三次)
- 高斯平滑
- 分箱平滑
- LOWESS平滑
- 季节性分解平滑
- 可自定义组件的卡尔曼平滑
这些技术使用户能够根据具体的数据特征和分析需求选择最合适的平滑方法。
间隔计算功能
tsmoothie不仅提供平滑处理,还能计算平滑结果的置信区间:
- sigma区间
- 置信区间
- 预测区间
- 卡尔曼区间
这些区间计算对于识别时间序列中的异常值和异常模式非常有用。
滑动平滑和在线处理
tsmoothie支持滑动平滑方法,可以模拟在线处理场景。它通过将时间序列分割成等大小的片段并独立平滑来实现。这个功能通过WindowWrapper
类以向量化的方式实现,保证了处理效率。
时间序列自助法
tsmoothie提供了BootstrappingWrapper
类来执行时间序列自助法。支持的自助算法包括:
- 非重叠块自助法
- 移动块自助法
- 循环块自助法
- 平稳自助法
这些自助法算法可以用于评估模型的不确定性和生成预测区间。
安装和依赖
安装tsmoothie非常简单,只需要通过pip执行以下命令:
pip install --upgrade tsmoothie
tsmoothie的依赖项非常精简,只需要NumPy、SciPy和simdkalman。该库支持Python 3.6及以上版本。
使用示例
下面通过两个简单的例子来展示tsmoothie的基本用法:
随机游走平滑
import numpy as np
import matplotlib.pyplot as plt
from tsmoothie.utils_func import sim_randomwalk
from tsmoothie.smoother import LowessSmoother
# 生成3个长度为200的随机游走序列
np.random.seed(123)
data = sim_randomwalk(n_series=3, timesteps=200,
process_noise=10, measure_noise=30)
# 执行平滑
smoother = LowessSmoother(smooth_fraction=0.1, iterations=1)
smoother.smooth(data)
# 生成区间
low, up = smoother.get_intervals('prediction_interval')
# 绘制平滑后的时间序列及区间
plt.figure(figsize=(18,5))
for i in range(3):
plt.subplot(1,3,i+1)
plt.plot(smoother.smooth_data[i], linewidth=3, color='blue')
plt.plot(smoother.data[i], '.k')
plt.title(f"timeseries {i+1}")
plt.xlabel('time')
plt.fill_between(range(len(smoother.data[i])), low[i], up[i], alpha=0.3)
周期性数据平滑
import numpy as np
import matplotlib.pyplot as plt
from tsmoothie.utils_func import sim_seasonal_data
from tsmoothie.smoother import DecomposeSmoother
# 生成3个长度为300的周期性时间序列
np.random.seed(123)
data = sim_seasonal_data(n_series=3, timesteps=300,
freq=24, measure_noise=30)
# 执行平滑
smoother = DecomposeSmoother(smooth_type='lowess', periods=24,
smooth_fraction=0.3)
smoother.smooth(data)
# 生成区间
low, up = smoother.get_intervals('sigma_interval')
# 绘制平滑后的时间序列及区间
plt.figure(figsize=(18,5))
for i in range(3):
plt.subplot(1,3,i+1)
plt.plot(smoother.smooth_data[i], linewidth=3, color='blue')
plt.plot(smoother.data[i], '.k')
plt.title(f"timeseries {i+1}")
plt.xlabel('time')
plt.fill_between(range(len(smoother.data[i])), low[i], up[i], alpha=0.3)
与scikit-learn的集成
tsmoothie中的所有平滑器都可以与scikit-learn完全集成。这意味着您可以将tsmoothie的平滑器作为scikit-learn管道的一部分,或在网格搜索中使用它们来优化超参数。这种集成极大地增强了tsmoothie在机器学习工作流程中的实用性。
应用场景
tsmoothie在多个领域都有广泛的应用:
- 金融分析:平滑股票价格数据,检测市场异常。
- 传感器数据处理:去除传感器读数中的噪声,识别设备故障。
- 天气预报:平滑气象数据,预测极端天气事件。
- 能源需求预测:分析和预测电力消耗模式。
- 网络流量分析:检测网络流量异常,预防安全威胁。
- 医疗保健:分析生理信号数据,检测健康状况异常。
总结
tsmoothie为时间序列分析提供了一个强大而灵活的工具集。它的向量化实现确保了高效的处理,即使面对大量或长期的时间序列数据也能保持良好的性能。丰富的平滑技术和间隔计算方法使其适用于各种场景,从简单的数据清洗到复杂的异常检测任务。
对于数据科学家和分析师来说,tsmoothie是一个值得关注的库。它不仅可以简化时间序列预处理的工作流程,还能提供深入的洞察,帮助发现数据中隐藏的模式和异常。随着时间序列数据在各个领域的重要性不断增加,tsmoothie这样的专业工具将在数据分析和机器学习项目中发挥越来越重要的作用。
📚 参考资料:
- Time Series Smoothing for better Clustering
- Time Series Smoothing for better Forecasting
- Real-Time Time Series Anomaly Detection
无论您是时间序列分析的新手还是专家,tsmoothie都能为您的项目带来价值。我们期待看到更多基于tsmoothie的创新应用和研究成果。