如何找出两个时间序列是否相关?它们的长度不相等,因果之间的延迟未知,日志时间不规则?

机器算法验证 机器学习 时间序列 相关性 因果关系 不均匀间隔时间序列
2022-04-15 04:51:37

写下整个问题,以避免在实际上我需要一个完全不同的问题的答案时问一个问题,只是不知道如何问。我有很多关于我日常生活的数据,我想找到不同跟踪变量之间的相关性。或者更确切地说,那些相互关联的变量,以进行更深入的检查。它们每个都有一个精确的时间戳,有时还有一个附加值。

我不知道从哪里开始,我可以用 python 编程,但我没有太多(可能有)统计学知识。我正在寻找一个研究方向,这将帮助我解决这个任务。

有关数据的更多信息:

我记录了过去 5 个月的体温,但有时我只在感觉不好的时候记录下来,即 - 并非所有日子都有数值,测量时间也不规律。所以,如果一天没有价值,这意味着我忘记记录它或者我感觉很好 - 假设它在 36.6C 左右等。或者例如,如果我在某处感到疼痛 - 如果它有条目,则意味着我感觉它并且没有条目意味着没有痛苦或者我忘记了,因为日志记录并不完美。

那么,当将这些类型的系列与其他系列进行比较时,我应该在它们之间填充默认值还是保持原样?

我还有很多其他的测量数据,比如我吃了什么食物、我睡了多久,以及其他重要的常规事件的日志。

每个条目都有一个时间戳,或者是类型(值 - 睡眠时间,情绪水平)或类型 - 发生并记录或根本没有记录。

我有很多,我想找到那些相互关联的,以便进一步深入研究它们,另外,如果我只是绘制它们,如果没有一些处理和智能指标,我认为并不总是可以看到相关性. 所以,说我有

摄氏温度

2018-05-29 11:59:00   35.7
2018-05-29 20:42:00   36.7
2018-05-29 21:23:00   36.6
2018-05-29 23:20:00   36.9
2018-05-30 11:03:00   35.8
2018-05-30 21:08:00   36.8
2018-05-30 23:34:00   36.7
2018-05-31 01:27:00   36.8
2018-05-31 17:32:00   36.4
2018-05-31 20:41:00   36.5
2018-06-01 01:05:00   37.0
2018-06-01 01:09:00   37.2
2018-06-01 01:40:00   36.7
2018-06-01 14:10:00   36.8
2018-06-01 15:58:00   36.6
2018-06-01 16:59:00   36.2
2018-06-01 22:11:00   36.1
2018-06-02 03:08:00   36.1

吃甜的东西

2018-05-21 20:29:00    1.0
2018-05-21 22:12:00    1.0
2018-05-21 23:47:00    1.0
2018-05-24 23:19:00    1.0
2018-05-25 15:59:00    1.0
2018-05-29 20:01:00    1.0
2018-05-30 01:51:00    1.0
2018-06-02 19:28:00    1.0
2018-06-03 20:29:00    1.0

其他一些值介于 -5 和 3 之间的测量值

2018-05-27 21:30:00   -1.0
2018-05-27 21:58:00    0.0
2018-05-27 22:44:00   -2.0
2018-05-28 00:54:00   -1.0
2018-05-28 23:17:00    1.0
2018-05-29 13:09:00   -1.0
2018-05-29 19:23:00   -1.0
2018-05-29 21:46:00   -1.0
2018-05-30 20:23:00   -1.0
2018-05-31 13:38:00   -1.0
2018-05-31 15:19:00   -1.0
2018-05-31 17:08:00   -1.0
2018-05-31 18:27:00    0.0
2018-05-31 20:39:00   -1.0
2018-06-01 20:07:00   -2.0
2018-06-02 12:36:00   -1.0
2018-06-02 12:52:00   -3.0
2018-06-03 14:45:00   -2.0
2018-06-03 15:16:00   -1.0

还有很多相同的类型,大约 100 多个不定期发生的事件,但它们仍然很重要,并且通常比定期发生的事件具有更大和更少的延迟影响,我如何检查它们中的每一个或他们中的每一个都与其他人的组合进行相关性?

我可以考虑尝试将它们转换为一天内的平均值,或者对于没有价值的事件跟踪器每天的条目数。但它可以在以后完成。我需要一些帮助来指导我在哪里看、读什么和尝试什么。

例如,这是我的体温图和过去 2 个月按 24 小时间隔分组的事件 X 的条形图。我想知道它们是否相关。事件 X 有一个精确的记录时间和一个与之相关的值——从 -5 到 3,但我不确定如何最好地可视化它。 在此处输入图像描述

UPD:还有一个示例图 - 另一个以小时为单位的事件,但在这里它计算记录了多少次。事件 Y。 在此处输入图像描述

再次事件 Y,但这次是每天的总和值(对于这个事件)虽然我在凌晨 3 点到 5 点上床睡觉并且情节是使用 12 点作为分割点生成的,但我可能会在稍后调整它在项目中进一步。 在此处输入图像描述

我还打算添加天气数据,另外我还有室温和二氧化碳读数。所以,我有很多不同格式的、不规则记录的并且不是 100% 准确(忘记记录、错过等)的变量及时跟踪,我想找到关于一些变量的见解 - 它们的原因等,但我没有了解影响他们的因素以及延迟时间。

在此处输入图像描述

到目前为止,我想到但我还没有尝试实现它的唯一想法是使用像 LSTM 这样的循环神经网络,将每天分成 10 分钟的片段,并为每个跟踪变量指定一个输入并将它们输入它,并教它预测下一步。在我训练它之后,更改/删除一些变量,看看整体情况如何变化。当然,我必须尽量避免过度拟合,因为它只有 6 个月的数据。但我认为这不是最佳解决方案。我对统计一无所知,可能应该有一种方法可以做我想做的事。但我什至不知道如何用谷歌搜索它。

一个叫做“互相关”的东西适合我的情况吗?

@scherm 的 UPD2 问题

虽然你提到看情节,但我想要一个更自动化的解决方案..

在收集数据的 5 个月内,我有 22 个具有 >100 值的跟踪变量、57 个具有 >50 值的跟踪变量、192 个具有 >10 值的变量以及更多具有更少值的变量,总共 12500 个手动记录的事件/测量值,总共 435 个变量(其中一些当然被遗弃了,但只有一小部分)。

用于统计分析的数据不多,但在手动记录方面却很多。

感谢您指点我填写丢失的数据包。也肯定存在共现。最后,我正在寻找一个工具,我可以在其中选择一个跟踪变量,它会告诉我pick_event之类的东西与 event1(n1 步延迟)、event2(n2 步延迟)、event3(n3 步延迟)。但你的回答符合我提出的问题。

我有一个关于制作散点图的问题,我在上面的帖子中添加了所有数据点的散点图(不是区间拆分,每条链都是一个变量),它是按上次使用跟踪器的时间排序的。我不确定我能从中收集到什么,也不确定如何为您描述的每个变量绘制平均值,您能否详细说明您的第三点?

在此处输入图像描述

2个回答

在处理测量值的相关性之前,探索测量存在的相关性可能是值得的换言之,可能存在要从测量共现中提取的信息。例如,当您吃甜食时,您可能会更频繁地测量温度。如果您发现这是真的,您可以隔离您吃过甜食的时间段并分析这些时间段内的体温。

鉴于您的数据集的性质和您尝试进行的探索类型,我将从这里开始。

  1. 确定适当的窗口大小,例如 10 分钟。创建与这些窗口相对应的时间间隔,从第一次测量的时间戳开始,到最终测量的时间戳结束。构造一个pandas数据框,其中每一行对应一个时间间隔,每一列对应一个测量类型(“特征”)。
  2. 对于每个间隔,计算对应于该间隔的每个特征的平均值(平均值或中值)。如果在间隔期间没有测量某种类型,请为该列输入“NaN”。您可能还想记录其他信息。例如,如果您在某个时间间隔内进行了 3 次温度测量,这可能会成为您分析的另一个特征。(参见下面编辑中的示例)*
  3. 制作一个散点图,其中时间间隔沿 x 轴,特征值(步骤 #2 的平均值)是 y 轴。每个特征应该是不同颜色的点。如果该特征在一段时间内为 NaN,则不要绘制它。另外,请注意您的 y 轴缩放,因为如果不先进行一些规范化,可能很难可视化数据。这种情节将让您立即了解所有功能。您可能会发现一些有趣的趋势。或者,它可能仍然难以可视化。没关系,我们正在探索!
  4. 使用诸如missingno之类的工具来分析您的数据完整性。这个包里有很多很酷的东西,我对它不是太熟悉,所以我将留给你探索它的可能性。就个人而言,我会看一下missingno.matrix,missingno.heatmapmissingno.dendrogram

到那个阶段,您可能已经观察到有趣的趋势。继续探索!您不一定需要关联时间序列本身来发现有趣的东西。

如果您真的对计算不同尺度的时间序列之间的相似性感兴趣,请查看动态时间扭曲如果您计算了所有特征之间的成对 DTW 相似性,您可能能够推断出哪些特征倾向于一起出现。我已经看到这适用于财务数据来分析一起趋势的股票。但是,DTW 并不能解决丢失数据的问题。为此,您将需要研究 data imputation但请记住,再多的估算也无法为您创建数据!它只能根据您认为属于那里的内容来填补空白。


编辑

您要求澄清第 2 步中的平均过程。以下是体温示例:

假设您对宽度的时间间隔感兴趣w. 从时间tj到时间tj+1=tj+w,假设您测量了体温T总共nj次:T1,,Tnj. 然后,而不是为每个nj温度测量,绘制对应于平均温度的单个点T¯j=1/nji=1njTi. 目标只是创建一个杂乱无章的情节。对于分类变量,绘制中位数比绘制平均值更有意义。

通过降低 x 轴的保真度以减少点,绘图可能更容易查看。但是您处理的功能比我预期的要多,因此这种方法的效用是有限的。我会尝试missingno更多——理解特征共现可能是理解特征之间因果关系的第一步。祝你好运!

您对Granger 因果关系感兴趣。至于缺失数据,如果您尝试使用格兰杰因果关系,这将证明代价高昂,因为它使用线性回归(对缺失数据非常敏感)。

您可以尝试输入平均温度来替换缺失值,但这有其自身的问题 - 有关此的更多信息,请参阅imputation