Can you predict which households and businesses will have fiber optics access?
# Togo Fiber Optics Uptake Prediction Challenge
Solution for the Zindi Togo Fiber Optics Uptake Prediction Challenge: predicting fiber-to-the-home (FTTH) internet adoption across commune-level segments in Togo using sociodemographic data (RGPH / INSEED) and geographic data (satellite imagery via the MOSAIKS API).
## Scores
| Metric | Score |
| ----------------- | ------------ |
| Public (ROC AUC) | 0.923651326 |
| Private (ROC AUC) | 0.926604040 |
## Repository contents
```
.
├── solution.ipynb # Single notebook containing the full solution
├── CLAUDE.md # Guide for Claude Code
└── README.md
```
## Data
Data comes from three sources:
- **Togocom** and **GVA** — FTTH operators (`Connexion` field).
- **INSEED** — General Census of Population and Housing (RGPH).
- **MOSAIKS API** — 4000 features derived from satellite imagery.
Expected files in the input directory (`data_input`):
- `Train.csv`
- `train_2.csv`
- `Test.csv`
Encoding: `utf-8-sig`. Base administrative unit is the commune.
## Installation
```bash
pip install optuna xgboost lightgbm catboost scikit-learn pandas numpy matplotlib seaborn
```
Python 3.10+ recommended.
## Running
1. Open `solution.ipynb` (Jupyter / Kaggle / Colab).
2. Edit the path configuration cell:
```python
data_input = '/kaggle/input/zd-tg-ds' # → local path
data_output = '/kaggle/working/' # → output directory
```
3. Set `WHAT_TO_DO` in the evaluation cell:
| Value | Action |
| ----- | ------------------------------------------------------- |
| 1 | Evaluate a single model (RandomForest) |
| 2 | Optuna hyperparameter search on the meta-estimator |
| 3 | Experiment with `n_estimators` / `max_depth` |
| 4 | 5-fold cross-validation of the full stack (default) |
| 5 | Evaluate all base models + stack |
| 6 | No-op …