データハンドリング 前処理

特徴量エンジニアリングまとめ

投稿日:

ツリーモデルと非ツリーモデルを中心に特徴量エンジニアリングのパターンを特徴量のデータ型と手法選択の考え方をまとめます。地味だけど脱初心者には重要なスキルです。

数値データ

ツリーモデルでは不要、非ツリーモデルでは不要。

正規化

特徴量の最大値が1、最小値が0になるように変換すること。(-1、1)の場合もある。外れ値がある場合、外れ値との相対的な距離は大きいままなので、外れ値処理が必要。

標準化

特徴量の平均0、分散1になるように変換すること。外れ値がある場合、外れ値との相対的な距離は大きいままなので、外れ値処理が必要。

ウィンザー化

特徴量を1%~99%パーセンタイルの範囲など一定の範囲外のデータを除外すること。外れ値処理などに活用できる。

参考:https://qiita.com/koga1020/items/9710cb3f7f65a00808e4

順位変換

特徴量の値に基づいて順位付けすること。データの間隔が全て1になるため外れ値の影響も小さくなる。

参考:https://note.nkmk.me/python-pandas-rank/

対数変換

特徴量を対数(log( x + 1 ))で変換する。+1はx=0の場合発散防止のために追加している。xのスケールが大きいときはその範囲を縮小し、小さいときは拡大する。

非線形変換で外れ値を他の値に近づけることができる。回帰分析などは正規分布を前提にしている場合が多いのですが、正規分布が右にゆがんでいる分布などときに有効。

参考: https://qiita.com/gyu-don/items/ecd483fd94f446b576a3

カテゴリカル/順序変数

label encoding

カテゴリカル変数を、アルファベット順やある特定に基準で順位付けする。非ツリーモデルでは使えない。ツリーモデルの場合、ラベルエンコーディングは順序情報を持っているため、ワンホットエンコーディングより精度が高くなる。

参考:https://qiita.com/uratatsu/items/8bedbf91e22f90b6e64b

freqency encoding

特徴量の各値の出現頻度で置き換える。出現頻度とターゲット変数で相関があるとき効果的。

参考:https://mikebird28.hatenablog.jp/entry/2018/05/19/213047

ranked frequency encoding

特徴量の各値の出現頻度で順位付けし、その順位に置き換える。

one hot encoding

特徴量の値を新しい特徴量とし、該当する場合1、しない場合0に変換する。

一つのカテゴリ変数から複数の変数(カラム)を作るため、大きなスパースなデータとなりメモリの消費が大きくなる。また、カテゴリ数の膨大なカテゴリ変数をワンホットエンコーディングすると、ランダムフォレストなどランダムに特徴量を選択するアルゴリズムの場合、数値変数などの非カテゴリカル変数の選択率が減少して精度が落ちる問題がある。

(この選択率、ハイパーパラメータでチューニングできる。xgboostでは、colsample_bytreeランダムフォレストでは、max_feature)

線形の依存関係がある特徴量の場合、線形モデルの回帰係数が一意に定まらない問題があることに注意(多重共線性)。多重共線性を避けるためには、k個のカテゴリがある場合一つカテゴリを削除してk-1とするダミーエンコーディングを使う。

参考:https://xica.net/vno4ul5p/

ラベルエンコーディングでは発生頻度の低い稀なカテゴリなどが取りにくく、重要な変数がうまく取れない場合があるため、One hot encodingはの処理に役立つ。

参考:https://data-bunseki.com/2019/06/22/pandas-dataframe-%E3%83%80%E3%83%9F%E3%83%BC%E5%A4%89%E6%95%B0get_gummies/

-データハンドリング, 前処理

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

python/pandas/DataFrame/データ型指定列抽出

データフレームカラムのdtypeを判定し任意のdtype列に絞り込む Contents1 メソッド1.1 パラメータ1.2 注意2 データの準備3 pandas.DataFrame.select_dt …

no image

データフレームの操作一覧

データフレームでよく使う機能をチートシートとしてまとめました。 Contents1 インデックス操作2 型変換3 欠損値4 ソート5 一括処理6 可視化7 結合8 集約9 重複10 条件抽出11 出力 …

no image

探索的データ分析 | PortoSeguro コンペ

Contents1 概要説明2 コンペの説明3 パッケージの読み込み4 データについて5 メタデータ6 記述統計6.1 間隔変数6.1.1 reg変数6.1.2 car変数6.2 calc変数6.3 …

no image

KFold + XGBoost + EDAチュートリアル | PortoSeguro コンペ

Contents1 概要説明2 コンペの説明3 目次4 コンペの説明5 イントロ6 データ準備6.1 データロード6.2 欠損値の確認6.3 中央値で欠損値補完7 特徴量とターゲットの分割8 データの …

no image

python/基礎/メソッド,関数,インスタンス

pythonでは値に対する処理方法として、メソッド、関数、インスタンスの3つがある。 メソッドと関数はと関数は機能としては同じだが、記述法が異なる。 関数:関数(処理対象)例)max([1,2,3]) …