Loan Applications dataset
Loan applications with income, credit score, loan size and term, and whether each was approved.
About this dataset
Applications to a fictional lender: who applied (age, education, employment), what they asked for (purpose, amount, term), their credit score and existing loans, and whether the loan was approved.
Approval was decided by a hidden scoring rule plus some randomness, the way real decisions mix rules with judgement. Your job is to discover the rule from the data. It rewards feature engineering: the raw columns help, but the EMI-to-income ratio you can work out yourself helps a lot more.
Good for practising: Classification, Feature engineering, Logistic regression, Model evaluation.
What's built into the data
The rows are random, but they follow rules, so there is something real to find. These are the patterns to look for:
- Credit score and the EMI-to-income ratio are the two biggest drivers: a higher score helps, a heavier EMI hurts.
- The EMI is not in the file. Work it out at 11% a year over the loan term and compare it with income.
- Each existing loan lowers the odds; salaried applicants do a little better than others.
- Loan sizes and terms depend on the purpose: home loans are the largest and longest, personal loans the smallest.
Columns
| Column | Type | Description |
|---|---|---|
application_id | ID (text) | Application number. |
applied_on | Date | Date of application. |
age | Whole number | Applicant's age. |
gender | Category | Male or Female. |
marital_status | Category | Married, Single or Divorced. |
education | Category | Highest qualification. |
employment_type | Category | Salaried, Self-employed, Business owner or Contract. |
annual_income | Amount (₹) | Yearly income in rupees. |
loan_purpose | Category | Home, Car, Personal, Education or Business. |
loan_amount | Amount (₹) | Amount requested in rupees. |
loan_term_months | Whole number | Repayment period in months. |
credit_score | Whole number | Credit score, 300 to 900. |
existing_loans | Whole number | Number of loans already running. |
city_tier | Whole number | 1 = metro, 2 = large city, 3 = smaller town. |
approved | Category | Yes or No. |
Preview: the first 8 rows
A sample with seed 2026. Your download will have different values but the same columns and patterns.
| application_id | applied_on | age | gender | marital_status | education | employment_type | annual_income | loan_purpose | loan_amount | loan_term_months | credit_score | existing_loans | city_tier | approved |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| APP000001 | 2024-06-14 | 36 | Female | Divorced | Graduate | Self-employed | 545000 | Personal | 360000 | 12 | 616 | 0 | 1 | No |
| APP000002 | 2024-06-26 | 35 | Male | Married | Postgraduate | Salaried | 428000 | Personal | 190000 | 36 | 681 | 0 | 3 | Yes |
| APP000003 | 2024-09-10 | 21 | Female | Married | Postgraduate | Salaried | 1076000 | Car | 1130000 | 48 | 707 | 1 | 2 | No |
| APP000004 | 2025-04-02 | 34 | Female | Married | Graduate | Business owner | 881000 | Personal | 350000 | 36 | 637 | 2 | 2 | No |
| APP000005 | 2025-04-09 | 39 | Female | Single | Graduate | Business owner | 658000 | Car | 330000 | 60 | 631 | 3 | 1 | No |
| APP000006 | 2025-05-12 | 21 | Male | Married | Higher Secondary | Salaried | 491000 | Personal | 480000 | 24 | 702 | 2 | 1 | No |
| APP000007 | 2025-06-13 | 35 | Male | Married | Graduate | Salaried | 892000 | Personal | 390000 | 24 | 637 | 1 | 1 | No |
| APP000008 | 2025-12-19 | 26 | Female | Married | Graduate | Self-employed | 681000 | Car | 440000 | 24 | 688 | 2 | 1 | No |
Practice exercises
- Compute each applicant's EMI (11% a year, the given term) and EMI ÷ monthly income. Plot approval rate against it.
- Train a logistic regression with and without your EMI-ratio feature. How much does it improve the model?
- Plot approval rate by credit-score band (300–600, 600–700, 700–750, 750+).
- Train a decision tree and read its first few splits. Do they match the patterns listed above?
- Use a train/test split and report a confusion matrix and ROC-AUC, not only accuracy.
Stuck on one? Each exercise uses ideas from the lessons below, and trying it with the messy option on turns it into a cleaning exercise as well.
Load it straight into Python
You don't have to download first. Pandas can read the link directly, in Jupyter, Google Colab or a script. Keep the seed so you get the same data every time you run the notebook:
import pandas as pd
url = "https://beeprotonai.info/resources/datasets/loan-applications/download/?rows=1000&seed=42"
df = pd.read_csv(url, parse_dates=["applied_on"])
df.head()
For SQL practice, download the SQL format and run it against an empty database, for example sqlite3 practice.db < loan-applications-1000-rows-seed42.sql or mysql -u root -p practice < loan-applications-1000-rows-seed42.sql (use your file's name). It creates a table called loan_applications and fills it.
About the data
Everything in this file is invented. Names are random pairings of common first names and surnames, email addresses use example.com (reserved for examples, so it can never reach anyone), and phone numbers start with +91 00, which no real Indian mobile number does. Any resemblance to a real person or business is coincidence. Dates run from 1 April 2024 to 31 March 2026 unless a column says otherwise. Use it freely for learning, teaching and projects, including commercial ones, with no attribution required (CC0).
Lessons that go with it
More datasets
Two years of orders from a fictional chain of Indian sweet shops, with Diwali …
Employee & Attrition RecordsAn HR file of employees with salary, satisfaction, overtime and whether they left: built …
Student Exam ResultsMarks in five subjects with attendance and study hours, plus totals, percentage, result and …
Customer List (CRM)Customer records with contact details, segment, orders and spend: ideal for cleaning, deduplication and …
Stock Register (Inventory)Monthly stock register for five warehouses: opening, received, issued, closing, reorder level and value.
Website Traffic (Analytics)Daily sessions, users, bounce rate and conversions by page, traffic source and device.