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()