リーケージ、パイプライン、およびグループ/時間/サイトの分割
このトピックを完了すると
評価前にトレーニングセットからテストセットへ情報が漏洩する経路を特定し、パイプライン内で前処理を分離し、患者、サンプル、サイト、または時間などのグループ単位に整合した分割を定義できるようになります。
分割単位が最優先
複数の行が同じ患者または独立したサンプルに由来する場合、行レベルのランダム分割により、同じエンティティからの情報がトレーニングセットとテストセットの両方に現れる可能性があります。未来を予測する問題では、時間的順序も保持する必要があります。分割は、モデル選択の後ではなく、まず質問とデータ構造に基づいて定義されるべきです。
パイプラインが前処理の範囲を固定する
from sklearn.pipeline import Pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LogisticRegression
model = Pipeline([ ("scale", StandardScaler()), ("classifier", LogisticRegression(max_iter=1000)),])model.fit(X_train, y_train)score = model.score(X_test, y_test)パイプラインは、トレーニングフォールドとモデルの両方で適合させる必要がある前処理ステップをバンドルします。パイプライン自体は、誤った分割やターゲットリーケージを自動的に検出するものではありません。
グループ分割
GroupKFoldなどのツールは、同じグループがトレーニングセットとテストセットの両方に同時に現れないようにする交差検証構造を作成します。すべてのフォールドでクラスバランスが保証されるとは限りませんので、グループ数とターゲット分布を確認してください。
リーケージ経路のチェックリスト
スケーリング、インピュテーション、または特徴量選択が最初にデータセット全体に適合する場合、前処理リーケージが発生する可能性があります。ターゲットリーケージは、特徴量にターゲットから直接派生した列、または予測時点以降にのみ判明する列から派生した列が含まれている場合に発生します。グループリーケージは、同じ患者、サンプル、またはサイトからの関連する行がトレーニングセットとテストセットに分割される場合に発生します。
各特徴量について、「実際の予測時点で利用可能か」を記録し、各前処理ステップがどのフォールドで実行されるかを確認します fit。分割後に計算された統計量のみをトレーニングセットから学習する必要があります。
解釈のために研究質問に戻る
テストスコアは、定義された分割とターゲットに対する汎化性能を表します。新しいサイト、時間、または患者に対する性能について語るには、それらの単位を評価に反映させる必要があります。
一般的な失敗例
- データセット全体に前処理の平均と分散を適合させないこと。
- 同じ患者/サイトをトレーニングとテストに分割しないこと。
- 時間予測のためにトレーニングに未来の行を含めないこと。
- パイプラインがすべてのリーケージを解決すると主張しないこと。
重要なポイント
- 分割単位は研究質問とデータの階層によって決定されます。
- パイプラインはフォールドローカルな前処理を支援します。
- グループ、時間、サイトにわたる汎化には、異なる評価設計が必要です。
次のトピック
次の回では、特徴量選択とネステッドチューニングを使用して、フォールド内の選択情報を分離します。
参考文献
- scikit-learnの一般的な落とし穴: https://scikit-learn.org/stable/common_pitfalls.html
- GroupKFold: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GroupKFold.html
- Bioconductor OSTA実験デザイン: https://bioconductor.org/books/release/OSTA/pages/bkg-exp-design.html
この回のパイプライン例は、BioStatPyによって独立して作成されました。