Loan default prediction under Kenya to Ghana domain shift. LightGBM multi-granularity stacking, F1 0.6805, 17th of 151.
# Prédiction du défaut de remboursement, Kenya et Ghana
Projet réalisé pour l’AI4EAC Finance Practice Challenge sur Zindi. L’objectif est de prédire si un prêt sera remboursé ou passera en défaut.
Le `train set` contient uniquement des prêts kenyans. Le `test set` mélange des prêts kenyans et ghanéens. Le problème central est donc un `domain shift` : le modèle apprend les relations observées au Kenya, puis doit les appliquer à un pays dont les profils de prêt et les conditions économiques diffèrent.
| Indicateur | Résultat |
|---|---:|
| Public F1 | 0,6805 |
| Meilleur OOF F1 | 0,8968 |
| Classement | 17e sur 151 |
| Progression du Public F1 | 0,6318 à 0,6805 |
Démo Gradio
Documentation de l’API
## Données
```text
Train.csv : 68 654 lignes, Kenya uniquement, 1,83 % de défauts
Test.csv : 18 594 lignes, Kenya à 81 % et Ghana à 19 %
```
Les données ont une structure hiérarchique. Un client peut avoir plusieurs prêts, et un même prêt peut apparaître sur plusieurs lignes lorsqu’il implique plusieurs prêteurs. Les lignes d’un même prêt portent la même target.
```text
Client
-> plusieurs prêts
-> plusieurs lignes, une par prêteur
```
La structure hiérarchique des données a motivé un `multi-granularity stacking`. Un premier modèle produit des prédictions au niveau `line-level`, afin de conserver les informations propres à chaque prêteur. Un second modèle travaille au niveau `loan-level`, avec des variables agrégées sur l’ensemble du prêt. Les deux prédictions sont ensuite combinées dans la prédiction finale.
## Feature engineering
Le jeu initial contient 16 colonnes. Le `feature engineering` a produit plus de 53 variables.
Les ratios financiers sont plus informatifs que les montants bruts. J’ai calculé le coût relatif du crédit, le ratio de remboursement, l’intérêt journalier et la part de financement de chaque prêteur.
```python
interest_pct = interest_amount / total_amount
repay_ratio = total_to_repay / total_amount
daily_interest = interest_amount / durat …