はじめに
SIGNATEのコンペティションに参加。
- プロフィール ▶︎ https://qiita.com/yta-m
- 参加コンペ ▶︎ SIGNATE Cup 2024
- 順位 ▶︎ 87/1226位 (銅メダル獲得)
- 作成したコード ▶︎ Githubのリポジトリに保存 (2024/10/11現在、非公開中. 申し訳ありません)
コンペティション概要
旅行会社の保有する顧客データ(属性や志向、営業担当との接触履歴等)を元に、旅行パッケージの成約率を予測するモデルを構築するコンペティション。
詳細は公式HPを参照。
流れ
期間は約1ヶ月だったため、1週間ごとに計画を立てた。
- 1週目 ▶︎ 前処理、EDA
- 2週目 ▶︎ 特徴量の作成
- 3週目 ▶︎ 機械学習モデルの選定
- 4週目 ▶︎ ハイパーパラメータチューニング
1. 前処理
ここでは表形式で、前処理の概要のみ記載する。
コードはTOP記載のGitHubリポジトリを参照。
- "特徴量" ▶︎ 特徴量の名前
- "処理概要" ▶︎ 前処理の概要。特徴量ごとの処理内容を記載している。
- "Nan値埋め" ▶︎ Nan値をどのように埋めたかを記載している。なお、元のデータ数が小規模なため、行ごと削除する方法は取っていない。
特徴量 | 処理概要 | Nan値埋め |
---|---|---|
Age | 半角数字(int)への統一 | 平均値(整数) |
TypeofContact | ダミー変数化 | 無し |
CityTier | 無し | 無し |
DurationOfPitch | 秒数(int)への統一 | 平均値(60刻みで四捨五入) |
Occupation | ラベルエンコーディング | 無し |
Gender | 表記ゆれの修正、ダミー変数化 | 無し |
NumberOfPersonVisiting | 無し | 無し |
NumberOfFollowups | 外れ値処理(3桁値を100で割って1桁にする) | 無し |
ProductPitched | 'Basic', 'Standard', 'SuperDeluxe', 'Deluxe', 'King' に名寄せ(str) | 無し |
PreferredPropertyStar | 無し | 無し |
NumberOfTrips | 年での回数に修正(int) | 平均値(整数) |
Passport | 無し | 無し |
PitchSatisfactionScore | 無し | 無し |
Designation | 'VP', 'AVP', 'Senior Manager', 'Manager', 'Executive' に名寄せ後、この順にラベルを付与(int) | 無し |
MonthlyIncome | "月収○○万円"のような文字列値含め数値型(int)に修正 | 平均値(整数) |
customer_info | 以下3つに分割 | 無し |
↳婚姻状況 | "未婚", "離婚済み", "結婚済み", "独身" に分類 | 無し |
↳車の有無 | 有り:1, 無し:0 に分類 | 無し |
↳子供の人数 | 人数を数値型(int)に修正 | 無し |
2. モデル選定
LightGBM, XGBoost, CatBoostを試行。
アンサンブルは行わず、どれか1つに絞る方針としていた。
また、検証時はk Foldクラスを用いた.(分割数:10)
(結果提出したのはCatBoostで学習したモデル)
3. 特徴量生成
前処理の段階で既に着手していたが、結果としては"customer_info"を"婚姻状況", "車の有無", "子供の人数"に分けることで特徴量を作成した。
4. ハイパーパラメータチューニング
(この時点で、機械学習モデルは検証時のスコアより、CatBoostとしていた。)
グリッドリサーチでチューニングした。理由は以下。
- データが比較的小規模であったため
- 計算時間を短縮したかったため
チューニングの対象としたパラメータは以下。
- depth
- learning_rate
- l2_leaf_reg
- iterations
- bagging_temperature
- random_strength
他にもいくつか増やしたがスコアが下がったため、上記とした。
やりたかったが出来なかったこと
- 機械学習によるMonthlyIncomeのNan値埋め
- アンサンブル学習によるモデル構築
1つ目は時間に余裕が無く、2つ目は自分の知識不足のため着手できず。
感想
メダル獲得は素直に嬉しいし、cvスコア・lbスコア・最終スコア全体があまりシェイクしなかったので、そこそこ満足。
だが、トップ層でシェイクダウンがかなり起きており、運営側・参加者共にコンペに対し問題視しているようなので、あまり一喜一憂せず次の学習を進めていきたい。