mdurst12's picture
Update app.py
7f7f0e6
raw
history blame
4.97 kB
import pickle
import pandas as pd
import shap
from shap.plots._force_matplotlib import draw_additive_plot
import gradio as gr
import numpy as np
import matplotlib.pyplot as plt
# load the model from disk
loaded_model = pickle.load(open("XGB_softprob.pkl", 'rb'))
# Setup SHAP
explainer = shap.Explainer(loaded_model) # PLEASE DO NOT CHANGE THIS.
# Create the main function for server
# Create the main function for server
def main_func(CLIMATE_SCENARIO, EAL_SCORE,SOVI_SCORE,SOCIAL,ECONOMY,HOUSING_INFRASTRUCTURE,COMMUNITY_CAPITAL,INSTITUTIONAL,ENVIRONMENT):
new_row = pd.DataFrame.from_dict({'CLIMATE_SCENARIO': CLIMATE_SCENARIO, 'EAL_SCORE':EAL_SCORE,'SOVI_SCORE':SOVI_SCORE,
'SOCIAL':SOCIAL,'ECONOMY':ECONOMY,'HOUSING_INFRASTRUCTURE':HOUSING_INFRASTRUCTURE,
'COMMUNITY_CAPITAL':COMMUNITY_CAPITAL,'INSTITUTIONAL':INSTITUTIONAL,'ENVIRONMENT':ENVIRONMENT}, orient = 'index').transpose()
prob = loaded_model.predict_proba(new_row)
# compute SHAP values
explainer = shap.TreeExplainer(loaded_model)
shap_values = explainer.shap_values(new_row,check_additivity=False)
plot = shap.summary_plot(shap_values[0], new_row.values, feature_names = new_row.columns)
plt.tight_layout()
local_plot = plt.gcf()
plt.close()
return {"Very Low Risk": float(prob[0][0]), "Moderately Low Risk": float(prob[0][1]), "Moderate Risk": float(prob[0][2]), "Moderately High Risk": float(prob[0][3]), "Very High Risk": float(prob[0][4])}, local_plot
# Create the UI
title = "**Climate Risk Model** 🌍"
description1 = """
The BRIC index considers six broad categories of community disaster resilience: social, economic, community capital, institutional, infrastructural, and environmental at the county level. Used as an initial baseline for monitoring existing attributes of resilience to natural hazards, BRIC can be used to compare places to one another, to determine the specific drivers of resilience for counties, and to monitor improvements in resilience over time.
"""
description2 = """
To use the app, click on one of the examples, or adjust the values of the six factors, and click on Analyze. ✨
"""
with gr.Blocks(title=title) as demo:
gr.Markdown(f"## {title}")
# gr.Markdown("""![marketing](types-of-employee-turnover.jpg)""")
gr.Markdown(description1)
gr.Markdown("""---""")
gr.Markdown(description2)
gr.Markdown("""---""")
with gr.Row():
with gr.Column():
CLIMATE_SCENARIO = gr.Slider(label="Climate Scenario", minimum=0, maximum=2, value=0, step=1)
EAL_SCORE = gr.Slider(label="EAL Score", minimum=0, maximum=100, value=20, step=5)
SOVI_SCORE = gr.Slider(label="SOVI Score", minimum=0, maximum=100, value=20, step=5)
SOCIAL = gr.Slider(label="Social", minimum=0, maximum=1, value=.5, step=.1)
ECONOMY = gr.Slider(label="Economy", minimum=0, maximum=1, value=.5, step=.1)
HOUSING_INFRASTRUCTURE = gr.Slider(label="Housing Infrastructure", minimum=0, maximum=1, value=.5, step=.1)
COMMUNITY_CAPITAL = gr.Slider(label="Community Capital", minimum=0, maximum=1, value=.5, step=.1)
INSTITUTIONAL = gr.Slider(label="Institutional", minimum=0, maximum=1, value=.5, step=.1)
ENVIRONMENT = gr.Slider(label="Environment", minimum=0, maximum=1, value=.5, step=.1)
submit_btn = gr.Button("Analyze")
with gr.Column(visible=True) as output_col:
label = gr.Label(label = "RISK RATING")
local_plot = gr.Plot(label = 'Shap:')
submit_btn.click(
main_func,
[CLIMATE_SCENARIO,EAL_SCORE,SOVI_SCORE,SOCIAL,ECONOMY,HOUSING_INFRASTRUCTURE,COMMUNITY_CAPITAL,INSTITUTIONAL,ENVIRONMENT],
[label,local_plot], api_name="Climate Risk Model"
)
gr.Markdown("### Click on any of the examples below to see how it works:")
gr.Examples([[0, 46.23, 63.85, .564, .4703, .3068, .2161, .3623, .6264]],
[CLIMATE_SCENARIO,EAL_SCORE,SOVI_SCORE,SOCIAL,ECONOMY,HOUSING_INFRASTRUCTURE,COMMUNITY_CAPITAL,INSTITUTIONAL,ENVIRONMENT],
[label,local_plot], main_func, cache_examples=True, label="Miami-Dade County, Florida")
gr.Examples([[0, 21.05, 15.37, .7231, .5359, .2884, .3828, .4070, .5015]],
[CLIMATE_SCENARIO,EAL_SCORE,SOVI_SCORE,SOCIAL,ECONOMY,HOUSING_INFRASTRUCTURE,COMMUNITY_CAPITAL,INSTITUTIONAL,ENVIRONMENT],
[label,local_plot], main_func, cache_examples=True, label="Washington County, Minnesota")
gr.Examples([[6.929, 4.178, .8181, .5221, .3878, .2463, .389,.3921]],
[CLIMATE_SCENARIO,EAL_SCORE,SOVI_SCORE,SOCIAL,ECONOMY,HOUSING_INFRASTRUCTURE,COMMUNITY_CAPITAL,INSTITUTIONAL,ENVIRONMENT],
[label,local_plot], main_func, cache_examples=True, label="Falls Church, Virginia")
demo.launch()