粒子フィルタ使って実装したい (1)
はじめに
Particle Filter
のPythonライブラリを使いたいけどいまいちわかっていない。情報特別演習が間に合うかわからない…。
そんな不安感の中で、システム制御という授業が始まったので、少しメモしながらもう一度考えを整理したい。
システム制御 - はじめ
時間軸を重視
現在の出力が過去から現在までの入力によって決まる
→ 動的システム(今までどうしていたかで決まる)現在の出力が現在の入力だけによって決まる
→ 静的システム
制御とは
- 直接計れない量(システムの入力)を操作して
- さわれない量(システムの出力)を目的どおりにすること。
→ [どうしたらいいか考える] → [システム] →
システム制御理論の中身
システムが時間を変数とする微分(差分)方程式で表されるとき、入力をどのように定めれば出力を与えられた目標に自動的に一致させられるか、という技術
粒子フィルタを用いた最適ポートフォリオの構築
私は、そんなタイトルのワーキングペーパーを読んでいるわけですが、いまいち掴めないような内容をしています。
先生にも読んでもらいましたが同じような反応をされていました。「インプリメントしにくい」みたいな。
まずキーワードとなる単語と文を書いていきたいと思います。
推定のキーワード
- 粒子フィルタ
- 確率的ボラティリティ(Stochastic Volatility, SV)モデル
- 期待リターン
- ボラティリティ
- 期待リターンとボラティリティに関する状態変数を確率過程として同時に推定する
ポートフォリオ最適化のキーワード
- 最小分散
- リスクパリティ
- 空売り禁止、取引費用、投資比率制約を考慮
- グローバルな株式、債権、REIT
- 累積リターン、シャープレシオ
- ソルティノレシオ、最大ドローダウン
- 資産リターン間の相関係数を、各期毎に過去一定期間の標本相関係数と定める
状態空間モデル
モデル
- 資産リターン(利益率) : \( y = \left\{ y_t : t \geq 0 \right\} \)
- 期待リターン(Return) : \( \mu = \left\{ \mu_t : t \geq 0 \right\} \)
- リターンのボラティリティ(標準偏差): \( x = \left\{ x_t : t \geq 0 \right\} \)
例えば、SMSV(Stochastic Mean and Stochastic Volatility)
の場合
- \( y_t = \mu_t + exp(x_t/2) \epsilon_t, \hspace{10pt} \epsilon_t \sim N(0,1) \)
を確率的にしたモデル:
1. SMSV 2. SMVC(Stochastic Mean and Constant Volatility) 3. SMRV(Stochastic Mean and Rolling Volatility
\( \mu_t \) を移動平均としたモデル:
1. RMSV(Rolling Mean and Stochastic Volatility) 2. RMRV(移動平均・移動分散)
\( \mu_t \) を定数にしたモデル:
1. CMSV(Constant Mean and Stochastic Volatility) 2. SV(Stochastic Volatility)
リターン予測精度(平均二乗誤差であるMSE)では、(1.)のMSEが最も小さく、(2.)のMSEが最大であるとされています。
本当であるか、私自身で確かめたいです。
期待リターンに関する状態変数[tex: \mu_t]を確率的にしたほうがよりリターンの予測精度が向上するとされてます。
AICでは、CMSVが低く、SMCVが高いとされてます。
自己組織化状態空間モデル
ここで、重要な状態空間モデルの考え方を取り入れます。
まず、状態空間モデルでは「直接観測できない変数」というものが重要であり、今回の場合, 期待リターン: \( \mu \), ボラティリティ: \( x \) がそれらに当たる。そして、以下のようなモデルに書き直せます。
- 観測方程式: \( Y_t = H(Z_t, u_t) \)
- システム方程式: \( Z_t = F(Z_t, v_t) \)
もう一度、今回のケースに書き直すと
- 観測方程式: \( Y_t = y_t = H(Z_t, u_t) = \mu_t + exp(x_t/2) \)
- システム方程式: \( Z_t = \begin{bmatrix} \mu_t, \ x_t, \ \theta_t \end{bmatrix} ^T = F(Z_t, v_t) \)
ただし、\( \theta_t = \theta_{t-1} + z_t \) とします。
なので、特に自己組織化状態空間モデル
と呼ばれるらしいです。
ちなみに、私は現時点で \( \theta_t \) の役割がわかっていないし、あまり言及されていないのでこのペーパーが嫌いです。
初期値
状態の初期値は以下のような定常分布から発生させてます。(わかるようでわからない…)
SMSV Model
のパラメータの初期分布とetcは以下のようになってます。
- \( \bar{\mu} \sim U(-2,2) \)
- \( \bar{x} \sim U(-1, 1) \)
- \( \phi_{\mu} \sim U(0.8,1) \)
- \( \phi_{x} \sim U(0.8,1) \)
- \( \rho \sim U(-1,1) \)
- \( o_{\mu} \sim U(0,6) \)
- \( o_{x} \sim U(0,1) \)
- パラメータの推定値: 各時点のパラメータに関する粒子の平均
- \( U(a,b) \) は区間 \( (a,b) \) の一様分布
\( \phi_{x} \) は、ボラティリティの持続性(time persistency)や、平均回帰速度(mean reversion speed)を表します。
\( \phi_{x} \) が、1に近いということはボラティリティ・クラスタリング
としてよく知られる現象が起こっていると云えるそうです。
ボラティリティ・クラスタリング現象を調べたところ、以下のような説明がありました。引用させてもらったので、引用元に貼っています。
今回、ボラティリティクラスタリング(Volatility Clustering)というときは、 その日の株や為替の収益率の”絶対値”をさします。 収益率自身に対しては、ほとんど自己相関は観測されません。 つまり、今日株価が上がったからと言って、次の日に株が 上がりやすいとか下がりやすいということはわからないわけです。 (まあ、これがわかったら苦労はないのですが(笑)) ただ、株や為替などの収益率の絶対値(ボラティリティ)には、 いわゆる正の自己相関があることが知られています。 つまり、株や為替などの変動幅の大きい日は、翌日もやはり変動幅が大きいわけです。 逆に変動幅の小さい日の次の日には変動幅が小さくなるということです。 この辺は、トレードをしている人であれば、実感されていることかと思います。 なので、例えば、大暴落があると、しばらくは値動きの変動幅が大きくなるので、 しばらくはストップ幅などをいつもより 広げておく必要がありそうだなどという戦略を立てることができます。
は、リターンとボラティリティの相関を表しており、負であると観測されれば、レバレッジ効果
があると云えます。
定常分布
の定常分布
の定常分布
モンテカルロフィルタ
モンテカルロフィルタのアルゴリズムに関してはこのペーパーを読んでいただきたいです。
この論文で書かれている対数尤度 \( l(\theta) \)は、モンテカルロフィルタの枠組みでは
により近似的に計算される、と書かれていますが、おそらく対数正規確率密度関数を求めているのではないかと思います。
インプリメントを意識してなさすぎィ(全部読まないと「それここに書いてるのかよ!」ってなってヘイトが溜まります)
データ
- 2003/04 ~ 2016/2まで
- 株式、債権、リートのトータルリターン・インデックスの月次データ(155期)
- Bloombergのデータを使ってる(らしい)
- 資産リターン \( y_t \)は 各時点\( t \)の資産価格データ\( P_t \)に対して, \( y_t = 100 \times (P_t / P_{t-1} - 1) \)
- 日本株とJリート以外はドル建てなので、円建てに変換
- 粒子数を100万個
モデルの統計的当てはまり
赤池情報量基準(AIC)を用いる. モンテカルロフィルタで得られた対数尤度を使い
(パラメータの数)
これが小さいほど相対的に良いモデルと云える。
さいごに
考察
- この論文はあまりに、数学的な抽象性だけを残して実装についてあまり言及されていませんでした
- 実装するためにもう少し考察が必要...
感想
- 私なりにまとめてみましたが、どうでしょうか、実装する上で必要事項がまだ整理されてない状況ですね。ホント辛い
- 今までPreviewでしっかり[tex: .. がはんえいされてたんい急にされなくなるというわけのわからない自体が起こってヘイト溜まってます。
- 次回のPart (2)では、ポートフォリオの構築についてまとめたいと思います。
- 次々回のPart (3)では、実際Pythonのライブラリでこれに近いものでどのような実装がされているか検証していきたいです。
- 次々々回のPart (4)では、(3)で使ったライブラリでこの論文を実装していきたいと思います。
引用元
http://www.cirje.e.u-tokyo.ac.jp/research/dp/2016/2016cj276.pdf