ここまでの二つの記事では、正則化係数の選択を外側の評価から切り離すところまで扱いました。ただし、評価集合から情報が入る経路は、チューニングだけではありません。
たとえば、標準化に使う平均と標準偏差、単変量スクリーニングで残す変数、欠測値を埋める補完モデルは、いずれもデータから学習する処理です。これらを分割の前に済ませると、評価に使うはずの60人の情報が学習側へ入り、性能評価を楽観的にすることがあります。
そこで、ここでは予測を平均する場合との違いを確認したうえで、標準化、変数選択、MICE、評価対象者のアウトカムの扱いまでを取り上げます。実行結果の読み方は、ネストしたCVを動かすで扱いました。
予測を平均する場合との違い
反復CVでは、同じ対象者に複数の学習外予測(OOF予測)が得られます。この時、各予測の二乗誤差を平均する方法と、予測値を先に平均してから二乗誤差を計算する方法では、評価している量が異なります。
ここで、対象者$i$の反復$r$での予測値を$\widehat y_{ir}$、その平均を$\overline{\widehat y}_i$とします。この記号を使うと、二乗誤差は次のように分解できます。
$$\frac{1}{B}\sum_{r=1}^{B}(y_i-\widehat y_{ir})^2 = (y_i-\overline{\widehat y}_i)^2 + \frac{1}{B}\sum_{r=1}^{B} (\widehat y_{ir}-\overline{\widehat y}_i)^2 \tag{1}$$
式(1)は、各モデルの誤差を平均した値が、平均予測の誤差と予測値同士のばらつきの和になることを表しています。そのため、同じ予測値を使うなら、予測を先に平均した方が二乗誤差は小さくなります。
ただし、これは不正な操作を意味するのではなく、評価する予測手順が変わった結果です。単一の学習モデルの平均的な性能を知りたい場合と、複数モデルを平均した予測そのものを使いたい場合は分けて考えます。
また、CVで作ったモデルを最終的に平均して使うなら、外側の評価対象者は、平均に含める全ての構成モデルの学習から外れている必要があります。対象者自身を学習に使ったモデルの予測まで平均すると、その値は学習外予測ではなくなります。
標準化を学習集合だけで決める理由
連続変数から平均を引き、標準偏差で割る標準化も、平均と標準偏差をデータから推定する処理です。全データからこれらを求めると、評価集合の分布も変換規則の決定に使われます。
そこで、第$k$学習集合で計算した変数$j$の平均を$\overline x_{j,-k}$、標準偏差を$s_{j,-k}$とします。この時、評価対象者の値は次のように変換します。
$$z_{ij}^{(-k)} = \frac{x_{ij}-\overline x_{j,-k}}{s_{j,-k}} \tag{2}$$
式(2)では、評価対象者の値を、学習集合だけから決めた基準へ当てはめています。評価集合で新たに平均と標準偏差を求め、その評価集合だけを独自に標準化する処理ではありません。
また、学習集合の中で分散が0になる変数では、式(2)の割り算をそのまま使えません。同様に、学習時に現れなかったカテゴリを評価時に受け取る場合も、扱いを事前に定め、評価集合の結果を見て規則を変更しないようにします。
もっとも、全データで標準化したからといって、全ての学習方法で大きな楽観性が生じるとは限りません。変換に対して予測結果が変わらない手順もありますが、新しい患者を学習済みモデルへ渡す状況を評価するなら、実際の運用時と同じ変換の学習手順を再現する方が明確です。
データから学習する処理の範囲
この考え方は標準化だけに限らず、主成分分析、外れ値の閾値、低分散変数の除外、欠測補完モデル、特徴量の順位付けも、データから規則を決める処理です。正則化回帰では変数の尺度がペナルティの働きへ影響するため、標準化をどこで行うかも学習手順に含まれます。
反対に、研究開始前から決まっている単位変換や、評価対象者の情報から係数や閾値を学習しない固定式による特徴量作成は、全データへ一括適用しただけで漏洩になるとは限りません。区別する基準は、処理を全員へ適用したかではなく、その規則を評価集合から学習したかどうかです。
なお、今回のLASSO例では、標準化はglmnetによる各学習の中で行う構成にしています。そのため、自分で全データを標準化してから関数へ渡す処理は行っていません。
変数選択が先に終わっている解析
多数の候補変数とアウトカムの関連を全データで調べ、関連の強い変数だけを選んでからCVへ渡すと、係数推定時に対象者を外しただけでは独立した評価になりません。その対象者のアウトカムが、既に変数の選択へ使われているためです。
この偏りについて、AmbroiseとMcLachlanは、遺伝子発現データから予測変数を選ぶ解析で、選択過程を評価の外側へ置くことによる影響を示しています。そのため、モデルを学習する直前から分割しても、それ以前に全データで行った変数選択の影響は取り除けません。
選択過程も学習手順の一部
たとえば、単変量解析のp値、相関係数、機械学習モデルの変数重要度から候補を絞るなら、その選択も各学習集合の中でやり直します。さらに、残す変数の個数までデータから決める場合は、その個数の選択もチューニングの対象です。
また、外側の学習集合全体で変数を選んだ後に内側CVを行うと、内側の評価対象者の情報が変数選択へ既に使われています。外側評価の独立性は保たれていても、内側CVによる候補モデルの比較には選択の影響が入るため、変数選択も内側の各学習集合へ入れる必要があります。
一方、外部研究や測定上の理由から候補変数を研究開始前に固定している場合は、今回のアウトカムを見て変数を選んだ場合と区別できます。この違いを明確にするには、候補変数がデータに基づいて選ばれたのか、解析前から固定されていたのかを記載します。
全データで選んでから分けた場合
漏れの大きさを確かめるために、アウトカムと関連のない60個のマーカーを用意します。300人のアウトカムを平均10、標準偏差3の正規分布から生成しているため、真の予測関数を使った場合の母集団RMSEは3です。
そのうえで、60個のマーカーから相関の絶対値が大きい10個を選び、選んだ変数で線形回帰を当てはめます。変数を300人全員から選ぶ場合と、各外側学習集合の240人だけから選ぶ場合で結果を比べました。
set.seed(42)
markers <- matrix(rnorm(300 * 60), nrow = 300, ncol = 60)
colnames(markers) <- paste0("marker", seq_len(60))
outcome <- 10 + rnorm(300, sd = 3)
fold_id <- sample(rep(seq_len(5), length.out = 300))
screen <- function(rows) order(-abs(cor(markers[rows, ], outcome[rows])))[1:10]
predict_fold <- function(k, chosen) {
train <- fold_id != k
study <- data.frame(outcome = outcome[train], markers[train, chosen, drop = FALSE])
predict(lm(outcome ~ ., data = study),
newdata = data.frame(markers[!train, chosen, drop = FALSE]))
}
leaked <- unlist(lapply(seq_len(5), FUN = function(k) predict_fold(k, screen(seq_len(300)))))
honest <- unlist(lapply(seq_len(5), FUN = function(k) predict_fold(k, screen(which(fold_id != k)))))
held <- outcome[order(fold_id)]
round(c(leaked = sqrt(mean((held - leaked)^2)), honest = sqrt(mean((held - honest)^2))), 3)
#> leaked honest
#> 3.013 3.309
300人全員で変数を選んだ場合のRMSEは3.013だったのに対し、各学習集合の中で選び直すと3.309になりました。アウトカムと無関係なマーカーしかないにもかかわらず、評価対象者まで使って変数を選ぶと、母集団での最小RMSEである3に近い成績が得られています。

ただし、有限標本ではRMSEが3を下回ること自体は標本変動でも起こるため、その事実だけを漏洩の判定基準にはできません。ここで問題になるのは、変数選択に使った相関が評価集合60人のアウトカムからも計算され、全5分割で一貫して誤差が小さくなっていることです。
MICEを組み込む位置
欠測値がある場合、一度全データをMICEによる多重代入で補完してからCVへ進む構成があります。しかし、アウトカムを含めて全データを補完してから分割すると、評価対象者の情報が共変量の補完値へ入る可能性があります。
この順序について、Wahlらは、内部検証と多重代入を組み合わせる方法を調べ、全データを補完した後に性能を評価する構成で楽観的な成績が生じ得ることを報告しています。ただし、この研究は研究段階での内部性能評価を扱っており、将来の患者にも欠測がある場合の運用性能とは区別して読む必要があります。
学習と予測の処理を分ける構成
そのため、新しい患者への予測を評価するなら、評価集合を分けた後、学習集合を使って補完モデルや補完規則を作ります。評価集合には、予測時点で利用できる情報だけを使い、学習時に定めた予測手順を適用します。
さらに、ネストしたCVで補完方法や予測モデルまで選ぶ場合は、内側の評価集合についても同じ分離が必要です。外側学習集合の全体を一度補完してから内側CVへ渡すと、内側評価対象者の情報を隠した前処理にはなりません。
また、複数の補完データセットを使う場合でも、同じ対象者には同じ分割番号を割り当てます。補完値がデータセットごとに異なることと、対象者を学習側と評価側のどちらへ置くかを変えることは、別の操作だからです。
補完後の結果の合わせ方
さらに、各補完データセットで学習したモデルの予測を平均する場合と、係数を統合したモデルから予測する場合では、最終的な予測手順が異なります。ロジスティック回帰のように非線形変換を含むモデルでは、係数を平均してから確率へ変換した値と、各モデルの予測確率を平均した値は通常一致しません。
同様に、AUCやRMSEを複数の補完データセット間で平均する操作は、回帰係数と分散にRubinのルールを適用する操作とは別です。そのため、最終的にどの方法で予測値を作るのかを定め、その予測手順全体の性能を外側評価で測ります。
なお、生存時間解析における欠測データで扱う係数推定のための補完と、ここで扱う新しい患者への予測評価では、同じMICEを使っていても目的が異なります。その違いによって、補完時に利用できる情報と、評価対象者から隠す必要のある情報も変わります。
評価対象者のアウトカムの扱い
モデルを開発する学習集合では、観測済みアウトカムを欠測した共変量の補完に利用する方針があります。この処理は共変量とアウトカムの関連を補完モデルへ反映するもので、アウトカム自体を補完する操作とは分けて考えます。
一方、新しい患者について予測値を作る時点では、その患者の将来のアウトカムは分かりません。その状況を再現する外側評価では、評価対象者の真のアウトカムを共変量の補完、変数選択、モデル調整へ渡さず、予測が完成した後の採点だけに使います。
したがって、同じMICEを使っていても、評価対象者のアウトカムを利用できる段階が異なるため、ここでは関連や回帰係数の推定を目的とする多重代入と、将来の患者に対する予測性能の評価を分けて考える必要があります。
将来一人ずつ使える補完方法
ただし、評価集合を学習集合と分けて補完しただけでは、将来の運用手順を再現できているとは限りません。評価集合全体から新たな補完モデルを学習する方法では、新しい患者が一人だけ到着した時に同じ処理を再現できるかを確認する必要があります。
この問題について、Hooglandらは、新しい患者一人に適用できる欠測処理と、それを反映した予測モデルの評価を研究しています。そのため、予測時の欠測を許すモデルでは、新しい患者についてその時点で利用できる情報だけから予測値を返す処理まで、予測手順に含めて評価します。
また、MICEのignoreで一部の行をパラメータ推定から外しても、その指定だけで評価対象者のアウトカムが補完処理から除かれるとは限りません。選択した補完法がignoreに対応しているか、評価対象者の変数やアウトカムが他の行の補完へ使われる構成になっていないかまで確認します。
アウトカムが欠測した対象者の採点
評価対象者のアウトカムが未観測なら、その対象者について通常の二乗誤差や正誤を直接計算することはできません。また、モデル自身の予測値を正解として補完し、その値に対する誤差を計算しても、独立した予測性能の評価にはなりません。
もっとも、アウトカム欠測に対する多重代入や重み付けを組み込んだ性能評価法はありますが、その場合は欠測機構、評価対象の母集団、追加モデル、不確実性まで含めて考える必要があります。そのため、「アウトカムは常に補完できない」という一般則でも、「補完すれば通常のCVと同じ」という扱いでもありません。
さらに、予測値を作るために利用する情報と、欠測した性能指標を統計的に推定するために利用する情報は区別します。後者の補正にアウトカム関連情報を利用する研究設計まで全て予測時の情報漏洩と呼ぶと、予測手順と性能評価の問題が混ざります。
学習手順の範囲を先に書き出す
ここまでの例に共通するのは、データを見て決める処理を評価用の分割より外側で済ませていることです。標準化、変数選択、欠測補完のいずれでも、評価対象者から学習した情報が予測モデルへ戻れば、学習外での性能評価ではなくなります。
そのため、標準化に使う平均、残す変数、補完モデルの係数は、研究開始前から固定された定数ではなく、学習集合から推定する量として扱います。CVではモデル本体だけを分割の内側へ置くのではなく、予測値を作るまでにデータから学習する処理全体を同じ境界の内側へ置くことになります。
また、次の記事では、前処理ではなく分割の単位そのものを扱います。施設をまたぐ予測、時系列で先の情報を使わない設計、イベントが少ない場合の層別化では、誰と誰を同じ側へ入れるかによって評価値の意味が変わります。
参考文献
- Ambroise C, McLachlan GJ. Selection bias in gene extraction on the basis of microarray gene-expression data. Proceedings of the National Academy of Sciences of the United States of America. 2002;99(10):6562-6566.
- Cawley GC, Talbot NLC. On over-fitting in model selection and subsequent selection bias in performance evaluation. Journal of Machine Learning Research. 2010;11:2079-2107.
- Wahl S, Boulesteix AL, Zierer A, Thorand B, van de Wiel MA. Assessment of predictive performance in incomplete data by combining internal validation and multiple imputation. BMC Medical Research Methodology. 2016;16(1):144.
- Hoogland J, van Barreveld M, Debray TPA, Reitsma JB, Verstraelen TE, Dijkgraaf MGW, Zwinderman AH. Handling missing predictor values when validating and applying a prediction model to new patients. Statistics in Medicine. 2020;39(25):3591-3607.
- van Buuren S, Groothuis-Oudshoorn K. mice: Multivariate Imputation by Chained Equations in R. Journal of Statistical Software. 2011;45(3):1-67.


