医療職からデータサイエンティストへ医療職からデータサイエンティストへ統計学、機械学習に関する記事をまとめています。引用元https://github.com/interpretml/DiCE近年では、ブラックボックスと呼ばれる機械学習の解釈性に注目が集まっており、予測の結果について説明するための手法がいくつか考案されてます。Values)があります。www.medi-08-data-06.work例えば、ある病気になるかどうかの予測モデルを考えてみましょう。病気は、年齢や、性別、BMI、運動、食事習慣などから予測されます。太郎さんがその病気にかかる確率が高いと予測されたとします。太郎さんがなぜ病気になりやすいと予測されたのかという疑問には、LIMEやSHAPが使えます。一方で、どうすれば病気になりにくいか(病気となる確率が低いと予測されるのか)を知りたい場面もあるでしょう。今回は、そんな疑問にお答えすべく、Microsoftが開発した反実仮想の生成手法、DiCEをご紹介します。予測値を低くする変数は、変数の値をいろいろ変化させれば見つかるかもしれません。闇雲に変数を調整してもうまくいきません。何この変数をどれぐらい変化させれば良いか、の組み合わせは膨大になりますし、年齢や性別のように変化させることがほぼ不可能な変数もあるからです。ここで、理想的な反実仮想の条件を考えてみます。反実仮想が多様である)条件1、条件2は、変化する変数の数と幅が少ないことを意味します。予測確率を低くするために、体重を20kg落として、毎日2時間ジム行って、毎日500gの野菜を食べて、、、と現状からあまりに離れているのは、良い反実仮想とは言えません。反実仮想生成の目的は、最小限の変化で、最大限に目標とする予測値に近づけることです。条件3は、現実的ではない変数変化が起きないようにするという意味です。体重を100kg減らすや、年齢を-10歳にするなどの変化は現実では不可能です。条件4は、必須というわけではないですが、上記3つの条件を満たす反実仮想が複数あったときに、反実仮想は多様である方が意思決定しやすいということです。食事を変えるのか、運動をするのか、はたまた減量をするのか、人によって実行しやすさが異なるため、色々提案してくれた方が良いということですね。反実仮想とは、もし〇〇になったら、□□なるだろうという仮想のことです。Explanations)とは?上記の制約を条件に変数を色々変化させれば、理想的な反実仮想を探し出すことができそうです。アルゴリズムはいくつかありますが、一番シンプルなものは次のようなアルゴリズムです。達成したい値yと反実仮想の予測値f(c)の誤差を小さくしろただし、反実仮想cを、元々の状態xとあまり離すなという意味の式です。上記の思想を応用し、多様な反実仮想を生成することを得意とするのがDiCEです。ExplanationsDiCEで反実仮想を生成DiCEはpipで簡単にインストールできます。dice-mlはじめに予測モデルを作ります。予測タスクは、bostonデータセットを使って、住宅価格が中央値より高くなるかどうかの2値予測です。低価格住宅(0)、高価格住宅(1)とでもしましょう。モデルは、tensorflowとpytorch、scikit-learnに対応していますが、今回はお手軽にscikit-learnを使います。boston.target]).rename("price")変数は以下の通りです。比率を次の式で表したもの。テストデータ、訓練データに分ける。train_y_bin)それでは、DiCEを使って反実仮想を生成してみましょう。m)dice_ml.Dataでは、反実仮想生成の元となるデータを作成します。変数とアウトカムが一つになっていることに注意してください。カテゴリ変数と連続変数は扱いが違うため、continuous_featuresで連続変数がどれかを指定します。dice_ml.Modeでは、作成したモデルを渡します。今回はscikit-learnなので、backend=sklearnとします。show_onlyで変数変化の差分のみを表示テストデータ2サンプルで、それぞれ3つの反実仮想データを作成しました。1つ目は、高価格住宅になるための、2つ目は低価格住宅になるための反実仮想です。高価格住宅になるには、部屋の数を増やしたり(RM)、税金を安くしたり(TAX)、低所得者の居住割合を減らしたり(LSTAT)することで、効果価格住宅(と予測される)になることがわかりますね。逆に低価格住宅になるには、犯罪率が増えたり(CRIM)、雇用施設からの距離が遠くなる(DIS)ことが条件のようです。generate_counterfactualsには、features_to_varyで、変化を許す変数を指定することができたり、permitted_rangeで変数の変化幅を制御できます。dice_exp.visualize_as_dataframe(show_only_changes=True)どうやら上記の条件でサンプル1が高価格物件になる条件は探せなかったようです。逆に、低価格物件になる条件は指定した制約を満たしています。``連続量予測の反実仮想DiCEはRegressionモデルを使った連続量予測にも使うことができます。連続量の場合は、model_type="regressor"として、達成したい予測値のレンジを指定します。テストデータ、訓練データに分ける。desired_range=[30,100])dice_exp.visualize_as_dataframe(show_only_changes=True)まとめ機械学習モデルの解釈性が必要とされる場面では、DiCEの情報は重宝しそうです。変数の変化と予測値の関係性が期待通りになっているかの確認にも使えますね。17:28Tweet関連記事2022-06-11FastAPI+AWSlambdaでサーバレスな機械学習推論APIを作成する機械学習モデルの予測結果を返す簡単なAPIサーバーを作成する機...2020-06-13ニューラルネットワークによる手書き文字画像の異常検知~CNNとCAEの比較~機械学習を用いた画像データの異常検知は、様々な分野で用いら...2019-11-26SHAPを使って機械学習モデルと対話する機械学習モデルは、統計モデルよりも予測に長けた手法であり、...2019-09-16Pythonによるデータ前処理手法の網羅的まとめデータ解析をする上で、もっとも重要な工程であるデータの前処...2019-07-20facebookの時系列予測パッケージ{prophet}を使って、ブログアクセス数を予測する。学んだこと、日々の所感をまとめていきます。※本ブログは筆者が個人的に学んだこと感じたことをまとめたブログになります。所属する組織の意見・見解とは無関係です。medi_data0826引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。