ホーム » 機械学習
「機械学習」カテゴリーアーカイブ
Contextual Bandit LinUCB LinTS
こんにちは。kiwamizamuraiです。
本日は文脈バンディットをやっていきます。行列とかでてきて、、、、計算が苦手な僕は、、、って感じなんですけどやってることは前回のUCBをTSと全く同じなので気楽にいきましょう。
アルゴリズムに入っていく前に具体例と一緒にこの文脈バンディット問題の全体像を掴みます。

たとえば上の図のような感じです。報酬は購入額(例えば正規分布)とかでもいいです。とりあえず問題設定はできました。
ポリシーに対するoffline評価などはまた次回やりたいと思います。今回は単純に次の二つのポリシーの実装のお話です。
LinUCBのLinearの部分はここからきています。LinUCBは報酬に対して上記の線形モデルを仮定します。また、ノイズとしてsub-Gaussianを乗せます。すると期待値は次の通りです。

このように行動aに対して確率分布を仮定し、さらにそのパラメータを逐次的に更新することでより柔軟なアームの選択が可能になります。ではそのパラメータの更新式を導出します。

上のように定義します。するとbiased-MFまたはRidgeの時と同じ導出より

次にUCBの部分についてです、

どうやら上は定理のようです。そこまで終えませんでした。すいません。とはいえこれがわかったので前回のUCBを思い出してUpper Boundを加算してアームを選べばよいだけです。

まあA_aは共分散行列とやらですね、inverseをとる点だけ注意していればおkです。では改めましてpresuso-codeは

いい感じですね。ちなみにハイブリットモデルというバージョンのものもあります。

ハイブリッドでは上のように報酬に対する線形モデルが少し変わります。これは前回実装したbiased-MFと全く同じ発想で、zはユーザーの特徴ベクトル、betaは全アームに共通する共有ベクトルと行った感じです。(勝手に命名しました。)presudo-codeも貼っておきます。

でわLinear Thompson Samplingも見ていきましょう

ガウス分布を仮定していますが、パラメータが複雑なので簡略化しましょう。なので上の疑似コードは一旦無視です。

とりあえずベイズを使って上を分解していくんですけど、ここでは事前分布としてsub-Gaussianを仮定します。

尤度は今回の場合だとガウス分布です。(最初の線形モデルの仮定より)

となると事後分布なんですけど、「ガウス x ガウス = ガウス」なのですが、、、、、問題は多次元なんですよね、、、、僕計算めちゃめちゃ嫌いなんですよね、、、、
って感じで、一応サンプリングできます。
モデルは簡単です、先ほどの線形モデルにロジスティックをかますだけです。 そうなんです、あるんです、ただロジスティックを使ってしまうと事後分布が解析的には得られないので勾配法とかになっちゃうところをラプラス近似でやろう!という発想です。僕はラプラス近似をあまり知らないのでそれも勉強しないといけませんが、とりあえず話を進めると事後分布は正規分布になるようです、さらに共分散行列は対角行列らしいです。presudo-codeは次のとおりです。
ぎょえええって感じですね、これを実装しなければいけないのか、、、、

LinUCBの結果

LinTSの結果

パラメータを変化させてRegretも確認

ちょっと疲れました。
ロジスティックはまた今度機会があればやります。
本日は文脈バンディットをやっていきます。行列とかでてきて、、、、計算が苦手な僕は、、、って感じなんですけどやってることは前回のUCBをTSと全く同じなので気楽にいきましょう。
Contextual Bandit
文脈バンディットとは以前のバンディット問題にユーザーの特徴量ベクトルを導入されたものです。というとは、前回は単純に時刻tにおいて行動価値関数のみでアームを選んでいましたが、文脈バンディットではユーザーの情報も加味してアームを選ぼうという考えです。

ポリシーに対するoffline評価などはまた次回やりたいと思います。今回は単純に次の二つのポリシーの実装のお話です。
LinUCB
まずLinUCBとは前回したUCBの文脈バンディットへの拡張アルゴリズムです。この時点で上界・分散的なイメージをもって欲しいです。また、Linearの略です。見ていきます。(添字a,tは時刻tにおける行動aに対する、という意味)


- https://research.miidas.jp/2020/01/レコメンデーション%E3%80%80biased-mfの実装/
- https://research.miidas.jp/2019/02/ねぇpython、正則化って何?ridge/






LinTS
これは前回のTSと全く同じで事後分布からパラメータシータをサンプリングする方法です。 ただ、論文中の事前分布とかは結構複雑で結果的に次のpresudo-codeになってます、



LogisticTS
ただ、前回実装したbanditって報酬はベルヌーイを仮定したじゃないです か、ということはcontextualにもあるはずですよね。モデルは簡単です、先ほどの線形モデルにロジスティックをかますだけです。 そうなんです、あるんです、ただロジスティックを使ってしまうと事後分布が解析的には得られないので勾配法とかになっちゃうところをラプラス近似でやろう!という発想です。僕はラプラス近似をあまり知らないのでそれも勉強しないといけませんが、とりあえず話を進めると事後分布は正規分布になるようです、さらに共分散行列は対角行列らしいです。presudo-codeは次のとおりです。

実装
実際の報酬のアームの分布は次の通りです。
References
- https://courses.cs.washington.edu/courses/cse599i/18wi/resources/lecture10/lecture10.pdf
- https://arxiv.org/pdf/1003.0146.pdf
- https://arxiv.org/pdf/1508.03326.pdf
- https://courses.cs.washington.edu/courses/cse599i/18wi/resources/lecture10/lecture10.pdf
- https://github.com/nicku33/demo
- http://proceedings.mlr.press/v28/agrawal13.pdf
- https://arxiv.org/pdf/1508.03326.pdf
Doubly Robust AIPTW
こんにちは。kiwamizamuraiです。
本日はダブルロバストについて勉強します。まぁ、IPWも厳密には理解できていないんですけどね。。。。僕の勉強スタイルはとにかく大きく進んで大きく戻っての繰り返しです。するとたまにぱってアイデアが生まれてわかる時があります。まあそんなことはおいておいて
ただ、Counterfactual Machine Learningにもダブルロバストが登場して用語などが非常にごっちゃになりやすいところだと思うのでそれについてもまとめます。

ちなみに割り当てがされた、つまり処置群における平均処置効果はATTといいます。

ATEについては各群間での効果量の差をとればいいじゃん、という単純な案がありましたが駄目でした。それはoutcomeである
の期待値が確率収束するものの条件付きの値だからです。つまり、上記のATEではないということです。そこでRubinのSUTVAの仮定のもとで因果効果を「無作為割り当てでないことによるバイアス」を消去しつつ測ろうというものでした。

そして登場するのが傾向スコアです。
に対してセミパラメトリックなアプローチができ、モデルの誤設定の可能性が低まります。また、
次元であった共変量が1次元になることでその影響も排除することができます。

この傾向スコアはSUTVAを満たしてくれるので等しい傾向スコアのもとで


が成り立ち、

がATEであることがわかります。少し補足をしておきます。
傾向スコアのモデルはロジスティックが一般的ですが、RFなどのアルゴリズムも使用可能です。ただ、その後たとえばマッチングを行うと仮定するとRFの高精度な分類により各分布が大きくことなる可能性があります。この場合、マッチングがうまく働かないかもしれません。なので個人的にはロジスティックがいいかなと思います。
真の傾向スコアが既知かつSUTVAが成り立つとする。
このとき、上のように定義することでそれぞれy1,y0の周辺平均の不偏推定量となります。さらに、我々が算出する傾向スコアに対してもタイスの法則よりこれらは一致推定量になります。(ちなみに分母を集合の濃度Nで代用する方法もありますがこちらのほうが精度は高いことがしられています。)次のセクションではこの意味について考えてみます。
これはつまり確率を割合として考えれば個人的にはわかる気がします。つまり、各群の集合の濃度を傾向スコアの逆数で補正しているということです。Inverse Weightingの値をPseudo-populationといいます。たとえばマッチングにおける問題点の一つは分布差でした。つまり。個体数が異なります。この個体数差をInverseで重み付けという形で加味できるということです。
これはyの真のモデルであればの話です。そしてもう一つはIPWを使った上記のものです。

こちらは傾向スコアを通したATE測定のためのモデルでした。ダブルロバストはこれらを融合します。つまり、yとeのモデルを融合するということです。DR(Doubly Robust)はこれらのモデルによって得られたe,y_1y_0を用いて算出されます。

計算式は上の通りです。シグマの前の1/nはIPWのセクションで述べた理由からです。デルタはATEのことです。非常にややこしい式ですね、、、少しずつみていきます。

この大括弧内の初項はIPTW、第二項はAugmentationと呼ばれます。とりあえずこの期待値をみてみましょう。

つまり、第二項がゼロでいてくれればE(Y1)が推定できます。ではどのような時がゼロになってくれるのか?ここでダブルロバストが生きます。
まず、傾向スコアが正しくて、回帰モデルが誤っている場合。つまり、
であり、傾向スコアが真であるとき、

とうまく第二項が消えてくれました。わーい。E(y0)も同様です。では逆の場合を考えましょう。つまり、傾向スコアが誤っていて、回帰モデルが正しい場合

であり、回帰モデルmは正しい時、同じように第二項は

となります。こういう意味でダブルロバストと言われています。ちなみにですがこの推定方法をAugmented IPTWといいます。AIPTWです。
次は反事実機械学習のダブルロバスト!
本日はダブルロバストについて勉強します。まぁ、IPWも厳密には理解できていないんですけどね。。。。僕の勉強スタイルはとにかく大きく進んで大きく戻っての繰り返しです。するとたまにぱってアイデアが生まれてわかる時があります。まあそんなことはおいておいて
Recap
この記事ではダブルロバストの理論について触れます。その前に前回のIPWの復習も行い、新しい知見が得られることにも個人的に期待します。ただ、Counterfactual Machine Learningにもダブルロバストが登場して用語などが非常にごっちゃになりやすいところだと思うのでそれについてもまとめます。
- Multi-Arm Bandit Algorithm
- Reinforcement Learning
- Counterfactual Machine Learning
- Causal Inference
因果推論の復習
僕たちが測りたい因果効果はATE(Average Treatment Effect)といいます。









傾向スコアのモデルはロジスティックが一般的ですが、RFなどのアルゴリズムも使用可能です。ただ、その後たとえばマッチングを行うと仮定するとRFの高精度な分類により各分布が大きくことなる可能性があります。この場合、マッチングがうまく働かないかもしれません。なので個人的にはロジスティックがいいかなと思います。
Inverse Propensity Score Weighting
最近傍マッチングと層別解析については触れません。ここではIPWの復習を個人的に行います。このアルゴリズムは無作為割り当ての問題を解決しつATEを算出することができます。では解説します。真の傾向スコアが既知かつSUTVAが成り立つとする。

Pseudo-population
eは傾向スコア、つまり確率です。この逆数を重みとする、というのはどういう意味があるのでしょうか?例えば0.1の逆数は10です。0.8の逆数は1.25です。これはつまり確率を割合として考えれば個人的にはわかる気がします。つまり、各群の集合の濃度を傾向スコアの逆数で補正しているということです。Inverse Weightingの値をPseudo-populationといいます。たとえばマッチングにおける問題点の一つは分布差でした。つまり。個体数が異なります。この個体数差をInverseで重み付けという形で加味できるということです。
Doubly Robust
では個人的に本題のダブルロバストについてです。これは二つのモデルを仮定してどちらか少なくともどちらか一方が正しければうまくいく、というものです。二つのモデルのうちの一つは単純な回帰によるATEの推定モデルです。




まず、傾向スコアが正しくて、回帰モデルが誤っている場合。つまり、




実装
データは前回と同じものを使いました。IPTWとAIPTWを比較するとわずかですが今回はIPTWが勝ちました。また、分母に集合濃度Nを用いると大きく精度が悪化しました。References
- https://www4.stat.ncsu.edu/~davidian/double.pdf
- https://hoshinoseminar.com/pdf/2018_SUUMO.pdf
- https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3070495/
- https://youtu.be/fyPtYDzI2L8
- https://www.amazon.co.jp/%E8%AA%BF%E6%9F%BB%E8%A6%B3%E5%AF%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E7%B5%B1%E8%A8%88%E7%A7%91%E5%AD%A6%E2%80%95%E5%9B%A0%E6%9E%9C%E6%8E%A8%E8%AB%96%E3%83%BB%E9%81%B8%E6%8A%9E%E3%83%90%E3%82%A4%E3%82%A2%E3%82%B9%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E8%9E%8D%E5%90%88-%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E7%A2%BA%E7%8E%87%E3%81%A8%E6%83%85%E5%A0%B1%E3%81%AE%E7%A7%91%E5%AD%A6-%E6%98%9F%E9%87%8E-%E5%B4%87%E5%AE%8F/dp/4000069721
Counterfactual Machine Learning 入門
こんにちは。kzです。
本日は反事実機械学習に軽く入門してみようと思います。Causal InferenceやCounterfactual MLは個人的にはまだ若い分野だと思っていて非常に今後が楽しみです。ちなみに共分散構造分析(SEM)も気になります。
が報酬ですね。ちなみに
はContextとありますがこれは文脈バンディットの文脈にあたります。Contextual Banditとは各ユーザーのデータ
をその特徴ベクトルし、バンディット問題を達成するアルゴリズムです。この特徴ベクトルをcontextといいます。
広告を例にとりますとこんな感じです。
このデータセット
より以下を目標とします。いわばこれが反事実機械学習の考え方の核です。(ちなみにデータのことをポリシー
によるログデータともいいます。)

まずonlineとofflineについてですがこれらは逐次学習と一括学習をそれぞれ意味します。新たなアルゴリズムによるsystemをofflineで評価することが目的です。また、より良いsystemを学習させることも目標になります。(systemはpolicyのこと)画像を通してみてみます。

ポリシーの評価についてもっとも単純なアイデアはA/Bテストですね。画像上のことです。これをcounterfactorを用いてオフラインで行うことが目標です。画像下のことです。
そこで重要なのが評価指標です。CTRなどは前回解説しました。他にも次のようなものがあります。
特にインターリービングは僕は今回初めて知ったんですがA/Bテストより大いに効果を発揮してくれるものだそうです。Netflixさんも使っているらしいです。また今度詳しくみてみます。
を評価する方法の一つ目がReward Predictorです。これは報酬関数を学習により得ようとする方針です。報酬関数がわかれば新たなポリシーに対してシミュレーションができます。

ただ、この方法だと
がバイアスに影響を受けやすいようです。考えられるバイアスとしてはモデルバイアスとセレクションバイアスがあります。モデルバイアスとは特徴量とモデルに依存します。セレクションバイアスはポリシーによる過学習(過表現)です。

モデルバイアスとは報酬関数の複雑性に起因します。この関数は非線形であったり、または考え付かないほど複雑な構造を持っているかもしれません。そのような関数を学習することは難しいです。セレクションバイアスとはポリシーによる行動選択が一部に偏ってしまう現象をいいます。これはポリシーによる各行動の分布差から生じます。

次の例を考えます。

つまり3種類のアクションに対して、各報酬はバイナリです。まずは単純な評価を行ってみます。

本当にこれでいいのでしょうか?そこで反事実という概念を導入します。
選択していないアクションはCounterfactorと呼ばれます。従来のポリシーの評価では選択したアクションのみが評価対象でした、ここでは反事実つまり、選択されなかったアクションも評価にいれます。ではどうやって導入して、さらには指標として生かすのかみていきます。
このように行動に対するIPSは反事実を含めて算出されます。単純計算(3/4)から得られるよりも実質的な効果を表しているんじゃないかと個人的に考えています。とはいえこのIPSを用いてポリシーの評価方法を考えていきます。

こう定義することで以下が得られます。計算

んー、正直僕はまだちゃんと理解できていません。すいません。ただわかったことを改めてまとめますと反事実モデルとIPSを用いることによって新たなアルゴリズム(ポリシー)のシミュレーションができると言うことです。
最後にその他の指標について軽く触れておきます。少しでも理解しておきたい、、、、

本日は反事実機械学習に軽く入門してみようと思います。Causal InferenceやCounterfactual MLは個人的にはまだ若い分野だと思っていて非常に今後が楽しみです。ちなみに共分散構造分析(SEM)も気になります。
表記とか
反事実機械学習とは「オフライン環境下での新しいポリシーの学習・評価」のことです。まず記事中の表記は下の通りです。



広告を例にとりますとこんな感じです。





そこで重要なのが評価指標です。CTRなどは前回解説しました。他にも次のようなものがあります。

Reward Prediction
system



Counterfactual model
そこで登場する手法が反事実モデルです。報酬関数を高い精度で得るためにまずはポリシーの分布を近づけてバイアスを消そうというアイデアです。


選択していないアクションはCounterfactorと呼ばれます。従来のポリシーの評価では選択したアクションのみが評価対象でした、ここでは反事実つまり、選択されなかったアクションも評価にいれます。ではどうやって導入して、さらには指標として生かすのかみていきます。
Inverse Propensity Score Estimator
IPSと呼ばれる指標を紹介します。
IPS Utility Estimator
このIPSを用いて次のように改めて定義します。先ほどの指示関数のところが新しいポリシーによる確率分布に変わりました。分母は変わらず傾向スコアです。

最後にその他の指標について軽く触れておきます。少しでも理解しておきたい、、、、
Self-Normalized Estimator
どうやらIPSにおける定数問題を解決した指標らしい
Doubly Robust Estimator
二つの手法のいいとこ取りをした指標らしい
感想
非常に難しいです。新しい知識が多く得られたのでその点は嬉しいですが自分の実力不足にかなり萎えています。もう一度勉強しなおそうと思います。でわReferences
傾向スコアとは
こんにちは。kzです。
今回はマーケティング分野で有名な傾向スコアについてやっていきます。ちなみにですけど巷では次の本が流行っているらしいです。
とりあえずこの記事のフォーカスは「因果」です。因果を図ります。まずは簡単に用語の説明から。
今からする話は上の構造を元に成り立っています。例えばサイゼリアのクーポンの例を用いて解説します。
実際今回の例で用いるデータを単なる集合間の引き算で算出するとその値は真の値(設定したもの)と異なりました。なのでもっといい因果効果の測定方法についてみていきましょう。
図からわかるようにデータを
さんで考えた時にTreatmentの効果があるかどうかは物理的に測定できません。なぜなら「仮に〜だったら」のデータは得られないからです。
先ほどの例も含めて、因果効果を図るのはやはり非常に難題です。
ただ、解決策の一つとしては各集合間に無作為な割り当てを行えばいいかもしれませんが、実はそれは現実的ではありません。なぜなら例えば治療薬を例にとります。患者さんのあらゆる共変量を考慮してTreatmentの割り当てを行うため、どうしてもSelection biasが起きてしまいます。そこで使われる手法が傾向スコアを用いた層別化(これもマッチング)やマッチングです。
です。つまり共変量(
)を固定した場合、Outcome(
)は割り当て(
)と独立である。ことが重要な仮定になります。 もう一度具体例で噛み砕きます。
しかし、先ほどの治療を例にこの仮定を考え直してみます。共変量としてシンプルに年齢を考えます。この時、Treatmentここでは薬Aの割り当ては本当に年齢のみによって決まるでしょうか?また、共変量は現実問題では観測されない可能性も考えると共変量が等しいという状況に疑問が抱かれます。なので「共変量が等しいデータを探し方」について次は探っていきましょう。
そしてRosenbaumとRubinは傾向スコア
を次のように定義しました。

そして彼らはいくつかの定理を証明し、最終的に次の主張を得ました。
としてidentity functionをとることで
が傾向スコアであることがわかります。これらを用いて傾向スコアマッチングや層別解析が誕生しました。SUTVAの仮定を用いると

また、

が得られます。なお、傾向スコア
についてはロジスティックモデルが一般的のようですが、決定木などでもいいです。
ということで「共変量が等しいデータを探し方」についてですが、「傾向スコアが等しいデータ」で代用できることがわかりました。あとは分析手法を見て実装するのみです。
傾向スコアにはロジスティックなどを持ちいると仮定するので、
になります。
層別に分けてそれぞれの層においてOutcomeの平均の差で因果効果を算出します。ここで
についてですが通常はサブクラスのサイズが等しくなるように分割するらしいです。個人的には
を細分化すればするほど精度があがるんじゃないかなと思っています。
下の図のようなマッチングが得られたとします。
キャリパーマッチングでは三つ目のマッチングにおいて傾向スコアの差がCaliperを超えている(
)のでマッチング不成立となります。成立したデータを対象に層別の時と同様に平均の差で因果効果を算出します。
とはいえ実はマッチングはSUTVAの仮定などが原因で良くないらしいです。

具体的には上のようにすることでバイアスを修正しつつ、ルービンの難題であった『〜だったら』の時の不偏推定量となることが次のリンクよりわかります。
まだいろいろありますが、内容が難しく、理解できてないのでいったんここで切ります。

20代、30代の男性にバイアスを載せました。詳しくはコードを見て下さい。結果としてはIPWが最もいい精度でした。
アップリフトモデリングやります。でわ
今回はマーケティング分野で有名な傾向スコアについてやっていきます。ちなみにですけど巷では次の本が流行っているらしいです。
- https://www.amazon.co.jp/効果検証入門〜正しい比較のための因果推論-計量経済学の基礎-安井-翔太/dp/4297111179
- https://qiita.com/nekoumei/items/648726e89d05cba6f432
とりあえずこの記事のフォーカスは「因果」です。因果を図ります。まずは簡単に用語の説明から。

- Treatment is クーポンを貰った人たちの集合
- Control is 貰ってない人たちの集合
- Confounder is 年収、外食の頻度など(交絡因子/共変量)
is 全データの集合
is サイゼリアに行ったかどうか(購入額もおk)
- Selection Bias is トリートメントとコントロール集合間の分布のズレ(共変量シフト的なイメージ)
実際今回の例で用いるデータを単なる集合間の引き算で算出するとその値は真の値(設定したもの)と異なりました。なのでもっといい因果効果の測定方法についてみていきましょう。
Rubin Model
因果推論で有名なのはこの人、Rubinさんです。因果効果の最もベーシックな考え方は次の画像です。

先ほどの例も含めて、因果効果を図るのはやはり非常に難題です。
ただ、解決策の一つとしては各集合間に無作為な割り当てを行えばいいかもしれませんが、実はそれは現実的ではありません。なぜなら例えば治療薬を例にとります。患者さんのあらゆる共変量を考慮してTreatmentの割り当てを行うため、どうしてもSelection biasが起きてしまいます。そこで使われる手法が傾向スコアを用いた層別化(これもマッチング)やマッチングです。
SUTVA
Stable Unit-Treatment-Value Assumptionの略です。RubinのモデルにはSUTVAという重要な仮定があります。The potential outcomes for any unit do not vary with the treatments assigned to other units, and, for each unit, there are no different forms or versions of each treatment level, which lead to different potential outcomes.http://utstat.toronto.edu/~nathan/teaching/STA305/classnotes/week4/sta305week4classnotes.html#stable-unit-treatment-value-assumption-sutvaつまり、任意のOutcomeは他の個体に割り当てられたTreatmentに干渉しない。例を出すと、Aさんがサイゼリアに行った結果、サイゼリアがめちゃめちゃ人気になってしまってみんなクーポンを欲しがるのはダメ。という感じですかね?これを数式で表すと




- 共変量(年齢、性別など)のみがクーポンの配布(割り当て)を決定する
- 共変量が等しければ割り当ては同確率
しかし、先ほどの治療を例にこの仮定を考え直してみます。共変量としてシンプルに年齢を考えます。この時、Treatmentここでは薬Aの割り当ては本当に年齢のみによって決まるでしょうか?また、共変量は現実問題では観測されない可能性も考えると共変量が等しいという状況に疑問が抱かれます。なので「共変量が等しいデータを探し方」について次は探っていきましょう。
Propensity Score
Rubinはまず次の関数をバランシングスコアと定義しました。


- Propensity Score is Balancing Score
- 任意のBalancing ScoreはPropensity Score、if and only if、
- Balancing ScoreはSUTVAを満たす





ということで「共変量が等しいデータを探し方」についてですが、「傾向スコアが等しいデータ」で代用できることがわかりました。あとは分析手法を見て実装するのみです。
層別解析
傾向スコア分析はいくつか手法があります。ここではまず層別解析についてです。これは単純で、傾向スコアをブロック分割します。
![Rendered by QuickLaTeX.com e(x) \in [0,1]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-ae941a50825536228f728ea852209bd4_l3.png)
層別に分けてそれぞれの層においてOutcomeの平均の差で因果効果を算出します。ここで


Matching
2つ目の手法はマッチングです。といっても層別も層別マッチングなんですけど、、、、まあ置いておいて、、TreatmentとControlの各集合の要素をPropensity Scoreの類似度でマッチングします。この時、最近傍やマハラノビス距離を用いた手法などいろいろありますが、ここではキャリパーマッチングを実装します。これはマッチングに閾値を設ける手法です。下の図のようなマッチングが得られたとします。


とはいえ実はマッチングはSUTVAの仮定などが原因で良くないらしいです。
傾向スコアマッチングが近似しようとしているのは完全なランダム化である.これは共変量を1次元の指標にして,共変量とは独立にトリートメントの効果を推定しようとしていることからも明らかである(本文中に書かれているが1対1マッチングにおいて同じ傾向スコアのマッチング相手がいたらランダムにどちらかを選ぶ).それに対して,マハラノビス距離やCEMなど他の方法は完全にブロック(層化)したうえでのランダム化に近似しようとしている(各共変量の距離を計算するので).したがって,傾向スコアマッチングよりもマハラノビス距離マッチングやCEMの方が望ましいということである.というわけで,Kingらはマッチングをする際にはマハラノビス距離やCEMを利用することを薦めている.ただし,傾向スコアが数式的に問題があるというわけでなく,またマッチング以外に傾向スコアを用いることについては今回の指摘はあてはまらないと繰り返している. http://analyticalsociology.hatenadiary.com/entry/2017/09/11/121102そこで登場するIPWという手法も見てみたいと思います。
IPW
冒頭でも申したとおり、単純に集合間で引き算をするとやはり共変量シフトによる選択バイアスが大きく現れます。そこでこのバイアスの修正を試みる手法がIPWになります。
まだいろいろありますが、内容が難しく、理解できてないのでいったんここで切ります。
実装
使うデータはこんな感じです。リンク先のデータを使わせていただきました。そこではIPWのみの実装になっていたので今回紹介した、層別とキャリパーで比較してみようと思います。
References
- http://www.stat.cmu.edu/~ryantibs/journalclub/propensity.pdf
- https://qiita.com/nekoumei/items/648726e89d05cba6f432
- https://www.slideshare.net/takehikoihayashi/propensity-score-analysis-seminar-japanese
- https://www.slideshare.net/okumurayasuyuki/ss-43780294
- http://rcommanderdeigakutoukeikaiseki.com/propensity_score.html
- https://blog.datarobot.com/jp/causality_analysis_machine_learning2
- https://pira-nino.hatenablog.com/entry/casual_inference
- https://qiita.com/deaikei/items/df3626486986566cb65c
事前分布に深入りする
こんにちは。kzです。
本日はprior distributionについて深入りしてみようと思います。事前分布って不思議ですよね。個人的には共役事前分布って誰が見つけたのかなー?と永遠思ってます。事前分布のスキルを高めるということはベイズの力を高めるということだと思います。なのでやっていきましょう。
と
が同じ分布になる時、そのpriorをconjugate priorといいます。共役事前分布です。しかし、実世界においてconjugate priorで十分か、といいますとそうではありません。なので現状はMCMCを使った次のようなアルゴリズムを使って数値計算するらしいです。

とはいえ共役事前分布はもう皆さんご存知で、飽きていると思うので少し特殊なPriorを見ていこうと思います。

たとえば、

ここではJeffry’s Priorについて深入りしようと思います。
のpriorが近似的にnon informative priorとなり(次で話します)、そのpriorをJeffreyの事前分布といいます。

見ての通り、フィッシャー情報量のルートになっています。また、このpriorはリパラメタライゼーションに対して不変です。これについては下で述べます。
とはいえ、これだけだとなにを意味してしているかよくわかりません。なので簡単な例、二項分布でJeffrey priorを求めてみます。
尤度は上のものを考えます。Jeffrey priorを
と表すことにします。

よってフィッシャー情報量は

したがって

とこの尤度に対するJeffrey priorを求めることができました。しかもよく見るとこれは
ですね。ついてでに分布も見ておきます。

ちなみにリパラメタライゼーションについては全単射な関数
を考えます。このとき
という変数変換にたいして
は次の二通りの方法で得られます。

まずは変数変換後の尤度を用いて計算する方法。そして

ヤコビを使う方法です。たとえば

というリパラメタライゼーションを考える例は参考文献にあるので気になる方はどうぞ。
そして二つ目、こちらが各だと思っています。Jeffreyを用いることでそのposteriorとのKLを最大化させることができます(データが十分多い時)。これによってposteriorはpriorには極力影響されない一方で、最大限にデータの影響のみを受けた分布になります。つまり、データをはっきりと表現していることになります。
実はこの話はBernardo reference priorというものと関係があるようです。そのパラメータ
が一変数という条件がJeffrey Priorと一致するようです。
こういう意味でJeffrey priorはuninformativeと言われているようです。ついでにパラメータをいじった事後分布の結果を見てみましょう。
5種類の事前分布に対する事後分布の変化の図です。Jeffrey Priorは右から二つ目です。データの情報を最大限に説明する分布と言いましたが、まさにそうなんじゃないかなと思いました。まず注目すべきは
です。一回の試行で裏の出た時ですが、パラメータはグイっと左によっています。右の一様分布ではそうなりません。
次に注目したのが
です。
の同じ条件と比べると事後分布が綺麗に半円を描いています。関数が滑らかであることはいろいろと都合がいいと思うのでこれもJeffreyの良さかなと思いました。
お気づきかと思いますが、
と比べるとあまり差がないように思います。僕もそう思いもう少し調べてみました。

見ての通り、事後分布にそれほど大きな差はないと思いました。よって僕の中の結論としてはデータ数が非常に少ない場合においてJeffrey Priorは力を発揮するのでは?です。
話が長くなりましたが今回個人的には学ぶことが多かったです。情報幾何に少し近づけた気がします。でわ
本日はprior distributionについて深入りしてみようと思います。事前分布って不思議ですよね。個人的には共役事前分布って誰が見つけたのかなー?と永遠思ってます。事前分布のスキルを高めるということはベイズの力を高めるということだと思います。なのでやっていきましょう。
Conjugate Prior
欲しいものはいつもposterior distributionです。


- Stan
- WinBUGS(Bayesian inference Using Gibbs Sampling)
- OpenBUGS(Bayesian inference Using Gibbs Sampling)
- JAGS(Just Another Gibbs Sampler)
- PyMC(Hamiltonian Monte Carlo)
- INLA(Integrated nested Laplace approximation)

Improper Prior
事前分布が以下を満たす時、improper priorと言います。
Uninformative Prior
とはいえパラメータの事前分布なんてわからないのにどうすればいいんだ、、、という時に使われるのが無情報事前分布です。non-informative priorともいいます。情報がない、以外にも次の理由で使われたりします。- priorの事前情報がない
- posteriorに変な影響を与えたくない
- データのみの情報でposteriorを決定したい

Jeffrey’s Prior
以下を満たす時、パラメータ

とはいえ、これだけだとなにを意味してしているかよくわかりません。なので簡単な例、二項分布でJeffrey priorを求めてみます。













Jeffrey’s Priorの意味
さて、これを使う意味ですが個人的には2つあると思っています。- リパラメタライゼーションによる新しいモデル構築が容易な点
- posteriorとのKLを最大ができる点
そして二つ目、こちらが各だと思っています。Jeffreyを用いることでそのposteriorとのKLを最大化させることができます(データが十分多い時)。これによってposteriorはpriorには極力影響されない一方で、最大限にデータの影響のみを受けた分布になります。つまり、データをはっきりと表現していることになります。


こういう意味でJeffrey priorはuninformativeと言われているようです。ついでにパラメータをいじった事後分布の結果を見てみましょう。


次に注目したのが


お気づきかと思いますが、


僕的まとめ
この記事でreference priorとjeffrey priorの二つの新しい事前分布を紹介しましたが、共役に加えて最終的なベストなものは何なのか、というのが気になる点です。パラメータについて考慮するものがなければ共役事前分布またはreference priorがいいなと思いました。ここで、考慮するものとはたとえばデータのタイプであったり、物理的な何かであったり詳しいことは僕にはわかりませんが事前情報というよりは制約的な形で考慮するものなんだと思います。たとえば、画像処理における事前分布だと以下のようなものがあります。 そしてこのJeffrey Priorですが改めてまとめますと、これベルナドのrerefence priorの単変量バージョンに相当します。そしてこれはフィッシャー情報量から導出されます。これはつまり今あるデータから事前分布を構築するということを意味します。したがってよく使われる直感、inductive biasというべきでしょうか、の影響を極限まで希薄した事前分布を意味します。また、無情報事前分布と言われている理由はデータが十分に大きい場合、事後分布とのKLを最大化させるためです。この証明は参考文献にあります。最終的には場合分けで解が得られていました。話が長くなりましたが今回個人的には学ぶことが多かったです。情報幾何に少し近づけた気がします。でわ
References
- https://stats.stackexchange.com/questions/58564/help-me-understand-bayesian-prior-and-posterior-distributions
- https://stats.stackexchange.com/questions/78606/how-to-choose-prior-in-bayesian-parameter-estimation
- http://www.stats.org.uk/priors/noninformative/YangBerger1998.pdf
- https://stats.stackexchange.com/questions/87321/does-the-bayesian-posterior-need-to-be-a-proper-distribution
- https://www.johndcook.com/CompendiumOfConjugatePriors.pdf
- https://stats.stackexchange.com/questions/283703/difference-between-non-informative-and-improper-priors
- https://www.slideshare.net/hoxo_m/ss-59418886
- https://zhenkewu.com/assets/pdfs/slides/teaching/2016/biostat830/lecture_notes/Lecture14.pdf
- http://www.stat.cmu.edu/~larry/=sml/Bayes.pdf
- https://stats.stackexchange.com/questions/297901/choosing-between-uninformative-beta-priors/
- https://www4.stat.ncsu.edu/~wilson/bayes/noninformative_priors3.pdf
- https://people.eecs.berkeley.edu/~jordan/courses/260-spring10/lectures/lecture7.pdf
- https://stats.stackexchange.com/questions/7519/why-are-jeffreys-priors-considered-noninformative/39098
- https://www2.stat.duke.edu/courses/Spring13/sta732.01/priors.pdf
- https://www.zhihu.com/question/67846877
Variational Bayes 入門
こんにちは。kzです。
本日は変分ベイズやります。ちなみに呼び方はいくつかありまして、変文ベイズ、変分推論、Variational Approximation(変分近似)など。
例えば点推定である最尤法はスコア関数(対数尤度)を微分して解を求めますよね。変分法はこれを拡張した概念です。
つまり、関数の関数の微分が変分です。
変分とは汎関数の微分です。詳しくは調べていただくとすぐわかりますが例えば最短曲線など求めるときはオイラーラグランジュ方程式と変分法を用いたりします。
を求める手法の一つです。MCMCと同じ感じ?と思った方もおられると思います。はい、MCMCも事後分布を求める手法です。
ではもういきなりですがVBとMCMCどっちがいいの?という疑問が生まれます。
ずばり、一番の違いは速度です。一般的にはVBの方が早く、計算の多いMCMCは遅いです。データ
が多いときはVBの方がいいかもしれません。ただ上にあるようにVBは漸近的に分布を保証するわけではありません。
まずは変分下限の登場です。EMアルゴリズムの時と似てます。
は潜在変数(パラメータ)です。
は前回登場したShannon entropyですね。最後の式が変分下限です、
と置くことにします。

せっかくなのでKLダイバージェンスとの関係も見てみます。

目的は事後分布
を近似することです。なので
でKL最小化を目指します。式の最後で出てきた
は先程と同じ。つまり、KLの最小化は変分下限の最大化に等しいことがわかりました。
しかもよくみてください、KLって汎関数ですよね。
に与える次の仮定です。

つまり、各潜在変数が独立であると仮定します。すると変分下限は次のように書き直せます。

計算を整理するために次を用います。対象の変数以外での期待値です。

これを用いて先程の式をさらに展開していきます。

に注目していただければわかりますが、くくりあげています。第二項は
を除く
の項です。ラグランジュを用いて次の目的関数を得ます。

ここで変分法を使います。具体的には
に関してEuler-Lagrangeを用います。

ここで、
は正規化定数と呼ばれるものです。以上からわかるように
の最適化には他のすべての
が必要になるのでイテラティブな更新になります。

変分ベイズを用いてパラメーラ
の分布を逐次的に求めます。まず以下の尤度をばらしておきます。

また平均場近似より次を仮定します。

では先程の計算を用いて
を計算します。

に関して平方完成して以下を得ます。

同様の作業を次は
について行います。

ガンマ分布に注意して

以上より

がわかりました。これより各期待値も簡単にもとまります。

したがって

を用いて更新すればいいことがわかります。
もう一つの例として混合ガウス分布をVBを使ったEMで求める例がありますが、非常に難しいので詳しくは以下をご覧ください。
本日は変分ベイズやります。ちなみに呼び方はいくつかありまして、変文ベイズ、変分推論、Variational Approximation(変分近似)など。
変分とは?
そもそも変分ってなに!って感じですよね。実はこれ微分方程式とか汎関数とかが関わってます。例えば点推定である最尤法はスコア関数(対数尤度)を微分して解を求めますよね。変分法はこれを拡張した概念です。
つまり、関数の関数の微分が変分です。

変分ベイズとは?
事後分布
ではもういきなりですがVBとMCMCどっちがいいの?という疑問が生まれます。


まずは変分下限の登場です。EMアルゴリズムの時と似てます。


![Rendered by QuickLaTeX.com H[z] = - \mathbb{E}_q[\log q(z)]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-26d60bf4868e8cf2a42ffa7fea9c03fc_l3.png)






しかもよくみてください、KLって汎関数ですよね。
Mean-Field Approximation
変分ベイズでは平均場近似という重要なポイントがあります。これは













一変数ガウスの例
次のような例を考えます。













- https://github.com/vwrs/variational-gaussian-mixture/blob/master/variationalgaussianmixture.ipynb
- https://tips-memo.com/python-vb-gmm
応用
難しすぎて実装できませんでしたが変分ベイズを使った応用はたとえば自然言語処理におけるLDAがあります。とても難しい、、、、でわReferences
- https://stats.stackexchange.com/questions/271844/variational-inference-versus-mcmc-when-to-choose-one-over-the-other
- https://arxiv.org/pdf/1601.00670.pdf
- https://kaybrodersen.github.io/talks/Brodersen_2013_03_22.pdf
- https://qiita.com/kento1109/items/99a6bcbf18c1119d127c
- https://xyang35.github.io/2017/04/14/variational-lower-bound/
- https://www.colorado.edu/ASEN/asen5227_offline/slides/292-334.pdf
- http://www.math.kobe-u.ac.jp/HOME/higuchi/h18kogi/sect4.pdf
- https://www.iist.ac.in/sites/default/files/people/COVMain.pdf
- http://bjlkeng.github.io/posts/variational-bayes-and-the-mean-field-approximation/
- https://www.slideshare.net/takao-y/ss-28872465
- https://en.wikipedia.org/wiki/Normal_distribution
- https://openbook4.me/projects/261/sections/1648
- https://www.slideshare.net/takao-y/ss-28872465
- https://www.slideshare.net/tsubosaka/prml-10-1
バンディットアルゴリズムの続き
こんにちは。kzです。
今回は前回のバンディットアルゴリズムの続きです。UCBと簡単なトンプソンサンプリングの実装を行います。前回実装した
-GreedyとBoltzmann Softmaxとの最終的な比較も行います。

Hoeffdingの不等式です。これはUCBの導出に使います。証明にはマルコフの不等式とチェビシェフの不等式を使います。まあそれは置いておいて、この不等式の意味を考えます。
確率変数
の平均とその期待値の誤差
の確率を
で測っています。これがまさに後述するUCBの核の考え方です。こちら側で
そ操作することで、期待値のブレの許容範囲をある確率の範囲で操作することができます。
これは直感的にもいいですよね。何度も引いたことのあるガチャガチャよりも数回しか引いたことのないガチャガチャの方が可能性を感じますよね。そういうことです。
ただし、


見ての通り、分母
が小さいほど大きい値が加算されます。イメージは次の感じです。

お気づきかもしれませんが逆数と言いつつ、ルートを付けてます。気になりますよね。ということで証明します。先程のHoeffdingの不等式を用います。
Hoeffdingの不等式において
を
として次が得られます。(
)。報酬はベルヌーイを仮定しました。

を一つとり固定します。私たちの問題に書き換えるためNotationを定義します。

ここで上限に対する閾値をこちらで設定します。

これを
に関して解けば終了です

おや?よくみると2の位置が異なります。それは
をこちらで設定する必要があるからです。confidence levelと言われます。
UCBはこのconfidence levelをパラメータとして持ちます。もっとも一般的な値は次のようになります。
そしてこの時のアルゴリズムをUCB1いいます。代入して計算すると

先程の結果になりました。では実装してみます。

実はよくない結果です。前回のEGとBSと比べるとわかります。この記事の最後に全アルゴリズムの比較を行いますのでとりあえずは進めていきます。
本当にハードなんですが、Gaussianの場合の詳しい計算は この方がやってくれています。
とある
が他のどの
よりも価値が高い、という事後確率(
)を計算して
を選ぶアルゴリズムです。
は時刻tまでのアームのhistoryです。
事後確率は積分を用いて次のように計算されます。
ここで
は
の報酬履歴です。左の積分が
になる確率で右の積分がその他のアームで
となる確率です。積分が解析的ではないので、サンプリングします。困ったときはサンプリングです。結果アルゴリズムは次のように単純化できます。

実装では一様分布を仮定するのでパラメータは共に1とします。
Best Arm RateをUCBと比較してみます。
全アルゴリズムでBARとCumulative Rewardsも比較してみます。

Thompson Samplingが圧勝でした。
の事前分布として導入します。(事前分布
を条件付き確率で分解する)scaled inverse chi-squared分布といいます。

Gaussian Thompson Samplingすごく難しいですね、パラメータが多すぎてなにがなんだが、、、
次回はContextual BanditとIPSについてまとめたいと思います。でわ
今回は前回のバンディットアルゴリズムの続きです。UCBと簡単なトンプソンサンプリングの実装を行います。前回実装した

Keywords
この記事のキーワードを先にリストアップします。-Greedy
- Boltzmann Softmax
- Hoeffding’s inequality
- UCB
- Bayesian UCB
- Thompson Sampling
- scaled inverse chi-squared Distribution
Hoeffding’s inequality

確率変数




UCB
UCBはアームの期待値に加えてその上限(Upper Confidence Bound)、いわばアームの可能性(分散)、を考慮したアルゴリズムです。どうやって上限を加味するかといいますと、対象のアームを選択した回数の逆数で重み付けします。こうすることで多数引いたアームにはより小さい上限を、少数引いたアームにはより大きい上限を付与することができます。これは直感的にもいいですよね。何度も引いたことのあるガチャガチャよりも数回しか引いたことのないガチャガチャの方が可能性を感じますよね。そういうことです。





Hoeffdingの不等式において
![Rendered by QuickLaTeX.com X_i \in [a,b]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-e466ddd4e42358957f329ef15587b4d0_l3.png)
![Rendered by QuickLaTeX.com [0,1]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-25b6d943ab489c05a3dbd5ea29087a48_l3.png)



報酬(確率変数)
を真の行動価値
を経験上の行動価値
をupper confidence bound,





UCBはこのconfidence levelをパラメータとして持ちます。もっとも一般的な値は次のようになります。


Bayesian UCB
UCBにベイズを応用したアルゴリズムのことです。今までは報酬の分布にベルヌーイを仮定しましたが、他にもガウス分布の仮定があります。それぞれ次のように呼びます- Bernoulli – Thompson Sampling
- Gaussian – Thompson Sampling
本当にハードなんですが、Gaussianの場合の詳しい計算は この方がやってくれています。
Thompson Sampling
定義は少し複雑ですが、実装の際はサンプリングを行うので思ったよりはシンプルです。





事後確率は積分を用いて次のように計算されます。





- 各アーム
の報酬の期待値に関する事後分布
から乱数
を生成

Best Arm RateをUCBと比較してみます。

scaled inverse chi-squared Distribution
もしGaussianでThompson Samplingを実装するならばこちらを


Code
次回はContextual BanditとIPSについてまとめたいと思います。でわ
References
- https://youtu.be/xN11-epRuSU
- https://youtu.be/TIlDzLZPyhY
- http://snap.stanford.edu/class/cs246-2013/slides/18-bandits.pdf
- https://lilianweng.github.io/lil-log/2018/01/23/the-multi-armed-bandit-problem-and-its-solutions.html
- https://courses.cs.washington.edu/courses/cse599i/18wi/resources/lecture10/lecture10.pdf
- https://hagino3000.blogspot.com/2016/12/linear-bandit.html
- https://www.slideshare.net/tsubosaka/introduction-contexual-bandit
- http://ibisml.org/archive/ibis2014/ibis2014_bandit.pdf
- http://seetheworld1992.hatenablog.com/entry/2017/06/04/150253
- https://to-kei.net/bayes/bayes-normal-distribution/
強化学習 Bandit Algorithm で入門する
こんにちは。kzです。
本日は強化学習に入門します。けどMDPとかはやらないので安心してください。簡単だと思います。ビジネスにおいてもバンディット問題は多くあるということなのでためになるかなーと思います。
ラーメンが好きで毎回行きつけのラーメン屋さんにいくんですよね。もちろん、毎回いっているということはそこが美味しいって経験からわかっているので通っているんです。これがExploitationです。
しかし、同じラーメン屋さんにばかり通っていると仮に近くにもっと美味しいラーメン屋さんやつけ麺屋さんがあってもその存在を知り得ないですよね。なのでたまには自分の知らないお店に期待していきたくなりますよね。僕も3回に1回くらいの割合で新しいお店を体験します。これがExplorationです。
ただ、新しいお店だと「美味しい!」時と「普通かなー」な時と「んー」な時がありますよね。これらを報酬といいます。もちろん報酬の高い、つまり「美味しい!」を選択できるようなExplorationができれば理想ですね。
これらを考慮すると、ベストな選択としては行きつけでExploitationしつつも期待度の高いお店にExplorationしたいですよね。

期間
内で探索・活用をベストな比率で行って最終的に最高の報酬(満足度)を得たい!がBandit問題です。
を考えません。厳密には
)
もっともポピュラーな例は広告の最適化とかですかね。薬の投与などもたまにExampleで見られますがここでは広告を例にして話を進めます。なのでいったんBanditからは離れてこれについてちょっと深入りしていきます。
そのなかでもReal time bidding(RTB)がキーワードになります。それを説明する前に次の用語を簡単に
つまり、DSPが「この広告貼ってー」とお願いし、SSPが「ええよー」と返します。しかし、一対一関係ではないので「俺の広告も貼ってくれー」といろんな人がお願いします。(SSPも複数あります。サイトA、サイトB的な感じです)
そんなマーケットのことをRTBといいます。複数のDSPが各々資金を持ってSSPに交渉し、最も価格の高いDSPをSSPが決定します。ただ値段の妥当性がわからないですよね。これも機械学習で最適化するそうです。そこで次の用語が登場します。
Bayesian A/Bテストとは、A/Bテストをベイズでやろう!!のことです。たとえば商品Aの購入率が
、商品Bの購入率が
としたとき分布に有意差あんの?をベイズで解決します。
この方の記事が最高に纏まっています。一応僕もベイズ推定の記事書いてます。
ちなみにバンディットのアルゴリズム実装の最後にベイズ使うので理解しておくことをおすすめします。
加えてですねえ、A/Bテストは事前分布の問題もあるのでねえ、では次のセクションで最適化に移るためにBandit Algorithmを定式化します。
英語やああああああ、と思わないでください。よく見てくださいめっちゃ簡単な単語しか出てきてません。
注目して欲しいのは
です。これは行動
を入力とする行動価値関数と言われます。

注目すべきはRegret(後悔)です。これは最適な行動価値から実際にとった行動価値の差分で定義されます。定義より小さいほうがいいことがわかります。
では一つ目のアルゴリズムの紹介です。

ただし

はaction=
が選択された総数です。したがってExploitationは次のように定式化されます

を変化させて実装結果を確認します。アームは10種類でそれぞれの確率は単調増加で設定しました。なのでインデックスでは9番が最大の行動価値をもったアームということになります。


たしかに、
を増やすとExplorationが多くされていることがわかりまうす。Rewardsと最適なアームを選んだ割合(BAR)の変化を比較します。

青が小さい
でオレンジが大きい
での結果です。
をおきくするほど探索の割合が大きくなるのでその影響がBARに顕著に現れています。
の問題は探索をランダムで行っている点です。つまり、実際には行動価値の高いアームも低いアームも等確率で扱っていた点です。BoltzmannのアルゴリズムではSoftmax関数を用いることで各アームを経験行動価値で重み付します。その出力をそれぞれのアームの確率で扱います。

よく見てみると
で割り算されていることがわかります。これもハイパーパラメータです。察しの通りで
のとき
となるので
-Greedyと同じようになります。
したがってExploitationは次のように定式化されます
では実装結果を確認します。

-Greedyと比較してみます。

いいかんじ

を分割して確認しますとうすい水色である本来のベストなアームが
を超えたあたりから盛り返してきてることがわかります。
最後にコードを貼っておきます。
次回はUDBとThompson sampling実装しますー。でそのノリでContextual Banditとかも頑張りますー。
本日は強化学習に入門します。けどMDPとかはやらないので安心してください。簡単だと思います。ビジネスにおいてもバンディット問題は多くあるということなのでためになるかなーと思います。
Keywords
この記事のキーワードを先にリストアップします。こうしたほうが読みやすくないか?と最近やっと気づきましたすいません。- Exploitation / Exploration
- MAB (Multi-Armed-Bandit)
- Advertising Technology
- A/B Test
- Bayesian A/B Test
– Greedy
- Boltzmann Softmax
Exploration / Exploitation
- Exploitation is 活用
- Exploration is 探索
ラーメンが好きで毎回行きつけのラーメン屋さんにいくんですよね。もちろん、毎回いっているということはそこが美味しいって経験からわかっているので通っているんです。これがExploitationです。
しかし、同じラーメン屋さんにばかり通っていると仮に近くにもっと美味しいラーメン屋さんやつけ麺屋さんがあってもその存在を知り得ないですよね。なのでたまには自分の知らないお店に期待していきたくなりますよね。僕も3回に1回くらいの割合で新しいお店を体験します。これがExplorationです。
ただ、新しいお店だと「美味しい!」時と「普通かなー」な時と「んー」な時がありますよね。これらを報酬といいます。もちろん報酬の高い、つまり「美味しい!」を選択できるようなExplorationができれば理想ですね。
これらを考慮すると、ベストな選択としては行きつけでExploitationしつつも期待度の高いお店にExplorationしたいですよね。


Multi-Armed Bandit
上記のように複数の選択肢に対してExploration / Exploitationを考える問題を多腕バンディット問題といいます。- 期待値がわからないK個の選択肢が存在する
回の試行全てにおいて最善の選択肢を選び続けトータルの報酬を最大化したい


もっともポピュラーな例は広告の最適化とかですかね。薬の投与などもたまにExampleで見られますがここでは広告を例にして話を進めます。なのでいったんBanditからは離れてこれについてちょっと深入りしていきます。
Advertising Technology
広告に関わる全住民つまり、広告主側と媒体側(広告主,メディア,消費者)を幸せにするためのテクノロジーです。そのなかでもReal time bidding(RTB)がキーワードになります。それを説明する前に次の用語を簡単に
- DSP (Demand-Side Platform)
- SSP (Supply Side Platform)
つまり、DSPが「この広告貼ってー」とお願いし、SSPが「ええよー」と返します。しかし、一対一関係ではないので「俺の広告も貼ってくれー」といろんな人がお願いします。(SSPも複数あります。サイトA、サイトB的な感じです)
そんなマーケットのことをRTBといいます。複数のDSPが各々資金を持ってSSPに交渉し、最も価格の高いDSPをSSPが決定します。ただ値段の妥当性がわからないですよね。これも機械学習で最適化するそうです。そこで次の用語が登場します。
- CVR:ConVersion Rate.コンバージョン率
- CTR:Click Through Rate.クリック率
Bayesian A/B Test
A/Bテストってご存知ですよね。AとBどっちがいいの??を統計学的仮説検定を元に検証する試験のことです。Bayesian A/Bテストとは、A/Bテストをベイズでやろう!!のことです。たとえば商品Aの購入率が


この方の記事が最高に纏まっています。一応僕もベイズ推定の記事書いてます。
ちなみにバンディットのアルゴリズム実装の最後にベイズ使うので理解しておくことをおすすめします。
Banditを再確認
これらを踏まえてBanditをおさらいするとバンディットアルゴリズムはアームを選択した結果得られる報酬を逐次的に反映し、次のアームの選択に活かすことからA/Bテストに比べて機会損失の低減が見込めます。いわば逐次最適化A/Bテスト的な感じですかね。
加えてですねえ、A/Bテストは事前分布の問題もあるのでねえ、では次のセクションで最適化に移るためにBandit Algorithmを定式化します。

注目して欲しいのは



– Greedy
では一つ目のアルゴリズムの紹介です。
- パラメータ
を設定
の確率でExploration
- ランダムでArmを選択
の確率でExploitation
- 経験を元に、最大の行動価値を持つArmを選択









Boltzmann Softmax

- パラメータ
を設定 (small)
- パラメータ
を設定 (small)
の確率でExploration
- 各Armの行動価値をSoftmaxで重み付けし選択
の確率でExploitation
- 経験を元に、最大の行動価値を持つArmを選択





したがってExploitationは次のように定式化されます






最後にコードを貼っておきます。
References
- https://accel-brain.com/semantics-of-natural-language-processing-driven-by-bayesian-information-search-by-deep-reinforcement-learning/verstarkungslernalgorithmus-als-funktionale-erweiterung-des-banditenalgorithmus/
- https://ferret-plus.com/11986
- https://www.cs.princeton.edu/courses/archive/fall16/cos402/lectures/402-lec22.pdf
- https://lilianweng.github.io/lil-log/2018/01/23/the-multi-armed-bandit-problem-and-its-solutions.html
- https://www.smartbowwow.com/2018/08/python.html
- https://haltaro.github.io/2017/08/08/introduction-to-ad-tech
- https://github.com/brianfarris/RLtalk/blob/master/RLtalk.ipynb
- https://blog.albert2005.co.jp/2017/01/23/%E3%83%90%E3%83%B3%E3%83%87%E3%82%A3%E3%83%83%E3%83%88%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%80%80%E5%9F%BA%E6%9C%AC%E7%B7%A8/
- https://www.cs.princeton.edu/courses/archive/fall16/cos402/lectures/402-lec22.pdf
Feature Importanceを知る
こんにちは。kzです。
世の中ではやはり解釈性が重要らしいです。
前回、SHAP含めてモデル解釈の指標についていくつか触れました。やはり一度では僕は残念ながら理解できないので復習も含めて今回この記事を書きます。
ちなみに他にもDrop-Column Importanceとかもあるらしいです。
なのでその計算の核となるGini Impurityから始めます。
あるノードにおけるGini不純度は上のように定義されます。記号については以下の通り

とありました。難しいですが、要は最後の式だけ見ればなんとなくわかります。分母は前ノードにおけるImpurity Reductionの総和であり、分子は対象の特徴量
による分岐ノードでのImpurity Reductionの総和となっています。
つまり、対象の特徴量が木全体においてどれだけGini不純度の減少に寄与できたかという指標でFeature Importanceが算出されているということです。
ということはです。分岐点を多く作りやすい変数の方が相対的にFeature Importanceが大きくなるのは直感的ですよね。単純に考えるとカテゴリカル変数よりも連続値変数の方がFeature Importanceが相対的に高まってしまうということです。さらに木を深めることで多くの分岐点が生成されるのであればその効果は莫大です。
実際Feature ImportanceにはCardinalityが密接に関係します。次にCardinalityについてみてみます。
タイタニックデータをxgboostでバイナリ分類したのちfeature importanceをみた結果、特徴量の1つであるSexは目的変数と高い相関があるにもかかわらず、比較的低いimportaceが得られたらしい。
これに対して気になるコメントがあった。

なにを言っているのかというと。カーディナリティによってfeature importanceにバイアスが生じる。high-cardinalityはhigh-importanceを持つ。これが原因でSexが相対的にlow-importaceになっている。
ここでカーディナリティとは、対象の変数の多様性のこと。つまり性別のようなカテゴリカル変数よりは連続値の変数の方がカーディナリティは相対的に高い。
これはまさに上記のGiniの定義より得られた考えのことだ。よってさきほどのFeature Importanceに対する理解は正しかったということだ。
じゃあ、どっちを決定木では使うの?どっちのほうがいいの?という問に対する答えはGini Impurityです。理由は簡単で計算が楽だからです。後者を選んでしまうと対数の計算が必要になります。詳しくは次のリンクへどうぞ
上述した理由から決定木におけるFeature Importanceに信憑性はない、結果的に重回帰がやはり好かれている。しかし、分類という点においては決定木やNNには重回帰では残念ながら勝てない。
最高に分類できる状態を保ちつつ、重回帰のように最高の形でFeature Importanceがほしい、という欲求を満たしてくれるのがSHAPだ。LIMEの上位互換なのでやってることはほぼ同じ。
記事の最後になりましたがここでは低次元空間においてLIMEの振る舞いを簡単に実装してSHAP(LIMEの上位互換)のイメージを理解します。下のような非線形データを考えます。
可視化に力をいれたいのでgridでデータを再度作成し、とあるインプット(青)を考えます。このインプットしたいするlimeを求めます。

LIMEもSHAPもローカルなので局所的な空間を考えます。多様体の言葉でいうとチャート、または局所座標近傍です。

距離関数としてL2距離を算出します。実際にロス関数を定義して重みを最適化するのではなく、この距離を線形回帰のライブラリのweightというパラメータに用いて外れ値を考慮した線形モデルを構築します。

前述通り今回はロス関数を定義して計算しているわけではないので厳密なLIMEの実装ではないので注意。あとは線形回帰モデルを作って重みを取得するだけです。


両軸を特徴量として扱っているので線形モデルの直線は可視化できませんが上のマークより、その振る舞いは理解できたのでわないかと思います。ピンクの部分はプラスでグレーの部分はマイナスと分類されています。その時の切片、係数も取得できます。これがlimeです。
厳密ではないですがLIMEのやっていることは理解できたかな?と思います。
ちなみにSHAPの凄いところは制約3つめのConsistencyです。これによって対象の特徴量のFIがより重み付されます。これによって決定木におけるFIの相対的なつぶれよりも直感的なFIを得ることができます。
SHAPの距離のところがよくわからない。でわ
世の中ではやはり解釈性が重要らしいです。
前回、SHAP含めてモデル解釈の指標についていくつか触れました。やはり一度では僕は残念ながら理解できないので復習も含めて今回この記事を書きます。
前回の復習
上記のリンク先が前回の記事になります。- Permutation Importance
- Partial Dependence
- LIME
- SHAP
ちなみに他にもDrop-Column Importanceとかもあるらしいです。
Feature Importance
順番的には逆になってしまいましたが、決定木自体にはFeature Importanceというものがあります。ご存知ですよね。どうやって算出されてるのや?と思ったので調べました。結論から言えばあまりにも式が複雑で完全に理解し切るのはかなりハードです。。なのでその計算の核となるGini Impurityから始めます。
Gini不純度

はクラスの総数
はクラスiの割合
二郎系 家系 まぜそば各クラスから均等な量の場合とあるクラスに偏りがある場合
count = 4 4 4
p = 4/12 4/12 4/12
= 1/3 1/3 1/3
GI = 1 - [ (1/3)^2 + (1/3)^2 + (1/3)^2 ]
= 1 - [ 1/9 + 1/9 + 1/9 ]
= 1 - 1/3
= 2/3
= 0.667
二郎系 家系 まぜそば少し小さくなりました。ではあるノードにおいて単一のクラスのみある場合はどうでしょうか。
count = 3 3 6
p = 3/12 3/12 6/12
= 1/4 1/4 1/2
GI = 1 - [ (1/4)^2 + (1/4)^2 + (1/2)^2 ]
= 1 - [ 1/16 + 1/16 + 1/4 ]
= 1 - 6/16
= 10/16
= 0.625
二郎系 家系 まぜそば0となりました。きれいに分類できている証拠ですね。決定木のFeature ImportanceはこのGiniを用いて算出されているようです。 参考文献によると
count = 0 12 0
p = 0/12 12/12 0/12
= 0 1 0
GI = 1 - [ 0^2 + 1^2 + 0^2 ]
= 1 - [ 0 + 1 + 0 ]
= 1 - 1
= 0.00


つまり、対象の特徴量が木全体においてどれだけGini不純度の減少に寄与できたかという指標でFeature Importanceが算出されているということです。
ということはです。分岐点を多く作りやすい変数の方が相対的にFeature Importanceが大きくなるのは直感的ですよね。単純に考えるとカテゴリカル変数よりも連続値変数の方がFeature Importanceが相対的に高まってしまうということです。さらに木を深めることで多くの分岐点が生成されるのであればその効果は莫大です。
実際Feature ImportanceにはCardinalityが密接に関係します。次にCardinalityについてみてみます。
Cardinality
みんな大好きKaggleにおいて次のような質問があった。

ここでカーディナリティとは、対象の変数の多様性のこと。つまり性別のようなカテゴリカル変数よりは連続値の変数の方がカーディナリティは相対的に高い。
これはまさに上記のGiniの定義より得られた考えのことだ。よってさきほどのFeature Importanceに対する理解は正しかったということだ。
Information Gain
実は決定木における重要な指標はGini Impurityだけではなく、Information Gain(平均情報量)というものが別であります。
LIME
じゃあ、どうしたらちゃんとした、まともな、直感的なFeature Importanceが得られるのか。という問に対する答えは僕の知るベストだとSHAPだ。もうSHAPしかない。上述した理由から決定木におけるFeature Importanceに信憑性はない、結果的に重回帰がやはり好かれている。しかし、分類という点においては決定木やNNには重回帰では残念ながら勝てない。
最高に分類できる状態を保ちつつ、重回帰のように最高の形でFeature Importanceがほしい、という欲求を満たしてくれるのがSHAPだ。LIMEの上位互換なのでやってることはほぼ同じ。
記事の最後になりましたがここでは低次元空間においてLIMEの振る舞いを簡単に実装してSHAP(LIMEの上位互換)のイメージを理解します。下のような非線形データを考えます。




ちなみにSHAPの凄いところは制約3つめのConsistencyです。これによって対象の特徴量のFIがより重み付されます。これによって決定木におけるFIの相対的なつぶれよりも直感的なFIを得ることができます。
Reference
- https://jamesmccaffrey.wordpress.com/2018/09/06/calculating-gini-impurity-example/
- https://en.wikipedia.org/wiki/Decision_tree_learning#Gini_impurity
- https://mlcourse.ai/articles/topic5-part3-feature-importance/
- https://towardsdatascience.com/the-mathematics-of-decision-trees-random-forest-and-feature-importance-in-scikit-learn-and-spark-f2861df67e3
- https://medium.com/coinmonks/what-is-entropy-and-why-information-gain-is-matter-4e85d46d2f01
- https://datascience.stackexchange.com/questions/10228/when-should-i-use-gini-impurity-as-opposed-to-information-gain
モデル評価 入門
こんにちは。kzです。
本日は機械学習のモデルの評価方法についてまとめます。Gistsがかなり重くなってしまったので一発で見れない場合はColabで開くか、Gistsに飛んだのちページを何度か更新してみてください。
たとえば、100枚のラーメンの写真をデータセットとします。モデル
で
はなにも考えず1を出力するだけで99%とれちゃいますよね。これって
はまともな学習をしていないことになりますよね。つまり、このモデル
よくないですよね。

Pythonで実装する際はパーセンテージも表示させるといいですね。

で、Confusion Matrixの中の指標を一個づつ見ていきます。



逆にRecallを重視するのはたとえば病気を判別するときです。病気なのに病気ではない、と判断すると大変ですよね
とはいえ、完璧な分類は共に高いのでどうせならこの二つの指標を同時に見たいですよね。つまり。2つの指標を同時に加味して「全体としての良さ」を測りたい時に
の登場です。
が「外れの総数」であることに注意すると外れの平均を考慮した正解率と考えることができます。

しかしです。先程の例のようにどっちかを特別重要視してモデルを評価したい時多いですよね。つまり、recallとprecisionを同じくらい重視して全体の良さを図るのではなくどちらかを相対的に重視したモデルの良さの指標が欲しい時の方がぼくは多い気がします、そこで
の登場です。

Precisionを重視したいなら (
)
Recallを重視したいなら (
)
のときはまさに
となります。
しかしです、この式おかしいと思いませんか?相対的に重みづけするならば一方が
でもう片方は
だと思いませんか?つまり

のほうが自然なF-betaですよね?え?ぼくだけ、、?笑。まあそういうことにしてちょっと聞いてください。

前述の
の定義が[Chinchor, 1992]なのに対してこれは[van Rijsbergen, 1979]です。たしかに古い。
代入して変形します。
この関数
を
でプロットしてみます。


次は
を動かしていって
を見てみます。
ではないことに注意。

で、このグラフを頭に置いたまま話を戻すと関数
の
はなぜあのような形なのか?気になります。調べますと次の条件を満たすようにされているらしいです。

真実を確かめるために計算していきます。

ここで
なので
を
と置き換えて

と、確かに導出されました。しかし、勾配が等しくなるという条件にどういう意味があり、なぜ必要なのかは理解できませんでした。すいません、、
とはいえ、わかったことをまとめると直感的な加重調和平均は
の方だということ。重み
に戻して考えると
が
のとき重みが1/3対2/3になり、たしかに直感的に2倍の重みを置いていることになりますね。
グラフ上の点は特定の閾値を用いてラベリングされたのちの混合行列から算出されたspecificity, sensitivityである。次の動画がかなりわかりやすいので絶対見てください。
簡単にまとめると、例えばロジスティック回帰を用いた2値分類を考えます。この時に閾値をいくつにするかが問題ですよね。出力の確率と閾値を比較して大きければ1,小さければ0のようにラベルを振る必要があるからです。つまり実数からカテゴリカルに変換する必要性。
ということはです、もちろん閾値と混合行列は一対一対応します。
どの閾値がもっともいい分類をしてくれるのか?という問に答えてくれるのがROCです。
そしていくつかのモデルに対してどのモデルがいいか、つまりどのROCがいいかという問に答えてくれるのがAUCです。
各軸はTPR、FPRとよばれます。言い換えると縦がRecallで横が(1-Sepecificity)です。つまり左上に近づくほど理想的であることがこの定義よりわかります。
そして上の図中の点ですが、これひとつひとつが特定の閾値によって算出された混合行列を用いて計算されたTPR、FPRです。
ここでわかったこととして他クラスのROCはそう単純ではないということです。sklearnに実装はありますがバイナリ で実装されているのか閾値をクラス数で分割しているのかわかりませんが、理論上はそう簡単にROCが作れないことは気にかけておいた方がいいと思います。
この記事の冒頭で極端な例をあげましたが、実世界の分析においてはよくあることだと思います。ですのでその点ではいい指標だなと思います。

でわコードを貼って終わりにします。
パラメータ空間は位相空間。でわ
本日は機械学習のモデルの評価方法についてまとめます。Gistsがかなり重くなってしまったので一発で見れない場合はColabで開くか、Gistsに飛んだのちページを何度か更新してみてください。
分類指標
この記事では分類問題に焦点を当てます。なので回帰におけるMSEとかは話しません。- TP / TN / FP / FN (真陽性 / 真陰性 / 偽陽性 / 偽陰性)
- confusion matrix (混同行列)
- simple accuracy (正解率)
- recall (再現率) (sensitivity)
- precision (適合率)
- f1 measure (F値)
- f1 beta measure (重み付きF値)
- threshold (閾値)
- ROC / AUC (受信者操作特性 / AUC下部の面積)
- MCC (マシューズ相関係数)
分類指標の必要性
もちろん、汎用性がめちゃくちゃ高いものがあればそれでいいんですが残念ながら私は知らないです。。。他にも具体例で考えてみましょう。たとえば、100枚のラーメンの写真をデータセットとします。モデル

- 二郎系だ
- 二郎系ではない



Confusion Matrix
クラス分類の結果をまとめた表のこと。各要素がTP / TN / FP / FNとなる。ただし、これは二値の場合。しかし多値分類でも同様に作れます。

Accuracy
もっとも、シンプルかつ、直感的な正答率
Precision
少しの外れを許すが機会損失したくない時に使う
Recall (Sensitivity)
機会損失してでもとにかく正確に当てたい時に使う
PrecisionとRecallの具体例
たとえば全国の二郎系を制覇したいという目的に対してはRecallよりもPrecisionを重視します。なぜならば行ったラーメン店が高い確率で二郎系あっても素通りしてしまっては目標が達成できないからです。逆にRecallを重視するのはたとえば病気を判別するときです。病気なのに病気ではない、と判断すると大変ですよね
とはいえ、完璧な分類は共に高いのでどうせならこの二つの指標を同時に見たいですよね。つまり。2つの指標を同時に加味して「全体としての良さ」を測りたい時に

F1 measure
RecallとPrecisionを同時に考慮する指標です。調和平均という見方もできますが


F-beta measure
RecallとPrecisionに重みを加えたF measureです。いわば一般化です。

Recallを重視したいなら (



![Rendered by QuickLaTeX.com w_1 \in [0,1]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-68bb507dd59c93a6e06505c0011aa48e_l3.png)
![Rendered by QuickLaTeX.com w_2 \in [0,1]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-70c5a075787512d2f3ebdc8d1943b7ec_l3.png)

van Rijsbergen’s E (effectiveness) function
F-measureは実は別の指標から導出されたものらしいです。起源は次のもの

代入して変形します。


![Rendered by QuickLaTeX.com R, P \in [0,1]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-2179d1d0770c262db344b01b88238f2c_l3.png)














とはいえ、わかったことをまとめると直感的な加重調和平均は




ROCとAUC
確率出力に対して最もいい閾値を見つけると同時に、モデルを比較するための指標をグラフ化したものです。グラフ上の点は特定の閾値を用いてラベリングされたのちの混合行列から算出されたspecificity, sensitivityである。次の動画がかなりわかりやすいので絶対見てください。
簡単にまとめると、例えばロジスティック回帰を用いた2値分類を考えます。この時に閾値をいくつにするかが問題ですよね。出力の確率と閾値を比較して大きければ1,小さければ0のようにラベルを振る必要があるからです。つまり実数からカテゴリカルに変換する必要性。
ということはです、もちろん閾値と混合行列は一対一対応します。
どの閾値がもっともいい分類をしてくれるのか?という問に答えてくれるのがROCです。
そしていくつかのモデルに対してどのモデルがいいか、つまりどのROCがいいかという問に答えてくれるのがAUCです。

そして上の図中の点ですが、これひとつひとつが特定の閾値によって算出された混合行列を用いて計算されたTPR、FPRです。
ここでわかったこととして他クラスのROCはそう単純ではないということです。sklearnに実装はありますがバイナリ で実装されているのか閾値をクラス数で分割しているのかわかりませんが、理論上はそう簡単にROCが作れないことは気にかけておいた方がいいと思います。
MCC
各クラスのサイズが非常に異なっていても使用できる評価指標です。この記事の冒頭で極端な例をあげましたが、実世界の分析においてはよくあることだと思います。ですのでその点ではいい指標だなと思います。

