#import the necessary dependencies import streamlit as st import streamlit.components.v1 as cmpnts import shap import numpy as np import pandas as pd import predictor #INTERFACE #Creating an empty dataset to use in the model data = pd.DataFrame(np.zeros((1,60)),columns=predictor.X_test.columns, index=[0]) st.title("*The Ames, Iowa Housing Price Predictor*") st.header("Description:") st.subheader("This is a showcase of the regression model, which has been trained using LightGBM and Optuna for hyperparameter tuning on the Ames, Iowa Housing Dataset. On the side are the top 20 features which this model deems the most relevant towards housing prices. Please try from a range of different inputs!") OverallQual = st.sidebar.slider("Overall Quality", 1, 5) with st.sidebar: data["OverallQual"] = OverallQual GrLivingArea = st.slider("Above ground Living Area (sqft):", 0, 5000) data["GrLivArea"] = GrLivingArea YearBuilt = st.number_input("Year Built: ", value=2000, min_value=1800, max_value=2023) data["YearBuilt"] = YearBuilt TotalBsmtSF = st.number_input("Total Basement Square Footage:", value=0, min_value=0) data["TotalBsmtSF"] = TotalBsmtSF BsmtFinSF1 = st.number_input("Square Footage of Type 1 Basement (same as total if one type):", value=0, min_value=0) data["BsmtFinSF1"] = BsmtFinSF1 data["YearRemodAdd"] = st.number_input("Year of Remodeling/Additions (same as year built if no remodeling)", value = 2000, min_value= 1800,max_value=2023) data["LotArea"] = st.slider("Lot Area:", 0, 5000) data["OverallCond"] = st.slider("Overall Condition of the House (5 being the best):", 1, 5) data["1stFlrSF"] = st.number_input("First Floor Square Footage:", min_value=0,value=0) data["GarageCars"] = st.slider("Number of Cars the Garage Can Hold:", 0, 10) data["2ndFlrSF"] = st.number_input("Second Floor Square Footage:", value=0, min_value=0) data["Fireplaces"] = st.slider("Number of Fireplaces:", 0, 10) data["Neighborhood"] = st.slider("Neighborhood:", 0, 24) data["GarageArea"] = st.number_input("Garage Area (sqft):", value= 0, min_value=0) data["BsmtFullBath"] = st.slider("Number of Full Bathrooms in the Basement:", 0, 5) data["FullBath"] = st.slider("Number of Full Bathroooms Above Ground:", 0, 5) data["HalfBath"] = st.slider("Number of Half Bathrooms Above Ground (no shower):", 0, 5) data["KitchenQual"] = st.slider("Quality of the Kitchen", 1, 5) data["OpenPorchSF"] = st.number_input("Open Porch Square Footage:", value=0, min_value=0) data["MoSold"] = st.slider("Month Sold:", 1,12) from streamlit import components def st_shap(plot, height=None): shap_html = f"{shap.getjs()}{plot.html()}" cmpnts.html(shap_html, height=height) #The button if st.button("Calculate Your House Price!"): results = predictor.make_a_prediction(data) st.write('{0:.2f}'.format(results[0])) objects = predictor.create_shap_models(data) for obj in objects: st_shap(obj)