A machine learning project for predicting bank account ownership using demographic data, with a full pipeline covering EDA, feature engineering, model training, evaluation, and explainability.
# Financial Inclusion in Africa – Zindi Challenge
## Project Overview
This project is an **end-to-end machine learning pipeline** developed for the Zindi learning challenge **“Financial Inclusion in Africa”** . The goal is to predict whether an individual is likely to have or use a bank account based on demographic and socio-economic characteristics across four East African countries: **Kenya, Rwanda, Tanzania, and Uganda** .
The project goes beyond model training to include **structured preprocessing, model comparison, automatic model selection, interpretability using SHAP, and preparation for deployment via a dashboard** .
---
## Problem Statement
Financial inclusion is a key driver of economic growth and human development. However, a large proportion of adults in East Africa do not have access to formal banking services.
**Objective:**
Predict whether an individual has a bank account (`Yes = 1`, `No = 0`) using survey data, and identify the key factors driving financial inclusion.
---
## Machine Learning Framing
* **Task type:** Binary classification
* **Target variable:** `bank_account`
* **Evaluation focus:** Recall (due to class imbalance)
* **Metric used by competition:** Mean Absolute Error (MAE)
Because the dataset is imbalanced (fewer people have bank accounts), **recall is prioritized** to avoid missing individuals who are banked.
---
## Project Structure
```text
financial-inclusion-zindi/
│
├── data/
│ ├── raw/ # Original Zindi datasets (ignored in Git)
│ │ ├── Train.csv
│ │ └── Test.csv
│
├── notebooks/
│ ├── 01_eda.ipynb # Exploratory Data Analysis
│ ├── 02_feature_engineering.ipynb
│ └── 03_modeling.ipynb # Model training, evaluation & SHAP
│
├── src/
│ ├── preprocess.py # Feature engineering pipelines
│ ├── train.py # Model training & auto-selection
│ └── predict.py # Inference & submission generation
│
├── models/
│ ├── __init__.py
│ ├── logistic.py
│ ├── …