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

Python

Kaggleで勝つデータ分析の技術』第3章の特徴量の作成について、前回の続きです。

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

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

備忘録

  • GBDTで効果的な変数の組み合わせについての著者の方の意見

GBDTは加減よりも乗除の関係性をとらえることが難しいため、加減よりも乗除の特徴量を加えた方が、モデルが反映できていなかった部分を補完しやすいのではないかと思います。

 

  • 特徴量として、テーブルデータの行方向(レコード)ごとに複数の変数を対象とした統計量が使える

 

  • 時系列データを扱う際は、基本的には予測する時点より過去の情報のみ使うこと
    • 特徴量作成:あるレコードの特徴量にその時点より将来のデータを使わない
    • バリデーション:学習データにバリデーションデータより将来のレコードを含めない

 

  • ラグ特徴量:過去の時点の値をそのまま使う特徴量

 

  • 周期的な動きがある場合、その周期に従って移動平均をとると、その影響を打ち消すことができる(移動平均:シフトさせて一定期間の平均をとった値)

 

  • どれくらい過去のデータまで集計すべきかは、データの性質による

古い情報を集計し過ぎると直近の状況を表さない平均となってしまう場合もありますし、長期間であまり傾向が変わらないようなデータであれば、長い期間で集計した方が有利な場合もあります。
より直近の情報に重みを付ける加重移動平均や指数平滑平均を適用する方法もあります。

 

  • テストデータのレコードの時点ごとに、使える過去の期間が異なる場合、テストデータの期間が分割時点から何期先であるかによって、個別に特徴量やモデルを作るアプローチがある

 

  • PCAは各特徴量が正規分布に従っている条件を仮定するため、歪んだ分布を持つ変数に適用するのはあまり適切ではない

 

  • 次元削減の手法は必ずしも全ての変数に適用する必要はない(一部の列のみに適用した方が良い場合もある)

 

  • 疎行列を扱えるなどの理由からか、PCAよりTruncatedSVDの方がよく使われているらしい

 

  • t-SNEでは非線形な関係をとらえることができるため、元の特徴量にこれらの圧縮結果を加えるだけで精度が大きく向上することがある
    (最近はt-SNEよりUMAPの方が高速などの理由でよく使われてるらしい)

 

  • クラスタリングにより分類されたクラスやクラスタ中心からの距離などが特徴量として使える

 

  • データの誤りを修正することでより質が高いデータで学習できる
    (自然言語を扱うタスクでは、前処理の1つとしてスペリングミスの修正がよく行われる)

 

言わずもがなですが、特徴量は作り方が無限に考えられるので、データをよく眺め、先行研究などの背景知識を使う必要がありますね。

実装

ラグ特徴量や次元圧縮など、個人的に直近で使いたいものを手元で動かして理解を深めました。

mimosom/study
Contribute to mimosom/study development by creating an account on GitHub.

 

クラスタリング結果の距離を特徴量に使うなどは、これまで考えたこともなかったので、とても勉強になりました。

こういった知識が体系的にまとまっているのは、この本の素晴らしいところですね。

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

コメント