Decision_Tree / app.py
chandu1617's picture
Update app.py
648a143 verified
import pandas as pd
import pickle
import gradio as gr
# =========================
# Load Model & Encoders
# =========================
with open("bank_dt_model.pkl", "rb") as f:
model = pickle.load(f)
with open("le_dict.pkl", "rb") as f:
le_dict = pickle.load(f)
categorical_cols = [
'job', 'marital', 'education', 'default',
'housing', 'loan', 'contact', 'month', 'poutcome'
]
feature_order = [
'age', 'job', 'marital', 'education', 'default',
'balance', 'housing', 'loan', 'contact', 'day',
'month', 'duration', 'campaign', 'pdays',
'previous', 'poutcome'
]
# =========================
# Prediction Function
# =========================
def predict(
age, job, marital, education, default,
balance, housing, loan, contact, day,
month, duration, campaign, pdays,
previous, poutcome
):
try:
input_data = {
'age': int(age),
'job': le_dict['job'].transform([job])[0],
'marital': le_dict['marital'].transform([marital])[0],
'education': le_dict['education'].transform([education])[0],
'default': le_dict['default'].transform([default])[0],
'balance': int(balance),
'housing': le_dict['housing'].transform([housing])[0],
'loan': le_dict['loan'].transform([loan])[0],
'contact': le_dict['contact'].transform([contact])[0],
'day': int(day),
'month': le_dict['month'].transform([month])[0],
'duration': int(duration),
'campaign': int(campaign),
'pdays': int(pdays),
'previous': int(previous),
'poutcome': le_dict['poutcome'].transform([poutcome])[0],
}
df_input = pd.DataFrame([input_data], columns=feature_order)
pred = model.predict(df_input)[0]
confidence = model.predict_proba(df_input)[0][pred]
message = (
"✅ Likely to subscribe. Recommend follow-up."
if pred == 1 else
"❌ Unlikely to subscribe."
)
return message, round(float(confidence), 3)
except Exception as e:
return f"Error: {str(e)}", None
# =========================
# Gradio UI
# =========================
inputs = [
gr.Number(label="Age"),
gr.Dropdown(le_dict['job'].classes_.tolist(), label="Job"),
gr.Dropdown(le_dict['marital'].classes_.tolist(), label="Marital Status"),
gr.Dropdown(le_dict['education'].classes_.tolist(), label="Education"),
gr.Dropdown(le_dict['default'].classes_.tolist(), label="Credit Default"),
gr.Number(label="Account Balance"),
gr.Dropdown(le_dict['housing'].classes_.tolist(), label="Housing Loan"),
gr.Dropdown(le_dict['loan'].classes_.tolist(), label="Personal Loan"),
gr.Dropdown(le_dict['contact'].classes_.tolist(), label="Contact Type"),
gr.Number(label="Day of Month"),
gr.Dropdown(le_dict['month'].classes_.tolist(), label="Month"),
gr.Number(label="Call Duration (seconds)"),
gr.Number(label="Campaign Contacts"),
gr.Number(label="Days Since Last Contact"),
gr.Number(label="Previous Contacts"),
gr.Dropdown(le_dict['poutcome'].classes_.tolist(), label="Previous Campaign Outcome"),
]
outputs = [
gr.Textbox(label="Prediction"),
gr.Number(label="Confidence")
]
app = gr.Interface(
fn=predict,
inputs=inputs,
outputs=outputs,
title="🏦 Bank Term Deposit Predictor",
description="Decision Tree model deployed using Hugging Face Spaces"
)
app.launch()