KarinaCardozo's picture
Update app.py
dbdebc1
import gradio as gr
import pandas as pd
import pickle
import os
MAIN_FOLDER = os.path.dirname(__file__)
# Define params names
PARAMS_NAME = [
"orderAmount",
"orderState",
"paymentMethodRegistrationFailure",
"paymentMethodType",
"paymentMethodProvider",
"paymentMethodIssuer",
"transactionAmount",
"transactionFailed",
"emailDomain",
"emailProvider",
"customerIPAddressSimplified",
"sameCity"
]
# Load model
with open("model/modelo_proyecto_final.pkl", "rb") as f:
model = pickle.load(f)
# Columnas
COLUMNS_PATH = "model/categories_ohe_without_fraudulent.pickle"
with open(COLUMNS_PATH, 'rb') as handle:
ohe_tr = pickle.load(handle)
BINS_ORDER = os.path.join(MAIN_FOLDER, "model/saved_bins_order.pickle")
with open(BINS_ORDER, 'rb') as handle:
new_saved_bins_order = pickle.load(handle)
BINS_TRANSACTION = os.path.join(MAIN_FOLDER, "model/saved_bins_transaction.pickle")
with open(BINS_TRANSACTION, 'rb') as handle:
new_saved_bins_transaction = pickle.load(handle)
def predict(*args):
answer_dict = {}
for i in range(len(PARAMS_NAME)):
answer_dict[PARAMS_NAME[i]] = [args[i]]
# Crear dataframe
single_instance = pd.DataFrame.from_dict(answer_dict)
# Manejar puntos de corte o bins
single_instance["orderAmount"] = single_instance["orderAmount"].astype(float)
single_instance["orderAmount"] = pd.cut(single_instance['orderAmount'],
bins=new_saved_bins_order,
include_lowest=True)
single_instance["transactionAmount"] = single_instance["transactionAmount"].astype(int)
single_instance["transactionAmount"] = pd.cut(single_instance['transactionAmount'],
bins=new_saved_bins_order,
include_lowest=True)
# One hot encoding
single_instance_ohe = pd.get_dummies(single_instance).reindex(columns = ohe_tr).fillna(0)
prediction = model.predict(single_instance_ohe)
# Cast numpy.int64 to just a int
type_of_fraud = int(prediction[0])
# Adaptaci贸n respuesta
response = "Error parsing value"
if type_of_fraud == 0:
response = "False"
if type_of_fraud == 1:
response = "True"
if type_of_fraud == 2:
response = "Warning"
return response
with gr.Blocks() as demo:
gr.Markdown(
"""
# Prevenci贸n de Fraude 馃攳 馃攳
"""
)
with gr.Row():
with gr.Column():
gr.Markdown(
"""
## Predecir si un cliente es fraudulento o no.
"""
)
orderAmount = gr.Slider(label="Order amount", minimum=0, maximum=355, step=2, randomize=True)
orderState = gr.Radio(
label="Order state",
choices=["fulfilled", "failed", "pending"],
value="failed"
)
paymentMethodRegistrationFailure = gr.Radio(
label="Payment method registration failure",
choices=["False", "True"],
value="True"
)
paymentMethodType = gr.Radio(
label="Payment method type",
choices=["card", "apple pay ", "paypal", "bitcoin"],
value="bitcoin"
)
paymentMethodProvider = gr.Dropdown(
label="Payment method provider",
choices=["JCB 16 digit", "VISA 16 digit", "Voyager", "Diners Club / Carte Blanche", "Maestro", "VISA 13 digit", "Discover", "American Express", "JCB 15 digit", "Mastercard"],
multiselect=False,
value="American Express"
)
paymentMethodIssuer = gr.Dropdown(
label="Payment method issuer",
choices=["Her Majesty Trust", "Vertex Bancorp", "Fountain Financial Inc.", "His Majesty Bank Corp.", "Bastion Banks", "Bulwark Trust Corp.", "weird", "Citizens First Banks", "Grand Credit Corporation", "Solace Banks", "Rose Bancshares"],
multiselect=False,
value="Bastion Banks"
)
transactionAmount = gr.Slider(label="Transaction amount", minimum=0, maximum=355, step=2, randomize=True)
transactionFailed = gr.Radio(
label="Transaction failed",
choices=["False", "True"],
value="False"
)
emailDomain = gr.Radio(
label="Email domain",
choices=["com", "biz", "org", "net", "info", "weird"],
value="com"
)
emailProvider = gr.Radio(
label="Email provider",
choices=["gmail", "hotmail", "yahoo", "other", "weird"],
value="gmail"
)
customerIPAddressSimplified = gr.Radio(
label="Customer IP Address",
choices=["only_letters", "digits_and_letters"],
value="only_letter"
)
sameCity = gr.Radio(
label="Same city",
choices=["unknown", "no", "yes"],
value="unknown"
)
with gr.Column():
gr.Markdown(
"""
## Predicci贸n
"""
)
label = gr.Label(label="Score")
predict_btn = gr.Button(value="Evaluar")
predict_btn.click(
predict,
inputs=[
orderAmount,
orderState,
paymentMethodRegistrationFailure,
paymentMethodType,
paymentMethodProvider,
paymentMethodIssuer,
transactionAmount,
transactionFailed,
emailDomain,
emailProvider,
customerIPAddressSimplified,
sameCity,
],
outputs=[label],
api_name="prediccion"
)
gr.Markdown(
"""
<p style='text-align: center'>
<a >Proyecto Final Kari
</a>
</p>
"""
)
demo.launch()