识别时间序列数据的趋势和季节性

数据挖掘 机器学习 统计数据 时间序列
2021-09-29 04:14:53

作为统计分析引擎的一部分,我需要找出一种方法来识别给定时间序列数据集中是否存在趋势和季节性模式虽然 Internet 上的大多数答案和教程都概述了使用机器学习模型预测或预测时间序列数据的方法,但我的目标只是识别任何此类模式的存在。

示例:一年内的每日销售数据

该数据集可以显示具有每月季节性的上升趋势,或者没有具有年度季节性的实际趋势。

如果我不手动检查分布的散点图,我可以通过哪些方式确定这些模式的存在?

到目前为止,我已经研究了以下方法:

  1. 使用移动平均或指数平滑来平滑时间序列曲线,然后检查结果线是否可以近似为线性曲线,如果有的话,应该提供向上或向下的趋势。

  2. 使用自动相关来检查季节性,我还没有确认它是否是一个可能的解决方案(有什么想法吗?)

3个回答

另一个想法可能是傅立叶变换,它将时间序列作为输入(时域),并将其转换为频域。

考虑这个例子: 在此处输入图像描述 在此处输入图像描述

当您将时间序列数据从时域转换到频域时,您可以观察到重复的模式(=季节性)。在这种情况下,峰值出现在 12(昼/夜节奏)、24(白天)或 168(周)。

我可以想象您可以执行 FFT,然后根据特定阈值提取峰值

Git repo 还包含对 FFT 的精彩介绍。

来源:https ://github.com/balzer82/FFT-Python

您可以计算您的销售额的RSI(相对强度指数),超过 1 个月、3 个月、一年或您想要衡量的时间间隔的长短,如果当前的积极趋势在这段时间内超过了消极趋势(或相反亦然)。

您还可以尝试ADX(平均方向运动指数)结合 +- 方向指标来再次检测趋势的强度,并根据哪个方向指标超过另一个来确定它是正还是负。

我敢肯定,您也可以使用许多其他传统的以股票为导向的统计数据。

传统上,自相关是您对时间序列数据进行建模并暗示季节性的方式。这主要是数学上的,但与机器学习关系不大。一旦你有了模型、RSI/ADX 或其他动量指数、EWMA 或其他移动平均线,这些都是平滑技术,可以帮助你生成信号,让你知道你在时间序列中的确切位置。

如果要比较具有相同时间索引的两个时间序列的相似性,可以比较它们的欧式距离,或者计算协方差矩阵。这些使您可以更好地探索数据并决定下一步可以做什么。

机器学习算法需要标记数据进行训练。您可以提供用例的特定上下文,以查看是否有一些成熟的机器学习算法可应用于您的时间序列数据