{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 13 Reverse Quantum Annealing with Portfolio Optimization Problem as an example" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "view-in-github" }, "source": [ "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/OpenJij/OpenJijTutorial/blob/master/source/ja/013-ReverseQuantumAnnealing.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## はじめに\n", "この章はポートフォリオ最適化問題を例として、OpenJijを用いてリベース量子アニーリング(Reverse Quantum Annealing)という、古典的な最適化計算と、量子アニーリングを組み合わせた手法を紹介する。このチュートリアルでは、古典的なアルゴリズム、普通の量子アニーリング、そしてリバース量子アニーリングそれぞれで同じポートフォリオ最適化問題を解いて、その結果を比較する。また、その過程を通して、OpenJijでの量子アニーリングの実装や実験を行う時の注意点についても議論する。\n", "\n", "*注意:このポートフォリオの内容を正しく実行するにはOpenJij0.4.9以上が必要になる。必要な場合は実行前に次のコマンドを実行して、OpenJijのアップデートを行ってください。*\n", "```bash\n", "pip install -U openjij\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ポートフォリオ最適化問題\n", " 資産運用して投資活動を行うとき、できるだけリスクを回避しながら大きな収益を実現させたい。なので、収益が限定的であるが、リスクが小さい(ないし全くない)資産と見込める収益が大きい分リスクも大きい資産を組み合わせてポートフォリオを作って分散投資を行うのが一般的な戦略になる。\n", "\n", " この時、与えられた一定のリスクでは最大利益を実現したい、または同じ利益を実現する場合できるだけ小さいリスクを取るには、最適なポートフォリオを選ぶ必要がある。現在、よく利用される手法はMarkowitzによる現代ポートフォリオ理論(Modern Portfolio Theory)であり、ポートフォリオを構成する銘柄の間の相関を考慮して、その共分散を最小にさせるような手法になる[1]。\n", " $$\n", " \\min \\sum_{i=1}^{N}\\sum_{j=1}^{N}w_{i}w_{j}\\sigma_{ij}; \\quad \\sum_{i=1}^{N}W_{i}=1; \\quad \\sum_{i=1}^{N}W_{i}\\mu_{i}=R\n", " $$\n", " ただし、$w_{i}$は各銘柄がポートフォリオ内に占める重みで、$\\sigma_{ij}$は銘柄間の共分散である。$\\mu_{i}$は各銘柄の期待収益で、$R$はこのポートフォリオの総収益になる。\n", "\n", " この時、ポートフォリオのパフォーマンスの評価によく使われる指標としてSharpe Ratioというのがある。\n", "\n", " ### Sharpe Ratio\n", " Sharpe Ratioは投資の効率性を評価する指標で、銘柄単体とポートフォリオに対して計算できる。1966年にウィリアム・シャープによって提案された[3]。その基本的な定義は次のような形になる。\n", " $$\n", " S = \\frac{\\bar{r}-r_0}{\\sigma}\n", " $$\n", " ここの$\\bar{r}$は一定時間内の平均的なリターン率であり、月間や年間リターンの平均を利用することが多い。$r_0$はリスクなしの場合のリターン率で、普段は安定した国債の利子率などを用いる。そして$\\sigma$はボラティリティを表していて、資産価値の変動の激しさを意味している。\n", " \n", " また、実際にSharpe Ratioを計算する時、場面によって異なる計算方法でこれらの値を算出する。例えばリターンは単純リターンとして$r=P(t+1)/P(t) - 1$で資産価格$P$を使って計算される場合と、$r=log[P(t+1)/P(t)]$のように対数リターン率として計算される場合がある。そしてボラティリティも価格の変動から計算する手法とリターン率からの計算するやり方が存在する。具体的に興味がある方は金融工学や市場分析などに関連する本とサイトに参照してください。\n", "\n", " ### ポートフォリオの評価と最適化\n", " Sharpe Ratioの定義から、その値が大きいということは収益が大きいまたはリスク(ボラティリティ)が小さいことを意味している。ある与えられた銘柄の集合から作られたポートフォリオのうち、最大のSharpe Ratioを実現できるような組み合わせは、単位リスクに対して最大のリターンを得る組み合わせになる。なので、ポートフォリオの最適化問題が一定の考え方の元ではShape Ratioを最大にする問題に置き換えられる。\n", "\n", " 現実において、この最適化は銘柄を選別した上で、それぞれの銘柄に投入する資金の量を決定しなければならない。つまり、選ぶ銘柄と各銘柄のウェイトを決定する問題になる。このチュートリアルは、参考にした論文[2]に従い、簡単のために各銘柄のウェイトを等しくする戦略について考える。この時、問題は$M$個ある銘柄のうち$N$個銘柄を選び出して、実現Sharpe Ratioを最大にするものになる。すると、次のようなQUBO形式に問題を翻訳できる。\n", " $$\n", " \\mathcal{O}(\\boldsymbol{q})=\\sum_{i=1}^{N}a_{i}q_{i}+\\sum_{i=1}^{N}\\sum_{j=i+1}^{N}b_{ij}q_{i}q_{j}\n", " $$\n", " ここの$q_{i}$は各銘柄に対する選択で$1$であればポートフォリオに組み入れて、$0$であれば組み入れない意味を持つ。そして$a_i$は銘柄自体のパフォーマンスによる魅力スコアであり、$b_ij$は銘柄間のペアワイズ相関で決められた罰金または賞金の度合を表す。\n", "\n", " 具体的に$a_i$と$b_ij$は次の表1に従って決定される。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "