Este aplicativo se realiza con la motivación de realizar un trabajo analítico para llegar a un dato bastante útil como lo es el numero de hijos usando técnicas de aprendizaje estadístico modernas en datos abiertos proporcionados por el DANE (Departamento Administrativo Nacional de Estadística).
Esta encuesta fue realizada en el 2019 y recoge datos de los servicios de los hogares, composicion de los hogares, entre otros.
Se piensa en desarrollar el aplicativo, como herramienta útil para las organizaciones gubernamentales que deseen analizar los factores que influyen en la sobrepoblación.
Como en cualquier problema de datos, estos no estaban inicialmente en un formato que se pudieran analizar con facilidad, el primer reto fue que los encabezados de las columnas no tenian un identificador fácil de diferenciar, así que tuvimos que recurrir varias veces a la documentación de la encuesta para poder saber con que variables tratabamos. Otro reto fue unir las bases de datos ya que estas están separadas, elegir muy bien cuales usar ya que no todas ayudan a estimar correctamente el numero de hijos y podrian dañar nuestro modelo predictivo. Encontrar, o desarrollar el mejor modelo para obtener los resultados obtenidos, fue otro reto con el que nos encontramos.
Para nuestro trabajo preditivo usamos las siguientes herramientas Lenguajes de programación
Primeramente se manipulan los datos en el archivo r-manipulacion-datos.rmd, en el cual se descargan los archivos de “Caracteristicas y composicion del hogar.sav” y “Servicios del hogar.sav” con un breve preprocesamiento obtendremos nuestra variable a predecir que son los hijos y las características que predicen el modelo. Este preprocesamiento es guardado en el archivo “datos.csv”
A continuación, se intentaron 3 modelos, y se elige el del mejor MSE el primer modelo lo podemos encontrar en “knn.Rmd” en donde se construye un modelo de K-vecinos más cercanos y se obtiene un MSE muy bajo, el segundo intento se hace con la librería keras creando una red neuronal con ayuda de este framework, se puede encontrar en el archivo “RNNKeras.Rmd” Finalmente se obtienen los mejores resultados con una red neuronal creada a mano que se encuentra en el archivo “neural_net.py” y que obtiene un MSE= 0.566.
En el modelo creado en python se usa el archivo “datos.csv”, se copia parte de los datos en “data2.txt”. Se usó “open(data2.txt, r)” en el programa de la red neuronal “neural_net.py” para accesar los datos transformandolos en una lista de listas usando “split”. Cada lista interior es la una línea de los datos de la tabla de Excel y sus elementos son las columnas de esta línea. Se cambia la expresión “NA” para el valor de zero (0), de modo que se manejen una variables completamente numéricas. Posteriormente se transforma la lista de listas en un Array (o sea, en una matriz) en cual cada linea es una instancia de hogar y se mezclan estas lineas para que la secuencia no sea siempre la misma. Se escogieron las siguientes variables para desarrollar el modelo.
Para entender un poco las variables puedes seguir este enlace. Click para visitar sitio
Estas variables se usan para crear X_data el cual se transpone, entonces X_data es una matriz de dimension 7xm, en cual cada columna es una instancia de hogar. se estandariza X para tener todo en una escala común. Para crear las predictoras “Y” se escojió la línea 7 del Array hecho anteriormente para crear Y_data y de mismo modo que con las X_data se transpone, por lo tanto, Y_data se vuelve una matriz de dimensión 1xm en cual los elementos son los numeros de hijos de cada hogar y finalmente se estandariza Y_data.
Se cuenta en total con 88713 datos, para entrenar la red se cuenta con 60000 datos,quedándonos los demás 23713 para testear el modelo.
La red neuronal que se utilizó tiene un hidden layer con 70 hidden units, con función de activación Leaky Relu, el output-layer tiene la dimensión 1 ysu función de activación es la función de identidad, la cost-function es el MSE y la red se entrenó usando gradient descent, para testear la red se usó k-fold crossvalidation, para lo que se obtuvó un MSE de más o menos 0.25, o sea un RMSE de 0.5 y una accuracy de casi 74%, y bajo estos resultados, se dio por convincente el rendimiento de la red neuronal.
La red se entrena con la función neural_net(X,Y,n_h,learning_rate,epochs, cost_goal = 0, print_cost = False, read = False, save = False), donde ‘X’ son los datos, ‘Y’ la variable a predecir, ‘n_h’ es el numero de capas ocultas, ‘cost_goal’ es la meta que queremos alcanzar con la función de costo; si el cost_goal es alcanzado, el entrenamiento se detiene y los parametros son salvados, así se puede entrenar la red neuronal con un learning rate diferente a partir de este punto sin que el modelo salte el costo mínimo ; si ‘read’ es True indica que la red utilizará los parametros que fueron obtenidos y guardados de anteriores iteraciones, ‘save’ indica si queremos guardar los parámetros; los argumentos que se encontraron para rebajar el MSE-training-error fueron los siguientes:
neural_net(X_train, Y_train,20*n_x,10000,100000, cost_goal = 0.60, print_cost = True, read = False, save = False)
neural_net(X_train, Y_train,20*n_x,1000,100000, cost_goal = 0.57, print_cost = True, read = True, save = False)
Para testear los parametros se usó la función test_model(X_test,Y_test) obteniendo un MSE de 0.566
Para evaluar un nuevo hogar, su vector de atributos es estandardizado y despues pasa toda la red neuronal (usando los parametros que se obtuvieron durante el entrenamiento) para obtener una estimación “y_hat” y este “y_hat” se desestandariza y finalmente se redondeado para obtener la predicción. Esto se hace con la función label_new_data(X) que se encuentra en el archivo “neural_net.py”
El modelo desarrollado obtiene un MSE de 0,566.
Encontramos que la manipulación de datos en el mundo real requiere de un minucioso trabajo para intentar adaptar los datos de manera correcta y así elaborar la variable objetivo de manera precisa. También evidenciamos que para este caso, nos dió mejor resultado un modelo creado por nosotros mismos, para adaptarlo a nuestras necesidades.
En este articulo en el que se estudia la influencia de ciertas caracteristicas sobre el embarazo adolecente se evidencia que la ubicacion demografica, la edad de la personas y la composicion del nucleo familiar
Enlace para github: https://github.com/julian4u0/Prediccion-hijos-DANE
Enlace para informe en RPUBS: https://rpubs.com/jjhurtadoa/750597
Enlace para análisis descriptivo: https://rpubs.com/jjhurtadoa/776370
Enlace al aplicativo: https://jjhurtadoa.shinyapps.io/Prediccion-hijos-DANE/
Enlace para el video promocional del aplicativo: https://drive.google.com/file/d/1LwKBetHTB5gvLbtfIV-CIPl5Hn1usAUF/view