←クロニクル

臨床AIにおけるベイズ推論とは何か

前向きに推論するか、後ろ向きに照合するか

Chroneme / クロニクル

陽性を期待して検査を出すわけではない

医師がトロポニンを測るとき、問うているのは「この患者は心筋梗塞か」ではない。「この結果を受けて、自分の見立てをどれだけ改めるべきか」である。この二つは別の問いだ。

検査を出す前から、彼女には見積もりがある。左腕に放散する胸痛があり、冷汗をかいている62歳の男性なら、急性冠症候群の検査前確率は高い。エスプレッソを三杯飲んだあとに同じ訴えで来た28歳の女性なら、低い。同じトロポニンの結果でも、二人にとって意味は違う。一人目でトロポニンが軽度に上昇していれば、彼女がすでに疑っていたことの裏付けになる。二人目で同じ結果が出たなら、偽陽性の可能性のほうが高い。検査そのものが完全ではないからだ。おそらくその病気ではない人に不完全な検査を当てれば、確率の計算はこちらに不利に働く。

どの検査にも感度と特異度がある。感度は、病気が本当にあるとき、検査がそれをどれだけ拾えるかを示す。特異度は、病気のない人を正しく陰性と判定できる割合を示す。どちらも100%の検査はない。感度95%の検査でも、本当の症例の5%を見逃す。特異度90%の検査でも、健康な人の10%を誤って陽性とする。これらは患者ではなく検査の性質である。だから、どの結果にも不確かさがつきまとう。結果は確信を置き換えるものではなく、確信の度合いを動かすものなのだ。

これがベイズ的な推論である。まず、患者についてすでに分かっていることから出発する。新しい情報が一つ入る。その情報がどれほど信頼できるかに応じて、見積もりを更新する。次の情報が来たら、また同じことをする。

臨床AIの多くは、その逆をしている

医療のAIシステムの多くは、後ろ向きに動く。バイタル、検査値、診断名、処方薬といった結果をひとまとめにし、学習データから覚えたパターンと事後的に照らし合わせる。クレアチニン1.6、糖尿病の既往、処方リストにACE阻害薬。システムはそれを見て「CKDの可能性が高い」と出力する。学習に使った症例で、その組み合わせがよく一緒に現れていたからだ。

一見もっともらしいが、欠けているものを考えると話は変わる。システムは、クレアチニンが上がっているのか安定しているのかを知らない。ACE阻害薬が腎保護のために出されたのか、血圧のために出されたのかも知らない。この患者のクレアチニンが二年前は0.9で、それから着実に上がってきたことも知らない。この集団では尿中アルブミン検査の偽陽性率が15%あることも考慮していない。いまのスナップショットを過去のパターンに当てはめ、ラベルを貼っているだけだ。

同じ患者を診る医師なら、前へ向かって推論する。まず、年齢、性別、危険因子から見たCKDの事前確率を置く。クレアチニンを見て見積もりを更新するが、その更新の大きさは、一回のクレアチニン測定をどこまで信頼するかで加減する。今日の値だけでなく推移を見る。ACE阻害薬も考慮するが、腎臓病の根拠に数える前に、なぜ処方されたのかを確かめる。根拠の一つひとつが確率を動かし、その一つひとつが信頼性に応じて重みづけされる。

後ろ向きのやり方が問うのは「これは何に似ているか」だ。前向きのやり方は、こう問う。これまでに分かっていることを踏まえて、この新しい情報は何を教えてくれるのか。そして、それをどこまで信じてよいのか。

患者全体を見るか、結果だけを見るか

臨床研修で最初に教わることの一つは、検査値ではなく患者を治療せよ、ということだ。溶血した検体のカリウム5.8には何の意味もない。受診に走って駆けつけたばかりの患者の血圧160は、高血圧ではない。ある結果が信号なのか雑音なのかを決めるのは文脈であり、文脈を知るには、今日のカルテに載っていることの先まで患者を知っていなければならない。

汎用のAIは結果を処理する。数値、記録、コード化された診断名を読み、文章のパターンにもとづいて出力を返す。その点ではきわめて優秀だ。退院サマリーを誰よりも速く要約できるし、乱雑な診療記録から構造化データを抜き出すこともできる。だがその読み方は、教科書の症例検討を読むのと同じである。すべてが終わったあとから読んでいるのだ。

目の前の患者を診ている医師は、別のことをしている。不確かさのなかで、時間の流れに沿って前へ推論している。新しい情報が届くたびに評価を更新し、一つひとつをどこまで信頼するかで重みを変えている。低リスクの患者のDダイマー陽性は、おそらく偽陽性だと知っている。胸部X線が正常でも、早期の肺炎は否定できないと知っている。彼女は事前確率を頭のなかに持ち、所見が出るたびにそれを修正する。すべての所見を同じ重さで扱うのではなく、それぞれの診断的価値に見合った分だけ動かすのである。

Chroneme を作るとき、私たちはシステムに、検索エンジンのようにではなく彼女のように推論させたかった。後ろ向きではなく、前へ。新しい根拠が届くたびに確率を更新し、その根拠が実際にどれほど信頼できるかで重みをつける。

実際にはどう働くのか

2型糖尿病の58歳の男性が、定期の採血に来る。年齢、性別、糖尿病の診断から、慢性腎臓病の基礎確率はある水準から始まる。ゼロではない。糖尿病はCKDの最大の原因だからだ。高くもない。症状もなく、これまで腎臓の異常を指摘されたこともないからだ。

クレアチニンは1.2だった。数字の上では基準範囲内だが、前回より高い。システムは見積もりを更新する。ただし、わずかにだ。わずかに高いクレアチニンが一回出ただけでは、診断的価値は小さい。一回のクレアチニン測定の、CKDに対する感度と特異度は、それだけではさほど高くない。

十か月後、クレアチニンは1.4になり、eGFRは60を下回った。今度の更新は大きい。eGFR 60未満は、CKDに対する診断的価値がはるかに高いからだ。だがシステムには、静的なモデルには見えないものも見えている。推移である。クレアチニンはただ高いのではない。このまま延ばせば懸念すべき範囲に入る速さで、上がり続けている。

一年後、蛋白尿が出る。確率は、手を打つべき水準にまで達した。だが臨床的に大事なのはここからだ。システムは、蛋白尿が現れる何か月も前から、この患者にフラグを立てていた。確信をもってではない。注意を向けるに値する上がり方をしていた確率として、である。カルテを見る医師は、更新の一つひとつと、それぞれを動かした要因を確かめ、同意するかどうかを自分で決められる。ACE阻害薬は腎臓のためではなく血圧のために出されたと考えるなら、その要因を自分の臨床判断のなかで違う重さで扱えばよい。システムは推論を示し、彼女はそこに自分の推論を重ねる。

推移そのものが、どの一つの数値とも独立した根拠になる。

なぜそれが信頼につながるのか

ニューラルネットワークが「CKDの確率73%」と言っても、その理由を尋ねる手立てはない。その数字は、臨床の概念とは対応しない何百万ものパラメータから出てくる。医師がそれを見て「クレアチニンの部分には同意するが、処方歴の重みが大きすぎるのではないか」と言うことはできない。クレアチニンの部分も、処方歴の部分も存在しないからだ。あるのは一つの数字だけである。

ベイズ型のシステムが73%と言えば、医師はその理由を尋ねられる。どの根拠が確率をどれだけ動かしたのかが見える。特定の要因に異を唱え、自分の判断を加えることができる。臨床AIが実際に診療を変えるのは、こうした対話を通じてである。それがなければ、出力はただの断定にすぎない。それがあれば、出力は一つの論証になる。

システムを見せた腎臓内科医の一人が、このことをはっきり示してくれた。彼はある患者の根拠の連なりを見て、ほとんどには同意するが、一つの要因は重みが大きすぎると言った。処方された状況が、システムの想定とは違っていたからだ。彼は正しかった。そして、そう指摘し、該当する要因を名指しし、自分の専門知識を生かせたこと自体が、臨床意思決定支援が可能にすべきことそのものである。ブラックボックスなら、同じ確率を示すだけで、こうした対話の余地はなかっただろう。

隠さずに認めている限界

ベイズ推論は、根拠となる各項目が、疾患を条件として互いに独立している(条件付き独立)と仮定する。臨床医学では、そうでないことが多い。CKDでは、クレアチニンと蛋白尿は相関する。これは既知の限界であり、それを完全に解決することはこの分野の未解決問題である。

出力の質は、根拠に与える重みの質に左右される。発表された文献で十分に確立された重みもあれば、検証を通じて磨いていく近似値もある。キャリブレーションはいまも続けており、そうでないふりをするつもりはない。

ベイズ推論が得意なのは、検査値、バイタル、処方薬、コード化された診断名といった、構造化され数量化できる根拠だ。構造化されていない診療記録や、患者が自分で報告する症状は、それほど得意ではない。私たちは臨床データの種類ごとに異なる手法を使い、問題に合った道具を選んでいる。

私たちがベイズ推論を選んだのは、それが医師のもともとの考え方を映しているからだ。システムは、よい臨床医が直感的にしていることを形式化し、それをすべての患者に、途切れることなく、大規模に行う。それだけのことだ。魔法はない。臨床推論の背後にある数学を、目に見える形にしただけである。