1。相关性和因果关系是一回事吗?相关性不等于因果关系。用x1和x2作为两个变量来解释,相关性是指x1和x2在逻辑上是并列相关,因果关系可以解释为x2因为x1(或者x1因为x2)的逻辑关系,两者是完全不同。用一个运营的例子来说明两者的关系:在做产品促销活动时,通常会以较低的价格销售,以达到较高的产品销量;随着产品销量的增加,还提供了线下物流配送,这给系统带来了更大的压力,往往导致过程中商品破损增加。在本案中,商品价格低与损害金额增加之间没有因果关系,即不能说商品的损害金额增加是因为商品价格低;是根据促销生成的。关联的真正价值不在于分析“为什么”,而在于通过关联描述无法解释的问题背后的真正原因。相关性的真正价值在于能够知道“什么”,即无论什么因素影响结果,最终的规律是两者一起增加或减少。还是上面的案例,通过相关性分析我们可以知道,商品的低价和破损的增加是一起发生的,也就是说当价格低的时候(通常是针对销售活动,也可能存在产品质量问题,物流和配送问题、包??装问题等),我们认为损坏的数量可能还会增加。但是,无法通过关联获得导致伤害增加的原因。2.低相关系数是否无关紧要?低R(相关系数)是否无关紧要?其实并不是。R的取值可以为负,R=-0.8代表比R=0.5更高的相关性。负相关只是说明两个变量的增长趋势相反,所以需要看R的绝对值来判断相关性的强弱。即使R的绝对值较低,也并不一定意味着变量之间的相关性较低。原因是相关性仅衡量变量之间的线性相关性。除了线性关系,变量还包括指数关系、多项式关系和幂关系。等等,这些“非线性相关”的相关性不在R(相关分析)的范围之内。3.代码实践:Python相关性分析本例中将使用Numpy进行相关性分析。源文件data5.txt位于“attachment-chapter3”中。附件下载地址:http://www.dataivy.cn/book/python_book_v2.zipimportnumpyasnp#导入库data=np.loadtxt('data5.txt',delimiter='\t')#读取数据文件x=data[:,:-1]#拆分自变量correlation_matrix=np.corrcoef(x,rowvar=0)#相关分析print(correlation_matrix.round(2))#打印输出相关结果示例中的实现过程如下:import第一个Numpy库;使用Numpy的loadtxt方法读取数据文件,数据文件之间用制表符分隔;矩阵切片,切出自变量进行相关分析;使用Numpy的corrcoef方法进行相关性分析,通过参数rowvar=0column控制配对进行分析;打印出相关矩阵,使用舍入法保留2位小数。结果如下:[[1.-0.040.27-0.050.21-0.050.19-0.03-0.02][-0.041.-0.010.73-0.010.620.0.480.51][0.27-0.011.-0.010。720.0.650.010.02][-0.050.73-0.011.0.010.880.010.70.72][0.21-0.010.720.011.0.020.910.030.03][-0.050.620.0.880.021.0.059.830.8192]0.030.03][-0.030.480.010.70.030.830.031.0.71][-0.020.510.020.720.030.820.030.711.]]相关矩阵左边和上面是相对变量,从左到右,从上到接下来是第1列到第9列。从结果可以看出,第5列和第7列之间的相关性很高,系数达到了0.91。第4列和第6列高度相关,系数为0.88。第8列和第6列高度相关,系数为0.83。为了更好的显示相关结果,我们可以用Matplotlib显示图像。代码如下:fig=plt.figure()#调用figure创建绘图对象ax=fig.add_subplot(111)#设置1个子网格并添加子网格对象hot_img=ax.matshow(np.abs(correlation_matrix),vmin=0,vmax=1)#绘制热图,取值范围从0到1fig.colorbar(hot_img)#为热图生成颜色渐变条ticks=np.arange(0,9,1)#生成0~9,步长为1ax.set_xticks(ticks)#生成x轴刻度ax.set_yticks(ticks)#设置y轴刻度names=['x'+str(i)foriinrange(x.shape[1])]#生成坐标轴标签文本ax.set_xticklabels(names)#生成x轴标签ax.set_yticklabels(names)#生成y轴标签以上代码的作用已经在注释中注明了。需要注意以下几点:由于相关结果看的是绝对值的大小,所以需要对correlation_matrix进行绝对值运算,其对应的取值范围会变成[0,1]。由于原始数据中没有列标题,所以这里使用列表推导生成从x0到x8的原始9个特征。显示结果如图所示。从图像中的匹配颜色可以看出:颜色越亮(颜色颜色越黄),相关结果越高,所以从左上角到右下角出现一条黄色斜线;而越亮的第5列和第1列、第7列、第4列和第6列、第8列和第6列分别对应x4和x6、x3和x5、x7和x5。在上述过程中,需要考虑的主要关键点是:如何理解相关性和因果关系的区别,以及如何应用相关性。相关分析不仅可以用来分析不同变量之间的相关和伴随关系,还可以用来做多重共线性检验。代码实践总结:在本节的例子中,主要用到以下知识点。通过Numpy的loadtxt方法读取文本数据文件,并指定分隔符;切片Numpy矩阵;使用Numpy中的corrcoef进行相关性分析;使用舍入法保留2位小数;使用np.abs取绝对值;使用列表理解生成新列表;使用Matplotlib的热图显示相关结果。
