pfn-researchから公開されているxfeatという特徴量エンジニアリングのライブラリがあります。
【リリース】特徴量エンジニアリングのライブラリ xfeat を公開しました。データフレームから特徴量を作成するための各種エンコーダーを実装しています。cuDF を使うことでエンコーダーによっては 10~30 倍の高速化が可能となります。Code: https://t.co/IbqRET9YA2 Slides: https://t.co/8CY0IdCuJM pic.twitter.com/xM5HxRMQtj
— PFN-tech account (@preferred_jp) 2020年6月19日
私自身はは特徴量エンジニアリングの「と」の字もよくわかっていませんが、こちらのライブラリを使用すると何やら特徴量エンジニアリングがかんたんに書けると聞いて、なんとなく使ってみたくなりました。 ということで、xfeatを使っていろいろやってみたいと思います。
xfeat is なに?
pfn-researchが公開している特徴量エンジニアリングのライブラリです。
スライドによる説明はこちら。
使い方についてはこちらの記事が非常にわかりやすいので、こちらも合わせて確認するとよいかと思います。
試しに使ってみる
さて、本題です。実際に使って色々やってみたいと思います。
チュートリアルはこちら。
適当にチュートリアルのコード見てみる
カリフォルニア住宅価格のデータセットを使用して、とりあえず特徴量エンジニアリングをやってみたいと思います。
特徴量を自力で作る際にちょっと記述するだけで特徴量の組み合わせを勝手に生成してくれるので、何も考えなくても適当に作成できます。
こんな感じでカラムの組み合わせを定義することで自動で特徴量を作ってくれるみたいです。
# カラムを組み合わせた特徴量を作成するパイプライン encoder = Pipeline([ SelectNumerical(), ArithmeticCombinations( drop_origin=False, operator="+", r=3, output_suffix="", ), ]) encoder.fit_transform(df)
今回は数値だけを取り扱っていますが、カテゴリ変数であってもかんたんに操作できるようです。
Feature Selection
新しい特徴量を作ることができることは確認できたので、今度はFeature Selectionをやってみます。
サンプルコードはこちらです。
この場合、ベースにあるのはLightGBMのFeature Importanceの値で、その重要度によってFeature Selectionをするようです。
下記のところで特徴量を新しく作って学習しています。
print("After adding interaction features:") df = feature_engineering(df) evaluate_dataframe(df, data.target)
更に、Feature Selectionは、下記のところでやってますね。
print("After applying GBDTFeatureSelector:") df = feature_selection(df, data.target) evaluate_dataframe(df, data.target)
もとのサンプルコードをほぼそのままですが、実行してみるとFeature Selectionによって精度が高くなっていることが確認できます。
Feature Selection + Optuna
さらに、上記のコードだとFeatureはThresholdが固定値になっていました。 これはOptunaと組み合わせることでThresholdの値に関しても調整しながらFeature Selectionができるようです。
特にThresholdの値を調節しなくても、勝手にいい感じにFeature Selectionしたいときには重宝しそうです。
参考文献
こちらの文献を参考にさせていただきました。
感想
ちょっと使ってみたかったので、チュートリアルをなぞってみた次第です。
特徴量エンジニアリングが大事だとわかってはいるものの、個人的にはあまり得意ではないのが正直なところです。 この手のツールを上手に使えるといろいろ捗るところもあると思うんで、しばらく使ってみて慣れていきたいと思います。