「ダウンサンプリングによる予測確率のバイアス」の補足

# はじめに
不均衡データの取扱いは機械学習の大きな課題の一つだと思います。
不均衡データに対する典型的な対処方法は、多数派のクラスに属するサンプルをアンダーサンプリング、もしくは少数派のクラスに属するサンプルをオーバーサンプリングしてデータ量を均等にすることだと思います。
ところが、[ダウンサンプリングによる予測確率のバイアス](https://pompom168.hatenablog.com/entry/2019/07/22/113433)という解説記事によると、アンダーサンプリングを使用するとバイアスが生じ、少数派クラスに予測される確率が高くなるということです。
解説記事は実験まで行われていてとても素晴らしい記事でした。ただ、核となる式の詳細が省かれていましたので、この記事では省略部分の補足をしようと思います。

# 参考
- [ダウンサンプリングによる予測確率のバイアス](https://pompom168.hatenablog.com/entry/2019/07/22/113433)
- [Dal Pozzolo et al. (2015) Calibrating Probability with Undersampling for Unbalanced Classification](https://ieeexplore.ieee.org/abstract/document/7376606)

# 解説
## 問題設定
二値分類タスクを考えます。
インプット変数の次元は$n$次元とし、クラス変数は{$0,1$}の二値を取るとします。タスクの目的はインプットからクラスを推測する分類器を求めることです。ここでクラス$0$をnegative、クラス$1$をpositiveと呼ぶこととします。
クラス$1$（positive）のデータ数がクラス$0$（negative）のデータ数より少ないとします。すなわち、クラス0をアンダーサンプリングしてクラス1のインプット数と同じ数になるようにします。
アンダーサンプリングによって二つのクラスのデータ数を均衡させたときに何が起きるか見ていきます。
アンダーサンプリングは重複したサンプリングはしないこととします。

## Sample Selection Bias due to undersampling
$(\mathcal X,\mathcal Y)$ を元の不均衡なデータセット、$(X,Y)$をアンダーサンプリング後の均衡なデータセットとします。つまり$(X,Y)\subset (\mathcal X,\mathcal Y)$です。

ここで新たな確率変数$s$を導入します。確率変数$s$は元の不均衡なデータセットにおけるサンプル$(x, y)\in (\mathcal X,\mathcal Y)$が、アンダーサンプリング後のデータセット$(X,Y)$に含まれていれば$1$、そうでなければ$0$を取ります。

アンダーサンプリングは、サンプル$(x, y)\in(\mathcal X,\mathcal Y)$がどのクラスに属しているかでサンプルする確率が異なります。（例えばnegativeの数が1000でpositiveの数が100の場合、100だけサンプリングしようとするとnegativeに対して$s=1$となる確率は1/10、positiveに対して$s=1$となる確率は1です。）
ただし、サンプリングはクラスラベルのみに依存し、インプットには依存しません。したがって$p(s|y,x)=p(s|y)$が成り立ちます。また、少数派クラスのインプットの数と同じになるように多数派クラスからサンプルしますが、サンプリングはランダムに行われるので分布は変化しません。したがって$p(x|y,s)=p(x|y)$です。

本題の式を導出しましょう。まずはベイズの定理から次の式が成り立ちます。

```math
p(y|x, s) = \frac{p(y,x,s)}{p(x, s)} = \frac{p(s|y, x)p(y|x)p(x)}{p(s|x)p(x)} = \frac{p(s|y, x)p(y|x)}{p(s|x)}.
```
さらに$p(s|y,x)=p(s|y)$を使用します。

```math
\frac{p(s|y, x)p(y|x)}{p(s|x)} = \frac{p(s|y)p(y|x)}{p(s|x)}.
```

また、分母に$p(s|x)=\sum_{y=0}^1p(s|y)p(y|x)$を使用します。

```math
\frac{p(s|y)p(y|x)}{p(s|x)} = \frac{p(s|y)p(y|x)}{p(s|y=1)p(y=1|x)+p(s|y=0)p(y=0|x)}.
```

よって次の式が得られます。

```math
p(y|x, s) = \frac{p(s|y)p(y|x)}{p(s|y=1)p(y=1|x)+p(s|y=0)p(y=0|x)}.
```

この式に$y=1$と$s=1$を代入します。positiveは全データを使用するので、$p(s=1|y=1)=1$が成り立ちます。

```math
\begin{align}
p(y=1|x, s=1) &= \frac{p(s=1|y=1)p(y=1|x)}{p(s=1|y=1)p(y=1|x)+p(s=1|y=0)p(y=0|x)} \\
&= \frac{p(y=1|x)}{p(y=1|x)+p(s=1|y=0)p(y=0|x)}.
\end{align}
```
次の変数を定義します。

$p\equiv p(y=1|x)$は元のインプットに対してpositiveに分類される事後確率です。二値分類なので$p(y=0|x)=(1-p)$が成り立ちます。
$p_s\equiv p(y=1|x,s=1)$はアンダーサンプリングで選ばれたインプットに対してpositiveに分類される事後確率です。
$\beta \equiv p(s=1|y=0)$はnegativeサンプルがアンダーサンプリングでサンプルに選ばれる確率です。式変形をして詳しく見てみましょう。

```math
\beta \equiv p(s=1|y=0)=\frac{p(s=1,y=0)}{p(y=0)}=\frac{p(s=1,y=1)}{p(y=0)}=\frac{p(y=1)}{p(y=0)}.
```
１つ目の等式は定義、２つ目の等式はベイズの定理を使用しました。３つ目の等式ですが、全データ中で、アンダーサンプリングに選ばれたクラス0のインプット数とアンダーサンプリングに選ばれたクラス1のインプット数は等しいので等式が成り立ちます。４つ目の等式はpositiveインプットは全てアンダーサンプリングに選ばれるので成り立ちます。インプット数が十分多ければ、クラスに属する確率はインプット数の割合と考えて差し支えありません。よって$\beta$はnegativeに対するpositiveの割合です。

```math
\beta = \frac{p(y=1)}{p(y=0)} \simeq \frac{N_1}{N_0}.
```

これらの変数を用いて式を書き直すと次のようになります。

```math
p_s =\frac{p}{p+\beta (1-p)} > p.
```
よって、アンダーサンプリングによって、少数派であるpositiveに分類される確率が大きくなっていることがわかります。これがアンダーサンプリングによるバイアスです。
$\beta=1$、すなわち最初から均衡データである場合には$p=p_s$となります。
偏りが大きすぎると$\beta\sim 0$となり、$p$と$\beta/(1+\beta)$がコンパチしない限り、$p_s \sim 1$、すなわちほとんどpositiveに分類されてしまいます。

式を$p$について逆解きして、補正をすることによってバイアスの影響を除去できます。

```math
p = \frac{\beta p_s}{\beta p_s - p_s + 1}
```

# おわりに
この続きの実験については、是非[ダウンサンプリングによる予測確率のバイアス](https://pompom168.hatenablog.com/entry/2019/07/22/113433)を御覧ください。