ロジスティック回帰における数値カラムの特徴量エンジニアリング
概要・目的
ロジスティック回帰で連続値を扱うときに、スケールを合わせるために標準化がよく利用される。
ここで対象の特徴量を量子化し、カテゴリ変数のOnehotエンコーディングをすることで非線形な予測が可能になると期待できる。
ただし、量子化を行うには粒度とそれぞれの幅を決める必要がある。
この量子化の仕方を最適化したい。
方針
最適化する必要があるパラメータは
- 量子化の粒度
- 量子化の幅
の2つ。
それぞれのパラメータをoptunaで最適化することを考える。
やりたいことはベクトルの範囲内で閾値を選び、選んだ閾値ごとに値を揃えること。
この時の閾値の数・値を最適化したい。
課題
やりたいことに対して、このままではoptunaで探索の設計をすることができなかった。
optunaでtrial.suggest_int
かtrial.suggest_float
を利用することで決められた範囲内で値を選ぶことができる。
ただし、提案される値は1つであり複数個選び出すことはできない。
また、optunaは変数を指定しその変数ごとに値の探索を行う。そのため今回のように、順番のない変数の組み合わせを作成するための設計が難しい。
対策
分割数をもとに閾値を計算するアルゴリズムを考える.
その上で、
- アルゴリズム
- 分割数
をoptunaで最適化する。
アルゴリズムとして、以下の二つを考えた。もっといい方法あるかもしれない。
- n分位数での等分
- 特徴量に含まれる最大値最小値を元にn等分
環境
- 実行環境:Kaggle Notebook
- データセット:https://www.kaggle.com/datasets/johnolafenwa/us-census-data
- 課題:年収予測
- 正例:年収が50Kより大きい
- 負例:年収が50K以下
- 評価指標:AUC
検証方法
基準となるモデルを作り、最適化により精度が改善するか比較する。
モデルの種類 | カテゴリ特徴量 | 数値特徴量 |
---|---|---|
Baseline | OneHot Encoding | 標準化 + Null埋め(0) |
Optuna Optimizedモデル | OneHot Encoding | optunaで最適化して量子化 + OneHot Encoding |
アメリカの年収はそのままでもAUC0.9くらいあるので下に変更.
カテゴリカルな特徴量がないので実装しやすい
- 実行環境:Kaggle Notebook
- データセット:https://www.kaggle.com/datasets/adityakadiwal/water-potability
- 課題:飲料可能かどうか
- 正例:飲料可能
- 負例:飲料不可
- 評価指標:AUC
検証方法
基準となるモデルを作り、最適化により精度が改善するか比較する。
モデルの種類 | 数値特徴量 |
---|---|
Baseline | 標準化 + Null埋め(0) |
Optuna Optimizedモデル | optunaで最適化して量子化 + OneHot Encoding |
Note
飲料水のデータはどうやらダミーらしい。
余裕がある時に、実データに使いデータでも試したい。(業務で試せばいいか???)
結果
Notebook: https://www.kaggle.com/code/shinichikanehira/optimization-of-binning-features
AUC
モデル | 学習データ | 評価データ |
---|---|---|
Baseline | 0.526 | 0.528 |
Optimized | 0.617 | 0.573 |
評価データでAUC: 0.05
の改善が見られた。
(そもそもモデルの精度低すぎ?)
特徴量エンジニアリングの手段の一つとしていいありかもしれない。