Skip to content
Back to Blog
Machine Learning

How Kenyan SACCOs Can Use ML for Credit Scoring Without Bureau Data

Josephat Nyambura · May 2025 · 6 min read

A lot of credit scoring advice assumes you're working with a CRB report, years of formal credit history, and a borrower who's used a bank before. For a SACCO serving members who've never had a loan outside their chama, none of that exists — and most off-the-shelf ML tutorials quietly assume it does. What you do have is usually richer than people give it credit for: contribution consistency, withdrawal patterns, group loan repayment behavior, sometimes mobile money transaction history if members consent to share it. The question isn't whether you have enough data to build a model — it's whether you're using the data you already have correctly.

What SACCOs actually have instead of bureau data

Set aside the assumption that a credit score needs a credit bureau. A SACCO's core system already holds a surprising amount of behavioral signal: how consistently a member contributes relative to their own baseline, how their savings balance moves before and after previous loans, whether withdrawals cluster around emergencies or follow a predictable pattern, and how they've behaved inside group lending arrangements. Group lending in particular is underused as a signal — a member's standing within a chama, and whether their group has a track record of covering for a struggling member versus defaulting together, says something a bureau report never could. Where members consent to share mobile money statements, that adds another layer: income regularity, spending volatility, and network effects (who they transact with repeatedly) all carry predictive value.

Why the naive approach fails

Three problems show up almost immediately. First, class imbalance: SACCOs are relationship-based institutions, and most loans get repaid eventually, sometimes late but repaid — so a model trained naively will happily predict "will repay" for everyone and still post a high accuracy score while being useless. Second, data volume: a single SACCO might have a few thousand members and a few hundred loans a year, which is not enough to train anything data-hungry without overfitting to noise. Third, cold start: new members have no internal history at all, which is exactly the population a SACCO most wants a defensible way to assess.

Feature engineering that reflects how the data actually behaves

The lift here comes from turning raw transaction logs into behavioral features, not from a fancier algorithm. Rolling contribution-consistency scores (how much a member's recent contributions deviate from their own historical pattern) tend to outperform static balance snapshots. Withdrawal-to-deposit ratios, and whether withdrawals spike around identifiable stress periods, add a second dimension. Group-level features — repayment rate of the member's lending group, and whether the group has ever collectively covered a shortfall — turn peer accountability into a quantifiable signal instead of an anecdote a loan officer mentions informally.

Why interpretable models usually win here

Gradient-boosted trees with SHAP-based explanations, or a carefully regularized logistic regression, consistently outperform deep learning on this kind of problem in practice — and not because deep learning is inherently worse. It's that the data volume doesn't support it, the loan officers and board members approving the model need to understand and trust individual decisions, and Kenyan SACCOs regulated under SASRA are increasingly expected to justify credit decisions in ways a black-box network can't easily support. An interpretable model that a loan officer can explain to a member in one sentence is worth more operationally than a marginally more accurate model nobody can explain.

Handling small, imbalanced datasets responsibly

Resampling techniques help, but only if applied carefully — synthetic oversampling on a dataset this small can manufacture patterns that don't generalize. A more durable approach is pooling anonymized, permissioned data across several similar SACCOs to train a base model, then fine-tuning per institution on local data. This needs real care around privacy and data-sharing agreements, but it solves the volume problem without asking any single SACCO to hand over more than it should. Throughout, the goal is not squeezing out the last percentage point of accuracy — it's a model whose behavior the SACCO's own risk committee can stand behind.

Deployment realities

None of this matters if it doesn't fit how loan officers actually work. In practice that means a score plus a short, human-readable explanation, not a black-box approval or rejection. It means the system needs to function reliably on patchy connectivity, since not every branch has a stable line. And it means treating the model as something that gets monitored and retrained on a schedule tied to actual portfolio performance, not something trained once and left alone until it quietly drifts out of step with reality.

None of this requires a bureau report. It requires taking the data a SACCO already has seriously enough to build on top of it properly.