ntam0001's picture
Update app.py
0f34980 verified
import gradio as gr
import pickle
# Load the CatBoost model
model = pickle.load(open("best_model_catboost.pkl", "rb"))
def predict_loan_default(
person_age, person_income, person_emp_length, loan_amnt, loan_percent_income,
cb_person_default_on_file, person_home_ownership, loan_intent, loan_grade
):
# Map categorical inputs to one-hot encoded features
home_ownership_map = {
"OTHER": [1, 0, 0],
"OWN": [0, 1, 0],
"RENT": [0, 0, 1]
}
intent_map = {
"DEBTCONSOLIDATION": [1, 0, 0, 0, 0, 0],
"EDUCATION": [0, 1, 0, 0, 0, 0],
"HOMEIMPROVEMENT": [0, 0, 1, 0, 0, 0],
"MEDICAL": [0, 0, 0, 1, 0, 0],
"PERSONAL": [0, 0, 0, 0, 1, 0],
"VENTURE": [0, 0, 0, 0, 0, 1]
}
grade_map = {
"A": [1, 0, 0, 0, 0, 0, 0],
"B": [0, 1, 0, 0, 0, 0, 0],
"C": [0, 0, 1, 0, 0, 0, 0],
"D": [0, 0, 0, 1, 0, 0, 0],
"E": [0, 0, 0, 0, 1, 0, 0],
"F": [0, 0, 0, 0, 0, 1, 0],
"G": [0, 0, 0, 0, 0, 0, 1]
}
# Prepare features for prediction
features = [
person_age,
person_income,
person_emp_length,
loan_amnt,
loan_percent_income,
int(cb_person_default_on_file == "Yes"),
*home_ownership_map[person_home_ownership],
*intent_map[loan_intent],
*grade_map[loan_grade]
]
# Make prediction
prediction = model.predict([features])
return "Default" if prediction[0] == 1 else "No Default"
# Define Gradio interface
inputs = [
gr.Number(label="Person Age"),
gr.Number(label="Person Income"),
gr.Number(label="Person Employment Length"),
gr.Number(label="Loan Amount"),
gr.Number(label="Loan Percent Income"),
gr.Radio(["Yes", "No"], label="Default on File"),
gr.Radio(["OTHER", "OWN", "RENT"], label="Home Ownership"),
gr.Radio(["DEBTCONSOLIDATION", "EDUCATION", "HOMEIMPROVEMENT", "MEDICAL", "PERSONAL", "VENTURE"], label="Loan Intent"),
gr.Radio(["A", "B", "C", "D", "E", "F", "G"], label="Loan Grade")
]
outputs = gr.Textbox(label="Prediction")
# Launch Gradio app
gr.Interface(fn=predict_loan_default, inputs=inputs, outputs=outputs, title="Credit Risk Prediction").launch()