Predicting Smartphone Addiction (Kaggle)

Solo project · 2026 · in progress

#machine-learning#data-science#python

Key Result

Best validated model (tuned XGBoost + one engineered feature, screen_residual) reaches CV mean ROC AUC 0.96499 (public leaderboard 0.96653) on a synthetic 691k-row dataset; CV and public-leaderboard rankings agree perfectly across every submission (Spearman = Kendall = 1.0). Private-leaderboard result is pending competition close.

Overview

The task is binary classification: predict whether a person is flagged as addicted from self-reported screen time, app usage, sleep, and lifestyle fields, scored by ROC AUC on a synthetic Kaggle dataset. Because the data is generated rather than collected, the project spends real effort auditing the generator itself — where the signal actually sits, whether it’s exploitable, and whether exploiting it would even be legitimate — rather than only asking what’s true about smartphone use in general.

Results

Experiment Model Feature set CV mean ROC AUC Public LB
E002 CatBoost raw predictors 0.96040 0.96151
E004 XGBoost raw predictors 0.96382 0.96539
E006 XGBoost raw + screen_residual 0.96445 0.96608
E010 XGBoost (tuned) raw + screen_residual 0.96499 0.96653

screen_residual — the gap between daily_screen_time_hours and the sum of its three named components — was found during EDA and only accepted after showing a consistent gain across both XGBoost and CatBoost (5/5 folds each). A subsequent ensembling investigation tested CatBoost, LightGBM, and diversity-hedge blends against E010; none beat it, and that negative result was kept and documented rather than discarded. E010 and E008 (CatBoost + screen_residual, a model-family diversity hedge) were selected as the two final submissions for judging — the private leaderboard result is pending competition close.

What I'd Improve

Once the competition closes: record the private leaderboard result, final rank, and percentile, and run a consolidation build. The README's setup instructions could also use a cold-clone test (fresh venv, fresh clone, verbatim commands) before calling the project complete.