计算两个时间变量之间的相关性

数据挖掘 机器学习 相关性
2022-02-05 15:24:38

我有一个如下所示的数据集:

    UserID  App_open_Time(Hour_ofDay)   Email_Open_Time(hour_ofDay)
       1        1                         1
       2        1                         1
       3        1                         1
       4        1                         1
       5        1                         1
       6        2                         1
       7        2                         1
       8        3                         1
       9        3                         1
      10        3                         1

我想知道 是否与App_open_time相关Email open time我如何在 python 中进行此分析。我打算pearson-correlation使用 Numpy 在 Python 中做一个,这是最好的方法吗?

3个回答

我认为您不能使用 Pearson 的相关性,因为它用于连续变量。您的变量是有序的,因此像 Spearman 的测试会更合适。但是,我认为对序数变量的测试也不合适,因为您的变量也是周期性的,从某种意义上说Hour_ofDay=23Hour_ofDay=1实际上相隔 2 小时,但对于 Spearman 的测试,它们将被视为相隔 22 小时。

我认为在这种情况下,查看两个变量之间的距离分布(以小时为单位)会更合适。在这种情况下,适当的距离度量定义如下(距离最初在这个其他问题的接受答案中定义)

import numpy as np
distance = np.sign(a1-a2)*(12 - abs(abs(a1 - a2) - 12))

其中 a1 和 a2 是您的应用程序和电子邮件打开时间变量。请注意,变量需要在 0 到 23 的范围内才能使此距离起作用。

计算每一行的这个距离,将它作为一列添加到您的数据框中,并用直方图绘制它。这个直方图会告诉你很多关于两个变量之间的“相关性”。

例如

  • 无相关性:直方图将在 -12 和 12 之间保持一致
  • 瞬时相关,即用户同时打开邮件和app:直方图会在0处有一个峰值
  • 预期延迟,即用户在应用程序前 1 小时打开电子邮件:直方图将在 1 处出现峰值
  • 延迟相关,即用户在应用程序后 1 小时打开电子邮件:直方图将在 -1 处有一个峰值

这种可视化将使您能够就应用程序和电子邮件打开时间之间的关系得出丰富的结论。

注意:如果您的变量还包括日期格式的分钟和秒,则必须将变量转换为数字。例如 01:30 (小时 1 和 30 分钟)变为 1.5 。如果您的时间以 12 小时制表示(例如下午 6 点、凌晨 1 点),请注意日期格式

您可以使用以下代码片段:

from matplotlib import cm
cmap = cm.get_cmap('gnuplot')
scatter = pd.scatter_matrix(YOUR_TRAINING_DATA, c = YOUR_LABELS_OF_TRAINING, marker = 'o', s = 40, hist_kwds = {'bins':15}, figsize = (12, 12), cmap = cmap)

它分别和一起绘制每个特征的散点图。它就像相关矩阵。你可以看看这里

使用 pandas 在 python 中有效地处理表。Pandas 有一个工具来计算两个系列之间的相关性,或者数据框的列之间的相关性。假设您将数据保存在 csv 文件中,您可以通过以下方式读取并计算相关性:

import pandas as pd
data = pd.read_csv("my_file.csv")
correlation = data["col1"].corr(data["col2"], method="pearson")

您还可以选择用于计算这之间的相关性的方法:

-皮尔逊

-肯德尔

-斯皮尔曼