import os import pickle import pandas as pd import gradio as gr EDVAI_URL = """\ https://www.escueladedatosvivos.ai/cursos/bootcamp-de-data-science """ FOOTER_HTML = f"""\

Proyecto demo creado en el bootcamp de EDVAI 🤗

""" # Define params names PARAMS_NAME = [ "orderAmount", "orderState", "paymentMethodRegistrationFailure", "paymentMethodType", "paymentMethodProvider", "paymentMethodIssuer", "transactionFailed", "emailDomain", "emailProvider", "customerIPAddressSimplified", "sameCity", ] THRESHOLD = 0.44 MAIN_FOLDER = os.path.dirname(__file__) # Model model_filepath = "data/modelo_proyecto_final.pkl" MODEL_PATH = os.path.join(MAIN_FOLDER, model_filepath) with open(MODEL_PATH, "rb") as f: model = pickle.load(f) # Columnas columns_filepath = "data/categories_ohe_without_fraudulent.pkl" COLUMNS_PATH = os.path.join(MAIN_FOLDER, columns_filepath) with open(COLUMNS_PATH, 'rb') as handle: ohe_tr = pickle.load(handle) # Bins - Order Amount bins_order_filepath = "data/saved_bins_order_amount.pkl" BINS_ORDER_PATH = os.path.join(MAIN_FOLDER, bins_order_filepath) with open(BINS_ORDER_PATH, 'rb') as handle: new_saved_bins_order = pickle.load(handle) def predict_fraud_customer(*args): request_dict = { param_name: [param_value] for param_name, param_value in zip(PARAMS_NAME, args) } # Generate pandas DataFrame single_instance = pd.DataFrame.from_dict(request_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, ) # One hot encoding single_instance_ohe = pd.get_dummies(single_instance) single_instance_ohe = single_instance_ohe.reindex(columns=ohe_tr).fillna(0) # Prediction # prediction = model.predict(single_instance_ohe) # score = int(prediction[0]) # return {"score": score} prediction_proba = model.predict_proba(single_instance_ohe) # Apply threshold is_fraudulent = True if prediction_proba[:, 1] >= THRESHOLD else False return is_fraudulent 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. """ ) order_amount_slider = gr.Slider( label="Order amount", minimum=1, maximum=100, step=1, randomize=True, ) order_state_radio = gr.Radio( label="Order state", choices=["failed", "fulfilled", "pending"], value="failed", ) payment_method_registration_failure_radio = gr.Radio( label="Payment method registration failure", choices=["True", "False"], value="True", ) payment_method_type_radio = gr.Radio( label="Payment method type", choices=["apple pay", "bitcoin", "card", "paypal"], value="bitcoin", ) payment_method_provider_dropdown = 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', ) payment_method_issuer_dropdown = 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', ) transaction_failed_radio = gr.Radio( label="Transaction failed", choices=["True", "False"], value="False", ) email_domain_radio = gr.Radio( label="Email domain", choices=["biz", "com", "info", "net", "org", "weird"], value="com", ) email_provider_radio = gr.Radio( label="Email provider", choices=["gmail", "hotmail", "yahoo", "weird", "other"], value="gmail", ) customer_ip_address_radio = gr.Radio( label="Customer IP Address", choices=["digits_and_letters", "only_letters"], value="digits_and_letters", ) same_city_radio = gr.Radio( label="Same city", choices=["no", "yes", "unknown"], value="unknown", ) with gr.Column(): gr.Markdown( """ ## Predicción """ ) label = gr.Label(label="Es Fraude?") predict_btn = gr.Button(value="Evaluar") predict_btn.click( predict_fraud_customer, inputs=[ order_amount_slider, order_state_radio, payment_method_registration_failure_radio, payment_method_type_radio, payment_method_provider_dropdown, payment_method_issuer_dropdown, transaction_failed_radio, email_domain_radio, email_provider_radio, customer_ip_address_radio, same_city_radio, ], outputs=[label], ) gr.Markdown(FOOTER_HTML) def main(): demo.launch() if __name__ == "__main__": main()