Snake Trainers - Smadex Revenue Prediction Challenge

🎯 Inspiration Vam voler demostrar que amb les tècniques adequades, es pot construir un model precís, ràpid i elegant.

Machine Learning pràctic amb impacte real en negocis Dades massives (20M+ instal·lacions) que requereixen optimització Desequilibri extrem - només el 8.6% dels usuaris genera ingressos Velocitat crítica - els models han de predir en <5ms en producció

🛠️ What it does Snake Trainers és un sistema de predicció de revenue per a instal·lacions d'apps mòbils que: Core Functionality

Prediu ingressos IAP (In-App Purchase) a 7 dies vista Identifica "whales" - usuaris d'alt valor abans que gastin Processa milions de registres eficientment amb Dask Genera insights visuals amb un dashboard interactiu

Key Features

📊 EDA Dashboard amb Recharts per visualitzar patrons 🤖 Model híbrid LightGBM optimitzat per MSLE ⚡ Pipeline ràpid - entrenament en minuts, no hores 🎯 Target encoding amb smoothing per categories 🔍 Feature engineering basat en comportament D1/D3

🏗️ How we built it Tech Stack Frontend/Viz: React + Recharts + Lucide Icons Backend/ML: Python + LightGBM + Dask + Pandas Data: 20M+ Parquet files (Oct 1-12, 2025) Architecture 📂 Data Pipeline ├── Dask (parallel loading) ├── Feature Engineering │ ├── Temporal (hour, weekday, peak_time) │ ├── Behavioral (D1 revenue, buyer signals) │ ├── Categorical (target encoding) │ └── Product (price, app age) └── Train/Test Split

🤖 ML Pipeline ├── LightGBM Regressor │ ├── Log(1+revenue) transformation │ ├── MSLE optimization │ └── Regularization (L1/L2) └── Validation (20% holdout)

📊 Visualization └── React Dashboard ├── Overview (distribution, imbalance) ├── Temporal (hourly, daily patterns) ├── Segments (country, category) └── Features (importance, strategies) Key Design Decisions

Sampling Strategy: 20% del train per velocitat sense perdre precisió Log Transformation: log1p() del target per MSLE D1 Signals: iap_revenue_d1 i buyer_d1 són els millors predictors Smoothed Encoding: Alpha=20 per evitar overfitting en categories rares Fast Model: 100 iterations + n_jobs=-1 per optimitzar temps

💪 Challenges we ran into

  1. El monstre de les dades (20M+ rows) Problema: Carregar tot el dataset trigarà hores i requereix 32GB+ RAM Solució: python# Dask + sampling intel·ligent ddf_train = dd.read_parquet(path, filters=date_filters) ddf_train = ddf_train.sample(frac=0.2, random_state=42)
  2. Desequilibri brutal (91.4% zeros) Problema: El model prediu tot a 0 i té bon MSLE igualment Solució:

Log transformation del target Oversampling de buyers amb is_unbalance=True Focus en D1 signals que separen compradors de no-compradors

  1. Target Leakage subtil Problema: Usar buy_d7 o retention_d3_to_d7 fa trampes! Solució: python# NOMÉS variables disponibles el dia 0! exclude_cols = [ 'iap_revenue_d7', # Target 'buyer_d7', # Derivat del target 'buy_d7', # Futur (leakage!) 'retention_d3_to_d7' # Futur (leakage!) ]
  2. Velocitat vs Precisió Problema: Models grans (1000+ trees) són lents en producció Solució: Trobar el sweet spot pythonn_estimators=100, # Equilibri velocitat/precisió max_depth=6, # Control overfitting num_leaves=31, # Complexitat moderada learning_rate=0.1 # Convergència ràpida
  3. Categorical Encoding amb Dask Problema: get_dummies() falla amb categories desconegudes Solució: pythondf['category'] = df['category'].astype('category') df['category'] = df['category'].cat.as_known() # Força Dask! df = dd.get_dummies(df, columns=['category'])

🏆 Accomplishments that we're proud of 🎯 Model Performance

MSLE: 0.188 (baseline) → 0.16 (optimitzat) → ~0.12 (amb D1 features) Velocitat: Entrenament en 2-3 minuts vs 30+ minuts inicial Precisió: Identifica correctament el 80%+ dels high-value users

📊 Dashboard Visual

4 seccions interactives (Overview, Temporal, Segments, Features) Gradient background amb efectes moderns Insights accionables per negoci (peak times, top countries, etc.)

⚡ Optimitzacions

5-10x speedup amb sampling + feature selection intel·ligent Memory-efficient: Funciona amb 8GB RAM Production-ready: Pipeline clar i reproducible

🧠 Insights de Negoci

iOS genera 85% més revenue que Android Peak time (18-24h) genera 133% més que night hours US genera 243% més que altres països D1 revenue és el predictor #1 (95% importance)

📚 What we learned Technical Learnings

Dask != Pandas

cat.as_known() és essencial per OHE compute() smart: no tot al final! Filtres a read_parquet() estalvien GB de RAM

LightGBM Tricks

python # MSLE optimization objective='regression' # No 'regression_l1'! metric='rmse' # Log-space RMSE = MSLE

# Speed hacks subsample=0.8 # Row sampling colsample_bytree=0.8 # Feature sampling n_jobs=-1 # Parallel boost

Feature Engineering > Model Complexity

iap_revenue_d1 + buyer_d1 > 20 features derivades Target encoding amb smoothing crucial per categories Temporal features (peak_time) milloren 10-15% MSLE

Imbalanced Data Strategies

Log transformation del target is_unbalance=True en classificadors Sample weights pels compradors

Soft Skills

Iteració ràpida > perfecte al primer intent Visualització early ajuda a entendre problemes Documentation estalvia hores de debugging Kaggle forums/discussions són or pur

🚀 What's next for Snake Trainers Short-term (1-3 mesos)

Two-Step Model

python P(buyer) × E[revenue | buyer]

Classificador per buyer_d7 Regressor només pels buyers Pot millorar MSLE 20-30%

Més Feature Engineering

Interaccions: country × hour Ratios: ad_revenue_d1 / sessions_d1 User history embeddings

Hyperparameter Tuning

Optuna per search automàtic Cross-validation 5-fold Target: MSLE < 0.10

Mid-term (3-6 mesos)

Multi-Task Learning

python # Predict D1, D3, D7 simultaneously outputs = [iap_revenue_d1, iap_revenue_d3, iap_revenue_d7]

   - Shared representations
   - Regularització implícita
   - Millor generalització

5. **Neural Networks**
   - Embeddings per categories
   - LSTM per user sequences
   - Attention mechanisms

6. **Ensemble**
   - LightGBM + XGBoost + CatBoost
   - Weighted averaging
   - Stacking meta-model

### Long-term (6+ mesos)

7. **Production Deployment**
   - Docker container
   - FastAPI endpoints
   - Redis caching
   - Monitoring amb Prometheus

8. **Real-time Predictions**
   - Kafka streaming
   - <5ms latency
   - A/B testing framework

9. **AutoML Pipeline**
   - Feature selection automàtica
   - Model retraining scheduler
   - Drift detection

10. **Business Integration**
    - Dashboards executives (PowerBI/Tableau)
    - ROI calculator per campanya
    - Budget optimizer

---

## 🙏 Acknowledgments

- **Smadex** per aquest repte tan realista i interessant
- **Datathon.cat** per organitzar l'esdeveniment
- **LightGBM/Dask communities** per documentació excel·lent
- **Claude AI** per pair programming i debugging sessions 😉

---

## 📦 Repository Structure

snake-trainers/ ├── notebooks/ │ ├── 00_eda_baseline.ipynb │ ├── datathon-3.ipynb (v1) │ └── datathon-5.ipynb (optimized) ├── dashboard/ │ └── smadex_eda_dashboard.html ├── models/ │ ├── lgb_regressor.pkl │ └── feature_importance.csv ├── submissions/ │ ├── submission_final.csv │ └── submission_rapid.csv └── README.md

🏃 How to Run bash# 1. Install dependencies pip install lightgbm dask pandas numpy scikit-learn

2. Run training

python train_model.py --sample 0.2 --n_estimators 100

3. Generate submission

python predict.py --model models/lgb_regressor.pkl

4. View dashboard

open dashboard/index.html

🐍 Why "Snake Trainers"? Perque entrenen en python - snake i ens entrenem a nosaltres mateixos. 9 KB

Built With

Share this project:

Updates