機械学習で注意するべきリーク(data leakage)!精度を過剰に高くしてしまう?!

こんにちは!
IT企業に勤めて、約2年間でデータサイエンティストになったごぼちゃん(@XB37q)です!

このコラムでは、リークについて紹介しています。

リークとは

リークとは
リークとは

リークとは2つの意味がある単語です。
1つ目はKaggleなどの分析コンペで発生する問題であり、設計上の問題です。
使うことが想定されていない予測に有用な情報が想定外に漏れて使える状況になってしまうことです。

2つ目は、モデル作成における技術的な問題で、バリデーションのやり方を間違えることによって、本来より不当に高い精度が出てしまうことです。

このコラムでは、2つ目の意味を表すリークについて紹介していきます。

リークが発生しやすい場面

リークが発生しやすい場面
リークが発生しやすい場面

時系列データを扱うタスクにおいて、学習用データと検証用データが時間で分割され、将来の予測が求められる場合、リークが発生しやすいです。
時系列データの場合、時間的な情報を考慮せずに特徴量の作成やデータ分割を行ってしまうと、本来より不当に高い精度が出てしまい、実運用の際には精度が低下してしまうといったことが起こってしまいます。

例えば、時系列データを単純にランダムに分割し、予測対象の時刻と近い時刻のデータを学習することによって、高い精度が出てしまうことがあります。
この場合、実運用で半年を予測したい場合、3カ月後や4カ月後などの将来の値を学習することが出来ないため、実運用では精度が低くなるといったことが発生します。

このようなリークを防ぐためには、データの分割に注意をすることが重要です。

リークを防ぐために

予測する時点より過去の情報のみを使用することが重要です。
時系列データの場合、リークが発生する理由は大きく2つです。

  1. 目的年数が、過去の目的変数の情報を含むことがある
    • 将来の来店数が増えている場合、それまでも来店者数が増えている可能性が高い
    • 10年後の平均気温が分かっている場合、8年後の平均気温を予測することは容易になる
  2. 目的変数以外のデータも、過去の目的変数の情報を含むことがある
    • ある月の行動ログが無い場合、それ以前に契約を解約した可能性がある
    • ある商品のプロモーション増加は、それ以前にその商品の販売が好調だった可能性がある

まとめ

  • リークとは
    • 使うことが想定されていない予測に有用な情報が想定外に漏れて使える状況になってしまうこと
    • バリデーションのやり方を間違えることによって、本来より不当に高い精度が出てしまうこと
  • リークが発生しやすい場面
    • 時系列データを扱うタスクにおいて、学習用データと検証用データが時間で分割され、将来の予測が求められる場合、リークが発生しやすい
  • リークが発生する理由
    • 目的年数が、過去の目的変数の情報を含むことがある
    • 目的変数以外のデータも、過去の目的変数の情報を含むことがある

参考書籍