adollbo commited on
Commit
2187b60
·
1 Parent(s): dd30f5c

added new functions, fixed data processing:

Browse files

- changed to top 5 features
- rounded floats to 2 decimals

Files changed (1) hide show
  1. utils.py +43 -14
utils.py CHANGED
@@ -2,8 +2,6 @@ import streamlit.components.v1 as components
2
  import streamlit as st
3
  from random import randrange, uniform
4
  import pandas as pd
5
- import joblib
6
- import dill
7
  import logging
8
  import numpy as np
9
 
@@ -52,24 +50,26 @@ def get_explainability_texts(shap_values, feature_texts):
52
  # Sort dictionaries based on the magnitude of values
53
  sorted_positive_indices = [index for index, _ in sorted(positive_dict.items(), key=lambda item: abs(item[1]), reverse=True)]
54
  positive_texts = [feature_texts[x] for x in sorted_positive_indices]
55
- if len(positive_texts) > 8:
56
- positive_texts = positive_texts[:8]
 
57
  return positive_texts, sorted_positive_indices
58
 
59
 
60
  def get_explainability_values(pos_indices, datapoint):
61
- data = datapoint.iloc[0].tolist()
62
- transformed_data = transformation(input=data, categories=CATEGORIES)
63
- print(transformed_data)
64
  vals = []
65
  for idx in pos_indices:
66
  if idx in range(7,11) or idx in range(13,18):
67
- val = str(bool(data[idx])).capitalize()
68
  else:
69
- val = data[idx]
70
  vals.append(val)
71
- if len(vals) > 8:
72
- vals = vals[:8]
 
73
  return vals
74
 
75
  def get_fake_certainty():
@@ -120,10 +120,39 @@ def get_model_url():
120
  deployment_id = ""
121
  return model_url, workspace_id, deployment_id
122
 
123
- def get_explanation(certainty, explainability_texts, explainability_values):
124
  cleaned = [x.replace(':', '') for x in explainability_texts]
125
- fi = [f'{explainability_texts[i]} is {x}' for i,x in enumerate(cleaned)]
126
  fi.insert(0, 'Important suspicious features: ')
127
  result = '\n'.join(fi)
128
  comment = f"Model certainty is {certainty}" + '\n''\n' + result
129
- return comment
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  import streamlit as st
3
  from random import randrange, uniform
4
  import pandas as pd
 
 
5
  import logging
6
  import numpy as np
7
 
 
50
  # Sort dictionaries based on the magnitude of values
51
  sorted_positive_indices = [index for index, _ in sorted(positive_dict.items(), key=lambda item: abs(item[1]), reverse=True)]
52
  positive_texts = [feature_texts[x] for x in sorted_positive_indices]
53
+ positive_texts = positive_texts[2:]
54
+ if len(positive_texts) > 5:
55
+ positive_texts = positive_texts[:5]
56
  return positive_texts, sorted_positive_indices
57
 
58
 
59
  def get_explainability_values(pos_indices, datapoint):
60
+ data = datapoint.iloc[0].tolist()
61
+ rounded_data = [round(value, 2) if isinstance(value, float) else value for value in data]
62
+ transformed_data = transformation(input=rounded_data, categories=CATEGORIES)
63
  vals = []
64
  for idx in pos_indices:
65
  if idx in range(7,11) or idx in range(13,18):
66
+ val = str(bool(transformed_data[idx])).capitalize()
67
  else:
68
+ val = transformed_data[idx]
69
  vals.append(val)
70
+ vals = vals[2:]
71
+ if len(vals) > 5:
72
+ vals = vals[:5]
73
  return vals
74
 
75
  def get_fake_certainty():
 
120
  deployment_id = ""
121
  return model_url, workspace_id, deployment_id
122
 
123
+ def get_comment_explanation(certainty, explainability_texts, explainability_values):
124
  cleaned = [x.replace(':', '') for x in explainability_texts]
125
+ fi = [f'{cleaned[i]} is {x}' for i, x in enumerate(explainability_values)]
126
  fi.insert(0, 'Important suspicious features: ')
127
  result = '\n'.join(fi)
128
  comment = f"Model certainty is {certainty}" + '\n''\n' + result
129
+ return comment
130
+
131
+ def create_data_input_table(datapoint, col_names):
132
+ st.subheader("Flagged Transaction:")
133
+ data = datapoint.iloc[0].tolist()
134
+ data[7:12] = [bool(value) for value in data[7:12]]
135
+ rounded_list = [round(value, 2) if isinstance(value, float) else value for value in data]
136
+ df = pd.DataFrame({"Feature name": col_names, "Value": rounded_list })
137
+ st.dataframe(df, hide_index=True, width=450, height=35*len(df)+38)
138
+
139
+ # Create a function to generate a table
140
+ def create_table(texts, values, title):
141
+ df = pd.DataFrame({"Feature Explanation": texts, 'Value': values})
142
+ st.markdown(f'#### {title}') # Markdown for styling
143
+ st.dataframe(df, hide_index=True, width=450) # Display a simple table
144
+
145
+
146
+ def ChangeButtonColour(widget_label, font_color, background_color='transparent'):
147
+ htmlstr = f"""
148
+ <script>
149
+ var elements = window.parent.document.querySelectorAll('button');
150
+ for (var i = 0; i < elements.length; ++i) {{
151
+ if (elements[i].innerText == '{widget_label}') {{
152
+ elements[i].style.color ='{font_color}';
153
+ elements[i].style.background = '{background_color}'
154
+ }}
155
+ }}
156
+ </script>
157
+ """
158
+ components.html(f"{htmlstr}", height=0, width=0)