量化交易平台Quantopian讲座(14)——斯皮尔曼秩相关

使用斯皮尔曼秩相关系数,可以知道两个数据序列是否同向变动,这种关系比线性关系更加泛化。例如指数函数:y=e^x,为一个单调递增函数,但却不是一个线性函数。在这种情况下,我们需要比较的不再是原数据,而是原数据的秩(rank
)。

何时使用?
1、 数据集中数据单位不同,例如一块土地价格与其边长的关系
2、数据集不满足其他假设的前提条件是,例如t-检验要求数据必须满足正态分布。

首先使用scipy的内置函数,先让大家对于秩有一个直观认识

计算秩

看到这,估计很多人也是一脸懵逼状,简单来说,就是对原数据排序,最小的秩为1,后面的数据依次递增,而上例中5位于排序后的第1和第2位置,所以根据average的算法,为(1+2)/2=1.5。

斯皮尔曼秩相关系数

还是重提开篇所言,斯皮尔曼秩相关是指不再直接研究两个变量间的关系,转而去研究他们的秩的关系。这会带来的好处是,对于异常值和不同数据规模会更加的健壮有效。
两个集合X与Y的斯皮尔曼秩相关系数定义如下:


斯皮尔曼秩相关系数

最终的结果在-1~1之间。正值表示两个变量间正相关,负值则表示负相关,0值表示无任何单调关系(但这并不表示两者完全无关联,例如可能存在时间序列上的延迟关系)。

实例

下面我们通过一个实例来说明斯皮尔曼秩相关系数,假设X服从泊松分布(非正态分布),Y的构造如下:

Y定义

根据此数据,我们进行多次试验,分别计算斯皮尔曼秩相关系数与正常相关系数。因为指数函数的存在,会导致数据中产生一些异常值,斯皮尔曼秩会对这些异常值进行压缩,从而可以更好地衡量相关性,而正常的相关系受异常值的影响更大。
我们进行1000次实验,最终得到斯皮尔曼秩相关系数与正常相关系数均值:
1000次实验对比

为了更加直观地体现斯皮尔曼秩相关系数的压缩效果,将两者同时绘制出来:
绘制代码

绘制图形

接下来,增大噪声数据,来观察两种相关系数的变化
增大噪声代码

增大噪声数据后图形

从图中可以看到,斯皮尔曼秩相关系数在绝大数情况下,对于非线性关系的处理要优于正常相关系数,但在噪声数据非常大的情况下,会逊于正常相关系数。
scipy中也提供了内置的函数计算斯皮尔曼秩相关系数
scipy内置函数

单纯计算斯皮尔曼秩相关系数,是无法衡量关联系数的显著性水平的,可以看到内置函数的结果中还包含了p值,默认的置信水平为0.05,上例中p值大于了置信水平,所以无法得到X与Y是相关联的结论。

延时关系

在现实中,经常会出现两者相互关联,但是存在时间上的延迟的情况。通过随机数据,我们来构造一对这样的数据集:


延时关系数据

从最终的结果可以看到,最终计算得到的斯皮尔曼秩相关系数非常接近于0,但是其实两组数据间有非常强的关联关系。

现实实例一:共同基金的费率

我们期望探讨基金的费率与其三年的夏普比率间是否是正相关的,也就是说管理费用越高,那么会使得风险更低(夏普比率的坟墓更小)或者收益更高(夏普比率的分子越大)。
下面的例子中使用的基金数据已经下载到mutual_fund_data.csv文件中,且置信水平默认为0.05,
数据绘制如下:


数据绘图

再通过内置函数计算斯皮尔曼秩相关系数与p值


image.png

**结论:可以看到p值是小于置信水平0.05的,所以可以认为两者是相关的,且负数表示两者是负相关的,费率越贵的基金其夏普比率反而更差。但是可以看到图中存在一些聚集,这些都需要进一步的分析,在这里暂且按下不表。

实际使用示例:评估证券排序模型

现实中我们经常会使用一些指标对于证券进行排序,这样也就需要对于该排序模型进行优劣评估。下面的例子中使用单月的平均每日收益指标来进行排序,假设该指标可以用于预测下个月的收益。为了验证这个假设,我们先基于历史窗口数据对于证券进行评分,再计算评分结果与下一时间窗口的每日平均收益的斯皮尔曼秩相关系数。

示例代码

最终可得到相关结果与图示
结果与图示

结论:可以得到p值是小于置信水平0.05的,所以可以认为该排序是有效的,且当月的平均收益与下个月的平均收益是负相关的。

本文就到这里,感谢阅读,欢迎订阅!

你可能感兴趣的:(量化交易平台Quantopian讲座(14)——斯皮尔曼秩相关)