import streamlit as st import pandas as pd import logging from deeploy import Client from utils import get_request_body, get_fake_certainty, get_model_url, get_random_suspicious_transaction from utils import get_explainability_texts, get_explainability_values from utils import COL_NAMES, feature_texts from visual_components import create_data_input_table, create_table, ChangeButtonColour logging.basicConfig(level=logging.INFO) st.set_page_config(layout="wide") st.title("Money Laundering System") st.divider() data = pd.read_pickle("data/preprocessed_data.pkl") # data = data.drop('isFraud', axis=1) # Disable the submit button after it is clicked def disable(): st.session_state.disabled = True # Initialize disabled for form_submit_button to False if "disabled" not in st.session_state: st.session_state.disabled = False st.markdown(""" """, unsafe_allow_html=True) with st.sidebar: # Add deeploy logo st.image("deeploy_logo.png", width=270) # Ask for model URL and token host = st.text_input("Host (changing is optional)", "app.deeploy.ml") model_url, workspace_id, deployment_id = get_model_url() deployment_token = st.text_input("Deeploy Model Token", "my-secret-token") if deployment_token == "my-secret-token": st.warning( "Please enter Deeploy API token." ) else: st.button("Get suspicious transaction", key="predict_button", help="Click to get a suspicious transaction", use_container_width=True, on_click=disable, disabled=st.session_state.disabled ) #on_click=lambda: st.experimental_rerun() ChangeButtonColour("Get suspicious transaction", '#FFFFFF', "#00052D")#'#FFFFFF', "#00052D" # define client optsions and instantiate client client_options = { "host": host, "deployment_token": deployment_token, "workspace_id": workspace_id, } client = Client(**client_options) # st.text(client_options) # st.text(deployment_id) if "predict_button" not in st.session_state: st.session_state.predict_button = False st.info( "Fill in left hand side and click on button to observe a potential fraudulent transaction" ) if st.session_state.predict_button: try: with st.spinner("Loading..."): datapoint_pd = get_random_suspicious_transaction(data) request_body = get_request_body(datapoint_pd) # Call the explain endpoint as it also includes the prediction exp = client.explain(request_body=request_body, deployment_id=deployment_id) shap_values = exp['explanations'][0]['shap_values'] col1, col2 = st.columns(2) with col1: create_data_input_table(datapoint_pd, COL_NAMES) with col2: st.subheader('Prediction Explanation: ') certainty = get_fake_certainty() st.metric(label='#### Model Certainty', value=certainty) explainability_texts, sorted_indices = get_explainability_texts(shap_values, feature_texts) explainability_values = get_explainability_values(sorted_indices, datapoint_pd) create_table(explainability_texts, explainability_values, 'Important Suspicious Variables: ') st.subheader("") # st.markdown("