Sun Oct 14 2018

註意. ここは日記である. 真実とは限らない参考文献も無いような事柄を書く.

ポリコレAI

特徴量に入れないだけだと不十分(∵人間が気づかない相関を通じて見えてしまうかもしれない)ので, 特徴量には入れた上で, その属性に独立になるよう学習するのが主流ですね。 https://t.co/Lqd1ESAhx7

— ™ (@tmaehara) October 13, 2018

これを読んで.

あらすじ

Amazonが企業への人材採用を判定するような予測器を作ったところ, 性別に強く依存することがはっきりとバレてしまって, ポリコレ的に気まずくなったので運用をやめた.

指摘

これは推測であるが, 今までの実際の採用実績を教師データに用いたのだろう. そしてそれは実際に, 性別によって採用実績に偏りがあった為にそれを学習してしまったのだと思われる.

ポリコレ的には, 例え予測結果が悪くなろうが, 採用予測が性別に依存してはいけないのである. この為にはどのような予測モデルを設定して学習すれば良かったのだろうか.

先のツイートの要約:

  1. 予測モデルに, 性別を特徴量に入れなければそれを使わないのだからこんな問題は起きなかったのではないか
  2. 他の説明変数にすでに性別に依存するものがあるかも知れず, 性別を特徴量に入れないだけでは不十分

考えたこと

説明変数の内, 性別のようにポリコレ的にセンシティブな変数 \(x_s\) と, それ以外の \(x\) とに分ける. 初め考えていた予測モデルとは \[y \sim Q(y|x_s, x) = P(y|x_s, x)\] という \(Q\) であった.

まず, 本当に \(y\)\(x_s\) に依存しない場合がある. これは特徴量に \(x_s\) を入れても入れなくてもいい. なぜなら \(y\)\(x_s\) とは独立であるので, \[P(y|x_s,x) = \frac{P(y,x_s|x)}{P(x_s|x)} = \frac{P(y|x) P(x_s|x)}{P(x_s|x)} = P(y|x)\] が成り立つから.

次に一般に \(y\)\(x_s\) に依存する場合に (今回のケース), \(x_s\) を特徴量から抜いたものと抜かないものとで何が違うか調べる.

\[\begin{align*} P(y|x) & = \frac{P(x,y)}{P(x)} \\ & = \frac{P(x_s,x,y) / P(x_s|x,y)}{P(x_s,x) / P(x_s|x)} ~~~(\text{ベイズの定理より})\\ & = P(y|x_s,x) \frac{P(x_s|x)}{P(x_s|x,y)}. ~~~(\ast) \\ \end{align*}\]

右辺にある \(P(y|x_s,x)\) を学習する代わりに, この式を学習することが, 特徴量から \(x_s\) を抜くことである. (これ以上どう解釈したらいいんだろう???) ところで, これだけなら周辺確率を求めても同じことのはずだ. \[P(y|x) = \sum_{x_s} P(x_s) P(y|x,x_s)\]

上のツイートで @tmaehara 氏が指摘しているのは \(x\)\(x_s\) と独立とは限らないということ. そのとき \(P(y|x)\) も間接的に \(x_s\) に依存していることになる. そうなるとポリコレに違反するので, \(Q(y|x)\)\(x_s\) と独立であるように学習させたい.

以下, 致命的な誤りを修正 (2018/10/14; 10:00)

独立であるとは \[P(x_s|x) \times P(y|x) = P(x_s,y|x)\] である. 実際には独立でないのでこれは成立しないが, 左辺の \(P(y|x)\) を予測器 \(Q(y|x)\) で置き換えて \[\begin{align*} Q(y|x) & = \frac{P(x_s,y|x)}{P(x_s|x)} \\ & = P(y|x_s,x) \frac{P(x_s,x)}{P(x)P(x_s|x)} \\ & = P(y|x_s,x). ~~~(\ast\ast) \end{align*}\] 独立性を仮定したのだから, 最初のようにこんな式になるはずである. 予測器 \(Q\) をこのように学習/予測しようと言っている.

これは次のようなモデルと解釈できそうだ. 2つのモデルを作る. 1つは \((x_s,x; y)\) というラベル付きデータから教師アリ学習を行って, 真の確率分布を学習する \(P(y|x_s,x)\). もう1つは \((x; y')\) というデータから教師アリ学習を行うもので, ここで \(y'\) は真のラベルではなく \(P(y|x_s,x)\) からサンプリングしてきたもの. 1つ目が右辺であって, 2つ目が左辺の \(Q\).

註意として, \(y\)\(x_s\) が依存してるわけでなければ一般には \(Q(y|x) \ne P(y|x)\) なので特徴量を抜いて学習して得たモデルとは一致しない.

これは, 次のようなものとは異なる結果を与えるのだろうか.

  1. 学習データに \(x_s\) を反転したダミーデータを混ぜて \((x_s,x;y)\) で学習したモデル
  2. 普通に \(P(y|x_s,x)\) を学習して, 予測時には, \(x_s\) に関して周辺確率をとって \(Q(y|x)= \sum_{x_s} P(x_s) P(y|x_s,x)\) とするモデル

ところで 「\(P(y|x_s,x)\) からサンプリング」と言った. \(x,y\) はパラメータとして必要なものが与えられるからいいが \(x_s\) はどこかから降ってくる必要があり, 従って \(P(x_s)\) が必要になってしまう. 私のカンでは真の \(P(x_s)\) の下でサンプリングした場合、これは結局周辺確率を求めることになると思う. また, その式への変形2ステップ前の式である \(\frac{P(x_s,y|x)}{P(x_s|x)}\) を用いれば, これは \(x\) さえ与えられれば計算されるはずの値であるので利用できる. そのためにはこの分母と分子をそれぞれをモデルとして学習する必要がある.