対象はJDLAの「ディープラーニングの社会実装に向けて」Q14です。公式正解は Q14=A:検証時は高精度でも、導入後は精度が落ちる。原因として設問が挙げるデータリーケージは、外部への情報流出ではなく、評価時に本来使えない情報が学習側へ入り込むことです。
Q14:検証時だけ高い性能が出る
機械学習では、未知のデータに対する性能を確かめるため、学習用と検証用、必要に応じて最終評価用のデータを分けます。ところが検証用データの情報が前処理や特徴量作成を通じて学習へ入り込むと、検証スコアは良くても実運用では性能が落ちます。これがデータリーケージです。
典型例は、全データを使って平均・標準偏差を計算してから学習用と検証用に分ける方法です。検証用の分布を学習時に知ったことになります。もう一つは、購入を予測したいのに「購入後に付いた会員ランク」を入力に使う例です。運用時の予測時点では存在しない情報なので、検証時に高精度でも利用できません。
同じ利用者の記録が学習と検証の双方に入ることもあります。利用者ごとに未知の人へ適用する目的なら、行単位のランダム分割では過大評価になり得ます。時間の先後が重要なら、未来のデータを過去の予測へ混ぜない分割が必要です。評価の単位と運用時の「未来」を先に決めます。
見つけ方と防ぎ方
まず予測時点を一文で定義します。「来月の解約を今月末に予測する」なら、来月の問い合わせ履歴は使えません。次に、利用者・店舗・時間など、同じ対象が分割をまたぐと問題になる単位を決めます。分割後に、標準化や欠損補完などの変換を学習データだけで学習し、その変換を検証データへ適用します。
検証値と本番結果の差には、環境変化やラベルの品質など、漏洩以外の理由もあります。Q14では、検証データを学習へ混入させたという条件が直接示されるため、漏洩を選びます。スコアが異常に高い場合も、まず特徴量の作成時点と分割の順序を点検します。
自分で確かめる
練習:病院の再入院予測モデルで、退院後に確定する診療費を説明変数に入れて検証したら高精度でした。退院時に予測したいなら、何が問題ですか。どう直しますか。
解答:予測時点では診療費が確定していないため、未来の情報が混入しています。退院時までに確定した項目だけで特徴量を作り、患者単位や時間順など目的に合う分割で再評価します。
覚える一行:評価は「その時点で使える情報だけ」を「未知の対象」で試して初めて意味を持ちます。
参照:JDLA公式問題と解答、現行シラバス。