|
|
import streamlit as st
|
|
|
import joblib
|
|
|
import numpy as np
|
|
|
import pandas as pd
|
|
|
|
|
|
|
|
|
st.set_page_config(
|
|
|
page_title="Engine Predictive Maintenance",
|
|
|
page_icon="⚙️",
|
|
|
layout="wide"
|
|
|
)
|
|
|
|
|
|
|
|
|
@st.cache_resource
|
|
|
def load_model():
|
|
|
model = joblib.load('best_xgboost_model.pkl')
|
|
|
return model
|
|
|
|
|
|
model = load_model()
|
|
|
|
|
|
|
|
|
st.title("⚙️ Engine Predictive Maintenance System")
|
|
|
st.markdown("""
|
|
|
This application predicts whether an engine is **Normal** or **Faulty** based on sensor readings.
|
|
|
Enter the sensor values below to get a prediction.
|
|
|
""")
|
|
|
|
|
|
|
|
|
col1, col2 = st.columns(2)
|
|
|
|
|
|
with col1:
|
|
|
st.subheader("📊 Input Sensor Readings")
|
|
|
|
|
|
|
|
|
engine_rpm = st.number_input(
|
|
|
"Engine RPM",
|
|
|
min_value=0.0,
|
|
|
max_value=10000.0,
|
|
|
value=2000.0,
|
|
|
step=100.0,
|
|
|
help="Engine Revolutions Per Minute"
|
|
|
)
|
|
|
|
|
|
lub_oil_pressure = st.number_input(
|
|
|
"Lub Oil Pressure (psi)",
|
|
|
min_value=0.0,
|
|
|
max_value=200.0,
|
|
|
value=50.0,
|
|
|
step=1.0,
|
|
|
help="Lubricating Oil Pressure"
|
|
|
)
|
|
|
|
|
|
fuel_pressure = st.number_input(
|
|
|
"Fuel Pressure (psi)",
|
|
|
min_value=0.0,
|
|
|
max_value=200.0,
|
|
|
value=50.0,
|
|
|
step=1.0,
|
|
|
help="Fuel Pressure"
|
|
|
)
|
|
|
|
|
|
with col2:
|
|
|
st.subheader("🌡️ Temperature & Pressure")
|
|
|
|
|
|
coolant_pressure = st.number_input(
|
|
|
"Coolant Pressure (psi)",
|
|
|
min_value=0.0,
|
|
|
max_value=200.0,
|
|
|
value=50.0,
|
|
|
step=1.0,
|
|
|
help="Coolant Pressure"
|
|
|
)
|
|
|
|
|
|
lub_oil_temp = st.number_input(
|
|
|
"Lub Oil Temperature (°C)",
|
|
|
min_value=0.0,
|
|
|
max_value=200.0,
|
|
|
value=80.0,
|
|
|
step=1.0,
|
|
|
help="Lubricating Oil Temperature"
|
|
|
)
|
|
|
|
|
|
coolant_temp = st.number_input(
|
|
|
"Coolant Temperature (°C)",
|
|
|
min_value=0.0,
|
|
|
max_value=150.0,
|
|
|
value=70.0,
|
|
|
step=1.0,
|
|
|
help="Coolant Temperature"
|
|
|
)
|
|
|
|
|
|
|
|
|
if st.button("🔍 Predict Engine Condition", type="primary"):
|
|
|
|
|
|
input_data = np.array([[
|
|
|
engine_rpm,
|
|
|
lub_oil_pressure,
|
|
|
fuel_pressure,
|
|
|
coolant_pressure,
|
|
|
lub_oil_temp,
|
|
|
coolant_temp
|
|
|
]])
|
|
|
|
|
|
|
|
|
prediction = model.predict(input_data)[0]
|
|
|
prediction_proba = model.predict_proba(input_data)[0]
|
|
|
|
|
|
|
|
|
st.markdown("---")
|
|
|
st.subheader("Prediction Result")
|
|
|
|
|
|
if prediction == 0:
|
|
|
st.success("**Engine Status: NORMAL**")
|
|
|
st.metric("Confidence", f"{prediction_proba[0]*100:.2f}%")
|
|
|
st.info("The engine is operating within normal parameters. Continue regular maintenance schedule.")
|
|
|
else:
|
|
|
st.error("**Engine Status: FAULTY**")
|
|
|
st.metric("Confidence", f"{prediction_proba[1]*100:.2f}%")
|
|
|
st.warning("The engine shows signs of potential failure. Immediate inspection recommended!")
|
|
|
|
|
|
|
|
|
st.markdown("### Prediction Probabilities")
|
|
|
prob_df = pd.DataFrame({
|
|
|
'Condition': ['Normal', 'Faulty'],
|
|
|
'Probability': [prediction_proba[0], prediction_proba[1]]
|
|
|
})
|
|
|
st.bar_chart(prob_df.set_index('Condition'))
|
|
|
|
|
|
|
|
|
st.markdown("---")
|
|
|
st.markdown("""
|
|
|
**Model Information:**
|
|
|
- Algorithm: XGBoost Classifier
|
|
|
- F1-Score: 0.7630
|
|
|
- Recall: 87.01%
|
|
|
- Training Dataset: 19,535 engine records
|
|
|
|
|
|
**Features Used:**
|
|
|
1. Engine RPM
|
|
|
2. Lubricating Oil Pressure
|
|
|
3. Fuel Pressure
|
|
|
4. Coolant Pressure
|
|
|
5. Lubricating Oil Temperature
|
|
|
6. Coolant Temperature
|
|
|
""")
|
|
|
|