File size: 5,400 Bytes
0d7c039 ed06be6 30347d1 0d7c039 30347d1 0d7c039 27b170b ed06be6 2287d86 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 ed06be6 0d7c039 30347d1 |
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 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# Actualizado por: José Carlos Machicao, Fecha de actualización: 2024_07_08, Lima
# Esta vinculado a los PKL de https://sites.google.com/continental.edu.pe/edusights/inicio
# Importacion de librerias
import torch
import torch.nn as nn
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.model_selection import train_test_split
from torch.utils.data import DataLoader, TensorDataset
import plotly.express as px
import streamlit as st
from es_class_nn import SimplePlusNN2
from prediction_analyzer import PredictionAnalyzer
version_name = 'CON_44'
c1, c2 = st.columns([6,6])
with c2:
st.image('img/logo_vidad.png', width=300, caption='https://www.continental.edu.pe/')
st.title("Predicción de Abandono o Permanencia")
st.write("Cargue el archivo PKL para visualizar el análisis de su contenido.")
st.write('Cargue el archivo con datos nuevos aqui. Este archivo deberá seguir las pautas del diccionario de categorías y deberá estar en formato XLSX')
st.write('En caso no conozca el diccionario descarguelo aquí.')
st.link_button('Diccionario', 'https://huggingface.co/spaces/gestiodinamica/continental_predictivo/resolve/main/auxiliares/diccionario_variables_pkl_train.txt?download=true')
uploaded_file = st.file_uploader("Cargar archivo: ", type='xlsx')
if uploaded_file is not None:
df_2 = pd.read_excel(uploaded_file)
# Procesamiento de archivo listo para predicción
df_2 = df_2.dropna(axis=0)
df_2.index = df_2.DNI
df_2.drop(columns=['DNI'], inplace=True)
st.write('Dimensiones de archivo ingresado: ', df_2.shape)
cat_list = []
num_list = []
for col in df_2.columns:
if df_2[col].dtype == 'object':
if len(df_2[col].unique()) < 35:
cat_list.append(col)
else:
num_list.append(col)
df_a = df_2[cat_list]
df_b = pd.get_dummies(df_a)
df_b = df_b.set_index(df_2.index)
#df_b.index
scaler = MinMaxScaler()
X_sc = scaler.fit_transform(df_b)
df_sc = pd.DataFrame(X_sc)
df_sc.columns = df_b.columns
df_n = df_2[num_list]
df_n = df_n.set_index(df_2.index)
#df_n.index
df_sc.index = df_b.index
if (df_sc.index == df_n.index).sum()==len(df_2):
st.write('Indices Consistentes Verificados.')
df_r = pd.concat([df_sc, df_n], axis=1)
st.write('Dimensiones del archivo procesado: ', df_r.shape)
list_df_modelo = pd.read_excel('auxiliares/lista_categorias_CON_44_v0.xlsx')
lista_categorias = list_df_modelo[0].to_list()
cats_ad = []
cats_res = []
for c in df_r.columns:
if c not in lista_categorias:
cats_ad.append(c)
else:
cats_res.append(c)
cats_dis = []
cats_res2 = []
for c in lista_categorias:
if c not in df_r.columns:
cats_dis.append(c)
else:
cats_res2.append(c)
df_ad = pd.DataFrame(0, index=range(140), columns=cats_dis)
df_ad.index = df_r.index
df_base = df_r[cats_res]
df_base.index = df_r.index
df_tot = pd.concat([df_base, df_ad], axis=1)
cats_test = []
for c in df_tot.columns:
if c in lista_categorias:
cats_test.append(c)
cats_final = []
for c in lista_categorias:
if c[0:6]=='ESTADO':
print(c)
else:
cats_final.append(c)
df_ready = df_tot[cats_final]
#df_ready.shape
#st.write(df_ready.index[0:10])
st.write('Dimensiones del archivo para predicción: ', df_ready.shape)
DROPOUTX = 0.10
version_name = 'CON_44'
X_train = df_ready.values
X_train_tensor = torch.tensor(X_train, dtype=torch.float32)
st.write('Dimensiones del tensor: ', X_train_tensor.shape)
input_size = X_train_tensor.shape[1]
num_classes = 2
model = SimplePlusNN2(input_size, num_classes)
data_path = 'models/'
dict_name = f'edusights_20240702_state_dict_{version_name}.pth'
st.write(dict_name)
model.load_state_dict(torch.load(data_path+dict_name))
model.eval()
outputs = model(X_train_tensor)
outputs_show = outputs.detach().numpy().flatten()
st.write('Salida: ', outputs_show.shape)
outputs_show[outputs_show > 0.51] = 1.0
outputs_show[outputs_show < 0.49] = 0.0
filtered_arr = outputs_show[(outputs_show == 0.0) | (outputs_show == 1.0)]
unique, counts = np.unique(filtered_arr, return_counts=True)
st.write(unique, counts)
pred_df = pd.DataFrame(filtered_arr)
st.write('Dimensión de predicciones totales: ', pred_df.shape)
df_ready_2 = df_ready.copy()
df_ready_2['Predicción'] = pred_df
st.write(df_ready_2.head())
analyzer = PredictionAnalyzer(model, df_ready)
results_df = analyzer.predictions_loop()
st.write(results_df)
csv_out = df_ready_2.to_csv(encoding='iso-8859-1')
st.download_button(
label="Descargar Predicciones Totales", data=csv_out,
file_name='predicciones_carga.csv', mime='text/csv'
)
csv_out = results_df.to_csv(encoding='iso-8859-1')
st.download_button(
label="Descargar Predicciones por Categoría", data=csv_out,
file_name='predicciones_carga.csv', mime='text/csv'
)
c3, c4 = st.columns([6,6])
with c3:
st.image('img/gdmklogo.png', width=100, caption='Powered by GestioDinámica 2024')
|