1 of 45

機械学習演習

第1章:機械学習の基礎概念

2 of 45

本章では、機械学習の基本的な概念を学び、心不全患者データを使って最初の準備を行います。プログラミングの知識がなくても理解できるよう、具体例を交えて解説します。

学習目標

  • 機械学習とは何かを説明できる
  • 教師あり学習と教師なし学習の違いを理解する
  • 訓練データとテストデータの役割を理解する
  • データを機械学習用に準備できる

はじめに

3 of 45

1.1 機械学習とは何か

4 of 45

従来のプログラミング

従来のプログラミングでは、人間がルールを明示的に記述します。

この方法の問題点は、すべてのルールを人間が考えなければならないことです。

複雑な判断では、ルールの数が膨大になり、例外も多くなります。

1.1.1 従来のプログラミングとの違い

入力:患者データ

  ↓

ルール:「駆出率が30%以下 かつ 血清クレアチニンが2.0以上なら高リスク」

  ↓

出力:リスク判定

5 of 45

機械学習

機械学習では、データからコンピュータがルールを学習します。

つまり、機械学習とは「データから規則性やパターンを自動的に学習し、新しいデータに対して予測や判断を行う技術」です。

入力:患者データ + 正解ラベル(実際に死亡したかどうか)

  ↓

学習:データのパターンを自動的に発見

  ↓

出力:新しい患者の死亡リスクを予測

1.1.1 従来のプログラミングとの違い

6 of 45

分野

応用例

画像診断

X線・CT・MRIからの病変検出

予後予測

心不全患者の死亡リスク予測

診断支援

症状から疾患を推定

創薬

薬物候補化合物の探索

個別化医療

患者ごとの最適治療選択

本演習では、心不全患者の臨床データから死亡リスクを予測するモデルを構築します。

1.1.2 医療における機械学習の応用例

7 of 45

1.2 機械学習の種類

8 of 45

種類

目的変数

分類(Classification)

カテゴリ(離散値)

死亡/生存、がん/良性

回帰(Regression)

数値(連続値)

入院日数、血圧値

正解ラベル(教師データ)がある学習方法です。

入力データと正解の組み合わせから学習し、新しい入力に対する正解を予測します。

例:心不全死亡予測

  • 入力:年齢、駆出率、血清クレアチニンなどの臨床データ
  • 正解:実際に死亡したか(0 or 1)
  • 目標:新しい患者のデータから死亡を予測

教師あり学習はさらに2種類に分けられます:

1.2.1 教師あり学習(Supervised Learning)

今回のデータは「死亡(1)か生存(0)か」を予測するので、二値分類問題です。

9 of 45

正解ラベルがない学習方法です。

データの構造やパターンを発見することが目的です。

  • クラスタリング:患者を似た特徴でグループ分け
  • 次元削減:多数の検査値を少数の指標に要約
  • 異常検知:通常と異なるパターンの検出

1.2.2 教師なし学習(Unsupervised Learning)

10 of 45

種類

説明

強化学習

試行錯誤で最適な行動を学習

治療方針の最適化

半教師あり学習

少量のラベルありデータ �+ 大量のラベルなしデータ

医療画像のアノテーション効率化

1.2.3 その他の学習方法

11 of 45

機械学習プロジェクトは、一般的に以下の流れで進みます。

1. 問題定義 → 2. データ収集 → 3. データ前処理 

→ 4. 特徴量エンジニアリング

→ 5. モデル選択・学習 → 6. モデル評価 

→ 7. ハイパーパラメータ調整

→ 8. 最終評価・解釈 → 9. 実装・運用

この教材では、3〜8のステップを中心に学びます。

1.3 機械学習のワークフロー

12 of 45

1.4 訓練データとテストデータ

13 of 45

機械学習で最も重要な概念の一つが「汎化性能」です。

汎化性能とは、学習に使っていない新しいデータに対して正しく予測できる能力のことです。

もし全てのデータで学習し、同じデータで評価すると、モデルはそのデータを「丸暗記」してしまいます。これを過学習(Overfitting) といいます。

例:試験勉強

  • 過学習:過去問の答えを丸暗記 → 同じ問題は解けるが、新しい問題は解けない
  • 適切な学習:過去問から解き方のパターンを学ぶ → 新しい問題も解ける

医療AIでは、「学習に使った患者」だけでなく「新しい患者」に対しても正しく予測できることが重要です。

1.4.1 なぜデータを分割するのか

14 of 45

全データ(299人)

 ├── 訓練データ(約80%:239人)→ モデルの学習に使用

 └── テストデータ(約20%:60人)→ 最終的な性能評価に使用

重要なルール

  • テストデータは最終評価まで絶対に使わない
  • テストデータでモデルを調整してはいけない

1.4.2 データ分割の方法

1.4.3 検証データ(Validation Data)

実際には、ハイパーパラメータの調整のために「検証データ」も必要です。

全データ

 ├── 訓練データ(60-70%)→ モデルの学習

 ├── 検証データ(10-20%)→ ハイパーパラメータの調整

 └── テストデータ(20%)→ 最終評価

または、交差検証(Cross-Validation)を使う方法もあります。

15 of 45

用語

別名

説明

今回のデータでの例

特徴量

説明変数、独立変数、X

予測に使う入力データ

年齢、駆出率、血清クレアチニンなど

目的変数

被説明変数、従属変数、y

予測したい値

DEATH_EVENT(死亡したか)

特徴量(12個)

  • 連続変数:age, creatinine_phosphokinase, ejection_fraction, platelets, serum_creatinine, serum_sodium, time
  • 二値変数:anaemia, diabetes, high_blood_pressure, sex, smoking

目的変数(1個)

  • DEATH_EVENT:0(生存)または 1(死亡)

1.5 特徴量と目的変数

1.5.1 用語の定義

1.5.2 今回のデータの構成

16 of 45

ここからは、実際にPythonコードを書いてデータを準備します。

1.6 実装:データの準備

17 of 45

1.6.1 ライブラリのインポート

18 of 45

1.6.1 ライブラリのインポート

解説

scikit-learn(sklearn)とは?

Pythonで最も広く使われている機械学習ライブラリです。

様々なアルゴリズムが統一されたインターフェースで提供

されており、初学者でも使いやすい設計になっています。

乱数シードとは?

機械学習では、データの分割やモデルの初期化に乱数を使います。np.random.seed(42) を設定すると、毎回同じ乱数が生成され、結果が再現可能になります。

「42」という数字に特別な意味はありませんが、慣例的によく使われます。

19 of 45

1.6.2 データの読み込みと確認

20 of 45

1.6.2 データの読み込みと確認

臨床的ポイント:クラス不均衡

死亡が32%、生存が68%という分布は「クラス不均衡」と呼ばれます。

このような不均衡があると、モデルは多数派(生存)ばかり予測しがちになります。

21 of 45

1.6.3 特徴量と目的変数の分離

22 of 45

1.6.3 特徴量と目的変数の分離

解説

drop()メソッド

df.drop('列名', axis=1) は、指定した列を

削除したDataFrameを返します。

  • axis=0:行を削除
  • axis=1:列を削除

元のDataFrame df は変更されません。

なぜ分離するのか?

scikit-learnの機械学習モデルは、特徴量Xと目的変数yを別々に受け取る設計になっています。

model.fit(X, y)  # Xから yを予測するモデルを学習

23 of 45

1.6.4 訓練データとテストデータの分割

24 of 45

1.6.4 訓練データとテストデータの分割

25 of 45

1.6.4 訓練データとテストデータの分割

引数

説明

X, y

分割するデータ

test_size=0.2

テストデータの割合(20%)

random_state=42

乱数シード(同じ値なら同じ分割)

stratify=y

層化抽出

層化抽出(stratify)とは?

stratify=y を指定すると、元のデータと同じクラス比率で分割されます。

これを指定しないと、偶然テストデータに死亡患者が多く(または少なく)なる可能性があります。

医療データでは、クラス比率を維持することが重要です。

解説

train_test_split()の引数

26 of 45

1.6.4 訓練データとテストデータの分割

戻り値の順番

train_test_split() は4つの値を返します:

  1. X_train:訓練用の特徴量
  2. X_test:テスト用の特徴量
  3. y_train:訓練用の目的変数
  4. y_test:テスト用の目的変数

解説

27 of 45

1.6.5 データの形状を視覚的に確認

28 of 45

1.6.5 データの形状を視覚的に確認

29 of 45

モデルを構築する前に、特徴量の分布を確認しておきましょう。

1.7 特徴量の概要確認

30 of 45

1.7.1 連続変数の分布

31 of 45

1.7.2 二値変数の分布

32 of 45

1.7.3 特徴量間の相関

33 of 45

1.7.3 特徴量間の相関

34 of 45

1.7.3 特徴量間の相関

臨床的ポイント

相関が高い特徴量のペアがあると、モデルが

不安定になることがあります(多重共線性)。

ただし、このデータセットでは特徴量間の相関

は比較的低いため、大きな問題にはなりません。

35 of 45

1.8 機械学習の基本的な流れ

次章以降で詳しく学びますが、機械学習モデルの基本的なコードの流れを確認しておきましょう。

解説

scikit-learnでは、どのアルゴリズムでも同じ

インターフェースで使えます:

  • model.fit(X, y):モデルを学習
  • model.predict(X):予測を実行
  • model.predict_proba(X):予測確率を出力

この統一されたインターフェースが、

scikit-learnの大きな利点です。

36 of 45

1.9 医療AIにおける注意点

1.9.1 データの質と代表性

  • このデータは特定の病院・期間の患者集団から収集されたものです
  • 他の病院や患者集団に適用できるとは限りません(外的妥当性)
  • 人種、地域、医療体制の違いが結果に影響する可能性があります

1.9.2 臨床的な妥当性

  • 統計的に有意でも、臨床的に意味があるとは限りません
  • 予測精度だけでなく、解釈可能性も重要です
  • 医師の判断を補助するツールであり、置き換えるものではありません

37 of 45

1.9 医療AIにおける注意点

1.9.3 倫理的配慮

  • 患者データのプライバシー保護
  • アルゴリズムによる差別(特定の性別や人種に不利など)の回避
  • 予測結果が患者に与える心理的影響

1.9.4 規制とガイドライン

  • 日本:医薬品医療機器等法(薬機法)、PMDA
  • 米国:FDA
  • 欧州:MDR(医療機器規制)

38 of 45

1.10 まとめ

概念

説明

機械学習

データからパターンを学習し、予測を行う技術

教師あり学習

正解ラベルがある学習(今回はこれ)

分類問題

カテゴリを予測(今回は死亡/生存)

特徴量(X)

予測に使う入力データ

目的変数(y)

予測したい値

訓練データ

モデルの学習に使用

テストデータ

最終的な性能評価に使用

層化抽出

クラス比率を維持した分割

準備したデータ

X_train, y_train:訓練データ(239人)

X_test, y_test:テストデータ(60人)

39 of 45

演習問題

問題1:概念の確認

以下の文が正しいか誤りか答え、誤りの場合は正しく修正してください。

  1. 機械学習では、すべてのルールを人間がプログラムする必要がある
  2. 教師あり学習には正解ラベルが必要である
  3. テストデータはモデルの学習に使用する
  4. 層化抽出を行うと、訓練データとテストデータでクラス比率が異なる

問題2:データ分割

以下の条件でデータを分割するコードを書いてください。

  • テストデータの割合:30%
  • 乱数シード:123
  • 層化抽出:あり

40 of 45

演習問題

問題3:データの確認

分割後の訓練データについて、以下を出力するコードを書いてください。

  1. 訓練データの年齢の平均と標準偏差
  2. 訓練データの男性(sex=1)の割合
  3. 訓練データの糖尿病患者(diabetes=1)の数

問題4:考察

このデータセットを使った死亡予測モデルを臨床で使用する場合、

どのような点に注意すべきか、3つ以上挙げてください。

41 of 45

解答例

問題1の解答

  1. 誤り → 機械学習では、データからコンピュータが自動的にパターンを学習する
  2. 正しい
  3. 誤り → テストデータは最終的な性能評価に使用する(学習には使わない)
  4. 誤り → 層化抽出を行うと、訓練データとテストデータでクラス比率が同じになる

42 of 45

解答例

問題2の解答

43 of 45

解答例

問題3の解答

44 of 45

解答例

問題4の解答

  1. データの代表性: このデータは特定の病院の患者集団であり、他の医療機関や異なる患者集団には適用できない可能性がある
  2. 予測の限界: モデルの予測は確率的なものであり、100%正確ではない。個々の患者の予後を決定づけるものではない
  3. 解釈可能性: 医師が予測結果を理解し、患者に説明できる必要がある。ブラックボックスなモデルは臨床での信頼を得にくい
  4. 定期的な更新: 医療環境や治療法の変化に伴い、モデルの性能が低下する可能性がある。定期的な再評価と更新が必要
  5. 倫理的配慮: 予測結果が患者の治療機会を不当に制限したり、差別につながったりしないよう注意が必要
  6. 補助ツールとしての位置づけ: 最終的な判断は医師が行い、AIは意思決定を補助するツールとして使用する

45 of 45

次章の予告

第2章「データの前処理」では、以下の内容を学びます:

  • 特徴量のスケーリング(標準化・正規化)
  • なぜスケーリングが必要か
  • 不均衡データへの対処法
  • 特徴量選択の基礎

準備したX_train, X_test, y_train, y_testを使って、前処理を進めていきます。