💭

「【第40回_Beginner限定コンペ】銀行の顧客ターゲティング」に参加しました

2023/12/04に公開

概要

2023年11月に開催された【第40回_Beginner限定コンペ】銀行の顧客ターゲティングに参加しました。

結果

結果

43位/188人の 0.8510367 で、Tier5昇格ボーダーの AUC=0.850847 を越えたので、Intermediateに昇格することができました。

参加記録

リポジトリ

https://github.com/Memories-of-Sun-and-Moon/SIGNATE4B_040_Bank_Customer_Tartgeting

11/22

JOINED

前々からこのコンペの存在を把握していたが、手を動かし始めるまで半月以上かかってしまった。

とりあえず手元にあった「kaggleスタートブック」と同じような実装をしてみた。

ロジスティック回帰をしてみたかったのだが、全然値が合わない上にバグりまくって全然ライブラリが動いてくれない。

途中で y=0 が大量にある、不均衡なデータの予測のコンペであることに気づき、balanced というオプションを付けて動かしてみるも、目で見てわかるレベルで値が合わなかった。

11/24

コンテストの説明欄を覗いてみると、どうやら同じ内容のコンペが開催されている[1]ことを知った。とりあえずそれに準拠して特徴量を作ってみることにした。(値が全然変わっていることに気づいたのは数日後)

モデルの評価をする方法が、現状提出するしかなかったので、打開策をネットでググる。K-Fold というテクニックがあるようなので、それを実装した。

7回目の提出。スコアは 0.5075656776769024

K-Fold で算出していたのはACCだったが、本コンペで使われている指標はAUCなことに気づかず、しばらく悩む。

11/25

悩んでいる内に、日付が変わった。指標がAUCであることに気づく。

前日から「kaggleスタートブック」のlightGBMを使用したモデルを真似て作っていた。適当に使えなさそうな特徴量を抜いたものでモデルを構築してみた。

8回目の提出。スコアは 0.7215746258729863

思い切って全部のデータを利用したモデルを組んでみる。手元のスコアは0.8464308663310559
となった。

9回目の提出。スコアは0.8406472773414975

前日に軽く作った特徴量がまったく違うデータを基にした物だと気づき、修正した。

その他、

  • 最終接触時間の外れ値を NaN
  • 無職と退職者に NotWorking フラグ

などの処理をした。

10回目の提出。スコアは0.8434566903757706

しばらく時間が経ってから、ハイパーパラメータの調整に挑戦した。

12回目の提出。スコアは0.8440537344450356

11/26,27,28

スコアが惜しいこともあり、パラメータの調整に全力を注いでしまった。しかし、得られるものはあまりなかった。(Optunaの使い方が分かったのはちょっとうれしかったけど)

11/29

改めてデータを見直して、有効そうな特徴量を探した。

  • previousの2値化
  • 「最終接触時間」と「接触回数」の積を取って、「合計接触時間」の概算

24回目の提出。スコアは0.8510367

反省点

知らないことばかりだったので、やれることはやれるだけやった。そのうえで、パラメータ調整は本当に最後の手段だということを理解した。

次回に向けて

次回コンペに出る際には、しっかりと特徴量を作成することに注力したい。

解法の管理について

jupyter notebookが便利だったので次回からも使用したいが、リポジトリのデータを圧迫してしまったり、いちいち演算をしたタイミングで変更判定になってしまったりと、Git/GitHubとの相性が良くなかった。このあたりについても改善していきたい。

脚注
  1. (https://signate.jp/competitions/1/tutorials/46) ↩︎

Discussion