Full text
UNIVERSIDAD COMPLUTENSE DE MADRID FACULTAD DE INFORM´ ATICA Desarrollo de un sistema de predicci´ on de riesgo en seguros de autom´ oviles mediante t´ ecnicas de inteligencia artificial Autores: D´ amaso S´ anchez Arenas y Eduardo Rodr´ ıguez De Castro Zalo˜ na. Tutores: Jos´ e Ignacio Hidalgo P´ erez y ´ Oscar Garnica Alc´ azar. TRABAJO FIN DE GRADO Grado en Ingenier´ ıa Inform´ atica
1 Agradecimientos En primer lugar, agradecer a nuestros directores de proyecto Jos´e Ignacio y ´ Oscar, por darnos la oportunidad de realizar el proyecto con ellos y poder ofrecernos conocimiento en un mundo que es tan complejo y esta tan en auge como es la inteligencia artificial. Por haber estado continuamente disponibles para posibles dudas y por estar siempre a nuestra disposici´on. Fuera de lo acad´emico, agradecer el trato recibido el cual ha sido ejemplar y en muchas ocasiones nos ha servido como un gran impulso de motivaci´on. Tambi´en agradecer a la universidad, por habernos facilitado todas sus instalaciones a lo largo de estos a˜nos y por habernos ayudado en todo lo que ha estado a su alcance. Por otro lado, dar las gracias tanto a familiares como amigos que nos han estado ayudando durante un a˜no complicado para nosotros y que han sido capaces de animarnos a que sigamos adelante a pesar de los momentos duros.
2 Resumen Este trabajo de fin de grado consiste en el desarrollo de una herramienta para calcular mediante t´ecnicas de inteligencia artificial el riesgo que tienen nuevos clientes de sufrir un accidente en sus veh´ıculos. Principalmente, esta aplicaci´on inform´atica es una ayuda a las aseguradoras para intentar ajustar lo m´aximo posible los precios de los seguros. Las t´ecnicas utilizadas en este proyecto han sido las redes neuronales y el Random forest. Todo el proyecto ha sido implementado en Python, tanto la parte de la interfaz gr´afica, con la que conseguimos que el software tenga una visi´on sencilla y amena, como la parte donde se realizan predicciones. El software puede ser usado por dos distintos perfiles. Un perfil t´ecnico para personas expertas en esta ´area en el que pueden crear su propio modelo de predicci´on usando las caracter´ısticas (Features) que crean m´as oportunas y un perfil funcional para usuarios que no tienen tanto conocimiento acerca de estas tecnolog´ıas. Podr´an cargar un modelo ya creado y predecir en base a ´el. En este proyecto, se ha conseguido tener un producto con una interfaz que cumple perfectamente con las funcionalidades del software y en la parte del funcionamiento, tiene la capacidad de predecir riesgos gracias a las t´ecnicas de inteligencia artificial mencionadas anteriormente. Palabras clave: Software, inteligencia Artificial, riesgo, redes neuronales, Random forest, Python, predicciones.
3 Abstract This paper is aimed at the development of a tool that, through Artificial Intelligence, calculates new clients’ risk of suffering a vehicle accident. The objective of this software application is to support insurance companies in adjusting prices. For this project, neuronal networks and Random Forest techniques have been used. The whole project has been implemented in Python, the graphic interface, which allows a pleasant and simple usage of the application, and the predictor. Software is developed with two different user profiles in mind; a technical profile, for experts in this area who wish to create their own prediction model using those Features they consider the most appropriate, and a functional profile for users who don’t have a great knowledge on these technologies which will allow them to upload an already existent model and obtain predictions based on it. In this project, a product with an interface that perfectly fulfils the software functionalities has been achieved. Moreover, within the operational part of the project, the software has the capacity of predicting risks through Artificial Intelligence techniques. Keywords: Software, Artificial Intelligence, risk, neuronal networks, Random forest, Python, predictions.
´ Indice general 1. Introducci´on 5 1.1. Descripci´on del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2. Ideadelproyecto..................................... 5 1.3. Conclusi´on ........................................ 6 2. Planificaci´on del trabajo 7 3. Tecnolog´ıas utilizadas 9 3.1. EntornoWindows .................................... 9 3.2. Python .......................................... 9 4. Front-end de la aplicaci´on 12 4.1. Funcionalidad....................................... 15 4.2. Creaci´ondelmodelo ................................... 18 4.3. Cargadelmodelo..................................... 21 4.4. SolicitarRiesgo...................................... 23 5. Back-end de la aplicaci´on 27 5.1. RedesNeuronales..................................... 27 5.2. Randomforest ...................................... 29 5.3. Nuestraaplicaci´on .................................... 31 5.3.1. Lectura, limpieza y tratamiento de datos . . . . . . . . . . . . . . . . . . . 31 5.3.2. Clasificadores................................... 35 6. An´alisis de los resultados 39 7. Conclusiones 47 7.1. Utilidad .......................................... 47 7.2. FuturasVersiones..................................... 47 7.3. Valoraci´ondelproyecto ................................. 48 8. Introduction 49 8.1. Description of the problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 8.2. Ideaoftheproject .................................... 49 8.3. Conclusion ........................................ 50 9. Work Planning 51 10.Conclusions 52 10.1.Utility........................................... 52 10.2.FutureVersions...................................... 52 10.3.AssessmentoftheProject................................ 53 11.Contribuci´on de cada miembro 54 Bibliograf´ıa 56 4
Cap´ıtulo 1 Introducci´on 1.1. Descripci´on del problema Hoy en d´ıa, en el mundo de las aseguradoras, el precio de los seguros est´a basado en el an´alisis de los actuarios, lo cual en muchas ocasiones es muy costoso. Aunque parezca irreal, pese a todas las tecnolog´ıas que tenemos, no se utilizan t´ecnicas inform´aticas avanzadas para ayudar en este an´alisis. Para hacernos una idea, actualmente el precio de un seguro se calcula en base a la estad´ıstica de dos variables vitales: la probabilidad de que ocurra un imprevisto y el coste medio que supondr´a solucionarlo. [1] El encargado de realizar estos c´alculos es el denominado “Actuario”. Como sabemos, no es f´acil calcular la probabilidad de que ocurra un imprevisto y es por ello que muchas veces los seguros se basan en un perfil de cliente muy gen´erico en vez de individualizar con el cliente concreto que van a tratar. Por otro lado, como bien sabemos, hoy en d´ıa, est´a totalmente en auge las t´ecnicas relacionadas con la inteligencia artificial como el machine learning, redes neuronales, etc. Esto es debido a que se est´an consiguiendo resultados muy positivos en diversas problem´aticas. Pese a que muchas de las t´ecnicas utilizadas llevan existiendo mucho tiempo, es ahora, cuando se est´an aplicando en problemas reales. Esto es as´ı debido al gran aumento en la capacidad de c´omputo de las ´ultimas d´ecadas y a la facilidad que existe a d´ıa de hoy en la escalabilidad de los datos gracias tanto a la nube como al big data. Es fundamental tener en cuenta que la inteligencia artificial debe estar totalmente ligada a los datos y viceversa. Viendo esta carencia, nuestro objetivo es facilitar el an´alisis de los actuarios con una aplicaci´on inform´atica basada en t´ecnicas de inteligencia artificial y que as´ı puedan adaptarse de una manera mucho m´as espec´ıfica al cliente. 1.2. Idea del proyecto En este proyecto hemos realizado una aplicaci´on inform´atica con el cual vamos ayudar a las compa˜n´ıas de seguro a predecir de manera m´as ´optima y con muchas m´as garant´ıas el riesgo de los clientes para que de esta manera puedan estipular los precios de sus tarifas y as´ı sean m´as ajustadas e individualizadas para cada uno de los clientes. 5
CAP´ ITULO 1. INTRODUCCI ´ ON 6 Para ello, nos hemos basado en distintas t´ecnicas de inteligencia artificial. Los datos utilizados para que nuestros clasificadores funcionen correctamente han sido facilitados por aseguradoras reales en formato “Excell” y donde gracias a ellos, hemos conseguido una muestra suficiente para obtener un clasificador. Toda la aplicaci´on est´a implementada en Python3 y desarrollada en el entorno de jupyter notebook. La predicci´on estar´a fundamentada en varios modelos de clasificaci´on: 1. Redes neuronales 2. Random forest Las aseguradoras tendr´an cierta libertad a la hora de configurar el programa. De esta manera, podr´an dar prioridad a ciertas caracter´ısticas que para ellos sean m´as importantes. Las aseguradoras podr´an configurar la aplicaci´on f´acilmente gracias a nuestra interfaz, sin necesidad de entender lo que hace el programa en su interior. 1.3. Conclusi´on Como hemos comentado, a las aseguradoras no les resulta nada sencillo calcular las tarifas para sus clientes, esto es debido a que las predicciones del riesgo de sus clientes est´an basadas en el trabajo de una persona en vez de en una aplicaci´on inform´atica. Creemos que es una carencia no hacer uso de ninguna de la gran variedad de tecnolog´ıas que hay disponibles hoy en d´ıa.Por eso mismo, hemos visto una oportunidad para implementar una herramienta innovadora, para poder aprender sobre nuevos lenguajes de programaci´on que no hab´ıamos visto previamente y para aprender sobre un apasionante mundo, la inteligencia artificial. Con nuestro producto intentaremos ayudar a las aseguradoras facilitando una aplicaci´on que calcula distintas predicciones del riesgo de un cliente y de esta manera, facilitar el trabajo a los actuarios que podr´an basarse en ello para establecer un precio. (Versi´on inglesa de la introducci´on en el cap´ıtulo 8)
Cap´ıtulo 2 Planificaci´on del trabajo Con el fin de conseguir los objetivos, la planificaci´on seguida fue la siguiente: 1. Estudio individual por parte de los miembros del equipo con el fin de tener un conocimiento global acerca del machine learning y las t´ecnicas utilizadas en este trabajo. 2. Puesta en com´un por parte de los miembros del equipo y toma de decisiones acerca de las tecnolog´ıas a usar junto con los directores del proyecto. 3. Instalaci´on y despliegue de la herramienta: Anaconda – Jupyter notebook. (Plataforma de trabajo). 4. An´alisis del trabajo global a realizar y divisi´on del mismo para poder ir abarc´andolo pas´o a paso. 5. Dise˜no de los bocetos iniciales realizados por balsamiq para tener una visi´on inicial de la interfaz. 6. Estudio acerca de Python ya que es el lenguaje principal del programa. Profundizando en las t´ecnicas de inteligencia artificial que debemos utilizar para nuestra aplicaci´on. 7. Estudio de las caracter´ısticas a usar en el modelo de datos para comenzar la limpieza de datos. 8. Programaci´on de manera individual con dos subobjetivos principales: a. Interfaz gr´afica (Front-end) b. Limpieza y tratamiento de datos (Back-end) 9. Comienzo de creaci´on de una red neuronal b´asica con el fin de probar el tratamiento de los datos. 10. Uni´on de los subobjetivos para conseguir tener una primera aplicaci´on funcional con la que ya se pueda comenzar el estudio de los resultados obtenidos. 11. Realizaci´on de pruebas con la matriz de confusi´on de la red neuronal para evaluar el rendimiento. 12. Mejora acerca de la interfaz para que sea lo m´as completa y amena posible. 13. Estudio profundo acerca del clasificador Random forest. 14. Implementaci´on del resto de clasificadores (Random forest). 15. Pruebas del Random forest y correcci´on de errores. 16. Integraci´on del algoritmo Random forest en la aplicaci´on final. 17. Pruebas de funcionamiento de la aplicaci´on final y correcci´on de posibles fallos. 7
CAP´ ITULO 2. PLANIFICACI ´ ON DEL TRABAJO 8 Cabe destacar que la realizaci´on de la memoria se fue haciendo de forma paralela al desarrollo descrito anteriormente. Comentar tambi´en, que alguna de estas tareas se realizaron de manera com´un por el equipo, y que otras, fueron abordadas por un ´unico miembro, seg´un lo acordado en la planificaci´on. (Versi´on inglesa en cap´ıtulo 9)
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 15 Una vez que ya ten´ıamos clara una primera idea de como quer´ıamos que quedara la interfaz, empezamos a implementarla en el lenguaje Python. Para ello, usamos la biblioteca tkinter la cual nos ha dado mucha facilidad a la hora de crear numerosos widgets debido a la amplia informaci´on que hay acerca de ella en Internet. En la siguiente secci´on, vamos a ense˜nar nuestra interfaz real e iremos explicando como ser´ıa una correcta utilizaci´on de nuestra aplicaci´on. 4.1. Funcionalidad Nuestro aplicaci´on tiene 3 funciones principales: 1. Creaci´on del modelo: Funcionalidad pensada para crear un modelo con las caracter´ısticas que el usuario crea oportuno. Una vez creado, el usuario podr´a guardar aquellos modelos que cumplan sus necesidades para posteriormente usarlos. 2. Carga del modelo: Funcionalidad pensada para cargar un modelo ya creado y guardado. El ´ultimo modelo cargado ser´a el que utilicemos a la hora de predecir el riesgo de un nuevo cliente. 3. Solicitar Riesgo: Funcionalidad pensada para calcular el riesgo de un nuevo cliente. Esta funcionalidad se basar´a en el ´ultimo modelo cargado por parte del usuario. En caso de que no se haya cargado ning´un modelo con anterioridad no se podr´a solicitar riesgo para un nuevo cliente. A continuaci´on, en la figura 4.1 podemos ver nuestra ventana de inicio. En ella, se pueden ver tres botones los cuales cada uno de ellos inicia cada una de las funcionalidades mencionadas anteriormente. En este caso, la funcionalidad de solicitar riesgo esta deshabilitada ya que no existe ning´un modelo cargado y por tanto no se puede solicitar el riesgo de un nuevo cliente.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 16 Figura 4.1: Ventana de inicio. En primer lugar, vamos a explicar el men´u que tenemos desarrollado y el cual estar´a operativo continuamente en la parte superior de todas las ventanas. Figura 4.2: Men´u de la aplicaci´on.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 17 Como podemos ver en la figura 4.2, nuestro men´u consta de tres partes, las cuales mostramos a continuaci´on. Salir →Ventana emergente que nos pregunta si deseamos salir. En caso afirmativo, estar´as poniendo punto y final a la ejecuci´on de la aplicaci´on. Figura 4.3: Ventana Emergente: Salir. Ayuda →Ventana emergente que informa que existe una memoria acerca de la aplicaci´on donde se puede consultar cualquier duda. Figura 4.4: Ventana Emergente: Ayuda.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 18 Acerca de →Ventana emergente que informa sobre los creadores de la aplicaci´on. Figura 4.5: Ventana Emergente: Acerca de. Una vez vista la ventana inicial y el men´u vamos a ir ense˜nando cada una de las distintas funcionalidades de nuestra aplicaci´on. Adem´as, iremos ense˜n´andolas en el orden l´ogico que se debe seguir a la hora de usarla. 4.2. Creaci´on del modelo Esta funcionalidad consiste en crear un nuevo modelo con las caracter´ısticas que el usuario considere oportunas. Cuando queremos crear un modelo, lo primero que debemos hacer es seleccionar los datos con los que queremos entrenar nuestras t´ecnicas de inteligencia artificial. Figura 4.6: Ventana carga de datos. Una vez que hemos seleccionado los datos a cargar, la aplicaci´on nos preguntar´a acerca de las caracter´ısticas que deseamos tener en cuenta para el modelo.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 19 Figura 4.7: Ventana para elegir las caracter´ısticas del modelo. Por otro lado, para los perfiles mas expertos, nuestra aplicaci´on permite la configuraci´on manual de algunos de los par´ametros fundamentales de una red neuronal. Es decir, el usuario podr´a modificar con facilidad tanto el n´umero de capas que desea en su red neuronal como el n´umero de nodos en cada una de ellas. En caso de que el usuario sea menos experimentado podr´a obviar este apartado y entonces la red neuronal coger´a la configuraci´on por defecto, tres capas de 100 nodos en cada una de ellas. Figura 4.8: Ventana para modificar los par´ametros de la red neuronal. Una vez elegidas tanto las caracter´ısticas del modelo que deseamos como los par´ametros de la red neuronal, nos saldr´a una ventana de confirmaci´on inform´andonos acerca de las caracter´ısticas que tendr´a el modelo. Si confirmamos con el bot´on “Crear Modelo”, estaremos creando nuestro nuevo modelo.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 20 Figura 4.9: Ventana de confirmaci´on. Una vez seleccionado el bot´on de crear modelo, nos aparecer´a una ventana donde aparecer´an los distintos resultados que han conseguido nuestros clasificadores. Figura 4.10: Ventana de resultados al crear el modelo. Si dichos resultados no cumplen nuestras necesidades, podremos retroceder y crear otro modelo con caracter´ısticas diferentes. Este proceso debe hacerse varias veces hasta conseguir unos resultados que cuadren con el objetivo que se est´a buscando. En caso contrario, si los resultados obtenidos cuadran con el objetivo, podremos guardar el modelo para en un momento determinado, cargar el modelo y atender a clientes con ´el. Cuando guardamos el modelo, si todo ha ido bien, nos debe salir una ventana emergente indic´andonos que la operaci´on ha sido un ´exito.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 21 Figura 4.11: Ventana emergente de ´exito al guardar un modelo. Al guardar el modelo, en la ruta donde se est´e ejecutando el script se nos guardar´an los diferentes modelos (uno por cada uno de los clasificadores) y un archivo .txt donde podremos comprobar la informaci´on que constituye dicho modelo. Dichos archivos estar´an datados con el fin de que sean f´aciles de encontrar. Figura 4.12: Archivos guardados. Tras todo esto, ya tenemos un modelo totalmente creado a gusto del usuario y listo para ser cargado por parte de la aplicaci´on. 4.3. Carga del modelo Cuando usamos la funcionalidad de cargar el modelo, la aplicaci´on nos pedir´a varios archivos, uno por cada clasificador (Se han generado al crear modelo). Si todo ha ido bien, nos aparecer´a una ventana emergente inform´andonos que se ha cargado correctamente.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 22 Figura 4.13: Ventana emergente de ´exito al cargar un modelo. Al pulsar en la ventana emergente, nos llevar´a a una nueva ventana donde podemos ver los resultados obtenidos por parte de los modelos cargados. Figura 4.14: Ventana donde se muestran los resultados de un modelo cargado. Una vez que hemos cargado un modelo, la aplicaci´on est´a lista para poder solicitar el riesgo de un nuevo cliente. Por ello, en nuestra ventana inicial se nos habilitar´a la funcionalidad de Solicitar riesgo a diferencia de como estaba en la figura 4.1 al principio del todo.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 23 Figura 4.15: Ventana inicial con solicitar riesgo habilitado. Ademas, nuestra aplicaci´on genera un fichero .txt con un hist´orico de los modelos cargados. De esta manera, podemos saber cuando hemos cargado cada uno de los modelos y la ruta donde est´an. A continuaci´on, en la figura 4.16 mostramos el contenido que tendr´ıa el log hist´orico. Figura 4.16: Fichero log hist´orico de modelos cargados. 4.4. Solicitar Riesgo Esta funcionalidad sirve para generar la predicci´on del riesgo que tendr´a un nuevo cliente. Para poder utilizar esta funcionalidad, debemos haber cargado un modelo en alg´un momento (Aunque fuese en otra sesi´on). El ´ultimo modelo cargado siempre ser´a la base a la hora de generar las predicciones para el nuevo cliente. Si solicitamos riesgo, lo primero que nos aparecer´a es la ventana de la figura 4.17, donde podemos ver el ´ultimo modelo cargado y las caracter´ısticas del mismo.
CAP´ ITULO 4. FRONT-END DE LA APLICACI ´ ON 24 Figura 4.17: Ventana de informaci´on al solicitar riesgo. En caso de que este no sea el modelo deseado, podemos cambiarlo de dos maneras distintas: bien cargando otro modelo ya creado o bien creando uno nuevo. En cambio, si nos gusta el modelo y queremos utilizarlo para solicitar el riesgo de un nuevo cliente, el usuario deber´a rellenar un formulario con los datos del cliente. Dicho formulario consta de dos partes y preguntamos todo tipo de datos necesarios para hacer una buena predicci´on. Figura 4.18: Ventana del formulario(1aParte).
CAP´ ITULO 5. BACK-END DE LA APLICACI ´ ON 31 5.3. Nuestra aplicaci´on En est´a secci´on, vamos a contar con m´aximo detalle como hemos implementado la parte backend. Comenzaremos explicando como hemos realizado el tratamiento inicial de los datos y finalizaremos explicando la implementaci´on propia de los clasificadores. 5.3.1. Lectura, limpieza y tratamiento de datos Antes de entrar en la propia materia, vamos a intentar dejar claro el concepto de data frame ya que va a ser muy importante. Data Frame Un data frame, es el nombre que la biblioteca panda ha dado a un marco de datos. Este marco de datos es una matriz donde las filas son los valores de los datos y las columnas las distintas caracter´ısticas. Este conjunto de datos ser´a la entrada de las distintas t´ecnicas y las predicciones saldr´an en base a ´el. Por ello, debe tratarse correctamente para poder facilitar el trabajo lo m´aximo posible a las distintas t´ecnicas de predicci´on. Estas son las principales operaciones de tratamiento que hay realizar para tener un buen data frame: 1. Limpieza de datos y rellenado de huecos. Preparamos los datos de manera correcta para poderlos tratar. 2. Creaci´on y tratamiento de features (Caracter´ısticas) a partir de los datos. 3. Eliminaci´on de features no importantes (Features extraction) Estas fases, sin duda ha sido uno de los mayores quebraderos de cabeza que hemos tenido continuamente a la hora de realizar el proyecto. Esta parte del proyecto es la que posteriormente, cuando expliquemos los clasificadores denominaremos “preprocesado”. Es una parte important´ısima para cualquier software de aprendizaje autom´atico ya que sin ella los datos no estar´ıan bien tratados, y por tanto, los clasificadores jam´as podr´an funcionar correctamente. Sin mas dilaci´on, comenzamos a explicar como lo hemos implementado: Para la limpieza y el tratamiento de datos principalmente hemos usado la biblioteca por excelencia para este tipo de trabajos como es Panda [4]. Lo primero que hay que realizar, es cargar el conjunto de datos que tenemos. En nuestro caso, como ya dijimos al principio de este documento, los datos nos los dieron en formato Excell. Por ello, utilizamos la siguiente funci´on de panda. Figura 5.3: Lectura de datos.
CAP´ ITULO 5. BACK-END DE LA APLICACI ´ ON 32 Normalmente los datos que se manejan en problemas reales no est´an limpios y por ello, al igual que tuvimos que hacer nosotros, es frecuente tener que rellenar con 0’s aquellos datos que vienen con NULL o vac´ıos. Figura 5.4: Relleno de datos. A la hora de decidir que columnas ser´ıan las adecuadas y cu´ales son despreciables para nuestros clasificadores lo primero que hicimos fue juntarnos con los directores del proyecto y decidirlo. Tras varias conversaciones, llegamos a la conclusi´on que ciertas columnas no nos iban aportar nada a la hora de predecir y es por ello que decidimos eliminarlas. Las columnas que consideramos importantes para predecir estar´an disponibles en la interfaz y debe ser el experto quien debe crear los modelos en base a las que ´el desee. Figura 5.5: Eliminaci´on de columnas. Los clasificadores, no entienden de letras sino que necesitan que el data frame sea complemente num´erico. Por ello, en varias de las columnas es importante hacer un hash para pasar determinadas cadenas a valores num´ericos. Podemos distinguir dos grandes tipos de columnas (caracter´ısticas): 1. Columnas donde no existe gran variedad de valores y se suelen repetir. Para ellas, nuestra manera de operar es hacer un map y pasar cada cadena a un valor num´erico. 2. Columnas donde existe multitud de valores. En estas columnas, nuestra manera de operar es hacer un ranking para coger los grupos de valores que m´as se repitan y los que no se repitan agruparlos en un grupo denominado “otros”. Columnas sin variedad A continuaci´on, mostramos un ejemplo de c´omo se realiza este hash. Lo que hacemos es cambiar determinadas cadenas que se repiten a un n´umero entero. En el ejemplo de la figura 5.6 vemos como transformamos la columna “AsistenciaViajePremium“ con el siguiente procedimiento: donde aparezca “PagoAnual”pasar´a a ser un 1, mientras que donde aparezca “PagoSemestral”pasar´a a ser un 2. Figura 5.6: Cambio de cadena a valor num´erico (Columnas sin variedad).
CAP´ ITULO 5. BACK-END DE LA APLICACI ´ ON 33 Este proceso no solo se ha hecho con esta caracter´ıstica sino que tambi´en lo hemos tenido que utilizar con otras. Columnas con variedad A continuaci´on, vamos a explicar como hemos realizado el mapeo en una caracter´ıstica donde existen multitud de valores. Para explicarlo, nos basaremos en el mapeo que hemos realizado a la caracter´ıstica “marca”. Si bien es cierto que existen muchos valores de marca en el conjunto de datos, hay determinadas marcas que se repiten frecuentemente. Por ello, lo que hicimos fue seleccionar aquellas marcas que se repet´ıan frecuentemente y asignar cada una de ellas a un n´umero diferente. Para el resto de marcas, las cuales sal´ıan en los datos de manera muy puntual las asignamos a un mismo n´umero a todas ellas. Este n´umero, se podr´ıa identificar como un grupo denominado “otros”. En el ejemplo de la figura 5.7 podemos ver como lo hemos implementado. Figura 5.7: Cambio de cadena a valor num´erico (Columnas con variedad). Este proceso no solo se ha hecho con esta caracter´ıstica sino que tambi´en lo hemos utilizado con otras caracter´ısticas como son modelo de coche, correo electr´onico del cliente, etc. Estos procesos es importante tenerlos claros ya que hay que hacerlos repetidas veces para poder ofrecer a los clasificadores un data frame totalmente num´erico.
CAP´ ITULO 5. BACK-END DE LA APLICACI ´ ON 34 Para el tratamiento de las columnas con fechas como pueden ser fecha de nacimiento, fecha de carnet de conducir, etc. lo que hacemos es quedarnos solo con el a˜no ya que el mes y el d´ıa consideramos que no es suficientemente relevante a la hora de predecir. Por ello, en las fechas tan solo nos quedaremos con el a˜no. Figura 5.8: Tratamiento de fechas. Por ´ultimo, comentar que es muy recomendable escalar los datos [16] ya que esto puede hacer que se mejoren notablemente las predicciones ya que esto hace que el conjunto de datos est´en en un mismo rango y de esta manera los clasificadores podr´an asimilar las semejanzas de manera mucho mas sencilla. En el conjunto de datos que nos proporcionaron hay una gran variedad de tipos de datos con diversas magnitudes. Despu´es de informarnos sobre el machine learning nos dimos cuenta que es una pr´actica que se recomienda repetidamente porque puede tener un gran impacto en ciertos algoritmos. El impacto se debe a que, como hemos comentado, la gran variedad de magnitud en las caracter´ısticas hace que el peso que tienen en el algoritmo puede ser diferente aunque en realidad tenga que ser el mismo. Por ejemplo, si tuvi´eramos dos caracter´ısticas en las cuales se representa el peso de objetos y en una se representara en kilogramos y otra en gramos el algoritmo podr´ıa asignarle un peso, en el predictor, mucho m´as grande a mil gramos que a un kilogramo cuando el valor real es el mismo. Entonces, lo que hace el escalado es unificar todos los valores para que no ocurran las situaciones como la que hemos puesto de ejemplo.
CAP´ ITULO 5. BACK-END DE LA APLICACI ´ ON 35 La manera de escalar un data frame es la que se puede ver en la figura 5.9. Figura 5.9: Escalar datos. 5.3.2. Clasificadores En esta secci´on, empezaremos contando las distintas fases por las que debe pasar cualquier clasificador y acabaremos contando como hemos implementado los clasificadores, en nuestro caso: Redes neuronales y Random forest. Lo primero que debemos saber es que los clasificadores consisten en que dado unos par´ametros de entrada (el data frame tratado), devuelven un resultado totalmente probabil´ıstico. Para ello, los algoritmos deben pasar por distintas fases para intentar garantizar la mayor eficacia posible. El tratamiento de estos clasificadores consta de 3 fases principales m´as una fase de preprocesado. A continuaci´on, las explicamos: •Preprocesado Consiste en el tratamiento del data frame descrito en la secci´on anterior. En nuestro caso, tuvimos que trabajar mucho en este apartado ya que los datos que nos proporcionaron no estaban como necesit´abamos. •1oFase: Entrenamiento En esta fase utilizaremos un 70 % de los datos obtenidos. En ella, entrenamos el clasificador para que pueda aprender a predecir de manera correcta. Esta fase consta de dos principales partes: 1. Configuraci´on del clasificador 2. Obtenci´on del modelo Los resultados obtenidos en esta fase tendr´an una probabilidad de ser correcta pseudoaleatoria. Debemos tener en cuenta que soluciones err´oneas tambi´en aportaran informaci´on ´util.
CAP´ ITULO 5. BACK-END DE LA APLICACI ´ ON 36 •2oFase: Validaci´on En esta fase utilizaremos un 15 % de los datos obtenidos. Seleccionamos de ellos cual va a ser la t´actica a utilizar para que el clasificador funcione de la mejor manera posible. •3oFase: Test En esta fase utilizaremos el 15 % de los datos que nos faltaban por utilizar. En este momento lo que hacemos es poner a prueba nuestro clasificador para ver si predice de manera correcta. A continuaci´on, exponemos como hemos implementado cada uno de los clasificadores: Red neuronal Para implementar la red neuronal hemos utilizado la biblioteca de Python sklearn la cual es la biblioteca por excelencia para la mayor´ıa de los expertos. Lo primero que tenemos que tener claro es saber que columna queremos predecir. En nuestro caso, se trata de la columna “siniestro”. Figura 5.10: Columna a predecir. Al predecir esta columna, podremos saber los porcentajes que tiene un nuevo cliente en cada de uno de los siguientes valores: Sin Siniestro Reclamaci´on Culpa Para un uso correcto de la red neuronal, lo primero que debemos hacer es repartir sus datos para las distintas fases (entrenar, test) como hemos explicado anteriormente. En nuestro caso, vamos a utilizar un 30 % de los datos para el test pero esto puede variar. Para ver como se hace esta divisi´on debemos ver el ejemplo de la figura 5.11 Figura 5.11: Divisi´on de los datos. Una vez que ya hemos repartido el conjunto de datos, debemos crear y entrenar nuestro clasificador. En primer lugar, nos creamos el tipo de clasificador que queremos. En este caso, una red neuronal, para ello debemos invocar al m´etodo MLPClassifier() [10].
CAP´ ITULO 5. BACK-END DE LA APLICACI ´ ON 37 Posteriormente con el m´etodo fit() [17] entrenamos nuestra red para que sea capaz de predecir con buenos resultados. Figura 5.12: Entrenamiento de la red neuronal. Para saber que precisi´on nos proporciona nuestra red neuronal, es decir, para saber que porcentaje de acierto tiene nuestra red debemos llamar al m´etodo score() de la biblioteca sklearn. Es muy com´un mirar la precisi´on que ha tenido nuestra red neuronal tanto a la hora del test (datos desconocidos) como a la hora del entrenamiento (datos conocidos). En la figura 5.13 podemos ver como se implementa. Figura 5.13: Precisiones de test y de entrenamiento. Sin duda, el porcentaje que m´as nos debe influir a la hora de ver si la red neuronal esta entrenada correctamente y ver si predice bien es la precisi´on del test ya que es la que eval´ua si la red neuronal se adapta bien a nuevos datos. A veces, una red neuronal predice muy bien para los datos de entrenamiento pero en cambio, para datos nuevos predice mucho peor. Este problema ocurre cuando se ha producido un sobreajuste y se debe solucionar. Por ultimo, lo que debemos hacer es llamar al m´etodo de sklearn predict(). Este m´etodo ser´a el que nos proporcione la informaci´on que estamos buscando, es decir, los porcentajes de cada uno de los valores posibles de la columna a predecir. Figura 5.14: M´etodo para predecir. Es muy ´util, para comprobar los resultados, analizarlos y poder hacer pruebas tener en cuenta la matriz de confusi´on [15], la cual nos da informaci´on para ver que tal funciona nuestro clasificador. Para ver como se implementa una matriz de confusi´on debemos ver la figura 5.15. Figura 5.15: Matriz de confusi´on.
CAP´ ITULO 5. BACK-END DE LA APLICACI ´ ON 38 Cabe destacar, que una red neuronal no es algo r´apido de implementar ya que existen diversos par´ametros de la red como son el numero de capas, algoritmo que usa, etc. que hay que ir variando e ir probando hasta encontrar el mejor funcionamiento de la misma. Random forest El clasificador Random forest se crea de manera muy parecida al proceso de creaci´on de la red neuronal y se debe pasar por los mismos pasos mencionados en la secci´on anterior. Lo ´unico que var´ıa en este caso es el tipo de clasificador a crear. Mientras que en la secci´on anterior cre´abamos una red neuronal, ahora debemos crear un clasificador Random forest. Para ello, debemos implementarlo como indica la figura 5.16 Figura 5.16: Creaci´on Random forest. Esto no significa que con saber un clasificador ya no necesites formarte en los dem´as ya que la dificultad de estos clasificadores reside en la configuraci´on de los mismos la cual es totalmente independiente.
Cap´ıtulo 6 An´alisis de los resultados A ser sinceros, lo cierto es que no hemos conseguido los resultados esperados para nuestros clasificadores. Las posibilidades que hemos pensado que ocasionan una mala predicci´on de nuestros clasificadores son las siguientes: La muestra de datos es insuficiente. Los datos no tienen suficiente correlaci´on para que el clasificador saque conclusiones. Nuestro an´alisis de los datos y/o La parametrizaci´on de los clasificadores no ha sido del todo correcta. Para ver si realmente es culpa nuestra o son los datos de entrada, vamos a realizar unas pruebas donde vamos a predecir con un conjunto de datos sint´eticos por nosotros mismos. Adem´as, estos datos ser´an mucho m´as sencillos y solo diferenciaremos si el cliente tendr´ıa accidente o no. Ejecuci´on de las pruebas con datos sint´eticos Estas pruebas han sido implementadas con una red neuronal de diez capas y con cien nodos por cada una de ellas y por el clasificador Random forest. Se ha creado un conjunto de datos de mil individuos. La manera de operar ser´a empezar con pocas columnas e ir a˜nadiendo poco a poco para poder observar que cambios va sufriendo la predicci´on. A la hora de entrenar los clasificadores, lo haremos de dos formas: 1. Con datos sin escalar: Los datos no sufren ning´un cambio a los reales. 2. Con datos escalados: Los datos sufren una transformaci´on para que todos est´en en un mismo rango de valores. Es una pr´actica que se recomienda y que suele mejorar el rendimiento del clasificador. En nuestro caso real no hab´ıa mucha mejora, pero podremos observar que si es beneficioso para nuestros datos. De los mil individuos que hemos creado, haremos el siguiente reparto: 500 individuos tendr´an entre 25 y 28 a˜nos con un coche de 20.000 a 30.000 kW de potencia. Todos ellos, diremos que tendr´an accidente. 500 individuos tendr´an entre 35 y 70 a˜nos con un coche de 500 a 10.000 kW de potencia. Ninguno de estos individuos sufrir´a un accidente. 39
CAP´ ITULO 6. AN ´ ALISIS DE LOS RESULTADOS 40 Estos datos ser´an constantes a lo largo de las pruebas e iremos a˜nadiendo m´as columnas seg´un vayamos avanzando siempre y cuando vayan funcionando correctamente. Las columnas que vayamos a˜nadiendo ser´a para complicar la predicci´on ya que los datos ser´an m´as aleatorios y tendr´an menos relaci´on. Pruebas Red neuronal A continuaci´on, mostraremos los resultados obtenidos en cada una de las pruebas: •Prueba 1 Tan solo usamos las dos columnas explicadas anteriormente. Figura 6.1: Primera prueba (RN) con los datos sin escalar. Como podemos ver en la figura 6.1 los resultados son casi perfectos y tan solo hay 11 individuos que nuestra red neuronal predice mal.
Cap´ıtulo 7 Conclusiones 7.1. Utilidad Hoy en d´ıa, sea cual sea la empresa y sea cual sea el ´ambito, si quiere estar actualizada y quiere ser una empresa puntera necesita tener aplicadas t´ecnicas avanzadas inform´aticas. La inteligencia artificial, hoy en d´ıa est´a totalmente metida en el mercado y est´a en pleno auge. Muchas de las mayores empresas del mundo ya est´an invirtiendo mucho dinero y tiempo en realizar proyectos con t´ecnicas como las usadas en esta aplicaci´on. Por lo que, podr´ıamos decir que este trabajo de fin de grado podr´ıa ser un proyecto totalmente real. Adem´as, en el mundo de los seguros con la cantidad de aseguradoras y de datos sobre los clientes que tienen, consideramos que se pueden hacer grandes predicciones muy potentes y que podr´ıa hacer que las empresas ahorraran mucho dinero. Por ello, pensamos que hemos realizado un producto que podr´ıa ser muy ´util. Hay que tener en cuenta, que nuestro producto no solo puede ser ´util en aseguradoras, sino que la idea base del proyecto, cambiando ciertas propiedades propias de este proyecto, se podr´ıa extender en cualquier otro ´ambito, teniendo as´ı una idea de producto bastante potente. Haciendo referencia al ´ambito de las aseguradoras, pensamos que hemos facilitado mucho el papel del actuario, y no solo lo hemos facilitado, sino que creemos que de esta manera estaremos ajustando mucho m´as el riesgo que tiene un cliente ya que tenemos en cuenta factores que no se podr´ıan tener en cuenta sino se estuvieran utilizando estas t´ecnicas. 7.2. Futuras Versiones En nuestro proyecto, al ser un mundo tan amplio se podr´ıan hacer numerosas versiones futuras que no hemos conseguido implementarlas o bien por motivos t´ecnicos o bien por falta de tiempo. A continuaci´on, hacemos un desglose de posibles mejoras futuras: 1. Incluir una interfaz m´as sofisticada y elaborada. 2. Mostrar directamente cual deber´ıa ser el precio del seguro del cliente. 3. Dar opciones para que el usuario pueda ver la interfaz en otros idiomas. 4. Obtener datos de los posibles clientes a trav´es de sus redes sociales. 5. Mostrar adem´as del riesgo actual que tiene un cliente, cu´al ser´a la evoluci´on de un cliente a lo largo de los a˜nos. 47
CAP´ ITULO 7. CONCLUSIONES 48 6. Mostrar gr´aficas y un estudio de las predicciones. Estas ideas son solo algunas de ellas, pero como hemos dicho anteriormente se podr´ıan hacer multitud. 7.3. Valoraci´on del proyecto Para nosotros, este proyecto ha sido un gran reto el cual pensamos que hemos conseguido superar. Decimos que ha sido un gran reto, ya que se basaba en una tecnolog´ıa que nunca hab´ıamos utilizado como es Python. Lo cierto es que el problema no lo tuvimos a la hora de comprender el lenguaje ya que no es dif´ıcil y adem´as existe mucha cantidad de documentaci´on sobre ´el, sino en las t´ecnicas de inteligencia artificial utilizadas las cuales no son sencillas de comprender ni de realizar. Fue aqu´ı donde continuamente nos d´abamos contra conceptos complicados y que no ´eramos capaces de implementar correctamente. Adem´as, como bien hemos explicado a lo largo de esta memoria, estas t´ecnicas no dan un resultado exacto, ni hay un resultado “correcto”. Por tanto, es muy dif´ıcil llegar a saber cu´al es el mejor resultado y se necesita mucho ensayo-error para saber qu´e modelo de predicci´on es el correcto. Fuera de lo t´ecnico, este proyecto tambi´en nos ha ayudado a saber organizar un trabajo costoso y largo lo cual es importante a la hora de afrontar el mundo profesional. Como autocr´ıtica, pensamos que los clasificadores deber´ıan sacar mejores resultados y as´ı poder tener una aplicaci´on mucho m´as fiable. Tambi´en es cierto, que en gran medida nuestros clasificadores no funcionan como nos gustar´ıa ya que el conjunto de datos que tenemos no suficiente y como bien hemos ido explicando a lo largo del documento, los datos son vitales para una buena predicci´on. Dejando de lado el p´arrafo anterior, pensamos que hemos conseguido entender los conceptos de estas tecnolog´ıas y hemos llegado a realizar hitos que al principio del mismo nos parec´ıan muy complicados. Esto nos ha dado un gran empuj´on a la hora de afrontar el mundo laboral y nos ha hecho estar orgullosos del trabajo realizado durante todo el a˜no. (Versi´on inglesa en el cap´ıtulo 10)
Cap´ıtulo 8 Introduction 8.1. Description of the problem Nowadays, insurance companies base their prices estimation in the actuary’s analysis, but this can be very costly. Even though it may look unreal, all the technology and advanced computer techniques that we have access to are not used in this analysis. To get an idea, the price of an insurance is calculated based on the statistics of two variables: the probability that an unforeseen event occurs, and the average cost resolving it would take. [1] The person who carries out these calculations is known as “Actuary”. As we know, it is not easy to calculate the probability that an unforeseen event occurs, which is the reason why most of the times, insurances are based on a very general client’s profile instead of being based on each specific client. Moreover, different technologies related to Artificial Intelligence are growing nowadays, such as machine learning, neuronal networks, etc. This happens because very positive results are being achieved in the facing of different problems. Even though lots of these techniques have existed from a long time ago, it is in the current time when they are being applied for real problems solving. The reason why this happens is because of the huge growing of calculation capacity in the last decades, and the data scalability facility that the cloud and big data have created. It is very important to bear in mind that Artificial Intelligence must be completely linked to data, and vice versa. In view of this lack, our aim is to facilitate the analysis of the actuaries through a computer software based on Artificial Intelligence techniques, and allow them to adapt their work to each specific client. 8.2. Idea of the project In this project, we have developed a software aimed at supporting insurance companies in achieving a more optimal and secure prediction of the clients’ risk, so that the estimated prices for their rates can be more adequate for each client. To do so, we have used different Artificial Intelligence techniques. The data we have used to make our sorters work correctly were provided by actual insurance companies in “Excell” format. These data made our sample consistent enough to get a sorter. 49
CAP´ ITULO 8. INTRODUCTION 50 The whole software is implemented in Python3 and developed in Jupyter Notebook environment.. The prediction will be based on different classification models: 1. Neuronal networks 2. Random forest The insurance companies will have some discretion in deciding how to configure the program. In such way, they will be able to give priority to those characteristics that they consider the most important ones. They will be able to do so in an easy way thanks to our interface, which allows its usage without the necessity of understanding what the program does in order to calculate the predictions. 8.3. Conclusion As it has been mentioned, it is not easy for the insurance companies to calculate rates for their clients, due to the fact that their clients’ risk predictions are based on one person’s word instead of using a computer software. In our opinion, not using the wide variety of tools available is a lack nowadays. This is the reason why we have considered that implementing an innovative tool was a great opportunity for learning more about programming languages that we had never worked with, as well as for learning about an amazing issue, the Artificial Intelligence. With our product, we will try to help insurance companies by providing a tool that is able to calculate different risk predictions for a client, and, this way, facilitating the actuaries’ work who would be able to take these predictions as indicators for establishing rates.
Cap´ıtulo 9 Work Planning In order to achieve our goals, our planning of the project was as follows: 1. Individual study of each member of the group in order to achieve a global understanding of machine learning and the different techniques that have been used in this project. 2. Sharing of information and ideas, and decisions taking regarding the technologies that were going to be used with the other members of the group and the directors and project. 3. Installation and deployment of the tool: Anaconda – Jupyter notebook. (Work Platform). 4. Analysis of the work that had to be done and division of the project among the members of the group. 5. Design of the first drafts with balsamiq that allowed an initial vision of the interface. 6. Study of Python, the main language of the program, delving in the different Artificial Intelligence techniques that we had to use for our software. 7. Study of the features that had to be used in the data model to start with the data cleansing. 8. Individual programming with two main sub-aims: a. Graphic interface (front-end) b. Cleansing and treatment of the data (back-end) 9. Knowledge of a basic neuronal network knowledge with the aim of testing the data treatment. 10. Merging of the two sub-aims to get a first functional software that we could start using for studying the results obtained. 11. Making of tests with the confusion matrix of the neuronal network to evaluate the efficiency of the tool. 12. Improvement of the interface to make it as complete and user-friendly as possible. 13. Deep study of Random forest sorter. 14. Implementation of the other sorters (Random forest). 15. Random forest tests and errors solving. 16. Integration of the Random forest algorithm in the final software. 17. Final software functioning tests and correction of possible mistakes. It is worth mentioning that this memory was written at the same time the development described above was taking place. Besides, it is important to highlight that some of these tasks were done by the whole group, but some others were done individually, as it was specified in the planning. 51
Cap´ıtulo 10 Conclusions 10.1. Utility Nowadays, every company, no matter the field it is specialized on, must use computer techniques in order to be updated. Artificial Intelligence is completely integrated in today’s market, and it keeps growing even more. Many different well-known companies are investing a lot of money and time in carrying out projects with techniques similar to the ones used in this software. Therefore, we could say that this project could perfectly be an actual project. Besides, in the insurance field, there are lots of companies and data about their clients. This is why very powerful predictions, that would save a lot of money and time to the companies, could be carried out. It is important to highlight as well that our product could be very useful for other companies different from insurance companies. It could be easily implemented to other fields by taking the base of the project and changing the features. In relation to the insurance companies, we could state that we have eased the role of the actuary; not only eased it, but getting more accurate predictions of risk for each client, since we have taken into account many features that couldn’t have been considered otherwise. 10.2. Future Versions In our project, lots of future versions could be done, since it is a huge area of study. However, due to technical or time restrictions, we haven’t been able to implement them. Hereunder, future possible improvements are listed: 1. Including a more sophisticated and elaborated interface. 2. Showing directly the rate the client’s insurance should have. 3. Give the user the option of using the interface in different languages. 4. Obtaining data about possible clients from their social networks. 5. Showing, apart from the real risk a client has, the evolution this client will suffer along the passing of time. 6. Showing graphics and a study of the predictions. These are only some ideas, although lots of things could be done in relation to this project. 52
CAP´ ITULO 10. CONCLUSIONS 53 10.3. Assessment of the Project For us, this project has been a personal challenge that we think we have been able to deal with. We consider it a great challenge because it is based on a technology we had never used before, such as Python language. The problem was not understanding the language, since it is not complicated and it is a very documented language, but using Artificial Intelligence techniques that are not easy to understand nor to use. In addition, as we have explained along this paper, these techniques don’t provide an exact result, and “correct” results don’t exist either. This is the reason why it is very difficult to know which is the best result and a lot of test-error is needed to know which is the correct prediction model. Apart from the technical part, through this project we have learned how to organise a big project, which is a very important skill for the labour market. As a self-criticism, we would say that sorters could obtain better results, and that the software would be much more reliable in such way. It is true that our sorters don’t work as good as we would like because we didn’t have enough data, which is a basic element to obtain a good prediction. Finally, we think that we have understood these technologies and we have obtained results that we considered very difficult before starting the project. This is a great support for entering the labour market, since we are proud of the work we have developed along the year.
Cap´ıtulo 11 Contribuci´on de cada miembro •Aportaci´on D´amaso S´anchez Arenas An´alisis y aprendizaje de la tecnolog´ıa Cuando se comenz´o el proyecto, lo primero que hubo que hacer, como se acord´o en la primera reuni´on fue informarse acerca de posibles tecnolog´ıas y entornos que pod´ıamos usar. Esta informaci´on principalmente se sac´o leyendo en diversos foros de Internet y viendo v´ıdeos de expertos en la materia. La tecnolog´ıa a usar fue una elecci´on muy acotada ya que Python y R son los lenguajes por excelencia en este tipo de proyectos. Por lo tanto, hab´ıa que elegir uno de los dos para realizar proyecto. Fue D´amaso el que junto a los directores y la aprobaci´on de Eduardo tomaron la decisi´on de hacerlo en Python ya que es un lenguaje que tiene mucho inter´es en el mundo laboral y que est´a muy demandado hoy en d´ıa. Adem´as, se analiz´o el lenguaje y vimos que podr´ıa cumplir con creces todos los requisitos para hacer nuestro proyecto de machine learning. Una vez elegido el lenguaje y el entorno de trabajo, se comenz´o a pensar que bibliotecas deb´ıamos usar. En este caso, D´amaso fue el que tras informarse por Internet decidi´o hacer la interfaz con la biblioteca de Python Tkinter [3]. El motivo principal fue la cantidad de documentaci´on y facilidades que aportaba dicha biblioteca. Una vez analizado las tecnolog´ıas que ´ıbamos a usar, ya estaba todo listo para empezar a desarrollar. Desarrollo En el inicio del desarrollo de la aplicaci´on, cuando a´un no se hab´ıa comenzado, con el fin de tener algo funcional lo antes posible, D´amaso comenz´o a desarrollar la interfaz gr´afica mientras Eduardo comenzaba con la parte back-end. A la par que D´amaso iba desarrollando la interfaz, iba form´andose acerca del back-end de la aplicaci´on para despu´es trabajar en paralelo junto a Eduardo. Una vez que la interfaz ya era lo suficientemente completa como para poder tener algo funcional, D´amaso comenz´o a trabajar de manera paralela junto con Eduardo en la parte back-end del proyecto. Tras un largo periodo trabajando de manera paralela, cuando ya se estaban haciendo las pruebas para ver las predicciones obtenidas por las redes neuronales, D´amaso comenz´o a formarse c´omo ser´ıa el desarrollo sobre el clasificador Random forest. Una vez que la parte de las redes neuronales estaba apunto de finalizar, y mientras Eduardo daba los retoques finales a la interfaz, D´amaso comenz´o a desarrollar la parte del Random forest. 54
CAP´ ITULO 11. CONTRIBUCI ´ ON DE CADA MIEMBRO 55 Cuando la parte de las redes neuronales y la interfaz gr´afica ya estaban finalizadas, ambos miembros del equipo se centraron en implementar el Random forest y comprobar que los resultados ten´ıan sentido.De esta manera, intentaban poder poner punto final a la parte back-end del proyecto. Una vez que todo estaba desarrollado, ambos miembros del equipo dedicaron todo su tiempo a realizar pruebas y a corregir fallos. Gesti´on de versiones Las distintas versiones que se iban desarrollando tanto por parte de Eduardo como por parte de D´amaso se iban gestionando usando un repositorio en Github para que continuamente ambos tuvi´eramos acceso a todo, al igual que los directores. Documentaci´on La parte de la documentaci´on se realiz´o durante todo el proyecto de manera paralela al desarrollo por ambos miembros del equipo. Al final del proyecto, antes de entregar nada, se hizo una revisi´on de toda la documentaci´on y se solucionaron errores. La memoria se iba viendo con los directores del proyecto para poder obtener un feedback continuo y de esta manera poder ir corrigiendo errores. •Aportaci´on Eduardo Rodr´ıguez De Castro Zalo˜na An´alisis y aprendizaje de la tecnolog´ıa Al inicio del curso, al igual que D´amaso, Eduardo ten´ıa que informarse acerca de las tecnolog´ıas y entornos. A pesar de que ambos se informaron paralelamente de ambas cosas, finalmente fue Eduardo el que m´as se informo acerca de los posibles entornos y el que junto a los directores del proyecto y con la aprobaci´on de D´amaso, decidieron elegir jupyter notebook como entorno de implementaci´on. Posteriormente, cuando ya se sab´ıa la tecnolog´ıa y el entorno a utilizar, fue Eduardo el que m´as esfuerzo inicial puso en informarse sobre el tratamiento del data frame mientras que D´amaso estaba m´as centrado en la parte de la interfaz. gr´afica. Eduardo hab´ıa cursado la asignatura de “Miner´ıa de Datos” en a˜nos anteriores y es por eso que ten´ıa m´as conocimientos acerca del tema y le cost´o menos trabajo inicial entender algunos conceptos. Por ello, inicialmente fue Eduardo quien comenz´o a desarrollar el back-end de la aplicaci´on. Desarrollo Como hemos comentado en el caso de D´amaso anteriormente, Al comenzar el proyecto y con la idea de tener algo funcional cuanto antes, Eduardo comenz´o a realizar el back-end de la aplicaci´on gracias a los conocimientos que hab´ıa adquirido en la asignatura optativa “Miner´ıa de datos” mientras D´amaso estaba m´as centrado en la parte del front-end. Por ello, comenz´o a tratar el data frame y a pensar c´omo se iban a implementar las redes neuronales. Obviamente, a la vez que iba desarrollando, iba ense˜nando a D´amaso para que ambos tuvieran conocimiento y pudieran trabajar en paralelo. Una vez que D´amaso ya obtuvo el conocimiento, durante un buen periodo, ambos miembros del equipo estuvieron trabajando de manera paralela en el tratamiento del data frame y en la implementaci´on de las redes neuronales.
CAP´ ITULO 11. CONTRIBUCI ´ ON DE CADA MIEMBRO 56 Como bien sabemos, para saber si una predicci´on se esta haciendo bien, hay que hacer mucho ensayo-error y por eso en esta ´epoca del proyecto se necesitaron reuniones constantemente para poder hablar con los directores del proyecto hasta que llegamos a unas redes neuronales que predec´ıan de manera aceptable. Una vez que ya ten´ıamos una aplicaci´on funcional, aunque no definitiva. Eduardo se centr´o en corregir fallos de la interfaz e intentar hacerla lo m´as amena y pr´actica posible. Por ´ultimo, cuando tanto las partes de las pruebas con las redes neuronales como las de la interfaz gr´afica estaban realizadas, Eduardo junto con D´amaso desarrollaron y finalizaron la parte del clasificador Random forest. Una vez que todo estaba desarrollado, ambos miembros del equipo dedicaron todo su tiempo a realizar pruebas y a corregir los posibles fallos. Gesti´on de versiones Las distintas versiones que se iban desarrollando tanto por parte de Eduardo como por parte de D´amaso se iban gestionando usando un repositorio en Github para que continuamente ambos tuvi´eramos acceso a todo, al igual que los directores. Documentaci´on La parte de la documentaci´on se realiz´o durante todo el proyecto de manera paralela al desarrollo por ambos miembros del equipo. Al final del proyecto, antes de entregar nada, se hizo una revisi´on de toda la documentaci´on y se solucionaron errores. La memoria se iba viendo con los directores del proyecto para poder obtener un feedback continuo y de esta manera poder ir corrigiendo errores.