// PART 01 · ARTICLE 04 / 05
AI/ML BASICS RESEARCH L1

医療AI研究の進め方

— 研究疑問から論文化までの7ステップ

9 min read · L1 · 2026.05.05 update · by Editor

医療AI研究は、アルゴリズムを選ぶところから始まるわけではありません。最初に決めるべきなのは、「誰に、いつ、何を予測し、その結果をどの臨床判断に使うのか」です[1]

研究疑問が曖昧なままデータを集めると、あとからアウトカム定義、説明変数、データ分割、評価指標が揺れやすくなります。逆に、研究の入口で設計を固めておくと、前処理、モデル開発、外部検証、論文化までの流れが整理しやすくなります。

本稿では、医療AI研究を「研究疑問」「データ収集」「前処理」「モデル開発」「内部評価」「外部検証」「論文化・展開」の7ステップに分けて、各段階で決めるべきこと、記録すべきこと、避けたい落とし穴を整理します。

// CONTEXT

本稿は、第1部「医療AI・機械学習の基礎地図」の第4記事です。前3記事では、機械学習の基本、統計モデル・機械学習・生成AIの違い、回帰・分類・クラスタリング・生成というタスク類型を整理しました。本稿では、それらの知識を 1 つの研究プロジェクトとしてつなげます。次の記事「予測モデルとは何か」と合わせて読むことで、医療AI研究をどのように計画し、どのように評価し、どのように論文として説明するかが見えやすくなります。

// 01 · LEARN OUTCOMESこの記事でわかること

読了後、次の4つを説明できるようになります。

  • 医療AI研究を、研究疑問から論文化までの7ステップで整理できる
  • 各段階で「先に決めるべきこと」と「記録しておくべきこと」を区別できる
  • データ分割、前処理、ハイパーパラメータ探索、外部検証で起こりやすい落とし穴を説明できる
  • Methods に、データ設計、前処理、評価指標、外部検証、再現性を過不足なく書ける

// 02 · CONCLUSIONまず結論

// 03 · FIGURE直感的な図解

医療AI研究では、各段階の判断が次の段階に影響します。特に、研究疑問、アウトカム定義、データ分割、評価指標は、モデル開発の前に決めておくことが重要です。

// PHASE 1 · 設計とデータ取得 // PHASE 2 · 開発と評価 // PHASE 3 · 検証と論文化 01 · 研究疑問 誰に・いつ・ 何を予測するか アウトカム / 使用場面 02 · データ収集 IRB・対象期間・ 除外基準 サンプル設計 03 · 前処理 欠損・標準化・ 分割固定 train/val/test 04 · モデル開発 アルゴリズム・ CV・チューニング test には触れない 05 · 内部評価 AUC・較正・ DCA・95%CI 最後に1回 test 評価 // CAUTION test データを見ながら モデルや前処理を 調整しない 06 · 外部検証 他施設・時期別・将来コホート 07 · 論文化 TRIPOD+AI / 再現性 / 限界
Fig.1 医療AI研究の7ステップ。研究疑問、アウトカム、データ分割、評価指標を早い段階で決めておくことで、モデル開発後のデータリーケージや過大評価を避けやすくなる。

// 04 · CLINICAL医療・リハビリでの具体例

ここでは、回復期リハビリテーション病棟の FIM 予後予測研究を例に、7 ステップを具体的に見ていきます。同じ FIM データを使う研究でも、最初の設計が違えば、使う変数、評価指標、論文での書き方は変わります。

// PHASE 01 / 研究疑問の定義

「入棟時データから退院時 FIM を予測できるか」だけでは、研究疑問としてまだ曖昧です。誰に、いつ、何を予測し、その結果をどの判断に使うのかまで決める必要があります。

たとえば、「回復期リハ病棟に入棟した脳卒中患者を対象に、入棟 2 週間以内の情報から退院時歩行自立を予測し、早期の退院支援や家族説明に役立てる」と書くと、対象、時点、アウトカム、使用場面が明確になります。

この段階で、アウトカムを退院時 FIM 運動項目にするのか、FIM 歩行項目 6 点以上の歩行自立にするのか、自宅退院にするのかを決めておきます。

// PHASE 02 / データ収集

次に、対象集団、データ取得期間、包含基準、除外基準、倫理審査、データ取得経路を整理します。後ろ向き研究なのか、前向き研究なのか、多施設データなのかによって、研究の強みと限界は変わります。

リハビリテーション研究では、同一患者の複数入院、転院元の違い、FIM 評価者の違い、施設ごとの退院支援体制、在院日数の違いが結果に影響することがあります。これらは Methods で説明できるよう、データ収集時点から記録しておくことが重要です。

サンプルサイズについては、EPV(Events Per Variable)などの古典的な目安が参考になります。ただし、EPV ≥ 10 は絶対的な基準ではありません。アウトカム頻度、候補変数の数、モデルの複雑さ、過学習のリスク、外部検証の有無を踏まえて検討します[2][3]

// PHASE 03 / 前処理とデータ分割

欠損値処理、外れ値処理、カテゴリ変数の扱い、標準化、特徴量作成を決めます。この段階で特に重要なのが、train、validation、test の分割です。

前処理は、train データで学習し、validation や test データには同じ処理を適用するだけにします。test データを含めて標準化や欠損補完を fit すると、評価データの情報が学習側に漏れるため、データリーケージになります。

また、同一患者の複数入院がある場合は、同じ患者が train と test に分かれないように、患者 ID 単位で分割します。多施設データでは、施設別分割や時期別分割を検討することもあります。

// PHASE 04 / モデル開発

ロジスティック回帰、SVM、ランダムフォレスト、XGBoost、ニューラルネットワークなどを比較する場合は、できるだけ同じ条件で評価します。ハイパーパラメータ探索は、train または train+validation の範囲内で行い、test データは最後の評価まで使いません

モデル開発では、性能だけでなく、解釈性、必要な症例数、過学習のリスク、実装のしやすさも考えます。医療AI研究では、最も複雑なモデルが常に最良とは限りません。単純なロジスティック回帰や正則化モデルが、研究目的に合うこともあります。

// PHASE 05 / 内部評価

内部評価では、AUC だけで判断しないことが重要です。分類モデルであれば、AUC、感度、特異度、PPV、NPV、F1、calibration plot、Brier score、decision curve analysis などを組み合わせて評価します。

AUC は、陽性例と陰性例をどの程度区別できるかを示す指標です。しかし、予測確率が実際のリスクと一致しているかは、calibration を見なければわかりません。また、モデルが臨床判断に役立つかは、decision curve analysis などで検討します。

可能であれば、bootstrap などを用いて 95% 信頼区間を示します。単一の点推定だけでは、モデル性能の不確実性が伝わりません。

// PHASE 06 / 外部検証

外部検証では、開発に使っていない別施設データ、別時期のデータ、または将来コホートでモデルを評価します。外部検証は、モデルが開発データだけに適応していないかを確認するために重要です。

リハビリテーション領域では、患者層、FIM 評価者、在院日数、退院支援体制、訓練量、地域資源の違いによって、モデル性能が変わることがあります。そのため、外部検証で性能が下がること自体は珍しくありません。重要なのは、性能低下の程度と理由を Discussion で丁寧に説明することです。

外部データがすぐに使えない場合でも、時期別分割による temporal validation や、施設別分割による検証を検討します。ただし、内部検証だけで臨床実装可能と強く主張するのは避けるべきです。

// PHASE 07 / 論文化・展開

論文化では、TRIPOD+AI などの報告ガイドラインを確認し、研究疑問、対象集団、アウトカム、説明変数、欠損処理、データ分割、モデル開発、評価指標、外部検証、限界を Methods と Results に明確に書きます[4]

コードや前処理手順、乱数 seed、解析環境、モデルのハイパーパラメータを記録しておくと、再現性が高まります。ただし、医療データでは個人情報保護や施設ルールがあるため、データやコードの公開範囲は慎重に判断します[8]

臨床展開を議論する場合は、「誰が、いつ、どの画面で、どの判断に使うのか」「予測が外れた場合にどうするのか」「運用後に性能をどう監視するのか」まで考える必要があります。モデルを作ることはゴールではなく、臨床で安全に使えるかを検討するための出発点です[7]

// 05 · THEORY数式・理論

研究フローの各段階を慎重に設計する理由は、直感だけでなく数理的にも説明できます。ここでは、初学者が押さえておきたい3つの考え方、すなわち「test データに触れない理由」「EPV の考え方」「外部検証で性能が下がる理由」を整理します。

分割の凍結が必要な理由

test データは、モデル開発の最後に 1 回だけ使う評価用データです。もし test データの結果を見ながらモデルや前処理を調整すると、その test データに都合のよいモデルを選んだことになります。

その場合、評価結果は本当の未知データでの性能ではなく、「その test データで良く見えるように選ばれた後の性能」になります。これが、データリーケージ過大評価につながります。

真の汎化性能:  E_{(x,y) ~ p(x,y)}  [ L( f(x; θ̂), y ) ]
test漏洩あり:  E_{(x,y) ~ p(x,y) | model selected on test}  [ L( f(x; θ̂), y ) ]

式の意味を直感的に言えば、「テストで成績が良かったモデルを選んでから、同じテストで成績を報告している」状態です。これでは、未知の患者に対する性能を正しく評価できません。

EPVの考え方

EPV は、Events Per Variable の略で、イベント数をモデルに入れる変数や自由パラメータの数で割ったものです。ロジスティック回帰では、古典的に EPV ≥ 10 が 1 つの目安として使われてきました[3]

EPV = (発生イベント数) / (モデルの自由パラメータ数)
例: 自宅退院 200 件、変数 15 個  →  EPV = 200 / 15 ≈ 13.3

ただし、EPV ≥ 10 は絶対的な基準ではありません。アウトカム頻度、候補変数の数、モデルの複雑さ、正則化の有無、過学習の許容度によって必要なサンプルサイズは変わります[2]。したがって、論文では「EPV を満たしているから十分」と書くだけでなく、サンプルサイズ設計の考え方を説明することが重要です。

外部検証で性能が下がる理由

外部検証で性能が下がるのは、モデルが悪いからだけではありません。開発データと検証データで、患者層、評価方法、治療方針、退院支援体制、測定時期が異なることがあります。

L_train  = E_{p_train}  [ L(f(x), y) ]
L_deploy = E_{p_deploy} [ L(f(x), y) ]
分布シフトがある場合:  L_deploy > L_train

医療データでは、このような分布の違いが頻繁に起こります。そのため、開発データで高い性能が出ても、別施設や将来データで同じ性能が出るとは限りません。外部検証は、モデルの弱点を見つけるための重要なステップです。

// 06 · IMPLEMENTATION · PYTHON実装

ここでは、7 ステップの考え方をコードの形で確認します。重要なのは、高度なアルゴリズムを使うことではなく、研究計画、データ分割、前処理、モデル開発、評価を分けて管理することです。以下は教育用の仮想データを想定したサンプルです。

PYTHON
# ============================================
# 教育用サンプル
# 実臨床データを使う場合は、個人情報保護、
# 倫理審査、施設ルール、利用規約を必ず確認してください。
# ============================================


# ============================================
# PHASE 1: 研究疑問を定義する
# ============================================

# 例:
# 対象:回復期リハ病棟に入棟した脳卒中患者
# 時点:入棟2週間以内の情報
# 目的:退院時歩行自立を予測する
# 使用場面:退院支援・家族説明・訓練目標設定の参考
# アウトカム:退院時FIM歩行項目 6点以上を歩行自立と定義


# ============================================
# PHASE 2: データを読み込む
# ============================================

import pandas as pd

df = pd.read_csv("example_rehab_dataset.csv")

# 注意:
# 実データでは、IRB承認番号、対象期間、包含基準、
# 除外基準、欠測の扱いをMethodsに明記する。


# ============================================
# PHASE 3: 前処理とデータ分割
# ============================================

from sklearn.model_selection import train_test_split

features = [
    "age",
    "onset_days",
    "fim_motor_admission",
    "fim_cognition_admission"
]

target = "walk_independent_discharge"

# 同一患者の複数入院がある場合は、患者ID単位で分割する
unique_patient_ids = df["patient_id"].unique()

train_ids, test_ids = train_test_split(
    unique_patient_ids,
    test_size=0.2,
    random_state=42
)

df_train = df[df["patient_id"].isin(train_ids)].copy()
df_test = df[df["patient_id"].isin(test_ids)].copy()

X_train = df_train[features]
y_train = df_train[target]

X_test = df_test[features]
y_test = df_test[target]


# ============================================
# PHASE 4: モデル開発
# ============================================

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV

# Pipelineにすることで、
# imputationやstandardizationがCV内で適切にfitされる
pipe = Pipeline([
    ("imputer", SimpleImputer(strategy="median")),
    ("scaler", StandardScaler()),
    ("model", LogisticRegression(max_iter=1000))
])

param_grid = {
    "model__C": [0.01, 0.1, 1.0, 10.0]
}

search = GridSearchCV(
    estimator=pipe,
    param_grid=param_grid,
    cv=5,
    scoring="roc_auc",
    n_jobs=-1
)

search.fit(X_train, y_train)

best_model = search.best_estimator_


# ============================================
# PHASE 5: 内部評価
# ============================================

from sklearn.metrics import roc_auc_score, brier_score_loss

y_prob = best_model.predict_proba(X_test)[:, 1]

auc = roc_auc_score(y_test, y_prob)
brier = brier_score_loss(y_test, y_prob)

print(f"AUC: {auc:.3f}")
print(f"Brier score: {brier:.3f}")

# 実際の研究では、以下も検討する:
# - 感度、特異度、PPV、NPV
# - calibration plot
# - decision curve analysis
# - bootstrapによる95%信頼区間


# ============================================
# PHASE 6: 外部検証
# ============================================

# 外部データが利用できる場合のみ実施する
# df_external = pd.read_csv("example_external_dataset.csv")
# X_external = df_external[features]
# y_external = df_external[target]
# y_prob_external = best_model.predict_proba(X_external)[:, 1]
# print("External AUC:", roc_auc_score(y_external, y_prob_external))

# 外部検証で性能が下がった場合は、
# 患者層、施設差、評価者差、時期差などをDiscussionで検討する。


# ============================================
# PHASE 7: 論文化・再現性の記録
# ============================================

# Methodsに記録する内容:
# - 研究疑問と使用場面
# - 対象集団、包含基準、除外基準
# - アウトカム定義
# - 説明変数
# - 欠測処理
# - データ分割方法
# - モデルとハイパーパラメータ探索
# - 評価指標
# - 外部検証の有無
# - 倫理審査と個人情報保護

# 可能であれば、解析コード、乱数seed、前処理手順、
# パッケージバージョンを記録する。

このコードで重要なのは、前処理を Pipeline に入れている点です。欠測補完や標準化をデータ全体に対して先に行うと、test データの情報が学習側に漏れる可能性があります。Pipeline を使うと、交差検証の各 fold 内で前処理が fit されるため、データリーケージを避けやすくなります。

また、test データはモデル選択には使わず、最後の評価だけに使います。論文では、どの段階で何を決め、どのデータを何に使ったかを Methods で明確に説明することが重要です[8]

// 07 · MYTHSよくある誤解

とりあえずデータを集めて、あとから研究疑問を考えればよい
後ろ向き研究では、既に存在するデータから研究を組み立てることはあります。しかし、その場合でも、解析を始める前に研究疑問、対象集団、アウトカム、説明変数、評価指標を明確にする必要があります。「集めたデータで何かできないか」という発想だけでは、アウトカム定義や変数選択が後付けになり、研究の説得力が弱くなります。
モデル性能が思ったほど良くないので、test データを見ながら調整してよい
test データを見ながら前処理、特徴量選択、ハイパーパラメータ、モデル種類を調整すると、その test データに合わせたモデルになります。これはデータリーケージの典型です。モデル選択は train または validation の範囲で行い、test データは最後の評価に残しておきます。複数モデルを比較したい場合は、あらかじめ比較方法を決めておくことが重要です。
外部検証がないと、研究として意味がない
外部検証は非常に重要ですが、すべての研究で最初から外部データを用意できるわけではありません。外部検証がない場合でも、時期別検証、施設別分割、交差検証、bootstrap などで過学習のリスクを評価できます。ただし、内部評価のみで「臨床実装可能」と強く主張するのは避けるべきです。外部検証は、今後の課題として明確に書く必要があります。
AUC が高ければ、すぐ臨床で使える
AUC は識別能を示す指標ですが、それだけで臨床使用の可否は判断できません。予測確率が実際のリスクと合っているかを示す calibration、臨床判断に役立つかをみる decision curve analysis、別データでの外部検証、運用設計、医療者による確認体制、導入後のモニタリングが必要です。モデル開発は、臨床実装の入口にすぎません。

// 08 · WRITING論文での書き方

Methods に記述すべき項目

Phase 1 / 研究疑問

  • 対象集団
  • 予測時点
  • アウトカム
  • 想定ユーザー
  • 想定される臨床使用場面

Phase 2 / データ収集

  • 研究デザイン
  • 対象期間
  • IRB 承認
  • 包含基準・除外基準
  • データ取得経路
  • サンプルサイズ設計の考え方
  • 同一患者の複数入院への対応

Phase 3 / 前処理

  • 欠測値処理
  • 外れ値処理
  • カテゴリ変数の扱い
  • 標準化の方法
  • train / validation / test の分割方法
  • 分割単位が患者単位か入院単位か
  • 前処理をどのデータで fit したか

Phase 4 / モデル開発

  • 使用したアルゴリズム
  • アルゴリズム選択の理由
  • ハイパーパラメータ探索
  • 交差検証の方法
  • 乱数 seed
  • ソフトウェアとパッケージバージョン

Phase 5 / 内部評価

  • 主要評価指標
  • AUC、感度、特異度、PPV、NPV
  • calibration
  • Brier score
  • decision curve analysis
  • 95% 信頼区間の算出方法

Phase 6 / 外部検証

  • 外部検証データの取得元
  • 開発データとの違い
  • 性能低下の有無
  • サブグループ解析
  • 外部検証がない場合の限界

Phase 7 / 論文化・展開

  • TRIPOD+AI への対応
  • 再現性に関する情報
  • コードや解析手順の共有範囲
  • 倫理・個人情報保護
  • 臨床実装を主張する場合の運用設計
  • 導入後のモニタリング計画

査読者に指摘されやすい点

  • 研究疑問とアウトカム定義が曖昧
  • サンプルサイズの考え方が示されていない
  • train / test 分割の方法が不明
  • 前処理を test データを含めて fit している
  • ハイパーパラメータ探索に test データを使っている
  • AUC のみで、calibration や 95% 信頼区間がない
  • 外部検証がないのに、臨床実装可能と強く主張している
  • 外部検証で性能が下がった理由を Discussion で考察していない
  • コード、seed、解析環境、前処理手順が再現できない
  • TRIPOD+AI の重要項目が不足している

報告ガイドラインは、研究の種類と段階に応じて選びます。予測モデル研究では、回帰モデル・機械学習モデルのいずれであっても TRIPOD+AI[4] の確認が基本になります。バイアスリスク評価には PROBAST または PROBAST+AI が参考になります[5]。医用画像 AI 研究では CLAIM[6]、AI システムの臨床導入段階では DECIDE-AI[7] が参考になります。ただし、ガイドライン名を並べるだけでは不十分です。自分の研究がどの段階にあり、どの項目を満たしているかを Methods と Supplement で説明することが重要です。

// 09 · CHECKLISTチェックリスト

研究フロー全体を点検する 10 項目。

  • 01研究疑問、対象集団、予測時点、アウトカム、使用場面を1段落で説明できる
  • 02IRB 承認、対象期間、包含基準、除外基準、データ取得経路を Methods に書ける
  • 03アウトカム定義と説明変数を、モデル開発前に決めている
  • 04train / validation / test の分割方法と分割単位を説明できる
  • 05欠測補完、標準化、特徴量作成を train データ内で fit している
  • 06ハイパーパラメータ探索を test データに触れずに行っている
  • 07AUC だけでなく、calibration、Brier score、95% 信頼区間を検討している
  • 08外部検証、時期別検証、施設別検証のいずれかを検討している
  • 09TRIPOD+AI に沿って Methods と Results を点検している
  • 10コード、seed、前処理手順、解析環境を再現できる形で記録している

// 10 · QUIZミニクイズ

  1. Q1医療AI研究で、モデル開発の前に決めておくべきものとして最も重要なのはどれか?
    • 使いたいアルゴリズム名
    • 研究疑問、対象集団、アウトカム、評価指標
    • 論文投稿先
    • 図のデザイン
    SHOW ANSWER
    B. アルゴリズムを選ぶ前に、誰を対象に、いつ、何を予測し、どの評価指標で判断するのかを決める必要があります。
  2. Q2test データを見ながら特徴量選択やハイパーパラメータ調整を行うと、何が問題になるか?
    • モデルが単純になりすぎる
    • データリーケージにより性能が過大評価される
    • AUC が計算できなくなる
    • 外部検証が不要になる
    SHOW ANSWER
    B. test データは最後の評価に残しておく必要があります。test データを見ながら調整すると、その test データに合わせたモデルになり、未知データでの性能を正しく評価できません。
  3. Q3AUC が高い予測モデルについて、追加で確認すべきこととして最も適切なのはどれか?
    • AUC だけで十分なので追加評価は不要
    • calibration、外部検証、臨床的有用性を確認する
    • p値だけを確認する
    • モデル名だけを Methods に書く
    SHOW ANSWER
    B. AUC は識別能の指標ですが、予測確率の信頼性や臨床的有用性は別に評価する必要があります。calibration、外部検証、decision curve analysis などを組み合わせて判断します。
  4. Q4外部検証で性能が下がった場合、論文ではどう扱うべきか?
    • 結果から除外する
    • 性能低下の理由を Discussion で考察する
    • 内部評価の結果だけを強調する
    • モデルを臨床実装済みと書く
    SHOW ANSWER
    B. 外部検証で性能が下がることは医療データでは珍しくありません。患者層、施設差、評価者差、時期差、運用の違いなどを踏まえて、性能低下の理由を考察することが重要です。

// REF参考文献

  1. Steyerberg EW. Clinical Prediction Models: A Practical Approach to Development, Validation, and Updating. 2nd ed. Springer, 2019.
  2. Riley RD, Snell KIE, Ensor J, et al. Minimum sample size for developing a multivariable prediction model: PART II — binary and time-to-event outcomes. Statistics in Medicine 2019;38(7):1276-1296.
  3. Peduzzi P, Concato J, Kemper E, Holford TR, Feinstein AR. A simulation study of the number of events per variable in logistic regression analysis. Journal of Clinical Epidemiology 1996;49(12):1373-1379.
  4. Collins GS, Moons KGM, et al. TRIPOD+AI statement: updated guidance for reporting clinical prediction models that use regression or machine learning methods. BMJ 2024;385:e078378.
  5. Wolff RF, Moons KGM, Riley RD, et al. PROBAST: A Tool to Assess the Risk of Bias and Applicability of Prediction Model Studies. Annals of Internal Medicine 2019;170(1):51-58.
  6. Tejani AS, Klontzas ME, Gatti AA, et al. Checklist for Artificial Intelligence in Medical Imaging (CLAIM): 2024 Update. Radiology: Artificial Intelligence 2024;6(4):e240300.
  7. Vasey B, Nagendran M, Campbell B, et al. Reporting guideline for the early-stage clinical evaluation of decision support systems driven by artificial intelligence: DECIDE-AI. Nature Medicine 2022;28:924-933.
  8. Pineau J, Vincent-Lamarre P, Sinha K, et al. Improving reproducibility in machine learning research. Journal of Machine Learning Research 2021;22(164):1-20.