【入門】Kaggle本でデータ分析の技術を勉強する【第5章】

Python

今回は『Kaggleで勝つデータ分析の技術』の第5章、モデルの評価についてです。

この章では、モデルを適切に評価するためのポイントやテクニックを学びます。

Kaggleなどのデータ分析コンペでは、実際のデータを扱うため、機械学習の解説書にはあまり載っていないような手法やテクニックが数多く活用されています。これらを理解し自身で使えるようにしておくことはコンペだけでなく、実務でのモデル構築において非常に役に立ちます。特徴量の作り方,バリデーション,パラメータチューニングなどについて,一般的な書籍ではあまり言及されない暗黙知やポイントについて記述しています。

以下、第5章の備忘録(メモ、引用)と実装になります。

備忘録

  • どのようなバリデーション方法を採用するにしても、レコードは念のためシャッフルする

 

  • クロスバリデーションのfold数をむやみに増やしても、計算時間の増加に対して、得られる学習データ量増加の比率は小さくなっていく
    →fold数は4もしくは5で十分なことが多い

 

  • 多クラス分類で極端に頻度の少ないクラスがある場合はstratified k-foldを使うべき

 

  • 学習データとテストデータに同一顧客のデータが混在しないように分割されている場合、バリデーションデータと同じ顧客のデータが学習データに含まれると、その顧客の属性と目的変数の関係を学ぶことができて、本来の予測性能よりも過大に評価してしまう恐れがある
    →バリデーションにおいても顧客単位での分割(group k-fold)が必要

 

  • leave-one-outする際、GBDTやニューラルネットなどでアーリーストッピングを用いると、モデルの精度が過大評価されてしまうので注意

 

  • 時系列データのバリデーションは注意が必要

時系列データでは時間的に近いデータは似た傾向をとることが多いため、それらが学習データとバリデーションデータに混在していると予測が容易になり、モデルの性能を過大評価してしまう危険性が高いので注意が必要

  • 時系列データのテストデータに最も近い期間をバリデーションデータにするhold-outでは、テストデータを予測するモデルを作成する際に、最もテストデータに傾向が近いデータを学習に使えないのでもったいない
    →最終的にバリデーションデータも含めて再学習する方法もあるが、データを有効に使えない欠点があるので、クロスバリデーションを検討する

 

  • 時系列に沿ったクロスバリデーションでは、「学習データの期間を最初からとする方法」と「学習データの期間の長さを一定に揃える方法」がある
    →期間の決め方はデータの性質等による

 

  • 時間的な傾向変化が大きいようなデータのバリデーションについて

あまりに過去のデータまでバリデーション対象に含めると、過去のデータに対する評価の比重が大きくなり、テストデータに対する汎化性能と乖離する恐れがあります。その辺りのバランスは試行錯誤しながら決める必要があります。

 

  • 過去データを一挙に使わず、何かの基準に基づく一定期間のデータを用いて複数のモデルを作成し、最後にそれらをアンサンブルするのが有効な場合もある

 

  • 学習データとテストデータの分布が違う場合に注意
    →学習データと同じ分布のデータを予測するだけでは不十分で、テストデータの分布のデータで良い予測ができる必要

 

  • 学習データとテストデータの分布が同じかどうかを判断する手法としてadversarial validationがある(学習データとテストデータを結合し、テストデータか否かを目的変数とする二値分類を行ない、AUCが0.5だと分布が同じだと判断)

実装

一部のソースコードを手元で動かして理解を深めました。

ただコードを眺めるだけよりも、とりあえずコピペして、挙動が気になる部分を別個で動かして確認すると理解が深まりますね。

mimosom/study
Contribute to mimosom/study development by creating an account on GitHub.
Kaggleなどのデータ分析コンペでは、実際のデータを扱うため、機械学習の解説書にはあまり載っていないような手法やテクニックが数多く活用されています。これらを理解し自身で使えるようにしておくことはコンペだけでなく、実務でのモデル構築において非常に役に立ちます。特徴量の作り方,バリデーション,パラメータチューニングなどについて,一般的な書籍ではあまり言及されない暗黙知やポイントについて記述しています。

コメント