sahiljadhav1221
Initial commit - Loan Prediction Project
e93c178
import streamlit as st
import pandas as pd
import numpy as np
from src.data_loader import load_data
from src.preprocessing import feature_engineering, encode_data
from src.model import train_model
from src.predict import make_prediction
from src.utils import calculate_emi
# -----------------------------------------------------------------------------
# PAGE CONFIG
# -----------------------------------------------------------------------------
st.set_page_config(page_title="Loan Prediction System", page_icon="🏦", layout="centered")
# -----------------------------------------------------------------------------
# NAVIGATION STATE
# -----------------------------------------------------------------------------
if 'page' not in st.session_state:
st.session_state['page'] = 'Home'
c1, c2, c3, c4, c5 = st.columns([2,1,1,1,2])
with c2:
if st.button("Home"): st.session_state['page'] = 'Home'
with c3:
if st.button("Predict"): st.session_state['page'] = 'Predict'
with c4:
if st.button("About"): st.session_state['page'] = 'About'
st.markdown("---")
# -----------------------------------------------------------------------------
# LOAD + TRAIN
# -----------------------------------------------------------------------------
DATA_PATH = "data/train.csv"
df = load_data(DATA_PATH)
if df is not None:
df = feature_engineering(df)
df, encoders, target_encoder = encode_data(df)
X = df.drop("Loan_Status", axis=1)
y = df["Loan_Status"]
feature_columns = X.columns.tolist()
model = train_model(X, y)
else:
st.error("Dataset not found")
# -----------------------------------------------------------------------------
# HOME PAGE
# -----------------------------------------------------------------------------
if st.session_state['page'] == "Home":
st.title("Loan Approval Prediction System")
st.subheader("Using Machine Learning")
st.markdown("### About This Application")
st.info("""
Welcome to the next generation of banking technology. This application utilizes advanced
**Machine Learning** algorithms to automate the loan eligibility assessment process.
By analyzing key financial indicators—such as **Income, Credit History, and Loan Term**—our
system provides an instant, objective, and data-driven prediction.
""")
st.markdown("### Why Use This System?")
col1, col2 = st.columns(2)
with col1:
st.success("⚡ **Real-Time Analysis**\n\nGet instant results without manual verification.")
st.success("🛡️ **Financial Guardrails**\n\nDetects risky applications automatically.")
with col2:
st.success("🎯 **High Accuracy**\n\nUses Random Forest model for reliable prediction.")
st.success("💡 **Smart Suggestions**\n\nGives tips to improve approval chances.")
st.markdown("---")
st.markdown("""
### How It Works
1. Click Predict
2. Fill details
3. Click Predict Status
4. Get result instantly
""")
# -----------------------------------------------------------------------------
# PREDICT PAGE
# -----------------------------------------------------------------------------
elif st.session_state['page'] == "Predict":
st.title("📋 Loan Application Form")
if df is None:
st.error("Dataset not found")
else:
with st.form("prediction_form"):
st.subheader("Applicant Details")
c1, c2 = st.columns(2)
with c1:
gender = st.selectbox("Gender", ["Male", "Female"])
married = st.selectbox("Married", ["No", "Yes"])
dependents = st.selectbox("Dependents", ["0", "1", "2", "3+"])
education = st.selectbox("Education", ["Graduate", "Not Graduate"])
self_employed = st.selectbox("Self Employed", ["No", "Yes"])
with c2:
applicant_income = st.number_input("Applicant Income (Monthly ₹)", value=5000)
coapplicant_income = st.number_input("Co-Applicant Income (Monthly ₹)", value=0)
loan_amount = st.number_input("Loan Amount (₹)", value=100000)
loan_term_years = st.number_input("Loan Term (Years)", value=15)
property_area = st.selectbox("Property Area", ["Urban", "Semiurban", "Rural"])
cibil_score = st.number_input("CIBIL Score", 300, 900, 750)
submit = st.form_submit_button("Predict Status")
if submit:
loan_amt_k = loan_amount / 1000
loan_term_m = loan_term_years * 12
total_income = applicant_income + coapplicant_income
model_emi = (loan_amt_k * 1000) / loan_term_m
balance_income = total_income - model_emi
credit_history = 1.0 if cibil_score >= 600 else 0.0
input_data = {
"Gender": gender,
"Married": married,
"Dependents": dependents,
"Education": education,
"Self_Employed": self_employed,
"ApplicantIncome": applicant_income,
"CoapplicantIncome": coapplicant_income,
"LoanAmount": loan_amt_k,
"Loan_Amount_Term": loan_term_m,
"Credit_History": credit_history,
"Property_Area": property_area,
"Total_Income": total_income,
"EMI": model_emi,
"Balance_Income": balance_income
}
result, confidence = make_prediction(
input_data, model, encoders, target_encoder, feature_columns
)
st.markdown("### Result")
if result == "Y":
st.success(f"✅ Approved ({confidence:.2f}%)")
else:
st.error(f"❌ Rejected ({confidence:.2f}%)")
# -----------------------------------------------------------------------------
# ABOUT PAGE
# -----------------------------------------------------------------------------
elif st.session_state['page'] == "About":
st.title("About the Project")
# 1. PROBLEM
st.error("""
**The Problem: Manual Underwriting**
Traditionally, banks relied on manual verification processes which had major disadvantages:
- **High Turnaround Time:** It took days or weeks to process a single application.
- **Human Bias:** Decisions often varied from officer to officer.
- **Static Rules:** Simple rules failed to see the bigger picture.
""")
st.write("")
# 2. SOLUTION
st.success("""
**The Solution: Intelligent Automation**
This project replaces the manual process with a **Hybrid Machine Learning Architecture**.
It combines strict financial logic (Guardrails) with AI pattern recognition (Random Forest)
to make safer, faster decisions.
""")
st.write("")
# 3. WORKFLOW
st.markdown("### 🔄 Project Workflow")
st.info("""
This system was built in **4 key stages**:
1. **Data Analysis (Jupyter Notebook):** Data cleaning and preprocessing
2. **Model Training:** Random Forest model (~81% accuracy)
3. **Backend Logic:** Financial guardrails implementation
4. **Frontend:** Streamlit UI for user interaction
""")
st.divider()
# 4. TECH SPECS
st.subheader("🛠️ Technical Architecture")
c1, c2 = st.columns(2)
with c1:
st.markdown("**Machine Learning:**")
st.caption("""
- Algorithm: Random Forest Classifier
- Trees: 200 Estimators
- Accuracy: ~81%
""")
with c2:
st.markdown("**Tech Stack:**")
st.caption("""
- Python
- Streamlit
- Pandas
- Scikit-learn
""")