Python3ではじめるシステムトレード：ベン図と倒産確率

この記事は統計検定準一級試験の統計学実践ワークブックと統計検定一級の過去問を参考に作られ得います。

231114 23:55

条件付確率は事象の間の関係を明確にするための道具です。事象$A$の確率を$P(A)$と表します。

「$A$が起きない」事象は余事象でその確率は$P(A^c)$で表します。

「$A$と$B$が同時に起きる」事象は積事象で$A \cap B$で表します。

「$A$と$B$のどちらかが起きる」事象は和事象で$A \cup B$で表します。

$\cap,\cup$は集合論の記法で、事象を集合として考えるとよく、さらに確率とも結びつけることができます。また、図に書いてイメージすることもできます。

起きえない事象を空集合$\emptyset$として表し、全集合$\Omega$は必ず起きる事象を表し、それらの確率を$P(\emptyset),P(\Omega)$で記します。

一般の場合には

$$P(A\cup B)=P(A)+P(B)-P(A\cap B)$$
が成り立ちます。これを包徐原理と呼びます。この関係はベン図を用いて表現することができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/4920e5e0-4ac7-edfe-cd32-92f46ba5f35a.png)

$A$と$B$に重なる部分がなく排斥であれば、$A\cap B=\emptyset$で$P(A\cap B)=0$になり、
$$P(A\cup B)=P(A)+P(B)$$
となります。

$A$が起きたという条件の下で$B$が起きる確率を条件付確率と呼び

$$P(B|A)=\frac{P(A\cap B)}{P(A)}$$

と定義します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/091ce8d0-25d4-f943-5153-b1762249cc71.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/7a1438a0-10f1-9485-92d2-d1360e9dc0c3.png)

両辺に$P(A)$を掛けると

$$P(A\cap B)=P(A)\times P(B|A)$$

となります。$A$が起きたときに、$B$が$A$が起きたもとで起きたと考え、それぞれの事象が起きたとしてそれぞれの確率の積を考えることができます。

$$P(A\cap B)=P(A)\times P(B)$$

となるとき、事象$A$と$B$は独立であるといいます。これは条件つき確率$P(B|A)$が無条件の確率$P(B)$に等しいことを示しています。

ベイズの定理とは

$$P(A|B)=\frac{P(B|A)P(A)}{P(B)}=\frac{P(B|A)P(A)}{P(B|A)P(A)+P(B|A^c)P(A^c)}$$
と書くことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/2bcdc05d-5fa4-d75b-fb7c-a863abb779ee.png)

事象$A$をさらに分割して$\Omega=A_1\cup \cdots \cup A_k, A_i \cap A_j=\emptyset (i\ne j)$とすると、拡張して

$$P(A_i|B)=\frac{P(B|A_i)P(A_i)}{\sum_{j=1}^k P(B|A_j)P(A_j)}$$

とすることができます。ベン図で考えると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/a556208e-c318-49ee-e49f-03ab43f12fd1.png)

となります。$k \rightarrow \infty$とすることができます。このことを踏まえて、倒産確率を考えてみましょう。

# 倒産確率

ある企業が10年後に倒産しているか否かを予測する問題を考えます。$X$を説明変数とし,倒産か否かを表す反応変数Yを

```math
\left\{
\begin{array}{ll}
1,& 10年後に倒産している \\
2,& 10年後に倒産していない
\end{array}
\right.
```

とします。

$X=x$を所与とする対数確率比

$ \log \frac{Pr\{Y=2|X=x\}}{Pr\{Y=1|X=x\}}$

が正ならば倒産していない($Y=2$),負ならば倒産している($Y=1$)と予測するべイズ予測ルールを考えます。$Y=j$のときXは平均が$\mu_j$,分散が$\sigma^2$の正規分布に従うとし、確率密度関数は

$$
f(x; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( -\frac{(x-\mu)^2}{2\sigma^2} \right)
$$

で表されます。

対数確率比は、条件付き確率の比を対数にとったものです。ここで、$ P(X=x|Y=j) $ は $ Y=j $ が与えられたときの $ X $ の確率密度関数です。これを式で表すと：

$$
\log \frac{P(X=x|Y=2)P(Y=2)}{P(X=x|Y=1)P(Y=1)}=\log \frac{P(X=x|Y=2)}{P(X=x|Y=1)}=
\log \frac{\frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( -\frac{(x-\mu)^2}{2\sigma^2} \right)}{\frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( -\frac{(x-\mu)^2}{2\sigma^2} \right)}
$$
$$
=-\frac{(x-\mu_2)^2}{2\sigma^2}+\frac{(x-\mu_1)^2}{2\sigma^2}=\frac{(\mu_2-\mu_1)(2x-\mu_1-\mu_2)}{2\sigma^2}
$$

倒産予測ルールを用いると倒産確率を予測することもできますし,本当は倒産企業であるが,倒産していないと誤って予測する確率を求めることもできます。対数確率比を用いる主な理由は以下の通りです：

1. **スケールの変換**: 対数変換は、比率が非常に大きいか非常に小さい場合に、より扱いやすいスケールに変換します。これにより、数値的な安定性と解釈の容易さが向上します。

2. **対称性の導入**: 対数変換により、比率 $ \frac{Pr(Y=2|X=x)}{Pr(Y=1|X=x)} $ が1（つまり、両方の事象が等しい確率）のときに 0 となり、対数確率比が対称的になります。この対称性は解釈上便利です。

総じて、対数確率比の使用は、統計的な分析において数値の安定性、解釈の容易さ、モデルの適用範囲を拡大するために重要です。

たとえば,　
$\sigma_1=\sigma_2=\sigma$と仮定し、$\mu_1=10,\mu_2=40,\sigma=10$、$Pr\{Y=1\}=Pr\{Y=2\}=0.5$としたとき,$X=30$である企業が倒産しているか否かを予測することができます。

この式を用いて、$ X=30 $ のときの対数確率比を計算し、正または負かに基づいて予測を行います。計算を進めましょう。

計算した対数確率比は約 1.5 です。この結果が正であるため、ベイズ予測ルールに基づいて、$ X = 30 $ の企業が10年後に倒産していないと予測されます（$ Y=2 $）。

本当は倒産している企業（$ Y = 1 $）が、倒産していないと誤って予測される確率を求めることができます。これは、$ Y = 1 $ の企業に対して、私たちの予測ルールが $ Y = 2 $（倒産していない）と誤って予測する確率に相当します。

この確率は、$ Y = 1 $ の企業における $ X $ の分布（平均 $ \mu_1 = 10 $、標準偏差 $ \sigma = 10 $）を考慮して、$ X = x $ の値が対数確率比が正になる範囲（つまり $ Y = 2 $ と予測される範囲）にある確率を計算することによって求められます。

対数確率比が正になるための条件は、$ X $ の値が $ \mu_1 $ と $ \mu_2 $ の中間点より大きくなることです。この中間点は $ (\mu_1 + \mu_2) / 2 $ で計算できます。これを計算して、$ Y = 1 $ の企業における $ X $ の確率分布において、この点以上の確率を求める必要があります。

中間点を計算し、その値以上の確率を求めてみましょう。

```Python
# 中間点の計算
mu_1 = 10
mu_2 = 40
sigma = 10

# 中間点
midpoint = (mu_1 + mu_2) / 2

# 中間点以上の確率を計算する（Y = 1 の場合）
prob_error = 1 - norm.cdf(midpoint, mu_1, sigma)
midpoint, prob_error
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/f7078466-4c3c-ec11-da2c-f3b4cdfac32a.png)
中間点は $ 25 $ であり、本当は倒産している企業（$ Y = 1 $）が、倒産していないと誤って予測される確率は約 $ 0.0668 $、つまり約 $ 6.68\% $ です。

# 2変数の例

ある企業が10年後に倒産しているか否かを予測する問題を考える。$X$を説明変数とし,倒産か否かを表す反応変数Yを

```math
\left\{
\begin{array}{ll}
1,& 10年後に倒産している \\
2,& 10年後に倒産していない
\end{array}
\right.
```

とします。2つの説明変数$X_1,X_2$を用いて予測を行うこともできます。$Pr\{Y=1\}=Pr\{Y=2\}=0.5$とし,$Y$が与えられたときの$\mathbf{X}=(X_1,X_2)^T$の確率分布は2変量正規分布に従うと仮定します。$Y=j$のとき$X$は平均べクトルが$\mu^{(j)}$,分散共分散行列が$\Sigma^{(j)}$の2変量正規分布に従うものとします。ただし$\Sigma^{(1)}=\Sigma^{(2)}$と仮定します。2変量正規分布の確率密度関数は

```math
f(x|\mu,\Sigma)=\frac{1}{2\pi|\Sigma|^{1/2}}\exp\left\{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)\right\}
```

です。$|\Sigma|$は行列式を表し、また逆行列$\Sigma^{-1}$が存在します。


このとき,$\mathbf{X}=x=(x_1,x_2)^T$
が与えられたときの対数確率比は

```math
\begin{eqnarray}
\log \frac{Pr\{Y=2|X=x\}}{Pr\{Y=1|X=x\}}&=&\log \frac{Pr\{Y=2\}f(x|Y=2)}{Pr\{Y=1\}f(x|Y=1)}
=\log \frac{\frac{1}{2\pi|\Sigma|^{1/2}}\exp\left\{-\frac{1}{2}(x-\mu_2)^T\Sigma^{-1}(x-\mu_2)\right\}}{\frac{1}{2\pi|\Sigma|^{1/2}}\exp\left\{-\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1)\right\}}\\
&=&-\frac{1}{2}(x-\mu_2)^T\Sigma^{-1}(x-\mu_2)+\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1)
&=&(\mu_2-\mu_1)^T\Sigma^{-1}\left(x-\frac{\mu_1+\mu_2}{2}\right)=\beta^Tx-\beta^T\frac{\mu_1+\mu_2}{2}\\

\end{eqnarray}
```
という形に表せます。ここで、$\beta^T=(\mu_2-\mu_1)^T\Sigma^{-1}$です。これは$\beta^Tx+c$という$x$の線形関数です。対数確率比が正ならば倒産していない($Y=2$),負ならば倒産している($Y=1$)と予測するべイズ予測ルールを考えます。


$\mu$と$\Sigma$は以下で定義される平均べクトルと分散共分散行列である。

```math
\mu=\begin{pmatrix}\mu_1\\\mu_2 \end{pmatrix}, \Sigma=\begin{pmatrix}\sigma_1^2 && \rho\sigma_1\sigma_2\\ \rho\sigma_1\sigma_2&&\sigma_2^2 \end{pmatrix}
```

ここで,$\mu_1,\mu_2,\sigma_1^2,\sigma_2^2$はそれぞれ$X_1,X_2$の平均と分散を表し$\rho$は$X_1$と$X_2$の相関係数を表す。


```math
\mu^{(1)}=\begin{pmatrix}\mu_1^{(1)}\\ \mu_2^{(1)} \end{pmatrix}=\begin{pmatrix}\mu^{(1)}\\ \mu^{(1)} \end{pmatrix}=\begin{pmatrix}10\\ 10 \end{pmatrix}, \mu^{(2)}=\begin{pmatrix}\mu_1^{(2)}\\ \mu_2^{(2)} \end{pmatrix}=\begin{pmatrix}\mu^{(2)}\\ \mu^{(2)} \end{pmatrix}=\begin{pmatrix}40\\ 40 \end{pmatrix}
```

および$\sigma_1=\sigma_2=10$,$\rho=1/8$とします。べイズ予測ルールを用いる場合に,本当は倒産企業であるが,倒産していないと誤って予測する確率はいくらですか。

```math
\begin{eqnarray}
(\mu^{(2)}-\mu^{(1)})^T\Sigma^{-1}&=&\left\{(\mu^{(2)}-\mu^{(1)})\begin{pmatrix}1\\1\end{pmatrix}\right\}^{T}\left\{\frac{1}{1-\rho^2}\begin{pmatrix}1/\sigma^2 && -\rho/\sigma^2\\ -\rho/\sigma^2&&1/\sigma^2 \end{pmatrix}\right\}\\
&=&\frac{(\mu^{(2)}-\mu^{(1)})}{\sigma^2(1-\rho^2)}\begin{pmatrix}1 & 1\end{pmatrix}\begin{pmatrix}1 && -\rho\\ -\rho&&1 \end{pmatrix}\\
&=&\frac{(\mu^{(2)}-\mu^{(1)})}{\sigma^2(1+\rho)}
\end{eqnarray}
```

対数確率比が0になる$x$を求めます。それは
```math
x=\frac{\mu^{(1)}+\mu^{(2)}}{2}\begin{pmatrix}1\\1\end{pmatrix}
```

です。よって、$x_1+x_2>\frac{\mu^{(1)}+\mu^{(2)}}{2}$なら倒産しません。つぎに対数確率比が正で$Y=1$となる割合を求めます。それは$x_1+x_2\sim N(2\mu^{(1)},2\sigma^2(1+\rho))$のときです。

よって、
```math
\begin{eqnarray}
Pr\left\{x_1+x_2>\frac{\mu^{(1)}+\mu^{(2)}}{2}|Y=1\right\}&=&Pr\left\{\frac{(x_1+x_2-2\mu^{(1)}}{2\sigma^2(1+\rho)}>\frac{\mu^{(1)}+\mu^{(2)}-2\mu^{(1)}}{2\sigma^2(1+\rho)}\right\}\\
&=&Pr\left\{z>\frac{\mu^{(1)}+\mu^{(2)}-2\mu^{(1)}}{2\sigma^2(1+\rho)}\right\}=Pr(z>2)
\end{eqnarray}
```


を計算します。

```Python
from scipy.stats import norm

# パラメータの設定
mu1 = 10
mu2 = 40
sigma = 10
rho = 1/8

# 標準正規分布に対する z 値の計算
z_value = ((mu1 + mu2)  - 2 * mu1) / (2 * sigma**2 * (1 + rho))**0.5

# z 値に対応する確率を計算
probability = 1 - norm.cdf(z_value)
probability
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/ad05b753-c84f-2cba-2d16-15fd5caab4c5.png)

<A HREF="http://www.tradersshop.com/bin/showprod?c=9784775991855
">Python3ではじめるシステムトレード【第2版】環境構築と売買戦略</A>

<A HREF="http://www.tradersshop.com/bin/showprod?c=9784775991855">
     <IMG SRC="http://www.tradersshop.com/images/prod/9784775991855.jpg"BORDER=1 WIDTH=70 HEIGHT=100  </A>

「画像をクリックしていただくとpanrollingのホームページから書籍を購入していただけます。