Python

【製薬会社様の解析事例】MRが情報提供すべき医師の見つけ方

解析の目的

医師がある薬Aの処方をしてくれる医師なのかそうでないのかを予測することが今回の目的になります。様々な特徴量を用いて医師が薬Aを処方してくれるのか(正例: 1)、そうでないのか(負例: 0)を予測する2値分類の教師あり学習を実施しました。
この薬Aはある疾患Aに対して効果があり、昔から使用をされていましたが、近年他の疾患Bにも効果があることが分かりました。しかし疾患Bに対しては、多くの医師が第一の選択肢として選択する他の薬Bが存在し、薬Aは疾患Bに対しては後発という立ち位置にあります。薬Aを製造している製薬会社は疾患Bに対しても薬Aのシェアを獲得したいため、どのようなMR活動を受けていて、どのような特徴を持つ医師が疾患Bに対して薬Aを処方してくれるのかを予測することで、効率よく営業活動ができるようになるというモチベーションがありました。

使用したデータ

目的変数は解析の対象になっている薬Aに対する各医師の処方歴(つまりその薬を処方をしたことがある医師ならば1、そうでないならば0)です。また特徴量としてはMRの活動(医師を訪問した回数、メールを送信した回数、説明会を開催した回数など)と医師の特徴(年齢、医師歴、所属学会など)を使用しました。

モデル

モデルにはLightGBMを使用しました。LightGBMはKaggleといったデータ解析コンペティションにおけるランキング上位者の多くが使用している教師あり学習のモデルであり、さらに経験的に予測性能が高いことが知られています。
LightGBMはブースティングと呼ばれるフレームワークを利用したモデルです。ブースティングを利用した他のモデルとしてはXGBoostが有名です。ここではブースティングおよびLightGBMの概要を回帰を例に説明します。
LightGBMは決定木と呼ばれるモデルを複数個構築し、それらを直列に結合したようなモデルになっています。このとき、小さな決定木を構築するのがポイントです。まず、1つ目の決定木を構築します。すると1つ目の決定木にデータを入力することで実測値の予測値を得ることができます。 しかし、1つの小さな決定木では素晴らしい予測をすることは難しいでしょう。そこで、1つ目の決定木から得られた実測値の予測値と実測値の差、つまり誤差を計算します。この誤差を誤差1と呼ぶことにします。このとき実測値、実測値の予測値、誤差1の関係は以下のようになります。

実測値 = 実測値の予測値 + 誤差1 ・・・ ①

次に、この誤差1を教師として2つ目の決定木を構築します。すると2つ目の決定木から得られた誤差1の予測値と誤差1との差、つまり誤差1の誤差を計算します。この誤差1の誤差を誤差2と呼ぶことにします。このとき誤差1、誤差1の予測値、誤差2の関係は以下のようになります。

誤差1 = 誤差1の予測値 + 誤差2 ・・・ ②

式②を式①に代入することで

実測値 = 実測値の予測値 + 誤差1の予測値 + 誤差2

となります。新たな入力データが手に入った時、実測値の予測値は1つ目の決定木から、誤差1の予測値は2つ目の決定木から得ることができますので、「実測値の予測値 + 誤差1の予測値」でもって、新たな入力データに対する出力、つまり予測値を得ることができます。ここからさらに進んで、誤差2を教師として3つ目の決定木を構築します。この手続を何度も繰り返すことで誤差を予測する決定木を複数構築し、実測値の予測値と複数の誤差の予測値を用いて新たな入力データに対する予測値を得ることができます。これがブースティングです。
ブースティングは、誤差を逐次的に小さくしていく手続きと考えることができます。このようなモデルは学習データに対してはよくフィットするが、学習に使用していないデータに対してはあまりよい性能を示さないことが多いです。このような現象は過学習と呼ばれます。LightGBMやXGBoostといったモデルは、ハイパーパラメータと呼ばれるモデルの挙動を制御するパラメータをいくつも持っており、これらをうまく調整することで過学習を抑制することができます。

ハイパーパラメータの調整

データを学習およびハイパーパラメータ調整用とモデルの評価用に分け、ハイパーパラメータの調整はグリッドサーチと交差検証法で行いました。グリッドサーチは、あらかじめ指定したハイパーパラメータの候補に対してすべての組み合わせを試してどのハイパーパラメータの組み合わせが良い性能を示すのかを調べる方法です。交差検証法は学習データセットをK個(Kは任意)に分割し、K個のうちK-1個分を学習用データセットとしてモデルの学習に用いて、残った1個分を検証用データセットとしてモデルの評価に使用します。そしてこの手続をK回繰り返すことでモデルの性能を調べる方法です。つまり交差検証法ではK回モデルの学習を行うことになります。ハイパーパラメータの組み合わせを指定→指定したハイパーパラメータでの性能を交差検証法で評価→再びパラメータの組み合わせを指定→指定したハイパーパラメータでの性能を交差検証法で評価→・・・とグリッドサーチによって考えられるハイパーパラメータの組み合わせの数だけこのループを繰り返すので、実施には相応の時間がかかります。しかし、ハイパーパラメータが機械学習モデルの性能を決めるので、モデル構築する上では非常に大切な作業になります。

モデル評価

モデルの評価指標としてAUCを使用しました。2値分類モデルを構築した後、モデルの性能評価用データを用いてそれぞれのデータに対して正例になる確率を多くの場合計算することができます。そしてこの確率をある閾値でもって正例もしくは負例に割り振ることで、最終的な分類予測を行います。閾値は多くのは場合は0.5といった値が設定され、算出された確率が0.5より大きければ正例に割り振り、0.5より小さければ負例に割り振るということがされています。しかし、実際にはこの閾値の設定には任意性があり、この閾値の値を色々と変えることで正例・負例にどのように割り振られるかが変わります。つまり、閾値によってモデルの性能が変わることになります。AUCは閾値の任意性の影響を受けないモデルの評価指標です。
また、入力データがどのように変化すると正例になる確率が変化するのかを調べる方法として、SHAPという方法を使用しました。SHAPに深入りはしませんが、SHAPによって、例えば今回の分析で言えば、MRが医師を訪問する回数を増やすと・医師の年齢が高くなると、薬の処方確率がどのように変化するのか、といったことが分かります。

ABOUT ME
知己松本
筑波大学大学院システム情報工学研究科卒業後、新卒でDATUM STUDIOへ入社。その後、Nextremerに転職しAI関連の研究開発に従事。独立を経てpiponにジョイン。
【事例集プレゼント】業務効率化したい医薬業界の方

株式会社piponでは医薬業界の企業様向けにDXの成功事例を集めた医薬DX事例集をe-bookとしてご提供しております。

ご興味ある方がいらっしゃいましたらこちらのフォームよりご連絡頂けると嬉しいです。