Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import pandas as pd | |
| from huggingface_hub import hf_hub_download | |
| import joblib | |
| # Download and load the model | |
| model_path = hf_hub_download(repo_id="JohnsonSAimlarge/engine-failure-predict", filename="engine_failure_model.joblib") | |
| model = joblib.load(model_path) | |
| # ------------------------------ | |
| # Streamlit UI | |
| # ------------------------------ | |
| st.title("🔧 Engine Failure Prediction System") | |
| st.write(""" | |
| This application predicts the likelihood of engine failure based on sensor readings and operational parameters. | |
| Please enter **Engine Sensor Data** below to get a prediction. | |
| """) | |
| # ------------------------------ | |
| # User Inputs | |
| # ------------------------------ | |
| st.subheader("Engine Operational Parameters") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| engine_rpm = st.number_input( | |
| "Engine RPM (Revolutions Per Minute)", | |
| min_value=0, | |
| max_value=10000, | |
| value=3000, | |
| help="Normal range: 500-8000 RPM" | |
| ) | |
| lub_oil_pressure = st.number_input( | |
| "Lubricating Oil Pressure (bar)", | |
| min_value=0.0, | |
| max_value=10.0, | |
| value=4.5, | |
| step=0.1, | |
| help="Normal range: 2.0-6.0 bar" | |
| ) | |
| fuel_pressure = st.number_input( | |
| "Fuel Pressure (bar)", | |
| min_value=0.0, | |
| max_value=10.0, | |
| value=4.0, | |
| step=0.1, | |
| help="Normal range: 2.0-6.0 bar" | |
| ) | |
| with col2: | |
| coolant_pressure = st.number_input( | |
| "Coolant Pressure (bar)", | |
| min_value=0.0, | |
| max_value=5.0, | |
| value=2.5, | |
| step=0.1, | |
| help="Normal range: 1.5-3.5 bar" | |
| ) | |
| lub_oil_temp = st.number_input( | |
| "Lubricating Oil Temperature (°C)", | |
| min_value=0, | |
| max_value=200, | |
| value=75, | |
| help="Normal range: 50-120°C" | |
| ) | |
| coolant_temp = st.number_input( | |
| "Coolant Temperature (°C)", | |
| min_value=0, | |
| max_value=150, | |
| value=80, | |
| help="Normal range: 60-100°C" | |
| ) | |
| # ------------------------------ | |
| # Prepare Input for Prediction | |
| # ------------------------------ | |
| input_data = { | |
| "Engine rpm": engine_rpm, | |
| "Lub oil pressure": lub_oil_pressure, | |
| "Fuel pressure": fuel_pressure, | |
| "Coolant pressure": coolant_pressure, | |
| "lub oil temp": lub_oil_temp, | |
| "Coolant temp": coolant_temp | |
| } | |
| input_df = pd.DataFrame([input_data]) | |
| # Display input summary | |
| st.subheader("Input Summary") | |
| st.dataframe(input_df, use_container_width=True) | |
| # ------------------------------ | |
| # Prediction | |
| # ------------------------------ | |
| if st.button("🔍 Predict Engine Condition", type="primary"): | |
| try: | |
| prediction = model.predict(input_df)[0] | |
| probability = model.predict_proba(input_df)[0][1] | |
| # Use custom threshold for imbalanced dataset | |
| # Adjust based on your model's optimal threshold | |
| classification_threshold = 0.5 | |
| prediction = (probability >= classification_threshold).astype(int) | |
| st.markdown("---") | |
| st.subheader("Prediction Results") | |
| if prediction == 1: | |
| st.error(f"⚠️ **ENGINE FAILURE PREDICTED** - Immediate maintenance required!") | |
| st.error(f"**Failure Probability: {probability:.2%}**") | |
| st.warning(""" | |
| **Recommended Actions:** | |
| - Stop engine operation immediately | |
| - Conduct thorough inspection | |
| - Check all sensor readings | |
| - Consult maintenance team | |
| """) | |
| else: | |
| st.success(f"✅ **ENGINE CONDITION NORMAL** - No immediate action required") | |
| st.success(f"**Failure Probability: {probability:.2%}**") | |
| st.info(""" | |
| **Maintenance Recommendations:** | |
| - Continue regular monitoring | |
| - Schedule routine maintenance as planned | |
| - Keep monitoring sensor readings | |
| """) | |
| # Display confidence meter | |
| st.subheader("Confidence Level") | |
| confidence = max(probability, 1 - probability) | |
| st.progress(confidence) | |
| st.write(f"Model Confidence: {confidence:.2%}") | |
| except Exception as e: | |
| st.error(f"Error during prediction: {str(e)}") | |
| st.info("Please check your input values and try again.") | |
| # ------------------------------ | |
| # Additional Information | |
| # ------------------------------ | |
| with st.expander("ℹ️ About This Model"): | |
| st.write(""" | |
| **Model Information:** | |
| - Algorithm: XGBoost with SMOTE for class balancing | |
| - Test Accuracy: 64.42% | |
| - Precision: 76.42% | |
| - Recall: 63.01% | |
| - Dataset: 19,535 engine records | |
| **Most Important Features:** | |
| 1. Engine RPM (38.3%) | |
| 2. Fuel Pressure (16.2%) | |
| 3. Oil Temperature (13.7%) | |
| **Model Repository:** [JohnsonSAimlarge/engine-failure-predictor](https://huggingface.co/JohnsonSAimlarge/engine-failure-predictor) | |
| """) | |
| with st.expander("📊 Feature Ranges & Guidelines"): | |
| st.write(""" | |
| | Parameter | Normal Range | Critical Threshold | | |
| |-----------|--------------|-------------------| | |
| | Engine RPM | 500-8000 | >8000 or <500 | | |
| | Lub Oil Pressure | 2.0-6.0 bar | <2.0 or >6.0 | | |
| | Fuel Pressure | 2.0-6.0 bar | <2.0 or >6.0 | | |
| | Coolant Pressure | 1.5-3.5 bar | <1.5 or >3.5 | | |
| | Lub Oil Temp | 50-120°C | >120°C | | |
| | Coolant Temp | 60-100°C | >100°C | | |
| """) | |
| # Footer | |
| st.markdown("---") | |
| st.caption("Engine Failure Prediction System | Powered by XGBoost & Hugging Face") | |