Commit
·
85b7407
1
Parent(s):
93f0de5
Fix eval request
Browse files- app.py +9 -9
- requirements.txt +1 -1
- utils.py +6 -4
app.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
import streamlit as st
|
| 2 |
import pandas as pd
|
| 3 |
import logging
|
| 4 |
-
from deeploy import Client
|
| 5 |
from utils import (
|
| 6 |
get_request_body,
|
| 7 |
get_fake_certainty,
|
|
@@ -61,7 +61,7 @@ def get_input_no_button():
|
|
| 61 |
st.session_state.no_button_text = comment.replace(
|
| 62 |
st.session_state.no_button_text, st.session_state.no_comment
|
| 63 |
)
|
| 64 |
-
st.session_state.evaluation_input["
|
| 65 |
|
| 66 |
|
| 67 |
# func to be run when input changes in yes button text area
|
|
@@ -69,7 +69,7 @@ def get_input_yes_button():
|
|
| 69 |
st.session_state.yes_button_text = comment.replace(
|
| 70 |
st.session_state.yes_button_text, st.session_state.yes_comment
|
| 71 |
)
|
| 72 |
-
st.session_state.evaluation_input["
|
| 73 |
|
| 74 |
|
| 75 |
# func to disable click again for button "Get suspicious transactions"
|
|
@@ -229,7 +229,7 @@ if st.session_state.got_explanation:
|
|
| 229 |
|
| 230 |
if st.session_state.yes_button:
|
| 231 |
st.session_state.eval_selected = True
|
| 232 |
-
st.session_state.evaluation_input = {"
|
| 233 |
|
| 234 |
# col 4 contains no button
|
| 235 |
with col4:
|
|
@@ -248,8 +248,8 @@ if st.session_state.got_explanation:
|
|
| 248 |
if st.session_state.no_button_clicked:
|
| 249 |
st.session_state.eval_selected = True
|
| 250 |
st.session_state.evaluation_input = {
|
| 251 |
-
"
|
| 252 |
-
"
|
| 253 |
}
|
| 254 |
|
| 255 |
# define process for evaluation
|
|
@@ -271,7 +271,7 @@ if st.session_state.got_explanation:
|
|
| 271 |
on_change=get_input_yes_button,
|
| 272 |
)
|
| 273 |
st.session_state.evaluation_input[
|
| 274 |
-
"
|
| 275 |
] = st.session_state.yes_button_text
|
| 276 |
|
| 277 |
# if disagree button clicked ("Not money laundering") prefill with text that user
|
|
@@ -284,7 +284,7 @@ if st.session_state.got_explanation:
|
|
| 284 |
on_change=get_input_no_button,
|
| 285 |
)
|
| 286 |
st.session_state.evaluation_input[
|
| 287 |
-
"
|
| 288 |
] = st.session_state.no_button_text
|
| 289 |
# create empty state so that button submit disappears when st.empty is cleared
|
| 290 |
eval3 = st.empty()
|
|
@@ -315,6 +315,6 @@ if st.session_state.got_explanation:
|
|
| 315 |
eval1.empty()
|
| 316 |
eval2.empty()
|
| 317 |
eval3.empty()
|
| 318 |
-
st.
|
| 319 |
st.button("Next", key="next", use_container_width=True, on_click=rerun)
|
| 320 |
ChangeButtonColour("Next", "#FFFFFF", "#00052D")
|
|
|
|
| 1 |
import streamlit as st
|
| 2 |
import pandas as pd
|
| 3 |
import logging
|
| 4 |
+
from deeploy import Client, CreateEvaluation
|
| 5 |
from utils import (
|
| 6 |
get_request_body,
|
| 7 |
get_fake_certainty,
|
|
|
|
| 61 |
st.session_state.no_button_text = comment.replace(
|
| 62 |
st.session_state.no_button_text, st.session_state.no_comment
|
| 63 |
)
|
| 64 |
+
st.session_state.evaluation_input["comment"] = st.session_state.no_button_text
|
| 65 |
|
| 66 |
|
| 67 |
# func to be run when input changes in yes button text area
|
|
|
|
| 69 |
st.session_state.yes_button_text = comment.replace(
|
| 70 |
st.session_state.yes_button_text, st.session_state.yes_comment
|
| 71 |
)
|
| 72 |
+
st.session_state.evaluation_input["comment"] = st.session_state.yes_button_text
|
| 73 |
|
| 74 |
|
| 75 |
# func to disable click again for button "Get suspicious transactions"
|
|
|
|
| 229 |
|
| 230 |
if st.session_state.yes_button:
|
| 231 |
st.session_state.eval_selected = True
|
| 232 |
+
st.session_state.evaluation_input = {"agree": True} # Agree with the prediction
|
| 233 |
|
| 234 |
# col 4 contains no button
|
| 235 |
with col4:
|
|
|
|
| 248 |
if st.session_state.no_button_clicked:
|
| 249 |
st.session_state.eval_selected = True
|
| 250 |
st.session_state.evaluation_input = {
|
| 251 |
+
"agree": False, # Disagree with the prediction
|
| 252 |
+
"desired_output": {"predictions": [1]},
|
| 253 |
}
|
| 254 |
|
| 255 |
# define process for evaluation
|
|
|
|
| 271 |
on_change=get_input_yes_button,
|
| 272 |
)
|
| 273 |
st.session_state.evaluation_input[
|
| 274 |
+
"comment"
|
| 275 |
] = st.session_state.yes_button_text
|
| 276 |
|
| 277 |
# if disagree button clicked ("Not money laundering") prefill with text that user
|
|
|
|
| 284 |
on_change=get_input_no_button,
|
| 285 |
)
|
| 286 |
st.session_state.evaluation_input[
|
| 287 |
+
"comment"
|
| 288 |
] = st.session_state.no_button_text
|
| 289 |
# create empty state so that button submit disappears when st.empty is cleared
|
| 290 |
eval3 = st.empty()
|
|
|
|
| 315 |
eval1.empty()
|
| 316 |
eval2.empty()
|
| 317 |
eval3.empty()
|
| 318 |
+
st.success("Feedback submitted successfully")
|
| 319 |
st.button("Next", key="next", use_container_width=True, on_click=rerun)
|
| 320 |
ChangeButtonColour("Next", "#FFFFFF", "#00052D")
|
requirements.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
boto3==1.28.0
|
| 2 |
streamlit==1.31
|
| 3 |
watchdog==3.0.0
|
| 4 |
-
deeploy==1.
|
| 5 |
pandas>=1.3.5
|
| 6 |
babel
|
|
|
|
| 1 |
boto3==1.28.0
|
| 2 |
streamlit==1.31
|
| 3 |
watchdog==3.0.0
|
| 4 |
+
deeploy==1.39.0
|
| 5 |
pandas>=1.3.5
|
| 6 |
babel
|
utils.py
CHANGED
|
@@ -78,7 +78,7 @@ def get_request_body(datapoint):
|
|
| 78 |
|
| 79 |
# func for sorting and retrieving the explanation texts
|
| 80 |
def get_explainability_texts(shap_values, feature_texts):
|
| 81 |
-
# Separate positive and negative values, keep
|
| 82 |
positive_dict = {index: val for index, val in enumerate(shap_values) if val > 0}
|
| 83 |
# Sort dictionaries based on the magnitude of values
|
| 84 |
sorted_positive_indices = [
|
|
@@ -167,10 +167,10 @@ def get_random_suspicious_transaction(data):
|
|
| 167 |
suspicious_data = data[data["isFraud"] == 1]
|
| 168 |
max_n = len(suspicious_data)
|
| 169 |
random_nr = randrange(max_n)
|
| 170 |
-
|
| 171 |
"isFraud", axis=1
|
| 172 |
)
|
| 173 |
-
return
|
| 174 |
|
| 175 |
|
| 176 |
# func to send the evaluation to Deeploy
|
|
@@ -182,7 +182,9 @@ def send_evaluation(
|
|
| 182 |
with st.spinner("Submitting response..."):
|
| 183 |
# Call the explain endpoint as it also includes the prediction
|
| 184 |
client.evaluate(
|
| 185 |
-
deployment_id,
|
|
|
|
|
|
|
| 186 |
)
|
| 187 |
return True
|
| 188 |
except Exception as e:
|
|
|
|
| 78 |
|
| 79 |
# func for sorting and retrieving the explanation texts
|
| 80 |
def get_explainability_texts(shap_values, feature_texts):
|
| 81 |
+
# Separate positive and negative values, keep indices corresponding to keys
|
| 82 |
positive_dict = {index: val for index, val in enumerate(shap_values) if val > 0}
|
| 83 |
# Sort dictionaries based on the magnitude of values
|
| 84 |
sorted_positive_indices = [
|
|
|
|
| 167 |
suspicious_data = data[data["isFraud"] == 1]
|
| 168 |
max_n = len(suspicious_data)
|
| 169 |
random_nr = randrange(max_n)
|
| 170 |
+
suspicious_transaction = suspicious_data[random_nr - 1 : random_nr].drop(
|
| 171 |
"isFraud", axis=1
|
| 172 |
)
|
| 173 |
+
return suspicious_transaction
|
| 174 |
|
| 175 |
|
| 176 |
# func to send the evaluation to Deeploy
|
|
|
|
| 182 |
with st.spinner("Submitting response..."):
|
| 183 |
# Call the explain endpoint as it also includes the prediction
|
| 184 |
client.evaluate(
|
| 185 |
+
deployment_id,
|
| 186 |
+
prediction_log_id,
|
| 187 |
+
evaluation_input
|
| 188 |
)
|
| 189 |
return True
|
| 190 |
except Exception as e:
|