本文阅读时间大概在8分钟。

相关性分析

我们常说的相关性分析是分析两个变量之间线性相关程度的方法,其相关性强度的度量即为相关性系数。现实中很多事物间都拥有或多或少的相关性,例如,房屋面积对价格的影响,节假日对销量变化的影响等等。

1、 目前相关性分析方法主要分为以下三类:

(1) Pearson(皮尔逊)相关系数

皮尔逊相关系数是一种衡量连续变量(销量,销售额等)相关性的指标,对数据进行假设的参数检验,检验效能高,其计算公式如下:

其中

分别为变量X,Y的均值(期望),

分别为变量X,Y的的标准差。其取值范围[-1,1],绝对值越大相关性越强。

> Pearson相关系数使用时有以下限制条件 :

> * 两变量方差服从正态分布,且变量间方差齐性;

> * 两变量之间存在线性关系;

> * 变量连续且变量之间有相同的观测值,且不应允许缺失值的存在。

(2) Spearman(斯皮尔曼)相关系数

斯皮尔曼相关系数是一种衡量分类变量(性别,区域等)相关性的指标,是对数据进行假设的非参数检验,适用范围更广一些,对于不符合正态分布的变量也可使用,其计算公式同Pearson相似如下:

其中

分别为变量X,Y的均值(期望),

,这里的

是分别对变量进行等级化后的运算。举个例子:

变量

变量

的排名

的排名

86

0

1

1

0

0

97

20

2

6

-4

16

99

28

3

8

-5

25

100

27

4

7

-3

9

101

50

5

10

-5

25

103

29

6

9

-3

9

106

7

7

3

4

16

110

17

8

5

3

9

112

6

9

2

7

49

113

12

10

4

6

36

根据计算结果

,由于Spearman相关系数将数据转化为"等级"的原因,因此较Pearson相关系数有较小的敏感性。

(3) Kendall(肯德尔)相关系数

肯德尔相关系数是一种衡量定序变量(年龄等)之间相关性程度的指标,对数据进行假设的非参数检验,其计算公式如下:

P为两变量属性排列一致的统计对象对数(1对、2对)。举个例子:

pearson

A

B

C

D

E

F

G

H

Height

1

2

3

4

5

6

7

8

Weight

3

4

1

2

5

7

8

6

上表Height和Weight的值是用户的排名,Height已升序排序,此时对应Height第一位的重量排名为3,在右方大于3的统计量还有其他5个元素(4,5,7,8,6),因此该元素对P的贡献为5,以此类推统计每个元素的贡献数,P=5 + 4 + 5 + 4 + 3 +1 + 0 + 0 = 22,代入公式得

2、 三种相关系数对数据的要求

(1) Pearson相关系数:要求数据具有连续性、正态分布性等特点,因此应对数据分布进行严格的验证,否则可能会出现相反的效果。

(2) Spearman相关系数 :对于不满足Pearson相关系数要求的连续型变量数据,可以使用Spearman相关系数,也可针对定序和定类变量的数据。

(3) Kendall相关系数 :Kendall相关系数数据条件与Spearman相同,常常使用定序数据相关性分析。

3、 相关系数假设检验步骤

提出原假设和备择假设

假设检验的目的是为了验证相关系数结果是否显著,即是否显著异于不相关

确定显著性水平(阈值

)

若低于阈值

,则表示需要拒绝原假设,在这里则表示变量之间不相关。

收集样本数据并计算检验统计量的值。

P值法

利用检验统计量计算出P-值 。

如果P-值

,则拒绝原假设

临界值法

利用显著性水平确定临界值以及拒绝法则。

根据检验统计量的值以及拒绝法则确定是否拒绝

为什么要做相关性分析?

筛选核心运营监控指标

在业务运营过程中我们往往会制定一个北极星指标,比如GMV、浏览用户数、NPS等,我们在根据业务模块对北极星指标进行拆解时,各个模块时会有各种指标来衡量其健康度,但冗杂的指标也会带来业务分析的繁杂性,因此我们可以根据相关性来对筛选更能反应业务健康度的指标,即选取与北极星指标关联程度比较高的指标。但这里我们要注意,相关性高只是代表两变量具有很高的共趋性,不代表有因果关系。

在下面的实战中,我将会使用Spearman相关系数对转化率、页面停留时长和商品满意度之间的重要性程度进行分析。

利用相关系数选择机器学习中的特征

我们在建立机器学习模型时,往往会通过特征工程来对特征进行构建,但维度增加并不意味着能带来更高的计算精度,甚至有可能降精度。而且由于维度的增加计算量呈指数倍增长,大幅降低了计算机运算速度,因此,我们我们可以通过相关性系数筛选出与因变量相关性高的变量作为特征。此外,如果存在特征之间相关性系数很高,我们应将其剔除来保证模型的稳定性。

Python实践

Pearson相关系数

由于Pearson相关系数在使用时要求数据服从正态分布,因此我们在计算统计量或者P-值前,需先检验数据是否服从正态分布。我们可以使用K-S检验来检验数据是否与正态分布服从相同分布。

K-S检验是以样本的累计频数分布与特定理论分布进行比较,如果两者差距较小,则表示样本分布与该理论分布服从一致。K-S检验也是使用了假设检验的方法进行验证,其原假设和备则假设为:

# 导入相关第三方包

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

import scipy

# 修复图片中文显示乱码及刻度显示缺失问题

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

%matplotlib inline

# 我们从社区住户收入中位数与房价中位数进行分析,研究社区住户的收入中位数与房价中位数

ls1 = [8.3252,8.3014,7.2574,5.6431,3.8462,4.0368,3.6591,3.12,2.0804,3.6912,3.2031,3.2705,3.075, 2.6736, 1.9167, 2.125,

2.775, 2.1202, 1.9911, 2.6033, 1.3578, 1.7135, 1.725, 2.1806, 2.6, 2.4038, 2.4597, 1.808, 1.6424, 1.6875]

ls2 = [452600, 358500, 352100, 341300, 342200, 269700, 299200, 241400, 226700, 261100, 281500, 241800, 213500, 191300, 159200,

140000, 152500, 155500, 158700, 162900, 147500, 159800, 113900, 99700, 132600, 107500, 93800, 105500, 108900,132000]

data = pd.DataFrame({'收入中位数':ls1,'房价中位数':ls2})

# 首先绘制出各属性关系图

sns.pairplot(data,kind='scatter',diag_kind='kde')

从上图中我们可以看出两点:

收入中位数与房价中位数大致服从正态分布

收入中位数和房价中位数有明显的相关性。

因此接下来我们将验证以上两个观点。

正态性检验

我们直接调用第三方包scipy进行验证,我们设置显著性为0.05。

for column in data.columns:

u = data[column].mean() # 计算均值

std = data[column].std() # 计算标准差

r,p = scipy.stats.kstest(data[column],'norm',(u,std))

if p>0.05:

print('拒绝原假设,显著性水平为{},变量{}服从正态分布'.format(p,column))

else:

print('接受原假设,显著性水平为{},变量{}不服从正态分布'.format(p,column))

拒绝原假设,显著性水平为0.11240126885002111,变量收入中位数服从正态分布

拒绝原假设,显著性水平为0.1179017959613895,变量房价中位数服从正态分布

相关性分析

r1,p1 = scipy.stats.pearsonr(data['收入中位数'],data['房价中位数'])

print('收入中位数与房价中位数的相关性系数为{0},显著性水平为{1}'.format(r1,p1))

收入中位数与房价中位数的相关性系数为0.7997775305895439,显著性水平为1.1426961967081732e-07

Spearman相关系数

我们在业务数据分析时,需要选取能够反映业务的核心运营指标,在面对大量指标时我们可以使用Spearman相关系数进行分析。接下来我们对商详转化率、页面停留时长以及商品满意度三个指标进行分析,其中北极星指标为商详转化率,我们看下用户页面停留时长和商品满意度与转化率之间的相关性。

# 商详转化率

y=[0.691, 0.719, 0.685, 0.695, 0.664, 0.634, 0.651, 0.672, 0.674, 0.66 , 0.627, 0.612]

# 页面停留时长

x1=[68. , 70.5, 67.8, 67.9, 64.3, 62.5, 63.6, 65.2, 65.3, 64.7, 61.6,58.7]

# 商品满意度

x2 = [0.776, 0.908, 0.827, 0.851, 0.638, 0.61 , 0.649, 0.692, 0.832, 0.762, 0.756, 0.676]

# 我们选取显著性水平为0.05。经分析商详转化率与页面停留时长的相关性更高,因此可重点关注页面停留时长

r1,p1 = scipy.stats.spearmanr(x1,y)

print('商详转化率与页面停留时长的相关性系数为{0},显著性水平为{1}'.format(r1,p1))

r2,p2 = scipy.stats.spearmanr(x2,y)

print('商详转化率与商品满意度的相关性系数为{0},显著性水平为{1}'.format(r2,p2))

商详转化率与页面停留时长的相关性系数为0.9860139860139862,显著性水平为4.1168959116543284e-09

商详转化率与商品满意度的相关性系数为0.7832167832167832,显著性水平为0.002586214833362591

Kendall相关系数

Kendall主要种衡量定序变量(年龄等)之间相关性程度的指标,我们以一组人的身高和体重的排名为例进行分析。

# 经分析身高排名与体重排名具有显著的相关关系。

weight = [1,2,3,4,5,6,7,8,9]

height = [2,3,1,4,6,5,8,7,9]

r,p = scipy.stats.kendalltau(weight,height)

print('身高排名与体重排名的相关性系数为{0},显著性水平为{1}'.format(r,p))

身高排名与体重排名的相关性系数为0.7777777777777778,显著性水平为0.0024250440917107582

Q&A

Q1:相关性系数真的能反应变量之间的相关性吗?

(1)如果变量之间为线性关系,则相关性系数的绝对值越大,变量之间相关性越强。

(2)如果变量之间存在非线性关系,其相关系数绝对值也可能很大也可能很小,此时不能用相关系数衡量。

(3)相关性系数很容易受到离群点(异常点)的影响,也可能造成相关系数错误的反应变量的相关性。

针对以上情况,最好先将数据画散点图大致看下数据的趋势。

Q2.相关和因果是一回事吗?

业务人员往往对两者关系的混淆,因果一定相关,相关不一定因果。相关关系是对称性的,而因果关系是非对称性的,相关关系表示变量间存在某种程度的关联性,在现实中,相关性往往更容易证明,而因果关系往往通过设计AB实验对指标影响原因进行分析。

Q3. 相关性系数与协方差的影响

相关性系数是标准化的,

由于协方差,协方差只能看出数据之间线性关系的方向,不能判别强度,因为它的取值没有固定范围,只能得到正线性相关或者负线性相关的结论。

Q4. 参数检验和非参数检验的区别和使用情况。

区别

参数检验:以已知分布(如正态分布)为假定条件,对总体参数进行估计或检验。

非参数检验:不依赖总体分布的具体形式和检验分布(如位置)是否相同。

各自优缺点

参数检验:优点是符合条件时,检验效率高;缺点是对资料要求严格,如等级数据、非确定数据不能使用参数检验,而且要求资料的分布型已知和总体方差齐性等。

非参数检验:优点是应用范围广、简便、易掌握;缺点是若对符合参数检验条件的资料用非参数检验,则检验效率低于参数检验。

python相关性分析模型,相关性分析原理及Python实战相关推荐

  1. 典型相关分析(cca)原理_CCA典型关联分析原理与Python案例

    文章来源于"脑机接口社区" CCA典型关联分析原理与Python案例​mp.weixin.qq.com Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑 ...

  2. 典型相关分析python实现_CCA典型关联分析原理与Python案例

    文章来源于"脑机接口社区"CCA典型关联分析原理与Python案例​mp.weixin.qq.com Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电 ...

  3. 典型相关分析 python_CCA典型关联分析原理与Python案例

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 Hello,大家好! Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用 ...

  4. CCA典型关联分析原理与Python案例

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 Hello,大家好! Rose今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用 ...

  5. python gdbt+fm_GBDT回归的原理及Python实现

    提到GBDT回归相信大家应该都不会觉得陌生(不陌生你点进来干嘛[捂脸]),本文就GBDT回归的基本原理进行讲解,并手把手.肩并肩地带您实现这一算法. 完整实现代码请参考本人的p...哦不是...git ...

  6. python微博评论情感分析_基于Python的微博情感分析系统设计

    2019 年第 6 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Python 的微博情感分析系统设计 王 欣 周文龙 (武汉工程大学邮电 ...

  7. python实现文本情感分析_用python实现简单的文本情感分析

    很久没在公众号发布新内容,在这段时间内没想到有这么多python爱好者关注了我,港真的,心里很兴奋激动. 今天给大家带来我刚刚实现了的简单多文本情感分析代码,代码环境python3.5 原理 比如这么 ...

  8. anaconda中的python如何进行关联分析_浅析python,PyCharm,Anaconda三者之间的关系

    一.它们是什么? Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一个开源的Pytho ...

  9. python收入波动告警分析_使用Python/Pandas分析告警日志数据

    作者:吕磊 文章来自微信公众号:平台人生 Python Python是一种面向对象的解释型程序设计语言.作为一种脚本语言,Python在运行性能上相对C/C++等编译型语言有一定不足,但Python语 ...

最新文章

  1. 极光推送后台php接口,极光推送Jpush(v2)接口 服务端PHP版本的REST API推送类
  2. java optional 用法_Java8 中的 Optional 相关用法
  3. python PyQt5 QtCore.QPointF类、QPointF类与QPoint类区别
  4. POJ2774 Long Long Message
  5. 最优化课堂笔记01: 第一章 最优化的基本概念
  6. [Hnoi2013]消毒
  7. 【HTML5】HTML5基础语法汇总
  8. python父亲节符号_菲菲用python编程绘制的父亲节礼物
  9. python名称空间_python基础:名称空间与作用域
  10. 浅谈机顶盒破解之修改开机画面 修改开机动画 修改系统app 去掉认证app
  11. 百度AI之百度图像识别java版本使用
  12. 软件开发成本度量之类比法估算软件工作量
  13. ❤️❤️新生代农民工熬夜整理Python入门教程,包教包会!附源码❤️❤️
  14. 深度学习课后week2 编程(识别猫)
  15. 软件测试cmm等级划分,CMM的五个等级及关键过程域
  16. 往后余生-程序员版,哈哈哈
  17. 1.4.3 ASBR-Summary-LSA
  18. ftp服务器下载,绿色版ftp服务器下载,以及ftp上传工具使用指南
  19. C语言 string.h头文件
  20. Unity封装MemoryStream进行内存读写

热门文章

  1. Skype for Business Server与Microsoft Teams的长期共存模式
  2. C# 使用正则表达式提取文字
  3. ACM大量习题题库及建议培养计划
  4. Stashed changes conflicted with hook auto-fixes...
  5. burg算法matlab求功率谱,基于AR模型的Burg算法功率谱估计.doc
  6. 如何查看电脑是否已经虚拟化
  7. vivo手机html有吗,vivo手机有哪些系列?区别是什么?
  8. C++ 简易的五子棋游戏 初学者
  9. gtx1660是什么级别的_显卡天梯图秒懂GTX1660Ti性能 GTX1660Ti相当于什么显卡
  10. Placing Medals on a Binary Tree