vikramronavrsc's picture
update app.py
5cb9f53 verified
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 = "Falso"
if type_of_fraud == 1:
response = "Verdadero"
if type_of_fraud == 2:
response = "Dudoso"
return response
with gr.Blocks() as demo:
gr.Markdown(
"""
# Predictor fraude
"""
)
with gr.Row():
with gr.Column():
gr.Markdown(
)
transactionFailed = gr.Dropdown(
label="Transaction failed",
choices=["False", "True"],
value="False"
)
orderAmount = gr.Slider(label="Order amount", minimum=0, maximum=354, step=6, randomize=False)
transactionAmount = gr.Slider(label="Transaction amount", minimum=0, maximum=354, step=6, randomize=False)
orderState = gr.Radio(
label="Order state",
choices=[ "failed","fulfilled", "pending"],
value="failed"
)
emailDomain = gr.Dropdown(
label="Email domain",
choices=["biz","com","info","net","org","weird"],
value="biz"
)
emailProvider = gr.Dropdown(
label="Email provider",
choices=["gmail", "hotmail", "yahoo", "weird", "other"],
value="gmail"
)
customerIPAddressSimplified = gr.Dropdown(
label="Customer IP Address",
choices=["only_letters", "digits_and_letters"],
value="only_letters"
)
sameCity = gr.Radio(
label="Same city",
choices=[ "no", "yes","unknown"],
value="no"
)
paymentMethodRegistrationFailure = gr.Dropdown(
label="Payment method registration failure",
choices=[ "True","False",],
value="True"
)
paymentMethodType = gr.Dropdown(
label="Payment method type",
choices=["apple pay","bitcoin","card","paypal"],
value="apple pay"
)
paymentMethodProvider = gr.Dropdown(
label="Payment method provider",
choices=["American Express", "Diners Club / Carte Blanche","Discover","JCB 15 digit" ,"JCB 16 digit","Maestro" , "Mastercard", "VISA 13 digit", "VISA 16 digit", "Voyager"],
multiselect=False,
value="American Express"
)
paymentMethodIssuer = gr.Dropdown(
label="Payment method issuer",
choices=["Bastion Banks","Bulwark Trust Corp.","Citizens First Banks","Fountain Financial Inc.","Grand Credit Corporation","Her Majesty Trust","His Majesty Bank Corp.","Rose Bancshares","Solace Banks","Vertex Bancorp","weird"],
multiselect=False,
value="Bastion Banks"
)
with gr.Column():
gr.Markdown(
"""
## Prediccion
"""
)
label = gr.Label(label="Resultado")
predict_btn = gr.Button(value="Analizar")
predict_btn.click(
predict,
inputs=[
orderAmount,
orderState,
paymentMethodRegistrationFailure,
paymentMethodType,
paymentMethodProvider,
paymentMethodIssuer,
transactionAmount,
transactionFailed,
emailDomain,
emailProvider,
customerIPAddressSimplified,
sameCity,
],
outputs=[label],
api_name="prediccion"
)
demo.launch()