SQの収益機会を利用する -戦果編- 2018年11月

1月7日の記事で述べた戦略に基づき取引を行うプログラムを昨日(2018年11月のSQ日)稼働させた結果を報告する。

乖離は生じておらず、従って取引は行われなかった。
日経225銘柄中、前日前々日に開示情報がなかった銘柄は152銘柄であり、その中に8時59分55秒時点で3%以上、上方あるいは下方乖離していた銘柄は存在しなかった。

SQの収益機会を利用する -戦果編- 2018年9月

1月7日の記事で述べた戦略に基づき取引を行うプログラムを今日(2018年9月のSQ日)に稼働させた結果を報告する。

稼働結果

8時59分50秒時点で上方乖離している銘柄が15銘柄(下方乖離が5銘柄)存在したため、乖離率上位2銘柄(ミネベアミツミアドバンテスト)に修正後終値の2%上に売り注文を出した。しかし、2銘柄ともに9時30秒時点で約定していなかったため注文を取り消した。これはプログラムが9時30秒時点で未約定かつ買い気配の乖離率が2%未満のものを取り消しするように作ってあるためである。

プログラムの不備

このプログラムの仕様は意図と反するものであった。特別買い気配の場合9時時点で前日終値の付近から板寄せが始まるため、上記のロジックで注文の取り消しを行うと特別気配の銘柄はすべて取り消されてしまうことになる。

収益についての考察

プログラムの不備により取引ができなかったが、結果として正解だった。即ち、取引を行っていた場合、損失を出していた。仮に乖離銘柄すべてを同金額取引した場合0.81%の損失であった。

下表は上方乖離銘柄とその株価等である。ここで調整率は22,810/22,630 = 100795である。概算損益率は当日始値で売り建て、当日終値清算した時の損益率である。

code 会社名 前日終値 調整後終値 当日始値 当日終値 乖離率 概算損益率
6479 ミネベアミツミ 1,944 1,959 1,980 2,031 1.05% -2.58%
6857 アドバンテスト 2,230 2,248 2,297 2,341 2.19% -1.92%
8331 千葉銀行 680 685 684 693 -0.21% -1.32%
8725 MS&AD 3,318 3,344 3,394 3,423 1.48% -0.85%
2503 キリンホールディングス 2,783 2,805 2,830 2,798 0.90% 1.15%
2871 ニチレイ 2,842 2,865 2,892 2,832 0.96% 2.07%
3401 帝人 2,131 2,148 2,181 2,172 1.54% 0.41%
4021 日産化学 5,500 5,544 5,610 5,710 1.20% -1.78%
4452 花王 8,743 8,813 8,893 8,885 0.91% 0.09%
5108 ブリヂストン 4,079 4,111 4,172 4,149 1.47% 0.55%
5706 三井金属 2,870 2,893 2,920 3,030 0.94% -3.77%
6103 オークマ 5,620 5,665 5,710 5,970 0.80% -4.55%
6305 日立建機 3,295 3,321 3,360 3,360 1.17% 0.00%
7951 ヤマハ 5,560 5,604 5,650 5,680 0.82% -0.53%
9531 東京ガス 2,677 2,698 2,727 2,704 1.06% 0.84%

考察と今後

本日の日経平均株価始値は23,035.78円、終値は23,094.67円であり始値が上方に歪んでいたとは考えられない。即ち、8時59分50秒時点の気配から歪みを発見しようという意図は失敗したといえる。

また、8時59分50秒時点の最良買い気配が調整後終値よりも3%以上高い銘柄でも実際の始値と調整後終値の乖離率はほとんどの場合(アドバンテスト以外)2%未満であった。気配の観測をもう少し長くする(例えば8時59分58秒時点で乖離を判定する)ことが必要かもしれない。

なお去年の9月も上方乖離が18銘柄あったが売り建てによって収益は上げられない。(参考) 9月になにか特別なことがある可能性があるが、2年分のデータでは情報不足であるし、市場に関する知識が不足していてわからない。

今後、このプログラムを稼働させるか、稼働させるとして修正は行うか、についてはしばらく考えてから決めたい。

主成分分析と特異値分解

 主成分分析および特異値分解の数学的背景を解説する。本稿は初歩的な確率論および大学初年度レベルの線形代数の知識を前提とする。

主成分分析

 X_1, \dots, X_nを確率変数とする。このとき、X_iX_jの共分散\mathrm{Cov}(X_i, X_j)を第(i, j)成分とするn \times n行列

 P = \begin{pmatrix}
 \mathrm{Var}(X_1) & \mathrm{Cov}(X_1, X_2) & \cdots & \mathrm{Cov}(X_1, X_n)\\
 \mathrm{Cov}(X_2, X_1) & \mathrm{Var}(X_2) & \cdots & \mathrm{Cov}(X_2, X_n)\\
 \vdots & \vdots & \ddots & \vdots\\
 \mathrm{Cov}(X_n, X_1) & \mathrm{Cov}(X_n, X_2) & \cdots & \mathrm{Var}(X_n)\\
\end{pmatrix}

X_1, \dots, X_nの共分散行列という。これを \Sigmaとおく。
 \mathrm{Cov}(X_i, X_j) = \mathrm{Cov}(X_j, X_i) であるので \Sigma は対角行列となる。
 また、X_1, \dots, X_n の線形結合で表される確率変数
 Y = a_1X_1 + \cdots + a_nX_n,
 Z = b_1Z_1 + \cdots + b_nZ_n
 (a_1, \dots, a_n, b_1, \dots, b_nは実数)
に対して Y Zの共分散は

  \mathrm{Cov}(Y, Z) = (a_1, \dots, a_n) \Sigma \begin{pmatrix} b_1\\ \vdots\\ b_n \end{pmatrix}

と計算できる。言い方を変えれば \SigmaX_1, \dots, X_n が張る実ベクトル空間上の共分散で定義される二次形式に対応する行列となっている。
 任意の確率変数 X に対して  \mathrm{Var}(X) \geq 0 であるので共分散行列は非負正定値対称行列となる。よって \Sigma は直行行列で対角化可能で固有値はすべて非負実数となる。この固有値を大きい順に並べて  \lambda_1, \dots, \lambda_n とおく。このとき  \lambda_iX_1, \dots, X_n の第i主成分という。
 第i主成分に対応する固有ベクトルから決まるX_1, \dots, X_nの線形結合を  W_i とおく。このとき  W_1, \dots, W_n の共分散行列は対角行列となり、対角成分は  \lambda_1, \dots, \lambda_n となる。言い方を変えれば

  \mathrm{Var}(W_i) = \lambda_i,
  \mathrm{Cor}(W_i, W_j) = 0, (i \neq j)

が成り立つ。
 主成分分析とは主成分およびその固有ベクトルを求めることである。主成分に対応する固有ベクトルは上記のとおり共分散の意味でよい性質を持つ基底となる。 X_1, \dots, X_n が多次元の観測データの各成分であるとき、主成分分析はデータの成分を線形変換することでデータの共分散の意味で簡潔な表現を与える。特に相対的に小さな主成分に対応する固有ベクトルをデータにおけるばらつきが小さいとして無視することでデータの次元の削減が可能となる。(ただし各成分の尺度がそろっている必要がある。)

特異値分解

 特異値分解とは複素数係数の行列に対する以下の定理で与えらえる分解のことをいう。

定理1
  M複素数係数の  m \times n行列とする。 Mのランクを  r とおく。
このとき m次ユニタリ行列  U , n次ユニタリ行列 V と正の実数  \mu_1 \geq \cdots \geq \mu_r が存在して

  M = U\Sigma V^{\ast},
 ( \Sigma m \times n行列で  1 \leq i \leq r に対して  (i, i)成分が  \mu_i, それ以外の成分が0.)

が成立する。
 さらに上記の分解において  \mu_1 \geq \cdots \geq \mu_r M を定めれば一意に決まる。

証明
  M^{\ast}M はエルミート行列であるのでユニタリ行列によって対角化可能。また任意の  n次元複素ベクトル  v に対して

  v^{\ast}M^{\ast} M v = (Mv)^{\ast} Mv \geq 0

なので  M^{\ast}M は非負正定値。よって  M^{\ast}M固有値はすべて非負実数。その固有値を大きい順に  \lambda_1, \dots, \lambda_n とおく。また  V n次ユニタリ行列で  V^{\ast}M^{\ast} M V が対角行列でその対角成分が左上から順に  \lambda_1, \dots, \lambda_n となるものとする。このとき  V の第i列ベクトルを  v_i とかくと

  M^{\ast}Mv_i = \lambda_i v_i

が成り立つ。
  \lambda_1, \dots, \lambda_n のうちゼロでないものの個数を  s とし、1 \leq i \leq s に対して  m次元ベクトル u_i

  u_i = \frac{1}{\sqrt{\lambda_i}}Mv_i

で定義する。このとき、 \{u_1, \dots, u_s\} はそれらで張られるベクトル空間の正規直交基底となっている。なぜならば

  u_i^{\ast} u_j = \frac{1}{\sqrt{\lambda_i \lambda_j}} (Mv_i)^{\ast} Mv_j = \frac{1}{\sqrt{\lambda_i \lambda_j}} v_i^{\ast} M^{\ast} Mv_j = \frac{\lambda_j}{\sqrt{\lambda_i \lambda_j}} v_i^{\ast} v_j = \frac{\lambda_j}{\sqrt{\lambda_i \lambda_j}} \delta_{i, j} = \delta_{i, j}

となるからである。(ここで  \delta はKroneckerのデルタ関数。)
  u_{s+1}, \dots, u_m m次元ベクトルで  \{u_1, \dots, u_s\} と合わせて  \mathbb{C}^{m} の正規直交基底となるものとする。 U u_1, \dots, u_m を並べた行列とする。 u_1, \dots, u_m が正規直交基底なので  U はユニタリ行列。
 このとき  U^{\ast} M V の第 (i, i)成分は  \sqrt{\lambda_i} でそれ以外の成分はゼロとなる。なぜならば  U^{\ast} M V の第 (i, j)成分  = u_i^{\ast} M v_j であり

 i \leq s のとき
  u_i^{\ast} M v_j = \frac{1}{\sqrt{\lambda_i}} (M v_i)^{\ast} M v_j = \frac{1}{\sqrt{\lambda_i}} v_i^{\ast} M^{\ast} M v_j = \frac{\lambda_j}{\sqrt{\lambda_i}} v_i^{\ast} v_j = \frac{\lambda_j}{\sqrt{\lambda_i}} \delta_{i, j}

 i > s かつ  j \leq s のとき
  u_i^{\ast} M v_j = \sqrt{\lambda_j} u_i^{\ast}u_j = 0

 i > s かつ  j > s のとき
  (M v_j)^{\ast} M v_j = v_j^{\ast} M^{\ast} M v_j = \lambda_j = 0 より  M v_j = 0 よって  u_i^{\ast} M v_j = 0

となるからである。
  \Sigma = U^{\ast} M V とおくと  M = U \Sigma V^{\ast} となるので、 s = r が言えれば定理の前半が証明できたことになる。これは  M = U \Sigma V^{\ast} の両辺のランクを考えれば自明である。( U, V はユニタリ行列なので右辺のランクは  \Sigma のランクと一致する。)
 あとは  \mu_1, \dots, \mu_r の一意性を証明すればよい。定理の条件を満たす分解  M = U \Sigma V^{\ast} が与えられたとする。このとき

  V^{\ast} M^{\ast} M V = V^{\ast} V \Sigma^{\ast} U^{\ast} U \Sigma V^{\ast} V = \Sigma^{\ast} \Sigma =
\begin{pmatrix}\mu_1^2 & & & \\ & \ddots & & \\ & & \mu_r^2 & \\ & & & O\end{pmatrix}

となるので  \mu_1, \dots, \mu_r M^{\ast} M固有値平方根。即ち、上述の方法で得られたもの以外存在しない。
(証明終わり)

 定理1の  M の分解を  M特異値分解といい、 \mu_i M の第 i特異値という。
 特異値分解によって行列の低ランク近似が得られる。 s < r とし、 \Sigma' を第s特異値までを対角成分に並べた行列とする。このとき  M' = U \Sigma' V^{\ast} はランク  s Mとサイズの等しい行列となり、そのような行列の中である意味で最も良く  M を近似した行列となる。この近似の尺度を説明するために以下の定義を行う。

定義
 複素数係数の行列 A のFrobeniusノルムとは  A のすべての成分の複素絶対値の2乗の和のことである。

このとき以下が成り立つ。

定理2
  M, M' を上述のとおりとする。このとき  M' はランク  s の行列で  M - M' のFrobeniusノルムが最小となる行列である。

(証明は柳井 晴夫, 竹内 啓「射影行列・一般逆行列特異値分解 (UP応用数学選書 10)」定理5.10参照。)

SQの収益機会を利用する -戦果編- 2018年8月

1月7日の記事で述べた戦略に基づき取引を行うプログラムを今日(2018年8月のSQ日)に稼働させた結果を報告する。

乖離は生じておらず、従って取引は行われなかった。
日経225銘柄中、前日前々日に開示情報がなかった銘柄は160銘柄であり、その中に8時59分50秒時点で3%以上下方乖離している銘柄は8035東京エレクトロンの1銘柄で、上方乖離している銘柄は存在しなかった。

ガチャと損保と推移行列 -線形代数の応用-

 線形代数の応用の1つである推移行列について概説する。固有値固有ベクトルといった概念が確率的現象の解析に利用できる様を見る。本稿は大学初年度レベルの線形代数の知識を前提とする。

推移行列

定義

 有限個の状態 S = \{s_0, \dots, s_n\}を考える。ある時刻の状態がs_jであるとき次の時刻の状態がs_iである確率がp_{ij}で与えられている確率的現象Xがあるとする。(i,j)成分がp_{ij}で与えられる行列をXの推移行列という。

 Xの推移行列をPとおき、ある時刻tXが状態s_iである確率をq_i(t)とし、これらを縦に並べた状態分布ベクトルをx_tとおく。即ち

P =  \begin{pmatrix}p_{11} & \cdots & p_{1n}\\ \vdots & \ddots & \vdots\\ p_{n1} & \cdots & p_{nn} \end{pmatrix}
,\quad
x_t = \begin{pmatrix}q_1(t)\\ \vdots\\ q_n(t)\end{pmatrix}
,\qquad
0 \leq p_{ij}, q_i \leq 1,\ \sum_i p_{ij} = 1,\ \sum_i q_i = 1

とする。
 このとき x_{t+1} = Px_t が成り立つ。

 例えば2つの状態s_1, s_2を考え、s_1からs_2になる確率を0.4、s_1からs_2になる確率を0.3とすると推移行列は

\begin{pmatrix}0.6 & 0.3\\ 0.4 & 0.7 \end{pmatrix}

となる。

定常分布

 推移行列Pに対してPx = xとなる状態確率ベクトルをPの定常分布と呼ぶ。即ち次の時刻においても各状態をとる確率が変わらない状態のことである。これに関して以下の命題が成り立つ。

命題1
 任意の推移行列Pに対して定常状態が少なくとも1つは存在する。

 定常分布は線形代数的に言えばP固有値1に関する固有ベクトルなのでこの命題は

 「推移行列は固有値1を持ち、その固有ベクトルとして状態分布ベクトルとなるものが存在する」

ということを主張している。
 命題1の証明を与えよう。

 まず固有値1を持つことを示す。
\sum_i p_{ij} = 1であることから 1_n = ^t(1, 1, \dots, 1)とおけば^t1_nP = ^t1_nが成り立つ。
これは^t1_nPの右作用に関する固有値1の固有ベクトルであるということである。右作用と左作用の固有値は等しい(言い方を変えれば転置行列と元の行列の固有値は等しい)のでPは(左作用に関して)固有値1を持つ。
 あるn次元実ベクトルxが状態分布ベクトルであることと^t1_nx = 1かつxのすべての成分が0以上であることは同値である。あるベクトルのすべての成分が非負または非正ならばそのベクトルに適当に何倍かして^t1_nx = 1とできるので、P固有値1の固有ベクトルとしてすべての成分が非負または非正なものが存在することを示せばよい。
 これを示すために状態集合が"確率的に分割可能"という概念を導入する。これは状態集合を2つに分割してそのどちらかからもう一方に到達する確率が0となるようにできる、ということである。即ち、状態集合Sの添え字の集合I = \{1,\dots,n\}が2つの共通部分を持たない空でない2つの部分集合 I_1, I_2の和集合となっており、 q_{ij} = q_{ji} = 0がすべての i \in I_1, j \in I_2に対して成り立つとき、Sは確率的に分割可能であるという。
 P固有値1の固有ベクトルとしてすべての成分が非負なものが存在することを示す。状態集合Sは確率的に分割可能でないと仮定してよい。なぜならばもしSが確率的に分割可能であるならば分割されたより小さい状態集合に対して定常分布を求めればよいからである。
 vP固有値1の固有ベクトルとし、vの第i成分をv_iとかく。

 I_1 = \{i \in I | v_i \geq 0\},\ I_2 = \{i \in I | v_i <0\}

 とおく。このとき

  \sum_{i \in I_2} v_i = \sum_{i \in I_2} \sum_{j \in I} p_{ij}v_j \geq \sum_{i \in I_2} \sum_{j \in I_2} p_{ij}v_j = \sum_{j \in I_2} (\sum_{i \in I_2} p_{ij}) v_j \geq \sum_{j \in I_2} v_j

であり、1つ目の不等式の等号が成立するのは  p_{ij} = 0,\ i \in I_2, j \in I_1 のときで、2つ目の等号が成立するのは  p_{ij} = 0,\ i \in I_1, j \in I_2 のとき。もしI_1, I_2のいずれも空集合でないならば状態集合Sは確率的に分割可能でないことと矛盾する。よってI_1I_2のいずれかは空集合。即ちvの成分はすべて非負あるいはすべて負となる。これが求めるベクトルである。(証明終わり)


 一般に定常分布はただ1つとは限らない。また、時刻が十分経過したときに定常分布に収束するとも限らない。実際、推移行列が\begin{pmatrix}1&0\\0&1\end{pmatrix}で与えらえる場合、すべての状態分布ベクトルが定常分布となるし、推移行列が\begin{pmatrix}0&1\\1&0\end{pmatrix}で与えらえる場合、定常分布\begin{pmatrix}1/2\\1/2\end{pmatrix}を除くすべての状態分布ベクトルは収束しない。

自動車保険料率

 推移行列の応用の1つとして自動車保険のクラス別料率が挙げられる。
 ある期間に事故を起こしたかどうかに応じて保険加入者のクラスが決定され、それによって保険料の異なる自動車保険を考える。保険料を決定する時点では加入者のクラス分布はわからないため、これに対してなんらかの仮定を置いて将来予想される保険料収入と保険金支払いがバランスるように保険料を設定する必要がある。この際にクラス分布として前項で述べた定常分布を用いるという考え方がある。その正当性を簡単な例を用いて説明しよう。
 3つのクラスが存在する自動車保険を考える。ある期間の事故発生確率はクラスによらずpで与えらており、ある期間に事故を起こすと次の期間では一つ下のクラスになり、無事故であると1つ上のクラスになる契約であるとする。このとき上のクラスから順に番号付けされているものとするとクラス分布の推移行列は

 P = \begin{pmatrix}
 1-p & 1-p & 0\\
 p & 0 & 1-p\\
 0 & p & p\\
\end{pmatrix}

で与えらえる。
 この推移行列はただ1つ定常分布を持ち、どのような初期状態から始めても定常分布に収束することを証明しよう。
 推移行列の固有多項式を計算することで固有値1, \pm\sqrt{p(1-p)}であることがわかる。したがって推移行列は対角化可能である。固有値1, \sqrt{p(1-p)}, -\sqrt{p(1-p)}固有ベクトルを1つずつとりv_1, v_2, v_3とおく。ただしv_1としては定常分布をとる。このとき、v_1, v_2, v_3は3次元ベクトル空間の基底となっているので任意の初期状態xc_1v_1 + c_2v_2 + c_3v_3,\ c_1, c_2, c_3 \in \mathbb{R} の形に書ける。
 このとき

  P^{\tau}x = c_1P^{\tau}v_1 + c_2P^{\tau}v_2 + c_3P^{\tau}v_3 = c_1v_1 + (\sqrt{p(1-p)})^{\tau}c_2v_2 + (-\sqrt{p(1-p)})^{\tau}c_3v_3

 であり、|\sqrt{p(1-p)}| < 1より\tau \rightarrow \inftyx \rightarrow c_1v_1.
 極限においても各成分の合計が1であるという条件は成り立つのでc_1 = 1がいえる。即ちx \rightarrow v_1. つまりxは定常分布に収束する。(証明終わり)

 上記の証明が具体的に固有ベクトルを求めることなく完了している点に線形代数のありがたみがある。つまり対角化可能であることさえわかれば時刻\tauにおける分布が指数関数の線形結合であることわかるのである。この例のように対角化可能であることさえわかれば固有ベクトルを具体的に求めることなく有用な情報を引き出せることが多々ある。

ガチャ

 推移行列のもう1つの応用例として最近のゲームにおけるガチャで特定の数の景品をそろえる確率を計算しよう。
 即ち、以下のような問題を考える。

 n種類のあたり景品があるくじ(復元抽出) を考える。あたりを引く確率はどれも同じであるとする。この確率をpとおく。くじを\tau回引いた後、あたり景品をi種類持っている確率をi = 0, 1, \dots, nに対して求めよ。

 景品をi種類持っている状態を第i + 1状態とすると推移行列P

  P = \begin{pmatrix}
    1 - np & & & &\\
    np & 1 - (n-1)p & & &\\
     & (n-1)p & 1 - (n-2)p & &\\
     &  & \ddots & \ddots & \\
    & & & p & 1
  \end{pmatrix}

で与えられる。
 初期状態はs_0 = ^t (1, 0, \dots, 0)(確率1で0種類の景品を持っている)なので求める確率は  P^{\tau}s_0 となる。
 これを求めるために固有値固有ベクトルを計算する。
 Pが三角行列なので固有値は対角成分に並んでいる数である。いくつかの固有ベクトルを具体的に計算することで固有ベクトルは以下となることが予想できる。

 u_i = \begin{pmatrix}
  {}_ {n}\mathrm{C}_{i}\\{}_{n-1}\mathrm{C}_{i}\\\vdots\\{}_{0}\mathrm{C}_{i}
\end{pmatrix},
\qquad
v_i = \begin{pmatrix}
  (-1)^{n-i} {}_{i}\mathrm{C}_{n}\\(-1)^{n-1-i} {}_{i}\mathrm{C}_{n-1}\\\vdots\\(-1)^{-i} {}_{i}\mathrm{C}_{0}
\end{pmatrix}, \qquad i = 0, 1, \dots, n

ただし、{}_{k}\mathrm{C}_{l}は二項係数で k < lのとき{}_{k}\mathrm{C}_{l} = 0と定義する。

 これらは実際、P固有ベクトルとなっている。即ち、以下の命題が成り立つ。

命題2
 i = 0, \dots, nに対して
  ^tu_iP = (1 - ip)^tu_i, \quad Pv_i = (1 - ip)v_i
 が成り立つ。

 証明は二項係数の計算に習熟していれば容易なので省略する。

 さらに\{u_i\}の変換行列と\{v_i\}の変換行列は互いに逆行列となる。即ち、

命題3
 ^tu_iv_j = \delta_{i,j}.
 ただし\delta_{i,j}はKroneckerのデルタ関数

 これも証明は二項係数の計算をがんばるだけである。

 これらの命題より Q = \begin{pmatrix}v_0 \cdots v_n\end{pmatrix}とおくとQ^{-1} = {}^t\begin{pmatrix}u_0 \cdots u_n\end{pmatrix}であり、

 Q^{-1}PQ = \begin{pmatrix}
  1 & & & \\
   & 1 - p & &\\
   & & \ddots &\\
   & & & 1 - np
\end{pmatrix}

が成り立つ。
 これより景品を持っていない状態から始めて\tau回くじを引いた後、景品をi種類持っている確率は

 {}_{n}\mathrm{C}_{i}\sum_{l=0}^{i} (-1)^{i-l}(1 - (n-l)p)^{\tau} {}_{i}\mathrm{C}_{l}

と計算できる。(これも二項係数の計算をがんばる。)

 例えば  n = 5, p = 0.01 の場合で100回くじを引いた後、景品を持っている確率はおよそ

0種類 : 0.59%
1種類 : 5.47%
2種類 : 19.73%
3種類 : 34.65%
4種類 : 29.65%
5種類 : 9.89%

と計算できる。