0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[工事中]テーブルデータ汎用的特徴量

Posted at

列の調査

各列にどのようなデータが入っているか調べ、有効な列を特定する。

値が1種類しかない列

値の種類が1種類しかない列は学習に寄与しません。

次のコードは、カラムに含まれる値が1種類しかない列の列名を抽出します。

one_value_cols = [col for col in train.columns if train[col].nunique() <= 1]
one_value_cols_test = [col for col in test.columns if test[col].nunique() <= 1]

ある値がほとんどを占める列

列に含まれるデータのほとんどが、特定の1種類の値になっているとき、もはやその列には「特定の1種類の値 or それ以外」程度の情報しかない場合があります。

次のコードは、カラムに含まれる値のうち、特定の1種類の値が90%より多く占めている列の列名を抽出します。

big_top_value_cols = [col for col in train.columns if train[col].value_counts(dropna=False, normalize=True).values[0] > 0.9]
big_top_value_cols_test = [col for col in test.columns if test[col].value_counts(dropna=False, normalize=True).values[0] > 0.9]

nullが多すぎる列

列に含まれるデータのほとんどが、null値になっているとき、もはやその列には「null or not null」程度の情報しかない場合があります。

次のコードは、カラムに含まれる値のうち、null値が90%より多く占めている列の列名を抽出します。

many_null_cols = [col for col in train.columns if train[col].isnull().sum() / train.shape[0] > 0.9]
many_null_cols_test = [col for col in test.columns if test[col].isnull().sum() / test.shape[0] > 0.9]

特徴量作成

Frequency encoding

カテゴリ型の列を値の出現頻度に変換する。

df['cat'] = df['cat'].map(df['cat'].value_counts(dropna=False, normalize=True))

グループごとの偏差値

カテゴリ型の列でグルーピング、平均値を求め元の値から引き算する。厳密には偏差値は標準偏差で割るが、決定木系のモデルでは分布が変わらなければ影響がないので省略できる。

df['val_to_mean_cat'] = df['val'] - df.groupby('cat')['val'].transform('mean')
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?