Python環境を起動中... 初回のみ数秒かかります
Lesson 6 / 12

モデル② 糖尿病進行度の予測(回帰)

このレッスンで学ぶこと

  • 医療での回帰(数値を予測する)タスクを、糖尿病データで開発する
  • MAE・R²で回帰モデルを評価し、「どれくらい外すか」を実感する
  • 係数・特徴量重要度から「どの因子が効くか」を読む
  • 結果を医師にどう説明するか、そして相関と因果の違いを理解する

1. 分類の次は回帰 — 「数値そのもの」を予測する

モデル①(乳がん)は「良性か悪性か」という分類でした。 医療AIには、もう一つ大きなタスク——回帰(連続した数値を予測する)——があります。 在院日数、検査値の推移、リスクスコア……いずれも「YESかNOか」ではなく数値そのものを当てにいく問題です。

題材は scikit-learn 同梱の糖尿病データセット。 442人の患者について、年齢・BMI・血圧・血液検査値などから、 1年後の糖尿病の進行度を表すスコアを予測します。

sample_1.py
Ctrl+Enter
出力

442例・10特徴量。目的変数(進行度スコア)は25〜346の範囲で、平均は約152です (具体的な単位の定義は公開されていませんが、大きいほど進行が強いことを表す指標です)。 age(年齢)・sex(性別)・bmi(体格指数)・bp(血圧)と、 s1s6 の6つの血液検査値が特徴量です。

💡 このデータは「標準化済み」: このデータの特徴量は、あらかじめ平均0・スケール調整済みで配布されています。 そのため bmi 列の平均は0、値も -0.1〜0.1 程度の小さな数字になっています。 レッスン3のように自分で標準化する手間が省ける代わりに、 「BMI 25」のような元の単位では解釈できない点に後で効いてきます。

2. 回帰モデルを学習して評価する(MAE・R²)

機械学習入門コースで学んだ 線形回帰で予測し、回帰の代表的な指標MAEで評価します。

sample_2.py
Ctrl+Enter
出力

MAE41.9、R²0.477。 進行度スコア(平均152・幅25〜346)に対して平均±42ほど外す、という精度です。 R²は0.48——ばらつきの約半分を説明できているが、半分は説明できていない。 分類の「正解率0.97」に比べると地味ですが、医療の回帰ではこれくらいが普通で、 「1年後の身体の変化」を10個の数値だけで完全予測などできない、という現実を示しています。

⚠ 誤差を「臨床の重み」で読む: MAE=42という数字が「使える」かどうかは、その42が臨床的にどれだけ大きいかで決まります。 進行度が10違えば方針が変わる病気なら42の誤差は致命的ですし、大まかな層別け(軽症/重症の目安)が目的なら許容できるかもしれません。 指標の数値だけでなく、それが現場の判断にどう響くかまで考えるのが医療AIの評価です。

3. どの因子が効くのか — 係数と特徴量重要度

医療現場では「予測できた」だけでなく、「なぜその予測か」—— どの因子が進行度に効いているのか——が問われます。 線形回帰の係数と、ランダムフォレストの特徴量重要度、2つの角度から見てみましょう。

sample_3.py
Ctrl+Enter
出力

2つの方法で見ても、bmi(体格指数)と s5(血清の検査値の一つ)が 上位に来ます。ランダムフォレストでは bmi の重要度が飛び抜けて高く(0.40)、 「体格指数が進行度予測の主役級の手がかりになっている」と読めます。 2つの独立した方法が同じ因子を指すと、その結果への信頼が高まります。

⚠ 「効く」=「原因」ではない(相関と因果): 重要度が高い=その因子が進行の原因、とは限りません。 モデルが見ているのは相関(一緒に動く関係)であって、因果ではないからです。 「BMIを下げれば進行度が下がる」と言い切るには、モデルの重要度ではなく介入研究(実際に減量してもらう試験)が必要です。 医師に説明するときは「予測に効いている因子」であって「治療の標的」ではないことを明確に分ける——医療AIの誠実さです。

4. 結果を「医師に説明する」ということ

開発したモデルの結果を現場に届けるとき、数字の渡し方ひとつで受け取られ方が変わります。 このデータの落とし穴を例に考えましょう。

💡 このモデルの係数は「そのまま」説明できない: sample_3 の係数で s1 は約 -902 と大きな値ですが、 これは「s1が1増えると進行度が902下がる」という意味にそのままは読めません。 このレッスンの冒頭(§1)で触れたとおり、このデータの特徴量は標準化済みだからです。 「s1が1標準偏差ぶん増えると…」という単位で解釈する必要があり、 さらに s1s2 のように相関の強い検査値どうしがあると、 係数は互いに打ち消し合って不安定になります(多重共線性)。

だから医師への説明では、次のような伝え方が誠実です。

「なぜその予測か」を示す技術は、次のUnit(レッスン9・説明可能性)で さらに踏み込みます。ここでは「数字は、受け手が判断に使える形に翻訳して渡す」という姿勢を覚えておきましょう。

5. 練習問題

問題 1

ランダムフォレスト回帰と比べる

線形回帰の代わりに RandomForestRegressor を使うと、MAEとR²はどうなりますか。 線形回帰(MAE 41.9 / R² 0.477)より良くなるでしょうか。

exercise_1.py
出力
ヒントを見る(答え+解説)
from sklearn.ensemble import RandomForestRegressor
...
model = RandomForestRegressor(random_state=42).fit(X_tr, y_tr)

ランダムフォレストは MAE 42.8 / R² 0.470 で、線形回帰とほぼ同じ(わずかに劣る)です。 「複雑なモデルなら必ず勝つ」わけではありません。 このデータは特徴量と進行度の関係がおおむね直線的なので、シンプルな線形回帰で十分—— データに合ったモデルを選ぶという基本が確認できます。

問題 2

MAEとR²、医師への説明に向くのは?

「このモデルは平均でどれくらい外しますか?」と医師に聞かれました。 答えるのに直接使える指標はどちらで、それはなぜですか。

  • A. R² ── 1に近いほど良いので分かりやすい
  • B. MAE ── 目的変数と同じ単位で「平均±いくつ外す」を表すから
  • C. どちらも同じ
答えと解説を見る

正解:B. MAE

MAEは目的変数と同じ単位なので、「平均で±42ほど外す」とそのまま伝えられます。 R²は「ばらつきの何割を説明できたか」という統計的な指標で、 臨床家に「0.48です」と言っても外し幅は伝わりません。 指標は受け手が使える言葉に翻訳する——R²は開発者どうしの比較に、MAEは現場への説明に、と使い分けます。

問題 3

「BMIを下げれば進行を防げる」?

モデルで bmi の重要度が最も高いことがわかりました。 ここから「患者のBMIを下げれば進行を防げる」と結論してよいですか。理由も考えてください。

答えと解説を見る

結論してはいけません。

モデルが示すのは bmi と進行度の相関(一緒に動く関係)であって、 因果(下げれば進行が防げる)ではありません。 BMIと進行度の両方に影響する別の要因(生活習慣・遺伝など)が背後にあるかもしれず、 「効いている特徴量」は必ずしも「介入すべき標的」ではないのです。 因果を確かめるには、実際に減量してもらう介入研究が必要です。 医療AIの結果を伝えるときは、この線引きを必ず添えます。

6. まとめ

このレッスンのポイント

  • 回帰は数値そのものを予測する。医療では在院日数・検査値・リスクスコアなどに使う
  • 評価はMAE(同じ単位で「平均±いくつ外す」)と(説明できた割合)。糖尿病データでMAE≒42・R²≒0.48
  • 医療の回帰は完全予測はできないのが普通。誤差を臨床の重みで読む
  • 係数・特徴量重要度で効く因子(bmi・s5)を読む。ただし標準化済みデータの係数はそのまま解釈できない
  • 「効く」は相関であって因果ではない。医師への説明では、参考値であること・相関であることを明示する

これでテーブルデータのモデルは2つ完成しました。次のUnitからは、いよいよ医用画像の世界へ。 まずは画像の標準フォーマットDICOMを、その構造から扱えるようになりましょう。

完了するとコース一覧に進捗が記録されます