labhara's picture
Upload app.py
1706947 verified
import streamlit as st
import pandas as pd
from model_loader import load_model
st.set_page_config(page_title="Predictive Maintenance App")
st.title("Predictive Maintenance – Engine Fault Prediction")
st.markdown(
"This app uses a Gradient Boosting model to predict whether an engine is **Normal (0)** "
"or **Faulty (1)** based on sensor readings."
)
# Load model once
model = load_model()
# Input fields
st.sidebar.header("Input Engine Sensor Values")
engine_rpm = st.sidebar.number_input("Engine RPM", min_value=1, max_value=5000, value=800)
lub_oil_pressure = st.sidebar.number_input("Lub Oil Pressure (bar)", min_value=0.0, max_value=10.0, value=3.0)
fuel_pressure = st.sidebar.number_input("Fuel Pressure (bar)", min_value=0.0, max_value=25.0, value=6.0)
coolant_pressure = st.sidebar.number_input("Coolant Pressure (bar)", min_value=0.0, max_value=10.0, value=2.0)
lub_oil_temp = st.sidebar.number_input("Lub Oil Temperature (°C)", min_value=0.0, max_value=150.0, value=78.0)
coolant_temp = st.sidebar.number_input("Coolant Temperature (°C)", min_value=0.0, max_value=200.0, value=78.0)
# Convert input to dataframe (as required by model)
input_df = pd.DataFrame([{
"Engine_RPM": engine_rpm,
"Lub_Oil_Pressure": lub_oil_pressure,
"Fuel_Pressure": fuel_pressure,
"Coolant_Pressure": coolant_pressure,
"Lub_Oil_Temperature": lub_oil_temp,
"Coolant_Temperature": coolant_temp
}])
st.subheader("Input Data")
st.write(input_df)
if st.button("Predict Engine Condition"):
expected = getattr(model, "expected_features", None)
if expected:
for col in expected:
if col not in input_df.columns:
input_df[col] = 0
input_df = input_df[expected]
pred = model.predict(input_df)[0]
label = "Faulty Engine (Maintenance Required)" if pred == 1 else "Normal Engine"
st.subheader("Prediction")
st.success(f"Engine Condition: {label}")