量化交易正态分布:Quantopian量化交易6
量化交易正态分布:Quantopian量化交易6而在现实生活中,比如要计算一个投资组合持仓的平均收益,各只股票的持仓数量与价格都不近相同,这时候就需要加权算数平均了。示例代码算术平均值注:其中Xi表示集合中各观测值 使用NumPy提供的mean()方法,我们可以很轻松的获取算术平均值。
对于一个数据集,通常会从数据的中心和分散程度两方面去进行衡量,最为常用的两个指标为均值(mean)与方差(variace),均值是用来衡量数据的中心,而方差则展示了数据的分散程度。
均值与方差
首先我们先来介绍下均值,均值又分为三种
算术平均值(Arithmetic mean)算术平均是日常中使用最为频繁的一种均值,它的数学定义式如下:
算术平均值
注:其中Xi表示集合中各观测值
使用NumPy提供的mean()方法,我们可以很轻松的获取算术平均值。
示例代码
而在现实生活中,比如要计算一个投资组合持仓的平均收益,各只股票的持仓数量与价格都不近相同,这时候就需要加权算数平均了。
加权算术平均
注: wi表示权重数组,所有权重相加等于1
算术平均使用加法来做平均,而几何平均则使用乘法来做平均,其定义式如下:
几何平均
注:如果所有的观测值Xi均大于等于0,还可以通过取对数,使得公式转化为加法的形式
对几何平均公式取对数
使用SciPy(另一个Python常用的科学计算库,NumPy属于其一部分)的gmean()函数可以计算几何平均值。
示例代码
注:如果数据集中有负数,该如何计算几何平均值,这个问题在计算资产投资回报的时候很容易解决,因为收益率最低值为-1(-100%),所以我们可以在所有值之上加1再计算算术平均值,此时公式可以写成:
计算收益率的算数平均
示例代码
调和平均值调和平均数一般使用较少,其定义式为:
调和平均数
这个式子可能不太好理解,我们可以做一个倒数操作,可以看到调和平均的倒数是所有观测值倒数的算术平均,例如,一个组合采用平均投资金额的策略,即每个股票分配相同的金额,股票价格高,则购买数量少,反之亦然。调和平均代表购买每只股票的平均成本。
调和平均数倒数
使用SciPy的hmean()函数可以计算调和平均值
示例代码
衡量数据的中心的方式除了使用均值外,常见的还有中位数(median)与众数(mode)
-
中位数表示将数据集排序后处于中间位置的数值,如果数据集中元素为奇数个,则为(n 1)/2位置元素,如果数据集元素为偶数个,则为n/2和(n 2)/2两个元素的平均值。
-
众数则表示结合中出现次数最多的元素
以前这几种方式都可以看作为点估计(以一个点表示整个数据集的特性)的一种,在使用的时候一定要确定没有遗漏其他的重要信息,一般情况下均值不会单独使用,会辅以数据分散情况的指标。还有一点需要特别注意,尽量不要假设数据的分布,因为如果假设的分布与真实不符,那么即使你使用了正确的度量方法,也会得到一个令人啼笑皆非的结果。
接下来的部分,为大家介绍度量数据分散程度的几种方式。而这部分在金融中尤为重要,因为衡量风险的一个主要途径就是看历史的收益的分散情况,如果收益数据围绕在均值附近很集中的位置,那么可以认为风险很小,相反,如果收益很分散,则风险就很高。
首先,我们先准备一下数据,使用NumPy产生包含20个随机整数的一个数组
数据准备示例代码
跨度(Range)跨度为数据集中最大值与最小值之差,集合中异常值会对其造成很大影响,使用np.ptp()方法可以获取该值。
获取跨度值示例代码
平均绝对偏差(MAD/Mean Absolute Deviation)平均绝对偏差表示所有元素与算数平均的绝对距离的算术平均值,定义式如下:
平均绝对偏差
注:n表示元素个数, μ表示算数平均值,特别注意是要取绝对值
循环求和再除以元素个数,很容易就能得到MAD值:
计算MAD
方差与标准差(Variance & standard deviation)方差表示所有元素与算数平均的平方差的算术平均值,定义式如下:
方差
注:与平均绝对偏差相比,方差因为其可微分的特性使用得更为广泛
对方差开方后,就可以得到标准差。
NumPy提供了np.var()与np.std()方法计算方差与标准差。
计算方差与标准差
提到标准差,我们在这里引入切比雪夫不等式,它可以帮我们理解标准差的作用。切比雪夫不等式是指,样本落在算数平均左右k(k>1)个标准差内的概率,至少是1-1/k^2,这个范围与真实的概率可能相差较多,但因为其对于数据与分布没有任何要求,应用非常广泛。
方差与标准差虽然展示了数据的波动性,但是却没有区分波动的方向,特别是在金融中计量资产收益率的时候,我们往往更关注与低于预期值的部分,这就是半方差与半离差存在的意义。
半方差定义式如下:
半方差
注:公式中(n<)表示比算数平均值小的元素个数,求和部分也有此过滤条件
半离差则为半方差的平分根。
NumPy中没有自带的函数,但根据定义也很容易实现
计算半方差代码
如果将公式中的算数平均换做一个最低目标值,就可以得到目标半方差与目标半离差
目标半方差
到这里,本篇文章也接近尾声,但是最后要说的事情非常重要!目前我们所计算的这些均值与方差,都只是针对样本数据的,但它们是否能正确的反应总体的分布却不一定,技术上和细节处之后都还需要大量的工作来保证最后结果的有效性。之后的文章会包含此部分内容。
感谢阅读,欢迎订阅!