【要約】【復刻版】SIGNATE Cup 2024 V4.0 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
筆者がコンペティションにおいて、モデルの予測精度を向上させるために直面した課題である。生データの品質が低く、そのままでは機械学習モデルに投入できない状態であった。具体的には以下の問題が発生していた。
- ・年齢データに「歳」や「代」などの文字列が混在し、数値として扱えない。
- ・年齢層によって成約率が大きく異なるが、連続値のままではその傾向を捉えにくい。
- ・
customer_info列に有用な情報が含まれる可能性があるが、形式が乱れており活用できない。
// Approach
筆者はデータの分布を可視化し、機械学習に適した形式へ変換するアプローチをとった。データの性質を理解した上で、以下のステップで加工を実施している。
- ・
pd.cutを用いて年齢を「10s」から「60s+」の年代別カテゴリに分割した。 - ・
str.stripやカスタム関数を用い、文字列や漢字表記の年齢を整数型へ変換した。 - ・欠損値を中央値で補完し、データの一貫性を確保した。
- ・成約率が高い20代・30代を識別するため、
Age_20s_30sというバイナリ特徴量を作成した。 - ・加工が困難な
customer_info列を一旦削除し、モデルの学習を優先した。
// Result
筆者が実施したデータ加工により、モデルの評価指標が改善した。分析の結果、年齢層と成約率の相関を捉えることに成功している。
- ・ROC-AUCは 0.8359 を記録した。
- ・SIGNATE Public Score は 0.8093 に到達した。
- ・20〜39歳が比較的契約しやすいという傾向を数値的に特定した。
- ・一方で、
customer_info列の活用は次回の課題として残された。
Senior Engineer Insight
> データクレンジングが予測精度に直結することを示す好例である。特に、ドメイン知識に基づいた特徴量作成は実務でも極めて重要だ。一方で、
customer_info のような重要そうな変数を、加工の難しさから即座に削除する判断は実務ではリスクとなる。情報の損失を防ぐため、正規化やパースの自動化を検討すべきだ。