Full text
Análisis de datos útiles en predicción de trastornos emocionales Ismael Setti Alonso - Jose Manuel Pinto Lozano Trabajo de fin de grado del Grado en Ingeniería Informática Facultad de Informática Universidad Complutense de Madrid Año académico 2018/2019 Directoras: María Victoria López López - Matilde Santos Peña
Análisis de datos útiles en predicción de trastornos emocionales Índice Resumen ....................................................................................................................... 1 Palabras clave ............................................................................................................... 1 Abstract ........................................................................................................................ 2 Keywords...................................................................................................................... 2 1. Introducción .............................................................................................................. 3 1.1. Contexto de la investigación ............................................................................... 3 1.2. Objetivos ............................................................................................................ 3 1.3. Plan de trabajo .................................................................................................... 4 1.4. Tecnologías utilizadas ........................................................................................ 4 1.4.1. Python ......................................................................................................... 4 1.4.2. Jupyter Notebook......................................................................................... 5 1.4.3. Praat ............................................................................................................ 5 1.5. Repositorio ......................................................................................................... 5 1.6. Estructura del trabajo de fin de grado ................................................................. 5 1.7. Asignaturas de la carrera relacionadas ................................................................ 6 1’. Introduction ............................................................................................................. 9 1.1’. Research Context .............................................................................................. 9 1.2’. Objetives ........................................................................................................... 9 1.3’. Work plan ....................................................................................................... 10 1.4’. Technologies used ........................................................................................... 10 1.4.1’. Python ...................................................................................................... 10 1.4.2’. Jupyter Notebook ..................................................................................... 10 1.4.3’. Praat ......................................................................................................... 11 1.5’. Repository....................................................................................................... 11 1.6’. Final degree project structure .......................................................................... 11 1.7’. Related career subjects .................................................................................... 12 2. Estado del arte ......................................................................................................... 13 2.1. Proyectos similares ........................................................................................... 13 2.2. Dispositivos de monitorización ......................................................................... 15 2.3. Aplicaciones de monitorización ........................................................................ 16 2.3.1. Aplicaciones de monitorización de la actividad física ................................ 16 2.4. Dispositivos de grabación ................................................................................. 22 3. Preprocesamiento de datos ...................................................................................... 23 3.1. Obtención de los datos ...................................................................................... 23 3.1.1. Obtención de los datos de audio ................................................................. 23 3.1.2. Obtención de los datos de actividad física .................................................. 26 3.2. Limpieza de datos............................................................................................. 27 3.2.1. Limpieza y preparación de los datos de audio ............................................ 27 3.2.2. Limpieza y preparación de los datos de actividad física ............................. 32 4. Análisis de los datos ................................................................................................ 37
Análisis de datos útiles en predicción de trastornos emocionales 4.1. Datos de audio .................................................................................................. 37 4.2. Datos de actividad física ................................................................................... 41 5. Aplicación de los algoritmos ................................................................................... 45 5.1. Random Forest ................................................................................................. 47 5.1.1. Datos de audio ........................................................................................... 48 5.1.2. Datos de actividad ..................................................................................... 49 5.2. Gradient Boosting ............................................................................................ 50 5.2.1. Datos de audio ........................................................................................... 50 5.2.2. Datos de actividad ..................................................................................... 52 5.3. Support Vector Machine (SVM) ....................................................................... 52 5.3.1. Datos de audio ........................................................................................... 52 5.3.2. Datos de actividad ..................................................................................... 54 5.4. Redes neuronales .............................................................................................. 54 5.4.1. Datos de audio ........................................................................................... 55 5.4.2. Datos de actividad ..................................................................................... 57 5.5. Naïve Bayes ..................................................................................................... 57 5.5.1. Datos de audio ........................................................................................... 57 5.5.2. Datos de actividad ..................................................................................... 59 6. Resultados ............................................................................................................... 61 6.1. Datos de audio .................................................................................................. 61 6.2. Datos de actividad física ................................................................................... 65 7. Conclusiones y trabajos futuros ............................................................................... 67 7.1. Conclusiones .................................................................................................... 67 7.2. Trabajo futuro .................................................................................................. 67 7’. Conclusions and future works ................................................................................ 68 7.1’. Conclusion ...................................................................................................... 68 7.2’. Future work..................................................................................................... 68 8. Bibliografía ............................................................................................................. 69 Anexo I: Aplicaciones para monitorización del sueño ................................................. 71 Anexo II: Código de Praat ........................................................................................... 75 Anexo III: Contribuciones de los miembros ................................................................ 83
Análisis de datos útiles en predicción de trastornos emocionales Índice figuras Figura 1. Tabla comparativa smartbands ..................................................................... 15 Figura 2. Tabla comparativa smartwatches .................................................................. 16 Figura 3. Rango valores variables MFCC .................................................................... 26 Figura 4. Rango valores variables Formante ................................................................ 26 Figura 5. Lectura archivos CSV .................................................................................. 27 Figura 6. Selección variables entrada y salida .............................................................. 28 Figura 7. Implementación de la función deleteNAWithMean en código Python .......... 28 Figura 8. Implementación de la función deleteOutliers en código Python .................... 28 Figura 9. Señal de audio sin normalizar ....................................................................... 29 Figura 10. Señal de audio normalizada con MinMax Scaler ........................................ 29 Figura 11. Señal de audio sin normalizar ..................................................................... 30 Figura 12. Señal de audio normalizada con Z-Score .................................................... 30 Figura 13. Señal de audio sin normalizar ..................................................................... 30 Figura 14. Señal de audio normalizada con Robust Scaler ........................................... 30 Figura 15. Señal de audio normalizada con Normalizer ............................................... 31 Figura 16. Señal de audio sin normalizar ..................................................................... 31 Figura 17. Aplicación de las normalizaciones en código Python .................................. 32 Figura 18. Lectura del archivo CSV y una muestra del contenido ................................ 32 Figura 19. Operaciones para la elección de índices en código Python .......................... 33 Figura 20. Contenido archivos condition_NumPaciente.csv ........................................ 33 Figura 21. Obtención de las variables de actividad en código Python .......................... 34 Figura 22. Tabla de los datos de entrenamiento ........................................................... 34 Figura 23. Operaciones para obtener el dataframe X_activity_final en código Python . 35 Figura 24. Porcentaje de datos de cada clase en la base de datos en español y alemán . 37 Figura 25. Proceso para mostrar las correlaciones mediante mapas de calor en código Python ........................................................................................................................ 38 Figura 26. Implementación de la función moreImportantFeatures ............................... 39 Figura 27. Arbol de decisión generado por la función de la Figura 26 ......................... 39 Figura 28. Mapas de calor de las correlaciones entre variables I .................................. 39 Figura 29. Mapas de calor de las correlaciones entre variables II ................................. 40 Figura 30. Mapas de calor de las correlaciónes entre variables III ............................... 40 Figura 31. Número de pacientes en función del tipo y género original ......................... 41 Figura 32. Número de pacientes en función del tipo y género tras procesar los datos ... 42 Figura 33. Gráfico de la media de actividad según el tipo de paciente por horas .......... 42 Figura 34. Gráfica de la media de actividad de pacientes con depresión y bipolares por horas I ......................................................................................................................... 43
Análisis de datos útiles en predicción de trastornos emocionales Figura 35. Gráfica de la media de actividad de pacientes con depresión y bipolares por horas II ....................................................................................................................... 43 Figura 36. Gráfico de la media de actividad según el género del paciente por horas..... 44 Figura 37. Tabla del conjunto de entrenamiento con los datos de actividad agregados cada 6 horas. ............................................................................................................... 44 Figura 38. Funcionamiento Cross Validation ............................................................... 46 Figura 39. Problemas de clasificación ......................................................................... 46 Figura 40. Funcionamiento Random Forest Algorithm ................................................ 48 Figura 41. Tabla de porcentajes de acierto y tiempos de ejecución de cada algoritmo con los datos de audio. ....................................................................................................... 61 Figura 42. Tabla con las normalizaciones utilizadas por algoritmo en los datos de audio ................................................................................................................................... 62 Figura 43. Tabla del conjunto de variables óptimo de cada algoritmo en los datos de audio ........................................................................................................................... 62 Figura 44. Matriz de confusión de los datos de audio con SVM................................... 64 Figura 45. Matriz de confusión de los datos de audio con MLP ................................... 64 Figura 46. Matrices de confusión de los datos de audio con SVM (izquierda) y MLP (derecha) con datos agregados ..................................................................................... 65 Figura 47. Tabla de porcentajes de acierto de cada algoritmo con los datos de actividad física. .......................................................................................................................... 65 Figura 48.Tabla de tiempos de ejecución de cada algoritmo con los datos de actividad física ........................................................................................................................... 65 Figura 49. Matriz de confusión de los datos de actividad física con RFC ..................... 66
Análisis de datos útiles en predicción de trastornos emocionales Índice de ecuaciones (1) Equivalencia Mel - Hercios ................................................................................... 26 (2) Limites de valores outliers ..................................................................................... 28 (3) Normalización MinMax ......................................................................................... 29 (4) Normalización Z-Score .......................................................................................... 29 (5) Normalización Robust Scaler ................................................................................. 30 (6) Norma L1 .............................................................................................................. 31 (7) Norma L2 .............................................................................................................. 31 (8) Norma MAX ......................................................................................................... 31 (9) Normalización con norma ...................................................................................... 31 (10) Correlación .......................................................................................................... 38 (11) Covarianza .......................................................................................................... 38 (12) Desviación típica ................................................................................................. 38 (13) Kernel RBF (SVM) ............................................................................................. 52 (14) Actualización de pesos red neuronal .................................................................... 55 (15) Error red neuronal................................................................................................ 55 (16) Gaussian Naïve Bayes ......................................................................................... 57 (17) Teorema de Bayes ............................................................................................... 57
Análisis de datos útiles en predicción de trastornos emocionales 1 Resumen El trastorno bipolar es una afección mental en la que una persona tiene unos cambios de ánimo muy marcados. Cuando se produce uno de estos cambios se denomina episodio. La finalidad de este trabajo es predecirlos utilizando Machine Learning (Aprendizaje Automático) sobre unos datos que se obtendrán de forma no intrusiva. La primera fase del trabajo consiste en la obtención de los datos mediante dispositivos tecnológicos que utilizamos en el día a día, como son los smartphones y las pulseras de actividad, y con ellos tratar de predecir episodios en un paciente con trastorno bipolar y detectar si entrará, en un futuro cercano, en un estado de depresión o manía. Con esto el médico sabrá de antemano cuando un paciente puede sufrir un episodio y reaccionar con antelación de la forma que considere oportuna. En concreto se ha trabajado con señales de voz, obtenidas de repositorios públicos, y con datos de actividad física para identificar estos estados. Las señales de voz servirán para predecir emociones. Esto ayuda a detectar cambios de ánimo, usado como indicador de un posible episodio. Los registros de actividad física también proporcionan información del estado anímico de un paciente. Por ello se consideran que son fuentes relevantes de datos y han sido elegidas para realizar proyecto. Para la predicción se tratarán los datos a los que después se aplicarán distintos algoritmos de Machine Learning con el objetivo de determinar cuál de estos algoritmos produce mejores y más fiables resultados a la hora de predecir un episodio. Además de la predicción de crisis, otros resultados que se pueden extraer es la importancia de las distintas variables a la hora de prever si el paciente tendrá o no un episodio próximamente. Con esto se podría profundizar más en la investigación de estos trastornos aislando los factores de influencia más relevantes para la detección de los cambios. En la presente memoria se describe un análisis exhaustivo del proceso de obtención y preparación de los datos, además de la selección de algoritmos de reconocimiento y detección que tienen mejor precisión. Se discuten los resultados para proporcionar una herramienta de análisis a los especialistas que les ayude en la toma de decisiones. Palabras clave Aprendizaje Automático, análisis de voz, actividad física, procesamiento de datos, predicción, trastorno bipolar, depresión.
8
Análisis de datos útiles en predicción de trastornos emocionales 9 1’. Introduction 1.1’. Research Context This work arises as a continuation of the thesis Application of Machine Learning Algorithms for bipolar Disorder crisis Prediction [11] by Axel Junestrand, which tried to anticipate the episodes of crisis in bipolar disorder patients to avoid the symptoms before that patients begin to suffer. This project used subjective data given by the patients themselves through sessions with the doctor. The problem that this posed is that the data may be distorted and not being accurate, in addition, is required to have a face to face session to obtain them. With this work is intended to analyze the possibility of making the prediction of this episodes using objetive data obtained through mobile devices, such as smartphones and smartbands. That way the data is more accurate and can be obtained remotely and in a non-intrusive way. These data to be extracted are recordings of the voice and physical activity monitored, because it is thought that they could determine, in part, the mood of the patients and considering how it evolves, it could be possible to develop a system of aid to the decision for specialist. 1.2’. Objetives The general objetive of this work is to predict crisis in bipolar patients based on physical activity and voice signals analysis. This will serve as a system to help in the medical specialist makingdecision. For this, the following sources of information have been used: - With voice signals it is intended to identify emotions, specifically, six moods that are: happiness, sadness, fear, disgust, anger and neutral. - With physical activity data the objetive is identify two types of mental deseases, unipolar depression and bipolar disorder To achieve this, a series of specific objetives that will mark the deveopment of the work are propounded. • Study of state of the art, to know the most used and recommended techniques. • Analysis of phisical activity monitoring devices and audio databases to obtain sets to train the models. • Procesing activity and voice signals to obtain prepared data to create models. • Apply machine learning to classify moods through voice and to detect disorders through physical activity. • Comparation of various tecniques of machine learning to determine the best. • Discuss the results and compare with other relatated projects.
Análisis de datos útiles en predicción de trastornos emocionales 10 1.3’. Work plan To carry out this project, a 5-stage process has been carried out: data collection, data cleaning and preparation, exploratory data analysis, algorithm comparison and the most appropriate recognition of patterns algorithm selection. In the data collection phase, all the necessary data were collected for the project, from which a final version was obtained in CSV format to facilitate its treatment in future phases. In the cleaning and preparation phase study of the previously obtained data was carried out, incorrect or empty values are detected, outliers are eliminated, and the data are standardized; all this with the intention of having the data prepared to carry out a thorough analysis in the next phase. In the exploratory analysis of the data, it was determined which variables were more important when applying the algorithms. For this we looked at the importance that the decision trees gave to each variable and, studying the correlation between the variables, redundancies could be eliminated, and the set of variables reduce, to improve the computing time and complexity of input data. With these data already prepared, different machine learning algorithms were tested varying the parameters of each one of them to make a comparison of the results obtained. Finally, based on these results was determined which algorithm would be the most suitable for this problem. The results obtained are satisfactory and provide an information that can be very useful to the episodes prediction in bipolar patients. 1.4’. Technologies used In the project it has been used Python 3 as programming language, to process the data and apply the algorithms of machine learning, making use of Jupyter Notebook as environment. In addition, the Praat program has been used to obtain the variables from the sound waves from the recorded audios. 1.4.1’. Python Python is an interpreted programming language administered by the Python Software Foundation. Its use in automatic learning is very widespread because it has libraries that help the treatment (pandas, Scikit-Learn) and visualization (Matplotlib, Seaborn) of the data, in addition to others that provide prediction algorithms (Scikit-Learn). 1.4.2’. Jupyter Notebook Jupyter Notebook is a web application that consists of "notebooks" that include code, which can be executed by fragments. It also allows the use of Markdown, which is very
Análisis de datos útiles en predicción de trastornos emocionales 11 useful to comment on certain snippets of code. Another advantage that brings the use of Jupyter Notebook is the ability to visualize results quickly, clearly and easily. 1.4.3’. Praat Praat (http://www.fon.hum.uva.nl/praat/) is a desktop program available for OSX, Windows and Linux, created by Paul Boersma and David Weenink, professors of the University of Amsterdam. The program allows to analyze an audio wave, making available to the user several tools to obtain the value of different variables like: The pitch (maximum, minimum, medium) or the intensity (maximum, minimum, average); It allows to modify the range of frequencies to edit, to obtain frequencies of specific moments of the wave, to obtain the formants (peak of intensity in the spectrum of a sound since the maximum concentration of energy, amplitude of wave, is given in a certain frequency), and some more advanced features for experts. 1.5’. Repository The project is published in a repository on GitHub: https://www.github.com/MrDevoid/TFG. The following content can be found here: 1. CSV files used in the project. 2. The Praat scripts used to get the CSV files from the audios. 3. The notebook used to generate the CSV files from the Praat scripts and the audios. 4. The notebook used to train and test the prediction algorithms. The project is protected under a GNU General Public License v 3.0 1.6’. Final degree project structure This document describes the process followed during the project. This has been structured in chapters to facilitate reading: Chapter 1: Introduction of the project which discusses the general aspects of this, technologies and data used, methodology of work, and objectives of the thesis. Chapter 2: State of the art in which some similar projects are mentioned and the technologies with which they are working. It also makes an analysis of the current applications and devices that allow to monitor certain variables. Chapter 3: Description of data pre-processing. Firstly, it explains how the data needed for the project is obtained, and an analysis of each dataset is performed, describing the variables of each one of these data. This describe the procedures applied to the data to prepare them for training, such as normalizing or treating atypical values.
Análisis de datos útiles en predicción de trastornos emocionales 12 Chapter 4: Analysis of the data. In this section we study the variables of the data obtained in Chapter 3. It is observed the correlation that exists between the variables, which variables are more relevant when predicting and which are less relevant, all with the objective of cleaning the datasets and train only with the variables necessary. Chapter 5: Machine learning algorithms. Description of the algorithms used in the project to predict and how their parameters have been configured for this problem. Chapter 6: Results obtained when applying the algorithms seen in previous chapter. The results are analyzed, and certain modifications are made to improve its performance, such as modifying the number of exit classes. Chapter 7: Conclusions and future work. The results and if it is useful to use machine learning for these real problems are discuss, explaining which algorithm or algorithms would be the most appropriate. In addition, there are some ways in which one could move forward in the future. 1.7’. Related career subjects Throughout the degree we have studied a series of subjects related to Artificial Intelligence and the data and information processing that have given us the necessary skills to carry out this work. The main subjects are: - Artificial Intelligence, which gave an overview of the symbolic and subsymbolic artificial intelligence present today. - Artificial Intelligence applied to Control, it was about the use of artificial intelligence algorithms (evolutionary computation, expert systems, neural networks and fuzzy logic) applied to control systems. - Automatic learning and Big Data, a subject that teaches the foundation of some algorithms such as linear regression and logistics, neural networks, SVM and others used in current problems of data analysis. - Data mining and the Big Data paradigm, in which we learn techniques for the correct handling, processing and/or exploitation of large volumes of data, as well as the use of an adequate representation of these. - Cloud and Big Data: mainly focuses on processing large amounts of data using cloud services, frameworks such as Hadoop or Spark on Amazon's cloud services platform.
Análisis de datos útiles en predicción de trastornos emocionales 13 2. Estado del arte 2.1. Proyectos similares Se han encontrado algunos trabajos de reconocimiento del habla para detectar el estado del ánimo. Estos utilizan habitualmente una herramienta software para procesar el audio, como PRAAT [7, 8, 17, 22]. Como algoritmo de clasificación lo más habitual es utilizar redes neuronales [5, 7, 12, 14, 15], SVM [7, 9, 12, 14], K-NN [9, 15] y árboles de decisión [14]. Además, en estos trabajos se hace uso de algoritmos de selección de variables y, a diferencia de lo que sucede con los algoritmos de clasificación, no existe un algoritmo que se use de forma habitual. Sobre el tema de predicción del estado de ánimo a partir de variables como el movimiento o el sueño existen escasos trabajos que traten de determinar las emociones o posibles episodios mediante estás señales. Algunos de los trabajos que tratan contenidos similares a los que se abordan en este TFG son: 1. Application of Machine Learning Algorithms for Bipolar Disorder Crisis Prediction [11]: Trabajo realizado el año anterior por un compañero de la facultad de Informática de la UCM. Este trabajo utiliza fuentes de datos subjetivas. 2. Prominence features: Effective emotional features for speech emotion recognition [9]: En este artículo se comparan los algoritmos K-Nearest Neighbor (K-NN), Naïve Bayes (NB), Support Vector Machine (SVM) y Partial Least Squares-Discriminatory Analysis (PLS-DA). Utiliza la base de datos Chinese Dual-mode Emotional Speech Database (CDESD). Los mejores resultados son obtenidos por SVM y NB, en torno a un 73% de aciertos. 3. Emotion in speech: recognition and application to call centers [15]: En este artículo se comparan los resultados de los algoritmos K-Nearest Neighbors (KNN), Neural Networks (NN) y Ensembles of Neural Networks. Crean una base de datos pidiendo a varias personas que graben una serie de frases simulando diferentes estados de ánimo. Los resultados obtenidos son de un 55% de aciertos con el algoritmo K-NN, un 65% con NN y un 70% con ENN. 4. Speech Emotion Recognition: Methods and Cases Study [12]: En este artículo se trata de determinar las emociones presentes en el habla, utilizando redes neuronales recurrentes (RNN), regresión lineal multivariable (MLR) y support
Análisis de datos útiles en predicción de trastornos emocionales 14 vector machines (SVM). Utilizan variables como los MFCC, características de modulación espectral y coeficientes de predicción lineal (LPC). Como bases de datos utilizan Emotional speech synthesis database [4], con audios en español, y Berlín Emotional Database [1]. Los resultados obtenidos son de un 90,05% para la base de datos de audios españoles utilizando las RNN y un 75,90% para la base de datos de audios alemanes utilizando MLR. 5. The production and recognition of emotions in speech: features and algorithms [14]: Estudio donde se comparan una gran cantidad de algoritmos de machine learning, k-NN, decision trees, Kernel density, KStar, Linear regression, LWR, SVM, AdaBoost… Utilizan como datos de prueba una base de datos japonesa con unos 4800 audios. Se centra en estudiar el sentimiento que produce una voz en las personas, con la finalidad de modular los sentimientos de las voces robóticas. Obtienen porcentajes de acierto en torno al 94% con árboles de decisión, SVM y AdaBoost. En este caso las clases posibles para la clasificación son calma, ira, tristeza, confort y alegría. 6. Statistical Evaluation of Speech Features for Emotions Recognition [8]: Artículo donde se utiliza la Berlin Emotional Database, y realizan una clasificación en dos clases, alta excitación (alegría, miedo, ira) y baja excitación (neutral, aburrimiento, asco y tristeza). Se comentan algunas de las variables más relevantes como energía, tono, velocidad del habla, y variables espectrales como los coeficientes cepstrales de mel. Utiliza el algoritmo MLP, obteniendo un 83,17% de aciertos al clasificar en 7 clases, y un 95% al clasificar en alta o baja excitación. 7. Speech Emotion Classification Using SVM and MLP on prosodic and voice quality features [7]: Trabajo donde se compara la clasificación realizada por SVM y MLP de la emoción presente en el habla, haciendo uso de características prosódicas y de la calidad de la voz. La agrupación se hace en 7 clases: alegría, asco, miedo, ira, aburrimiento, tristeza y neutral. Hacen uso de la Berlín Emotional Database y consiguen unos porcentajes de acierto de un 76,82% con SVM y un 78,69% con MLP. 8. Analysis on speech signal features of manic patients [10]: Trabajo que trata de determinar si es posible utilizar la voz para diferenciar pacientes sanos y pacientes maniacos. Para crear el conjunto de datos que utilizan, graban a 30 pacientes maniacos y a 30 sanos para más adelante estudiar el habla con modelos como Random Forest y SVM. Para determinar el tipo de paciente que era cada uno utilizaron BRMS (Bech-Rafaelsdn Mania Rating Scale) y CGI (Clinical Impression Rating Scale). El objetivo que se persigue con nuestro trabajo consiste en estudiar la posibilidad de predecir los episodios de manía o depresión que sufren las personas con trastornos
Análisis de datos útiles en predicción de trastornos emocionales 15 bipolares, de forma no intrusiva, es decir, mediante la utilización de dispositivos de uso cotidiano como son los smartphones y las pulseras de monitorización. Además de estudiar trabajos que realizan un análisis de la voz para determinar las emociones o posibles episodios, es importante saber como se está afrontando actualmente la detección y prevención de estos episodios. En el artículo Psychosocial interventions for the prevention of relapse in bipolar disorder: systematic review of controlled trials [2] se habla de que para prevenir estos episodios se utiliza medicación y añade que una ayuda psicosocial, como son las terapias cognitivo-conductuales y familiares presentan beneficios como complemento de la medicación. Por lo tanto, si se puede predecir que un paciente sufrirá un episodio en un futuro cercano, el médico podría comentar a la familia la necesidad de aplicar dichas terapias para tratar de prevenir la crisis. De esta forma, quizá, podría evitarse el episodio sin ser necesaria una terapia constante con el paciente. Además, actualmente los métodos para diagnosticar manía se han basado en juicios clínicos como YMRS (Young Mania Rating Scale), BRMS (Bech-Rafaelsdn Mania Rating Scale), MIDI (Mini-International Neuropsychiatric Interview) y MDQ (Mood Disorder Questionnaire) [10], los cuáles utilizan datos subjetivos y, por lo tanto, es posible que no sean del todo certeros o precisos. 2.2. Dispositivos de monitorización Los dispositivos actualmente en el mercado que pueden utilizarse para la monitorización son: smartbands (pulseras inteligentes) y smartwatches (relojes inteligentes). Smartbands: algunos de los más utilizados y sus funcionalidades se muestran en la Figura 1. Figura 1. Tabla comparativa smartbands
Análisis de datos útiles en predicción de trastornos emocionales 16 Smartwatches: Los relojes inteligentes que permiten la monitorización de una serie de variables de interés para este estudio se muestran en la Figura 2. Figura 2. Tabla comparativa smartwatches 2.3. Aplicaciones de monitorización Las aplicaciones que existen a día de hoy para la monitorización se suelen dividir en aplicaciones para monitorizar el sueño, la actividad física y el audio. También se realiza un análisis de algunas aplicaciones que ayuden a obtener los datos de la forma más adecuada. 2.3.1. Aplicaciones de monitorización de la actividad física De la misma manera que para el sueño, se han analizado diversas aplicaciones que monitorizan la actividad física para seleccionar la más adecuada. ● Google Fit: Aplicación gratuita de Google. Monitoriza en segundo plano las actividades que realice el usuario llevando el terminal consigo (actividades de cardio). Además, podrá introducir manualmente actividades si en ese momento no tenía consigo el teléfono, o bien, si va a realizar un entrenamiento específico. Solo en el caso de añadir una actividad será necesario introducir datos adicionales, como hora de inicio y fin, tipo de actividad, calorías, pasos y kilómetros. De forma gráfica la aplicación muestra los pasos, calorías consumidas y kilómetros recorridos, todo ello referido al día en curso. También muestra un resumen de las calorías gastadas en los últimos 7 días, información sobre la frecuencia cardiaca del usuario, y el peso; estos dos últimos pueden ser representados de forma gráfica en distintos niveles de especificidad como diaria, semanal, mensual o anual. Ofrece la posibilidad de exportar un csv con los datos. Para ello el usuario ha de ir a la siguiente página: https://takeout.google.com/settings/takeout/downloads, crear un archivo, seleccionar sólo los datos de Fit, pulsar en siguiente, configurar las opciones del archivo al gusto del usuario y pulsar en continuar. Tras esto se obtiene una carpeta con
Análisis de datos útiles en predicción de trastornos emocionales 17 bastante información. Los csv, que se encuentran en Takeout > Fit > Agregaciones diarias, contienen las siguientes variables: 1. Hora de inicio (HH:MM:SS) 2. Hora de finalización (HH:MM:SS) 3. Calorías (kilocalorías) 4. Distancia (metros) 5. Frecuencia cardiaca media (ppm) 6. Frecuencia cardiaca máxima (ppm) 7. Frecuencia cardiaca mínima (ppm) 8. Latitud baja (grados) 9. Longitud baja (grados) 10. Latitud alta (grados) 11. Longitud alta (grados) 12. Velocidad media (m/s) 13. Velocidad máxima(m/s) 14. Velocidad mínima (m/s) 15. Recuento de pasos 16. Peso medio (kilogramos) 17. Peso máximo (kilogramos) 18. Peso mínimo (kilogramos) 19. Duración de inactividad (milisegundos) 20. Duración de andar (milisegundos) Cada csv corresponde a un día concreto, y las horas de inicio y finalización corresponden a intervalos de 15 minutos, lo que implica que muchas casillas del archivo se encuentran vacías. Las unidades de las variables son las mismas para todas las aplicaciones y dispositivos utilizados en este trabajo. Y en caso de existir alguna diferencia se especifica en la variable correspondiente. ● MiFit: Está aplicación permite la monitorización del ejercicio físico. La monitorización de actividad se realizará de forma automática, y se guardará en la aplicación como actividades, mostrando los pasos, distancia recorrida, y calorías quemadas. Por otro lado, es posible registrar un entrenamiento, como correr al aire libre, en cinta, caminar o ciclismo, y para ello será necesario ir a la pestaña de entretenimiento y pulsar en “Go”. Para registrar otro tipo de entrenamientos será necesario un dispositivo de Xiaomi (pulsera de actividad MiBand). Para obtener los datos referentes a la actividad física bastará con realizar la operación comentada anteriormente para esta aplicación: Perfil > Ajustes > Acerca de > Ejercer los derechos del usuario > Exportar datos. Tras esto el usuario deberá introducir su cuenta y seleccionar los datos que desea obtener, en este caso los de actividad y deporte y, opcionalmente, los de frecuencia cardiaca. Tras unos minutos recibirá un correo con un link para descargar sus datos. En los distintos csv aparecerán las siguientes variables.
Análisis de datos útiles en predicción de trastornos emocionales 24 obtener el .csv de los audios de prueba bastará con indicar el directorio en el que se encuentran todos los audios. Cabe comentar que los audios en español tenían un formato .l16, y para transformarlo a .wav se utiliza un script de praat: TransformarAudiosEspanol.praat que carga los archivos y los guarda en .wav en los directorios adecuados, de forma que basta con aplicar ScriptCrearCsv.praat a todos los audios de forma genérica para extraer las variables. A continuación se realiza una breve descripción de todas las variables utilizadas en el análisis de audios: ➔ Amplitude (mean, min, max, std, range): Mide la amplitud de la señal, es decir, la diferencia entre el punto más alto de una onda y su base. Los valores de esta variable se encuentran en los siguientes intervalos: ◆ Mean (Pascal): [-0.007, 4.5e-5] ◆ Minimum (Pascal): [-1.3, -0.06] ◆ Maximum (Pascal): [0.5, 1.3] ◆ Standard deviation (Pascal): [0.008, 0.3] ◆ Range (Pascal): [0.1, 2.31] Pascal = kg /(m*s2) = Newton/metro2 ➔ Pitch (mean, min, max, std, range): Se refiere a la frecuencia fundamental (primer armónico) que se obtiene al aplicar el análisis de Fourier a la onda sonora. Los valores de esta variable se encuentran en los siguientes intervalos: ◆ Mean (Hz): [90.5, 441] ◆ Minimum (Hz): [65.5, 312] ◆ Maximum (Hz): [108.2, 635.7] ◆ Standard deviation (Hz): [6.6,198.2] ◆ Range (Hz): [33.2, 556] ➔ Harmonicity (mean, min, max, std, range): Representa el grado de periodicidad acústica, expresada en dB. Los valores de esta variable se encuentran en los siguientes intervalos: ◆ Mean (dB): [0.2, 20.2] ◆ Minimum (dB): [-229, -220] ◆ Maximum (dB): [10, 60] ◆ Standard deviation (dB): [2,10] ◆ Range (dB): [245, 290]
Análisis de datos útiles en predicción de trastornos emocionales 25 ➔ Intensity (mean, min, max, std, range, quantile): Representa la intensidad en puntos de tiempo separados linealmente, expresada en dB. Los valores de esta variable se encuentran en los siguientes intervalos: ◆ Mean (dB): [40, 77.6] ◆ Minimum (dB): [12, 61] ◆ Maximum (dB): [61, 80] ◆ Standard deviation (dB): [3, 99] ◆ Range (dB): [14.5, 60] ◆ Quantile (dB): [40, 82] ➔ Speech rate (Sílabas/segundo): Mide la velocidad y densidad del habla por unidad de tiempo. Los valores de esta variable se encuentran en el intervalo [0, 7] ➔ Articulation rate (Sílabas/segundo): Obtiene una medida de la velocidad del habla donde se excluyen del cálculo todas las pausas. Los valores de esta variable se encuentran en el intervalo [0, 7] ➔ Energy (mean, min, max, std, range): Energía que transmiten las ondas sonoras, la cual procede de la vibración del foco sonoro. Los valores de esta variable se encuentran en los siguientes intervalos: ◆ Mean (Pascal2 s): [400, 1600] ◆ Minimum (Pascal2 s): [-600, 1000] ◆ Maximum (Pascal2 s): [1100, 2200] ◆ Standard deviation (Pascal2 s): [110, 600] ◆ Range (Pascal2 s): [365, 2400] ➔ MFCC 1-12 (mean, min, max, std, range) [20, 22]: Representan los coeficientes cepstrales de frecuencia de Mel en función del tiempo. Estos coeficientes están basados en la percepción auditiva humana y se calculan a partir de la Transformada de Fourier (TF) o la Transformada del Coseno Discreta. Además, los MFCC son menos susceptibles a las variaciones provocadas por la condición física de los oradores. Los valores de esta variable, en la escala de Mel, se encuentran en los siguientes intervalos (ver Figura 3): Mean Minimum Maximum Standard deviation Range MFCC 1 [0,400] [-350, 200] [180, 600] [40, 175] [200, 750] MFCC2 [-170, 93] [-400, -25] [70, 350] [30, 155] [170, 700] MFCC3 [-35, 120] [-230, -5] [100, 360] [25, 110] [130, 500] MFCC4 [-90, 80] [-270, -40] [40, 200] [25, 80] [150, 400] MFCC5 [-60, 60] [-220, -20] [40, 200] [20, 70] [120, 360] MFCC6 [-80, 35] [-240, -50] [10, 170] [20, 70] [110, 350] MFCC7 [-100, 25] [-210, -40] [10, 140] [20, 50] [100, 300] MFCC8 [-50, 30] [-160, -30] [25, 160] [20, 45] [95, 260]
Análisis de datos útiles en predicción de trastornos emocionales 26 MFCC9 [-70, 25] [-180, -30] [0, 125] [15, 50] [90, 250] MFCC10 [-40, 30] [-150, -20] [25, 140] [15, 40] [80, 250] MFCC11 [-50, 20] [-160, -30] [15, 130] [10, 45] [80, 250] MFCC 12 [-25, 40] [-120, -20] [25, 140] [10, 40] [60, 225] Figura 3. Rango valores variables MFCC Como se puede observar los intervalos son bastante amplios, debido a la presencia de audios en diferentes idiomas, con una entonación más grave o más aguda. La escala de Mel es una escala de tonos juzgados como intervalos equiespaciados, y su equivalencia es la siguiente, con f (Hz): 𝑚 = 1127,01048 × 𝑙𝑜𝑔𝑒 (1 + 𝑓/700) (1) ➔ Formantes 1-5 (mean, min, max, std, range, quantile): Representa la estructura espectral en función del tiempo. Los valores de esta variable se encuentran en los siguientes intervalos en Hercios (ver Figura 4): Formante 1 Formante 2 Formante 3 Formante 4 Formante 5 Mean [500, 1100] [1600, 2320] [2600, 3300] [3500, 4500] [4400, 5200] Minimum [0, 300] [100, 1300] [1200, 2600] [2200, 3800] [3300, 4800] Maximum [1200, 3100] [2600, 4400] [3500, 5300] [4800, 5700] [5200, 5600] Standard deviation [150, 650] [250, 720] [250, 660] [200, 700] [150, 520] Range [1000, 3000] [1500, 4000] [1500, 3800] [1500, 3400] [750, 2100] Quantile [350, 1300] [1400, 2500] [2500, 3400] [3500, 4600] [4400, 5200] Figura 4. Rango valores variables Formante Al igual que sucedía en los MFCC, los rangos son muy amplios por el mismo motivo. 3.1.2. Obtención de los datos de actividad física En relación con la actividad física se han utilizado los datos obtenidos de The Depresjon Dataset en formato CSV. Los datos han sido recolectados mediante un reloj (Actiwatch, Cambridge Neurotechnology Ltd, England, model AW4) que mide los niveles de actividad. La frecuencia de muestreo es de 32 Hz y se registran movimientos por encima de 0.05 g. El número perteneciente a la actividad es proporcional a la intensidad del movimiento. El total de la actividad está siendo continuamente registrada en intervalos de 1 minuto.
Análisis de datos útiles en predicción de trastornos emocionales 27 Los datos de actividad corresponden a 23 pacientes con depresión o trastorno bipolar que usaron este dispositivo en su mano derecha. A continuación, se muestra un análisis de los campos que contiene scores.csv: ➔ number: Identificador del paciente ➔ days: número de días de la medición ➔ gender: 1 (mujer), 2 (hombre) ➔ age: edad agrupada en grupos de edad ➔ afftype: 1 (bipolar II), 2 (depresivo unipolar), 3 (bipolar I) ➔ melanch: 1 (melancolía), 2 (no melancolía) ➔ inpatient: 1 (paciente interno), 2 (paciente externo) ➔ edu: (educación agrupada en años) ➔ marrieage: 1 (casado/a o con pareja), 2 (soltero/a) ➔ work: 1 (trabajando o estudiando), 2 (desempleado / baja por enfermedad / jubilado) ➔ madrs1: puntuación MADRS cuando empieza la medición ➔ madrs2: puntuación MADRS cuando finaliza la medición Dentro de la carpeta condition hay 23 ficheros CSV relativos a cada uno de los pacientes analizados. A continuación se muestran los campos que contiene cada fichero: ➔ timestamp: fecha y hora en intervalos de 1 minuto en el siguiente formato: AAAA-MM-DD HH:MM:SS ➔ date: fecha de la medición en el siguiente formato: AAAA-MM-DD ➔ activity: medición del nivel de actividad 3.2. Limpieza de datos 3.2.1. Limpieza y preparación de los datos de audio Una vez obtenidos los csv, como se ha explicado anteriormente, se procede a su carga haciendo uso de la función read_csv() proporcionada por la librería Pandas. Una vez cargados los datos, se separa cada csv en dos variables: variable X, que contendrá las columnas correspondientes a las variables de entrada con una fila por cada ejemplo, y la variable Y, que contendrá la clase a la que pertenece cada ejemplo. Para asociar un ejemplo con su clase se hará uso del número de la fila en la que se encuentre dicho ejemplo, por lo que es importante no modificar el orden de las filas durante el proceso de entrenamiento (Ver Figuras 5 y 6). Figura 5. Lectura archivos CSV
Análisis de datos útiles en predicción de trastornos emocionales 28 Figura 6. Selección variables entrada y salida Con las variables de entrada y salida preparadas, se aplica en todos los conjuntos de datos una función que eliminará los valores nulos sustituyéndolos por la media aritmética de la variable correspondiente, de forma que a partir de este momento el conjunto de datos pueda tratarse sin ese problema. La función se muestra en la Figura 7. Figura 7. Implementación de la función deleteNAWithMean en código Python Otro tipo de datos problemáticos son los outliers o valores atípicos que son valores numéricamente muy distantes al resto de datos de una muestra, y que pueden llevar a tener un peor resultado en la predicción. Estos pueden ser fruto de una mala medición de la variable o puede que ese ejemplo sea un caso excepcional, por lo que a la hora de tratarlos se deberá tener en cuenta estos posibles orígenes. Para detectarlos se utilizará el rango intercuartílico y los cuartiles 1 y 3, aplicando la siguiente fórmula: 𝑳𝒐𝒘𝒆𝒓 𝒍𝒊𝒎𝒊𝒕 = 𝑸𝟏 − 𝟏.𝟓 × 𝑰𝑸𝑹 𝑼𝒑𝒑𝒆𝒓 𝒍𝒊𝒎𝒊𝒕 = 𝑸𝟑 + 𝟏.𝟓 × 𝑰𝑸𝑹 (2) De esta forma un valor será atípico sí es menor que Lower limit o mayor que Upper limit, y dado su origen, se considera que lo más conveniente sería eliminar estos ejemplos del entrenamiento para no empeorar el resultado. La supresión de outliers se lleva a cabo de la forma que muestra la Figura 8. Figura 8. Implementación de la función deleteOutliers en código Python
Análisis de datos útiles en predicción de trastornos emocionales 29 Sin embargo, al aplicar esto se eliminan más del 50% de los datos, por lo que se decidió realizar modificaciones para no suprimir tal cantidad de información, puesto que en las pruebas el rendimiento de los algoritmos se reducía considerablemente. Una de las medidas tomadas consiste en realizar esta supresión tras eliminar las variables menos relevantes; con ello algunos de los ejemplos antes eliminados permanecían ahora en el conjunto de datos. Además de esto, dado que el número de ejemplos eliminados aún es cuantioso, se amplía el rango de valores no considerados outliers, multiplicando el IQR por valores mayores. Finalmente, tras realizar varias pruebas se determinó que 2.5 era un valor adecuado para este problema, puesto que de esta forma se eliminaban los ejemplos cuyos valores eran realmente extremos. Uno de los problemas que aparecen con el conjunto de datos de audio es la heterogeneidad en las unidades de medida, lo que provoca grandes variaciones en los valores de las diferentes variables. Por lo tanto, se ha de aplicar una normalización previa al tratamiento. Se han analizado distintas alternativas de normalización, y a continuación se detallan y ejemplifican mostrando gráficamente el efecto que tiene cada una, con la ayuda de dos gráficas (azul: antes y amarillo: después). - Escalado de variables (MinMax Scaler): Está normalización se realiza aplicando la siguiente fórmula: 𝑋𝑛𝑜𝑟𝑚𝑎𝑙𝑖𝑧𝑒𝑑=𝑋−𝑋𝑚𝑖𝑛 𝑋𝑚𝑎𝑥 − 𝑋𝑚𝑖𝑛 (3) Está normalización transforma los datos originales al dominio [0-1], siendo 0 el valor mínimo y 1 el valor máximo. Podría presentar algunos problemas debido a la presencia de outliers y además distorsionar mucho señales de audio estables. Las Figuras 9 y 10 muestran unos datos de ejemplo antes y después de la normalización. - Z-Score: Esta normalización se realiza aplicando la siguiente fórmula: 𝑋𝑛𝑜𝑟𝑚𝑎𝑙𝑖𝑧𝑒𝑑=𝑋 − 𝑋𝑚𝑒𝑎𝑛 𝑋𝑠𝑡𝑑𝑑𝑒𝑣 (4) Figura 9. Señal de audio sin normalizar Figura 10. Señal de audio normalizada con MinMax Scaler
Análisis de datos útiles en predicción de trastornos emocionales 30 Está normalización transforma los datos para que sigan una distribución normal de media 0 y desviación típica 1. En este caso no se consigue agrupar todos los datos en un conjunto de 0 a 1 y además los outliers pueden variar la media de forma considerable y, por ende, provocar la pérdida de información. Las Figuras 11 y 12 muestran unos datos de ejemplo antes y después de la normalización. - Escalado robusto (Robust Scaler): Esta normalización se aplica teniendo en cuenta el rango intercuartílico de forma que sea más robusta a outliers: 𝑋𝑛𝑜𝑟𝑚𝑎𝑙𝑖𝑧𝑒𝑑=𝑋 − 𝑄1(𝑋) 𝑄3(𝑋) − 𝑄1(𝑋) (5) Al igual que sucede con la normalización estándar los datos no se limitarán a un rango [0-1] y, además, puesto que utiliza menos información de los datos iniciales, es recomendable utilizar esta normalización cuando existen varios outliers en los datos. Las Figuras 13 y 14 muestran unos datos de ejemplo antes y después de normalizar. - Normalizer: Para aplicar esta normalización primero se obtiene la norma (l1, l2 o max) de cada variable y posteriormente se normaliza dividiendo entre la norma de la columna obtenida anteriormente: Figura 11. Señal de audio sin normalizar Figura 12. Señal de audio normalizada con Z-Score Figura 14. Señal de audio normalizada con Robust Scaler Figura 13. Señal de audio sin normalizar
Análisis de datos útiles en predicción de trastornos emocionales 31 𝑁𝑜𝑟𝑚𝐿1= ∑| 𝑋𝑖 | 𝑛 𝑖=1 (6) 𝑁𝑜𝑟𝑚𝐿2 = √∑| 𝑋𝑖 |2 𝑛 𝑖=1 (7) 𝑁𝑜𝑟𝑚𝑀𝐴𝑋 =𝑚𝑎𝑥(|𝑥1|,|𝑥2|,...,|𝑥𝑛|) (8) 𝑋𝑁𝑜𝑟𝑚𝑎𝑙𝑖𝑧𝑒𝑑= 𝑋 𝑁𝑜𝑟𝑚𝑋 (9) En este caso debemos seleccionar una norma, y cada una de ellas presenta una serie de características. Por un lado, la norma l1 es más robusta mientras que la norma l2 es más estable y tiene un menor coste computacional, dado que l1 no puede resolverse en términos matriciales. La norma max es muy susceptible a posibles valores atípicos. Las Figuras 15 y 16 muestran ejemplos antes y después de normalizar mediante la norma l2, que es la norma seleccionada para utilizar debido a su estabilidad y coste computacional. Para aplicar estas normalizaciones se hace uso de la librería sklearn.preprocessing y de un método definido por nosotros mismos (Escalado estándar). Primero se ajusta la media y desviación al conjunto de entrenamiento para poder hacer uso de ellas en el momento de testear los algoritmos con los datos de prueba; tras eso se transforman los datos de entrada (Ver Figura 17). Figura 15. Señal de audio normalizada con Normalizer Figura 16. Señal de audio sin normalizar
Análisis de datos útiles en predicción de trastornos emocionales 32 Figura 17. Aplicación de las normalizaciones en código Python Además de estas transformaciones, para preparar los datos para el entrenamiento se añade la columna de resultado (variable “Result”), en la que se codifica el valor de salida del audio correspondiente. Está codificación se hace de la siguiente manera: 0 - Alegría, 1 - Tristeza, 2 - Miedo, 3 - Asco, 4 - Ira, 5 - Neutral. 3.2.2. Limpieza y preparación de los datos de actividad física Primero se realiza la carga de los datos de los 22 pacientes almacenados en el archivo scores.csv, después de haber eliminado el único paciente de tipo bipolar I. Mediante la función read_csv se procede a la eliminación de los campos que no resultan de interés, en este caso la columna number y days, y se obtiene una tabla de datos como la que se muestra en la Figura 18. Figura 18. Lectura del archivo CSV y una muestra del contenido En el siguiente paso se separan los datos en cuatro tablas en función de su clase (unipolar depressive o bipolar II) y su género, para posteriormente realizar un reparto
Análisis de datos útiles en predicción de trastornos emocionales 33 equilibrado de estos datos con un mismo número de pacientes de una clase y género concretos, y evitar así un posible sobreajuste (Figura 19). Figura 19. Operaciones para la elección de índices en código Python Una vez hecho esto se concatenan las cuatro tablas para obtener los índices correspondientes a los pacientes que van a ser evaluados. El siguiente paso es cargar a partir de estos índices los archivos CSV que contiene la carpeta condition, que aparecen numerados por pacientes con el siguiente nombre condition_NumPaciente.csv. La Figura 20 muestra un ejemplo de los datos que contienen estos archivos. Figura 20. Contenido archivos condition_NumPaciente.csv Se suprime la columna date que no se utiliza y se selecciona el número de horas por la que se agregaran los datos, añadiendo además la media de la actividad (meanActivity), la desviación típica (stdActivity), la varianza (varActivity), el máximo (max) y el mínimo (min) por cada tramo en un día completo. El número de tramos en un día completo dependerá del número de horas por las que hemos agregado la actividad, por lo que si agregamos la actividad, por ejemplo, en periodos de 6 horas, tendremos cuatro tramos de 6 horas en un día. El procedimiento seguido para conseguir esto se muestra en la Figura 21.
Análisis de datos útiles en predicción de trastornos emocionales 40 Figura 30. Mapas de calor de las correlaciónes entre variables III Tras analizar varias gráficas del mismo estilo, se han determinado las variables que poseen una mayor correlación y entre ellas se selecciona un subconjunto de 23 variables que se han eliminado: meanEnergy, minEnergy, rangeEnergy, stdEnergy, rangeAmplitude, minMFCC1, stdMFCC1, rangeMFCC2, rangeMFCC4, rangeMFCC12, maxPitch, stdPitch, quantileFormant1, quantileFormant2, rangeFormant2, quantileFormant3, quantileFormant4, rangeFormant4, rangeFormant5, quantileFormant5, stdAmplitude, articulationRate, meanIntensity. Está eliminación de variables resulta en otro conjunto de datos de entrenamiento que, junto a los anteriores, sirven para valorar la importancia de las variables eliminadas; lo que se discute en la parte de resultados. A partir de este punto, en el trabajo se hará referencia a estos datos como conjunto sin variables correlacionadas. Otro tipo de variables que podrían ser eliminadas son aquellas que tienen muy poca variabilidad en los ejemplos de entrenamiento, ya que no aportan diferencias significativas para extraer algún patrón de ellas. Sin embargo, se deberían establecer unos valores límites para la varianza y la mejor forma de hacerlo sería establecer un porcentaje de igualdad de los datos y calcular la varianza con ese porcentaje y la fórmula adecuada para cada variable. Esta fórmula se obtiene conociendo la distribución que sigue la variable. Dado que hay distintas variables con distintas distribuciones, este método no es el más adecuado para aplicarlo de forma genérica. Figura 29. Mapas de calor de las correlaciones entre variables II
Análisis de datos útiles en predicción de trastornos emocionales 41 Sí es posible eliminar ese tipo de variables utilizando el árbol de decisión que se hizo para determinar qué variables eran las más importantes. Para ello bastará con fijarse en las variables que se consideran menos relevantes y eliminarlas. Esto permite eliminar las variables con poca variabilidad en los ejemplos de entrenamiento ya que el algoritmo las utilizará en los niveles más bajos pues no reducen mucho la entropía de los nodos de éste. Precisamente al observar las 20 variables menos relevantes, el algoritmo considera que la variable menos relevante es minFormant1, la cual, tiene muy poca variabilidad debido a que la mayoría de los valores eran valores NAN y fueron sustituidos por la media. Tras realizar varios análisis, las variables consideradas menos relevantes por el algoritmo de clasificación son las siguientes: minFormant1, maxFormant3, meanHarmonicity, maxFormant5, rangeFormant2, rangeFormant1, maxMFCC6, maxFormant2, minFormant2, maxMFCC4, maxFormant4. Con esto se obtienen dos nuevos conjuntos; uno de ellos eliminando estas variables menos relevantes, y otro eliminándolas del conjunto sin variables correlacionadas. 4.2. Datos de actividad física El archivo scores.csv contiene 22 pacientes repartidos de la siguiente manera (Figura 31): Figura 31. Número de pacientes en función del tipo y género original Tras realizar la distribución vista en la obtención de los datos de actividad se cuenta con un total de 14 pacientes para continuar con el proceso, repartidos como aparecen a continuación (Figura 32):
Análisis de datos útiles en predicción de trastornos emocionales 42 Figura 32. Número de pacientes en función del tipo y género tras procesar los datos Para analizar visualmente las posibles diferencias en la actividad de cada clase de paciente creamos un gráfico de la media total de actividad de cada tipo por horas. La Figura 33 muestra el resultado obtenido. Figura 33. Gráfico de la media de actividad según el tipo de paciente por horas Como se puede observar en la Figura 32, hay mayor actividad de los pacientes bipolares en horario de madrugada, hasta aproximadamente las 11:00 de la mañana, a partir de la cual cambia la tendencia y se produce una mayor actividad de los pacientes con depresión. Los picos de mayor actividad en pacientes bipolares respecto a los pacientes con depresión se producen alrededor de las 6:00-9:00 de la mañana y en pacientes con depresión alrededor de las 14:00-19:00 de la tarde. Tras realizar este análisis general, se observa el comportamiento individual de pacientes de cada clase. A continuación se crean dos gráficos que muestran un comparativo de la media de la actividad agregada por cada hora en un día completo de cada tipo de paciente para ver qué diferencias pueden observarse y si se cumple lo anteriormente analizado (Figuras 34 y 35).
Análisis de datos útiles en predicción de trastornos emocionales 43 Figura 34. Gráfica de la media de actividad de pacientes con depresión y bipolares por horas I Figura 35. Gráfica de la media de actividad de pacientes con depresión y bipolares por horas II Como se puede observar en la Figura 34, las primeras horas de la madrugada la actividad es más reducida que en la de los pacientes bipolares, y la tendencia cambia a las horas finales del día, donde son los pacientes con depresión los que tienen registros de actividad mayores. A la vista de estos resultados, se cree conveniente que la actividad sea agregada en cuatro tramos de 6 horas (00:00-06:00, 06:00-12:00, 12:00-18:00, 18:00-00:00), ya que en la actividad de cada tipo de paciente se pueden observar cambios de mayor contraste en periodos grandes de tiempo. Aun así, se procede a realizar el entrenamiento con los datos agregados cada 6 y cada 2 horas para ver qué modelos ofrecen mejor comportamiento según el tipo de algoritmo utilizado. El número total de días medidos va a depender de los pacientes incorporados en la muestra; al ser un proceso aleatorio no puede determinarse con exactitud. El valor está en torno a los 200 días. Respecto a las características de los pacientes, se decide incluir solo el género ya que las demás características no están equilibradas. Por lo tanto, al tener pocos datos podría producirse sobreajuste de las clases predominantes. La Figura 36 muestra una comparativa de la actividad media entre hombres y mujeres por horas.
Análisis de datos útiles en predicción de trastornos emocionales 44 Figura 36. Gráfico de la media de actividad según el género del paciente por horas Como se puede observar, los pacientes de género femenino tienen mayor actividad a primera hora de la madrugada, de 02:00 a 04:00, y cambia la tendencia hasta aproximadamente las 15:00, donde la actividad de los hombres es muy superior. A partir de aquí la actividad entre ambos se iguala. Se puede ver claramente como en general la actividad de los pacientes de género masculino es superior de media durante el transcurso del día por lo que este puede ser una característica diferencial para incluir en el proceso de predicción. Las columnas que contienen el mínimo de actividad denominadas min son excluidas del conjunto de entrenamiento al ser siempre 0 el valor mínimo de actividad, como es lógico. En la Figura 37 se observa un ejemplo del resultado final del conjunto de entrenamiento con la actividad agregada cada 6 horas. meanActivity sumActivity stdActivity varActivity max ... stdActivity3 varActivity3 max3 gender 0.056345 0.056347 0.175595 0.030832 0.189375 ... 0.363296 0.131984 0.189375 2 0.053499 0.053499 0.170915 0.029213 0.167000 ... 0.397378 0.157908 0.259000 2 0.037130 0.037131 0.121434 0.014745 0.107375 ... 0.245509 0.060278 0.134125 2 0.043865 0.043860 0.138403 0.019156 0.110875 ... 0.165621 0.027430 0.100750 2 0.033688 0.033689 0.118415 0.014021 0.121875 ... 0.143671 0.020643 0.091625 2 Figura 37. Tabla del conjunto de entrenamiento con los datos de actividad agregados cada 6 horas. Dependiendo del tipo de agregación utilizado para la actividad, cada 6 o cada 2 horas, el número de columnas variará su tamaño de 21 en el primer caso a 61 en el segundo. Éste es otro aspecto importante que considerar ya que puede influir en el rendimiento del algoritmo.
Análisis de datos útiles en predicción de trastornos emocionales 45 5. Aplicación de los algoritmos Dentro del aprendizaje automático se puede distinguir entre aprendizaje supervisado y no supervisado. El aprendizaje supervisado requiere tener disponibles un conjunto de pares de variables de entrada que se asocian a una variable de salida, que será el conjunto de entrenamiento. Con la ayuda de un algoritmo el objetivo es predecir la salida para valores nuevos de las variables de entrada. El aprendizaje supervisado se usa principalmente para resolver problemas de clasificación, donde la variable de salida es categórica, y problemas de regresión, donde la variable de salida es un valor real. En el aprendizaje no supervisado sólamente se conocen las variables de entrada. Su objetivo es crear un modelo que permita obtener información de los datos basándose en su estructura o distribución interna. El aprendizaje no supervisado se usa principalmente para resolver problemas de agrupamiento (clustering), donde se quiere descubrir agrupaciones que tienen relaciones entre sí, y problemas de asociación, donde se desea descubrir reglas que describen grandes porciones de los datos. Se han probado distintos algoritmos de clasificación, todos ellos supervisados, sobre los conjuntos de datos de audio y actividad, con el objetivo de identificar el algoritmo más adecuado y que proporcione la mayor precisión a la hora de determinar el estado de ánimo de un paciente. Los algoritmos usados en esta parte son: Random Forest [13], Gradient Boosting [21], Support Vector Machine [6], Redes Neuronales (MLP) [23] y Naïve Bayesian [16]. A la hora de probar el funcionamiento de los algoritmos es necesario separar los datos en dos conjuntos, uno de entrenamiento y otro de validación. De esta manera, el algoritmo será entrenado con los datos del conjunto de entrenamiento y se prueba su eficacia prediciendo el resultado de los datos del conjunto de validación, comprobando la tasa de acierto y fallo, con lo que se obtiene la tasa de éxito. Esta labor la facilita la función train_test_split de la librería de Scikit-learn que separa los dos conjuntos en base a un tamaño dado para el conjunto de validación. Para que el funcionamiento del algoritmo sea mejor, se utiliza un método denominado validación cruzada (cross validation), que consiste en separar el conjunto de datos, como anteriormente, en dos conjuntos, uno de entrenamiento y otro de validación, pero esta vez seleccionamos ‘x’ conjuntos de entrenamiento y validación de un tamaño dado y se prueba cada vez con una parte distinta de los datos. Finalmente se obtiene la precisión con la media de las ‘x’ pruebas realizadas en el conjunto. La librería de Scikit-
Análisis de datos útiles en predicción de trastornos emocionales 46 learn también proporciona la función cross_validate que realiza automáticamente lo descrito y permite seleccionar el número de particiones a realizar en el conjunto de datos. A continuación, se muestra un ejemplo del funcionamiento (Figura 38). Figura 38. Funcionamiento Cross Validation Uno de los problemas que se puede presentar a la hora de aplicar los algoritmos es el sobreajuste y el subajuste. El sobreajuste se produce cuando los datos de entrenamiento para una clase específica son muy parecidos entre sí y no hay mucha variedad dentro de los posibles datos en los que queremos que se aplique el algoritmo, o cuando se utiliza un modelo tan complejo que “memoriza” los datos de entrenamiento. El subajuste se puede producir cuando tenemos pocos datos de entrenamiento o los datos tienen muy poca similitud entre sí para cada clase específica. De esta manera la posibilidad de fallo es mayor, debido a que el modelo no está suficientemente entrenado. En la Figura 39 se ejemplifican las diferentes posibilidades comentadas. Figura 39. Problemas de clasificación Tras este breve análisis y una vez realizados todos los procedimientos comentados previamente, comienza la fase de modelado, y para ello se utilizan los conjuntos de datos que se han obtenido tras esos procedimientos.
Análisis de datos útiles en predicción de trastornos emocionales 47 Para los audios se obtienen varios conjuntos preparados para el entrenamiento. En concreto, se plantean distintas posibilidades, que surgen de variar la normalización, el conjunto de datos y el conjunto de variables: • Conjunto de datos: 1. Datos mezclados 1. Todos los ejemplos 2. Sin outliers 2. Datos alemán 1. Todos los ejemplos 2. Sin outliers 3. Datos español 1. Todos los ejemplos 2. Sin outliers • Normalización: 1. MinMax 2. Z-Score 3. Norma l2 4. RobustScaler • Conjunto de variables: 1. Todas las variables 2. Eliminadas variables correlacionadas 3. Eliminadas variables poco significativas 4. Eliminadas variables correlacionadas y poco significativas Realizando el producto cartesiano de esas posibilidades se obtienen 96 posibles conjuntos con los que realizar pruebas. En cada una de esas 96 pruebas se aplican todos los modelos comentados en líneas anteriores, de forma que también sea posible determinar qué modelo es el más adecuado para entrenar a los datos, junto con los valores de los parámetros. Para la actividad física se realizan pruebas con los datos de actividad agregados cada dos y cada 6 horas. Para cada conjunto de datos se realizan 3 pruebas para determinar la eficacia del modelo aplicando todos los algoritmos mencionados anteriormente. 5.1. Random Forest Un árbol de decisión es un diagrama de flujo con estructura de árbol binario, donde cada nodo interno denota una prueba para un atributo, cada rama representa un resultado de la prueba, y cada nodo hoja tiene una etiqueta de clase. El algoritmo Random Forest es una combinación de árboles de decisión donde cada árbol depende de los valores de un vector aleatorio probado independientemente y con la misma distribución para todos los árboles en el bosque. Cada árbol de decisión realiza una predicción y una vez conocidos los resultados de todos los árboles se decide la clase resultante por votación popular, es decir, la clase que más veces ha sido predicha.
Análisis de datos útiles en predicción de trastornos emocionales 48 En este proyecto está implementado mediante la función RandomForestClassifier de la librería de Scikit-learn. En la obtención de la precisión para este algoritmo, se prueban distintos valores del parámetro n_estimators, que indica el número de árboles en el bosque (Cuánto mayor sea el número de árboles más fiable es el resultado final, en cambio se degrada el rendimiento). Se muestra un ejemplo de su funcionamiento en la Figura 40: Figura 40. Funcionamiento Random Forest Algorithm 5.1.1. Datos de audio Para analizar los resultados se analizan los resultados obtenido utilizando los diferentes conjuntos de datos: Datos Mezclados: Para los casos en los que se utilizaban todos los ejemplos disponibles en el conjunto de datos se consigue un 77-79% de acierto, siendo habitual que los casos en los que no se eliminan variables sean un poco mejores e impliquen algún segundo más para el entrenamiento, requiriendo éste entre 4 y 5 segundos. Sin embargo, utilizando el conjunto de datos resultante de eliminar los outliers, el porcentaje de acierto se incrementa al 85% y el tiempo se reduce en torno a los 2 segundos. Esto es debido a que en el conjunto inicial de datos se encuentran ejemplos de diferentes idiomas, lo que provocaría una mayor confusión en la clasificación. Al eliminar los casos más extremos esta clasificación se facilita. Al eliminar el conjunto de variables que tenían una alta correlación se consigue reducir el tiempo empleado sin sacrificar el porcentaje de acierto, obteniendo un 85,52% en 1,89 segundos. Este resultado se obtuvo entrenando el algoritmo con el conjunto de datos resultante de eliminar outliers, eliminar las variables correlacionadas mencionadas en el apartado 4 y normalizando con la norma l2, aunque utilizar otras normalizaciones no modifica apenas el resultado. El número de estimadores para el modelo era de 31. Datos Alemán: Utilizando los datos sin eliminar outliers los resultados se encuentran en torno al 73% de acierto y 1 segundo de tiempo de entrenamiento. Los resultados son muy similares para todos los conjuntos de variables probados, por lo que un conjunto óptimo sería uno con
Análisis de datos útiles en predicción de trastornos emocionales 49 las variables correlacionadas o menos importantes eliminadas, ya que al eliminar ambas sí se produce un mayor descenso de la tasa de acierto. Con estos datos, al eliminar outliers, el porcentaje de acierto se ve reducido al 70%, debido a que la cantidad de ejemplos disponibles ya era muy escasa. En cuanto al tiempo estimado para el entrenamiento es muy similar al tiempo que requería el uso de los datos sin eliminar outliers. Se puede concluir que el mejor resultado obtenido ha sido de un 74,26% de aciertos en 1,3 segundos, utilizando los datos sin eliminar outliers, eliminando las variables correlacionadas y normalizando con Z-Score, aunque eliminar las variables menos importantes y normalizar de otra forma produce resultados similares. El número de estimadores para el modelo era de 61. Datos Español: Utilizando los datos sin eliminar outliers se observa que los datos obtenidos son muy similares para todos los conjuntos de variables y normalizaciones posibles, alcanzando siempre un porcentaje de acierto del 92% en un tiempo de entrenamiento de 1 segundo, y alcanzando el 93% en algún caso, con un tiempo de 3 segundos y haciendo uso de todas las variables. En vista a estos resultados es más razonable el primer resultado a pesar de que el acierto sea algo menor, ya que el tiempo se ve reducido. Con los datos obtenidos tras eliminar los outliers, el porcentaje de acierto se incrementa ligeramente, alcanzando en casi todas las pruebas un acierto en torno al 93%. En este caso eliminar las variables menos importantes sí que otorga un buen resultado consiguiendo incrementar el acierto en un tiempo muy similar. Se puede concluir que la configuración que parece producir el mejor resultado es utilizar los datos sin outliers y eliminar las variables menos importantes, lo que consigue un 94% en 2 segundos con la normalización MinMax. Es importante comentar nuevamente que el uso de otra normalización llevaría a la obtención de un resultado muy similar. Además, el modelo hacía uso de 71 estimadores. 5.1.2. Datos de actividad Datos agregados cada 6 horas La precisión máxima obtenida con los datos de actividad es del 76,36 % en un tiempo total de ejecución de 1,09 segundos, conseguido con un valor de 91 en el parámetro n_estimators. Datos agregados cada 2 horas La precisión máxima obtenida es del 70,18 % en un tiempo total de ejecución de 0,65 segundos, conseguido con un valor de 41 en el parámetro n_estimators.
Análisis de datos útiles en predicción de trastornos emocionales 56 Datos Alemán: En este caso la única normalización que parece presentar peores resultados es la que se realiza mediante el Robust Scaler, y aunque con el resto son muy similares, la normalización Z-Score es la que mejores porcentajes proporciona. Utilizando todos los ejemplos, los resultados obtenidos son unos porcentajes de acierto entre el 80% y el 84%, con tiempos de 1-2 segundos en todos los casos. El porcentaje de acierto es mayor cuando se utiliza la normalización adecuada (Z-Score) y además cuando el conjunto de variables menos significativas ha sido eliminado. El uso de cualquier otra normalización, sin tener en cuenta el Robust Scaler, reduce el porcentaje de acierto como mucho al 78%, empleando también alrededor de 1 segundo. Si se utilizan sólo aquellos ejemplos que no contienen outliers, los porcentajes empeoran un poco, siendo un 78%-82%, aunque los tiempos se mantienen en torno a los 1-2 segundos. Al igual que sucedía al utilizar todos los ejemplos, el conjunto que mejor se comporta es el que no posee las variables menos significativas. Por lo tanto, lo más idóneo sería utilizar este conjunto con la normalización Z-Score, ya que al utilizar otras los porcentajes de acierto se reducen al 76%, de forma similar a lo que sucede al utilizar todos los ejemplos disponibles. En resumen, el mejor resultado que da un 84,85% de acierto en 1,5 segundos, se consigue utilizando todos los ejemplos, la normalización Z-Score y el conjunto de variables que no contiene a las menos significativas. Los valores para los parámetros del modelo son de 20 neuronas para la capa oculta y 1 para α. Datos Español: En este caso sólamente al utilizar el Robust Scaler los porcentajes de acierto se ven reducidos, y al igual que con los datos mezclados y datos alemán, la normalización ZScore funciona algo mejor que el resto. Utilizando los datos que contienen todos los ejemplos, los porcentajes de acierto se encuentran en torno al 92%-95%, con tiempos de entrenamiento entre 1 y 2 segundos. En cuanto a los conjuntos de variables más adecuados, comentar que con cualquiera de ellos los resultados obtenidos se acercan al 94%-95% de acierto. Sin embargo, si se eliminan las variables menos significativas y las correlacionadas, el tiempo se reduce algo y se consigue un 95% de aciertos. Con los datos sin outliers, la normalización aplicada vuelve a ser indiferente pues los resultados son muy similares. En este caso el porcentaje de acierto se incrementa hasta el 96%, con tiempo de entre 1-2 segundos, existiendo casos en los que baja del segundo. En cuanto al conjunto de variables no presentan diferencias muy grandes, por lo que se opta por eliminar tanto las variables menos significativas como las variables correlacionadas, de forma que se reduzca el tiempo de entrenamiento. En resumen, el mejor resultado obtenido es de 96,56% en 0,43 segundos, conseguido con los datos sin outliers, eliminando variables menos significativas y
Análisis de datos útiles en predicción de trastornos emocionales 57 correlacionadas, y con la normalización Z-Score. Los valores para los parámetros del modelo son de 20 neuronas para la capa oculta y 0,1 para α. 5.4.2. Datos de actividad Datos agregados cada 6 horas La precisión máxima obtenida con los datos de actividad es del 76,82 % en un tiempo total de ejecución de 0,70 segundos, conseguido con unos valores en los parámetros hidden_layer_sizes, solver y alpha de 20, ‘lbfgs’ y 0.1 respectivamente. Datos agregados cada 2 horas La precisión máxima obtenida es del 74,95 % en un tiempo total de ejecución de 1,96 segundos, conseguido con unos valores en los parámetros hidden_layer_sizes, solver y alpha de 80, ‘lbfgs’ y 0.01 respectivamente. 5.5. Naïve Bayes Es un método de aprendizaje supervisado que se basa en aplicar el teorema de Bayes. Como particularidad de este predictor es que asume la independencia condicional entre cada par de variables dado el valor de la predicción, de ahí el término “Naïve” (ingenuo). Para este proyecto se ha utilizado Gaussian Naïve Bayes, definido como: 𝑃(𝑋𝑖| 𝑌) = 1 √2𝜋𝜎𝑦2 𝑒𝑥𝑝(−(𝑋𝑖− 𝜇𝑦)2 2𝜎𝑦2) (16) Donde 𝑋𝑖 es el valor de la variable i, 𝜇𝑦 𝑦 𝜎𝑦 son la media y desviación de la variable X asociada a la clase Y. El teorema de Bayes: 𝑃(𝑌|𝑋1,...,𝑋𝑛) = 𝑃(𝑌) 𝑃(𝑋1,...,𝑋𝑛|𝑌) 𝑃(𝑋1,...𝑋𝑛) (17) Donde 𝑃(𝑌|𝑋1,...,𝑋𝑛) es la probabilidad de que Y sea cierto sabiendo que son ciertos 𝑋1,...,𝑋𝑛, 𝑃(𝑌) la probabilidad de Y, 𝑃(𝑋1,...𝑋𝑛) la probabilidad de 𝑋1 𝑦 𝑋2 ...𝑦 𝑋𝑛. Y es la clase en la que se intenta clasificar un ejemplo y 𝑋𝑖 el valor que posee la variable i. 5.5.1. Datos de audio Con los datos de audio la probabilidad de cada clase es la misma, es decir, 0.16666, pero se fija para 4 clases a 0.17 y para las otras dos a 0.16, de forma que la probabilidad de todas sea muy similar. En este caso la normalización sí que es completamente indiferente ya que los porcentajes conseguidos con todas las pruebas son idénticos. Datos Mezclados:
Análisis de datos útiles en predicción de trastornos emocionales 58 Utilizando los datos con todos los ejemplos los resultados son muy pobres en cuanto a tasa de acierto, alrededor del 45%, con tiempos por debajo de las décimas de segundo. El uso de un conjunto de variables más reducido beneficia al resultado, siendo mejor cuando se eliminan tanto las variables menos significativas como las variables correlacionadas, llegando al 45,73% de acierto. Eliminando los outliers, el porcentaje mejora llegando al 74%, nuevamente con tiempos muy bajos. Esta vez, a diferencia de lo que sucedía con los datos sin eliminar outliers, cuando se eliminan las variables menos significativas el resultado empeora un 4%, mientras que eliminar sólo las variables correlacionadas no modifica el porcentaje de acierto. Con todo esto se puede decir que el mejor resultado sería de un 74,4% de aciertos, conseguido con los datos sin outliers, y eliminando las variables correlacionadas. Datos Alemán: Utilizando los datos sin eliminar outliers los resultados nuevamente no son muy buenos, pero sí que mejoran un poco a los porcentajes obtenidos utilizando los datos mezclados. En este caso el acierto ronda el 60-63%, siendo mejor cuando se eliminan las variables menos significativas, y empeorando cuando se eliminan las correlacionadas. En cuanto al tiempo de entrenamiento, nuevamente es ínfimo y siempre se encuentra por debajo de las décimas de segundo. Con los datos sin outliers hay un ligero incremento del porcentaje de acierto, alcanzando un 65%. El comportamiento con los diferentes conjuntos de variables es idéntico a lo que sucede al utilizar todos los ejemplos, y por ello lo más conveniente sería eliminar las variables menos significativas. En resumen, el mejor resultado se consigue eliminando los outliers y las variables menos significativas, para alcanzar así un 65,38% de acierto. Datos Español: Utilizando los datos con todos los ejemplos el porcentaje de acierto es bastante mejor que con los datos mezclados y en alemán, llegando al 83%. Este resultado se consigue eliminando las variables correlacionadas, ya que al eliminar las menos significativas el porcentaje se reduce al 81%. El tiempo de entrenamiento se encuentra por debajo de las décimas de segundo en todos los casos. Utilizando los datos tras eliminar los outliers, los resultados continúan mejorando, alcanzando un 89% de acierto. Para conseguir dicho porcentaje es necesario, al igual que sucede al utilizar todos los ejemplos, eliminar las variables correlacionadas ya que al eliminar las variables menos significativas el porcentaje de acierto se reduce al 85%. Por lo tanto el mejor resultado es de un 89,86% de acierto, el cuál es obtenido al eliminar los outliers y las variables correlacionadas.
Análisis de datos útiles en predicción de trastornos emocionales 59 5.5.2. Datos de actividad Datos agregados cada 6 horas La precisión obtenida con los datos de actividad es del 67,72 %, siendo claramente la peor tasa de acierto conseguida. Datos agregados cada 2 horas La precisión obtenida es del 61,63 %.
60
Análisis de datos útiles en predicción de trastornos emocionales 61 6. Resultados 6.1. Datos de audio Analizados todos los algoritmos y los resultados, se procede a compararlos entre sí, tratando de justificar los valores obtenidos. Acierto y tiempo RFC GBC SVM MLP NB Mezclados 85,52% 1,89 segundos 85% 13 segundos 90,14% 1,67 segundos 90,28% 2 segundos 74,40% <0,1 segundos Alemán 74,26% 1,3 segundos 75,45% 7 segundos 83% 0,3 segundos 84,85% 1,5 segundos 65,38% <0,1 segundos Español 94% 2 segundos 91,56% 7,34 segundos 96,44% 0,33 segundos 96,56% 0,43 segundos 89,86% <0,1 segundos Figura 41. Tabla de porcentajes de acierto y tiempos de ejecución de cada algoritmo con los datos de audio. En los resultados de la Figura 41 se aprecia que el conjunto de datos que mejor porcentajes de éxito obtiene es el que contiene la información de los audios en español, seguido del que contiene la información de los audios en alemán y español, y en último lugar los datos de los audios alemanes. Si se tiene en cuenta los tamaños y heterogeneidad de los datos, estos resultados son sencillos de explicar ya que la cantidad de audios en español es significativamente mayor a la de los audios alemanes.Por ello este modelo es capaz de aprender mejor los patrones que puedan encontrarse en los datos. Además, los audios han sido grabados únicamente por dos personas, por lo que las diferencias de voz entre distintas personas son menos apreciables. En los datos mezclados, a pesar de tener una mayor cantidad de ejemplos, existen audios de diversas personas lo que provoca que existan diferencias en las variables tanto por los idiomas como por las características de la voz; además los ejemplos en español y alemán se encuentran desbalanceados. En cuanto a los datos en alemán, aparte de tener una cantidad de ejemplos muy escasa, existe mucha variabilidad en ellos, dado que los audios han sido grabados por 10 personas; estos dos factores provocan, por lo tanto, ese decremento del porcentaje de acierto. Los distintos algoritmos utilizados presentan diferencias en el porcentaje de acierto y en el tiempo empleado para el entrenamiento, proporcionando mejores resultados SVM y MLP, con porcentajes muy similares, aunque con tiempos algo inferiores por parte de las SVM, lo que convierte a estos modelos en los más idóneos para la tarea de clasificar audios por estado de ánimo. Seguidamente se encuentran el RFC y el GBC, cuyos porcentajes de acierto son algo más reducidos pero similares entre sí. Sin embargo en el tiempo de entrenamiento sí que se encuentran grandes diferencias entre estos algoritmos, pues el RFC requiere entre 1-2 segundos mientras que el GBC es el más
Análisis de datos útiles en predicción de trastornos emocionales 62 lento de todos, empleando como mínimo unos 7 segundos. Por último el algoritmo que peores porcentajes de acierto consigue sería Naïve Bayes, a pesar de ser el más rápido. Normalización RFC GBC SVM MLP NB Mezclados Norma l2 Z-Score MinMax Z-Score Indiferente Alemán Z-Score MinMax MinMax Z-Score Indiferente Español MinMax Norma l2 MinMax Z-Score Indiferente Figura 42. Tabla con las normalizaciones utilizadas por algoritmo en los datos de audio De las cuatro normalizaciones probadas, se puede observar en la Figura 42 que las mejores son Z-Score y MinMax. Por lo tanto, lo más adecuado es normalizar con MinMax cuando se utilice SVM y con Z-Score cuando se utilice el MLP Conjunto de variables RFC GBC SVM MLP NB Mezclados Sin variables correlacionadas Todas las variables Sin variables correlacionadas ni poco significativas Sin variables correlacionadas ni poco significativas Sin variables correlacionadas Alemán Sin variables correlacionadas Sin variables poco significativas Sin variables poco significativas Sin variables poco significativas Sin variables poco significativas Español Sin variables poco significativas Sin variables poco significativas Sin variables correlacionadas ni poco significativas Sin variables correlacionadas ni poco significativas Sin variables correlacionadas Figura 43. Tabla del conjunto de variables óptimo de cada algoritmo en los datos de audio Por último, en cuanto al conjunto de variables óptimo, se observa en la Figura 43 que los mejores son aquellos en los que se suprimen las variables menos significativas, y los que, además de éstas, eliminan las variables correlacionadas. Se detecta que en los casos en los que no se eliminan variables no significativas ni correlacionadas, son en los audios alemanes. Esto puede deberse al hecho de poseer una menor cantidad de datos, ya que la redundancia presente en variables correlacionadas ayudaba al modelo a predecir con mayor exactitud. Sin embargo, en los datos de español y mezclados, con los modelos cuyas predicciones son más correctas, lo que es óptimo es eliminar tanto variables poco significativas como variables correlacionadas. Con esto se puede afirmar que lo más adecuado sería eliminar tanto las variables no significativas y las correlacionadas ya que, si se contara con una mayor cantidad de datos de los audios alemanes, esas redundancia en los datos no sería necesaria y, por lo tanto, utilizará los mismos conjuntos de variables que utilizan el resto de los datos.
Análisis de datos útiles en predicción de trastornos emocionales 63 Comparados los resultados obtenidos por los diferentes algoritmos, se procede a comparar con otros trabajos que han hecho uso de las mismas bases de datos para comprobar así la validez y posible mejora de los modelos. De los trabajos comentados en el capítulo 2, tres de ellos utilizan la base de datos Berlín Emotional Database y uno de esos tres utiliza también la Emotional Speech Synthesis Database. El trabajo Speech Emotion Recognition: Methods and Cases Study es el único que hace uso de la base de audios en español, consiguiendo un 90,05% de aciertos utilizando una Recurrent Neuronal Networks (RNN), mientras que en este estudio se consigue aumentar ese porcentaje de acierto usando Support Vector Machine (SVM) o MultiLayer Perceptron (MLP), hasta un 96%. Este estudio junto con los trabajos Statistical Evaluation of Speech Features for Emotions Recognition y Speech Emotion Classification Using SVM and MLP on prosodic and voice quality features utilizan la Berlín Emotional Database, consiguiendo unos porcentajes de acierto de 75,90% con Multivariable Linear Regression (MLR) para el primer trabajo; 83,17% (clasificación en 7 clases) y 95% (clasificación en 2 clases) con MultiLayer Perceptron (MLP) para el segundo, y 76,82% con Support Vector Machine (SVM) y 78,60% con MultiLayer Perceptron (MLP) para el tercero. Con estos resultados se comprueba, al igual que sucedía en este estudio, que los algoritmos SVM y MLP son los que mejores resultados presentan para la clasificación de emociones en el habla. Además, vemos que los mejores porcentajes obtenidos para los datos de audios en alemán son de un 83% para SVM y de un 84,85% para MLP por lo que, en general, mejoran los resultados posteriores; aunque se observa que al agregar los datos en dos clases el porcentaje de acierto crece significativamente. Como se ha podido observar, los resultados obtenidos al clasificar el estado de ánimo con audios son bastante satisfactorios. Sin embargo, el objetivo de este estudio es determinar si un paciente va a sufrir un episodio de manía o depresión. Con esta finalidad se podría realizar, al igual que se procede en otros trabajos, una agrupación de emociones que reflejen si el paciente se encuentra en un estado de euforia o manía, en un estado neutral, o en un estado de depresión. El estado de euforia se corresponde con la alegría, la ira y el miedo, mientras que la depresión se corresponde con la tristeza y el asco (clasificación similar a la utilizada en trabajos como Context-Independent Multilingual Emotion Recognition from Speech Signals). Para comparar los resultados de esa agrupación se escogen los modelos SVM y MLP con la base de audios españoles ya que proporcionan los mejores porcentajes, y se comparan las matrices de confusión obtenidas para ambas posibilidades. En estas matrices se situan en el eje x las clases predichas por el algoritmo, mientras que en el eje y se encuentra la clase real a la que pertenece el ejemplo; así cuando un valor se encuentra en la diagonal es debido a que se produce un acierto. Por lo tanto el objetivo es que los todos los valores distintos de 0 se encuentren la diagonal de la matriz. Cuanto mayor sea el número de ejemplos en una casilla más azul será esta. Dado que el número de ejemplos de cada clase es diferente se muestra también la matriz de porcentajes, de forma que las puede verse que clase se clasifica mejor con solo mirar la diagonal principal. En la Figura
Análisis de datos útiles en predicción de trastornos emocionales 64 44 se muestran los resultados de las SVM, en los que se observa que las clases que más confunde son Alegría con Ira y Miedo, mientras que Neutral y Tristeza es capaz de diferenciarlas con claridad. Figura 44. Matriz de confusión de los datos de audio con SVM Los resultados que se muestran en la Figura 45, relativos a la clasificación con MLP, son realmente similares a los de SVM y nuevamente la clase con la que se encuentra más problemas es con Alegría. Figura 45. Matriz de confusión de los datos de audio con MLP Si ahora se compara con los resultados de agregar las clases, Figura 46, los porcentajes de acierto no mejoran significativamente ya que eran muy altos, pero sí muestra que podría ser una aproximación para detectar episodios en personas con trastorno bipolar.
Análisis de datos útiles en predicción de trastornos emocionales 65 Figura 46. Matrices de confusión de los datos de audio con SVM (izquierda) y MLP (derecha) con datos agregados 6.2. Datos de actividad física Una vez se han aplicado a los datos de actividad todos los algoritmos y se han obtenido los mejores resultados con cada uno, además de sus respectivos tiempos, se procede a realizar una comparación entre todos ellos para ver cuál es el óptimo. La Figuras 47 y 48 muestran una comparativa de los porcentajes de acierto y de tiempo de ejecución de cada algoritmo. RFC GBC SVM MLP NB MEDIA Agregación 6 horas 76,36 % 73,90 % 75,32 % 76,82 % 67,72 % 74,02 % Agregación 2 horas 70,18 % 69,72 % 80,36 % 74,95 % 61,63 % 70,82 % MEDIA 73,14 % 71,75 % 77,76 % 75,88 % 64,53 % Figura 47. Tabla de porcentajes de acierto de cada algoritmo con los datos de actividad física. RFC GBC SVM MLP MEDIA Agregación 6 horas 1,09 0,74 0,05 0,7 0,17 Agregación 2 horas 0,65 0,89 0,16 1,96 0,42 MEDIA 0,81 0,81 0,08 1,03 Figura 48.Tabla de tiempos de ejecución de cada algoritmo con los datos de actividad física Como se esperaba, las pruebas de entrenamiento con el conjunto de datos donde la actividad está agregada en periodos de dos horas tiene en general peor tasa de acierto que con los datos donde la actividad está agregada en periodos de seis horas, con un porcentaje de acierto medio del 70,82 % en el primer caso y del 74,41 % en el segundo.
Análisis de datos útiles en predicción de trastornos emocionales 72 relojes y bombillas inteligentes, y aplicaciones como Google Fit o servicios en la nube. Es interesante remarcar que la integración con la aplicación Google Fit permitirá la obtención de los datos de sueño a través de ella. Profundizando en la configuración del monitoreo de sueño existen algunas opciones referidas a la medición de las distintas variables, como la activación de un retraso en el monitoreo de sueño para evitar el pico inicial, o el modo de detección de las distintas fases del sueño, que puede ser configurado para realizarlo mediante el acelerómetro del teléfono o mediante sonar. El sonar se basa en el uso de los altavoces y el micrófono del teléfono, para no ser necesario tener un dispositivo (smartphone o wearable) en la cama a la hora de dormir, además de que también proporcionará un seguimiento de la respiración durante el sueño. Continuando con el tema de los ajustes del sueño, la aplicación contempla el caso en el que el usuario duerme acompañado de otra persona. Para ello implementa una opción que, mediante la sincronización con otro dispositivo que mida desde el otro lado de la cama, permite filtrar las interferencias causadas por la otra persona. Como se ha comentado antes la aplicación ofrece la posibilidad de sincronizarla con un reloj inteligente; esto brinda algunas posibilidades extras como el monitoreo de la frecuencia cardiaca y el pulso oximétrico (uso del oxímetro para ver que tu cuerpo mantiene una respiración y niveles de oxígeno saludables durante el sueño). ● Sleep Better: Aplicación gratuita disponible en Android y Iphone, aunque se puede ampliar a la versión premium por 1,99€, que ofrece algunas funcionalidades extras. Con la versión gratuita la aplicación permite detectar fases en las que el usuario permanece despierto, en sueño ligero o profundo; y añadir una valoración subjetiva del sueño, mediante un sistema de puntaje basado en emoticonos que van desde muy bien hasta muy mal. Una serie de opciones permiten determinar el contexto del sueño, es decir, actividad realizada en el día, si ha sido un día estresante, si la cama no es la del usuario… A diferencia de la aplicación anterior, ésta no permite sincronizarla con otros dispositivos para obtener mejores resultados. • Sleep Tracker: Aplicación gratuita, con una versión de pago con valor de 0,99€ para quitar los anuncios. Se ha utilizado la aplicación para monitorizar algunas noches, pero el resultado no es correcto y, además, tiene varios errores que provocan el cierre de esta. ● Prime Nap: Aplicación gratuita disponible en Android, con una versión de pago de 2,99€. Para monitorizar el sueño, el smartphone debe colocarse en la cama para detectar el movimiento y de esta forma determinar en qué fase del sueño se encuentra el usuario. Está medición proporciona distintas variables como el tiempo total de la grabación, el tiempo despierto y dormido (separado además en fase REM, ligero y profundo), los ciclos de sueño que tiene el usuario y, opcionalmente, se pueden añadir una descripción de
Análisis de datos útiles en predicción de trastornos emocionales 73 varias variables de los diversos estados de sueño que haya tenido el usuario durante el tiempo que ha estado dormido. Esos datos se disponen de forma gráfica en un apartado de la aplicación, pero ésta permite exportar los datos en un archivo csv que contiene las siguientes variables: 1. Date - Fecha del sueño 2. Activities - Actividades realizadas en el día 3. Duration - Duración total de la monitorización 4. Duration(sec) - Duración total de la monitorización en segundos 5. Naps - Siestas 6. Times - Hora de inicio y fin de la grabación 7. Comments - Comentarios acerca de la grabación 8. Cycles - Ciclos de sueño durante la monitorización 9. Dreams - Sueños 10. REM - Tiempo en fase REM 11. REM(sec] - Tiempo en fase REM en segundos 12. Light - Tiempo en sueño ligero 13. Light(sec) - Tiempo en sueño ligero en segundos 14. Deep - Tiempo en sueño profundo 15. Deep(sec) - Tiempo en sueño profundo en segundos 16. Dream Reports - Reportes sobre los sueños En cuanto a opciones de configuración, la aplicación no permite modificar casi nada, aunque en la pantalla inicial proporciona 5 opciones interesantes: vigilar la batería durante la monitorización, establecer la relación de que teléfono apagado es igual a dormir, monitorizar automáticamente, grabar ruidos y poner música para dormir. Comentar que al realizar diversas pruebas con la aplicación se ha comprobado que las mediciones no eran muy precisas, y en varias ocasiones la aplicación se queda colgada. Con estas consideraciones se determina que está aplicación no es adecuada para tomar los datos de sueño que se utilizarán en el estudio. ● SleepTime: Aplicación gratuita que goza de una versión premium, que puede contratarse por 9,99€ al mes o 29,99€ al año. Esta versión premium incluye informes de sueño para imprimir e informes sobre el ritmo cardiaco durante el sueño. La aplicación no permite obtener los informes de sueño desde la versión gratuita, pero de forma gráfica muestra: la duración de la monitorización, hora de acostarse y levantarse, eficiencia del sueño como un porcentaje, porcentaje de tiempo del sueño que se está despierto, porcentaje del sueño que es ligero y porcentaje del tiempo que es profundo. Para monitorizar el sueño la aplicación informa de que es necesario colocar el móvil en la cama junto a la almohada, pero la medición sería correcta situando el dispositivo en una mesilla de altura similar a la de la cama.
74
Análisis de datos útiles en predicción de trastornos emocionales 75 Anexo II: Código de Praat Script para crear el csv de los audios alemanes en Praat, ScriptCrearCsv.praat: procedure extraerAudios: nameOfPath$ if nameOfPath$ = "Alegria" etiqueta = 0 elsif nameOfPath$ = "Tristeza" etiqueta = 1 elsif nameOfPath$ = "Miedo" etiqueta = 2 elsif nameOfPath$ = "Asco" etiqueta = 3 elsif nameOfPath$ = "Ira" etiqueta = 4 elsif nameOfPath$ = "Neutral" etiqueta = 5 endif name$ = audiosPath$ + "/" + nameOfPath$ + "/" + "*.wav" # name$ = audiosPath$ + "/" + nameOfPath$ + "/" + "Espanol*.wav" Create Strings as file list: "list", name$ numberOfSongs = Get number of strings for counter from 1 to numberOfSongs select Strings list name$ = Get string... counter name$ = audiosPath$ + "/" + nameOfPath$ + "/" + name$ sound=Read from file: (name$) include ObtenerVariables.praat appendFileLine:nameOfResultFile$,meanAmplitude,",",minAmplitude,",",maxAmplitude,",",stdAmplitude,",", rangeAmplitude,",",meanPitch,",",minPitch,",",maxPitch,",",stdPitch,",",rangePitch,",",meanHarmonicity,"," ,minHarmonicity,",",maxHarmonicity,",",stdHarmonicity,",",rangeHarmonicity,",",minIntensity,",",maxIntens ity,",",quantileIntensity,",",meanIntensity,",",stdIntensity,",",rangeIntensity,",",speakingrate,",",articulationra te,",",meanEnergy,",",stdEnergy,",",minEnergy,",",maxEnergy,",",rangeEnergy,",",meanMFCC1,",",stdMFC C1,",",minMFCC1,",",maxMFCC1,",",rangeMFCC1,",",meanMFCC2,",",stdMFCC2,",",minMFCC2,",",max MFCC2,",",rangeMFCC2,",",meanMFCC3,",",stdMFCC3,",",minMFCC3,",",maxMFCC3,",",rangeMFCC3, ",",meanMFCC4,",",stdMFCC4,",",minMFCC4,",",maxMFCC4,",",rangeMFCC4,",",meanMFCC5,",",stdMF CC5,",",minMFCC5,",",maxMFCC5,",",rangeMFCC5,",",meanMFCC6,",",stdMFCC6,",",minMFCC6,",",m axMFCC6,",",rangeMFCC6,",",meanMFCC7,",",stdMFCC7,",",minMFCC7,",",maxMFCC7,",",rangeMFCC 7,",",meanMFCC8,",",stdMFCC8,",",minMFCC8,",",maxMFCC8,",",rangeMFCC8,",",meanMFCC9,",",std MFCC9,",",minMFCC9,",",maxMFCC9,",",rangeMFCC9,",",meanMFCC10,",",stdMFCC10,",",minMFCC1 0,",",maxMFCC10,",",rangeMFCC10,",",meanMFCC11,",",stdMFCC11,",",minMFCC11,",",maxMFCC11,", ",rangeMFCC11,",",meanMFCC12,",",stdMFCC12,",",minMFCC12,",",maxMFCC12,",",rangeMFCC12,",", minFormant1,",",maxFormant1,",",quantileFormant1,",",meanFormant1,",",stdFormant1,",",rangeFormant1 ,",",minFormant2,",",maxFormant2,",",quantileFormant2,",",meanFormant2,",",stdFormant2,",",rangeForm ant2,",",minFormant3,",",maxFormant3,",",quantileFormant3,",",meanFormant3,",",stdFormant3,",",rangeF ormant3,",",minFormant4,",",maxFormant4,",",quantileFormant4,",",meanFormant4,",",stdFormant4,",",ran geFormant4,",",minFormant5,",",maxFormant5,",",quantileFormant5,",",meanFormant5,",",stdFormant5,"," ,rangeFormant5,",",etiqueta endfor select all Remove endproc deleteFile: nameOfResultFile$ appendFileLine:nameOfResultFile$,"meanAmplitude,minAmplitude,maxAmplitude,stdAmplitude,rangeAmplitude,meanP itch,minPitch,maxPitch,stdPitch,rangePitch,meanHarmonicity,minHarmonicity,maxHarmonicity,stdHarmonicity,rangeH armonicity,minIntensity,maxIntensity,quantileIntensity,meanIntensity,stdIntensity,rangeIntensity,speakingRate,articulati onRate,meanEnergy,stdEnergy,minEnergy,maxEnergy,rangeEnergy,meanMFCC1,stdMFCC1,minMFCC1,maxMFCC1,r angeMFCC1,meanMFCC2,stdMFCC2,minMFCC2,maxMFCC2,rangeMFCC2,meanMFCC3,stdMFCC3,minMFCC3,ma xMFCC3,rangeMFCC3,meanMFCC4,stdMFCC4,minMFCC4,maxMFCC4,rangeMFCC4,meanMFCC5,stdMFCC5,min MFCC5,maxMFCC5,rangeMFCC5,meanMFCC6,stdMFCC6,minMFCC6,maxMFCC6,rangeMFCC6,meanMFCC7,std MFCC7,minMFCC7,maxMFCC7,rangeMFCC7,meanMFCC8,stdMFCC8,minMFCC8,maxMFCC8,rangeMFCC8,mean MFCC9,stdMFCC9,minMFCC9,maxMFCC9,rangeMFCC9,meanMFCC10,stdMFCC10,minMFCC10,maxMFCC10,ran geMFCC10,meanMFCC11,stdMFCC11,minMFCC11,maxMFCC11,rangeMFCC11,meanMFCC12,stdMFCC12,minMF CC12,maxMFCC12,rangeMFCC12,minFormant1,maxFormant1,quantileFormant1,meanFormant1,stdFormant1,rangeF ormant1,minFormant2,maxFormant2,quantileFormant2,meanFormant2,stdFormant2,rangeFormant2,minFormant3,ma xFormant3,quantileFormant3,meanFormant3,stdFormant3,rangeFormant3,minFormant4,maxFormant4,quantileForma nt4,meanFormant4,stdFormant4,rangeFormant4,minFormant5,maxFormant5,quantileFormant5,meanFormant5,stdFor mant5,rangeFormant5,Result" @extraerAudios: "Miedo" @extraerAudios: "Asco" @extraerAudios: "Ira"
Análisis de datos útiles en predicción de trastornos emocionales 76 @extraerAudios: "Neutral" @extraerAudios: "Alegria" @extraerAudios: "Tristeza" Script para mover los audios españoles a los directorios adecuados en Praat, TrasnformarAudiosEspañol.praat: form Filename and number of songs sentence audiosSourcePath ../../Universidad/TFG/S0329/INTER1SP_01 sentence audiosDestPath ./Audios endform procedure nombreArchivos: direct$ if direct$ = "sessa001" || direct$ = "sessa002" .nombre$ = "EspanolIra" .destiny$ = "Ira" elsif direct$ = "sessf001" || direct$ = "sessf002" .nombre$ = "EspanolMiedo" .destiny$ = "Miedo" elsif direct$ = "sessd001" || direct$ = "sessd002" .nombre$ = "EspanolAsco" .destiny$ = "Asco" elsif direct$ = "sesss001" || direct$ = "sesss002" .nombre$ = "EspanolTristeza" .destiny$ = "Tristeza" elsif direct$ = "sessj001" || direct$ = "sessj002" .nombre$ = "EspanolAlegria" .destiny$ = "Alegria" elsif direct$ = "sessn001" || direct$ = "sessn002" .nombre$ = "EspanolNeutral" .destiny$ = "Neutral" elsif direct$ = "sessh001" .nombre$ = "EspanolNeutralAlto" .destiny$ = "Neutral" elsif direct$ = "sessl001" .nombre$ = "EspanolNeutralBajo" .destiny$ = "Neutral" elsif direct$ = "sessw001" .nombre$ = "EspanolNeutralLento" .destiny$ = "Neutral" elsif direct$ = "sessz001" .nombre$ = "EspanolNeutralRapido" .destiny$ = "Neutral" endif endproc procedure transformarAudios: nameOfPath$ directory$ = audiosSourcePath$ + "/" + nameOfPath$ + "/*" directoryList = Create Strings as directory list: "directoryList", directory$ numberOfDirectories = Get number of strings for i from 1 to numberOfDirectories select directoryList nameOfDirectory$ = Get string... i @nombreArchivos: nameOfDirectory$ nameOfFiles$ = nombreArchivos.nombre$ nameOfDestPath$ = nombreArchivos.destiny$ nameOfDirectory$ = audiosSourcePath$ + "/" + nameOfPath$ + "/" + nameOfDirectory$ name$ = nameOfDirectory$ + "/" + "*.l16" Create Strings as file list: "list", name$ numberOfSongs = Get number of strings for counter from 1 to numberOfSongs select Strings list name$ = Get string... counter name$ = nameOfDirectory$ + "/" + name$ sound=Read Sound from raw 16-bit Little Endian file: (name$) destPath$ = audiosDestPath$ + "/" + nameOfDestPath$ + "/" + nameOfFiles$ + string$ (counter) + ".wav" select sound Save as WAV file: (destPath$) endfor endfor endproc @transformarAudios: "f" @transformarAudios: "m"
Análisis de datos útiles en predicción de trastornos emocionales 77 Script para obtener las variables necesarias de los audios, ObtenerVariables.praat: meanAmplitude = Get mean: 0, 0.0, 0.0 minAmplitude = Get minimum: 0.0, 0.0, "Sinc70" maxAmplitude = Get maximum: 0.0, 0.0, "Sinc70" stdAmplitude = Get standard deviation: 0, 0.0, 0.0 rangeAmplitude = maxAmplitude - minAmplitude select sound To Pitch: 0.0, 75.0, 600.0 meanPitch = Get mean: 0.0, 0.0, "Hertz" minPitch = Get minimum: 0.0, 0.0, "Hertz", "Parabolic" maxPitch = Get maximum: 0.0, 0.0, "Hertz", "Parabolic" stdPitch = Get standard deviation: 0.0, 0.0, "Hertz" rangePitch = maxPitch - minPitch select sound To Harmonicity (ac): 0.01,75.0,0.1,4.5 meanHarmonicity = Get mean: 0.0, 0.0 minHarmonicity = Get minimum: 0.0, 0.0, "Parabolic" maxHarmonicity = Get maximum: 0.0, 0.0, "Parabolic" stdHarmonicity = Get standard deviation: 0.0, 0.0 rangeHarmonicity = maxHarmonicity - minHarmonicity select sound To Intensity: 100.0, 0.0, 1 minIntensity = Get minimum: 0.0, 0.0, "Parabolic" maxIntensity = Get maximum: 0.0, 0.0, "Parabolic" quantileIntensity = Get quantile: 0.0, 0.0, 0.5 meanIntensity = Get mean: 0.0, 0.0, "dB" stdIntensity = Get standard deviation: 0.0, 0.0 rangeIntensity = maxIntensity - minIntensity select sound include CalculoSpeechRate.praat select sound To MFCC: 12, 0.015, 0.005, 100.0, 100.0, 0.0 To TableOfReal: 1 meanEnergy = Get column mean (label): "c0" stdEnergy = Get column stdev (label): "c0" meanMFCC1 = Get column mean (label): "c1" stdMFCC1 = Get column stdev (label): "c1" meanMFCC2 = Get column mean (label): "c2" stdMFCC2 = Get column stdev (label): "c2" meanMFCC3 = Get column mean (label): "c3" stdMFCC3 = Get column stdev (label): "c3" meanMFCC4 = Get column mean (label): "c4" stdMFCC4 = Get column stdev (label): "c4" meanMFCC5 = Get column mean (label): "c5" stdMFCC5 = Get column stdev (label): "c5" meanMFCC6 = Get column mean (label): "c6" stdMFCC6 = Get column stdev (label): "c6" meanMFCC7 = Get column mean (label): "c7" stdMFCC7 = Get column stdev (label): "c7" meanMFCC8 = Get column mean (label): "c8" stdMFCC8 = Get column stdev (label): "c8" meanMFCC9 = Get column mean (label): "c9" stdMFCC9 = Get column stdev (label): "c9" meanMFCC10 = Get column mean (label): "c10" stdMFCC10 = Get column stdev (label): "c10" meanMFCC11 = Get column mean (label): "c11" stdMFCC11 = Get column stdev (label): "c11" meanMFCC12 = Get column mean (label): "c12" stdMFCC12 = Get column stdev (label): "c12" To Table: "rowLabel" maxEnergy = Get maximum: "c0" minEnergy = Get minimum: "c0" rangeEnergy = maxEnergy - minEnergy maxMFCC1 = Get maximum: "c1" minMFCC1 = Get minimum: "c1" rangeMFCC1 = maxMFCC1 - minMFCC1 maxMFCC2 = Get maximum: "c2" minMFCC2 = Get minimum: "c2" rangeMFCC2 = maxMFCC2 - minMFCC2 maxMFCC3 = Get maximum: "c3" minMFCC3 = Get minimum: "c3" rangeMFCC3 = maxMFCC3 - minMFCC3 maxMFCC4 = Get maximum: "c4" minMFCC4 = Get minimum: "c4" rangeMFCC4 = maxMFCC4 - minMFCC4 maxMFCC5 = Get maximum: "c5" minMFCC5 = Get minimum: "c5"
Análisis de datos útiles en predicción de trastornos emocionales 78 rangeMFCC5 = maxMFCC5 - minMFCC5 maxMFCC6 = Get maximum: "c6" minMFCC6 = Get minimum: "c6" rangeMFCC6 = maxMFCC6 - minMFCC6 maxMFCC7 = Get maximum: "c7" minMFCC7 = Get minimum: "c7" rangeMFCC7 = maxMFCC7 - minMFCC7 maxMFCC8 = Get maximum: "c8" minMFCC8 = Get minimum: "c8" rangeMFCC8 = maxMFCC8 - minMFCC8 maxMFCC9 = Get maximum: "c9" minMFCC9 = Get minimum: "c9" rangeMFCC9 = maxMFCC9 - minMFCC9 maxMFCC10 = Get maximum: "c10" minMFCC10 = Get minimum: "c10" rangeMFCC10 = maxMFCC10 - minMFCC10 maxMFCC11 = Get maximum: "c11" minMFCC11 = Get minimum: "c11" rangeMFCC11 = maxMFCC11 - minMFCC11 maxMFCC12 = Get maximum: "c12" minMFCC12 = Get minimum: "c12" rangeMFCC12 = maxMFCC12 - minMFCC12 select sound To Formant (burg): 0.0, 5.0, 5500.0, 0.025, 50.0 minFormant1 = Get minimum: 1, 0.0, 0.0, "hertz", "Parabolic" maxFormant1 = Get maximum: 1, 0.0, 0.0, "hertz", "Parabolic" quantileFormant1 = Get quantile: 1, 0.0, 0.0, "hertz", 0.5 meanFormant1 = Get mean: 1, 0.0, 0.0, "hertz" rangeFormant1 = maxFormant1 - minFormant1 stdFormant1 = Get standard deviation: 1, 0.0, 0.0, "hertz" minFormant2 = Get minimum: 2, 0.0, 0.0, "hertz", "Parabolic" maxFormant2 = Get maximum: 2, 0.0, 0.0, "hertz", "Parabolic" quantileFormant2 = Get quantile: 2, 0.0, 0.0, "hertz", 0.5 meanFormant2 = Get mean: 2, 0.0, 0.0, "hertz" stdFormant2 = Get standard deviation: 2, 0.0, 0.0, "hertz" rangeFormant2 = maxFormant2 - minFormant2 minFormant3 = Get minimum: 3, 0.0, 0.0, "hertz", "Parabolic" maxFormant3 = Get maximum: 3, 0.0, 0.0, "hertz", "Parabolic" quantileFormant3 = Get quantile: 3, 0.0, 0.0, "hertz", 0.5 meanFormant3 = Get mean: 3, 0.0, 0.0, "hertz" stdFormant3 = Get standard deviation: 3, 0.0, 0.0, "hertz" rangeFormant3 = maxFormant3 - minFormant3 minFormant4 = Get minimum: 4, 0.0, 0.0, "hertz", "Parabolic" maxFormant4 = Get maximum: 4, 0.0, 0.0, "hertz", "Parabolic" quantileFormant4 = Get quantile: 4, 0.0, 0.0, "hertz", 0.5 meanFormant4 = Get mean: 4, 0.0, 0.0, "hertz" stdFormant4 = Get standard deviation: 4, 0.0, 0.0, "hertz" rangeFormant4 = maxFormant4 - minFormant4 minFormant5 = Get minimum: 5, 0.0, 0.0, "hertz", "Parabolic" maxFormant5 = Get maximum: 5, 0.0, 0.0, "hertz", "Parabolic" quantileFormant5 = Get quantile: 5, 0.0, 0.0, "hertz", 0.5 meanFormant5 = Get mean: 5, 0.0, 0.0, "hertz" stdFormant5 = Get standard deviation: 5, 0.0, 0.0, "hertz" rangeFormant5 = maxFormant5 - minFormant5
Análisis de datos útiles en predicción de trastornos emocionales 79 Script para transformar audios sin etiquetar, TransformarAudio.praat: form Filename and number of songs sentence nameOfPath ./Ejemplos/ sentence nameOfResultFile sonido.csv endform deleteFile: nameOfResultFile$ appendFileLine:nameOfResultFile$,"name,meanAmplitude,minAmplitude,maxAmplitude,stdAmplitude,rangeAmplitude, meanPitch,minPitch,maxPitch,stdPitch,rangePitch,meanHarmonicity,minHarmonicity,maxHarmonicity,stdHarmonicity, rangeHarmonicity,minIntensity,maxIntensity,quantileIntensity,meanIntensity,stdIntensity,rangeIntensity,speakingRate,ar ticulationRate,meanEnergy,stdEnergy,minEnergy,maxEnergy,rangeEnergy,meanMFCC1,stdMFCC1,minMFCC1,maxM FCC1,rangeMFCC1,meanMFCC2,stdMFCC2,minMFCC2,maxMFCC2,rangeMFCC2,meanMFCC3,stdMFCC3,minMF CC3,maxMFCC3,rangeMFCC3,meanMFCC4,stdMFCC4,minMFCC4,maxMFCC4,rangeMFCC4,meanMFCC5,stdMFC C5,minMFCC5,maxMFCC5,rangeMFCC5,meanMFCC6,stdMFCC6,minMFCC6,maxMFCC6,rangeMFCC6,meanMFC C7,stdMFCC7,minMFCC7,maxMFCC7,rangeMFCC7,meanMFCC8,stdMFCC8,minMFCC8,maxMFCC8,rangeMFCC8 ,meanMFCC9,stdMFCC9,minMFCC9,maxMFCC9,rangeMFCC9,meanMFCC10,stdMFCC10,minMFCC10,maxMFCC1 0,rangeMFCC10,meanMFCC11,stdMFCC11,minMFCC11,maxMFCC11,rangeMFCC11,meanMFCC12,stdMFCC12,mi nMFCC12,maxMFCC12,rangeMFCC12,minFormant1,maxFormant1,quantileFormant1,meanFormant1,stdFormant1,ra ngeFormant1,minFormant2,maxFormant2,quantileFormant2,meanFormant2,stdFormant2,rangeFormant2,minFormant 3,maxFormant3,quantileFormant3,meanFormant3,stdFormant3,rangeFormant3,minFormant4,maxFormant4,quantileF ormant4,meanFormant4,stdFormant4,rangeFormant4,minFormant5,maxFormant5,quantileFormant5,meanFormant5,st dFormant5,rangeFormant5" Create Strings as file list... list 'nameOfPath$'/*.wav numberOfFiles = Get number of strings for ifile to numberOfFiles select Strings list fileName$ = Get string... ifile path$ = nameOfPath$ + "/"+ fileName$ sound = Read from file: (path$) include ObtenerVariables.praat appendFileLine:nameOfResultFile$,fileName$,",",meanAmplitude,",",minAmplitude,",",maxAmplitude,",",stdAmplitude, ",",rangeAmplitude,",",meanPitch,",",minPitch,",",maxPitch,",",stdPitch,",",rangePitch,",",meanHarmonicity,",",minHar monicity,",",maxHarmonicity,",",stdHarmonicity,",",rangeHarmonicity,",",minIntensity,",",maxIntensity,",",quantileInte nsity,",",meanIntensity,",",stdIntensity,",",rangeIntensity,",",speakingrate,",",articulationrate,",",meanEnergy,",",stdEne rgy,",",minEnergy,",",maxEnergy,",",rangeEnergy,",",meanMFCC1,",",stdMFCC1,",",minMFCC1,",",maxMFCC1,",",r angeMFCC1,",",meanMFCC2,",",stdMFCC2,",",minMFCC2,",",maxMFCC2,",",rangeMFCC2,",",meanMFCC3,",",std MFCC3,",",minMFCC3,",",maxMFCC3,",",rangeMFCC3,",",meanMFCC4,",",stdMFCC4,",",minMFCC4,",",maxMFC C4,",",rangeMFCC4,",",meanMFCC5,",",stdMFCC5,",",minMFCC5,",",maxMFCC5,",",rangeMFCC5,",",meanMFCC6 ,",",stdMFCC6,",",minMFCC6,",",maxMFCC6,",",rangeMFCC6,",",meanMFCC7,",",stdMFCC7,",",minMFCC7,",",ma xMFCC7,",",rangeMFCC7,",",meanMFCC8,",",stdMFCC8,",",minMFCC8,",",maxMFCC8,",",rangeMFCC8,",",mean MFCC9,",",stdMFCC9,",",minMFCC9,",",maxMFCC9,",",rangeMFCC9,",",meanMFCC10,",",stdMFCC10,",",minMF CC10,",",maxMFCC10,",",rangeMFCC10,",",meanMFCC11,",",stdMFCC11,",",minMFCC11,",",maxMFCC11,",",rang eMFCC11,",",meanMFCC12,",",stdMFCC12,",",minMFCC12,",",maxMFCC12,",",rangeMFCC12,",",minFormant1,",", maxFormant1,",",quantileFormant1,",",meanFormant1,",",stdFormant1,",",rangeFormant1,",",minFormant2,",",maxFo rmant2,",",quantileFormant2,",",meanFormant2,",",stdFormant2,",",rangeFormant2,",",minFormant3,",",maxFormant3 ,",",quantileFormant3,",",meanFormant3,",",stdFormant3,",",rangeFormant3,",",minFormant4,",",maxFormant4,",",qu antileFormant4,",",meanFormant4,",",stdFormant4,",",rangeFormant4,",",minFormant5,",",maxFormant5,",",quantileF ormant5,",",meanFormant5,",",stdFormant5,",",rangeFormant5 endfor
Análisis de datos útiles en predicción de trastornos emocionales 80 Y el último script que calcula el speech rate, y cuya creación corresponde a Nivja de Jong and Ton Wempe [3]: # shorten variables silencedb = -25 #'silence_threshold' mindip = 2 #'minimum_dip_between_peaks' showtext = 1 #'keep_Soundfiles_and_Textgrids' minpause = 0.3 #'minimum_pause_duration' # print a single header line with column names and units #printline soundname, nsyll, npause, dur (s), phonationtime (s), speechrate (nsyll/dur), articulation rate (nsyll / phonationtime), ASD (speakingtime/nsyll) # read files #Create Strings as file list... list 'directory$'/*.wav #numberOfFiles = Get number of strings #for ifile to numberOfFiles # select Strings list # fileName$ = Get string... ifile # Read from file... 'directory$'/'fileName$' # use object ID soundname$ = selected$("Sound") soundid = selected("Sound") originaldur = Get total duration # allow non-zero starting time bt = Get starting time # Use intensity to get threshold To Intensity... 50 0 yes intid = selected("Intensity") start = Get time from frame number... 1 nframes = Get number of frames end = Get time from frame number... 'nframes' # estimate noise floor minint = Get minimum... 0 0 Parabolic # estimate noise max maxint = Get maximum... 0 0 Parabolic #get .99 quantile to get maximum (without influence of non-speech sound bursts) max99int = Get quantile... 0 0 0.99 # estimate Intensity threshold threshold = max99int + silencedb threshold2 = maxint - max99int threshold3 = silencedb - threshold2 if threshold < minint threshold = minint endif # get pauses (silences) and speakingtime To TextGrid (silences)... threshold3 minpause 0.1 silent sounding textgridid = selected("TextGrid") silencetierid = Extract tier... 1 silencetableid = Down to TableOfReal... sounding nsounding = Get number of rows npauses = 'nsounding' speakingtot = 0 for ipause from 1 to npauses beginsound = Get value... 'ipause' 1 endsound = Get value... 'ipause' 2 speakingdur = 'endsound' - 'beginsound' speakingtot = 'speakingdur' + 'speakingtot' endfor select 'intid' Down to Matrix matid = selected("Matrix") # Convert intensity to sound To Sound (slice)... 1 sndintid = selected("Sound")
Análisis de datos útiles en predicción de trastornos emocionales 81 # use total duration, not end time, to find out duration of intdur # in order to allow nonzero starting times. intdur = Get total duration intmax = Get maximum... 0 0 Parabolic # estimate peak positions (all peaks) To PointProcess (extrema)... Left yes no Sinc70 ppid = selected("PointProcess") numpeaks = Get number of points # fill array with time points for i from 1 to numpeaks t'i' = Get time from index... 'i' endfor # fill array with intensity values select 'sndintid' peakcount = 0 for i from 1 to numpeaks value = Get value at time... t'i' Cubic if value > threshold peakcount += 1 int'peakcount' = value timepeaks'peakcount' = t'i' endif endfor # fill array with valid peaks: only intensity values if preceding # dip in intensity is greater than mindip select 'intid' validpeakcount = 0 currenttime = timepeaks1 currentint = int1 for p to peakcount-1 following = p + 1 followingtime = timepeaks'following' dip = Get minimum... 'currenttime' 'followingtime' None diffint = abs(currentint - dip) if diffint > mindip validpeakcount += 1 validtime'validpeakcount' = timepeaks'p' endif currenttime = timepeaks'following' currentint = Get value at time... timepeaks'following' Cubic endfor # Look for only voiced parts select 'soundid' To Pitch (ac)... 0.02 30 4 no 0.03 0.25 0.01 0.35 0.25 450 # keep track of id of Pitch pitchid = selected("Pitch") voicedcount = 0 for i from 1 to validpeakcount querytime = validtime'i' select 'textgridid' whichinterval = Get interval at time... 1 'querytime' whichlabel$ = Get label of interval... 1 'whichinterval' select 'pitchid' value = Get value at time... 'querytime' Hertz Linear if value <> undefined if whichlabel$ = "sounding" voicedcount = voicedcount + 1 voicedpeak'voicedcount' = validtime'i' endif endif endfor # calculate time correction due to shift in time for Sound object versus