Jotheeswaransakthivel's picture
Update src/app.py
8621979 verified
import streamlit as st
import joblib
import numpy as np
import pandas as pd
# Load model and encoders
try:
model = joblib.load("src/best_stroke_model.pkl")
x_num_scaler = joblib.load("src/x_num_scaler.pkl")
x_cat_encoder = joblib.load("src/x_cat_encoder.pkl")
x_cat_ordinal_encoder = joblib.load("src/x_cat_ordinal_encoder.pkl")
except Exception as e:
st.error(f"Failed to load model or encoders: {e}")
st.stop()
# Streamlit layout
st.set_page_config(page_title="Stroke Prediction App", page_icon="🧠", layout="centered")
st.title("🧠 Stroke Prediction App")
st.write("Fill in the details below to check the risk of stroke.")
# Input fields
gender = st.selectbox("Gender", ["Male", "Female", "Other"])
age = st.number_input("Age", min_value=1, max_value=120, value=30)
hypertension = st.selectbox("Hypertension (0=No, 1=Yes)", [0, 1])
heart_disease = st.selectbox("Heart Disease (0=No, 1=Yes)", [0, 1])
work_type = st.selectbox("Work Type", ["Private", "Self-employed", "Govt_job", "children", "Never_worked"])
avg_glucose_level = st.number_input("Average Glucose Level", min_value=50.0, max_value=300.0, value=100.0)
bmi = st.number_input("BMI", min_value=10.0, max_value=50.0, value=22.0)
smoking_status = st.selectbox("Smoking Status", ["never smoked", "formerly smoked", "smokes", "Unknown"])
# Prediction button
if st.button("Predict"):
input_df = pd.DataFrame([[gender, age, hypertension, heart_disease, work_type, avg_glucose_level, bmi, smoking_status]],
columns=["gender", "age", "hypertension", "heart_disease", "work_type", "avg_glucose_level", "bmi", "smoking_status"])
# Preprocessing
scaled_x_num = x_num_scaler.transform(input_df[["age", "avg_glucose_level", "bmi"]])
binary_x = input_df[["hypertension", "heart_disease"]].values
encoded_x_cat = x_cat_encoder.transform(input_df[["work_type", "smoking_status"]])
ordinal_encoded_x_cat = x_cat_ordinal_encoder.transform(input_df[["gender"]])
final_x = np.hstack([scaled_x_num, binary_x, encoded_x_cat, ordinal_encoded_x_cat])
# Predict
prediction = model.predict(final_x)
result = "⚠️ High Risk of Stroke" if prediction[0] == 1 else "✅ Low Risk of Stroke"
st.success(f"**Prediction:** {result}")
st.info("This prediction is based on machine learning and should not replace professional medical advice.")