パープルハット

※当サイトではGoogleアドセンス広告を利用しています

Python LeaveOneOutEncoding(category_encoders)の使い方





LeaveOneOutEncodingについて

ざっくりいうと、自分自身を除いた目的変数の平均値を割り出す手法です。
例) 以下のデータにおいて0行目をターゲットエンコーディングする際は、category=Aである1, 2行目を参考にするので0になる。



  • 参考サイト

Leave One Out — Category Encoders 2.6.1 documentation
Target Encodingとは?3種類のターゲットエンコーディングとPython実装方法を徹底解説




使用するデータ

import pandas as pd
df = pd.DataFrame({
    'category': ['A', 'A', 'A', 'B', 'B'],
    'target': [1, 0, 0, 0, 1]
})



df df2




使用方法

fit_transform

  • 学習と適用を同時に行います。
  • 例で示したように、dfの0列目なら1, 2行目を参考にするので0となります。
import category_encoders as ce
encoded_data = ce.LeaveOneOutEncoder(cols=['category']).fit_transform(df['category'], df['target'])
encoded_data




fit からの transform

  • 学習を行った後、適用をします。
  • 「Aは~、Bは~」というようにfitで学習してから、transformで適用するため、fit_transformと結果が微妙に異なります
  • 例えば、dfの0列目をターゲットエンコーディングする際は、「fitで0, 1, 2列目から求めたAなら0.33333でエンコーディングする」という結果を使用します。
import category_encoders as ce
enc = ce.LeaveOneOutEncoder(cols=['category']).fit(df['category'], df['target'])
encoded_data_2 = enc.transform(df['category'])
encoded_data_2






例(dfとdf2をターゲットエンコーディング)

  • データの宣言は省略しています。
  • リークが起こらないように、dfはtransform_fitで、df2はfit⇒transformとしました。
import category_encoders as ce

# dfの学習
encoded_data = ce.LeaveOneOutEncoder(cols=['category']).fit_transform(df['category'], df['target'])

# df2の学習
enc = ce.LeaveOneOutEncoder(cols=['category']).fit(df['category'], df['target'])
encoded_data2 = enc.transform(df2['category'])

# エンコーディングした結果を追加
df['category_encoded'] = encoded_data
df2['category_encoded'] = encoded_data2



df df2