Máster Big Data y Business Analytics 2019-2020

1 Introducción y motivación

Hoy día es bien conocido que el estrés y la ansiedad son desordenes que acompañan muy de cerca a la mayoría de la sociedad. Este problema, cada vez más creciente, trae consigo una caída bastante considerable en la productividad de la población activa. Sin embargo, actualmente la salud mental se considera un tema tabú en muchos tercios de la sociedad.

Un reciente estudio llevado a cabo por la British Interactive Media Association (BIMA) revela que más de un 52% de los trabajadores del sector tecnológico sufren algún tipo de desorden psíquico . Esta circunstancia ha supuesto una pérdida de alrededor de 1 billón de dólares al sector. Gracias a estos hallazgos se puede afirmar que el conocimiento de la salud mental de los trabajadores, además de la prevención y tratamiento de las diversas patologías conocidas, son una gran estrategia que poco a poco se va estableciendo en la industria, aunque este objetivo sigue siendo de una dificultad elevada debido a la losa que aún pesa sobre estos tipos de desordenes.

El presente proyecto se enfoca en la modelización predictiva de la posibilidad de padecimiento de algún tipo de patología mental. Para este fin se van a utilizar tres bases de datos que contienen diversa información obtenida mediante una encuesta realizada a diversos trabajadores de la industria tecnológica. En particular, se va a realizar un análisis exploratorio de datos y posterior desarrollo exhaustivo de modelos, haciendo uso de las preguntas de la encuesta como única entrada.

1.1 Presentacion de los datos

Como ha comentado anteriormente, en el presente proyecto se ha hecho uso de tres bases de datos que contienen las respuestas a una encuesta sobre salud mental. La encuesta fue realizada en los años 2017, 2018 y 2019 por al entidad Open Sourcing Mental Illness (OSMI). Los datos han sido obtenido de la plataforma Kaggle.

La encuesta realizada por OSMI está formada por un total de 79 preguntas, las cuales se pueden clasificar entre preguntas de respuesta cerrada (o circunstanciales) y preguntas descriptivas sobre situaciones relacionadas con experiencias en el trabajo y la salud mental. A las preguntas anteriores se le añaden cuestiones más generales como la edad, el sexo o situación geográfica donde se trabaja. Merece la pena destacar que, como se han utilizado bases de datos de diferentes años, se ha añadido la variable a cada una de las 1525 observaciones totales. Debido a que el nombre de las variables de los set de datos contiene la pregunta completa y con el fin de facilitar el análisis exploratorio, todas las variable se han renombrado como Cn, donde n es un número de aparición de la pregunta en la encuesta. En el Anexo se detalla el contenido de cada una de las preguntas realizadas en la encuesta y su denominación en el set de datos usado para modelización.

2 Desarrollo de código para análisis y depuración de datos.

Se realiza en primer lugar la configuración inicial del markdown para su correcto funcionamiento.

2.1 Carga de funciones auxiliares y librerías

Para comenzar se muestran las funciones auxiliares que van a ser utilizadas en análisis, depuración y modelización.

1-Función para importar todas la librerías necesarias en una única llamada. En caso de no estar presente las instalara y las cargará

2-Inspección gráfica de datos. Se crea un histograma para cada variable. Además dependiendo de si la variable es categórica o continua creará un diagrama de frecuencias o un boxplot, respectivamente.

3-Estandarización de variables continuas de un dataframe.

4-Conversión de datos de dataframe a formato ‘H2O’ dividiendo los datos en entrenamiento (\(60\%\)), test (\(20\%\)) y validación (\(20\%\))

5-Función para la obtención de ajuste de hiperparámetros con ‘H2O’. Devuelve la tasa de fallo en función de los parámetros utilizados para un algoritmo dado.

6-Función para creación de modelos ensamblados con H2O y evaluación con validación k-fold.

7-Función de evaluación de frecuencias de categorías en un dataframe.

8-Función de automatización para limpieza de texto y creación de corpus

9-Función de automatización para limpieza de textos en variables descriptivas dentro de un dataframe.

Finalmente se cargan las librerias necesarias para el desarrollo de modelos que se rpesenta a continuación.

2.2 Análisis inicial del conjunto de datos

Carga de set de datos originales obtenidos de Kaggle.

Se eliminan datos superfluos y variables no representativas de los datos originales.

Se comprueba visualmente que las columnas de los tres set de datos tiene diferente nombre. Esta comprobación se realiza para ver los cambios en la encuesta de un año a otro.

Se añade a cada set de datos el año de participación en la encuesta

Para facilitar el proceso modelización, se van a sustituir los nombre de las variables original con el código Cn, donde ‘n’ denota el número de aparición de la pregunta en la encuesta. Para no perder el significado de las preguntas se crea la variable adicional ‘col_meaning’ que relaciona el código de cada pregunta con su título original en el set de datos.

Unificamos los tres se de datos en un único dataframe. Se añade el código de identificación de cada observación para futuras transformaciones.

Se separa la variable objetivo (C48) del set original de datos para que no se va afectada en las transformaciones y la depuración de datos y se elimina del dataframe.

Se separan las columnas con preguntas descriptivas para realizar un análisis de sentimiento. En contraposición se eliminan, inicialmente estas variables del set de datos.

Una información interesante para el proceso de modelización y al mismo tiempo no perder tanta información al quitar las variables descriptivas es el uso de estas mismas como variables categóricas binarias. Para este fin se han decodificado las variables descriptivas con ‘Yes’ en caso de haber sido rellenadas y ‘No’ en caso contrario. Tras esto se añaden al set de datos de modelización

Se observa que la variable descriptiva C68 no contiene ninguna información relevante ya que nadie ha rellenado esta casilla. Por tanto se elimina esta variable tanto del conjunto de datos de modelización como de análisis de sentimiento.

2.3 Analisis exploratorio general de variables descriptivas.

2.3.1 Análisis de sentimiento

El conjunto de datos descriptivos obtenidos del set original se emplea para la realización de un análisis de sentimiento. Para ello se va a utilizar la librería sentiment . En primer lugar, se realiza una depuración del cuerpo de las descripciones. Se limpian de palabras carentes de significado y las puntuaciones. Se reconvierten en ‘NA’ las casillas con descripciones vacías.

Con la funcion classify_emotion se realiza la clasificación de sentimientos.

Se representa gráficamente la frecuencia de aparición de los diferentes sentimientos encontrados con el código presentado anteriormente.

Se realiza la recodificación de los sentimientos menos representados, unificandolos en una única categoría. Además se crea la categoría ‘unk’ con los datos missing. Tras la recodificación, se añade como una nueva columna al set de datos original para modelización con el nombre fe_C81.

A simple vista se puede distinguir que alrededor de un \(37.1 \%\) no ha respondido a ninguna de las preguntas en las que se precisaba de una descripción. Por otro lado, también se ha reparado en que el sentimiento más expresado en aquellas observaciones donde se han rellenado las variables descriptivas es el de alegría (\(35.3\%\)). Esto podría ser indicativo de experiencias pasadas con problemas de salud mental. Tras este sentimiento se encuentran la tristeza y el miedo con un \(8.5\%\) y \(12.5\%\) de representación, respectivamente. En contraposición a la indicación del sentimiento de alegría, estas observaciones podrían ser un indicio probable de casos de personas con algún desorden de salud mental. Finalmente, se destaca que los sentimiento de ira, disgusto y sorpresa son los menos representados, siendo el total de representación de los tres sentimientos juntos un \(6.5\%\).

Como se ha visto anteriormente, el análisis de sentimiento podría dar un valiosa información extra a la hora de desarrollar modelos predictivos. De este modo, se ha guardado la variable de sentimiento más probable (fe_C81) en cada observación en el set de datos.

2.3.2 Análisis de palabras clave de descripciones

A continuación, se presenta el código utilizado para la evaluación de palabras clave en la descripciones dadas por los tomadores de la encuesta. Se van a dividir las descripciones en 4 temas: conversaciones con empleador, conversaciones con compañeros, salud física y salud mental.

Se utiliza la librería worldcloud para realizar la representación de las palabras clave de los cuatro grupos.

Las nubes de palabras de la figura anterior se muestran que dependiendo de si la experiencia ha sido con un supervisor o con un compañero las palabras más utilizadas cambian. No obstante, estos cambios no son muy radicales. Sí es posible observar que, mientras la palabra ‘depression’ es la más utilizada con compañeros de trabajo, mientras que es la palabra ‘time’ la mas empleada con jefes o supervisores. Esto nos indica que mientras en las experiencias con compañeros de trabajo es posible expresar en muchos casos la demostración de productividad es la encargada de ensombrecer los problemas de salud mental cuando se plantean ante la presencia de un superior. Otro dato importante a destacar entre estos dos grupos es que la frecuencia de ‘anxiety’ es similar, mientras que la palabra ‘suportive’ se utiliza con mayor frecuencia en caso de supervisores.

Por otro lado, es necesario mencionar que si se comparan las experiencias con conversaciones de salud física o salud mental, hay un claro contrastes entre ellas. Se observa que es mucho más fácil hablar de un problema físico. Esto se sostiene debido a la aparición de palabras como ‘accomodation’ o ‘chances’ en el caso de salud física, mientras que términos como ‘stigma’ o ‘issues’ aparecen con una mayor frecuencia en el caso de experiencias con salud mental.

Únicamente se ha dado una pequeña visión global del análisis de sentimiento de las variables descriptivas. Sin embargo, un análisis más profundo de las palabras utilizadas en estos casos podrían dar por si solas buenos modelos de predicción de problemas de salud mental.

2.4 Código para análisis y depuración de datos

Con el fin de realizar una modelización óptima con la menor tasa de fallo, se va a llevar a cabo una depuración exhaustiva de los datos. A continuación se exponen los pasos llevados a cabo. En primer lugar, se va a evaluar el conjunto de datos para ver posible patología a ser consideradas para su corrección:

Análisis de categorías o valores extraños, valores fuera de rango y valores perdidos.

Evaluación de codificación de las variables.

Búsqueda de valores numéricos con pocos datos diferentes para reconvertir a variables categóricas.

##  C1  C3  C4 C13 C16 C18 C20 C21 C22 C30 C31 C39 C42 C44 C46 C47 C51 C56 C61 C62 C63 C64 C69 C72 C73 C80 
##   2   3   3   3   3   3  12  12   3   2   3   3   3   3  12  12   2  11   3   3  11  12   6   3  52   3

Se evalúa la correlación entre todas las variables con inspect_corr de la librería inspect_df.

## # A tibble: 6 x 7
##   col_1 col_2  corr  p_value lower upper pcnt_nna
##   <chr> <chr> <dbl>    <dbl> <dbl> <dbl>    <dbl>
## 1 C47   C46   0.567 1.89e-94 0.529 0.602     87.0
## 2 C21   C20   0.563 4.57e-92 0.525 0.599     85.8
## 3 C44   C42   0.507 1.80e-75 0.466 0.546     86.4
## 4 C16   C13   0.445 5.22e-58 0.401 0.488     85.5
## 5 C18   C16   0.427 2.31e-53 0.382 0.471     85.1
## 6 C47   C21   0.406 2.78e-42 0.356 0.454     74.0

Se reconvierten a valores ‘NA’ todas las observaciones vacías del conjunto de datos.

Se examinan las variables categóricas de manera visual con la función inspect_cat, también de la librería inspect_df.

Tras la evaluación de patología de modo superficial se convierten todas las columnas del dataframe a tipo factor, ya que se observó que no hay un numero de datos diferente excepto en la C73 (edad del individuo).

Se convierten todas las variable binarias codificadas como ‘1’ y ‘0’ a ‘Yes’ y ‘No’, respectivamente.

Se observa que no hay correlación entre variables como para eliminar ninguna. No obstante si hay variable con suficientes valores perdidos como para quitarlas.

Se realiza una inspección más profunda para confirmar patologías en set de datos. Para este fin, se utiliza la función auxiliar dfvinspect.

Entre los problemas más importantes, se han observado las aparición masiva de categorías extrañas o poco representadas en las variable pertenecientes al género y raza. Para corregir este error se lleva a cabo una recategorización en ambas variable.

Data[,"C79"]<-car::recode(Data[,"C79"], 
                          "c('White','European American','Hispanic or Latino','Middle Eastern','Caucasian','Hispanic or Latino','Hispanic','Latina','Latino','Latinx', 'My race is white, but my ethnicity is Latin American','mexican american ','Hispanic, White','White Hispanic')='Caucasian';
                          c('Black or African American','Asian','South Asian', 'West Indian', 'American Indian or Alaska Native','Persian','Indo-Caribbean','More than one of the above','Indian','Mestizo')='Other'; 
                          c('I am of the race of Adam, the first human.','Jewish','Ashkenazi','I prefer not to answer', NA)='No answer'")

Data[,"C74"]<-car::recode(Data[,"C74"], 
                          "c('Male','male','Male ','M','m','cis male','Cis male','Cis-Male','Cis Male','Cis-male','Man','cis hetero male','man','CIS Male','cis male','cis male ','cis-male','Cisgender male','Cishet male','dude','Demiguy','I have a penis','Identify as male','Lets keep it simple and say male','Mail','Make','MALE','Male (cis)', 'male (hey this is the tech industry youre talking about)','Male-ish','Masculine','Malel','Male, cis','male, born with xy chromosoms','male/androgynous ','masculino','Ostensibly Male')='Male';
                          c('Female','female','F','f','Female ','Woman','cis female','woman','Woman-identified','Cis female','Cis female ','cis woman','Cisgendered woman','Cis woman','cis-Female','Cis-Female','cisgender ','F, cisgender','femail', 'cisgender female','female (cis)','Female (cis)','Female (cis) ','female (cisgender)','Female (cisgender)','Female-identified','Female-ish','Female/gender non-binary.','femalw','Femile','femmina','gender non-conforming woman','I identify as female','Genderqueer demigirl','Nonbinary/femme','My sex is female.')='Female'; c('None','Non-binary','agender','uhhhhhhhhh fem genderqueer?', 'Agender/genderfluid', 'Agender trans woman','Trans man','\\\\-','Agender','Nonbinary', '*shrug emoji* (F)','Non binary','Genderqueer','Genderfluid','43', 'Contextual', 'genderfluid','Genderqueer/non-binary', 'God King of the Valajar','I am a Wookie','Male (or female, or both)','n/a','N/A','NB','non binary','non-binary', 'Non-binary and gender fluid','nonbinary','none','Other','Questioning','She/her/they/them','rr','sometimes','SW', 'Trans female','Trans non-binary/genderfluid','trans woman','Trans woman','Transfeminine','transgender',NA)='Other or no answer'")

Se añade una variable adicional el set de datos en la que se cuenta la proporción de datos faltantes por observación. También se añade la explicación de la columna a la variables col_meaning. Adicionalmente, se imprime en pantalla la media de valores perdidos por variable.

##          ID          C1          C2          C3          C4          C5          C6          C7          C8          C9         C10         C11         C12         C13         C15         C16 
## 0.000000000 0.000000000 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.142295082 0.144918033 
##         C18         C20         C21         C22         C23         C24         C25         C26         C27         C28         C29         C30         C31         C32         C33         C34 
## 0.146229508 0.142295082 0.142295082 0.857704918 0.857704918 0.857704918 0.857704918 0.857704918 0.857704918 0.857704918 0.893114754 0.000000000 0.130491803 0.130491803 0.130491803 0.130491803 
##         C35         C36         C37         C38         C39         C41         C42         C44         C46         C47         C49         C50         C51         C52         C53         C54 
## 0.130491803 0.130491803 0.130491803 0.130491803 0.130491803 0.130491803 0.133114754 0.135081967 0.130491803 0.130491803 0.565901639 0.009836066 0.000000000 0.000000000 0.000000000 0.000000000 
##         C55         C56         C57         C59         C61         C62         C63         C64         C65         C67         C69         C72         C73         C74         C75         C76 
## 0.000000000 0.000000000 0.000000000 0.000000000 0.001311475 0.881967213 0.960655738 0.001311475 0.001311475 0.001311475 0.001311475 0.001311475 0.001311475 0.000000000 0.001311475 0.336393443 
##         C77         C78         C79         C80         C14         C17         C19         C40         C43         C45         C58         C60         C66         C70         C71      fe_C81 
## 0.001311475 0.330491803 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
##      fe_C82 
## 0.000000000

Se eliminan todas aquellas variables que tengan una proporción de valores faltantes mayor al \(50\%\).

Se recategorizan como ‘Unk’ los valores ‘missing’ en las variables cuya proporción sea mayor de \(10\%\).

Se realiza un test de correlación entre los datos faltantes remanentes tras la depuración anterior.

Se ha podido observar que las variables de lugar de residencia y de lugar de trabajo podrían estar dando información repetida ya que no es normal vivir y trabajar en países o estados diferentes. Para ver si esto se cumple medimos las coincidencia en las columnas C75 con C75 y C76 con C78.

## [1] "Una proporcion de 0.327868852459016 % de los datos trabajan y residen en paises diferentes"
## [1] "Una proporcion de 0.0655737704918033 % de los datos trabajan y residen estados diferentes dentro de EEUU"

Dado que el numero de personas que trabajan y viven en lugares diferentes es demasiado reducido se utilizará únicamente la variable de lugar de trabajo para la modelización.

Antes de mirar las categorías poco representadas en los países, se obtienen las coordenadas de países y estados, ya que quizás funcionen mejor a la hora de ajustar modelos.. Esto ayudará a crear variables continuas que tengan en cuenta la posición geográfica. Para este fin, se utiliza la API Maps de Google Cloud. Se debe destacar que la clave dada a continuación no es la original utilizada.

Se obtienen todas las coordenadas y se guardan para su posterior uso.

Para realizar la recategorización de países y estados de forma óptima, se van a representar 2 mapas mostrando la tasa de participación por países y participación por estado en estados unidos. Se obtienen las frecuencias para los países y estados.

Se realiza la representación geográfica de los datos obtenidos anteriormente.

En los mapas obtenidos se observa una acumulación de participación en Estados Unidos y dentro de estados unido en California e Illinois. Se recodifican los países para evitar categorías poco representadas en países y estados.

2.4.1 Ingeniería de variables

Además de las variables adicionales previamente presentadas se ha realizado un ligero proceso de ingeniería de variables con los datos originales depurados. Estas variables se centran únicamente en variaciones e interacciones de datos geográficos. A continuación se muestra el código utilizado para este cometido.

Para comenzar se crea la variable con datos de interacción entre países y estados.

Se añaden los datos de latitud y longitud obtenidos con Google Cloud.

Se crea una columna nueva con la distancia euclídea de los países al origen de latitud y longitud. Adicionalmente, se añaden los significados de las columnas a la variable *col_meaning}

Se observa que hay columnas en el set de datos que aún conservan un número de categorías masivas. Para subsanar esto parcialmente, se convierten las categorías de esta variable (C85) a frecuencias.

Para concluir el proceso de modelización, se lleva a cavo la imputación de los datos perdidos remanentes y la estandarización de las variables numéricas. Para llevar a cavo dicha acción se utiliza la librería MissRanger y la función auxiliar DataStd, respectivamente.

3 Proceso de modelización

Habiendo realizado la depuración de datos se procede a realizar el desarrollo de modelos predictivo. En el set de datos utilizado para el proyecto se va a tratar de predecir la posible existencia de problemas de salud mental con los datos analizados.

Tal y como se comentó al comienzo del análisis de datos, la variable objetivo utilizada en este proyecto es la denominada C44. Se trata de una variable categórica que informa de la existencia actual de patologías mentales de los encuestados. Cuatro categorías diferentes se pueden distinguir en esta variable, las cuales son ‘yes’, ‘no’, ‘probably’ y ‘Don’ t know. Como es evidente, la última de estas categorías no da ninguna información útil para la predicción. Adicionalmente, un \(8.1\%\) de las observaciones pertenecen a esta categoría. Por otro lado, en esta misma figura se puede observar que el resto de categorías están medianamente balanceadas. Con esta información se determina que, en primer lugar se elimina las observaciones con categoría I don’t know en la variable objetivo del set de datos y no se realizará en primera instancia ningún balanceo de los datos restantes.

Se une la variable objetivo a los datos depurados utilizado como nexo la ID de la observación. Tras la unión se elimina la columna ‘ID’ de los datos ya que no da ningún tipo de información para la modelización.

Para la tarea de desarrollo de modelos, se ha empleado la librería H2O. Esta librería posee implementados los algoritmos necesarios tanto para las diferentes tareas de modelización, permitiendo el uso de varios hilos de procesamiento en paralelo.

Finalmente se establecen los parámetros contantes para toda la búsqueda de hiperparámetros. Creamos la diferencia entre nombres de variable objetivo y variables input

3.1 Creación de modelos originales

Para la creación de modelos predictivos, se han empleado los algoritmos de random forest, gradient boosting, XGBoost y redes neuronales. Para todas las técnicas anteriormente indicadas se ha llevado a cabo el mismo procedimiento. En primer lugar se ha realizado una búsqueda de hiperparámetros general combinando los hiperparámetros de manera aleatoria. Teniendo en cuenta los resultados de esta primera búsqueda se han refinado los rangos de parámetros a buscar y se ha realizado una segunda tanda de búsqueda, ajustando los modelos con todas las combinaciones de hiperparámetros.

Para obtener la cañidad de ajuste de estos parámetros se ha realizado, para la primera como la segunda iteración, el entrenamiento con 60% de los datos, y un test y validación con el 40% restante. Para medir la calidad del ajuste del modelo se ha utilizado el resultado general de la matriz de confusión del test de validación.

Tras el procedimiento de búsqueda de hiperparámetros se han elegido los tres set de parámetros que mejor resultado han dado, intentando cumplir en mayor medida posible el principio de parsimonia. Este grupo de parámetros se han utilizado para ajustar 3 modelos diferentes para cada unos de los algoritmos. Para este proceso de desarrollo de modelos se ha utilizado la técnica k-fold con 10 grupos. Tras el ajuste, se realizó un estudio de sesgo y varianza de entre los tres modelos con el mismo algoritmo y se elige el que mejor resultado ha obtenido. Como en el caso de los hiperparámetros se ha utilizado la matriz de confusión como medida de precisión (tasa de error). En adición al proceso explicado más arriba, se han desarrollado varios modelos de ensamblados, con los modelos resultantes de cada algoritmo.

A continuación, se muestra el código de cada unos de los procesos de modelización llevados a cabo con cada algoritmo. En todos los casos se utilizará la misma estructura.

3.1.1 Random Forest

A) Ajuste inicial de hiperparámetros con combinaciones aleatorias

B) Refinamiento de ajuste de hiperparámetros

En la figura previa se puede observar que en el presente caso el algoritmo es bastante sensible al número de observaciones mínimas pero muestra resultados similares en función del número de nodos máximo. Un número de 50-60 variables para sortear en el proceso de apertura de bifurcaciones en los árboles resulta en un notable mejora en la tasa de fallo. Los mejores resultados se observan 5 observaciones mínimas, una extensión total de 5 nodos, 30 arboles y 60 observaciones para el sorteo de apertura de nuevas bifurcaciones.

C) Ajuste de modelos

En el resultado de la validación cruzada con cada uno de los tres modelos construidos es posible observar que tanto en sesgo como varianza los tres modelos dan un resultado muy parecido. La tasa de fallo ronda el \(25\%\) de media en todos ellos. A la luz de estos resultados, se ha optado por elegir el modelo ‘RF3’ ya que su resultado en sesgo es ligeramente mejor que los otros dos modelo, aunque su varianza es muy similar.

Con respecto a la importancia de las diferentes variables, se puede ver que las variables relacionadas con la afección de la salud mental en la eficiencia en el trabajo son esenciales para la creación de árboles de decisión. También es posible observar que las variables de historial con problemas mentales y la situación geográfica aportan bastante información a los árboles (C50,C77 y C78). También se observa un decaimiento exponencial en la importancia de variables, dando apenas información a los diferentes árboles a partir de décima variable aproximadamente. Esto indica que una posible reducción de variables podría mejorar notablemente los modelos con random forest.

3.1.2 Gradient Boosting

A) Ajuste inicial de hiperparámetros con combinaciones aleatorias

B) Refinamiento de ajuste de hiperparámetros

Se observa que el número de iteraciones necesarias es bastante elevado. También se puede ver que un número ente 10 y 30 observaciones mínimas para la apertura de nuevos nodos dan los resultados óptimos. No se evidencia una dependencia importante en el número de nodos permitido para los árboles de decisión construidos.

C) Ajuste de modelos

el algoritmo de gradient boosting muestra una ligera mejora con respecto a random forest en la tasa de fallo, llegando a una media de $20%% de error. El sesgo ha sido también reducido con respecto al algoritmo anterior. Como modelo final se ha elegido el GBM1, ya que con una cantidad de iteraciones 5 veces menor, da un resultado en sesgo y varianza mejor que el resto.

La importancia de variables para el modelo elegido se muestra en la figura previa. Se observa que las variables más importantes para la apertura de nuevos nodos siguen siendo la relacionadas con el rendimiento en el trabajo (C53 y C54). En este caso las variables geográficas (C77 y C78) y las de historial de salud mental (C50) tiene un peso ligeramente mayor al observado en la sección anterior, pero también se observa un descenso en importancia de variable exponencial, aunque menos pronunciado.

3.1.3 XGBoost

A) Ajuste inicial de hiperparámetros con combinaciones aleatorias

B) Refinamiento de ajuste de hiperparámetros

A primera vista se observa que los resultados son independientes en función del acelerador utilizado. Los mejores resultados han sido obtenidos con un número de observaciones mínimas igual a 10 para todas las iteraciones. Además, se ve que el número de nodos no afecta especialmente a la precisión del ajuste. A la vista de los resultados obtenidos, los hiperparámetros elegidos para la modelización y validación cruzada son los que se muestran en la tabla más abajo. Aunque ambos aceleradores mostrados han dado los mismos resultados, se ha elegido la estrategia de aceleración basada en árboles (‘gbtree’) para el desarrollo de modelos y validación cruzada.

C) Ajuste de modelos

En la figura anterior, una ligera mejoría en el sesgo de los modelos con respecto a los algoritmos anteriores es evidente. La varianza también ha sido reducida, aunque en menor medida. Los tres modelos tienen un resultado muy similar, siendo ‘XGB2’ y ‘XGB3’ completamente idénticos. Con los resultados a la vista, se ha elegido el modelo ‘XGB2’ ya que tiene un mejor resultado y un número de iteraciones optimizado.

La importancia de variables del modelo seleccionado nos enseña que para el ajuste de modelos se ha utilizado one-hot encoding, ya que en el gráfico se muestran los nombres con las diferentes categorías de las variables originales. Para este modelo se observa también que las variables con mayor poder para la división de nodos en los árboles son las relacionadas con la eficiencia en el trabajo. También se observa que en este algoritmo las variables derivadas de las originales (denominadas ‘fe_’) cobran especial importancia. El decaimiento exponencial en la importancia de las variables también es signo de identidad para el algoritmo utilizado en este caso.

3.1.4 Redes Neuronales

A) Ajuste inicial de hiperparámetros con combinaciones aleatorias

B) Refinamiento de ajuste de hiperparámetros

Como muestra la figura anterior, apenas hay diferencias notables en función el número de iteraciones, de capas o funciones de activación. También, es posible ver que la tasa de fallo y la varianza obtenidos con estos modelos empeoran los resultados adquiridos con los modelos anteriores. Dadas las particulares características observadas en la evaluación de hiperparámetros de redes neuronales, se han elegido los parámetros cuya tasa de fallo ha sido óptima

C) Ajuste de modelos

El estudio de sesgo y varianza de redes neuronales confirma que los modelos realizados con esta técnica no consiguen superar a los anteriores algoritmos. El modelos ‘NN2’ consigue unos resultado con respecto al sesgo más cercanos a los modelos presentados anteriormente, pero con una varianza ligeramente mejor. Finalmente, el modelo ‘NN2’ ha sido elegido por encima del resto, dado que su resultado es visiblemente mejor a los otros modelos de redes neuronales testeados, siendo incluso más sencillo en cuanto a hiperparámetros se refiere.

A diferencia de los modelos previos, la tendencia de decaimiento en importancia de variables de este modelo tiene un comportamiento más lineal. Además, las variables a la cabeza de la tabla difieren en una pequeña porción a las vistas anteriormente. Esto puede ser debido a que, dado que el algoritmo de redes neuronales no esta basado en árboles, no es capaz de distinguir de manera tan eficiente aquellas que maximizan la precisión del modelo. Esto sugiere que es necesario un refinamiento de variables y parámetros para poder llegar a niveles de precisión como los obtenidos con el resto de algoritmos basado en árboles. ## Desarrollo automático de modelos

Adicionalmente se utiliza la función AutoML con el fin de encontrar modelos que se hayan podido pasar por alto en el proceso de ajuste de hiperperámetros y modelización.

Se unen todos los resultados obtenidos con los test de validación cruzada para todos los modelos desarrollados. Se realiza la representación gráfica de un ‘boxplot’ para realizar el estudio de sesgo y varianza comparativo.

Finalemente se puede observar que el mejor modelo de AutoML es conseguido redes neuronales dando el mismo resultado que los obtenidos con la optimización de hiperparámetros. De este modo se obvian los resultados de este último proceso en los ensamblados y conclusiones finales.

3.2 Desarrollo de ensamblados y comparación

Para intentar una mejora en los resultados obtenidos previamente se lleva a cabo un ensamblado de modelos. El proceso llevado a cabo para ello comienza con la creación de dos variables con la lista de modelos a ensamblar y los nombres de los mismos.

A través de un proceso iterativo se realiza la creación de modelos y validación. Se utiliza la función auxiliar h2o.ensembleCV desarrollada por el autor. Finalmente se lleva a cabo la unión de los resultados de validación cruzada en un único dataframe.

Como último paso se representan en un ‘boxplot’ los resultados de validación cruzada con ensamblados y modelos originales.

La figura anterior nos muestra claramente que en el presente caso los modelos ensamblados mejoran notablemente la varianza de los modelos originales. En contraposición a la mejora de variabilidad obtenida con el ensamblado, es posible distinguir que la tasa de fallo obtenida en la validación cruzada también ronda el \(20\%\) en el mejor de los casos, siendo esto indicativo de más que necesaria segunda iteración de análisis de las variables y una posible criba de las mismas.

Comparando los resultados de validación cruzada de los modelos ensamblados se puede distinguir que ninguno de ellos destaca con respecto a la precisión, estando todos ellos en el rango obtenido por los modelos iniciales. No obstante, los 12 modelos muestran una mejora considerable en la varianza. El modelo de ensamblado con ‘XGB2’-‘GBM1’-‘RF3’ muestra la mejor medida de varianza entre todos los modelos. En contraposición, este ensamblado junta 3 modelos primitivos, añadiendo complejidad a la interpretación -ya compleja de por sí- de los modelos ensamblados. Por ello, se han descartado los ensamblados de 3 o más modelos, ya que el ratio entre mejora y complejidad no resulta lo suficientemente elevada.

Por otro lado, si se observa el resultado obtenido con ‘GBM1’-‘XGB2’ podemos ver que el sesgo se encuentra alrededor de un \(20\%\) en la tasa de fallo y una varianza ligeramente mayor que el modelo ensamblado previamente analizado. De este modo, el modelo seleccionado como candidato preliminar en este proyecto es el conformado por el ensamblado de gradient boosting y XGBoost.

Cabe destacar que la unión de los modelos de XGBoost dejan igual la predicción con respecto al modelo ‘XGB2’ original, aunque mejoran notablemente la varianza del modelo.

4 Conclusiones

La gestión de los problemas de salud mental, a día de hoy, todavía sigue siendo un dificultoso proceso y con mucho camino por recorrer. En el presente proyecto se ha realizado una prueba de concepto que conociendo cierta información acerca de los individuos resulta mucho más fácil reconocer patrones de posibles problemas de salud mental.

Para este fin, se han utilizado tres bases de datos pertenecientes a una encuesta con 80 preguntas realizadas entre los años 2017 y 2019 y se ha realizado un proceso estándar de análisis, depuración y modelización con diferentes algoritmos. Adicionalmente, se ha realizado un proceso de análisis de sentimiento y de palabras clave en las variables descriptivas cuestionadas a los encuestados.

El análisis de sentimiento ha mostrado que la mayoría de los sentimiento encontrados en las observaciones son bastante dispares. Por un lado, una gran mayoría de observaciones han dado como resultado sentimiento de alegría, mientras que el miedo y la tristeza también han aparecido en gran medida. Esta circunstancia puede ser indicativa de personas que han pasado satisfactoriamente por un proceso de recuperación de desórdenes mentales o que están pasando por este proceso, respectivamente. En menor medida se han observado enfado y disgusto. Cabe mencionar que este análisis de sentimiento ha sido únicamente clasificado a través del algoritmo de Bayes y un proceso de modelización más profundo es necesario para poder llegar a conclusiones más robustas.

Un exhaustivo proceso de análisis de datos y depuración de los mismos, ha sido llevado a cabo. Gracias a este proceso ha sido posible encontrar, además de patologías a corregir en los datos, ciertas tendencias de valores perdidos. Adicionalmente, se ha realizado un proceso de ingeniería de variables, centrado principalmente en las interacciones y variaciones de las variables geográficas. Los algoritmos de random forest, gradient boosting, XGBoost y redes neuronales han sido utilizados para la elaboración de modelos predictivos. Gracias al empleo de estos algoritmos han sido obtenidas diferentes conclusiones. Se ha observado que todos los algoritmos han obtenido una tasa de error parecida en la validación cruzada, no obstante, el algoritmo de ha mostrado una mejora de variabilidad considerable con respecto al resto de algoritmos. Otro dato a destacar es la importancia de variables obtenidas con los modelos elegidos. Resultan destacables las cuestiones referentes a la influencia de los desórdenes mentales sobre la productividad en el trabajo a la hora de optimizar la clasificación de la variable objetivo.

Finalmente, se han desarrollado y evaluado 12 ensamblados con los mejores modelos obtenidos con los algoritmos mencionados más arriba. El resultado final de los modelos ensamblados ha supuesto una más que notable mejora en la variabilidad, contrastando con la nula mejora de sesgo obtenida. Esta última circunstancia establece la conclusión de la necesidad de una segunda iteración de ingeniería de variable más exhaustiva. Además un cribado de variables superfluas podría conferir una mejora al poder de predicción tanto de los modelos ensamblados como de los originales.

Un modelo ensamblado ha sido finalmente elegido como modelo candidato final. Este está compuesto por los modelos desarrollados con los algoritmos gradient boosting y XGBoost. Ha sido evidente una mejora en la variabilidad del modelo mostrando un sesgo ligeramente mejor. La elección de este modelo ha supuesto una pérdida en la interpretación del mismo. No obstante, esta pérdida queda compensada con la mejora a la hora de predecir la posible existencia de desórdenes mentales en los trabajadores de la industria tecnológica.

Máster Big Data y Business Analytics 2019-2020