@yuichirominato 2018.06.12更新 228views

D-Waveで金融ポートフォリオ最適化問題を解く

D-Wave QUBO ポートフォリオ 量子アニーリング 金融

はじめに

金融資産運用モデルでもっともシンプルで計算しやすいモデルがポートフォリオ最適化問題です。今後のより複雑なモデルのために一旦ポートフォリオ最適化問題を量子コンピュータD-Waveで解いてみます。使用するマシンは自社で借りているD-Waveです。

ポートフォリオ最適化問題とは

資産運用の際に資産運用銘柄の選択をしますが、その銘柄の評価を過去のリターンと、銘柄間の相関関係によってリスクを割り出します。最近の問題では選択する銘柄数を固定するなどのパターンもあり、それぞれを見ていきたいと思います。

リターンについて

過去の傾向からリターンの値を出します。
過去のデータが必要ですが、今回は金融データを参考にしたデモデータでやります。

リスクに関して

こちらは銘柄間の分散共分散というものを使いますが、主に相関関係を表す行列式が過去のデータから得られます。

参考資料

こちらを参考にしました。

Solving the Optimal Trading
Trajectory Problem
Using a Quantum Annealer

https://1qbit.com/wp-content/uploads/2016/05/1QBit-Research-Paper-%E2%80%93-Solving-the-Optimal-Trading-Trajectory-Problem-Using-a-Quantum-Annealer.pdf

今回はQUBOというものを使ってハミルトニアンと呼ばれるエネルギー関数を作って計算をします。

ハミルトニアン(銘柄数指定なし)

まずはD-Waveのような量子コンピュータで組合せ最適化問題を解くためには、イジングモデルのハミルトニアンと呼ばれる最小化を行うための数式が必要となります。

今回使用するハミルトニアンは下記の通りです。H=ー∑μixi+γ∑δijxixjH=ー∑μixi+γ∑δijxixj

ただし、xixiはii番目の銘柄を選択したかしてないかの{0,1}{0,1}のバイナリ値。μiμiはii番目の銘柄の過去のデータからの期待リターン、δijδijは銘柄iiと銘柄jjの相関(今回はこれでリスクを見込む)を表す係数。γγはどれだけリスクを算定に組み込むかというハイパーパラメータです。

今回は量子ビットを{0,1}{0,1}で見込むのでQUBOという方法を使います。

早速具体的なダミーデータで考えてみます

今回はとりあえず6銘柄で考えて用意する量子ビットは6。

xi={x0,x1,x2,x3,x4,x5}xi={x0,x1,x2,x3,x4,x5}

期待値のリターンを銘柄ごとにそろえます。今回はダミーデータを使います。
μi={0.026,0.031,0.007,0.022,0.010,0.055}μi={0.026,0.031,0.007,0.022,0.010,0.055}

続いて銘柄間の相関を表す分散共分散を用意します。
δijδijに相当します。今回これもダミーデータを使います。x0x1x2x3x4x5x00x10.00150×20.00120.00170×30.00180.00220.00400×40.00220.00050.00320.00120×50.00120.00190.00240.00760.00210x0x1x2x3x4x5x000.00150.00120.00180.00220.0012×100.00170.00220.00050.0019×200.00400.00320.0024×300.00120.0076×400.0021×50

早速QUBOmatrixを作ってみる。

ポートフォリオ最適化問題はかなりシンプルですね。。。普段はこのQUBOmatrixを作るのが大変ですが、全て過去のデータで揃ってしまっているので、これを使ってmatrixを作るだけです。

ここで、D-Waveのマシンはパラメータを入力できる範囲が{-1,1}の上に、小数点2桁までなので、便宜上、全体のパラメータを10倍して使いやすくしてから計算して見ます。やっていいのかわかりませんが、非対角項の係数が小さくなりすぎているので、非対角項は100倍します。

上記の期待値リターンに、上記の分散共分散のmatrixにγγをかけたものを組み合わせて、matrixでまとめます。非対角項にリスクの分散共分散が入り、対角項にはリターンの期待値が入ります。x0x1x2x3x4x5x0−0.26×10.15γ−0.31×20.12γ0.17γ−0.07×30.18γ0.22γ0.40γ−0.22×40.22γ0.05γ0.32γ0.12γ−0.10×50.12γ0.19γ0.24γ0.76γ0.21γ−0.55x0x1x2x3x4x5x0−0.260.15γ0.12γ0.18γ0.22γ0.12γx1−0.310.17γ0.22γ0.05γ0.19γx2−0.070.40γ0.32γ0.24γx3−0.220.12γ0.76γx4−0.100.21γx5−0.55

QUBOからイジング変換

x0x1x2x3x4x5x0−0.13+0.1975γx10.0375γ−0.155+0.195γx20.03γ0.0425γ−0.035+0.3125γx30.045γ0.055γ0.10γ−0.11+0.42γx40.055γ0.0125γ0.08γ0.03γ−0.05+0.23γx50.03γ0.0475γ0.06γ0.19γ0.0525γ−0.275+0.38γx0x1x2x3x4x5x0−0.13+0.1975γ0.0375γ0.03γ0.045γ0.055γ0.03γx1−0.155+0.195γ0.0425γ0.055γ0.0125γ0.0475γx2−0.035+0.3125γ0.10γ0.08γ0.06γx3−0.11+0.42γ0.03γ0.19γx4−0.05+0.23γ0.0525γx5−0.275+0.38γ

となりました。

ガンマを決める

変数γγを変えながらD-Waveに入れてみます。

γ=0.5γ=0.5のとき、エクセルで事前に上記式に代入してみました。とりあえずこの値を使って見ます。

結合数の調整

ここで、今回6銘柄を使っていますが、6銘柄の完全結合が必要ですが、D-Waveではそれを量子ビットのコピーを使いながらやっていきます。

17量子ビットを使用して6量子ビットの完全結合を表現します。

D-Waveに値をセット

早速上記の値をセットして解いて見ます。
結果は下記のようになりました。

x1,x3,x4,x5x1,x3,x4,x5が選ばれています。正直あってるのか全然わかりませんが、確かにコスト関数は低くなっていたので、よしとします。

これだけじゃよくわからないので、銘柄の保有数に制限を変えるタイプをやって見ます。こちらの方がわかりやすいはずです。

ハミルトニアン(銘柄数指定あり)

使用するハミルトニアンは下記の通りです。
銘柄数指定なしのハミルトニアンに、銘柄数Kを指定するための制約条件が付いています。
制約条件は選択されたxixiの個数と指定銘柄数Kが同じになった時にコストが最小の0になるように設計されています。H=ー∑μixi+γ∑δijxixj+B(∑xi−K)2H=ー∑μixi+γ∑δijxixj+B(∑xi−K)2

どうすればよいか?

先ほど作ったイジングのmatrixにこの新しく追加された制約項を加えれば大丈夫です。
ここでは、指定銘柄数をK=3としてみます。最終項のみを取り出してみると、B(∑xi−K)2=B(x0+x1+x2+x3+x4+x5−3)2B(∑xi−K)2=B(x0+x1+x2+x3+x4+x5−3)2

これを展開して行けば大丈夫です。=B(x20+2x0x1+2x0x2+2x0x3+2x0x4+2x0x5−6×0+x21+2x1x2+2x1x3+2x1x4+2x1x5−6×1+x22+2x2x3+2x2x4+2x2x5−6×2+x23+2x3x4+2x3x5−6×3+x24+2x4x5−6×4+x25−6×5+9)=B(x02+2x0x1+2x0x2+2x0x3+2x0x4+2x0x5−6×0+x12+2x1x2+2x1x3+2x1x4+2x1x5−6×1+x22+2x2x3+2x2x4+2x2x5−6×2+x32+2x3x4+2x3x5−6×3+x42+2x4x5−6×4+x52−6×5+9)

ここで、x2i=xixi2=xiより、=B(2x0x1+2x0x2+2x0x3+2x0x4+2x0x5−5×0+2x1x2+2x1x3+2x1x4+2x1x5−5×1+2x2x3+2x2x4+2x2x5−5×2+2x3x4+2x3x5−5×3+2x4x5−5×4−5×5+9)=B(2x0x1+2x0x2+2x0x3+2x0x4+2x0x5−5×0+2x1x2+2x1x3+2x1x4+2x1x5−5×1+2x2x3+2x2x4+2x2x5−5×2+2x3x4+2x3x5−5×3+2x4x5−5×4−5×5+9)

QUBOmatrix

見やすいようにmatrixにおとしこみます。x0x1x2x3x4x5x0−5Bx12B−5Bx22B2B−5Bx32B2B2B−5Bx42B2B2B2B−5Bx52B2B2B2B2B−5Bx0x1x2x3x4x5x0−5B2B2B2B2B2Bx1−5B2B2B2B2Bx2−5B2B2B2Bx3−5B2B2Bx4−5B2Bx5−5B

次にイジングに変換します。

同様にイジングに変換x0x1x2x3x4x5x00x10.5B0x20.5B0.5B0x30.5B0.5B0.5B0x40.5B0.5B0.5B0.5B0x50.5B0.5B0.5B0.5B0.5B0x0x1x2x3x4x5x000.5B0.5B0.5B0.5B0.5Bx100.5B0.5B0.5B0.5Bx200.5B0.5B0.5Bx300.5B0.5Bx400.5Bx50

これを元の銘柄指定なしの式に足し合わせていきます。
その際Bはハイパーパラメータなので、決め打ちで。
今回はB=0.5で行って見ました。エクセルで描いて見て、

D-Waveにかけてみる

かけてみました。

エネルギーの低いものを選択してみると、

量子ビットが+1のものを選択すると、

x0,x1,x5x0,x1,x5の3量子ビットが+1です。
銘柄数の指定通り、3銘柄が選ばれました。

他の解も見て見ましたが、基本的には3銘柄はしっかり守られているようです。

以上で、資産運用に使える、ポートフォリオ最適化問題で銘柄数を指定してD-Wave実機で解いて見ました。

Recommended


CONTACT

info@mdrft.com

ブログトップへ Wikiへ移動

量子コンピュータ一般

量子ゲートアルゴリズム

量子アニーリング一般

量子アニーリングアルゴリズム

BlueqatSDKの使い方