En un artículo anterior explicamos por qué la inteligencia artificial es una de las tecnologías más relevantes del momento.

En esta ocasión vamos a desarrollar un sencillo motor de “scoring” de riesgo de crédito creando una red neuronal, entrenándola y posteriormente poniéndola a prueba. El objetivo del artículo es mostrar las fases que se llevan a cabo cuando se construyen estos sistemas.

Deep Learning

Ciclo de creación de un sistema de Inteligencia Artificial [Fuente: NVidia AI Blog]

Los motores de “scoring” son utilizados por entidades financieras para evaluar las solicitudes de crédito de sus clientes. Los analistas de riesgo establecen una serie de reglas que son las que se evalúan en una solicitud de un cliente para determinar si se presta o no el dinero solicitado.

La ventaja de la utilización de una red neuronal frente a los sistemas tradicionales de reglas es que, si se diseña una arquitectura de neuronas precisa y se entrena con un dataset adecuado de solicitudes previas, es posible ajustar la concesión de crédito a la que exactamente los clientes pueden hacer frente reduciendo las denegaciones y el impago.

Pese a que no es la tecnología más habitual para desarrollos de inteligencia artificial, para este ejemplo vamos a utilizar Javascript por ser un lenguaje de programación ampliamente conocido. Usando la librería Neataptic vamos a programar una sencilla red neuronal.
El código desarrollado se ejecutará en un entorno NodeJS.

Diseño de la red neuronal

El diseño de la arquitectura de la red neuronal es clave para obtener unos buenos resultados. Este consiste en determinar el número de capas de las que va a constar y el número de nodos en cada una de ellas. Además, si queremos simular memoria en nuestra red, podemos conectar nodos de una capa con los de las capas anteriores y retro alimentarlos.
Para nuestro ejemplo vamos hacer el diseño más sencillo, un perceptrón multicapa:

  • Una capa de entrada con el mismo número de nodos que características  (columnas) tiene nuestro dataset, en este caso 5.
  • Una capa intermedia (u oculta) con 3 nodos. La configuración del número de capas intermedias junto con el número de nodos en cada una de ellas depende del objetivo de la red neuronal y forma parte del estudio de los expertos en redes neuronales. Para nuestro dataset de prueba esta configuración se ha demostrado correcta.
  • Un capa de salida con un nodo que nos va a decir la probabilidad de impago de la solicitud.

En este código creamos la red neuronal:

 

Selección de características

El siguiente paso es seleccionar las características del dataset de datos con las que queremos entrenar a nuestra red neuronal. Una selección adecuada permite mejorar el aprendizaje disminuyendo el tiempo necesario para el entrenamiento de la red y elimina “ruido” si esas características no tienen datos adecuados. En la actualidad, con el incremento de potencia en el hardware que procesa las redes neuronales es un paso que tiende a eliminarse y se intenta procesar toda la información que se dispone ya en ocasiones se descartan variables que finalmente sí son relevantes .Por ejemplo, el dispositivo desde el que cliente   realiza la solicitud de financiación aparentemente no debería afectar a la capacidad de pago del solicitante, sin embargo, algunas entidades de crédito creen que no es así.

 

Normalización del dataset

El siguiente paso es normalizar el dataset de datos, para nuestro ejemplo supongamos que tenemos el siguiente histórico de préstamos:

Importe Finalidad Sexo del Solicitante ¿Terminó en impago?
1000 Viajar Mujer No
60000 Viajar Mujer
4000 Compra vehículo Mujer No
50000 Compra vehículo Mujer
5000 Viajar Mujer No
40000 Viajar Hombre
8000 Compra vehículo Hombre
45000 Compra vehículo Hombre
2000 Viajar Hombre No
55000 Viajar Hombre

Tras normalizar la información obtenemos el siguiente dataset (suponemos que el máximo importe que se puede solicitar un préstamo son 100.000 euros):

Entradas Salida
Importe Viaje Compra vehículo Hombre Mujer Impago
0.01 1 0 0 1 0
0.6 1 0 0 1 1
0.04 0 1 0 1 0
0.5 0 1 0 1 1
0.05 1 0 0 1 0
0.4 1 0 1 0 1
0.8 0 1 1 0 1
0.45 0 1 1 0 1
0.02 1 0 1 0 0
0.55 1 0 1 0 1

Creamos el dataset de entrenamiento normalizado:

 

Entrenar la red neuronal

Con el conjunto de datos normalizado el siguiente paso es entrenar a la red neuronal, para ello lo que se suele hacer el dividir los datos en dos mitades. Con la primera mitad se entrena la red neuronal con una configuración determinada y tras este proceso se utiliza la segunda mitad del dataset para probarla. La red neuronal procesa las entradas de la segunda mitad y el resultado se compara con el que se obtuvo en el histórico. En caso de ser similar podemos establecer que la configuración de la red es la adecuada. Generalmente, es necesario realizar múltiples ciclos de entrenamiento hasta ajustar la red neuronal y así obtener el máximo porcentaje de éxito.

El conjunto de datos necesario para el entrenamiento de una red neuronal para los  casos de uso reales, por ejemplo la clasificación de objetos en una imagen, así como la arquitectura (número de capas y nodos que la componen) de la misma, obligan a largos periodos de entrenamiento por lo que la capacidad de cálculo del hardware es muy relevante.

Se puede obtener más información de los parámetros de entrenamiento aquí. A continuación  vemos el código de la configuración que hemos establecido:

 

Durante el entrenamiento de la red vemos una traza con las diferentes iteraciones que hace la red para determinar los pesos de cada nodo de la red.
Ejemplo de código
 

Tras entrenar la red neuronal, la probamos con la segunda mitad del dataset y  comprobaremos que los resultados proporcionados por la red neuronal son similares a los del dataset de prueba.

El resultado es:

Ejemplo de código

En el caso de la primera solicitud, la red nos indica que con un 69% de probabilidad la solicitud terminará en impago, mientras que el dataset nos indica que terminó en impago. Interpretando el resto de los resultados de la misma forma daremos el entrenamiento por suficientemente bueno, ya que los resultados de la red neuronal son similares al resultado del dataset de prueba.

 

Pongamos a la red neuronal a trabajar

El siguiente paso es utilizar la red neuronal entrenada para determinar si las nuevas solicitudes de financiación van a terminar en impago.

Hemos construido un sistema que nos permite evaluar solicitudes sin haber tenido que programar reglas de decisión, el sistema ha aprendido “por el ejemplo”, ajustando la relevancia de las variables de entrada. Las nuevas solicitudes, ya evaluadas por la red neuronal, deberían usarse para nuevos ciclos de entrenamiento del sistema y así mejorar el aprendizaje del mismo.

En este artículo hemos visto todas las fases de creación de un sistema de aprendizaje basado en redes neuronales, desarrollando un trivial sistema de scoring de riesgo. El código completo del ejemplo se puede encontrar en este repositorio de Bitbucket.