Downloads · 30 days
0
Ahmed5/AIMS_Ikimina
AIMS_Ikimina is a tabular classification model from Ahmed5. Use it for the tabular classification task on the model card, and read the license before you ship it in a product. It is set up for scikit-learn. The card lists the license as mit.
A lightweight scikit-learn + LightGBM pipeline that turns an Ikimina member's 12-month contribution history into a Reliability Index in [0, 100], designed for deployment over USSD on a feature phone in rural Rwanda.
Downloads · 30 days
0
Access
Public
Updated Apr 22, 2026
Repo size
4.9 KB
Likes
0
Public
Click a slice to open those files.
.md5.9 KB · 48%
From the Hugging Face model README
A lightweight scikit-learn + LightGBM pipeline that turns an Ikimina member's 12-month contribution history into a Reliability Index in [0, 100], designed for deployment over USSD on a feature phone in rural Rwanda.
Built for the AIMS KTT Fellowship Hackathon 2026 — Challenge T1.1.
[LINK](https://github.com/Ahmed-5/AIMS_KTT)<YOUTUBE-UNLISTED-URL-HERE>low_risk / watch / high_risk) that an MFI loan officer can use as a conversation starter with an Ikimina member.*654*MEMBER_ID#, ~20 RWF per query).member_id pseudonym over SS7 — no PII is embedded in the model input.src/features.py::FEATURE_COLS):
mean_on_time, on_time_volatility, recency_weighted_miss, max_on_time_streak, total_missed, penalty_paid_per_miss, borrow_to_repay, loan_burden, role_seniority, tenure_months, contrib_group_zscore, urban_flag.P(default_within_6m).score = round(100 · (1 − P(default))) clipped to [0, 100].0–40 high_risk · 41–70 watch · 71–100 low_risk.alpha=0.2.Fully synthetic — generated by src/generate_data.py with seed 42, following the brief's recipe line-by-line:
p = base_miss), with base_miss ~ Beta(2, 20) per member and AR(1) correlation ρ = 0.4 across months.LogNormal(mean = 3 · weekly · 8).(missed_total, unpaid_penalties, borrow/repay, tenure) with intercept bisected to ~14 % positive rate.member_ids are the holdout.No real member data was used.
| Metric | Value |
|---|---|
| Holdout ROC-AUC | 0.944 |
| Holdout Brier score | 0.056 |
| CV AUC — Logistic Regression | 0.854 |
| CV AUC — LightGBM | 0.828 |
| Chosen model | Logistic Regression + calibration |
| Holdout positive rate | 0.10 |
| Tier mix on holdout | high_risk: 2 · watch: 9 · low_risk: 89 |
Charts (in reports/): roc_curve.png, calibration_curve.png, feature_importance.png, score_distribution.png, district_heatmap.png.
LightGBM's CV AUC was only 0.03 lower than LR. On N = 400 training rows and a regulator audience that needs to read (and argue with) the coefficients, the interpretability of a calibrated linear model outranks a 3-point AUC gap.
low_risk. The brief fixes the tier cut-offs; we do not re-quantile them. Downstream product design (see ussd_flow.md) fails toward watch, never low_risk, whenever anything is uncertain.watch tier via scorer.py::score_shadow(), and the system returns a widened 80 % band.member_id pseudonym over the wire; see ussd_flow.md for the full privacy trade-off.| File | Purpose |
|---|---|
model.pkl | joblib-pickled dict: {model, scaler, uses_scaler, feature_cols, chosen_model, cv_auc, holdout}. ≈ 5 KB. |
group_reliability_index.csv | Per-group aggregate reliability index used by the blending stretch goal. |
metrics.json | Holdout AUC, Brier, CV AUC for both candidate models, tier mix. |
| Chart PNGs | ROC, calibration, feature importance, score distribution, district heatmap. |
*654*0#.pip install -r requirements.txt
python src/generate_data.py && python src/train_model.py && python scorer.py --member 412 --group 07
Total wall-clock on a free Colab CPU: < 2 min.
If you use this model or the synthetic generator, please cite:
Ikimina Digital Trust & Reliability Index — AIMS KTT Fellowship Hackathon 2026, Challenge T1.1. MIT licence.