Python数据分析与数据化运营

3.8 有关相关性分析的混沌

Author
宋天龙
发布于 2018-06-28
1645 次阅读
0 次赞
0 次分享
3.8 有关相关性分析的混沌
AI 智能核心导读

相关性分析旨在衡量变量间的密切程度。相关性不等于因果关系,其核心价值在于揭示变量相伴发生的规律而非成因。此外,相关系数的绝对值决定相关性强弱,且系数低仅代表无线性相关,不排除存在非线性关系。最后,通过Python的Numpy库(corrcoef方法)可快速实现相关性矩阵的计算与结果解读。

说明:本文是《Python 数据分析与数据化运营》中的“3.8 有关相关性分析的混沌”。

-----------------------------下面是正文内容--------------------------

相关性分析是指对多个具备相关关系的变量进行分析,从而衡量变量间的相关程度或密切程度。相关性可以应用到所有数据的分析过程中,任何事物之间都是存在一定的联系。相关性用 R(相关系数)表示,R 的取值范围是 [-1, 1]

3.8.1 相关和因果是一回事吗

相关性不等于因果,用 x1x2 作为两个变量进行解释,相关意味着 x1x2 是逻辑上的并列相关关系,而因果联系可以解释为因为 x1 所以 x2(或因为 x2 所以 x1)的逻辑关系,二者是完全不同的。

用一个运营示例来说明二者的关系:

做商品促销活动时,通常都会以较低的价格进行销售,以此来实现较高的商品销量;随着商品销售的提升,也给线下物流配送体系带来了更大的压力,在该过程中通常会导致商品破损量的增加。

本案例中,商品低价与破损量增加并不是因果关系,即不能说因为商品价格低所以商品破损量增加;二者的真实关系是都是基于促销这个大背景下,低价和破损量都是基于促销产生。

相关性的真实价值不是用来分析“为什么”,而是通过相关性来描述无法解释问题背后真正成因的方法。相关性的真正的价值是能知道“是什么”,即无论通过何种因素对结果产生影响,最终出现的规律就是二者会一起增加/降低等

仍然是上面的案例,通过相关性分析我们可以知道,商品价格低和破损量增加是相伴发生的,这意味着当价格低的时候(通常是做销售活动,也有可能产品质量问题、物流配送问题、包装问题等),我们就想到破损量可能也会增加;但是到底由什么导致的破损量增加,是无法通过相关性来得到的。

3.8.2 相关系数低就是不相关吗

R(相关系数)低就是不相关吗?其实不是。

  1. 首先,R 的取值可以为负,R = -0.8 代表的相关性要高于 R = 0.5,负相关只是意味着两个变量的增长趋势相反。因此需要看 R 的绝对值来判断相关性的强弱。
  2. 其次,即使 R 的绝对值低,也不一定说明变量间的相关性低,原因是相关性衡量的仅仅是变量间的线性相关关系,变量间除了线性关系外,还包括指数关系、多项式关系、幂关系等,这些“非线性相关”的相关性不在 R(相关性分析)的衡量范围之内。

3.8.3 代码实操:Python 相关性分析

本示例中,将使用 Numpy 进行相关性分析。源文件 data5.txt 位于“附件-chapter3”中,默认工作目录为“附件-chapter3”(如果不是,请 cd 切换到该目录下,否则会报“IOError: File data5.txt does not exist”)。

python
1import numpy as np # 导入库 2data = np.loadtxt('data5.txt', delimiter='\t') # 读取数据文件 3x = data[:, :-1] # 切分自变量 4correlation_matrix = np.corrcoef(x, rowvar=0) # 相关性分析 5print(correlation_matrix.round(2)) # 打印输出相关性结果

示例中实现过程如下:

  • 先导入 numpy 库;
  • 使用 Numpyloadtxt 方法读取数据文件,数据文件以 tab 分隔;
  • 矩阵切片,切分出自变量用来做相关性分析;
  • 使用 Numpycorrcoef 方法做相关性分析,通过参数 rowvar=0 控制对列做分析;
  • 打印输出相关性矩阵,使用 round 方法保留 2 位小数,结果如下:
code
1[[ 1. -0.04 0.27 -0.05 0.21 -0.05 0.19 -0.03 -0.02] 2 [-0.04 1. -0.01 0.73 -0.01 0.62 0. 0.48 0.51] 3 [ 0.27 -0.01 1. -0.01 0.72 0. 0.65 0.01 0.02] 4 [-0.05 0.73 -0.01 1. 0.01 0.88 0.01 0.7 0.72] 5 [ 0.21 -0.01 0.72 0.01 1. 0.02 0.91 0.03 0.03] 6 [-0.05 0.62 0. 0.88 0.02 1. 0.03 0.83 0.82] 7 [ 0.19 0. 0.65 0.01 0.91 0.03 1. 0.03 0.03] 8 [-0.03 0.48 0.01 0.7 0.03 0.83 0.03 1. 0.71] 9 [-0.02 0.51 0.02 0.72 0.03 0.82 0.03 0.71 1. ]]

相关性矩阵的左侧和顶部都是相对的变量,从左到右、从上到下依次是列 1 到列 9。从结果看出:

  • 第 5 列和第 7 列相关性最高,系数达到 0.91
  • 第 4 列和第 6 列相关性较高,系数达到 0.88
  • 第 8 列和第 6 列相关性较高,系数达到 0.83

上述过程中,主要需要考虑的关键点是:

  • 如何理解相关性和因果关系的差异以及如何应用相关性。相关性分析除了可以用来分析不同变量间的相关伴生关系,也可以用来做多重共线性检验,有关共线性的问题请参照“3.7 解决运营数据的共线性问题”。
  • 代码实操小结:本小节示例中,主要用了几个知识点:
    • 通过 Numpyloadtxt 方法读取文本数据文件,并指定分隔符
    • Numpy 矩阵做切块处理
    • 使用 Numpy 中的 corrcoef 做相关性分析
    • 使用 round 方法保留 2 位小数
分享
最后修订: 2018-06-28