# app.py (your Streamlit file) import streamlit as st import numpy as np import pickle from sklearn.metrics import accuracy_score, f1_score, roc_auc_score import pandas as pd st.title("🧠 Sleep Event Prediction") # --- Load Pickles --- @st.cache_resource def load_all(): with open("model.pkl", "rb") as f: model = pickle.load(f) with open("scaler.pkl", "rb") as f: scaler = pickle.load(f) with open("label_encoder.pkl", "rb") as f: le = pickle.load(f) with open("X_test.pkl", "rb") as f: X_test = pickle.load(f) with open("y_test.pkl", "rb") as f: y_test = pickle.load(f) return model, scaler, le, X_test, y_test model, scaler, le, X_test, y_test = load_all() # --- Predict and Evaluate --- y_pred = model.predict(X_test) y_proba = model.predict_proba(X_test) accuracy = accuracy_score(y_test, y_pred) f1 = f1_score(y_test, y_pred, average='macro') if y_proba.shape[1] == 2: roc = roc_auc_score(y_test, y_proba[:, 1]) else: roc = roc_auc_score(y_test, y_proba, multi_class='ovo', average='macro') # --- Display Metrics --- # st.subheader("Model Performance") # st.metric("Accuracy", f"{accuracy:.4f}") # st.metric("F1 Score", f"{f1:.4f}") # st.metric("ROC AUC Score", f"{roc:.4f}") # Create a DataFrame for metrics import pandas as pd st.subheader("Model Performance") # Create a DataFrame for metrics metrics_df = pd.DataFrame({ "Metric": ["Accuracy", "F1 Score", "ROC AUC Score"], "Value": [f"{accuracy:.4f}", f"{f1:.4f}", f"{roc:.4f}"] }) # Display as table st.table(metrics_df) # --- Predict User Input --- st.subheader("Predict Sleep Event") anglez = st.number_input("Enter anglez:", value=27.8800) enmo = st.number_input("Enter enmo:", value=0.0000) if st.button("Predict Sleep Event"): input_data = np.array([[anglez, enmo]]) input_scaled = scaler.transform(input_data) prediction = model.predict(input_scaled)[0] label = le.inverse_transform([prediction])[0] st.success(f"Predicted Event: {label}")