Statistics “最大限度地减少差异”;直观地说;

Statistics “最大限度地减少差异”;直观地说;,statistics,wolfram-mathematica,correlation,variance,Statistics,Wolfram Mathematica,Correlation,Variance,我们在资产管理方面遇到了一个问题。我认为(并且希望)它提出了足够有趣的问题来讨论这个论坛。我们对文献进行了相当广泛的搜索,找到了围绕这个问题的话题,但并没有直接涉及这个问题 背景 我们有资产的时间序列数据,从中我们计算相关矩阵。对于使用Mathematica的5个资产,它可能如下所示: m = Correlation[data] {{1.0, 0.635562, 0.698852, 0.404792, -0.32746}, {0.635562, 1.0, 0.410075, 0.314375,

我们在资产管理方面遇到了一个问题。我认为(并且希望)它提出了足够有趣的问题来讨论这个论坛。我们对文献进行了相当广泛的搜索,找到了围绕这个问题的话题,但并没有直接涉及这个问题

背景

我们有资产的时间序列数据,从中我们计算相关矩阵。对于使用Mathematica的5个资产,它可能如下所示:

m = Correlation[data]

{{1.0, 0.635562, 0.698852, 0.404792, -0.32746}, {0.635562, 1.0, 0.410075, 0.314375, -0.0636438}, {0.698852, 0.410075, 1.0, 0.374416, -0.260137}, {0.404792, 0.314375, 0.374416, 1.0, 0.293135}, {-0.32746, -0.0636438, -0.260137, 0.293135, 1.0}}

m //TableForm

1.000000, 0.635562, 0.698852, 0.404792, -0.32746

0.635562, 1.000000, 0.410075, 0.314375, -0.0636438

0.698852, 0.410075, 1.000000, 0.374416, -0.260137

0.404792, 0.314375, 0.374416, 1.000000, 0.293135

-0.32746, -0.0636438, -0.260137, 0.293135, 1.000000
1, 1, 0

1, 1, 0

0, 0, 1
在资产管理领域,人们希望多样化。如果一个投资组合中的两个或多个资产关联度过高,则会集中而不是分散风险

我们想要什么

我们需要一种方法或方法来构建一个资产组合,使投资组合的“集中”风险最小化,同时始终在所有工具中持有一定的头寸

下面我将用几个例子来说明集中风险,但首先

为什么这是一个有趣的问题?

以下几点使这成为一个有趣且具有挑战性的问题:

虽然与“有效前沿”相关,但我们对个别工具的未来绩效没有任何假设

最小化方差给出了一个答案,但不是一个直观上令人满意甚至有用的答案

主成分分析似乎是看待这一问题的自然方法,但似乎也不能提供我们需要的东西

我们已经研究过使用熵最大化,但是我们的一个熟悉离散熵的人认为它似乎很有前途,当我们试图用连续熵来思考这个问题时,它被证明是一条死胡同。下面的代码给出了我们所看到的内容(不确定它是否实际运行):

Attilio Meucci有一篇题为“管理多样化”的论文和一些看起来很有前途的MatLab代码

但在看了之后,我的一位同事评论道:

他似乎也在做同样的事情 我(以前)想做的事 放弃这个想法),除非他是 有点作弊。而不是实际上 他计算了连续熵 只是对待每一位校长 组件作为一个离散的赌注。但是 基本上,他的论文是一篇精炼的论文 我使用的计算版本 多个相关的硬币翻转。这 强迫你从其他人那里得到熵 变量,而不是来自额外的 当前变量的数字

对一个不正常的人做他正在做的事 不过,分发可能更为棘手 我想你可以用 情境生成模型 “95%标准正常”表格 分配,5%真的吗 坏的”

集中风险示例

几个简单的例子来说明集中风险

如果我们在一个思维实验中看一个由3种资产组成的投资组合,那么最容易理解我们想要实现什么。假设其中两种仪器的相关性为1(100%),第三种仪器的相关性为0,其相关性矩阵如下所示:

m = Correlation[data]

{{1.0, 0.635562, 0.698852, 0.404792, -0.32746}, {0.635562, 1.0, 0.410075, 0.314375, -0.0636438}, {0.698852, 0.410075, 1.0, 0.374416, -0.260137}, {0.404792, 0.314375, 0.374416, 1.0, 0.293135}, {-0.32746, -0.0636438, -0.260137, 0.293135, 1.0}}

m //TableForm

1.000000, 0.635562, 0.698852, 0.404792, -0.32746

0.635562, 1.000000, 0.410075, 0.314375, -0.0636438

0.698852, 0.410075, 1.000000, 0.374416, -0.260137

0.404792, 0.314375, 0.374416, 1.000000, 0.293135

-0.32746, -0.0636438, -0.260137, 0.293135, 1.000000
1, 1, 0

1, 1, 0

0, 0, 1
从我们在本例中的观点来看,将25%放在两个相关股票中,将50%放在不相关股票中是有意义的

25%, 25%, 50%
这抵消了专注于相关工具的风险,同时认识到100%的相关资产实际上仍然是不同的工具,其相关性在未来可能会发生变化

有人可能会认为,由于两项具有100%相关性的资产移动相同,那么一系列可能的分配可以同等地用于我们的目的,例如:

50%, 0%, 50%

0%, 50%, 50%

10%, 40%, 50%
。。。或者任何关于这个主题的变化

但是,由于我们不知道它们未来的相关性将如何演变,我们认为最好、最直观的解决方案仍然是:

25%, 25%, 50%
另一个例子

在由5项资产组成的投资组合中,4项具有100%相关性,1项具有0%相关性,相关性矩阵如下所示:

1, 1, 1, 1, 0

1, 1, 1, 1, 0

1, 1, 1, 1, 0

1, 1, 1, 1, 0

0, 0, 0, 0, 1
我们想要的投资组合分配比例如下:

12.5%、12.5%、12.5%、12.5%、50%

当然,现实世界给我们带来了更大的复杂性

我们尝试过的事情

最小化差异(有希望但不起作用)

有人建议将差异最小化,但可以看出,这并不能产生直观的解决方案:

一些Mathematica代码如下所示:

For 3 assets:

m3 = {{1, 1, 0}, {1, 1, 0 }, { 0, 0 , 1}};

Array[x, Length@m3];

Minimize[{p.m3.p, Tr@p == 1 && And @@ Thread[p >= 0]}, p]

{1/2, {x[1] -> 1/4, x[2] -> 1/4, x[3] -> 1/2}}
这看起来不错。它给了我们:

6.25%, 25%, 12.50%, 6.25%, 50%
25%,25%,50%

但是

对于5项资产:

m5 = {{1, 1, 1, 1, 0}, {1 , 1, 1, 1, 0 }, {1 , 1, 1, 1, 0 }, {1 , 1,1, 1, 0 }, { 0, 0 , 0, 0, 1}};

p = Array[x, Length@m5];

Minimize[{p.m5.p, Tr@p == 1 && And @@ Thread[p >= 0]}, p]

{1/2, {x[1] -> 1/16, x[2] -> 1/4, x[3] -> 1/8, x[4] -> 1/16, x[5] ->1/2}}
没有它给我们带来的那么好:

6.25%, 25%, 12.50%, 6.25%, 50%
因此,最小化方差即使在这种简单(如果人为)的情况下也不起作用,更不用说更现实的事情了

有希望的解决办法

我们讨论的一位参与者提出了一种很有希望的方法——至少对于没有任何负相关性的情况。也许这会导致有人提出一个更完整的解决方案

再次使用Mathematica代码:

m = {{1, 1, 0}, {1, 1, 0}, {0, 0, 1}};

Tr /@ PseudoInverse[m]/Tr[ Tr /@ PseudoInverse[m]]

{1/4, 1/4, 1/2}  
这正是我们想要的。注:对于那些不熟悉Mathematica代码的人,函数:“Tr”查找矩阵的跟踪,“@”将函数映射到列表或矩阵。其余的可能是有道理的

四种资产的另一个例子:

m = {{1, 1, 1, 0}, {1, 1, 1, 0}, {1, 1, 1, 0}, {0, 0, 0, 1}};

Tr /@ PseudoInverse[m]/Tr[ Tr /@ PseudoInverse[m]]

{1/6, 1/6, 1/6, 1/2}
同样,这正是我们想要的

这比最小化方差更好,但在一个更真实的例子中(本文描述的第一个例子),我们得到了一些不起作用的东西:

m = {{1.0, 0.635562, 0.698852, 0.404792, -0.32746}, {0.635562, 1.0, 0.410075, 0.314375, -0.0636438}, {0.698852, 0.410075, 1.0, 0.374416, -0.260137}, {0.404792, 0.314375, 0.374416, 1.0, 0.293135}, {-0.32746, -0.0636438, -0.260137, 0.293135, 1.0}}

Tr /@ PseudoInverse[m]/Tr[ Tr /@ PseudoInverse[m]]

{0.267806, 0.0898877, 0.22403, -0.0541658, 0.472441}
在本例中,第四项资产的配置为负(-0.0541658),这对于我们想要实现的目标来说没有意义

结论

所以,我们需要一种极小化的直观函数。我希望所有这些都足够清楚地描述了我们想要实现的目标。任何关于以完全不同的方式解决这个问题的建议或想法,或者对于扩展我们已经尝试过的任何事情的建议或想法,我们已经非常感激了

随便看看这一点的人总是认为资本资产定价模型(CAPM)确实如此
cormat = {{1.0, 0.635562, 0.698852, 
0.404792, -0.32746}, {0.635562, 1.0, 0.410075, 
0.314375, -0.0636438}, {0.698852, 0.410075, 1.0, 
0.374416, -0.260137}, {0.404792, 0.314375, 0.374416, 1.0, 
0.293135}, {-0.32746, -0.0636438, -0.260137, 0.293135, 1.0}};

n = Length[cormat];
xvars = Array[x, n];
corrs = Map[Total, cormat];
cortot = Total[Total[cormat]];

unnormalized = 
  xvars /. First[Solve[xvars == cortot/corrs, xvars]]
normalized = unnormalized/Total[unnormalized]