import streamlit as st import pandas as pd from sklearn.svm import SVR from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt # --- Function to perform SVM Regression and display results --- def perform_svm_regression(df, problem_description, interpretation_text): st.write(problem_description) st.write("**Dataset:**") st.write(df) # Hyperparameters with unique keys kernel = st.selectbox("Kernel:", ("linear", "rbf", "poly"), key=f"kernel_{problem_description}") C = st.slider("C (Regularization parameter):", 0.1, 10.0, 1.0, 0.1, key=f"C_{problem_description}") epsilon = st.slider("Epsilon (Tolerance for errors):", 0.01, 1.0, 0.1, 0.01, key=f"epsilon_{problem_description}") # Train-test split X = df.iloc[:,:-1] y = df.iloc[:, -1] X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) # Model training model = SVR(kernel=kernel, C=C, epsilon=epsilon) model.fit(X_train, y_train) # Predictions y_pred = model.predict(X_test) # Evaluation metrics mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) st.write(f"Mean Squared Error: {mse:.2f}") st.write(f"R-squared: {r2:.2f}") # Visualization fig, ax = plt.subplots() ax.scatter(y_test, y_pred) ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], "k--", lw=2) ax.set_xlabel("Actual") ax.set_ylabel("Predicted") st.pyplot(fig) # Interpretation st.write("**Interpretation:**") st.write(interpretation_text) def main(): # --- App --- st.title("SVM Regressor Demo") about = """This app demonstrates the use of Support Vector Machine (SVM) regression for different problems: Business, Engineering, and Education. Select a problem to view the dataset, train an SVM model, and interpret the results. Explore the impact of hyperparameter tuning and visualize the predictions. Created by Louie F. Cervantes, M.Eng. (Information Engineering)""" with st.expander("About this App"): st.markdown(about) # Tabs for each problem tab1, tab2, tab3 = st.tabs( ["Business Problem", "Engineering Problem", "Education Problem"] ) # --- Business Problem --- with tab1: df = pd.read_csv("business_data.csv") perform_svm_regression( df, "**Business Problem:** Predicting customer churn based on usage patterns and demographics.", "The model predicts customer churn rate based on usage patterns and demographics. " "This information can be used to identify customers at risk of churning and take proactive steps to retain them.", ) # --- Engineering Problem --- with tab2: df = pd.read_csv("engineering_data.csv") perform_svm_regression( df, "**Engineering Problem:** Predicting the remaining useful life of an industrial machine based on sensor data.", "The model predicts the remaining useful life of an industrial machine based on sensor data. " "This information can be used to schedule maintenance and prevent costly downtime.", ) # --- Education Problem --- with tab3: df = pd.read_csv("education_data.csv") perform_svm_regression( df, "**Education Problem:** Predicting student performance on a standardized test based on study habits and previous grades.", "The model predicts student performance on a standardized test based on study habits and previous grades. " "This information can be used to identify students who may need extra help and provide them with appropriate support.", ) if __name__ == "__main__": main()