This AI Hub × DACON competition asked participants to classify customers into segments A-E using credit card data from July through December 2018. I entered solo with three days remaining and worked on it from April 22-24, 2025. The training set contained 2.4 million rows, the test set 600,000, and each had 857 features. Given the feature count and short schedule, I started by inspecting the raw data and establishing a focused EDA process.
EDA criteria
The baseline trained XGBoost without separate preprocessing. I first used feature names to identify duplicate
fields and redundant features representing the same information, such as dates and elapsed durations. I then
examined correlations alongside XGBoost feature importance. Balance-change-rate features such as
변동률_잔액_B1M/B3M/B6M were highly correlated, so I retained only the one-month value for short-term change
and the 12-month value for long-term change.
The class distribution was severely imbalanced, with 1,922,052 examples in class E and only 144 in class B, and applying class weights produced a clearer gain. I then ran hyperparameter optimization with Optuna and tracked the experiments with Weights & Biases.
Score progression
The F1 score changed as follows:
| Stage | F1 score |
|---|---|
| Baseline | 0.6094777315 |
| Feature cleanup | 0.6100311547 |
| Class weights | 0.6233150159 |
| Optuna hyperparameter optimization | 0.6807361123 |
The largest gain came from Optuna optimization. I also tried training a separate model for each month and ensembling them, but it scored lower and was not used in the final submission.
I finished 9th overall, in the top 4%.

The result is available on the AI Hub public leaderboard.