差異を「直感的に」最小限に抑える
-
26-10-2019 - |
質問
資産運用においては問題が発生します。このフォーラムで検討するのに十分な興味深い質問が提起されると思います (そして願っています)。私たちは文献をかなり広範に検索し、この問題について言及しているものを見つけましたが、この問題に直接対処するものは何もありませんでした。
背景
資産の時系列データがあり、そこから相関行列を計算します。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
資産運用では分散が望まれます。ポートフォリオ内の 2 つ以上の資産の相関性が高すぎる場合、リスクは分散されずに集中してしまいます。
私たちが欲しいもの
すべての商品で常に一定のポジションを保持しながら、ポートフォリオの「集中」リスクを最小限に抑える資産のポートフォリオを構築するためのアプローチまたは方法が必要です。
以下に集中リスクをいくつかの例で説明しますが、その前に...
なぜこれが興味深い問題または質問なのでしょうか?
いくつかの理由から、これは興味深く、挑戦的な質問になります。
「効率的なフロンティア」に関連していますが、使用する個々の機器の将来のパフォーマンスについては想定していません。
分散を最小限に抑えると答えは得られますが、直感的に満足のいく答え、あるいは役立つ答えは得られません。
主成分分析はこれを調べる自然な方法のように思えますが、必要なことは得られないようです。
私たちはエントロピーの最大化の使用を検討してきましたが、離散エントロピーに精通しているうちの 1 人はそれが有望だと考えていましたが、これを連続エントロピーの観点から考えてみると、行き止まりであることがわかりました。次のコードは、私たちが調べた内容の概要を示しています (実際に実行されるかどうかはわかりません)。
(* 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 には「Managing Diversification」という論文と有望そうないくつかの MatLab コードがあります。
http://www.symmys.com/AttilioMeucci/Research/PublFinance/PublFinance.html
しかし、それを見た後、同僚の一人が次のようにコメントしました。
彼もほぼ同じことをしているようです やりたかったこと(前 という考えを捨てる)が、 少し浮気をしています。実際にではなく、 連続エントロピーを計算すると、彼は 各プリンシパルを扱っているだけです コンポーネントを個別のベットとして。だがしかし 基本的に、彼の論文は洗練されています 私が行った計算のバージョン 複数の相関コインフリップ。これ 他のエントロピーからエントロピーを取得するように強制します 変数ではなく、 現在の変数の桁数。
彼が非正常に対して行っていることをするために ただし、配布は難しいかもしれません 私は1つが使用できると想像します 状況の生成モデル 「95%標準」という形式 分布、5%は本当に何か 悪い」。
集中リスクの例
集中リスクを説明するためのいくつかの簡単な例
思考実験で 3 つの資産のポートフォリオを見ると、何を達成したいのかを理解するのが最も簡単です。2 つの商品の相関が 1 (100%) で、3 つ目の商品の相関が 0 であると仮定すると、相関行列は次のようになります。
1, 1, 0
1, 1, 0
0, 0, 1
この場合、私たちの観点からすると、相関関係のある 2 つの銘柄にそれぞれ 25% を割り当て、相関関係のない銘柄に 50% を割り当てるのが理にかなっています。
25%, 25%, 50%
これにより、100%相関する資産が実際には依然として異なる商品であり、将来の相関関係が変化する可能性があることを認識しながら、相関のある商品に集中するリスクが相殺されます。
100% の相関関係を持つ 2 つの資産が同じように動くため、可能な範囲の割り当てが同様に目的にかなう可能性があると主張する人もいるかもしれません。
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」は行列のトレースを検索し、「/@」は関数をリストまたは行列にマップします。残りの部分はおそらく理にかなっています。
4 つのアセットの別の例:
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 (Capital Asset Pricing Model) がこれを行うのではないかといつも示唆します。そうではありません。上で説明した相関関係は、各資産を「市場」に関連付けるのではなく、資産と資産を関連付けているため、操作する「ベータ」が存在しないことを考慮してください。また、説明されている問題では、リターンやリスクフリー レートや価格の正規分布の使用が想定されていません。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]]
Out[26]= {4.129760099114916, 4.337254104111004, 4.479986290069387, \ 4.173066277624756, 15.51647047130198}
normalized = unnormalized/Total[unnormalized]
Out[27]= {0.1265379371734397, 0.1328956583819156, 0.1372690447157368, \ 0.1278648603757522, 0.4754324993531559}
これらの値がこの例の妥当な結果を構成していると思います。
欠陥が 2 つあります。1 つは、これは資産の相対的な強さを考慮していないということです。それは問題ないと思います。なぜなら、あなたはすでにそれを重視していると思うからです。資産 1 の 1 ドルの価値はあります 資産 2 の 1 ドルの価値はあります...
- 編集 -
この最後は完全に正しいとは言えません。資産の価格とその推定収益の両方を考慮する必要があります。私が示したコードでこれをどのように処理したいのかわかりません。おそらく、共分散にわずかに重みを付けて、(収益と収益の観点から)資産が「より良く」なるようにします。価格)より良い共分散数値が得られるでしょうか?
--編集終了--
さらに大きな問題は、負の相関が大きい場合、これがうまく機能しないことです。これをどのように処理するかは、具体的にどのような動作が必要かによって異なります。たとえば、資産のペアに負の相関がある場合、相関がゼロであるよりも望ましいと思いますか?「いいえ」の場合、簡単な修正は、負の相関を正の相関の一部に変えることです (または、負の相関が相関のない資産と比べて良くも悪くもないと考えられる場合はゼロにします)。
私の推測では、負の相関関係を持つペアにより、ポジションを持つのが相対的に望ましい(不況に強くなる)場合は、相関の合計がヒットしたときに値が爆発しないように、上記のコードを調整する必要があります。 -1を超える。合理的なヒューリスティックは、連続する負の値の合計が (-0.5,0) の範囲内にある場合はそのままにし、それ以外の場合は合計が -0.5 になるように正規化することだと思います。
明らかに、これはすべてヒューリスティックであり、パラメーターは調整できます。単に逆にする代わりに、逆べき乗関係を使用することもできます。私が提案したもの以外の何らかの方法でネガティブを処理できる可能性があります。茶葉の読み方を追加できます...
ここで私は専門外であるため、用語の誤用は意図的ではないことに注意してください。もしかしたら私の深みからも外れているかもしれません。
ダニエル・リヒトブラウ Wolframの研究
他のヒント
極端なテスト例では、無限の数の解が存在します。Mma はその中から 1 つを選びます。(未確認の) 重みを互いにほぼ等しくする解決策を選択してもらいたい場合は、その点を考慮していることを伝える必要があります。たとえば、平等から逸脱した場合にペナルティを追加できます。これを試して:
lambda = .00001;
NMinimize[{p.m5.p -
lambda*PDF[DirichletDistribution[Table[2, {5}]], Most[p]],
Tr@p == 1 && And @@ Thread[p >= 0]}, p]
平均 1/5 のディリクレ分布を使用しました。調整パラメーターには、ラムダとディリクレ分布のパラメーター「2」(平均値付近の濃度を制御します) の両方が含まれます。実際の問題に応じて、これらの調整パラメータを調整する必要があります。それほど極端ではない例として、次のようにしてみるとよいでしょう
lambda = .0001;
NMinimize[{p.m.p -
lambda*PDF[DirichletDistribution[Table[2, {5}]], Most[p]],
Tr@p == 1 && And @@ Thread[p >= 0]}, p]
- マーク