Fraud detection in financial services has an uncomfortable truth: the most valuable signals often come from sources that are hard to formalize.

A credit officer who has reviewed 10,000 applications builds intuition that no spreadsheet captures. They notice things — a slight mismatch in stated income vs. lifestyle indicators, an unusual address history, a company that’s been restructured too many times. These observations rarely appear in the official decision criteria.

My Bachelor’s thesis addressed this directly: how do you translate that informal expertise into a machine learning system that credit officers will actually trust?

The Problem with Pure ML Approaches

Off-the-shelf ML for credit risk usually follows the same pattern:

  1. Collect historical approval/rejection data
  2. Train a classifier
  3. Evaluate on holdout set
  4. Deploy

The problem is step 1. Historical approval/rejection data reflects past human decisions, including past biases, past risk tolerances, and past errors. Training a model to replicate historical decisions encodes those decisions — including the wrong ones.

For fraud specifically, there’s another problem: class imbalance. Fraud rates in leasing portfolios are typically below 1%. A classifier that predicts “not fraud” for every application achieves 99%+ accuracy. This is useless.

What Actually Worked

The approach I designed centered on SHAP (SHapley Additive exPlanations) — not primarily for model performance, but for credit officer engagement.

The key insight: credit officers don’t trust black boxes. If you hand them a score with no explanation, they’ll override it based on gut feel. If you show them exactly which features drove the score — and those features match their intuition — they’ll trust it.

So the workflow wasn’t:

ML model → score → decision

It was:

ML model → score + SHAP explanation → credit officer review → decision

The model’s job was to surface the relevant signals, not to replace judgment.

SHAP in Practice

For a flagged application, the credit officer would see something like:

  • +0.34 — Debt-to-income ratio significantly above sector median
  • +0.28 — Multiple credit inquiries in 90-day window
  • +0.19 — Business registration date < 18 months
  • −0.12 — Asset class (commercial vehicles) has lower historical loss rate

This is actionable. The credit officer can verify these signals, add context the model doesn’t have, and make a better decision than either the model alone or their gut alone.

What Didn’t Work

Feature engineering based on intuition. We spent time engineering features that credit officers said were important. Several of them had near-zero predictive power in the data. The data doesn’t always agree with expert intuition — and when it doesn’t, you need to investigate why, not just trust the model.

Treating this as a binary classification problem. Fraud isn’t binary. There’s a spectrum from clear fraud, through fraud risk, through unusual-but-legitimate, to clearly clean. A binary classifier loses this nuance.

Optimizing for accuracy. We switched to optimizing for recall (catching fraud) at an acceptable precision threshold. Missing a fraudulent application is worse than flagging a legitimate one for additional review.


The system I built wasn’t the final answer. It was a structured way to combine data with expertise — making both more useful than they’d be alone.

That’s what good financial ML looks like: not replacing humans, but making them better at their jobs.