多施設で集めたデータを300人の一列として扱い、乱数で5分割すると、同じ施設の患者が学習側と評価側の両方に入ります。施設ごとの測定手順や患者背景に違いがあれば、モデルはその施設の癖を学習し、同じ施設の残りの患者を当てにいけます。
同じことは時系列でも起こり、先の時期のデータで学習して前の時期を予測する分割は、運用の場面には存在しません。また、イベントが数十件しかない解析では、分割の仕方によって、あるfoldのイベントが0件になることもあります。
この記事では、誰と誰を同じ側へ入れるかという設計と、成績を何で測るかという指標の選択を扱います。なお、前処理や変数選択をどこへ置くかは、分割の前に済ませてはいけない処理で扱いました。
患者単位と施設単位の分割
同じ患者から繰り返し測定したデータでは、データの一行と、独立した対象者が一致しません。たとえば同じ患者の複数回の受診記録を行単位で分けると、ある受診の記録を評価するモデルが、その患者の別の受診記録を学習している場合があります。
そのため、新しい患者への予測性能を知りたいなら、その患者に属する全記録を同じ側へまとめます。画像データでも、同じ患者の別画像、同じ検体から作った部分画像、同一画像の加工版などを、学習と評価へ分散させないようにします。
ただし、既に経過を把握している患者の次回の値を予測する目的なら、過去の記録を利用できる場合があります。その際には、どの時点までの情報を使えるかを定め、新規患者への予測とは別の評価として記述します。
別施設への持ち出し
同じ施設から集めた患者を無作為に分ける方法では、その施設の測定方法や診療記録の特徴を学習側と評価側が共有します。そのため、別施設で使う際の性能を知りたい場合には、施設を単位として残す構成が必要になることがあります。
そこで、施設を順に一つずつ外すinternal-external CVでは、残った施設でモデルを作り、外した施設で性能を調べます。その際には、全体の平均だけでなく、施設ごとの成績の違いも確認します。
この報告について、TRIPOD-Clusterは、施設や研究などによるまとまりを持つデータで、予測モデルの開発・検証をどのように報告するかを定めています。ここで関わるのは標準誤差の補正だけではなく、分割、施設間の違い、評価対象の記述まで含まれます。
また、frailtyモデルと多施設データのようにモデル内で施設差を表現した場合でも、どの患者や施設を予測する評価なのかは別途決めます。新しい施設では、学習時の施設固有効果をそのまま使えない場合があるためです。
外側と内側でのまとまり
外側だけを患者単位で分けても、内側のチューニングを行単位で分けると、内側では同じ患者の情報が混ざります。その結果、内側の成績を良くする設定が、外側の新規患者には合わないことがあります。
そのため、同じ目的を持つ内側評価なら、内側もその目的に対応した分割にします。ただし施設数が少ない場合には、外側で一施設を残した後に内側でも十分な施設数を残せるかが制約となり、患者数が多くても独立した施設数が増えたことにはなりません。
施設をまたぐ予測を測る
10施設から30人ずつ、計300人を集めた設定を乱数で作ります。5個のマーカーは施設ごとに平均がずれており、アウトカムは施設の効果と個人の誤差だけで決まるため、マーカー自体はアウトカムと直接の関係を持ちませんが、施設を言い当てる情報を含んでいます。
そのうえで、この300人に対して、患者を乱数で10分割する場合と、施設を一つずつ外す場合で、学習外の予測誤差を比べました。
set.seed(42)
site <- rep(seq_len(10), each = 30)
site_shift <- matrix(rnorm(10 * 5, sd = 1.5), nrow = 10, ncol = 5)
markers <- site_shift[site, ] + matrix(rnorm(300 * 5), nrow = 300, ncol = 5)
colnames(markers) <- paste0("marker", seq_len(5))
site_effect <- rnorm(10, sd = 3)
outcome <- 10 + site_effect[site] + rnorm(300, sd = 2)
study <- data.frame(outcome = outcome, markers)
patient_fold <- sample(rep(seq_len(10), length.out = 300))
held_out <- function(groups) {
errors <- unlist(lapply(seq_len(10), FUN = function(k) {
train <- groups != k
study$outcome[!train] -
predict(lm(outcome ~ ., data = study[train, ]), newdata = study[!train, ])
}))
sqrt(mean(errors^2))
}
round(c(by_patient = held_out(patient_fold), by_site = held_out(site)), 3)
#> by_patient by_site
#> 2.648 3.337
患者を乱数で分けると2.648、施設を一つずつ外すと3.337となり、同じデータ、同じモデル、同じ10分割でも、外す単位を変えただけで誤差が26%大きくなっています。

ここで読み取りたいのは平均の差だけではなく、青の振れ幅は、別の施設へ持ち出した時の成績が施設によって大きく異なることを表しています。そのため、一つの数字だけで運用先の性能を表すことは厄介です。
時系列で利用できる情報の境界
将来の患者を予測したい場合に、過去と未来のデータを無作為に混ぜると、学習時点ではまだ得られない情報からモデルを作ることがあります。特に、時間が進むにつれて検査機器や対象患者の構成が変わる状況では、同時期のデータを混ぜた評価と、将来へ持ち出す評価は異なります。
そこで、時間順の評価では、ある時点までのデータで学習し、それより後の期間を予測します。また、学習に使う期間を広げていく方法と、一定期間の窓を移動する方法では、古い情報をどこまで残すかが異なります。
この点について、Robertsらは、時間、空間、階層構造を持つデータのCVを扱い、分割の構造を予測対象に合わせる必要性を論じています。ただし、まとまりを残した分割も常に適するとは限らず、意図せず難しい外挿問題へ変えていないかを確認する必要があります。
アウトカムが確定するまでの時間
学習対象者の登録日が過去でも、その人のアウトカムが将来まで観察して初めて確定する場合があります。そのため、登録日だけで学習集合を区切ると、モデルを作る時点では未確定だったアウトカムを使っている可能性があります。
また、同じ問題は、将来の検査値を含めて作った要約指標や、予測時点より後の処置を特徴量へ入れた場合にも起こります。したがって、分割に使う日時に加えて、各特徴量と正解が実際に利用可能になる日時も確認します。
そのため、観察窓やアウトカム判定期間が重なるデータでは、学習期間と評価期間の境界に間隔を設ける設計が必要になる場合があります。ただし、その間隔を一律に何日と決めるのではなく、予測期間、測定のまとまり、ラベルの確定時点から理由を説明します。
ランダムCVとの評価対象の違い
時系列のデータという理由だけで、あらゆるランダムCVが数学的に無効になるという意味ではありません。何を独立な単位とするか、依存が残るか、同じ分布内の予測か将来の変化への予測かによって、評価対象が変わります。
ただし、将来の運用を主張したい研究で、時間を混ぜたCVだけを根拠にする場合には、その主張と評価の間に隔たりが残ります。そのため私は、モデルを作れる時点とモデルを使う時点を、データ分割の説明より先に明記します。
イベントが少ない場合の層別化
二値アウトカムのCVでは、各foldのイベント割合を近付ける層別分割、stratified CVが使われます。特にイベントが少ない場合には、完全な無作為分割によって、一部の評価集合にイベントが入らないことがあります。
ただし、イベントが全体で5人しかいないデータを10分割するなら、全ての評価集合にイベントを含めることはできません。層別化は存在するイベントを各foldへ配分する方法であり、情報そのものを増やす処理ではありません。
分割にアウトカムを使う意味
ここで、層別分割ではアウトカムを見てfoldの割り当てを決めますが、これは、その人のアウトカムを予測因子や補完値へ入れる処理とは区別します。評価集合の構成を定める設計上の操作であり、モデルが評価対象者の正解を学習してよいという意味ではありません。
また、患者単位や施設単位の分離と、イベント割合の厳密な一致が両立しない場合があります。その際には、割合を揃えるために同じ患者を分割するのではなく、予測対象に対応するまとまりを守り、各foldのイベント数を報告します。
オーバーサンプリングの位置
同じ考え方は、少数クラスの複製やSMOTEにも当てはまり、全データを増やしてから分割すると、同じ元データに由来する対象が学習と評価へ入る可能性があります。そのため、こうした学習用の処理は各学習集合の中で行い、評価集合は対象集団の分布に対応する形で残します。
さらに、イベント割合を変えて学習したモデルの予測確率が、そのまま対象集団の発生割合へ対応するとは限りません。そのため、分類の当たり外れだけでなく、確率の較正も確認します。
なお、不均衡なアウトカムという理由だけで、サンプリングによる補正を必須とすることは避けます。使う学習方法、損失、予測確率の目的によって扱いが変わるため、何を改善したいのかを先に定めます。
損失関数によって変わる選択
連続アウトカムでRMSEを小さくする設定を選ぶことと、平均絶対誤差、MAEを小さくする設定を選ぶことは同じではありません。二乗誤差では、大きな予測ミスがより強く反映されるためです。
また、CVの決定係数を報告する場合には、比較する基準モデルを確認します。評価集合の平均を正解を見てから計算する定義と、学習集合の平均だけを予測として使う基準では意味が異なります。
ここで、対象者$i$の学習外モデル予測を$\widehat y_i$、同じ学習集合から得た基準予測を$\widehat y_{0i}$とすれば、基準に対する改善を次のように定義できます。
$$R^2_{\mathrm{CV,baseline}} = 1-\frac{\sum_{i=1}^{n}(y_i-\widehat y_i)^2}{\sum_{i=1}^{n}(y_i-\widehat y_{0i})^2} \tag{1}$$
式(1)は、モデルの二乗誤差が、学習データだけで作った基準予測よりどれだけ小さくなったかを表しています。分母が正なら、基準より悪いモデルでは負の値になり、観測値と予測値の相関係数を二乗した値とは異なります。
なお、今回のR出力ではRMSEを使っており、式(1)の決定係数は掲載結果として計算していません。そのため、ソフトウェアが返すR.squaredという名称だけで、この定義と一致すると判断するのは避けます。
二値アウトカムの確率誤差
イベントの有無を$y_i\in\{0,1\}$、学習外の予測確率を$\widehat p_i$とすると、Brierスコアは次の平均二乗誤差です。
$$\mathrm{Brier} = \frac{1}{n}\sum_{i=1}^{n}(y_i-\widehat p_i)^2 \tag{2}$$
式(2)は、予測確率と実際のイベントの有無との差を二乗して平均した値です。値が小さいほど、そのデータでは予測確率の誤差が小さくなります。
ただし、Brierスコアの大きさはイベント割合にも依存します。そのため、発生割合が異なる研究間で数値が小さい方のモデルをそのまま優れていると判断するのではなく、基準予測との比較や対象集団も併せて読みます。
また、別の損失としてlog lossがあります。
$$\mathrm{LogLoss} = -\frac{1}{n}\sum_{i=1}^{n}\left\{y_i\log\widehat p_i+(1-y_i)\log(1-\widehat p_i)\right\} \tag{3}$$
式(3)では、実際に起きた結果へ割り当てた確率が小さいほど、大きな損失になります。そのため、確信の強い誤予測を強く評価する性質があり、単純な正解率とは異なる基準です。
ただし、予測確率が0や1の場合には、誤予測で損失が無限大になるため、数値計算上の処理も記録します。また、MSE、AUC、log lossのうち結果が良く見える指標を解析後に主指標へ選び直すことは避け、研究の予測目的に合う指標を先に決めます。
分割の設計は運用の場面から決まる
施設、時点、イベント数のどれを扱う場合でも、分割によって決めているのは、運用時にモデルが利用できない情報を評価側へ残す範囲です。その範囲を予測の場面に合わせることで、評価対象も定まります。
この考え方に沿えば、別の施設で使うなら施設を外し、将来の患者に使うなら未来を外し、イベントが少ないなら分割可能な範囲で各foldへイベントを配ります。乱数で等分する方法がそのまま使えるのは、対象者が互いに独立で、時間の順序や施設などのまとまりを評価で保持する必要がない場合です。
続く次の記事では、得られた成績の不確実性をどう表すか、複数のモデルを比べる時、最終モデルを全データで学習する時、そして論文へ何を書くかを扱います。
参考文献
- Debray TPA, Collins GS, Riley RD, Snell KIE, Van Calster B, Reitsma JB, Moons KGM. Transparent reporting of multivariable prediction models developed or validated using clustered data: TRIPOD-Cluster checklist. BMJ. 2023;380:e071018.
- Roberts DR, Bahn V, Ciuti S, et al. Cross-validation strategies for data with temporal, spatial, hierarchical, or phylogenetic structure. Ecography. 2017;40(8):913-929.
- Van Calster B, McLernon DJ, van Smeden M, Wynants L, Steyerberg EW. Calibration: the Achilles heel of predictive analytics. BMC Medicine. 2019;17(1):230.
- Varoquaux G. Cross-validation failure: small sample sizes lead to large error bars. NeuroImage. 2018;180(Pt A):68-77.
- Arlot S, Celisse A. A survey of cross-validation procedures for model selection. Statistics Surveys. 2010;4:40-79.


