【问题标题】:Correlation between spam and weekdays垃圾邮件与工作日的相关性
【发布时间】:2020-09-11 18:35:55
【问题描述】:

我正在尝试检查垃圾邮件和工作日之间是否存在相关性。

我的dataframe 如下:

  Spam? Day
0   1.0 Saturday
1   1.0 Saturday
3   0.0 Saturday
5   1.0 Saturday
7   0.0 Friday
... ... ...
346 0.0 Friday
348 1.0 Friday
361 0.0 Saturday
383 1.0 Thursday
387 1.0 Friday

其中 1 表示垃圾邮件,0 不是垃圾邮件。

我已经尝试如下

corr = (numpy.corrcoef(df['Spam?'],df['Days']))

我收到了这个错误:

TypeError: unsupported operand type(s) for /: 'str' and 'int'

【问题讨论】:

  • 你能澄清一下“相关性”吗?
  • weekday 是一个分类值,而不是数字。您不能为此使用 Pearson 相关性(好吧,除非您有充分的理由相信存在线性依赖关系)
  • 感谢马拉。所以我需要对工作日列进行编码,不是吗?
  • 一种常见的方法是在给定所有其他日期的情况下,计算偶然获得周六统计数据的机会。您可以计算垃圾邮件率平均值、影响大小或分布之间的距离之间的差异。其中任何一个都是合理的开始;重要的是要考虑随机性
  • 要查看特定日期的垃圾邮件异常高还是低,您需要一个分类指标。相关系数适用于具有连续关系的数据,例如注意到一周内垃圾邮件增加的趋势。相反,请尝试卡方检验。

标签: python numpy correlation


【解决方案1】:

鉴于您有一个分类变量和一个分类变量,Cramer 的 V 是您应该使用的理想指标 -

import scipy.stats as ss
def cramers_corrected_stat(confusion_matrix):
    """ calculate Cramers V statistic for categorical-categorical association.
        uses correction from Bergsma and Wicher, 
        Journal of the Korean Statistical Society 42 (2013): 323-328
    """
    chi2 = ss.chi2_contingency(confusion_matrix)[0]
    n = confusion_matrix.sum().sum()
    phi2 = chi2/n
    r,k = confusion_matrix.shape
    phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))    
    rcorr = r - ((r-1)**2)/(n-1)
    kcorr = k - ((k-1)**2)/(n-1)
    return np.sqrt(phi2corr / min( (kcorr-1), (rcorr-1)))
cramers_corrected_stat(pd.crosstab(df['Spam?'], df['Day']))

【讨论】:

    【解决方案2】:

    您正在使用分类特征/标签。看相关性并没有真正的意义。

    相反,您应该只查看直方图:

    pd.crosstab(df['day'], df['spam']).plot.bar()
    

    得到这样的东西:

    以上将为您提供每个垃圾邮件/天组合的绝对计数。您还可以使用value_counts 可视化相对计数:

    df.groupby('day')['spam'].value_counts(normalize=True).unstack('spam').plot.bar()
    

    你会得到:

    【讨论】:

    • 非常感谢您的建议,Quang Hoang。真的很感激
    【解决方案3】:

    将工作日转换为 0 到 6 之间的数字,然后运行 ​​numpy.corrcoef

    【讨论】:

    • 这显然是错误的解决方案,假设工作日和垃圾邮件率之间存在线性相关性
    • 然而,这是一个问题——是否存在线性依赖关系。
    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 2011-09-18
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多