<機械学習>

Santander Value Prediction Challengeのカーネル解説

今回はkaggleの以下のkernelの日本語訳を行います。

https://www.kaggle.com/alexpengxiao/preprocessing-model-averaging-by-xgb-lgb-1-39


日本語訳


概要

このnotebookでは、データを前処理して 「gradient boosting tree models」に投入して。 public leaderboardで1.39のスコアを獲得。

ワークフローは以下

1.データ前処理 データ前処理の目的はより高いtime/space効率を得るためである。 「定数(?)特徴量の除去」、「重複した特徴量の除去」、「重要でない特徴量」の除去等 ここでのキーは、前処理が精度に影響を与えないことである。

2.特徴量変換 特徴量変換の目的は、データをよく把握する助けになること、そして過学習を防ぐことである。 やったことは ・トレーニングデータとテストデータで分布が異なる特徴量を落とすこと。 ・統計量を特徴量に追加したこと。 ・低次元表現(low-dimensional representation)を特徴量に追加。

3.モデリング Xgboostとlightgbmの2つのモデルを使用した。 最終的な予測のため2つのモデルを平均した。


ステップ1

トレーニングデータとテストデータをロードします。重複カラムを除去します。

・最初に重複したカラムを削除

・次に32桁までに落とした上で重複カラムを削除(ループしながら比較)


ステップ2

特徴量を重要度で選択する。ランダムフォレスト(回帰?弱識別機?)を使って特徴量の重要度を得る。トップからNUM_OF_FEATURES(=1000)の重要度の特徴量を選択する。

NUM_OF_FEATURES(=1000)はここではチューニング可能なハイパーパラメータである。


ステップ3

トレーニングデータとテストデータをKolmogorov–Smirnov検定(コルモゴロフ-スミルノフ検定)で評価します。これは両側検定の帰無仮説で2つの独立したサンプルが同じ分布から抽出されたものかを検定する。異なる分布だった場合はこの特徴量は除去する。(汎用的なモデルにならないため)

THRESHOLD_P_VALUE(P値) と THRESHOLD_STATISTIC(KS統計量) はハイパーパラメータである。


ステップ4

統計的な特徴量を追加する。さらに低次元表現の特徴量を追加する。

※SparseRandomProjectionは次元削減のアルゴリズム


ステップ5

クロスバリデーションのメソッドとモデルを定義する。 xgboostとlightgbmを使用する。 ハイパーパラメータはグリッドサーチによって既にチューニングされている。

※注意 AveragingModels(BaseEstimator, RegressorMixin, TransformerMixin)は多重承継している。 2つのモデルを格納しておいて学習させる。 2つのモデルの予測結果の平均を返す。