ベイジアンネットワークを用いた胃潰瘍罹患者における薬剤処方パターンの探索をやってみた
※ ブログ記事の統合作業を実施しているため、2021年7月の記事を今さら公開しております。
【はじめに】
こんにちは。データサイエンスチームです。
今回はPREVENT社内に蓄積されたレセプトデータを用いて、因果探索を行なった事例を紹介します。
因果探索とベイジアンネットワークについて
因果分析は、①因果の方向の決定することと②因果の方向を既知として因果の有無の評価することにわけられます。①は因果探索、②は因果推論と呼ばれます。特に難しいとされているのは因果探索で、複雑なデータから因果構造を見つけ出すのは至難の技です。そこで着目されている手法の一つがベイジアンネットワークです。
ベイジアンネットワークは有向グラフィカルモデルで、確率変数間の依存関係をグラフで表現することができます。複雑な因子間の関連を可視化することができ、明確な仮説情報がない状況においてもネットワークモデルの構築が可能です。
ヘルスケア分野における応用例としては、生活習慣の改善意思に影響を与える要因の地域性の可視化(ベイジアンネットワークによる地域健康予測)や健康診断の問診と検査値の可視化(特定健康診査の枠組みに対応したベイジアンネットワークの構築)が行われており、因子間の関連が複雑化するヘルスケア分野でのグラフィカルモデルの有用性が示唆されています。
レセプトについて
公的医療保険制度の運用に必須な診療報酬明細書(以下、レセプトといいます。)は、医療費の記載のみならず、疾患や服薬、診療行為、入院などの保険制度の意思決定に重要なデータが蓄積されおり、医療分野における主要なビックデータとして利活用することが求められています。
一方で、縦断(経年)でのデータ結合が困難なことや診療報酬明細の特色が強く疾患名の記載について不正確であることなど活用するにあたりいくつかの問題点があります。これらの問題点をうまく回避することで、明確なイシューに対して議論することができます。
今回の趣旨
PREVENTでは、名古屋大学腎臓内科と共同研究を実施しています(ニュース | 名古屋大学と慢性腎臓病の重症化予防に関わる共同研究を開始)。共同研究に参加いただいている今泉先生と前川先生から専門分野内でのクリニカルクエッションをいただき、ベイジアンネットワークでの可視化について検討しました。
テーマは、胃潰瘍とNSAIDs、抗うつ薬のクリニカルパスの可視化です。過去の報告から、抗うつ薬であるSSRIやSNRIの服用により上部消化管出血が増加するといわれています。また、NSAIDsの併用により出血を増強させるとも言われています。今回、抗うつ薬とNSAIDsと上部消化管出血(胃潰瘍)の関係をベイジアンネットワークで再現できるか試みました。さらに、制酸薬を加えた時に因果構造がどのように変化するかについても検討しました。
【方法】
データセット
2014年度から2018年度(2014年4月から2019年3月まで)の5年間の匿名化データ(134,680人分)を分析対象としました。胃潰瘍診断の定義は、医科レセプトおよびDPCレセプトにICD10コードのK25に属する全27件の傷病名が記載されているものとしました(医療保険請求に係るマスターから検索できます。https://shinryohoshu.mhlw.go.jp/shinryohoshu/searchMenu/ )。抗うつ薬やNSAIDs、制酸薬等の薬剤服用の定義は、医科レセプト、DPCレセプト、PHAレセプトに胃潰瘍診断された月以前に該当の薬剤が記載されたものとしました。薬剤の処方期間や処方量、処方回数については今回考慮していません。
ベイジアンネットワークの実装
ベイジアンネットワークの実装は、pythonのライブラリ`pgmpy`を用いて簡単に行えます。
ライブラリ`pgmpy`は、`pip`を用いてダウンロードします。
$ pip install pgmpy
今回は変数間の関係とその方向性を明らかにする因果探索がメインとなるので、`ConstraintBasedEstimator`を用いました。(https://pgmpy.org/_modules/pgmpy/estimators/ConstraintBasedEstimator.html)
from pgmpy.estimators import ConstraintBasedEstimator
`ConstraintBasedEstimator`では、one-hotのデータセットから各々の変数の確率を算出し、変数の独立依存性を検定します。この時に得られる独立でない(関係性のある)変数間の構造をスケルトンといいます。その後、スケルトン構造に対して、V-Structureやオリエンテーションルールに則って方向性を付与していきます。
以下、胃潰瘍や薬剤服用の有無を集計したone-hotデータセット(dataset)によるベイジアンネットワーク探索のコード例です。
skel, seperating_sets = dataset.estimate_skeleton(significance_level=0.05)
print("Undirected edges: ", skel.edges())
pdag = dataset.skeleton_to_pdag(skel, seperating_sets)
print("PDAG edges: ", pdag.edges())
model = dataset.pdag_to_dag(pdag)
print("DAG edges: ", model.edges())
`print("DAG edges: ", model.edges())`で、どの変数にどのような方向性の因果関係があるかが表示されます。例えば、(変数A, 変数B)ならば、「変数A->変数B」という変数間の関係性が得られたことが示されます。一方で、一部の変数間では方向性が同定できずにスケルトン構造のままのところがあります。その場合は、変数間の時間的順序に基づいて方向性を決定します。それでも難しい場合はBICによるスコアリングを用いて全体のネットワーク構造を決定します。
以下、BICを求めるコード例です。
from pgmpy.models import BayesianModel
from pgmpy.estimators import BicScore
BN_model = BayesianModel(DAG_edges)
BIC = BicScore(dataset).score(BN_model)
print(BIC)
今回は使用していませんが、得られた結果を`networkx`ライブラリを用いて可視化できます。
import networkx as nx
import matplotlib.pyplot as plt
DAG_model = BayesianModel(DAG_edges)
nx.draw_circular(DAG_model, with_labels=True, arrowsize=30, node_size=2000, alpha=0.3, font_weight='bold')
plt.show()
また、得られたネットワークモデルから`get_cpds()`を用いて条件付き確率表を作成することも可能です。
BN_model.fit(dataset)
BN_model.get_cpds({変数名})
【結果】
抗うつ薬とNSAIDsと胃潰瘍の関係
抗うつ薬やNSAIDs服用者の人数は以下の通りです。
抗うつ薬とNSAIDsと胃潰瘍のネットワークモデルをFig 2に示します。NSAIDs -> SSRI -> SNRIの関係が示されました。SNRIの服用は性別と年齢に影響を受けること、NSAIDsの服用は年齢に影響を受けることが示されました。
抗うつ薬とNSAIDsと胃潰瘍のネットワーク構造に制酸薬を加えた場合
制酸薬の種類とそれぞれの薬剤服用者の人数は以下のようになりました。この検討では、SNRIとSSRI以外の抗うつ薬としてNaSSAも加えています。NaSSAはSNRIやSSRIと異なり上部消化管出血に寄与しないと報告されています。
ネットワークモデルの結果ですが、有向巡回グラフ構造がみられました(Fig3. ①、②)。胃潰瘍からNSAIDsに向かう方向性がみられ、時間的順序と相反する結果となりました。さらに、胃潰瘍と抗うつ薬との関係は独立関係となりました。
ネットワークを構成するための変数を増やすとそれだけ計算時間が増加し、さらに関係性の解釈が複雑になってしまいました。そこで、次の検討では制酸薬や抗うつ薬を種類分けせずにできるだけ変数を減らしネットワークモデルを単純化しました(Fig 4.)。制酸薬の服用は性別、年齢、抗うつ薬の服用、NSAIDsの服用に影響を受けること、また、胃潰瘍の有無は性別、年齢制酸薬の服用、NSAIDsの服用に影響を受けることが示されました。
【考察(所感)】
関連が未知の複数因子に対して、ベイジアンネットワークにより因果探索を実施できるのかという点については、統計的に導いたとしても要素が複雑化すると解釈が困難になるため、可視化だけでは困難でした。これはレセプト特有の問題ではなく、因果探索の難しい点でした。しかし、専門家と共同で行うことでデータからの可視化と臨床的な知見、専門知識によって様々な討論ができました。レセプトをグラフィカルモデルによって可視化するメリットが示唆されました。
【まとめ】
今回の検証では1. 年度単位での薬剤判定、2. onehotの判定(複数回の処方の丸め込み)によってベイジアンネットワークの構築を試みました。1と2により時間因子を丸め込みバイナリーデータとして扱っているため、グラフィカルモデルにより因子間の関連について可視化するに留まりました。レセプトは薬剤処方の期間や頻度の情報を保有していますので、テーマを絞ることで因子構造を検討することができます。期間と頻度に着目すれば、薬剤処方と目的因子について偏相関係数を求め、因果推論までできるのではないかと考えています。この点についてはテーマを絞り、検討する予定です。