File size: 6,118 Bytes
5eab0d7
83001a5
5eab0d7
 
 
dfd5c7a
5eab0d7
f82589d
bc24599
 
f82589d
bc24599
 
f82589d
bc24599
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f82589d
bc24599
 
f82589d
bc24599
 
 
 
 
 
 
 
f82589d
bc24599
 
 
 
 
 
 
 
 
 
 
 
 
f82589d
bc24599
 
 
f82589d
bc24599
 
f82589d
bc24599
 
 
 
 
 
 
 
 
 
 
f82589d
bc24599
 
 
 
 
 
 
153d815
bc24599
f82589d
 
 
dfd5c7a
 
bc24599
f82589d
153d815
 
dfd5c7a
153d815
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f82589d
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import gradio as gr
import joblib
import pandas as pd
import numpy as np
from tensorflow.keras.models import load_model
from sklearn.preprocessing import StandardScaler

# Cargar el modelo
#modelo = load_model('mi_modelo_red_neuronal.h5')
modelo = joblib.load('mi_modelo_Adaboost_V3.pkl')

def transformacion (dataframe_1):
  dataframe_1.replace({'estado_terminal':{'Activo':1,'Bloqueado':0}}, inplace=True)

  #Se seleccionan todas las filas de las columnas 2,3 y 6, y todas que van de la 14 a la 37
  dataframe_1 = dataframe_1.iloc[:, [2,4,6] + list(range(14, 37))]
  
  dataframe_1['tecnologiapp_a'] = 0
  dataframe_1.loc[dataframe_1['tecnologiapp'] == 'a', 'tecnologiapp_a'] = 1
  dataframe_1['tecnologiapp_b'] = 0
  dataframe_1.loc[dataframe_1['tecnologiapp'] == 'b', 'tecnologiapp_b'] = 1
  dataframe_1['tecnologiapp_c'] = 0
  dataframe_1.loc[dataframe_1['tecnologiapp'] == 'c', 'tecnologiapp_c'] = 1
  dataframe_1['tecnologiapp_d'] = 0
  dataframe_1.loc[dataframe_1['tecnologiapp'] == 'd', 'tecnologiapp_d'] = 1
  dataframe_1['tecnologiaaf_a'] = 0
  dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'a', 'tecnologiaaf_a'] = 1
  dataframe_1['tecnologiaaf_b'] = 0
  dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'b', 'tecnologiaaf_b'] = 1
  dataframe_1['tecnologiaaf_c'] = 0
  dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'c', 'tecnologiaaf_c'] = 1
  dataframe_1['tecnologiaaf_d'] = 0
  dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'd', 'tecnologiaaf_d'] = 1
  dataframe_1['tecnologiaaf_e'] = 0
  dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'e', 'tecnologiaaf_e'] = 1

  #Se crea DataFRame
  data_sel_num = pd.DataFrame()

  #Se transforma la data
  data_sel_num['log_trx_dia_cero'] = np.log1p(dataframe_1['trx_dia_cero'])
  data_sel_num['log_trx_dia_uno'] = np.log1p(dataframe_1['trx_dia_uno'])
  data_sel_num['log_trx_dia_dos'] = np.log1p(dataframe_1['trx_dia_dos'])
  data_sel_num['log_trx_dia_tres'] = np.log1p(dataframe_1['trx_dia_tres'])
  data_sel_num['log_trx_dia_cuatro'] = np.log1p(dataframe_1['trx_dia_cuatro'])
  data_sel_num['log_trx_dia_cinco'] = np.log1p(dataframe_1['trx_dia_cinco'])
  data_sel_num['log_trx_dia_seis'] = np.log1p(dataframe_1['trx_dia_seis'])

  data_sel_num['log_trx_mes_tres'] = np.log1p(dataframe_1['trx_mes_tres'])
  data_sel_num['log_trx_mes_dos'] = np.log1p(dataframe_1['trx_mes_dos'])
  data_sel_num['log_trx_mes_uno'] = np.log1p(dataframe_1['trx_mes_uno'])
  
  data_sel_num['log_total_terminales'] = np.log1p(dataframe_1['total_terminales'])
  
  data_sel_num['sqrt_cantidad_falla_m3'] = np.power(dataframe_1['cantidad_falla_m3'], 0.1)
  data_sel_num['sqrt_cantidad_falla_m2'] = np.power(dataframe_1['cantidad_falla_m3'], 0.1)
  data_sel_num['sqrt_cantidad_falla_mes1'] = np.power(dataframe_1['cantidad_falla_mes1'], 0.1)
  
  data_sel_num['log_antiguedad_creacion_terminal'] = np.log1p(dataframe_1['antiguedad_creacion_terminal'])
  data_sel_num['log_antiguedad_version'] = np.log1p(dataframe_1['antiguedad_version'])
  data_sel_num['log_antiguedad_compra_pos'] = np.log1p(dataframe_1['antiguedad_compra_pos'])

  #Se normalizan los datos
  scaler = StandardScaler()
  X_train_scaled = scaler.fit_transform(data_sel_num)

  #Se convierte en DataFrame
  X_train_scaled_df = pd.DataFrame(X_train_scaled, columns=data_sel_num.columns)

  #Agregar campos estado terminal
  X_train_scaled_df['estado_terminal'] = dataframe_1['estado_terminal']
  X_train_scaled_df['tecnologiapp_a'] = dataframe_1['tecnologiapp_a']
  X_train_scaled_df['tecnologiapp_b'] = dataframe_1['tecnologiapp_b']
  X_train_scaled_df['tecnologiapp_c'] = dataframe_1['tecnologiapp_c']
  X_train_scaled_df['tecnologiapp_d'] = dataframe_1['tecnologiapp_d']
  X_train_scaled_df['tecnologiaaf_a'] = dataframe_1['tecnologiaaf_a']
  X_train_scaled_df['tecnologiaaf_b'] = dataframe_1['tecnologiaaf_b']
  X_train_scaled_df['tecnologiaaf_c'] = dataframe_1['tecnologiaaf_c']
  X_train_scaled_df['tecnologiaaf_d'] = dataframe_1['tecnologiaaf_d']
  X_train_scaled_df['tecnologiaaf_e'] = dataframe_1['tecnologiaaf_e']

  return X_train_scaled_df

# Definir una función para hacer predicciones desde un DataFrame
def predecir_estado(csv_file):
    # Leer el archivo CSV
    df = pd.read_csv(csv_file, sep =";" ,encoding="latin-1")

    #Transformar los datos para el modelo
    X_train_scaled_df = transformacion(df)

    # Realizar las predicciones
    predicciones = modelo.predict(X_train_scaled_df.values)
    resultados_red =pd.DataFrame(predicciones, columns=['predictions'])
    resultados_red=(resultados_red>0.5).astype(int)

    # Crear un DataFrame para mostrar las predicciones
    resultados = pd.DataFrame()
    resultados['Id terminal'] = df['terminal']
    resultados['Estado_Predicho'] = resultados_red
    resultados['trx_dia_cero'] = df['trx_dia_cero']
    resultados['trx_dia_uno'] = df['trx_dia_uno']
    resultados['trx_dia_dos'] = df['trx_dia_dos']
    resultados['trx_dia_tres'] = df['trx_dia_tres']
    resultados['trx_dia_cuatro'] = df['trx_dia_cuatro']
    resultados['trx_dia_cinco'] = df['trx_dia_cinco']
    resultados['trx_dia_seis'] = df['trx_dia_seis']
    resultados['trx_mes_tres'] = df['trx_mes_tres']
    resultados['trx_mes_dos'] = df['trx_mes_dos']
    resultados['trx_mes_uno'] = df['trx_mes_uno']
    resultados['total_terminales'] = df['total_terminales']
    resultados['cantidad_falla_m3'] = df['cantidad_falla_m3']
    resultados['cantidad_falla_m2'] = df['cantidad_falla_m2']
    resultados['cantidad_falla_mes1'] = df['cantidad_falla_mes1']
    resultados['antiguedad_creacion_terminal'] = df['antiguedad_creacion_terminal']
    resultados['antiguedad_version'] = df['antiguedad_version']
    resultados['antiguedad_compra_pos'] = df['antiguedad_compra_pos']
    resultados['tecnologiapp'] = df['tecnologiapp']
    resultados['tecnologiaaf'] = df['tecnologiaaf']

    return resultados

# Crear la interfaz de Gradio para cargar archivos CSV
entrada = gr.File(label="Subir archivo CSV")
salida = gr.Dataframe(label="Estados de las terminales")

gr.Interface(fn=predecir_estado, inputs=entrada, outputs=salida, title="Clasificación del Estado de Terminales").launch()