3

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

背景

我们有资产的时间序列数据,我们从中计算相关矩阵。对于使用 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

在资产管理中,人们想要多元化。如果投资组合中的两个或多个资产相关性太高,它会集中而不是分散风险。

我们想要什么

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

我将通过以下几个示例来说明集中风险,但首先...

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

有几件事使这成为一个有趣且具有挑战性的问题:

虽然与“有效边界”相关,但我们对各个工具使用的未来表现没有任何假设。

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

主成分分析似乎是一种自然的方式来看待这个问题,但似乎也没有给我们我们需要的东西。

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

(* This function computes the distribution of returns, given a \
distribution of price movements.*)

returnDistribution[P_, n_] := Module[ {xv, wv},
  wv = Array[w, n];
  xv = Array[x, n];
  varsInPlane = 
   Append[Delete[xv, n], (r - Total[Delete[wv*xv, n]])/wv[[n]]];
  Integrate[PDF[P, varsInPlane], 
   Map[Function[{#, -Infinity, Infinity}], Delete[xv, n]]
   ]
  ]

dist = MultinormalDistribution[
   ConstantArray[0, 3], {{1, 0.9, 0}, {0.9, 1, 0}, {0, 0, 1}}];
rd = returnDistribution[dist, 3]

(* The problem we want to solve is this *)
wv = Array[w, n];
Maximize[{rd*Log[rd, 2], 
  Total[wv] == 1 && And @@ Thread[wv >= 0]}, wv]

Attilio Meucci 有一篇论文“管理多元化”和一些看起来很有希望的 MatLab 代码,

http://www.symmys.com/AttilioMeucci/Research/PublFinance/PublFinance.html

但在看过我的一位同事后评论它是:

他似乎在做我想做的大致相同的事情(在放弃这个想法之前),除了他有点作弊。他没有实际计算连续熵,而是将每个主成分视为离散赌注。但基本上,他的论文是我对多个相关硬币翻转所做的计算的改进版本。这迫使您从其他变量中获取熵,而不是从当前变量的额外数字中获取熵。

对非正态分布做他正在做的事情可能会更棘手,尽管我认为可以将生成模型用于“95% 标准正态分布,5% 非常糟糕”形式的情况。

集中风险示例

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

如果我们在思想实验中查看 3 种资产的投资组合,最容易理解我们想要实现的目标。假设 2 个工具的相关性为 1 (100%),第三个为 0,其相关矩阵如下所示:

1, 1, 0

1, 1, 0

0, 0, 1

在这种情况下,从我们的角度来看,将 25% 放在 2 只相关股票中,将 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}}

这看起来不错。它给了我们:

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}

在这种情况下,我们为第 4 个资产分配了负数 (-0.0541658),这对于我们想要实现的目标没有意义。

结论

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

随便看这个的人总是建议CAPM(资本资产定价模型)这样做。它不是。考虑到上述相关性将资产与资产相关联,而不是每个资产与“市场”相关联,因此它没有可使用的“贝塔”。此外,所描述的问题没有假设回报或使用无风险利率或价格的正态分布。我可以看到 CAPM 看起来像是一种方法,但我看不出它是如何应用的。

非常感谢,

阿伦·加拉帕塔

4

2 回答 2

2

在您的极端测试示例中,您有无数种解决方案;妈妈挑出其中一个。如果您希望它选择一个使(未识别的)权重大致相等的解决方案,那么您应该告诉它您关心该方面:例如,您可以对偏离相等性添加惩罚。试试这个:

lambda = .00001;
NMinimize[{p.m5.p - 
   lambda*PDF[DirichletDistribution[Table[2, {5}]], Most[p]], 
  Tr@p == 1 && And @@ Thread[p >= 0]}, p]

我使用了平均为 1/5 的 Dirichlet 分布。调整参数包括 lambda 和 Dirichlet 分布中的参数“2”(控制均值附近的浓度)。您将不得不根据实际问题使用这些调整参数。对于您不太极端的示例,您可以尝试

lambda = .0001;
NMinimize[{p.m.p - 
   lambda*PDF[DirichletDistribution[Table[2, {5}]], Most[p]], 
  Tr@p == 1 && And @@ Thread[p >= 0]}, p]

- 标记

于 2011-01-28T16:27:09.067 回答
2

我将提出一个简单且略有缺陷的方法。对于每个资产,求和其协方差。然后将其百分比与该总和与协方差总和的比率成反比。

在代码中,使用您的原始示例,我们将执行以下操作。

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]]

出[26]= {4.129760099114916, 4.337254104111004, 4.479986290069387, \ 4.173066277624756, 15.51647047130198}

normalized = unnormalized/Total[unnormalized]

输出[27]= {0.1265379371734397, 0.1328956583819156, 0.1372690447157368, \ 0.1278648603757522, 0.4754324993531559}

我怀疑这些值构成了此示例的合理结果。

有两个缺陷。一是这没有考虑资产的相对强度。我不认为这是一个问题,因为我怀疑你已经为此加权了,即一美元资产 1 值一美元资产 2 值...

- 编辑 -

这最后一点不太正确。您需要同时考虑资产价格和相同的估计回报。不知道你想如何在我展示的代码中处理这个问题。也许稍微加权协方差,以便“更好”的资产(就回报与价格而言)给出更好的协方​​差数字?

--结束编辑--

一个更大的问题是,当存在很大的负相关时,这不会很好。如何处理这取决于您想要的行为。例如,如果一对资产是负相关的,你觉得它们比零相关更可取吗?如果不是,那么一个简单的解决方法是将负相关转换为正相关的一部分(或者将它们设为零,如果负相关被认为不比不相关资产更好或更差)。

如果,正如我所怀疑的那样,一对负相关使它们在一起相对更可取的位置(让你更能抵御衰退),那么我们必须调整上面的代码,这样我们就不会在相关性总计达到或超过-1。我认为,一个合理的启发式方法是,如果它们的总和在 (-0.5,0) 范围内,则将它们单独放在一行中,否则将它们归一化为 -0.5。

显然,所有这些都是启发式的,并且可以调整参数,例如可以使用逆幂关系而不仅仅是逆。可以以我建议的方式以外的方式处理负面因素。可以添加阅读茶叶...

请注意,我不在我的领域,所以任何术语的滥用都是无意的。也许也超出了我的深度。

Daniel Lichtblau Wolfram 研究

于 2011-01-29T23:54:16.987 回答