3.8 有关相关性分析的混沌

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

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

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

3.8.1 相关和因果是一回事吗

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

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

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

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

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

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

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

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

首先,R的取值可以为负,R=-0.8代表的相关性要高于R=0.5,负相关只是意味着两个变量的增长趋势相反。因此需要看R的绝对值来判断相关性的强弱。

其次,即使R的绝对值低,也不一定说明变量间的相关性低,原因是相关性衡量的仅仅是变量间的线性相关关系,变量间除了线性关系外,还包括指数关系、多项式关系、幂关系等,这些“非线性相关”的相关性不是R(相关性分析)的衡量范围之内。

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

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

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

示例中实现过程如下:

  • 先导入numpy库;
  • 使用Numpy的loadtxt方法读取数据文件,数据文件以tab分隔;
  • 矩阵切片,切分出自变量用来做相关性分析;
  • 使用Numpy的corrcoef方法做相关性分析,通过参数rowvar = 0控制对列做分析;
  • 打印输出相关性矩阵,使用round方法保留2位小数,结果如下:
[[ 1.   -0.04  0.27 -0.05  0.21 -0.05  0.19 -0.03 -0.02]
 [-0.04  1.   -0.01  0.73 -0.01  0.62  0.    0.48  0.51]
 [ 0.27 -0.01  1.   -0.01  0.72  0.    0.65  0.01  0.02]
 [-0.05  0.73 -0.01  1.    0.01  0.88  0.01  0.7   0.72]
 [ 0.21 -0.01  0.72  0.01  1.    0.02  0.91  0.03  0.03]
 [-0.05  0.62  0.    0.88  0.02  1.    0.03  0.83  0.82]
 [ 0.19  0.    0.65  0.01  0.91  0.03  1.    0.03  0.03]
 [-0.03  0.48  0.01  0.7   0.03  0.83  0.03  1.    0.71]
 [-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解决运营数据的共线性问题”。
  • 代码实操小结:本小节示例中,主要用了几个知识点:
  • 通过Numpy的loadtxt方法读取文本数据文件,并指定分隔符
  • 对Numpy矩阵做切块处理
  • 使用Numpy中的corrcoef做相关性分析
  • 使用round方法保留2位小数

====================【好书推荐,我为自己代言】====================

《Python数据分析与数据化运营》上市啦!

50+数据流工作知识点
14个数据分析与挖掘主题
8个综合性运营分析案例
涵盖会员、商品、流量、内容4大主题
360°把脉运营问题并贴合数据场景落地


本书主要基于Python实现,其中主要用到的计算库是numpy、pandas和sklearn,其他相关库还包括:
  • 标准库:re、time、datetime、json、 base64、os、sys、cPickle、tarfile
  • 统计分析:Statsmodels
  • 中文处理:结巴分词
  • 文本挖掘:Gensim
  • 爬虫和解析:requests、Beautiful Soup、xml
  • 图像处理:OpenCV和PIL
  • 数据读取:xlrd、pymongo、mysql.connector
  • 数据预处理:imblearn
  • 展示美化类:Matplotlib、graphviz、prettytable、wordcloud、mpl_toolkits、pydotplus
如果你对以下内容感兴趣,那么本书将值得一看:
  • KMeans聚类的自动K均值的确立方法
  • 基于软方法的多分类模型组合评估模型的应用
  • 基于自动下探(下钻、细分)的应用
  • 基于增量学习的多项式贝叶斯分类
  • pipeline管道技术的应用
  • 基于超参数的自动参数值的优化方法
  • 特征自动选择
  • 文本分类、文本主题挖掘
  • 基于自动时间序列ARIMA的P、D、Q的调整
  • python决策树规则输出
  • 基于自定义图像的文本标签云
  • 非结构化数据,例如图像、音频、文本等处理
  • 对象持久化处理
有关这本书的写作感受、详细内容介绍、附件(含数据和代码源文件-源代码可更改数据源直接使用)下载、关键知识和方法以及完整书稿目录,请访问《Python数据分析与数据化运营》新书上线,要购买此书请直接点击图片或扫描二维码去京东购买

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>