予測モデルのvalidationには種類があります。
よく行われるのはdata splittingや10-fold cross-validationかと思います。
でもそれらには特有のlimitationがあり、使うべき手法は、実は決まっています。
この記事では、色々あるinternal validationの種類と特徴についてまとめました。
Contents
Validationの種類について解説
validationとは、その予測モデルのvalidityを評価することです。
2種類あり、
Internal validationとは、そのデータ内でのvalidityの評価
External validationとは、そのデータと関係あるであろう集団での評価
です。
Internal validation、データを7:3に分けたりして行っていませんか??
残念ながら、それは推奨されない方法です。。。
この記事では、Internal validationの種類と特徴について、概説していきます。
Internal validationの種類
そのデータを使ったvalidationです。
主に
・apparent(データ全部でtrainingを行い、データ全部でvalidationとする)
・data splitting
・cross-validation
・Bootstrap
の4つがあります。
*Apparent validationは明らかなので、飛ばします。
Data splitting
医学論文でよくみかけるやつです。
70%でtrainingして30%でvalidationする、みたいな。
この比は1:1〜2:1がよいと言われているようですが、、、、
これはやらないほうが良いです。
理由は以下の通り:
✔予測因子とアウトカムの分布がバラバラになる
そもそも医学研究はサンプル数が少ない+予測因子が多いのが問題です。
ただでさえ少ないサンプルを分けてしまっては、目を当てられない自体になりえます。
・例えば、ある大事な予測因子(心筋梗塞の既往)が、参加者の2%にしか認められなかったとします。
→全員trainingに含まれなかったら?
→その因子による予測能は「ゼロ」ということです。明らかに間違いですね。
✔モデル、モデルの評価とも不安定になる
どちらもn数が少ないから、不安定になります。
不安定というのは、standard errorが大きい、というふうに考えればOKです。
✔データの別れ方によって結果が全然異なってくるので、研究者が良い結果が出るまで繰り返す
医学研究で用いられるデータは非公開の場合が多いです。
研究者からしたら、論文が通ればOK。
そしたら必然的に、良い結果が出るまで繰り返し検証されてしまいます。
だから、data splittingで行われた予測モデルの論文は、ほぼ信頼するに値しないと言っても過言でありません。
ということで、data splittingは止めましょう。
Cross-validation [CV]
10-fold CVとは、
・データを10個に分ける
→その内9個でモデルを作り、残りの1つで評価をする
→これを10回繰り返す(結果的に、全ての参加者が評価の対象となる)
→10回のパフォーマンスを平均したものをestimateとする
という流れです。
XX-foldのXXを多くすればするほど、モデルは安定しますが、variabilityが過小評価されることになります。
どういうことか?
極端なのは、「1人を除いた全員でモデルを作り、その一人で評価する」という方法ですね。
これをJack-knifeといいます。
もしn=1000でJack-knifeのCVを行ったら?
(どのような工程であれ)作られるモデルは同じになります。999人使っているから。だから、ほぼapparent validationと同じ。
なぜapparent validationがダメかを思い出したら、それだとoptimisticになりすぎるからでした。
*参照:overfitについて
こういう場合は、明らかにvariability(データのバラバラ加減)が過小評価されており、そのため外的妥当性が低いモデルとなってしまいます。
これがlimitationですが、そういう場合Bootstrap validationというオプションがあります。
Bootstrap validation
Bootstrap法とは、ランダムに元の集団から抽出することを人数分繰り返し、元の人数分の仮想集団を作り出すことでした(当然重複あり)。
300 bootstrapsといったら、それを300回繰り返し、300個のデータセットを作ること。
Bootstrap validationとは、
・ある一つのBootstrapで作られたデータを基にモデルを作成する
→そのBootstrapデータと、オリジナルのデータの2つで効果を検証する
→Bootstrapデータの方が予測精度が良いですよね(optimism)
→Bootstrapとオリジナルでのパフォーマンスの違い=Optimismです
→オリジナルでの予測能から、optimism分引きます
→これが結果
→これをBootstrapの回数分繰り返します
これはかなり安定したvalidationとなります。
なぜなら、元のサンプルサイズでモデルを構築している上、optimismも調整した結果としているから。
特に予測因子がサンプル数に比べてかなり多い場合に有効です。
✔limitationは、モデルの構築過程を全て反映させる事が難しいという点です。
例えばvariable selectionを伴う場合。
異なるbootstrapで違うモデルができてしまいます。
どのモデルが正しいのかはわかりません
→良いモデルだけを選ぶのは、明らかにoptimismを過小評価することになります。
*この問題はCVでも同様です。
欠損値に対するimputationをどのタイミングで行うか
CVやBootstrap validationを行う際、欠損値があってはいけません。
多くの場合imputationを行いますが、それをどのタイミングでやるべきか。
・まずimputationをして、欠損値のないデータを作ってから、bootstrapなり行う
・bootstrapされたデータ内で、その都度欠損値処理を行う
詳細は省きますが、そしてほとんどの方が行っていると思いますが、まずimputationする方法でよいだろうと考えられています。
結論
Internal validationの方法として、data splittingはやらない方が良い。
cross validationとbootstrappingのコンセプトを理解する。
ではまた。