raj2261992's picture
Update app.py
13e9605 verified
import streamlit as st
import numpy as np
import joblib
import pandas as pd
from huggingface_hub import hf_hub_download
# ----------------------------------------------------
# Load trained model
# ----------------------------------------------------
MODEL_PATH = hf_hub_download(
repo_id="raj2261992/predictive_maintenance_model",
filename="engine_condition_xgboost_v1.joblib"
)
model = joblib.load(MODEL_PATH)
# ----------------------------------------------------
# Page Config
# ----------------------------------------------------
st.set_page_config(
page_title="Engine Health Prediction",
layout="centered"
)
st.title("🛠️ Predictive Maintenance – Engine Health")
st.markdown("Enter live sensor values to predict engine condition.")
st.divider()
# ----------------------------------------------------
# Sidebar Inputs
# ----------------------------------------------------
st.sidebar.header("Sensor Inputs")
engine_rpm = st.sidebar.number_input("Engine RPM", min_value=0.0, value=1500.0)
lub_oil_pressure = st.sidebar.number_input(
"Lub Oil Pressure", min_value=0.0, value=3.5
)
fuel_pressure = st.sidebar.number_input(
"Fuel Pressure", min_value=0.0, value=4.0
)
coolant_pressure = st.sidebar.number_input(
"Coolant Pressure", min_value=0.0, value=2.0
)
lub_oil_temp = st.sidebar.number_input(
"Lub Oil Temperature", min_value=0.0, value=80.0
)
coolant_temp = st.sidebar.number_input(
"Coolant Temperature", min_value=0.0, value=75.0
)
# ----------------------------------------------------
# Prediction
# ----------------------------------------------------
if st.button("Predict Engine Condition"):
# IMPORTANT: Must be DataFrame (not NumPy)
input_data = pd.DataFrame([{
"Engine rpm": float(engine_rpm),
"Lub oil pressure": float(lub_oil_pressure),
"Fuel pressure": float(fuel_pressure),
"Coolant pressure": float(coolant_pressure),
"lub oil temp": float(lub_oil_temp),
"Coolant temp": float(coolant_temp),
}])
# Debug display (optional)
st.write("### Input Data")
st.write(input_data)
# Predict probability
prob = model.predict_proba(input_data)[0][1]
threshold = 0.45
prediction = int(prob >= threshold)
st.subheader("Prediction Result")
if prediction == 0:
st.success("Engine Condition: NORMAL")
else:
st.error("Engine Condition: FAULTY / AT RISK")
st.metric("Failure Probability", f"{prob:.2%}")
st.divider()
st.write("### Input Summary")
st.table(input_data)
# ----------------------------------------------------
# Footer
# ----------------------------------------------------
st.markdown("---")
st.caption("Predictive Maintenance Dashboard | Built with Streamlit")