Abnormally Distributed

統計解析担当のライフサイエンス研究者 -> データサイエンティスト@コンサル

Coursera:AI for Medicine Specializationの受講記録③

随分間が開いてしまったが、AI for Medicine Specializationの3つ目のコースも受講完了したので、レビューしておく。

Course3. AI for Medical Treatment

治療のためのAIというタイトルで、治療効果の分析の他、テキストデータの分析や機械学習モデルの解釈方法がメインテーマとなっている。 キーワードはこんな感じ。

  • RCTデータを用いた効果検証
  • BERTによる質問応答
  • SHAP値
  • GradCam

Week1

ランダム化比較試験(RCT)のデータを用いた治療効果推定がテーマ。因果推論の基本が分かっていれば、特に目新しい内容はなさそう。
ルービンの因果モデルでは平均治療効果は、ある個人について治療した場合と治療しなかった場合の結果の差を全被験者で平均したものだが、実際は個人について両方の結果を観測することはできないため、個人レベルでの治療効果の推定は不可能としている(因果推論の根本問題)。ただし、被験者が治療群とコントロール群にランダムに割り当てられる状況であれば(RCT)、介入の有無以外の変数については両群で平均的には差がないとみなせるため、両群での結果の平均値の差分を取ることで、平均治療効果(ATE, Average Treatment Effect)が推定できる。講義ではこのあたりが詳しく説明されている。

自分が知らなかった内容は、T-learner, S-learnerに関する部分。これらは条件付き治療効果の推定のための手法。例えば年齢が58歳、血圧が130の人について、ATEがどの程度になるか?という条件付き治療効果の推定の問題を考える。被験者数が限られることから、両群から条件に合う患者を抽出して、通常の治療効果の推定のように平均的な効果の差分を取るアプローチは難しい。そこで、共変量から介入あり、なしの場合のアウトカムを予測するモデルを構築し、予測値の差分として条件付き治療効果が推定できる。T-learnerは治療群と対称群で別々のモデルを構築、S-leanerは治療の有無も説明変数に加えて1つのモデルを構築するアプローチ。予測モデルとしては、決定木モデルを使っている。

また、上記の治療効果推定モデルの性能評価についても触れられている。ここでも、同じ患者で治療有無での結果がないことから、評価方法は工夫する必要がある。ちょっとややこしいが、あまり聞いたことがない方法だったので、参考になった。
具体的には、治療群・対称群から、治療効果が同程度と推定された被験者のペアを作成、ペアのアウトカム(治療により悪化、改善、変化なし)と治療効果の推定値を算出し、全ペアについて、アウトカムと推定値の辻褄がどの程度合っているかにより評価する。以前に出てきたC-indexに似た指標である、C-for-benefitを評価指標としている。

Week2

自然言語処理がテーマで、臨床報告からの疾患ラベルの抽出と、質問応答が取り上げられている。
質問応答は質問文と文章が与えられ、回答に対応する部分を文章から抜き出す問題。BERTの大まかな概念や事前学習タスクについて説明がある。Transformerの詳細などには触れていないが、取り敢えずBERTを動かしたく、モデルの概要を知りたいという人にはわかりやすくて良い説明と思われる。
X線画像に対し、各種疾患の有無のラベルデータを作成したいとする。臨床報告から情報を抽出したいが、書式が統一されておらず、一筋縄ではいかない。課題の1つとして用語の包含関係や同義語が挙げられる。これに対処するため、国際医療用語集(NOMED-CT, Systematized Nomenclature of. Medicine-Clinical Term)という用語集を利用する例を紹介している。
また否定表現の抽出も課題である。疾患が言及されていても、否定文かどうかを正しく判定できないと、間違ったラベルを与えてしまう。 講義ではNegBioという臨床テキストデータからの否定表現の抽出用のライブラリを紹介している。

Week3

機械学習モデルの解釈がテーマであり、SHAPなどの特徴量重要度とGradCamが取り上げられている。
まずは特徴量重要度の算出方法として、①特徴量を削除した際の性能の変化に基づく方法、②特徴量の値をランダムにシャッフルした際の性能の変化に基づく方法(Permutation importance)) が紹介されている。後者の方法は、モデルの再学習が必要にならないのが利点である。個人的には以前からちょっと怪しい方法と思っていたが、このコースで紹介されるくらいなので、ある程度確立された方法なのかもしれない。。
次に、個々のレコードレベルでの特徴量重要度を算出する方法として、シャープレイ値(Shapley values)を取り上げている。自分としては、このSHAPに関する解説が一番勉強になった。
Shapley Valueは元々、ゲーム理論で提唱された概念とのこと。具体的な算出方法は以下の通り。まず全ての特徴量の順列を作成する。次に、特徴量を左から順番に、評価対象の特徴量に達するまで取っていく。その上で、対象の特徴量を含めた場合と含めなかった場合のモデルの出力の差分を取り、全ての順列についての平均を取ると、対象の特徴量に関するShapley valueとなる。全特徴量から対象の特徴量を除外した場合だけでの評価としないのは、特徴量どうしの相関の影響をキャンセルするため。
Shapley valueの便利な性質として、全特徴量のShapley valueの合計が、その個人におけるモデルの出力とベースの出力(特徴量なしの場合)との差分と一致することが挙げられる。要は、Shapley valueは出力値に各特徴量がどの程度貢献しているかを表すことになる。これが、よく見る SHAPのforce plotということになる。
なお、Pythonの SHAPパッケージでは実際に全ての特徴量セットでモデルを再学習している訳ではなく、高速に計算できるアルゴリズムを利用している。

次に、CNNのモデルを解釈する手法として、GradCamを説明している。Course1でも出てきたので、詳しい説明は割愛する。要は(flattenされる直前の)最後の畳み込み層の出力(特徴マップ)がタスクに関連する重要な空間的情報を捉えていると考え、k枚の特徴マップについて、モデルの出力値に対する影響に比例する重み(勾配の平均的な大きさ)による加重平均を取った上で、入力画像と同じサイズにリサイズしてヒートマップを作成し、元の画像と重ね合わせることで、モデルが注視している領域を可視化する方法と言える。

Specializationの総括

統計解析、機械学習の経験がそれなりにある身としては、よく知っている内容も多かったが、新しい学びも多かった。各手法の考え方を、数学的な詳細に立ち入りすぎずにわかりやすく説明しており、ノートブックでの演習を通じて身に付けられるようになっており、課金する価値は十分にあったと思う。