第2章:資産売却問題
章の概要
資産売却問題は、我々の逐次決定問題の中で最も単純なものであり、保有している資産をいつ売却するかという決定を行う純粋な確率的価格プロセスから構成される。この問題は、受け取る価格の期待値を最大化するように、いつ資産を売却すべきかを決定することである。
この問題は最適停止問題として広く知られており、通常はかなり洗練された数学を用いて表現される。我々はこれを用いて、我々の4つのクラスの最初のクラスである方策関数近似(PFA)に該当するいくつかの基本的な方策を説明する。我々はいくつかのPFAを導入するが、それぞれ最良の結果を得るためにチューニングパラメータを必要とする。
この演習問題は、汎用モデリングフレームワークの5つの要素すべてを説明するための、単純かつ洗練された例となっている。
ナラティブ
我々はある銘柄の株式を保有しており、売却する好機を探している。まず、我々は小口投資家であると仮定する。つまり、何株売却するかは問題にならないので、株式を1株だけ保有していると仮定する。時刻$t$で売却する場合、時間とともにある確率過程に従って変動する価格を受け取るが、価格が上昇または下降トレンドにあるとは考えていない。株式を売却すると、プロセスは終了する。
問題の枠組み化
3つの枠組み化の質問に対する答えは以下の通りである。
- 評価指標: 資産を売却する際に受け取る価格の期待値を最大化すること。
- 決定: 資産を保有し続けるか売却するか。
- 不確実性: 将来の時間period間における売却価格。
基本モデル
状態変数
我々のプロセスには2つの状態変数がある。すなわち、まだ資産を保有しているかどうかを表す「物理状態」と、この問題では株価を表す「情報状態」である。
我々の「物理状態」は以下で与えられる。
\[R^{asset}_t = \begin{cases} 1 & \text{if we are holding the stock at time } t,\\ 0 & \text{if we are no longer holding the stock at time } t.\end{cases}\]株式を売却すれば、1株あたりの価格$p_t$を受け取る。これは我々の状態変数が以下のようになることを意味する。
\[S_t = (R^{asset}_t, p_t).\]決定変数
決定変数は、株式を保有し続けるか売却するかである。これを以下のように書く。
\[x_t = \begin{cases} 1 & \text{if we sell the stock at time } t,\\ 0 & \text{if we do not sell the stock at time } t.\end{cases}\]この問題では売却のみが許されているので、以下の制約に従わなければならない。
\[x_t \leq R^{asset}_t.\]我々は方策$X^\pi(S_t)$を定義することとし、これがどのように決定を行うかを定めることになる。この段階では、方策の記法を導入するが、方策の設計自体は後回しにする。これが我々が「まずモデル化し、それから解く」と言うときの意味である。
外生情報
我々の基本モデルにおける唯一のランダムプロセスは価格の変化である。これを書く方法は2つある。一つは、外生情報が価格の変化であると仮定することである。これを以下のように書くことができる。
\[\phat_{t+1} = p_{t+1} - p_t.\]これは我々の価格プロセスが以下のように推移することを意味する。
\[p_{t+1} = p_t + \phat_{t+1}.\]そうすると、外生情報$W_{t+1}$は以下のように書けることになる。
\[W_{t+1} = \phat_{t+1}.\]第二の方法は、単に次の価格を観測すると仮定することであり、この場合は以下のように書くことになる。
\[W_{t+1} = p_{t+1}.\]遷移関数
遷移関数は、状態が時間とともにどのように推移するかを記述する方程式から構成される。$R_t$の遷移方程式は以下で与えられる。
\[\begin{align} R^{asset}_{t+1} = R^{asset}_t - x_t, \label{eq:assetsellingR} \end{align}\]ただし、資産をすでに保有していない場合に売却してしまわないように、$x_t \leq R^{asset}_t$という制約を課している。
次に、価格プロセスが時間とともにどのように推移するかを書かなければならない。$\phat_t$という記法を使えば、価格$p_t$の遷移関数は以下で与えられることになる。
\[\begin{align} p_{t+1} = p_t + \phat_{t+1}.\label{eq:assetsellingP} \end{align}\]式$\eqref{eq:assetsellingR}$と$\eqref{eq:assetsellingP}$は、我々が遷移関数と呼ぶものを構成しており、以下のように書く。
\[S_{t+1} = S^M(S_t, X^\pi(S_t), W_{t+1}).\]方策$X^\pi(S_t)$を用いて決定を行い、系列$W_1, W_2, \ldots, W_T$を決定するサンプルパス$\omega$を選ぶ場合、我々のプロセスのシミュレーションを以下のように書くことができる。
\[(S_0, x_0 = X^\pi(S_0), W_1(\omega), S_1, x_1=X^\pi(S_1), W_2(\omega), \ldots, x_{T-1}, W_T(\omega), S_T).\]系列を書く際には、変数をその情報内容によって添字付けしていることに注意されたい。例えば、$S_0$は初期状態であり、$x_0$は$S_0$のみに依存する。対照的に、$t$で添字付けされた変数は、我々の外生プロセス$W_1, \ldots, W_t$の結果のどれでも「見る」ことが許されるが、$W_{t+1}$を見ることは許されない。
目的関数
我々のモデルは目的関数の記述で締めくくられ、これが方策を評価するための基礎となる。まず、何らかの性能指標が必要であり、この問題では株式を売却して得られる金額がそれにあたる。以下のように書く一般的な貢献関数を定義できる。$C(S_t,x_t)$、これは以下で与えられる。
\[C(S_t,x_t) = p_tx_t.\]我々の問題では、売却を選択するまで$x_t =0$である。ここでは、単一の離散資産を売却していると仮定しよう(これは保有している全株式を一度に売却すると考えることができる)。この場合、売却時には$x_t = 1$とし、これは計画期間中に一度だけ起こることになる。$C(S_t,x_t)$の依存性を書くことで、価格$p_t$の存在による状態への依存性を捉えている。
ここで、我々の最適化問題を定式化したい。もし価格が事前に与えられているとすれば、以下のように書くことになる。
\[\begin{align} \max_{x_0, \ldots, x_{T-1}} \sum_{t=0}^{T-1} p_tx_t, \label{eq:deterministicobjassetselling} \end{align}\]ここで以下の制約を課すことになる。
\[\sum_{t=0}^{T-1} x_t = 1, \quad x_t \leq 1, \quad x_t \geq 0.\]これは問題が決定論的である場合には問題ないが、価格の不確実性を扱うためにはどのように問題をモデル化すればよいだろうか。我々が行うのは、価格$p_1(\omega), p_2(\omega), \ldots$のサンプルパス$\omega$に従って方策をシミュレーションしていると想像することである。方策$\pi$を用いれば、以下を用いて一連の状態を生成することになる。
\[S_{t+1}(\omega) = S^M(S_t(\omega), X^\pi(S_t(\omega)), W_{t+1}(\omega)).\]サンプルパスへの依存性を表現するために$S_t(\omega)$と書く。方策$\pi$への依存性を表現するために$S^\pi_t(\omega)$と書くこともできるが、簡潔さのために方策への依存性は通常省略する。
このサンプルパスに沿って方策$\pi$に従う場合、以下を用いて性能を計算することができる。
\[\Fhat^\pi(\omega\vert S_0) = \sum_{t=0}^{T-1} p_t(\omega)X^\pi(S_t(\omega)).\]これは1つのサンプルパスについてのものである。方策$x_t(\omega) = X^\pi(S_t(\omega))$から各サンプルパスについて一連の決定$x_t(\omega)$が得られることに注意されたい。この記法は、$x_t$がサンプルパス$\omega$に依存する確率変数であることを伝えている。各サンプルパスについて、我々は依然として$\sum_{t=0}^{T-1} x_t(\omega) =1$を得るが、これは上述の問題の決定論的バージョンにおける制約に対応するものである。ある時刻$\tau(\omega)$があり、これは$t=\tau(\omega)$について$x_t(\omega)=1$となる時刻である。この時刻は、この資産売却問題における停止時刻として知られている。
我々は$N$個のサンプル$\omega^1, \ldots, \omega^n, \ldots, \omega^N$についてシミュレーションを行い、以下を用いて平均を取ることができる。
\[\begin{align} \Fbar^\pi(S_0) = \frac{1}{N} \sum_{n=1}^N \Fhat^\pi(\omega^n\vert S_0). \label{eq:assetsellingfbarpi} \end{align}\]最後に、最良の方策を見つけるという観点から最適化問題を書き出すと、以下のように書くことができる。
\[\begin{align} \max_\pi \Fbar^\pi(S_0). \label{eq:maxpifbarasset} \end{align}\]$\eqref{eq:maxpifbarasset}$によって述べられている、最適方策を見つけたいという最適化問題は、主に願望的なものであることがわかるだろう。我々は確かに最適方策を求めたいのだが、通常は見つけることができる(そして計算できる)最良の方策で妥協することになる。
実際には、我々は通常、最適化問題に対して式$\eqref{eq:assetsellingfbarpi}$のような平均を用いている。しかし、これは実際の期待値を取ることの近似にすぎず、これを以下のように書く。
\[\begin{align} F^\pi(S_0) = \E \Fhat^\pi(S_0) \approx \Fbar^\pi(S_0). \label{eq:assetsellingfpiexpectation} \end{align}\]慣例により、期待値を書く際には$\omega$の添字を落とし、代わりに$\Fhat^\pi$を確率変数として捉える一方、$\Fhat^\pi(\omega)$はサンプル実現値として扱う(これは確率モデリングのコミュニティにおける標準的な記法であるので、慣れておいてほしい)。
期待値演算子を用いれば、目的関数を以下のように書くことになる。
\[\begin{align} \max_\pi \E \Fhat^\pi(S_0). \label{eq:assetsellingobjective} \end{align}\]多くの場合、目的関数を以下のように書くことになる。
\[\begin{align} \max_\pi \E \left\{\sum_{t=0}^{T-1} p_tX^\pi(S_t)\vert S_0 \right\}. \label{eq:assetsellingexpectedsum} \end{align}\]式$\eqref{eq:assetsellingobjective}$(または$\eqref{eq:assetsellingfpiexpectation}$や$\eqref{eq:assetsellingexpectedsum}$)の形は簡潔で見栄えが良い。ただ、実際に期待値を計算できることはほとんどないため、通常は式$\eqref{eq:assetsellingfbarpi}$のようにシミュレーションを実行し平均を取ることに依存していることを覚えておかなければならない。
さて、方策を探索するという問題が残っている。我々は常にまずモデルを作成し、それから方策の設計の問題に取り組む。これを行う前に、$S_0$や外生情報プロセス$W_1, \ldots, W_T$における不確実性をどのようにモデル化するかについて考える必要がある。
不確実性のモデル化
$W_t$の観測をサンプリングする何らかの方法が必要になるが、この問題ではそれは価格$p_t$が時間とともにどのように推移するかをモデル化することを意味する。一つの方法は、履歴からサンプルを抽出することである。1年間にわたって我々のシミュレーションを実行することに関心があると想像しよう。前年の履歴を使うことができるが、これは単なる1つのサンプルパスにすぎない。
我々がよく使うことになる第二の戦略は、統計モデルを推定することである。我々の基本モデルでは、以下を仮定するかもしれない。
\[\begin{align} p_{t+1} = p_t + \phat_{t+1},\label{eq:assetsellingpricemodel1} \end{align}\]ここで$\phat_{t+1}$はある確率分布によって記述される。単純なモデルとしては、$\phat_{t+1}$が平均0、分散$\sigma^2$の正規分布に従うと仮定することが考えられる。また、価格の変化$\phat_t$と$\phat_{t+1}$は独立であり、$\phat_{t+1}$は現在の価格$p_t$とは独立であると仮定することから始めるかもしれない(この最後の仮定はやや強い仮定だが、我々が始めるのに役立つだろう)。
ほとんどのコンピュータ言語には、正規分布からの観測をシミュレーションする関数がある。例えば、ExcelはNorm.inv$(p,\mu,\sigma)$という関数を提供しており、これは平均$\mu$、標準偏差$\sigma$を持つ確率変数$W$の値$w$を返す。ここで$P[W \leq w] = p$である。標準的なトリックとして、$p=Rand()$と設定する方法があり、$Rand()$は$0$と$1$の間で一様分布する確率変数を返すExcel関数である。これを用いて以下のように書くことができる。
これにより、平均$0$、標準偏差$\sigma$の正規分布に従う$\phat_{t+1}$のランダムな観測値が得られる。
表2.1は、0と1の間で一様分布する確率変数$U$の10個の観測値と、それに対応する平均0、分散1の正規分布に従う価格変化$\phat$のサンプルを示している。
| $U$ | $\phat$ |
|---|---|
| 0.8287 | 0.9491 |
| 0.6257 | 0.3206 |
| 0.9343 | 1.5086 |
| 0.4879 | -0.0303 |
| 0.3736 | -0.3223 |
| 0.8145 | 0.8947 |
| 0.0385 | -1.7685 |
| 0.0089 | -2.3698 |
| 0.9430 | 1.5808 |
| 0.3693 | -0.3336 |
表2.1. 10個の一様確率変数$U$と、それに対応する平均0、分散1の正規分布に従う価格変化$\phat$の10個のサンプル。
式$\eqref{eq:assetsellingpricemodel1}$はかなり基本的な価格モデルであるが、我々のモデリングフレームワークを説明するのに役立つだろう。以下では、より豊かなモデルを含むいくつかの拡張を導入する。
方策の設計
この問題に対しては、いくつかの異なる方策を想定することができる。例えば、単純な方策としては、価格がある限界点を下回った場合に大きな下落が始まっていることを示唆すると考えて売却する、というものが考えられる。したがって、この方策を以下のように書くことができる。
\[\begin{align} X^{sell-low}(S_t\vert \theta^{low}) &= \begin{cases} 1 & \text{if } p_t < \theta^{low}, \\ 1 & \text{if } t=T, \\ 0 & \text{otherwise.}\end{cases} \label{eq:assetsellingpolicy1} \end{align}\]別の方策としては、「高安」売却方策があり、価格が高すぎるか安すぎるかのいずれかにジャンプした場合に売却したいというものである。$\theta^{high-low} = (\theta^{low}, \theta^{high})$とする。これは以下のように書けるだろう。
\[\begin{align} X^{high-low}(S_t\vert \theta^{high-low}) &= \begin{cases} 1 & \text{if } p_t < \theta^{low} \text{ or } p_t > \theta^{high}, \\ 1 & \text{if } t=T, \\ 0 & \text{otherwise.}\end{cases} \label{eq:assetsellingpolicy2} \end{align}\]この方策に対する起こりうる反論としては、上昇中の株式を早まって売却してしまうというものが考えられる。おそらく我々は、株価がトラッキング信号を上回った場合にのみ売却したいと考えている。この問題に対処するために、まず以下を用いて価格の平滑化推定値を作成する。
\[\pbar_t = (1-\alpha) \pbar_{t-1} + \alpha \phat_t.\]ここで、以下のように書けるトラッキング方策を考えてみよう。
\[\begin{align} X^{track}(S_t\vert \theta^{track}) &= \begin{cases} 1 & \text{if } p_t \geq \pbar_t + \theta^{track}, \\ 1 & \text{if } t=T, \\ 0 & \text{otherwise.}\end{cases} \label{eq:trackingpolicy} \end{align}\]すべての場合において、まだ資産を保有している場合(すなわち$R^{asset}_t = 1$である場合)にのみ、資産を売却する(すなわち$X^{track}(S_t\vert \theta^{track}) =1$)ことができる。
この方策のためには、決定を行うために$\pbar_t$が必要になるので、我々のモデルを微調整する必要がある。これは、今や我々の状態を以下のように書くことになることを意味する。
\[S_t = (R^{asset}_t, p_t, \pbar_t).\]我々の方策のクラスを、集合$\Fcal = \lbrace $「セル・ロー」、「高安」、「トラック」$\rbrace $として書くことができる。これらの各クラスについて、$f\in\Fcal$に対して$\theta^f$と書けるパラメータの集合がある。「セル・ロー」と「トラック」の方策には単一のパラメータがあるが、$\theta^{high-low}$には2つのパラメータがある。
これで、方策$\pi$に対する探索を、関数クラス$f\in\Fcal$を探索し、次にパラメータ$\theta^f \in \Theta^f$を探索するという、より実践的な方法で書くことができる。ここで$\Theta^f$は取りうる値の範囲を教えてくれる(同時に$\theta^f$の次元性も捉えている)。
この節で方策を設計した方法は、いくらか場当たり的に見えるかもしれないが、実際には多くの方策(大手ヘッジファンドが用いる売買戦略も含む)がまさにこのようにして設計されている。方策には多くの種類が考えられ、その中には他よりも優れた性能を示すものもあるが、我々はここではこれらを例示として取り上げる。方策の設計には、推定のための統計モデルの設計と同様に、一種の技芸(art)がある。
方策評価
上で述べたように、方策は以下を用いてシミュレーションすることで評価できる。
\[\Fhat^\pi(\omega) = \sum_{t=0}^{T-1} p_t(\omega)X^\pi(S_t(\omega)),\]ここで、$\omega$はモデルで用いられる外生的な確率変数の実現値のサンプルパスを表すために使われる。表2.2は価格のサンプルパスの集合を示している。例えば、パラメータ$\theta^{sell-low} = \Doll 42$を用いた「セルロー(sell-low)」方策を使っているとしよう。このとき、サンプルパス$\omega^5$でこれを検証することを考える。結果は次のようになる。
\[\Fhat^{sell-low}(\omega^5) = \$41.53,\]なぜなら、$\Doll 41.53$が売却点$\Doll 42$を下回る最初の価格だからである。もし価格がどれも売却点を下回らなければ、我々のすべての方策は最後に売却するように設計されている。
| $t=1$ | $t=2$ | $t=3$ | $t=4$ | $t=5$ | $t=6$ | $t=7$ | $t=8$ | |
|---|---|---|---|---|---|---|---|---|
| $\omega^n$ | $p_1$ | $p_2$ | $p_3$ | $p_4$ | $p_5$ | $p_6$ | $p_7$ | $p_8$ |
| $\omega^1$ | 42.67 | 45.53 | 47.07 | 47.56 | 47.80 | 48.43 | 46.93 | 46.57 |
| $\omega^2$ | 46.35 | 43.15 | 42.51 | 40.51 | 41.50 | 41.00 | 39.16 | 41.11 |
| $\omega^3$ | 43.17 | 45.16 | 45.37 | 44.30 | 45.35 | 47.23 | 47.35 | 46.30 |
| $\omega^4$ | 45.24 | 45.67 | 46.18 | 46.22 | 45.69 | 44.24 | 43.77 | 43.57 |
| $\omega^5$ | 47.68 | 46.32 | 46.14 | 41.53 | 44.84 | 45.17 | 44.92 | 46.09 |
| $\omega^6$ | 47.83 | 44.70 | 43.05 | 43.77 | 42.61 | 44.32 | 44.16 | 45.29 |
| $\omega^7$ | 45.11 | 43.67 | 43.14 | 44.78 | 43.12 | 42.36 | 41.60 | 40.83 |
| $\omega^8$ | 46.78 | 44.98 | 44.53 | 45.42 | 46.43 | 47.67 | 43.68 | 49.03 |
| $\omega^9$ | 43.16 | 44.57 | 45.99 | 47.38 | 45.51 | 46.27 | 46.02 | 45.09 |
| $\omega^{10}$ | 46.57 | 45.01 | 46.73 | 42.08 | 47.40 | 49.14 | 49.03 | 48.74 |
表2.2. 価格パスの集合の例。
各方策(方策のクラスと、そのクラスに対するパラメータの両方)は、繰り返しシミュレーションを行い平均を取ることで評価できる。これを次のように書く。
\[\Fbar^\pi = \frac{1}{N} \sum_{n=1}^N \Fhat^\pi(\omega^n).\]$\Fbar^\pi$は単なる統計的推定値に過ぎないため、時には信頼区間を表現する必要がある。まず、確率変数$\Fhat^\pi$の分散の推定値を計算するが、これは以下を用いて行う。
\[(\sigmahat^\pi)^2 = \frac{1}{N-1} \sum_{n=1}^N (\Fhat^\pi(\omega^n)-\Fbar^\pi)^2.\]次に、以下を用いて我々の平均$\Fbar^\pi$の分散の推定値を得る。
\[(\sigmabar^\pi)^2 = \frac{1}{N} (\sigmahat^\pi)^2.\]これから、$\pi^A$と$\pi^B$と呼ぶかもしれない2つの方策を比較するための信頼区間を構築できる。$\mu^\pi$を方策$\pi$の真の性能とし、$\Fbar^\pi$を$\mu^\pi$の統計的推定値とする。差$\mu^{\pi^A} - \mu^{\pi^B}$の信頼区間を得たいとする。この差の最良の推定値は$(\Fbar^{\pi^A} - \Fbar^{\pi^B})$である。この差の分散は
\[\Var(\Fbar^{\pi^A} - \Fbar^{\pi^B}) = (\sigmabar^{\pi^A})^2+(\sigmabar^{\pi^B})^2,\]であり、ここでは推定値$\Fbar^{\pi^A}$と$\Fbar^{\pi^B}$が独立であると仮定している。これは、各方策が異なる価格のランダムサンプルでテストされていることを意味する。この場合、以下を用いて信頼区間を計算する。
\[\mu^{\pi^A} - \mu^{\pi^B} \in \left(\Fbar^{\pi^A} - \Fbar^{\pi^B} + z_\alpha \sqrt{(\sigmabar^{\pi^A})^2+(\sigmabar^{\pi^B})^2}\right),\]ここで$z_\alpha$は、標準正規分布の確率変数$Z$が確率$\alpha$で$z$より大きくなるような$z$の値である。例えば、$z_{.05} = 1.645$であり、これは$Prob[Z \geq 1.645] = .05$を意味する。
より優れたアプローチは、各方策の評価に同じサンプルを用いることである。例えば、表2.2から選んだ同じサンプルパス$\omega$で各方策をテストすることができる。このように方策をテストすると、(同じ価格の集合$p_t(\omega)$を用いて)$\Fhat^{\pi^A}(\omega)$と$\Fhat^{\pi^B}(\omega)$が得られ、次に差を計算する。
\[\delta \Fhat^{A-B}(\omega) = \Fhat^{\pi^A}(\omega) - \Fhat^{\pi^B}(\omega).\]次に平均の差
\[\delta \Fbar^{A-B} = \frac{1}{N} \sum_{n=1}^N \delta \Fhat^{A-B}(\omega^n),\]および分散
\[(\delta \sigmabar^{A-B})^2 = \frac{1}{N} \left(\frac{1}{N-1} \sum_{n=1}^N (\delta \Fhat^{A-B}(\omega^n)-\delta \Fbar^{A-B})^2\right).\]を計算する。分散$(\delta \sigmabar^{A-B})^2$は、独立なサンプルを用いた場合の分散よりも小さくなることに注意してほしい。この差に対する信頼区間は次のようになる。
\[\delta \mu^{A-B}\in \big(\delta \Fbar^{A-B} - z_\alpha \sqrt{\delta \sigmabar^{A-B,2}}, \delta \Fbar^{A-B}+ z_\alpha \sqrt{\delta \sigmabar^{A-B,2}}\big).\]信頼区間の計算は、異なるクラスの方策を比較する際に有用な場合がある。あるいは、2つの物理的設計の性能(例えば、2台の機械の速度や施設の位置)を比較している場合もある。方策の選択は、システムに対するいかなる設計上の決定とも密接に類似している。
拡張
時系列価格プロセス
時間にわたる自己相関を捉える、より現実的な価格プロセスが欲しいと考えてみよう。次のように提案できる。
\[\begin{align} p_{t+1} = \eta_0 p_t + \eta_1 p_{t-1} + \eta_2 p_{t-2} + \varepsilon_{t+1}, \label{eq:assetsellingpricetimeseries} \end{align}\]ここでも、ランダムノイズ$\varepsilon_t$は時間にわたって独立(かつ同一分布)であると仮定する。今のところ、係数$\eta = (\eta_0, \eta_1, \eta_2)$を知っていると仮定する。
この価格モデルは、モデル、特に状態変数に微妙な変更を必要とする。価格に関する古い遷移方程式$\eqref{eq:assetsellingP}$を、$\eqref{eq:assetsellingpricetimeseries}$で与えられる新しい時系列モデルに置き換える。$p_{t+1}$を計算するには、$p_t$を知るだけでは不十分であり、$p_{t-1}$と$p_{t-2}$も知る必要がある。我々の状態変数は今、次のように与えられる。
\[S_t = (R_t, p_t, p_{t-1}, p_{t-2}).\]上で検討した方策については、これはモデルをそれほど複雑にしない。後で、この追加の変数が大きな複雑さを表す方策を導入する。
学習を伴う時系列価格プロセス
今、我々の時系列価格プロセスが次で与えられると仮定する。
\[p_{t+1} = \etabar_{t0} p_t + \etabar_{t1} p_{t-1} + \varepsilon_{t+1},\]ここで$\varepsilon \sim N(0, 4^2)$であり、$\etabar_t = (\etabar_{t0}, \etabar_{t1})$は時刻$t$で知っている情報に基づく$\eta$の推定値である(前節では、$\theta$は既知であると仮定した)。
推定値$\etabar_t$と次の価格$p_{t+1}$の観測から、$\etabar_t$を$\etabar_{t+1}$へ更新する方法を規定する簡単な公式が存在する。
まず、
\[\pbar_t(p_t\vert \etabar_t) = \etabar_{t0} p_t + \etabar_{t1} p_{t-1}\]を、時刻$t$で知っている情報に基づく$p_{t+1}$の推定値とする。この推定値の誤差は次で与えられる。
\[\hat{\varepsilon}_{t+1} = \pbar(p_t\vert \etabar_t) - p_{t+1}.\]次に、ベクトル$\phi_t$を我々の価格プロセスにおける説明変数のベクトルとし、次で与えられるとする。
\[\phi_t = \begin{pmatrix} p_t \\ p_{t-1} \end{pmatrix}.\]次に、$2 \times 2$行列$M_t$を定義し、これを次のように再帰的に更新する。
\[M_t = M_{t-1} - \frac{1}{\gamma_t} (M_{t-1} \phi_t (\phi_t)^T M_{t-1}),\]ここで$\gamma_t$は次を用いて計算されるスカラーである。
\[\gamma_t = 1+(\phi_t)^TM_{t-1}\phi_t.\]これで、次を用いて$\etabar_t$を更新できる。
\[\etabar_{t+1} = \etabar_t - \frac{1}{\gamma_t}M_t \phi_t \hat{\varepsilon}_t.\]演習問題6で、これらの式をさらに詳しく掘り下げる。
資産のバスケット
資産のバスケットを考えると、また別の変化が生じる。$p_{ti}$を資産$i$の価格とする。今のところ、各価格は基本的なプロセス
\[p_{t+1,i} = p_{ti} + \varepsilon_{t+1,i}.\]に従って変化すると仮定する。ノイズ項$\varepsilon_{t+1,i}$が資産$i\in\Ical$間で独立であると仮定することもできるが、より現実的なモデルは、異なる資産の価格が相関していると仮定することである。$\sigma_{ij} = Cov_t(p_{t+1,i},p_{t+1,j})$を、時刻$t$で知っている情報に基づく、資産$i$と$j$に対するランダムな価格$p_{t+1,i}$と$p_{t+1,j}$の共分散とする。今のところ、共分散行列$\Sigma$を、おそらく履歴データセットを用いて推定することで(ただし推定後は固定して)知っていると仮定する。
共分散行列を用いて、コレスキー分解と呼ばれる手法を用いて相関した価格のサンプル実現値を生成できる。この手法は、共分散行列$\Sigma$の「平方根」と呼ばれるものを作成することで進み、これを下三角行列$L$に格納する。NumPyパッケージを用いたpythonでは、次のpythonコマンドを使う。
L = scipy.linalg.cholesky(Sigma, lower=True)
行列$L$により、$\Sigma = L^T L$を用いて行列$\Sigma$を得ることができる。
さて、$Z$を、各資産に対する1つずつの確率変数のベクトルとし、$Z_i \sim N(0,1)$とする(実質的にすべてのプログラミング言語には、平均0、分散1の正規分布からランダムサンプルを作成するルーチンがある)。$p_t$、$p_{t+1}$、$Z$を(資産数で次元付けられた)列ベクトルとする。まず、$N(0,1)$から$\vert \Ical\vert $回サンプリングすることで、サンプル$\hat Z$を作成する。我々の価格のサンプル$p_{t+1}$は、次で与えられる。
\[p_{t+1} = p_t + L \hat{Z}.\]この問題では、我々の状態変数は$S_t = (R_t,p_t)$で与えられ、ここで$R_t = (R_{ti})_{i\in\Ical}$は各資産を何株保有しているかを捉え、$p_t$は現在の価格のベクトルである。共分散行列$\Sigma$は静的であると仮定するため状態変数には含まれない(これは$S_0$に入れる)。新しい観測ごとに共分散行列を更新するのであれば、答えは変わり、その場合は共分散行列を時間への依存性を捉えるために$\Sigma_t$と書くことになる。これが動的に変化するようになったため、状態変数は$S_t = (R_t, p_t, \Sigma_t)$となる。
何を学んだか?
我々はこの問題を用いて、PFA方策の異なる種類を例示した。
- 物理状態(資産を保持しているか否か、あるいはどれだけ保持しているか)と、時刻$t$で売却できる価格の両方を持つ逐次決定問題を例示するために、単純な資産売却問題を用いた。
- 不確実性をモデル化する方法と、外生情報プロセス$W_1, \ldots, W_T$に対するサンプルパス$\omega$という概念を導入する方法を示した。
- PFAクラスにおけるいくつかの単純な方策を例示した。
- 方策をシミュレーションする方法を示した。
- 価格プロセス(価格$p_{t+1}$が最近の価格の履歴に依存する)に複雑さをいくらか導入し、また売却価格が資産のバスケットに依存する状況、すなわちより複雑で多次元的な情報プロセスを扱う状況を示した。これは、プロセスのモデル化以外には大きな複雑さを導入しないことに注意してほしい。これははるかに高次元の状態変数を生成するが、それは方策の設計や評価という問題に対して重大な複雑さの形態を表すわけではない(これはすべてのクラスの方策に当てはまるわけではない)。
- 価格プロセスの線形モデルを更新する方法を示した。
演習問題
復習問題
- 遷移関数を$S_{t+1} = S^M(S_t,x_t,W_{t+1})$と書く。
- なぜ外生情報を$W_t$ではなく$W_{t+1}$と書くのか?
- この式を用いて、どの時点で$S_{t+1}$を計算することになるか?
- $p_t$と$p_t(\omega)$の違いは何か?
- 異なる方策をテストしていく中で、遷移関数の構造は変化するか?
- 式$\eqref{eq:deterministicobjassetselling}$における目的関数は、問題の決定論的版に対して書かれている。この最適化問題を解いた場合、時刻$t$における決定$x_t$は、$t' > t$に対する価格$p_{t'}$に依存するか?
問題解決演習
- 表2.2の価格を用いて、価格が44.00ドルを下回ったら売却する方策を使う。$n=1,\ldots, 10$に対する目的関数$\Fhat(\omega^n)$を計算せよ。平均売却価格とその分散を計算せよ。
- 以下の設問は、資産(例えば、1株の株式)の売却をモデル化する手順を段階的に示している。
- $p_{t+1} = \eta_0 p_t + \eta_1 p_{t-1} + \varepsilon_{t+1}$で与えられる数学モデルからのデータを用いて価格をシミュレーションしているとし、ここで$\varepsilon \sim N(0, 6^2)$とする。 $\eta = (\eta_0, \eta_1)$の値は分からないが、$\eta$の真の値についての我々の信念は多変量正規分布であり、$\eta \sim MVN({\bar \eta}, \Sigma)$であるとする。ここで $$ \etabar_t = \begin{bmatrix} .7 \\ .3 \end{bmatrix}. $$ 共分散行列$\Sigma_t$が次で与えられると仮定する。 $$ \Sigma_t = \begin{bmatrix} (.2)^2 & (.05)^2 \\ (.05)^2 & (.1)^2 \end{bmatrix} $$ ここで$i,j \in (0,1)$に対して$\Sigma_{tij} = Cov(\eta_i,\eta_j)$である。時刻$t$において、$p_t = 20$、$p_{t-1} = 24$であり、$p_{t+1} = 18.2$を観測すると仮定する。 時系列価格プロセスと学習に関する節の式を用いて、$\etabar_{t+1}$および$\Sigma_{t+1}$の更新推定値は何か。更新式を示し、$\etabar_{t+1}$と$\Sigma_{t+1}$を数値的に計算せよ。
- この問題の状態変数は何か。変数のリストを示せ。演習を進めるうちに変数を追加する必要が生じるかもしれない点に注意すること(現時点ではすべての情報を持っているわけではない)。$\etabar_t$から$\etabar_{t+1}$を更新するために必要なすべての情報を含めるようにすること。あなたの状態変数は何次元か(これは$S_t$にいくつの変数が含まれているかを尋ねるのと同じである)。
- 私たちのトレーダーは、価格の7日移動平均に基づいて取引の意思決定を行う。日$t$にいるとし、7日移動平均は次式で計算されるとする。 $$ \pbar_t = \frac{1}{7}\sum_{t'=t-7+1}^{t} p_{t'}. $$ トレーダーは$p_t < \pbar_t - \theta^{sell}$のとき資産を売却する。この決定規則を、資産を売却する場合に1を、そうでない場合に0を返す方策$X^\pi(S_t\vert \theta^{sell})$として書き出せ。
- 外生情報とは何か。
- 遷移方程式を書き出せ。$S_t$の各要素について式が必要である。
- 目的関数を書き出せ(各確率変数について、指示に従って期待値演算子を用いることを忘れないこと)。(c)で指定された方策クラスを踏まえて、何について最適化を行っているかを明確にすること。方策はオフライン設定で過去のデータを用いて訓練されるものとする。
- 非常にテールの重い性質で知られる電力価格のシミュレーションを実行する必要がある。以下の表に示すデータを収集した。
Time Price 1 20 2 32 3 26 4 180 5 30 6 45 7 18 8 120 9 57 10 15 - 表のデータを用いて累積分布関数を作成せよ。5段のステップ関数のように見える累積分布関数(cdf)をプロットする必要がある。
- ここで、価格の3つの実現値、25、18、160を観測したとする。(a)の累積分布関数を用いて、0から1の間で一様分布する確率変数(この確率変数を$U$と呼ぶ)の3つの実現値を作成せよ。
- 次に、$U$のこれらの観測値を用いて、平均0、分散1の正規分布に従う確率変数$Z$の3つの観測値を作成せよ。この確率変数を生成する方法を明確にすること。[ヒント:(a)で作成したcdfを用いて(b)で一様分布の確率変数を作成したのと同様に、正規(0,1)確率変数の累積分布関数を用いること。]
- 正規(0,1)確率変数の系列を作成するこの方法を用いて、$Z_{t+1} = .7 Z_t + .3 Z_{t-1} + \varepsilon_{t+1}$の形の線形モデルを当てはめたとする。ここで$\varepsilon_{t+1}$は平均0、分散1の正規分布に従う(正規(0,1)確率変数をシミュレートしているのでこのことが分かる)。$t=1$、$Z_0 = 0.5$、$Z_1 = -0.3$から始めて、$\varepsilon_2 = -.6, \varepsilon_3 = 2.2, \varepsilon_4 = 1.4$と仮定して$Z_2, Z_3, Z_4$を生成せよ。次に、(a)の累積分布関数を用いて$P_2, P_3$および$P_4$の観測値を生成せよ。
プログラミング演習
これらの演習では、tinyurl.com/sdagithubにあるPythonモジュール AssetSelling を使用する。
- 基本的な「高値-安値」売却方策は以下で与えられていた。
$$
X^{high-low}(S_t\vert \theta^{high-low}) = \begin{cases} 1 & \text{if } p_t < \theta^{low} \text{ or } p_t > \theta^{high}, \\ 1 & \text{if } t=T, \\ 0 & \text{otherwise.}\end{cases}
$$
モジュール *AssetSelling* に加えて、Pythonモジュールで使用するパラメータを提供するスプレッドシート「Chapter2_asset_selling_policy」を[tinyurl.com/sdamodelingsupplements](https://tinyurl.com/sdamodelingsupplements)からダウンロードする必要がある。
- 以下のパラメータを用いて、200期間にわたりこの方策をシミュレートせよ。 $$ \theta^{min} = 6, \quad \theta^{max} = 13, \quad T = 20. $$
- $\theta^{max} = 13$を固定した上で、1刻みで最良の$\theta^{min}$を探索することにより、$\theta^{min}$と$\theta^{max}$の最良値を探索せよ。次に、その$\theta^{min}$の値で固定し、$\theta^{max}$について同様の探索を行え($\theta^{max} = \theta^{min}+2$という制約を課すこと)。
- 資産の価格が上昇している可能性を理解している方策を考える。これは、静的な売買限度が有効でないかもしれないことを意味する。時刻$t+1$の価格を、以下の当てはめられた時系列モデルを用いて予測すると仮定する。
$$
\pbar_t = 0.7 p_t + 0.2 p_{t-1} + 0.1 p_{t-2}.
$$
時刻$t$で分かっている情報をもとに、$p_{t+1}$の予測として$\pbar_t$を用いる。
- この問題の状態変数は何か。価格が0.1刻みで離散化され、価格の範囲が0から100であると仮定した場合、状態空間の大きさはいくらか。
- 以下の方策を導入すると仮定する。 $$ \begin{align} X^{time-series}(S_t\vert \theta^{low}) &= \begin{cases} 1 & \text{if } p_t < \pbar_t - \theta \text{ or } p_t > \pbar_t + \theta, \\ 1 & \text{if } t=T, \\ 0 & \text{otherwise.}\end{cases} \label{eq:assetsellingpolicytimeseries} \end{align} $$ この版の方策では、期待価格からの急激な乖離を探している。目的関数(貢献)対$\theta$のグラフをプロットせよ。あなたのプロットについてコメントせよ。状態空間はかなり大きいが、この方策クラスにおける最良方策を探索する複雑さには変化がないことに注意すること。 (ヒント:状態変数を変更し、高値-安値方策を変更し、モジュール *DriverScript* において$\theta$の異なる値に対する外側のループを作成する必要がある。自分のコードを色々試し、値の範囲を自分で選ぶことを推奨する。選んだ値でコードを実行するのにかかった時間を含めること。)
- (演習9の続き)私たちの株式が季節的パターンに従うとし、売買シグナルが時間に依存すべきであることを示唆しているとする。これは、$\theta$を$\theta_t$に置き換える必要があることを意味する。これがどのように方策探索プロセスを複雑化させるか議論せよ。
- (演習9の続き)次に、売買シグナルが価格に依存すべきだと考えるかもしれない。例えば、価格が高いときには、式$\eqref{eq:assetsellingpolicytimeseries}$における$\pbar_t$からのより大きな乖離を探すべきだと考えるかもしれない(価格が低い場合と比べて)。これは、定数ベクトル$\theta$を関数$\theta(\pbar_t)$に置き換えることを意味する。
- $\theta(\pbar_t)$のルックアップテーブル表現を記述し、この関数がどのように見えるかを示すグラフを描け。これには$\pbar_t$を、例えば10の範囲に離散化する必要がある。これが方策探索の問題をどのように複雑化させるか。
- $\pbar_t$が大きいほど$\theta$も大きくなるべきだという直感を捉える$\theta(\pbar_t)$のパラメトリックな形を提案せよ。この場合、探索すべきパラメータは何か。