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
- 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)
- 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
- 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!) ]
- 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
- 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
- python
- sklearn
Log in or sign up for Devpost to join the conversation.