Back to Portfolio

Credit Risk EDA

Finding the strongest drivers of loan default in 300,000+ applications

Python Pandas / NumPy Matplotlib / Seaborn Jupyter Exploratory Data Analysis

Problem

A consumer finance company approves loans partly on incomplete information, which creates two costly mistakes: rejecting applicants who would have repaid, and approving applicants who go on to default. This project analyzes the company's historical application data to identify which applicant and loan characteristics actually distinguish defaulters from reliable borrowers — insight that can feed directly into a risk model rather than gut-feel underwriting.

Approach

Key Findings

Class imbalance across target, contract type, education, family status and housing type Data imbalance check across key categorical fields before analysis
Defaulters and non-defaulters by income group Default counts by income group — the counterintuitive high-income pattern
Correlation heatmap of numerical variables for defaulters Correlation structure among numerical variables, defaulters only
Heatmap of age group against income group Age group vs. income group, segmented view

Why It Matters

The point of this analysis isn't the charts — it's that a handful of these signals (external score, prior refusal, age band) could realistically feed a lightweight scoring rule that flags high-risk applications for a second look, without needing a full ML model in production. That's the same instinct behind the quality-audit work I do day to day: find the variable that actually explains the outcome, not the one that's easiest to look at.