File size: 1,922 Bytes
1706947
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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}")