Evaluación del riesgo crediticio mediante árboles de...

107
Trabajo Fin de Grado Grado en Ingeniería de Tecnologías Industriales Evaluación del riesgo crediticio mediante árboles de clasificación y bosques aleatorios Autora: Patricia Pino Cubiles Tutora: Ester Gutiérrez Moya Payán Somet Dep. Organización Industrial y Gestión de Empresas I Escuela Técnica Superior de Ingeniería Sevilla, 2017

Transcript of Evaluación del riesgo crediticio mediante árboles de...

Page 1: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

Trabajo Fin de Grado

Grado en Ingeniería de Tecnologías Industriales

Evaluación del riesgo crediticio mediante

árboles de clasificación y bosques aleatorios

Autora: Patricia Pino Cubiles

Tutora: Ester Gutiérrez Moya

Payán Somet

Dep. Organización Industrial y Gestión de Empresas I

Escuela Técnica Superior de Ingeniería

Sevilla, 2017

Page 2: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

1

Page 3: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

2

Trabajo Fin de Grado

Grado en Ingeniería de Tecnologías Industriales

Evaluación del riesgo crediticio mediante

árboles de clasificación y bosques aleatorios

Autora:

Patricia Pino Cubiles

Tutora:

Ester Gutiérrez Moya

Profesora Titular de Universidad

Dep. de Organización Industrial y Gestión de Empresas I

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

Page 4: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

3

Page 5: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

4

Índice 1. Introducción .......................................................................................................................... 6

2. Conceptos básicos del Aprendizaje Estadístico Supervisado .............................................. 10

3. Árboles de clasificación ...................................................................................................... 17

3.1 Concepto y características de los árboles de clasificación .......................................... 17

3.2 Conceptos asociados al árbol ...................................................................................... 18

3.3 Elementos necesarios en el algoritmo de construcción ............................................... 20

3.4 Poda del árbol (Pruning) ............................................................................................. 23

3.4.1 Secuencia de subárboles ...................................................................................... 24

3.4.2 Selección del árbol óptimo .................................................................................. 25

3.5 Ventajas y desventajas de los árboles.......................................................................... 29

4. Bosques aleatorios (“Random Forests”) .............................................................................. 31

5. Aplicación a una base de datos de microcréditos ................................................................ 37

5.1. Descripción de la base de datos ........................................................................................ 37

5.2. Lectura y preparación de los datos con R ......................................................................... 40

5.3. Construcción de un árbol de clasificación ........................................................................ 43

5.4. Construcción de un modelo Bosque Aleatorio ................................................................. 58

6. Aplicación a una base de datos de créditos concedidos en Alemania a personas físicas. ... 63

6.1 Descripción de la base de datos ......................................................................................... 63

6.2 Tratamiento de datos no balanceados ................................................................................ 65

6.3. Construcción de modelos de clasificación sin aplicar procedimientos de muestreo para

datos no balanceados ............................................................................................................... 67

6.3.1. Árbol de clasificación ................................................................................................. 67

6.3.2. Bosque Aleatorio ....................................................................................................... 71

6.4. Construcción de modelos de clasificación aplicando procedimientos de muestreo para

datos no balanceados ............................................................................................................... 75

6.4.1. DownSampling .......................................................................................................... 75

6.4.2. Remuestreo en la clase minoritaria (“UpSampling”) ................................................ 83

6.4.3 Umbrales de decisión alternativos ............................................................................. 92

6.5. Resultados de los distintos métodos ............................................................................... 101

7. Conclusiones y posibles aplicaciones futuras ................................................................... 103

8. Referencias bibliográficas ................................................................................................. 105

Page 6: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

5

Page 7: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

6

1. Introducción

En los últimos años la Ciencia Estadística ha tenido que adaptarse a los nuevos retos y

problemas derivados de la ingente cantidad de información y datos generada en los

distintos sectores económicos. La estadística actúa como vehículo para el procesamiento

y análisis con el objetivo de poder determinar patrones y tendencias del conjunto de

datos.

Estos procesos son conocidos con diversos nombres entre los que destacan: Aprendizaje

Estadístico, Aprendizaje Automático, Minería de Datos, Ciencia del Dato, Big Data,

Descubrimiento del Conocimiento en Bases de Datos, conocido también mediante sus

siglas en inglés, KDD, Knowledge Discovery in Databases.

Estos nuevos retos en el tratamiento de la información requieren una elevada carga

computacional configurándose la Minería de Datos como un campo multidisciplinar

donde se producen contribuciones desde áreas diversas: Ciencias de la Computación,

Estadística, Inteligencia Artificial, Ingeniería, Bioinformática, Geoestadística, entre

otras.

La Teoría del Aprendizaje Estadístico se caracteriza por tener en cuenta aspectos

propios de la Ciencia Estadística: estimación, análisis de sesgos y varianzas,

procedimientos inferenciales, etc.

El término Aprendizaje Estadístico (también denominado mediante el anglicismo

Statistical Learning) incluye un amplio conjunto de herramientas para extraer

información a partir de conjuntos de datos. Estas herramientas pueden clasificarse según

sea el objetivo del análisis de los datos, como técnicas supervisadas y no supervisadas.

En términos generales, el Aprendizaje Estadístico Supervisado se refiere a la

construcción de modelos de predicción, donde se desea estimar el valor de una o más

variables objetivo (variables dependientes) a partir de un conjunto de variables

predictoras. Este tipo de modelos se utilizan en diversas áreas, como Economía,

Medicina, Ingeniería, Astrofísica o Medio Ambiente. Cuando se tiene una variable

dependiente de tipo categórico se habla de problemas de clasificación, mientras que en

situaciones donde la variable respuesta es cuantitativa se tiene un problema de

regresión. A continuación se presentan algunos ejemplos prácticos.

Problemas de Clasificación:

Determinar si un correo electrónico es no deseado (“spam”).

Identificar caracteres a partir de la digitalización de un texto.

Decidir sobre la concesión de un crédito.

Mejorar el rendimiento de una red operacional.

Page 8: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

7

Regresión:

Predecir el nivel de contaminación por CO2.

Predecir el nivel de ingresos de un trabajador.

Predecir la demanda de energía eléctrica.

En el Aprendizaje Estadístico No Supervisado no existe la división entre variables

predictoras y variables dependientes. El Análisis de Conglomerados, donde se desea

particionar el conjunto de casos en grupos homogéneos, es un ejemplo típico de

Aprendizaje No Supervisado.

Aunque el término Aprendizaje Estadístico es reciente, la mayoría de los conceptos que

componen su base fueron desarrollados hace varios siglos. A principios del siglo XIX,

Legendre y Gauss publicaron documentos sobre el método de los mínimos cuadrados,

que sirvió como método de estimación de parámetros en la Regresión Lineal. Esta

técnica se aplicó inicialmente en problemas de Astronomía y en general, se puede

utilizar para predecir variables cuantitativas, por ejemplo para predecir el salario de los

trabajadores. Legendre, aunque no fue el primero en utilizar el método, sí fue el primero

en publicarlo en su obra (Nouvelles méthodes pour la determination des orbites des

comètes, 1805).

La polémica entre Gauss y Legendre acerca de la prioridad sobre el método de los

mínimos cuadrados es muy notoria en la historia de la Estadística y son muchos los

científicos posteriores (Plackett 1972, Stigler 1981, Celmins 1998, etc.) que han tratado

de dilucidarla, sin llegar a una conclusión definitiva.

Gauss trató de probar la aplicación del método de los mínimos cuadrados antes de 1805,

pero no tuvo demasiado éxito, tan sólo el astrónomo Olbers incluyó, en un artículo de

1816, una nota a pie de página asegurando que Gauss le había enseñado el método de

los mínimos cuadrados en 1802. Bessel publicó una nota similar en un trabajo en 1832.

En 1936, Fisher propuso el Análisis Discriminante Lineal para construir reglas de

clasificación, que verifica condiciones de optimalidad bajo las hipótesis paramétricas

de normalidad multivariante y homocedasticidad.

Durante la década de los 40, varios autores propusieron una alternativa, la Regresión

Logística, orientada a problemas de clasificación con cuando la variable respuesta toma

dos valores (variable binaria). Este modelo es de uso habitual en Medicina.

En los años 70 apareció el término Modelos Lineales Generalizados, que abarcan un

amplio conjunto de métodos estadísticos, incluyendo como caso particular a los

modelos de Regresón Lineal y Regresión Logística. A finales de la década de los 70 se

disponía de más técnicas, pero en general eran de carácter lineal, ya que el ajuste de

modelos no lineales, por ejemplo las redes de neuronas artificiales o las máquinas de

Page 9: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

8

vectores soporte, requerían recursos computacionales que aún tenían que desarrollarse y

ser accesibles a la comunidad científica.

A partir de los años 80 se produce un aumento vertiginoso en las prestaciones de los

equipos informáticos, lo que posibilitó el desarrollo y aplicación de técnicas no lineales.

Breiman et al. (1984) presentaron la metodología CART (“Classification and

Regression Trees”) para la construcción de árboles de clasificación y regresión. Esta

metodología es el objetivo principal de este trabajo, ofreciendo un marco riguroso para

un desarrollo estadísticamente aceptable de este tipo de modelos, incluyendo aspectos

prácticos como el uso de validación cruzada para la determinación del tamaño final del

árbol.

La mejora de las prestaciones de los equipos informáticos ha posibilitado en los últimos

años el desarrollo de las técnicas de combinación de modelos. En estas técnicas se

construyen cierto número de modelos base sobre nuevas muestras generadas a partir del

conjunto de datos original. Para obtener la clasificación de un caso, las distintas

clasificaciones son agregadas mediante votación, o bien mediante la media de las

predicciones en problemas de regresión. En este trabajo también se presentará una

técnica de combinación de árboles, llamada Bosques Aleatorios (“Random Forests”)

que ofrece buenos resultados en muchas aplicaciones.

La construcción de todos estos modelos requiere una aplicación informática apropiada.

En este trabajo se utilizará el entorno de programación estadística R, (R Core Team,

2017), un producto de libre distribución bajo la GNU General Public License. R ofrece

un amplio conjunto de librerías que permiten construir la gran mayoría de técnicas de

Aprendizaje Estadístico, y además la comunidad de usuarios mantiene constantemente

actualizada esta plataforma de computación estadística.

Por tanto, los principales objetivos de este trabajo son los siguientes:

Describir la metodología CART para la construcción de árboles de clasificación

y regresión.

Estudiar la técnica de agregación de árboles Random Forest.

Construir de forma efectiva estos modelos sobre varios conjuntos de datos

mediante la aplicación informática R.

En el capítulo 2 se presentan algunos conceptos básicos del Aprendizaje Estadístico

Supervisado. El capítulo 3 describe con detalle la metodología CART. El capítulo 4

incluye dos casos prácticos de construcción de árboles de clasificación con la ayuda de

Page 10: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

9

la aplicación informática R. El capítulo 5 se dedica a los Bosques Aleatorios, que son

aplicados en el capítulo 6 a los mismos datos del capítulo 4, también con R. Finalmente,

se incluyen las referencias citadas en el texto.

Page 11: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

10

2. Conceptos básicos del Aprendizaje Estadístico Supervisado

En este capítulo se presentan diversos aspectos relacionados con la evaluación de la

calidad de un modelo estadístico de predicción, ya sea de una variable cualitativa

(problema de clasificación) o una variable cuantitativa (problema de regresión).

Se supone que la construcción del modelo se realiza en un contexto de Aprendizaje

Supervisado (se dispone de un conjunto de datos donde se conocen tanto las variables

predictoras como la variable dependiente). Desde el punto de vista estadístico, el

conjunto de datos es una muestra aleatoria simple , y , i 1,2,..,nn i iT x donde ix

denota una realización del vector aleatorio que contiene las variables predictoras,

mientras que yi es una realización de la variable aleatoria objetivo Y, siendo n el

tamaño de la muestra disponible.

Se considera un modelo de predicción g X para predecir la variable dependiente 𝑌,

en este trabajo será un árbol de clasificación. En general, los modelos predictivos

dependen de un vector de coeficientes o parámetros que debe ser estimado de forma

apropiada. Por ejemplo, en Regresión Lineal Múltiple los coeficientes que definen la

combinación lineal de las variables predictoras se suelen estimar por mínimos

cuadrados. En general se tendrá una medida del error de predicción ,L Y g X .

Algunas medidas usuales cuando 𝑌 es cuantitativa (problemas de regresión) son el error

cuadrático 2

Y g X y el error absoluto Y g X . Para variables objetivo

categóricas (problemas de clasificación) las medidas más habituales son:

Función pérdida 0-1, definida como , 1L Y g X si la predicción g X es diferente

al valor real 𝑌, , 0 L Y g X si la predicción es correcta.

Función Log-Verosimilitud (también llamada Entropía Cruzada o Desviación), que se

define como sigue, siendo K el número de categorías de la variable Y:

1

1

2 log / 2 log ; max ˆ /ˆ ˆK

Yk K

k

I Y k P Y k X b P X g X P Y k X

donde 1I u si u es cierto, 0 en otro caso.

Definición. Dado un modelo de predicción g X , construido a partir de un conjunto de

dato , , 1,2,..,n i iT x y i n , se define el error empírico o error de entrenamiento

Page 12: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

11

1

1 ( , )ˆ

n

n

T i i

i

V L y g xn

Sin embargo, la calidad del modelo construido depende de su capacidad de generalizar,

es decir, del rendimiento que cabe esperar ante nuevas observaciones de la población

estudiada.

Definición. Dado un modelo de predicción ( )g x , ajustado sobre un conjunto de

entrenamiento nT , se define el error de generalización

,

/ˆ,nT nX Y

Err E L Y g X T

El error empírico tiende a ser inferior al error de generalización, debido al uso de los

mismos datos para ajustar el modelo y para estimar el error, por lo que se dice que es un

estimador optimista del error de generalización. Por tanto, la estimación del rendimiento

de un modelo de predicción no puede efectuarse sobre la muestra de entrenamiento, ya

que la medida resultante es sesgada y no ofrece una estimación fiable de la capacidad de

generalización del modelo. Por tanto conviene disponer de otros mecanismos para

evaluar el rendimiento del modelo. Por ejemplo, disponer de otra muestra, llamada

muestra o conjunto test o de prueba, donde se evalúe el rendimiento. En general se

particiona el conjunto de datos en dos partes, una se dedica al ajuste del modelo, y se le

llama conjunto de entrenamiento. El modelo es posteriormente aplicado sobre el resto

de casos, que forman el conjunto test, obteniendo así una estimación insesgada del error

de generalización.

Otro aspecto práctico de gran importancia en el proceso de construcción de modelos de

predicción radica en la configuración apropiada del tamaño del modelo. De forma

general la mayoría de modelos del Aprendizaje Estadístico dependen de uno o más

parámetros que configuran el tamaño o complejidad del modelo resultante. Por ejemplo,

el tamaño de la capa oculta en un perceptrón multicapas o el número de nodos

terminales en un árbol de clasificación o regresión. No por aumentar la complejidad del

modelo se tendrá un mejor rendimiento esperado. De hecho, los modelos de gran

complejidad suelen presentar el problema del sobreajuste: el rendimiento es muy bueno

en la muestra de entrenamiento, pero muy pobre en la muestra test. Esta problemática

presente en la selección de la complejidad de un modelo también es conocida como el

dilema sesgo-varianza, el cual se ilustra a continuación.

Sea un modelo poblacional ( )Y f X con [ ] 0E , 2[ ]Var . Se considera un

modelo de predicción g X , que depende de un vector de parámetros 𝑤, estimados a

Page 13: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

12

partir de una muestra de entrenamiento nT . Dado 0x , suponiendo el criterio error

cuadrático, el error esperado de predicción en 0x , es:

2

0 0 0ˆ / e x E Y g x X x

2 2

2

0 0 0 0 E g x f x E g x E g x

2 2

0 0 Sesgo g x Var g x

El primer término es un error irreducible, mientras que los términos cuadrado del sesgo

y varianza dependen de la complejidad del modelo.

A mayor complejidad del modelo, menor es el sesgo (más acertado es el valor medio de

la predicción), pero mayor es la varianza (lo que disminuye su fiabilidad).

A menor complejidad, mayor es el sesgo, pero a cambio se reduce la varianza.

Por tanto, no se pueden reducir simultáneamente ambos componentes del error de

predicción. La figura 2.1 describe el comportamiento del error de predicción en los

conjuntos de entrenamiento y test según la complejidad del modelo.

Figura 2.1 Ilustración del dilema sesgo-varianza. Elaboración propia

La figura 2.1 pone de manifiesto que lo ideal sería encontrar aquel punto donde se

produzca el mejor compromiso entre sesgo y varianza. Para ello no se puede realizar un

recorrido de valores sobre el parámetro de complejidad en el conjunto test, ya que en

ese caso el conjunto test también intervendría en el proceso de aprendizaje del modelo,

Page 14: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

13

lo que invalidaría la fiabilidad del error test para estimar la capacidad de generalización

del modelo. En aquellos casos en los que se disponga de un conjunto de datos

suficientemente grande, lo recomendable (Hastie et al., 2009) es realizar una partición

aleatoria de la muestra disponible. La división ideal es la siguiente:

Conjunto de Entrenamiento: Se utiliza para ajustar los modelos.

Validación: Para determinar la complejidad del modelo.

Test: Se deja aparte y sólo se utiliza para estimar el error de generalización del modelo

finalmente seleccionado.

Tamaños usuales para los subconjuntos son 50%, 25%, 25%, y 60%, 20%, 20 %.

Si por ejemplo se va a construir un perceptrón multicapas con una capa oculta, se podría

realizar el siguiente algoritmo.

Para 1,2, ,h H construir un perceptrón multicapas con h nodos ocultos sobre el

conjunto de entrenamiento. Calcular el error de predicción de ese modelo sobre el

conjunto de validación.

Siguiente h. Elegir aquel valor de h que conduce al menor error en el conjunto de

validación, sea *h .

Finalmente, aplicar el modelo con *h nodos ocultos sobre el conjunto test, obteniendo

así una estimación insesgada del error de generalización (este modelo se puede ajustar

sobre la unión de los conjuntos de entrenamiento y validación).

Si la muestra disponible no es suficientemente grande, la anterior división puede

conducir a submuestras excesivamente pequeñas. Una alternativa es recurrir a

procedimientos de validación cruzada. La idea es aproximar la estimación que

proporciona el conjunto de validación mediante un proceso de remuestreo sobre el

conjunto de entrenamiento. Para ello se realiza k veces una partición del conjunto de

entrenamiento en dos partes: conjunto de estimación y conjunto de validación.

Dado un modelo con una determinada complejidad, para cada partición se ajusta el

modelo sobre el conjunto de estimación y se mide el error sobre el conjunto de

validación. La media de los k errores de validación proporciona una estimación del

error de validación para la complejidad considerada. La figura 2.2 ilustra este proceso.

Como caso particular, k=n conduce a la aplicación de una técnica de remuestreo

llamada Jackknife, también aparece el término LOO (“Leave One Out”).

También se puede utilizar este procedimiento para estimar el error de generalización, si

bien en este caso la complejidad ya estaría fijada previamente, por ejemplo mediante el

uso de criterios de información. Mientras mayor sea k, menor es el sesgo del estimador,

pero a cambio mayor será su varianza, y al contrario. Habitualmente, se toma k=10.

Page 15: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

14

Figura 2.2. Ilustración del proceso de validación cruzada. Elaboración propia

Otro aspecto importante de la construcción de modelos predictivos es el cálculo de

medidas del rendimiento del modelo. Se presentan a continuación las medidas que se

utilizarán en este trabajo para evaluar la calidad de los modelos de clasificación binarios

(la variable respuesta presenta dos categorías).

Las dos categorías de la variable respuesta pueden ser representadas como valor

positivo y negativo. En general, la clase positiva es la clase de “más interés”, por

ejemplo en un modelo para detectar correos electrónicos “spam”, los ejemplos positivos

serían los correos “spam”. Al cruzar los valores reales de la variable respuesta con las

predicciones ofrecidas por el modelo, sobre un conjunto de datos como el conjunto test,

se obtiene una tabla de doble entrada como la visualizada en la tabla 2.1.

Tabla 2.1 Ejemplo de tabla resultante del cruce de una variable respuesta y las predicciones de un modelo.

Predicción

Ejemplo

Predicciones

positivas

Predicciones

negativas

Totales

Ejemplos

positivos

Verdaderos

Positivos

Falsos

Negativos

P

Page 16: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

15

Ejemplos

negativos

Falsos

Positivos

Verdaderos

Negativos

N

Totales Total de

predicciones

positivas

Total de

predicciones

negativas

N

Elaboración propia

La precisión o tasa de acierto se define como la proporción de casos correctamente

clasificados.

La sensitividad o sensibilidad, también denominada tasa de verdaderos positivos, es la

proporción de ejemplos positivos correctamente clasificados.

La especificidad o tasa de verdaderos negativos, es la proporción de ejemplos negativos

correctamente clasificados.

VP VN

Precisiónn

VP

SensitividadP

1 1VN FP

Especificidad TFPN N

Usualmente las reglas de clasificación se basan en la estimación de la probabilidad de

una clase de interés dado el vector de predictores. Suponiendo dos clases etiquetadas 0 y

1, y dado un valor punto de corte pc, la regla se puede expresar como

1 1/

0

ˆ

ˆ 1/

c

c

si P x p

Y

si P x p

Por tanto para cada punto de corte se tiene una regla de clasificación distinta, por lo que

le corresponderá una sensitividad y especificidad. La representación gráfica de la

sensitividad frente a los valores 1-tasa de especificidad recibe el nombre de Curva

Operativa Característica (COR, ROC “Receiver Operating Characteristic ”). El área

bajo la curva (AUC “Area under the curve”) es una medida del rendimiento del modelo

base de clasificación, de modo que cuanto más cercano a 1 mejor será el modelo base.

La figura 2.3 presenta un ejemplo de curva ROC y su área asociada.

Page 17: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

16

Figura 2.3. Ejemplo de curva COR. Elaboración propia

Page 18: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

17

3. Árboles de clasificación

De entre las distintas metodologías existentes para construir árboles de clasificación, en

este trabajo se utiliza la metodología CART (Breiman, 1984). En los siguientes

apartados se describe detalladamente el proceso de construcción de los árboles de

clasificación.

3.1 Concepto y características de los árboles de clasificación

Entre las diversas metodologías existentes para construir árboles de clasificación y

regresión, este trabajo utiliza la metodología CART de Breiman (1984), y la

implementación que ofrece el paquete rpart de R (Therneau et al. 2017)

Sea Y una variable respuesta cualitativa con K clases, modalidades o grupos 1,..., KC C

y sea 1 ,..., pX X X , p variables predictoras. El problema consiste en establecer una

relación entre Y variables respuesta y las 1,..., pX X variables predictoras, es decir,

determinar una función objetivo f tal que 1 ,..., pY X X , de modo que dado un caso

o individuo éste se pueda asignar a una de las clases con el menor error posible. Por

tanto, lo que se investiga es la determinación de una regla de decisión con el mayor

grado de acierto posible.

Para abordar este problema se necesita un conjunto de datos, que se dividirán

aleatoriamente en dos conjuntos: una muestra de entrenamiento o aprendizaje y una

muestra test. La muestra de entrenamiento se usará para entrenar el modelo, es decir,

para obtener un método que clasifique a un nuevo individuo en alguna de las

modalidades o grupos de la variable respuesta, mientras que la muestra test se usará

para estimar la capacidad de generalización del modelo construido.

Considere una muestra de aprendizaje, L, dada por:

1 1 , ,..., ,n nL x y x y

donde 𝑥𝑖 representa un elemento de la realización muestral de X , 1 ,...,i Ky C C y n el

tamaño muestral de L. Las variables predictoras X pueden tener naturaleza cualitativa o

cuantitativa.

El método que se utiliza en el presente trabajo consiste en realizar una partición del

espacio muestral de las variables predictoras a través de la obtención de un conjunto de

reglas de decisión. Este conjunto de reglas se puede representar gráficamente mediante

una figura que representa un árbol. De ahí, la denominación que adoptan estos modelos.

Page 19: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

18

El mecanismo de crecimiento de un árbol de clasificación se realiza mediante un

procedimiento de división binaria recursiva, el cual se explicará en apartados

posteriores. De esta forma se tendrá un conjunto de 𝑀 nodos terminales, asociados a

M regiones 1,..., MR R que constituyen una partición del espacio predictor, así que a

cada nodo (o región) se le asignará una de las clases con el objetivo de hacer una

predicción a partir de una observación dada.

Para el desarrollo del algoritmo de construcción, se presentan seguidamente varias

definiciones.

tn : Número de observaciones en el nodo t

( )n k : Número de observaciones pertenecientes a la clase , 1,2,kC k K .

k : 1, 2,..., :k K Probabilidades a priori, se definen como la probabilidad de que una

observación pertenezca a la clase k. Si son desconocidas, que es lo habitual, pueden ser

estimadas mediante las frecuencias relativas:

k

n k

n .

( )tn k : Número de observaciones de la clase kC pertenecientes al nodo t .

( )v X : Clase a la que pertenece un caso cuyo vector de variables predictoras es X.

:d t Decisión en el nodo t, para todo caso que pertenezca al nodo t.

3.2 Conceptos asociados al árbol

En este apartado se definen algunos conceptos relacionados con el árbol de clasificación

que serán de utilidad para el desarrollo del método.

– Probabilidad asociada al nodo : ,t p t Pr X t es la probabilidad de que una

observación se encuentre en el nodo t.

Si k son conocidas, se puede estimar mediante la expresión:

K

k 1

t

k

n kp t

n k

Si k son desconocidas, se utiliza como estimador:

K K

k 1 k 1

t t tn k n k n k n

p tn n k n n

Page 20: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

19

Se puede observar que, en este caso, ( )p t es la proporción de casos del conjunto

de entrenamiento que pertenecen al nodo 𝑡.

– Probabilidad de la clase kC dado el nodo t: ( | ) Pr[ | ]P k t v X k X t , es

decir, la probabilidad de que un individuo pertenezca a la clase 𝐶𝑘 sabiendo que

está en el nodo t.

Si k son conocidas, se puede estimar mediante la expresión:

1

( | )

t

k

K t

kk

n k

n kP k t

n k

n k

Si 𝜋𝑘 son desconocidas, se utiliza como estimador:

1

( | )

K t

kt

t t

n k n k

n n k n kP k t

n n

n

Luego, en el último caso, ( | )P k t es la proporción de casos de entrenamiento

del nodo t que pertenece a la clase KC

En general, la regla de decisión en cada nodo viene definida por la clase más probable

en ese nodo. Es decir:

Cualquier caso perteneciente al nodo t es clasificado en la clase para la que se alcanza

el máximo de las probabilidades de las distintas clases:

1...( ) arg max ( | )k Kd t P k t

En caso de empate en las probabilidades, se elige aleatoriamente una de las clases de

máxima probabilidad.

El error de clasificación en el nodo t se puede medir a través la probabilidad de

clasificación incorrecta para el nodo t:

1 |r t P d t t

Este estadístico se conoce con el nombre de estimador por resustitución, y en general

representa la proporción de individuos del nodo t que no pertenecen a la clase ( )d t

Se define el riesgo del nodo t como:

Page 21: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

20

R t p t r t

La definición anterior se puede extender al árbol completo, de modo que el riesgo del

árbol T se define como el estimador por resustitución de la tasa de error esperada del

árbol de clasificación. Suponiendo 𝑀 nodos finales:

1 1

M M

t t

R T p t r t R t

3.3 Elementos necesarios en el algoritmo de construcción

En el apartado anterior se han introducido los conceptos básicos de los árboles de

clasificación. A continuación, se va a definir los elementos necesarios para la

construcción del árbol.

a) Un conjunto Ω de preguntas binarias para hacer las divisiones.

b) Un criterio para evaluar la bondad de las divisiones.

c) Una regla de parada.

d) Una regla para asignar una clase a un nodo terminal.

a) Un conjunto Ω de preguntas binarias para hacer la división.

Inicialmente, en el nodo raíz se encuentran las n observaciones de la muestra de

aprendizaje. El método consiste en dividir el conjunto de entrenamiento en dos. Para

ello se necesita un conjunto de preguntas binarias Ω y seleccionar la más óptima. De

esta forma se tienen dos nodos descendientes, uno a la izquierda Lt y otro a la derecha

tR, que en función de la respuesta a la pregunta, nos decantaremos por uno u otro.

Cada una de las divisiones va a depender de una única variable, que en función de su

naturaleza, tendrán un número diferente de posibles divisiones, de modo que:

Variables binarias, son del tipo 1/0, Sí/No, etc. Sólo existiría una posible

división.

Variables cuantitativas u ordinales, existen infinitas divisiones del tipo:

x c c R

Page 22: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

21

Aunque en principio existen infinitas divisiones de este tipo, se pueden

considerar una cantidad finita seleccionando los puntos medios entre dos

observaciones ordenadas de la muestra como posibles puntos de la división.

Variables nominales con B modalidades, las divisiones posibles son:

B B

2 B 1V R 2 2 2

2 12 2

Para seleccionar la división óptima en cada nodo la idea es encontrar la mejor

división. Para cada variable se compararían las p mejores divisiones de las

variables individuales y se selecciona la mejor entre todas ellas. Para todo ello

será necesario realizarlo según algún criterio que mida la bondad de las

divisiones.

b) Un criterio para evaluar la bondad de las divisiones.

Situados en el nodo t, una opción para elegir la mejor división sería seleccionar aquella

que produce una mayor reducción en el riesgo R T . Este criterio puede producir

árboles de bajo rendimiento, por tener muchos nodos finales. Por ello se introdujo el

término de funciones de impureza.

Una función impureza Φ se define en el conjunto de todas las K-tuplas de números (

1,..., kp p ) satisfaciendo 1

0, 1 , 1K

k k

k

p k K p

, con las propiedades:

Φ es un máximo sólo en el punto 1 1

, , K K

Φ logra su mínimo sólo en los puntos 1,0,..,0 , 0,1, ,0 , , 0,0, ,1

Φ es una función simétrica de 1 kp ,..., p

Dada una función de impureza Φ , se define la medida de impureza I t de cualquier

nodo t como:

( (1| ), (2 | ),..., ( | ))I t P t P t P K t

Situados en un nodo t, al realizar la división, una parte de los datos se asigna a la rama

derecha Rt con probabilidad RP t y otra a la rama izquierda Lt con probabilidad

LP t , de forma que, la disminución de la impureza en el nodo t es:

Page 23: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

22

∆I(t)= P(t) I(t) – P( Rt ) I( Rt ) – P( Lt )I( Lt )≥0

.

Por tanto, para determinar la división del nodo t, se elegirá la división en la variable que

maximice la reducción de la impureza ∆I.

Existen numerosas funciones de impureza, pero las más habituales son el índice de

diversidad de Gini y la entropía.

– Índice de diversidad de Gini: Dado 1 k(p ,..., p ) se define el índice de diversidad

de Gini como:

2

1

1

, , 1 K

k k j k

k j k

p p p p p

– Entropía: Dado 1 k(p ,..., p ) se define su entropía como:

1

1

, , log( )k k k

k

p p p p

En el caso en que 0kp , se considera 0 log0 = 0.

Una vez realizadas todas las consideraciones, se procede a la construcción del

árbol de construcción.

Para ello, se deben seguir los siguientes pasos:

1. Determinar el nodo raíz, que incluye todos los individuos del conjunto de

entrenamiento.

2. Determinar el par ( , )s t donde s es (variable, división), es decir, la variable

y el punto por donde se realiza la división y t es el nodo donde la queremos

llevar a cabo.

3. Aplicar a cada nodo el paso anterior, hasta que se verifiquen las condiciones

de finalización, punto que vemos a continuación.

c) Una regla de parada

En el proceso de construcción del árbol se necesita un criterio que determine una regla

de parada. Esta regla marcará las condiciones que se tienen que cumplir para que un

nodo no se divida y por tanto sea terminal. En principio podría incluso lograrse un árbol

con un nodo final por cada observación, pero en tal caso se obtiene un modelo muy

Page 24: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

23

complejo, que aunque tendría ( ) 0R T , su capacidad de generalización sería baja. En

este caso, se dice que el modelo está sobreajustado a los datos.

Algunos criterios de parada que se podrían considerar son:

1. Mínimo número de casos que debe haber en un nodo para intentar dividirlo

en dos nodos hijos.

2. Mínimo número de casos en un nodo terminal.

3. Las divisiones deben producir una reducción mínima de la función impureza.

Esto es, establecemos un umbral 0 , se declara un nodo terminal t si:

max s S ∆I (s,t) <

donde S es el conjunto de todos los pares (variable, división) que se han

realizado en el árbol.

Supóngase que se han realizado algunas divisiones y hemos llegado a un conjunto de

nodos terminales. El conjunto de divisiones usadas, junto al orden en que hemos hecho

las divisiones determina lo que llamamos un árbol binario T.

d) Una regla para asignar una clase a un nodo terminal

Por último, se requiere una regla de asignación. Para ello se seleccionará una clase que

verifique:

Si tx R se asigna a la clase dC t para la que se alcanza: 1

max ( | )k K

p k t

Para evitar los inconvenientes detectados en el método, tales como el excesivo tamaño

del árbol que conlleva que se ajusta muy bien a los datos con los que ha sido construido,

pero es ineficiente con un conjunto de datos nuevo, se introduce el concepto de poda del

árbol con idea de obtener un modelo mejor.

3.4 Poda del árbol (Pruning)

El tamaño del árbol (número de nodos terminales) es un parámetro que controla la

complejidad del modelo. Un árbol muy pequeño puede que no capture la estructura de

los datos y un árbol muy grande puede sobreajustarse a los datos.

Page 25: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

24

Una vez construido un árbol 0T , según se describió en el apartado anterior, se procede a

la poda del mismo, cortando sucesivamente ramas o nodos terminales que representen

poco aporte a la explicación de la variable respuesta, encontrando así el tamaño

adecuado del árbol.

En primer lugar, hay que construir un árbol muy grande 0T permitiendo que el criterio

de división continúe hasta que la regla de parada del criterio de crecimiento del árbol

determine cuáles son los nodos terminales.

A continuación se procede a la poda que parte de un nodo 𝑡. La poda del árbol consiste

en eliminar de 0T todos los descendientes de dicho nodo, esto es, eliminar todo lo que

esté por debajo del nodo t, tal y, como se observa en la Figura 3.1; el árbol original 0T

es el de la izquierda y el árbol podado T el de la derecha. Si se alcanza un subárbol T a

partir de 0T por sucesivas podas de ramas, entonces T es llamado subárbol podado de

0T y denotado por 0 T T . Téngase en cuenta que 0T y T tienen el mismo nodo raíz.

Figura 3.1 Poda del árbol

3.4.1 Secuencia de subárboles

Debido a que un árbol se puede podar por cada uno de sus nodos de forma anidada,

existe una selección de subárboles con tamaño cada vez más pequeños. Una vez creada

la secuencia se tiene que seleccionar cuál es el mejor subárbol.

Page 26: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

25

Para ello se define el criterio de coste-complejidad. Este criterio está basado en

considerar una secuencia de árboles indexada por un parámetro de ajuste 𝛼 no negativo.

A cada 𝛼 le corresponde un árbol T ⊆ 𝑇0 tal que:

0

, min , siendo , T T

C T C T C T R T T

donde T es el tamaño de T y R T el riesgo del árbol que podría sustituirse por la

función impureza según se use para la construcción del árbol.

El parámetro α controla el compromiso entre el tamaño del árbol y el ajuste a los

valores dados. Valores altos de α conducen a un tamaño de árbol pequeño y viceversa.

Para cada valor de α, se encuentran subárboles 0 T T que minimizan ,C T .

Cuando 0 , entonces el subárbol T será igual a 0T , pues el árbol coincide con el

inicial.

A pesar de que los valores de α son infinitos, el número de subárboles es finito y se

denotará por m. Esto es debido a que para el intervalo , 1h h el árbol óptimo es el

mismo. De hecho, se puede obtener una familia anidada de subárboles

h

hT y una

serie de valores 1 1 m tales que

h

T T para todo , 1 h h ,

1, 1. h m

3.4.2 Selección del árbol óptimo

Una vez generada la secuencia de subárboles, debe elegirse uno de ellos. A

continuación, se debe disponer de un estimador insesgado del error esperado de cada

subárbol.

El método anterior crea una secuencia decreciente de subárboles anidados

0 1 1 ,T T t donde 1 t es el nodo raíz, es decir, el mínimo subárbol posible de 0T .

El siguiente problema que se plantea consiste en la selección del árbol óptimo.

Para ello, se tiene que seleccionar un árbol de la secuencia que será el que finalmente se

usará para futuros estudios. Para ello, se asocia una medida de error a cada árbol y se

elige aquél que tenga asociado un menor error.

Page 27: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

26

Se elige 0 0: min ,0k k k

T C T C T conC T C T

A continuación, por lo tanto se debe disponer de un estimador insesgado del error

(riesgo) esperado de cada subárbol. Este estimador se obtiene mediante validación

cruzada.

Para la construcción del estimador mediante validación cruzada de 𝑘 iteraciones (o k-

fold cross-validation), CVC T , se divide la muestra de aprendizaje L en 𝑘

subconjuntos.

Generalmente se considera el número de iteraciones k = 10, de modo que, para la

primera iteración, se entrena un modelo par k - 1 subconjuntos, dejando fuera el

primero, para posteriormente evaluarlo. Este proceso se lleva a cabo k veces. En la

Figura 3.2 se representa lo expresado anteriormente y representa un proceso de

validación cruzada de 10 iteraciones, en cada una de ellas el conjunto test (azul) va

cambiando y se realiza una estimación en cada caso. Finalmente, se hace una estimación

final ponderando cada una de las estimaciones.

Figura 3.2 Esquema de validación cruzada. Elaboración propia

Una vez que se tiene cada uno de los subconjuntos evaluados para las diferentes

iteraciones, se calcula la media de las 𝑘 medidas obtenidas a través de las iteraciones,

que denotaremos como CVC T . Es habitual utilizar este método cuando la muestra no

es lo suficientemente grande.

Page 28: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

27

A pesar de las mejoras introducidas en la técnica, este algoritmo es muy inestable, es

decir, una pequeña variación en el conjunto de datos conlleva un árbol totalmente

distinto.

El estimador C T en función del número de nodos terminales | |

kT , se comporta,

como se observa en la figura 3.3, donde se distinguen tres zonas diferenciadas: un

decrecimiento inicial, a continuación una zona relativamente constante, y por último

crece para valores más elevados de | |

kT .

El método de validación cruzada tiene un riesgo debido a que la estimación se hace en

función del conjunto de entrenamiento. Para evitar la inestabilidad del estimador es

recomendable calibrar la incertidumbre de CVC T mediante el cálculo del error

estándar (SE). El error estándar asociado al estimador CVC T , viene dado por:

1

| |

CV

CV CV

T

C TSE C T C T

L

donde TL es el subconjunto de los datos de la muestra test utilizados para construir el

árbol T.

En la Figura 3.3, se aprecia que el valor mínimo es muy inestable. Una solución

alternativa es seleccionar 1 SE (1 - error estándar) con el objetivo de reducir esta

inestabilidad a la vez que se asegura que el árbol seleccionado sea el más simple con

valor cercano al mínimo. En la Figura 3.4 se observa que el mínimo de (CVC T ) se

alcanza en 0k . A partir del mismo, se calcula 0K

CVSE C T y se selecciona aquel

punto que esté por debajo de la recta de SE con el mínimo número de nodos posibles,

en este caso es 1k .

Page 29: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

28

Figura 3.3 Estimador de 𝐶𝐶𝑉(𝑇) en función de los nodos terminales.

Figura 3.4 Estimador de 𝐶𝐶𝑉(𝑇) en función de los nodos terminales con el error estándar 𝑆𝐸

De modo que la regla 1- SE se formula de la siguiente manera:

Si 0K

T : 0K

CVC T = .minK

CVk

C T entonces se selecciona 1K

T con 1k tal que:

1k = max k: k

CVC T ≤ 0K

CVC T + SE ( CVC T )

Page 30: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

29

Por tanto, se selecciona el árbol más simple, que será el que tenga menos nodos

terminales (el árbol de mayor subíndice) y que no se desvía más de 1 SE del mínimo.

3.5 Ventajas y desventajas de los árboles

Una vez visto el procedimiento de construcción del árbol se describen algunos aspectos

deseables y no deseables de los modelos.

Entre las características deseables se pueden identificar las siguientes:

• Puede ser aplicado para cualquier estructura de datos a través de una

formulación apropiada del conjunto de cuestiones Ω.

• La clasificación final tiene una forma simple que puede ser almacenada de

manera compacta y clasifica eficientemente nuevos datos.

• La selección de variables se hace paso a paso, automático y reduciendo el coste

de complejidad. Se busca nodo a nodo hasta conseguir la división más

significativa. En cada etapa se intenta extraer la información más relevante de la

parte del espacio que se está trabajando.

• Proporciona, no sólo una clasificación si no también una estimación de la

probabilidad de clasificar un objeto erróneamente.

• Una estructura de datos estandarizados es invariante bajo transformaciones

monótonas de las variables continuas.

• Es muy robusto respecto a los outliers y los puntos mal clasificados en L.

• Es muy fácil su interpretación.

• Los árboles de decisión toma decisiones muy cercanas a las que tomaría un

humano.

• Se pueden visualizar gráficamente.

• Pueden manejar fácilmente predictores cualitativos sin la necesidad de crear

variables ficticias y las posibles interacciones se incluyen automáticamente.

• En conjunto de datos grandes puede revelar estructuras complejas.

• Es una metodología no paramétrica.

Page 31: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

30

Entre las características no deseables se pueden identificar las siguientes desventajas:

• Clasifica de manera aleatoria cuando tenemos valores perdidos.

• Aunque la optimalidad se aplique a cada división, esto no significa que el árbol

sea óptimo.

• Las variables predictoras continuas han de ser discretizadas.

• Es posible que las interacciones débiles se impongan a las más fuertes.

• Los árboles grandes tienen tendencias a sobreajustar a los datos.

• Son inestables, es decir, pequeños cambios en los datos iniciales pueden

producir árboles muy distintos.

Page 32: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

31

4. Bosques aleatorios (“Random Forests”)

Como se ha indicado en el apartado anterior, una de las desventajas de los árboles de

clasificación es su alta inestabilidad. Las técnicas de agregación o combinación de

modelos, en especial el procedimiento bagging y los modelos de Bosques Aleatorios

(“Random Forests”) reducen considerablemente esa inestabilidad.

Las técnicas de combinación de modelos consisten en la agregación de cierto número de

modelos para obtener una clasificación o predicción a partir de los distintos

clasificadores o predictores previamente generados.

La construcción de cada uno de los modelos elementales puede depender de aspectos

como los siguientes:

• Definición del conjunto de entrenamiento (muestras bootstrap, reponderación).

• Selección de variables.

• Elección del modelo (por ejemplo, todos árboles de decisión, o una mezcla de

modelos de distinta naturaleza).

Los modelos Random Forests se basan en las técnicas bagging, que se presentan en

primer lugar. El término bagging viene de “Bootstrap aggregating”, la técnica fue

propuesta por Breiman (1996).

Un concepto fundamental en este contexto es el de muestra bootstrap. Una muestra

bootstrap es una muestra aleatoria de tamaño n extraída con reemplazamiento a partir de

la muestra disponible. A continuación se define el procedimiento bagging en problemas

de regresión y clasificación.

Sea un conjunto de datos , 1,2, , i i iD D X Y i n y un modelo de predicción

g x para /E Y X x , con X p-dimensional e Y real. Se define el predictor bagged

como el valor esperado del predictor evaluado sobre muestras bootstrap:

* * *

1ˆ ˆ ˆ ; , ,bag ng x E g x E g x D D

Page 33: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

32

Este predictor requiere generar todas las muestras bootstrap posibles, lo cual puede ser

inviable en términos computacionales. En general se obtiene una aproximación

mediante la generación aleatoria de un número B de muestras bootstrap.

Algoritmo bagging (regresión)

Para 1, 2,..., b B

1. Generar una muestra bootstrap

2. Calcular * *

1ˆ ; , ,b b

ng x D D

3. Aproximar el predictor bagged mediante * *

, 1

1

ˆ ˆ1

; , ,B

b b

bag B n

b

g x g x D DB

En problemas de clasificación el clasificador agregado se calcula a partir de la votación

de los B clasificadores generados:

* *

1* * *

1

# ; , , , ,

ˆ

b b

n

k j

g x D D jg g g

B

*

, maxˆbag B j

jg x arg g

Una alternativa es trabajar con las estimaciones de las probabilidades, considerar para

cada clase la media de las B probabilidades así calculadas y tomar finalmente la clase de

máxima probabilidad media. En nuestro trabajo se considera la primera versión, y se

recomienda que el número B de muestras bootstrap sea al menos 100.

El bagging tiende a diminuir la varianza del predictor, sobre todo con modelos “poco

estables” como los árboles de decisión o las Redes de Neuronas Artificiales: Breiman

(1996).

ˆbagvar g x var g x

Como inconveniente presenta cierta tendencia a aumentar el sesgo cuadrado, pero no

impide la tendencia a la disminución del Error Cuadrático Medio.

Page 34: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

33

La estructura de las muestras bootstrap permite obtener un estimador insesgado del error

de predicción aunque no se disponga de conjunto test. Este estimador, conocido como

estimador OOB (“Out Of Bag” ) se basa en el aprovechamiento de las observaciones no

incluidas en cada muestra bootstrap.

En un problema de clasificación con K clases, se obtiene de la siguiente forma:

Sea un conjunto de entrenamiento , , 1,2,..., ,i i iD D X Y i n donde las clases de

cada caso se identifican mediante las iY .

Algoritmo:

Para b=1 hasta B

1. Generar una muestra bootstrap 𝐷∗ del conjunto 𝐷.

2. Sea */ b i iD D D D D D *

2.1 Construir el modelo bA sobre *D

2.2 Aplicar bA a cada elemento de bD

3. Siguiente b

3.1 Para cada caso iD se consideran las predicciones para dicho caso

proporcionadas por aquellos modelos en cuyo conjunto de entrenamiento no

se incluye iD .

3.2 De forma similar al procedimiento de validación cruzada, se obtiene la

predicción agregada para iD mediante la clase donde más veces es clasificado

dicho caso por los modelos indicados en el párrafo anterior.

1,2, ,

arg max # / i b i i bj K

V A X j D D

4. Se define el estimador OOB : 1

1 n

i i

i

OOB I Y Vn

Por tanto la tasa de error OOB es la proporción de casos cuya clasificación más

frecuente no coincide con su clase real, entre los modelos ajustados sobre muestras

bootstrap que no lo incluyen.

Page 35: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

34

Breiman (2001) propuso el algoritmo de los Bosques Aleatorios (Random Forests) a

partir del método bagging. En el paquete randomForests de R (Liaw y Wiener, 2002)

por defecto se construyen 500 árboles. La construcción de cada árbol, dado un conjunto

de entrenamiento de tamaño n con p variables predictoras, se realiza según las

siguientes indicaciones:

1. Seleccionar una muestra con reemplazamiento de tamaño n de la muestra

de entrenamiento (bootstrap)

2. En cada nodo del árbol construido en cada muestra bootstrap, se eligen

aleatoriamente m p variables predictoras, y se elige la mejor división

entre esas m variables.

3. Cada árbol se construye hasta alcanzar un tamaño razonablemente

grande, sin realizar poda.

En la librería randomForest de R por defecto, 1/2m p (problemas de clasificación) o

/ 3m p (problemas de regresión).

La tasa de error del modelo final depende de dos elementos:

– La correlación entre dos árboles cualesquiera del bosque. A mayor

correlación, menor error.

– La fuerza de cada árbol en el bosque. Un árbol con una tasa de error

reducida tasa de error es un clasificador fuerte. Aumentar la fuerza de los

árboles individuales disminuye la tasa de error del bosque

Reducir m reduce tanto la correlación como la fuerza, y viceversa. Este es el único

parámetro a ajustar respecto al cual Random Forests es sensible, puede ser ajustado con

la ayuda de procedimientos de validación cruzada.

A continuación, se detallan algunas de las ventajas de la aplicación de los modelos

Random Forests.

• Proporciona muy buenos resultados en los estudios empíricos.

• Se ejecuta de forma eficiente sobre grandes bases de datos.

• Puede tratar miles de variables sin tener que eliminar ninguna.

• Proporciona estimaciones de la importancia de cada variable.

Page 36: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

35

• Genera internamente un estimador insesgado del error de generalización durante

el proceso de construcción (OOB).

• Dispone de un método efectivo de estimación de valores perdidos.

• Se calculan prototipos que dan información sobre la relación entre las variables

y la clasificación.

• Calcula proximidades entre pares de casos que pueden emplearse en análisis de

conglomerados, identificación de outliers, o escalamiento de los datos para

obtener representaciones gráficas.

Para finalizar este apartado se describe el algoritmo que sigue la técnica Random

Forests para cuantificar la importancia de cada variable.

Sean p variables predictoras

Para b=1 hasta B

1. Generar una muestra bootstrap * D del conjunto D

2. Sea */ b i iD D D D D D *

2.1 Construir el árbol bA sobre *D

2.2 Aplicar bA a cada elemento de bD

2.3 Calcular el número de clasificaciones correctas sobre los elementos de bD

# / b b i i i bC A X Y D D

3. Para j=1,2,..,p

3.1 Permutar aleatoriamente los valores de la variable j entre los casos del conjunto

bD

3.2 Calcular de nuevo el número de clasificaciones correctas sobre bD , sea jbC

3.3 Calcular jb b jbR C C

4. Siguiente j

Siguiente b

Page 37: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

36

Calcular decrecimiento medio de la precisión para cada variable:

1

1 B

j jb

b

IM RB

Cada decrecimiento medio se divide por la desviación típica de las jbR .

También puede calcularse la medida anterior para cada variable y cada clase. Otra

medida de importancia se basa en el criterio de Gini: cada vez que una variable se elige

para dividir un nodo, el índice de Gini para los dos nodos hijos es menor que el del nodo

padre: la media de todos estos decrecimientos para cada variable es el decrecimiento

medio del índice de Gini.

Page 38: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

37

5. Aplicación a una base de datos de microcréditos

5.1. Descripción de la base de datos

En esta primera aplicación se considera un conjunto de datos relativos a microcréditos

de una institución peruana de micro finanzas (EDPYME PROEMPRESA). La base de

datos contiene diversas características sobre microcréditos concedidos a empresas

durante el periodo 1997-2005. Tras eliminar los casos incompletos, el conjunto de

datos final contiene 5,451 casos, de los cuales, 2,673 (49,03%) son créditos exitosos

(los prestatarios pudieron devolver el importe prestado), mientras que 2,778 créditos

(50.97%) son créditos fallidos, entendiendo por tales aquellos créditos en los que se

produjo una demora en los pagos superior a los 15 días. Se realizó una partición

aleatoria del conjunto de datos en muestras de entrenamiento (75%, 4,088 casos) y test

(25%, 1,363 casos). Las tabla 5.1 y 5.2 recogen las 41 variables predictoras.

Page 39: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

38

Tabla 5.1 Variables predictoras del conjunto de datos de microcréditos

VARIABLE Descripción

ZONA Lugar geográfico de la agencia o sucursal. Variable dicotómica (0)

Zona centro (1) Extrarradio

ANTIGUO Tiempo del prestatario como cliente de la entidad. Variable numérica

CRED_CONC Créditos concedidos con anterioridad. Variable numérica

CRED_CONC2 Créditos concedidos en el último año. Variable numérica

CRED_DENEG Créditos denegados con anterioridad. Variable numérica

SECTOR Sector de actividad de la microempresa. Variable categórica (0)

Comercio (1) Agricultura (2) Producción (3) Servicio

DEST_CRED Destino del microcrédito. Variable dicotómica (0) Capital de trabajo

(1) Activo Fijo

CLAS_ENT Clasificación del cliente. Variable dicotómica (0) Cliente normal (1)

Cliente con algún tipo de problema

CUOT_TOT Número total de cuotas pagadas en historial de crédito. Variable

numérica

CUOT_MORA Número de cuotas incurridas en morosidad. Variable numérica

MEDIA_MORA Promedio (días) de la morosidad del cliente. Variable numérica

MORA_MAYOR Número de días de la mayor mora del cliente. Variable numérica

SEXO Género del prestatario. Variable dicotómica. (0) Hombre, (1) Mujer

EDAD Edad en el momento de la solicitud del crédito. Variable numérica

E_CIVIL Estado Civil. Variable dicotómica. (0) Soltero, (1) Unidad Familiar

SIT_LAB Situación laboral del cliente. Variable dicotómica (0) Propietario (1)

Dependiente

R1 Rotación Activos = Ingresos Ventas / Total Activo

R2 Productividad = Utilidad Bruta / Costes Operativos

R3 Liquidez = Capacidad Pago / Total Activo

R4 Rotación Liquidez = Capacidad Pago / Ingresos Ventas x 360

R5 Dependencia o Endeudamiento = Total Pasivo / (Total Pasivo + Total

Patrimonio

Page 40: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

39

Tabla 5.2 Variables predictoras del conjunto de datos de microcréditos (continuación)

VARIABLE Descripción

R6 Apalancamiento = Total Pasivo / Total Patrimonio

R7 ROA = Utilidad Neta / Total Activo

R8 ROE = Utilidad Neta / Total Patrimonio

GARANT Tipo de garantía aportada por el cliente. Variable dicotómica (0) Crédito Confianza

(1) Garantía real (aval, prenda, hipoteca, etc.)

MONEDA Tipo de moneda en la que se concede el crédito. Variable dicotómica (0) Nuevos

Soles (1) US $

MONTO Importe del microcrédito. Variable numérica

MONTO_RECH Cantidad rechazada por la institución. Variable numérica

DURACION Número de cuotas mensuales del microcrédito solicitado. Variable numérica

INT_MENS Tasa de interés mensual del microcrédito. Variable numérica

VTOCRED_SBS Pronóstico del analista sobre la situación del crédito a su vencimiento. Variable

dicotómica (0) Vigentes (1) Con problemas estimados

PIB Tasa de variación anualizada del Producto Interior Bruto durante la vigencia del

crédito. Variable numérica IPC Tasa de variación anualizada del Índice de Precios al Consumidor durante la

vigencia del crédito. Variable numérica

IE Tasa de variación anualizada del Índice de Empleo durante la vigencia del crédito.

Variable numérica

TC Tasa de variación anualizada de la Tasa de Cambio durante la vigencia del crédito.

Variable numérica

ti Tasa de variación anualizada de los tipos de interés durante la vigencia del crédito.

variable numérica

igb Tasa de variación anualizada del índice general bursátil durante la vigencia del

crédito. variable numérica

agua Tasa de variación anualizada de la tarifa municipal de agua durante la vigencia del

crédito. variable numérica

luz Tasa de variación anualizada de la tarifa municipal de la luz durante la vigencia del

crédito. variable numérica

tfno Tasa de variación anualizada de la tarifa del teléfono durante la vigencia del

crédito. variable numérica

Page 41: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

40

5.2. Lectura y preparación de los datos con R

Lectura del conjunto de datos

datos=read.table(file="Microcreditos.txt",header=TRUE) dim(datos)

## [1] 5451 42

Convertir las variables categóricas al tipo factor y definición de sus niveles

datos$Y=factor(datos$Y) levels(datos$Y)=c("Bueno","Fallido") datos$SEXO=factor(datos$SEXO) levels(datos$SEXO)=c("Hombre","Mujer") datos$E_CIVIL=factor(datos$E_CIVIL) levels(datos$E_CIVIL)=c("Soltero","Unidad familiar") datos$ZONA=factor(datos$ZONA) levels(datos$ZONA)=c("Centro","Extrarradio") datos$SECTOR=factor(datos$SECTOR) levels(datos$SECTOR)=c("Comercio","Agricultura", "Producción","Servicios") datos$DEST_CRED=factor(datos$DEST_CRED) levels(datos$DEST_CRED)=c("Capital de trabajo", "Activo fijo") datos$CLAS_ENT=factor(datos$CLAS_ENT) levels(datos$CLAS_ENT)=c("Cliente Normal", "Cliente problemático") datos$SIT_LAB=factor(datos$SIT_LAB) levels(datos$SIT_LAB)=c("Propietario","Dependiente") datos$GARANT=factor(datos$GARANT) levels(datos$GARANT)=c("Crédito confianza", "Garantía real") datos$MONEDA=factor(datos$MONEDA) levels(datos$MONEDA)=c("Nuevos Soles","Dólar USA") datos$VTOCRED_SBS=factor(datos$VTOCRED_SBS) levels(datos$VTOCRED_SBS)=c("Vigente","Con problemas estimados")

Posiciones de las variables del tipo factor

listafac=c(1,2,4,6,7:9,25,27,32,33)

Resumen de las variables numéricas

Resulnum=t(apply(datos[,-listafac],2,quantile)) colnames(Resulnum)=c("Mínimo","Q1","Mediana", "Q3","Máximo") round(Resulnum,2)

## Mínimo Q1 Mediana Q3 Máximo ## EDAD 17.95 34.92 42.24 49.95 74.90 ## ANTIGUO 0.16 1.09 2.00 3.07 6.96 ## R1 0.00 0.31 0.56 0.96 6.33 ## R2 -278.27 1.96 2.84 4.51 126.91

Page 42: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

41

## R3 0.00 0.03 0.05 0.09 167.73 ## R4 0.00 0.06 0.09 0.15 102.36 ## R5 0.00 0.00 0.07 0.22 0.66 ## R6 0.00 0.00 0.08 0.28 1.92 ## R7 -8.26 0.06 0.11 0.19 2.49 ## R8 -8.26 0.07 0.13 0.22 2.49 ## CRED_DENEG 0.00 0.00 0.00 1.00 3.00 ## CRED_CONC 1.00 2.00 4.00 7.00 33.00 ## CRED_CONC2 1.00 2.00 3.00 5.00 14.00 ## CUOTAS_TOT 1.00 15.00 28.00 46.00 191.00 ## CUOT_MORA 1.00 5.00 10.00 19.00 58.00 ## MEDIA_MORA 1.00 3.00 5.14 9.43 56.00 ## MORA_MAYOR 1.00 4.50 10.00 22.50 289.00 ## TIPO_OPER 0.00 0.00 0.00 0.00 1.00 ## MONTO 0.06 0.29 0.46 0.87 3.90 ## MONTO_RECH -1.37 0.00 0.00 0.15 8.00 ## DURACION 1.00 5.00 8.00 12.00 21.00 ## INT_MENS 1.80 4.50 5.25 5.75 6.00 ## PIB -107.42 0.17 6.76 13.90 88.13 ## IPC -2.82 1.49 2.20 4.07 13.03 ## IE -43.30 0.93 4.01 7.49 37.41 ## TC -16.01 -6.66 -4.51 -0.49 6.14 ## TI -17.82 1.57 8.36 13.88 75.44 ## IGB -82.21 30.15 46.82 60.50 180.22 ## AGUA 0.00 0.00 3.00 4.50 36.04 ## LUZ -25.75 0.03 4.95 10.51 84.12 ## TFNO -42.29 -8.69 -0.69 0.00 0.00

Tablas de frecuencias de las variables categóricas

apply(datos[,listafac],2,table)

## $Y ## ## Bueno Fallido ## 2673 2778 ## ## $SEXO ## ## Hombre Mujer ## 2280 3171 ## ## $E_CIVIL ## ## Soltero Unidad familiar ## 1565 3886 ## ## $ZONA ## ## Centro Extrarradio ## 2987 2464 ## ## $CLAS_ENT ##

Page 43: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

42

## Cliente Normal Cliente problemático ## 4191 1260 ## ## $SECTOR ## ## Agricultura Comercio Producción Servicios ## 674 3812 466 499 ## ## $SIT_LAB ## ## Dependiente Propietario ## 41 5410 ## ## $DEST_CRED ## ## Activo fijo Capital de trabajo ## 698 4753 ## ## $MONEDA ## ## Dólar USA Nuevos Soles ## 523 4928 ## ## $GARANT ## ## Crédito confianza Garantía real ## 2718 2733 ## ## $VTOCRED_SBS ## ## Con problemas estimados Vigente ## 805 4646

Partición de los datos en conjuntos de entrenamiento y test

n=nrow(datos) ient=sample(1:n,floor(n*0.75)) entre=datos[ient,] test=datos[-ient,] dim(entre)

## [1] 4088 42

dim(test)

## [1] 1363 42

Almacenar en formato R los conjuntos de entrenamiento y test

save(entre,test,file="Microcreditos.RData")

Page 44: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

43

5.3. Construcción de un árbol de clasificación

Cargar las librerías necesarias

library(rpart)

library(rpart.plot)

library(ROCR)

Lectura de los datos de entrenamiento y test

load(file="Microcreditos.RData") dim(entre)

## [1] 4088 42

dim(test)

## [1] 1363 42

Conversión de la variable respuesta a tipo factor y definición de los niveles

entre$Y=factor(entre$Y) test$Y=factor(test$Y) levels(entre$Y)=c("Bueno","Fallido") levels(test$Y)=c("Bueno","Fallido") table(entre$Y)

## ## Bueno Fallido ## 2028 2060

table(test$Y)

## ## Bueno Fallido ## 645 718

table(entre$Y)+table(test$Y)

## ## Bueno Fallido ## 2673 2778

Construir primero un árbol de clasificación suficientemente grande

set.seed(12345) impagos.rpart <- rpart(Y ~ ., data=entre,cp=0.001)

Lista de subárboles y rendimiento de cada uno (empírico y mediante validación cruzada),también se muestra una representación gráfica donde la línea de puntos es el mínimo de los errores de validación cruzada más su desviación típica

printcp(impagos.rpart,digits=3)

## ## Classification tree:

Page 45: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

44

## rpart(formula = Y ~ ., data = entre, cp = 0.001) ## ## Variables actually used in tree construction: ## [1] ANTIGUO CLAS_ENT CRED_CONC2 CUOT_MORA DURACION ## [6] GARANT IGB INT_MENS IPC LUZ ## [11] MEDIA_MORA MONTO MORA_MAYOR R2 R3 ## [16] R5 R7 R8 SEXO TC ## [21] TFNO VTOCRED_SBS ## ## Root node error: 2028/4088 = 0.496 ## ## n= 4088 ## ## CP nsplit rel error xerror xstd ## 1 0.47830 0 1.000 1.043 0.0158 ## 2 0.19034 1 0.522 0.522 0.0138 ## 3 0.02860 2 0.331 0.331 0.0117 ## 4 0.02318 3 0.303 0.327 0.0116 ## 5 0.01282 4 0.280 0.283 0.0109 ## 6 0.01036 5 0.267 0.283 0.0109 ## 7 0.00690 6 0.256 0.280 0.0109 ## 8 0.00321 7 0.250 0.266 0.0107 ## 9 0.00271 9 0.243 0.276 0.0108 ## 10 0.00247 11 0.238 0.276 0.0108 ## 11 0.00222 13 0.233 0.272 0.0108 ## 12 0.00197 20 0.214 0.274 0.0108 ## 13 0.00148 27 0.195 0.273 0.0108 ## 14 0.00131 31 0.189 0.272 0.0108 ## 15 0.00123 34 0.185 0.276 0.0108 ## 16 0.00115 36 0.183 0.277 0.0109 ## 17 0.00100 40 0.178 0.279 0.0109

plotcp(impagos.rpart,col="blue")

Page 46: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

45

Tabla visualizada con printcp

cptabla<- impagos.rpart$cptable

Calcular Minx1ES=Min(xerror)+1xstd, necesario para la regla 1-SE

Minx1ES<- min(cptabla[,4])+cptabla[which.min(cptabla[,4]),5] Minx1ES

## [1] 0.2769471

Identificar el CP del árbol lo más pequeño posible pero con xerror<Minx1ES. Este cp se utilizará en la función prune.rpart

indicp<- 1:nrow(cptabla) cprecorte<- cptabla[indicp[cptabla[,4]<Minx1ES][1],1] cprecorte

## [1] 0.003205128

Recorte del árbol con prune.rpart

impagos.rpart2<-prune.rpart(impagos.rpart,cp=cprecorte)

Descripción detallada del árbol recortado

Para cada nodo se muestra:

• número asociado del nodo

• condición que cumple los casos que pertenecen a ese nodo

• número de casos de ese nodo

Page 47: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

46

• número de casos incorrectamente clasificados con la regla de decisión asociada al nodo

• probabilidad de cada clase condicionada a ese nodo

El asterisco indica que es un nodo terminal

impagos.rpart2

## n= 4088 ## ## node), split, n, loss, yval, (yprob) ## * denotes terminal node ## ## 1) root 4088 2028 Fallido (0.49608611 0.50391389) ## 2) TFNO>=-5.719583 2876 953 Bueno (0.66863700 0.33136300) ## 4) VTOCRED_SBS=Vigente 2460 552 Bueno (0.77560976 0.22439024) ## 8) DURACION>=2.5 1898 242 Bueno (0.87249737 0.12750263) * ## 9) DURACION< 2.5 562 252 Fallido (0.44839858 0.55160142) ## 18) CLAS_ENT=Cliente problemático 47 0 Bueno (1.00000000 0.00000000) * ## 19) CLAS_ENT=Cliente Normal 515 205 Fallido (0.39805825 0.60194175) ## 38) TC< -7.08382 114 44 Bueno (0.61403509 0.38596491) * ## 39) TC>=-7.08382 401 135 Fallido (0.33665835 0.66334165) * ## 5) VTOCRED_SBS=Con problemas estimados 416 15 Fallido (0.03605769 0.96394231) * ## 3) TFNO< -5.719583 1212 105 Fallido (0.08663366 0.91336634) ## 6) IPC< 1.015445 115 47 Bueno (0.59130435 0.40869565) * ## 7) IPC>=1.015445 1097 37 Fallido (0.03372835 0.96627165) ## 14) LUZ>=13.44726 32 9 Bueno (0.71875000 0.28125000) * ## 15) LUZ< 13.44726 1065 14 Fallido (0.01314554 0.98685446) *

Representación gráfica del árbol recortado

rpart.plot(impagos.rpart2,fallen.leaves=FALSE,cex=0.7)

Page 48: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

47

Una animación que reproduce el proceso de construcción del árbol

tree1 <- impagos.rpart2 for(iframe in 1:nrow(tree1$frame)) cols <- ifelse(1:nrow(tree1$frame) <= iframe, "black", "gray") prp(tree1, col=cols, branch.col=cols, split.col=cols) Sys.sleep(0.5)

Page 49: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

48

Page 50: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

49

Page 51: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

50

Page 52: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

51

Page 53: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

52

Page 54: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

53

Page 55: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

54

Page 56: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

55

La siguiente función permite generar las distintas reglas de clasificación

list.rules.rpart <- function(model) if (!inherits(model, "rpart")) stop("No es un objeto rpart") frm <- model$frame names <- row.names(frm) ylevels <- attr(model, "ylevels")

Page 57: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

56

ds.size <- model$frame[1,]$n numreglas=0 for (i in 1:nrow(frm)) if (frm[i,1] == "<leaf>") #Nodos terminales numreglas=numreglas+1 cat("\n") cat(sprintf(" Regla número: %s (nodo %s) ", numreglas,names[i])) cat(sprintf("[yval=%s cover=%d (%.0f%%) prob=%0.2f]\n", ylevels[frm[i,]$yval], frm[i,]$n, round(100*frm[i,]$n/ds.size), frm[i,]$yval2[,5])) pth <- path.rpart(model, nodes=as.numeric(names[i]), print.it=FALSE) cat(sprintf(" %s\n", unlist(pth)[-1]), sep="") list.rules.rpart(impagos.rpart2)

## ## Regla número: 1 (nodo 8) [yval=Bueno cover=1898 (46%) prob=0.13] ## TFNO>=-5.72 ## VTOCRED_SBS=Vigente ## DURACION>=2.5 ## ## Regla número: 2 (nodo 18) [yval=Bueno cover=47 (1%) prob=0.00] ## TFNO>=-5.72 ## VTOCRED_SBS=Vigente ## DURACION< 2.5 ## CLAS_ENT=Cliente problemático ## ## Regla número: 3 (nodo 38) [yval=Bueno cover=114 (3%) prob=0.39] ## TFNO>=-5.72 ## VTOCRED_SBS=Vigente ## DURACION< 2.5 ## CLAS_ENT=Cliente Normal ## TC< -7.084 ## ## Regla número: 4 (nodo 39) [yval=Fallido cover=401 (10%) prob=0.66] ## TFNO>=-5.72 ## VTOCRED_SBS=Vigente ## DURACION< 2.5 ## CLAS_ENT=Cliente Normal ## TC>=-7.084 ## ## Regla número: 5 (nodo 5) [yval=Fallido cover=416 (10%) prob=0.96] ## TFNO>=-5.72 ## VTOCRED_SBS=Con problemas estimados ## ## Regla número: 6 (nodo 6) [yval=Bueno cover=115 (3%) prob=0.41] ## TFNO< -5.72 ## IPC< 1.015

Page 58: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

57

## ## Regla número: 7 (nodo 14) [yval=Bueno cover=32 (1%) prob=0.28] ## TFNO< -5.72 ## IPC>=1.015 ## LUZ>=13.45 ## ## Regla número: 8 (nodo 15) [yval=Fallido cover=1065 (26%) prob=0.99] ## TFNO< -5.72 ## IPC>=1.015 ## LUZ< 13.45

Aplicación del modelo sobre el conjunto test, donde se calcula el porcentaje de acierto global, la sensitividad y la especificidad

La sensitividad indica el acierto en la clase de los créditos fallidos.

La especificidad indica el acierto en la clase de los créditos buenos.

confutest<-table(Real=test$Y, Predic=predict(impagos.rpart2,test, type="class")) confutest

## Predic ## Real Bueno Fallido ## Bueno 598 47 ## Fallido 123 595

100*sum(diag(prop.table(confutest)))

## [1] 87.52751

100*diag(prop.table(confutest,1))

## Bueno Fallido ## 92.71318 82.86908

Obtención de la Curva COR en el conjunto test

probabi<- predict(impagos.rpart2,test,type="prob")[,2] prediobj<-prediction(probabi,test$Y) plot(performance(prediobj, "tpr","fpr"),main="CURVA COR TEST. CART") abline(a=0,b=1,col="blue",lty=2)

Page 59: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

58

auc<- as.numeric(performance(prediobj,"auc")@y.values) cat("AUC test= ",auc ,"\n")

## AUC test= 0.9122109

5.4. Construcción de un modelo Bosque Aleatorio

Cargar las librerías necesarias

library(randomForest)

library(ROCR)

Lectura de los datos de entrenamiento y test

load(file="Microcreditos.RData") dim(entre)

## [1] 4088 42

dim(test)

## [1] 1363 42

Con tuneRF se determina el valor de m para el modelo Random Forest, sugiere m=6 (valor por defecto en este caso)

Page 60: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

59

set.seed(12345) rf.tune <- tuneRF(x=entre[,-1],y=entre[,1], stepFactor=1.5,plot=TRUE, doBest=TRUE)

## mtry = 6 OOB error = 12.87% ## Searching left ... ## mtry = 4 OOB error = 13.11% ## -0.01901141 0.05 ## Searching right ... ## mtry = 9 OOB error = 13.04% ## -0.01330798 0.05

Modelo Random Forest con m=6

t0<-proc.time()

rf <- randomForest(Y ~ .,data=entre,mtry=6, proximity=FALSE,importance=TRUE, do.trace=TRUE)

## ntree OOB 1 2 ## 1: 19.49% 18.94% 20.03% ## 2: 19.81% 18.80% 20.79% ……………………………………………………… ## 499: 12.28% 8.38% 16.12% ## 500: 12.23% 8.33% 16.07%

t1<-proc.time()

Tiempo empleado en la construcción del modelo

t1-t0

Page 61: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

60

## elapsed ## 13.08

Resumen del modelo

Incluye los estimadores OOB de la tasa de error global y para cada clase

rf

## ## Call: ## randomForest(formula = Y ~ ., data = entre, mtry = 6, proximity = FALSE, importance = TRUE, do.trace = TRUE) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 6 ## ## OOB estimate of error rate: 12.23% ## Confusion matrix: ## Bueno Fallido class.error ## Bueno 1859 169 0.08333333 ## Fallido 331 1729 0.16067961

Representación gráfica de la evolución de los errores OOB en función del número de árboles

plot(rf) legend("topleft",col=1:3,lty=1:3, legend=c("OOB",levels(entre$Y)),cex=0.7) grid()

Page 62: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

61

Medidas de importancia de las variables

round(importance(rf),2)

## Bueno Fallido MeanDecreaseAccuracy MeanDecreaseGini ## SEXO -0.25 3.51 2.05 4.79 ## EDAD 1.91 2.12 2.90 36.57 ## E_CIVIL 1.14 0.16 1.02 4.16 ## ANTIGUO 10.11 6.82 13.29 39.77 ## ZONA 5.96 1.62 5.79 5.33 ## CLAS_ENT 43.36 26.21 39.22 125.65 ## SECTOR 5.94 3.40 7.01 12.95 ## SIT_LAB 1.69 -0.99 0.90 0.17 ## R1 7.74 3.70 8.87 34.28 ## R2 3.91 1.74 4.28 36.90 ## R3 12.74 0.97 12.67 35.77 ## R4 7.64 -0.13 6.19 39.13 ## R5 9.34 1.54 9.17 28.01 ## R6 10.61 0.12 9.58 28.43 ## R7 9.66 2.12 10.49 34.91 ## R8 9.66 3.49 11.00 34.53 ## CRED_DENEG 1.50 -0.36 1.01 6.38 ## CRED_CONC 8.76 4.80 11.10 25.85 ## CRED_CONC2 9.58 8.74 13.99 56.85 ## CUOTAS_TOT 12.27 6.54 14.78 36.21 ## CUOT_MORA 14.64 3.38 15.62 37.21 ## MEDIA_MORA 9.27 4.29 11.02 37.50 ## MORA_MAYOR 8.96 2.02 9.45 34.21 ## DEST_CRED 6.23 2.94 6.34 7.02 ## TIPO_OPER 0.93 0.12 0.90 3.64 ## MONEDA 0.35 -1.55 -0.71 1.54 ## MONTO 12.26 5.04 12.62 40.95 ## MONTO_RECH -0.17 3.68 2.36 19.34 ## DURACION 24.57 20.88 30.71 69.20 ## INT_MENS 12.70 10.81 15.85 39.92 ## GARANT 10.03 8.24 12.31 13.05 ## VTOCRED_SBS 62.72 69.00 73.61 241.01 ## PIB 17.60 14.07 20.88 51.21 ## IPC 16.27 16.03 20.18 72.20 ## IE 15.40 12.72 18.41 52.95 ## TC 22.32 18.33 24.76 108.69 ## TI 22.07 16.79 25.81 116.63 ## IGB 13.93 11.71 16.94 39.70 ## AGUA 15.14 9.84 16.80 30.08 ## LUZ 25.21 22.60 28.77 156.79 ## TFNO 45.00 27.15 41.96 243.46

Aplicación del modelo sobre el conjunto test, donde se calcula el porcentaje de acierto global, la sensitividad y la especificidad

La sensitividad indica el acierto en la clase de los créditos fallidos

La especificidad indica el acierto en la clase de los créditos buenos

Page 63: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

62

confutest<-table(Real=test$Y, Predic=predict(rf,test)) confutest

## Predic ## Real Bueno Fallido ## Bueno 603 42 ## Fallido 124 594

100*sum(diag(prop.table(confutest)))

## [1] 87.82098

100*diag(prop.table(confutest,1))

## Bueno Fallido ## 93.48837 82.72981

Obtención de la Curva COR en el conjunto test

probabi<- predict(rf, test,"prob")[,2] prediobj<-prediction(probabi,test$Y) plot(performance(prediobj, "tpr","fpr"),main="CURVA COR TEST. RF") abline(a=0,b=1,col="blue",lty=2)

auc<- as.numeric(performance(prediobj,"auc")@y.values) cat("AUC test= ",auc ,"\n")

## AUC test= 0.939482

Page 64: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

63

6. Aplicación a una base de datos de créditos concedidos en Alemania

a personas físicas.

6.1 Descripción de la base de datos

En esta aplicación se considera un conjunto de datos disponible en la “UCI Machine

Learning Repository”, denominado “German credit data”, (Lichman, 2013). Los

modelos se han construido sobre una versión de los datos ya disponible en R, en

concreto en el paquete evtree (Grubinger et al., 2014). Se trata de una base de datos

que contiene datos relativos a créditos concedidos a personas. Dichos créditos se han

clasificado en dos categorías, no fallidos (“buenos”) y malos, según que el

solicitante haya tenido o no la capacidad para responder con solvencia. El conjunto

de datos contiene 1,000 observaciones y 21 variables. De los 1,000 casos, 700 son

“buenos”, mientras que 300 son “malos”, por lo que este es un claro ejemplo de

problema de clasificación no balanceada, que requiere aplicar técnicas específicas

que se describen en el siguiente apartado.

A continuación, se presenta una lista de las variables de la base de datos, junto a sus

respectivas definiciones.

Page 65: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

64

Tabla 5.3 Variables predictoras del conjunto de datos GermanCredit

VARIABLE Descripción

STATUS

Variable que indica el estado de la cuenta corriente del solicitante

del crédito. Se divide en varias categorías en función del rango de

dinero ahorrado al que pertenezca la cuenta.

DURATION Duración del crédito en meses.Se muestra el mínimo, la media, la

mediana, el máximo, el primer cuartil y el tercer cuartil.

CREDIT_HISTORY

Indica el historial del solicitante. Se divide en categorías entre ellas si

el solicitante tiene pendiente a devolver otros créditos o si ha

cumplido en el pago de sus créditos anteriores.

PURPOSE Indica el fin del crédito solicitado. Entre otros la compra de: coche,

casa o electrodomésticos.

AMOUNT Cantidad de dinero solicitada. Se muestra el mínimo, máximo,

mediana, primer y tercer cuartil.

SAVINGS

Cantidad de dinero ahorrada. Se divide en varias categorías en

función del rango de dinero ahorrado al que pertenezca la cuenta.

Producción (3) Servicio EMPLOYMENT_DURATION

Tiempo que lleva el solicitante en su empleo actual. Se divide en

diversas categorías en función del solicitante está en paro o de si lleva

más o menos de 4/ 7 años en su empleo.

INSTALLMENT_RATE Cuota mensual. Se muestra el mínimo, el máximo, la media, la

mediana, el primer y tercer cuartil.

PERSONAL_STATUS_SEX Indica el estado civil y el sexo del solicitante del crédito.

OTHER_DEBTORS

Indica si el solicitante tiene pendiente otras deudas ya sea como

titular o como avalista.

PRESENT_RESIDENCE Tiempo que lleva el solicitante viviendo en su residencia actual.

PROPERTY

Propiedad del cliente con más valor. Entre otros coche, seguro de

vida o no aplica.

AGE Edad del cliente. Se recoge el mínimo, el máximo, la media, la

mediana el primer y tercer cuartil.

OTHER_INSTALLMENT_PL

ANS

Indica si el solicitante tiene deudas pendiente de pago y si esa deuda

es con una tienda o con un banco.

HOUSING Indica el estado del hogar del solicitante del crédito. Puede tomar los

siguientes valores: propia, alquilada o gratis.

NUMBER_CREDITS

Número de créditos concedidos en el presente del solicitante. Se

muestra el mínimo, el máximo, la media, la mediana, el primer y

tercer cuartil.

Page 66: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

65

Tabla 5.4 Variables predictoras del conjunto de datos GermanCredit (continuación)

VARIABLE Descripción

PEOPLE_LIABLE

Número de personas que dependen económicamente del

solicitante.

TELEPHONE Variable binaria que indica si el solicitante tiene número de

teléfono. Toma el valor SI o NO.

FOREIGN_WORKER

Variable binaria que indica si el solicitante es un trabajador

extranjero. Toma el valor SI o NO.

CREDIT_RISK Variable binaria que indica el riesgo del crédito. Es la variable

predictora. Determina si el crédito es bueno o malo.

JOB Condición laboral del solicitante. Se clasifica en función de si es

residente o no, parado o empleado y cualificado o no.

6.2 Tratamiento de datos no balanceados

Se habla de clasificación con datos no balanceados cuando una o más clases de la

variable respuesta se presenta en el conjunto de entrenamiento en proporciones muy

inferiores a las del resto de categorías.

La construcción directa de modelos de clasificación sobre estos datos suele conllevar

bajas tasas de acierto sobre las clases minoritarias, e incluso valores bajos para el

coeficiente AUC en problemas de clasificación binaria.

Dentro de las estrategias existentes para tratar el problema de los datos no balanceados,

en este trabajo se han considerado dos familias de técnicas: Métodos de muestreo y

umbrales de decisión alternativos.

Métodos de muestreo:

Dentro de este tipo de procedimientos, se han aplicado los dos siguientes:

Page 67: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

66

• Muestreo en la clase mayoritaria

• Remuestreo en la clase minoritaria

Sean n y N, respectivamente, los totales de casos en las clases minoritarias y

mayoritarias (se supone clasificación binaria) en el conjunto de entrenamiento.

Muestreo en la clase mayoritaria (“Downsampling”):

Se genera un conjunto de datos balanceado de tamaño 2n formado por:

1. Los n casos de la clase minoritaria.

2. Una selección aleatoria de n casos entre los N de la clase mayoritaria.

Remuestreo en la clase minoritaria (“Upsampling”):

Se genera un conjunto de datos balanceado de tamaño 2N formado por:

1. Los N casos de la clase mayoritaria.

2. Una muestra aleatoria con reemplazamiento de tamaño N (lo que se conoce

como muestra bootstrap) extraída del conjunto de los n casos de la clase

minoritaria.

Umbrales de decisión alternativos

Otro método para el tratamiento de datos no balanceados consiste en utilizar umbrales

de decisión alternativos. Las reglas de clasificación binaria como las que proporcionan

CART o Random Forest se pueden definir mediante una expresión donde se compara la

probabilidad estimada de pertenecer a la clase de interés con un punto de corte pc, que

suele ser 0.5 (capítulo 2 de esta memoria). La idea es utilizar otros puntos de corte que

conduzcan a mayores valores para el acierto en la clase minoritaria (en general este

acierto es la sensitividad). La búsqueda del punto de corte no puede efectuarse

directamente sobre el conjunto de entrenamiento, ya que sesgaría las estimaciones de la

capacidad de generalización, por lo que conviene particionar el conjunto de

entrenamiento, para utilizar los que se llama conjunto de validación. El modelo se

construye en los casos distintos al conjunto de validación, y se aplica posteriormente al

conjunto de validación, donde se construye la curva COR. A continuación se trata de

identificar un punto apropiado en dicha gráfica, cuyo umbral de decisión asociado será

utilizado para definir la regla de clasificación alternativa.

En la librería pROC de R (Robin et al., 2011), se dispone de la función coords, que se

puede utilizar para identificar el punto de corte con dos criterios.

Page 68: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

67

La opción best.method="closest.topleft" busca el umbral con rendimiento más cercano

al vértice superior izquierdo, matemáticamente se trata de minimizar:

2 21 1 Sensitividad Especificidad

La opción best.method="youden" trata de maximizar el índice J de Youden, que viene

definido por la distancia a la diagonal, matemáticamente se trata de maximizar:

Sensitividad Especificidad

6.3. Construcción de modelos de clasificación sin aplicar procedimientos de

muestreo para datos no balanceados

6.3.1. Árbol de clasificación

Cargar las librerías necesarias

library(rpart)

library (rpart.plot)

library(ROCR)

Lectura de los datos

data("GermanCredit",package="evtree") summary(GermanCredit)datos=GermanCredit prop.table(table(datos$credit_risk))

## ## good bad ## 0.7 0.3

Partición de los datos en conjunto entrenamiento y test

n<- nrow(datos) indin<- 1:n nent<-ceiling(0.7*n) ntest<- n-nent set.seed(13579) indient<- sort(sample(indin,nent)) inditest<- setdiff(indin,indient) datosent<- datos[indient,] datostest<- datos[inditest,] dim(datosent)

## [1] 700 21

Page 69: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

68

dim(datostest)

## [1] 300 21

save(datosent,datostest,file="GermanCredit.RData")

Construcción del árbol de clasificación

modelo.rpart<- rpart(credit_risk~ ., data=datosent,method="class", cp=0.0001) plot(modelo.rpart,main="GermanCredit. CP=0.001", uniform=TRUE,compress=TRUE) text(modelo.rpart,col="blue",cex=0.5)

printcp(modelo.rpart,digits=3)

## ## Classification tree: ## rpart(formula = credit_risk ~ ., data = datosent, method = "class", ## cp = 1e-04) ## ## Variables actually used in tree construction: ## [1] age amount ## [3] credit_history duration ## [5] employment_duration installment_rate ## [7] number_credits other_debtors ## [9] other_installment_plans personal_status_sex ## [11] present_residence property ## [13] purpose savings ## [15] status telephone ##

Page 70: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

69

## Root node error: 208/700 = 0.297 ## ## n= 700 ## ## CP nsplit rel error xerror xstd ## 1 0.06490 0 1.000 1.000 0.0581 ## 2 0.03846 2 0.870 0.990 0.0580 ## 3 0.01923 4 0.793 0.990 0.0580 ## 4 0.01803 5 0.774 0.971 0.0576 ## 5 0.01202 11 0.644 0.966 0.0575 ## 6 0.01082 15 0.596 0.952 0.0573 ## 7 0.00962 19 0.553 0.971 0.0576 ## 8 0.00721 21 0.534 0.986 0.0579 ## 9 0.00240 23 0.519 1.014 0.0584 ## 10 0.00010 27 0.510 1.053 0.0590

plotcp(modelo.rpart,lty=2,col="blue")

Tabla visualizada con printcp

cptabla<- modelo.rpart$cptable cptabla

## CP nsplit rel error xerror xstd ## 1 0.064903846 0 1.0000000 1.0000000 0.05813021 ## 2 0.038461538 2 0.8701923 0.9903846 0.05796752 ## 3 0.019230769 4 0.7932692 0.9903846 0.05796752 ## 4 0.018028846 5 0.7740385 0.9711538 0.05763390 ## 5 0.012019231 11 0.6442308 0.9663462 0.05754876 ## 6 0.010817308 15 0.5961538 0.9519231 0.05728911 ## 7 0.009615385 19 0.5528846 0.9711538 0.05763390

Page 71: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

70

## 8 0.007211538 21 0.5336538 0.9855769 0.05788515 ## 9 0.002403846 23 0.5192308 1.0144231 0.05836914 ## 10 0.000100000 27 0.5096154 1.0528846 0.05897694

Calcular Minx1ES=Min(xerror)+1xstd, necesario para la regla 1-SE

Minxerror1ES<- min(cptabla[,4])+cptabla[which.min(cptabla[,4]),5] Minxerror1ES

## [1] 1.009212

cprecorte<- cptabla[cptabla[,4]<Minxerror1ES,][1,1] cprecorte

## [1] 0.06490385

Recorte del árbol con prune.rpart En este caso, el cp obtenido toma un valor con el cual el árbol recortado se corresponde con elnodo raíz. Por este motivo, se obviará el proceso de poda y se realizará la predicción en el conjunto test con el árbol original sin recortar.

#modelo.rpart2<-prune.rpart(modelo.rpart,cp=cprecorte) #modelo.rpart2 #summary(modelo.rpart2) #cbind(modelo.rpart2$variable.importance) #plot(modelo.rpart2,main=" Arbol recortado", # uniform=TRUE,compress=TRUE) #text(modelo.rpart2,col="blue",cex=0.5) #rpart.plot(modelo.rpart2,fallen.leaves=FALSE,cex=0.7)

Aplicación del modelo sobre el conjunto test, donde se calcula el porcentaje de acierto global, la sensitividad y la especificidad

La sensitividad indica el acierto en la clase de los créditos fallidos

La especificidad indica el acierto en la clase de los créditos buenos

modelo.rpart2=modelo.rpart ct<-table(datostest$credit_risk, predict(modelo.rpart2, datostest,type="class")) ct

## ## good bad ## good 184 24 ## bad 58 34

100*diag(prop.table(ct, 1))

## good bad ## 88.46154 36.95652

100*sum(diag(prop.table(ct)))

## [1] 72.66667

Page 72: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

71

Obtención de la Curva COR en el conjunto test

probabiCART<- predict(modelo.rpart, datostest,"prob")[,1] prediobj<-prediction(probabiCART,datostest$credit_risk) plot(performance(prediobj, "tpr","fpr"), main="CURVA COR TEST. CART") abline(a=0,b=1,col="blue",lty=2)

auc<- as.numeric(performance(prediobj,"auc")@y.values) cat("AUC test= ",auc ,"\n")

## AUC test= 0.7021844

6.3.2. Bosque Aleatorio

Cargar las librerías necesarias

library(rpart)

library (rpart.plot)

library(ROCR)

library(randomForest)

Lectura de los datos

data("GermanCredit",package="evtree") summary(GermanCredit)datos=GermanCredit prop.table(table(datos$credit_risk))

Page 73: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

72

## ## good bad ## 0.7 0.3

Partición de los datos en conjunto entrenamiento y test

n<- nrow(datos) indin<- 1:n nent<-ceiling(0.7*n) ntest<- n-nent set.seed(13579) indient<- sort(sample(indin,nent)) inditest<- setdiff(indin,indient) datosent<- datos[indient,] datostest<- datos[inditest,] dim(datosent)

## [1] 700 21

dim(datostest)

## [1] 300 21

save(datosent,datostest,file="GermanCredit.RData")

Modelo Random Forest con m por defecto

t1=proc.time() modelo.rf<- randomForest(credit_risk ~ ., data=datosent, importance=TRUE, do.trace=TRUE,ntree=500)

## ntree OOB 1 2 ## 1: 31.40% 20.90% 54.32% ## 2: 31.35% 21.23% 54.26%

………………………………………………………………………………

## 499: 24.00% 9.76% 57.69% ## 500: 24.14% 9.76% 58.17%

(tCPURF=proc.time()-t1)

## user system elapsed ## 1.69 0.07 1.75

print(modelo.rf)

## ## Call: ## randomForest(formula = credit_risk ~ ., data = datosent, importance = TRUE, do.trace = TRUE, ntree = 500) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 4 ## ## OOB estimate of error rate: 24.14%

Page 74: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

73

## Confusion matrix: ## good bad class.error ## good 444 48 0.09756098 ## bad 121 87 0.58173077

plot(modelo.rf) legend("topright",col=1:3,lty=1:3,lwd=2, legend=c("OOB",levels(datosent$credit_risk)))

importancias=importance(modelo.rf) importancias[order(-importancias[,3]),]

## good bad MeanDecreaseAccuracy ## status 16.2554587 26.93350350 27.416759 ## duration 12.8188744 8.85399482 15.386364 ## amount 10.8839559 10.55000729 15.045141 ## credit_history 5.4991848 4.67150086 7.043681 ## employment_duration 4.2997211 5.85085949 6.862817 ## age 3.9161682 5.15109172 6.211998 ## savings 3.2775874 5.46735903 6.043320 ## other_debtors 6.2146638 -0.04920484 5.222085 ## purpose 2.5798979 4.73312332 4.943983 ## telephone 1.6128398 4.97033445 4.645714 ## property 4.8741022 0.37426839 4.523189 ## installment_rate 4.8327748 0.75284161 4.363649 ## foreign_worker 0.6678999 4.20960614 3.120855 ## other_installment_plans 2.9576955 0.71192224 2.964304 ## present_residence 2.0344734 1.25694140 2.374279 ## personal_status_sex -0.8259711 4.66378889 2.152205 ## job 2.9271816 -0.71921825 2.030769 ## number_credits 2.8408169 -1.28003213 1.857603

Page 75: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

74

## housing 2.4780074 -0.40192721 1.791659 ## people_liable 2.0310681 -0.24278394 1.580329 ## MeanDecreaseGini ## status 32.259019 ## duration 28.917452 ## amount 39.479472 ## credit_history 17.115032 ## employment_duration 15.611169 ## age 28.632388 ## savings 12.735933 ## other_debtors 4.577789 ## purpose 24.544672 ## telephone 4.846240 ## property 13.896661 ## installment_rate 10.673448 ## foreign_worker 1.302937 ## other_installment_plans 7.314953 ## present_residence 11.779242 ## personal_status_sex 11.165875 ## job 8.249276 ## number_credits 5.481811 ## housing 6.509891 ## people_liable 4.002197

datostest.pred <- predict(modelo.rf, datostest)

Resultados de la predicción

ct<- table(observado = datostest$credit_risk, prediccion = datostest.pred) ct

## prediccion ## observado good bad ## good 194 14 ## bad 61 31

100*diag(prop.table(ct, 1))

## good bad ## 93.26923 33.69565

100*sum(diag(prop.table(ct)))

## [1] 75

Obtención de la Curva COR en el conjunto test

#COR probabiRF<- predict(modelo.rf, datostest,"prob")[,1] library(ROCR) prediobj<-prediction(probabiRF,datostest$credit_risk) plot(performance(prediobj, "tpr","fpr"), main="CURVA COR TEST. RF") abline(a=0,b=1,col="blue",lty=2)

Page 76: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

75

auc<- as.numeric(performance(prediobj,"auc")@y.values) cat("AUC test= ",auc ,"\n")

## AUC test= 0.7628554

6.4. Construcción de modelos de clasificación aplicando procedimientos de

muestreo para datos no balanceados

Los programas R utilizados en este apartado son muy similares, solo se diferencian en la

forma de generar el conjunto de datos balanceado. A continuación se incluyen las

instrucciones R empleadas para balancear el conjunto de entrenamiento con cada

técnica.

6.4.1. DownSampling

Proceso de construcción del árbol de clasificación

Cargar las librerias necesarias

library(caret)

library(rpart) library (rpart.plot) library(ROCR)

library(randomForest)

Page 77: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

76

Lectura de los datos

load(file="GermanCredit.RData") dim(datosent)

## [1] 700 21

dim(datostest)

## [1] 300 21

vd=which(names(datosent)=="credit_risk")

Balaenceo de los datos a partir de DownSample

downSampled = downSample(datosent[, -vd], datosent$credit_risk) dim(downSampled)

## [1] 416 21

names(downSampled)

## [1] "status" "duration" ## [3] "credit_history" "purpose" ## [5] "amount" "savings" ## [7] "employment_duration" "installment_rate" ## [9] "personal_status_sex" "other_debtors" ## [11] "present_residence" "property" ## [13] "age" "other_installment_plans" ## [15] "housing" "number_credits" ## [17] "job" "people_liable" ## [19] "telephone" "foreign_worker" ## [21] "Class"

names(downSampled)[21]="credit_risk" table(downSampled$credit_risk)

## ## good bad ## 208 208

datosent=downSampled

Construcción del árbol de clasificación Se repiten las instrucciones del primer código, en el que se procede a la construcción de un árbol de clasificación sin antes balancear los datos.

modelo.rpart<- rpart(credit_risk~ ., data=datosent,method="class", cp=0.0001) plot(modelo.rpart,main="GermanCredit. CP=0.001", uniform=TRUE,compress=TRUE) text(modelo.rpart,col="blue",cex=0.5)

Page 78: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

77

printcp(modelo.rpart,digits=3)

## ## Classification tree: ## rpart(formula = credit_risk ~ ., data = datosent, method = "class", ## cp = 1e-04) ## ## Variables actually used in tree construction: ## [1] age amount duration ## [4] employment_duration other_installment_plans present_residence ## [7] property purpose status ## ## Root node error: 208/416 = 0.5 ## ## n= 416 ## ## CP nsplit rel error xerror xstd ## 1 0.39423 0 1.000 1.125 0.0486 ## 2 0.02885 1 0.606 0.606 0.0451 ## 3 0.02083 2 0.577 0.707 0.0469 ## 4 0.01442 6 0.471 0.635 0.0456 ## 5 0.00962 7 0.457 0.601 0.0450 ## 6 0.00481 12 0.409 0.567 0.0442 ## 7 0.00010 13 0.404 0.577 0.0444

plotcp(modelo.rpart,lty=2,col="blue")

Page 79: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

78

Proceso de poda

cptabla<- modelo.rpart$cptable Minxerror1ES<- min(cptabla[,4])+cptabla[which.min(cptabla[,4]),5] Minxerror1ES

## [1] 0.6115094

cprecorte<- cptabla[cptabla[,4]<Minxerror1ES,][1,1] cprecorte

## [1] 0.02884615

modelo.rpart2<-prune.rpart(modelo.rpart,cp=cprecorte) modelo.rpart2

## n= 416 ## ## node), split, n, loss, yval, (yprob) ## * denotes terminal node ## ## 1) root 416 208 good (0.5000000 0.5000000) ## 2) status=... >= 200 DM / salary for at least 1 year,no checking account 150 34 good (0.7733333 0.2266667) * ## 3) status=... < 0 DM,0 <= ... < 200 DM 266 92 bad (0.3458647 0.6541353) *

plot(modelo.rpart2,main=" Arbol recortado", uniform=TRUE,compress=TRUE) text(modelo.rpart2,col="blue",cex=0.5)

Page 80: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

79

rpart.plot(modelo.rpart2,fallen.leaves=FALSE,cex=0.7)

Árbol recortado

modelo.rpart2=modelo.rpart ct<-table(datostest$credit_risk, predict(modelo.rpart2, datostest,type="class")) ct

## ## good bad ## good 120 88 ## bad 20 72

Resultados. Sensitividad, Especificidad y porcentaje de acierto global

100*diag(prop.table(ct, 1))

## good bad ## 57.69231 78.26087

100*sum(diag(prop.table(ct)))

## [1] 64

Obtención de la Curva COR en el conjunto test

probabiCART<- predict(modelo.rpart, datostest,"prob")[,1] prediobj<-prediction(probabiCART,datostest$credit_risk) plot(performance(prediobj, "tpr","fpr"),

Page 81: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

80

main="CURVA COR TEST. CART") abline(a=0,b=1,col="blue",lty=2)

auc<- as.numeric(performance(prediobj,"auc")@y.values) cat("AUC test= ",auc ,"\n")

## AUC test= 0.6908445

Proceso de construcción del bosque aleatorio

Construcción del bosque calculando el tiempo empleado en ejecutar el proceso

t1=proc.time() modelo.rf<- randomForest(credit_risk ~ ., data=datosent, importance=TRUE, do.trace=TRUE,ntree=500)

## ntree OOB 1 2 ## 1: 33.11% 36.49% 29.87% ## 2: 33.21% 40.15% 26.32%

………………………………………………………………………………… ## 498: 25.48% 28.85% 22.12% ## 499: 25.96% 29.81% 22.12% ## 500: 25.72% 29.33% 22.12%

(tCPURF=proc.time()-t1)

## user system elapsed ## 1.22 0.00 1.22

print(modelo.rf)

Page 82: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

81

## ## Call: ## randomForest(formula = credit_risk ~ ., data = datosent, importance = TRUE, do.trace = TRUE, ntree = 500) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 4 ## ## OOB estimate of error rate: 25.72% ## Confusion matrix: ## good bad class.error ## good 147 61 0.2932692 ## bad 46 162 0.2211538

plot(modelo.rf) legend("topright",col=1:3,lty=1:3,lwd=2, legend=c("OOB",levels(datosent$credit_risk)))

importancias=importance(modelo.rf) importancias[order(-importancias[,3]),]

## good bad MeanDecreaseAccuracy ## status 25.4698692 25.11039168 33.5149514 ## duration 13.5626986 6.12867208 13.7084748 ## amount 9.9119124 5.52065577 11.3745926 ## other_installment_plans 9.8481881 4.45029545 9.9626607 ## purpose 6.1761173 7.84743256 9.7183267 ## credit_history 8.7573419 3.29832208 8.7493077 ## age 6.2991386 3.14368929 6.5518946 ## present_residence 3.5844807 4.91086480 6.1071431 ## employment_duration 4.2728359 3.53269032 5.5368565

Page 83: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

82

## property 5.9157846 1.59712609 5.3055214 ## job 5.6186898 0.31517290 4.3021870 ## other_debtors 5.4449617 -0.42299930 3.7074279 ## savings 0.4225136 4.55975468 3.6253702 ## number_credits 5.8107304 -1.22128194 3.3522960 ## telephone 0.4199595 3.64282040 3.2900835 ## housing 4.8138650 -0.28523312 3.0693236 ## personal_status_sex 0.7353312 2.51688108 2.4570055 ## people_liable 1.4525063 -0.02566594 0.9518824 ## foreign_worker 0.6108570 0.07702136 0.5130326 ## installment_rate 0.7886071 -1.27356105 -0.4276254 ## MeanDecreaseGini ## status 27.6648869 ## duration 19.6856132 ## amount 26.5034653 ## other_installment_plans 6.4759105 ## purpose 19.0068603 ## credit_history 13.1410739 ## age 18.2391113 ## present_residence 8.4421571 ## employment_duration 9.4160515 ## property 8.9924634 ## job 5.6400405 ## other_debtors 3.8121697 ## savings 8.9074713 ## number_credits 4.0116281 ## telephone 3.3207091 ## housing 5.5676309 ## personal_status_sex 7.0884854 ## people_liable 2.6201607 ## foreign_worker 0.6536493 ## installment_rate 6.9976007

datostest.pred <- predict(modelo.rf, datostest) ct<- table(observado = datostest$credit_risk, prediccion = datostest.pred) ct

## prediccion ## observado good bad ## good 148 60 ## bad 32 60

Resultados. Sensitividad, Especificidad y porcentaje de acierto global

100*diag(prop.table(ct, 1))

## good bad ## 71.15385 65.21739

100*sum(diag(prop.table(ct)))

## [1] 69.33333

Page 84: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

83

Obtención de la Curva COR en el conjunto test

probabiRF<- predict(modelo.rf, datostest,"prob")[,1] prediobj<-prediction(probabiRF,datostest$credit_risk) plot(performance(prediobj, "tpr","fpr"), main="CURVA COR TEST. RF") abline(a=0,b=1,col="blue",lty=2)

auc<- as.numeric(performance(prediobj,"auc")@y.values) cat("AUC test= ",auc ,"\n")

## AUC test= 0.7692308

6.4.2. Remuestreo en la clase minoritaria (“UpSampling”)

Proceso de construcción del árbol de clasificación

Cargar las librerias necesarias

library(caret)

library(rpart) library (rpart.plot) library(ROCR)

library(randomForest)

Lectura de los datos

Page 85: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

84

load(file="GermanCredit.RData") dim(datosent)

## [1] 700 21

dim(datostest)

## [1] 300 21

vd=which(names(datosent)=="credit_risk")

Balanceo de los datos a partir de DownSample

upSampled = upSample(datosent[, -vd], datosent$credit_risk) dim(upSampled)

## [1] 984 21

names(upSampled)[21]="credit_risk" table(upSampled$credit_risk)

## ## good bad ## 492 492

datosent=upSampled

Construcción del árbol de clasificación Se repiten las instrucciones del primer código, en el que se procede a la construcción de un árbol de clasificación sin antes balancear los datos.

modelo.rpart<- rpart(credit_risk~ ., data=datosent,method="class",cp=0.0001) plot(modelo.rpart,main="GermanCredit. CP=0.001", uniform=TRUE,compress=TRUE) text(modelo.rpart,col="blue",cex=0.5)

Page 86: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

85

printcp(modelo.rpart,digits=3)

## ## Classification tree: ## rpart(formula = credit_risk ~ ., data = datosent, method = "class", ## cp = 1e-04) ## ## Variables actually used in tree construction: ## [1] age amount ## [3] credit_history duration ## [5] employment_duration housing ## [7] job other_debtors ## [9] other_installment_plans personal_status_sex ## [11] property purpose ## [13] savings status ## [15] telephone ## ## Root node error: 492/984 = 0.5 ## ## n= 984 ## ## CP nsplit rel error xerror xstd ## 1 0.40447 0 1.000 1.057 0.0318 ## 2 0.01931 1 0.596 0.596 0.0292 ## 3 0.01423 5 0.490 0.533 0.0282 ## 4 0.01016 7 0.461 0.516 0.0279 ## 5 0.00915 9 0.441 0.506 0.0277 ## 6 0.00813 16 0.362 0.498 0.0276 ## 7 0.00610 19 0.337 0.490 0.0274 ## 8 0.00457 22 0.319 0.480 0.0272

Page 87: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

86

## 9 0.00305 27 0.291 0.474 0.0271 ## 10 0.00271 29 0.285 0.474 0.0271 ## 11 0.00244 32 0.276 0.480 0.0272 ## 12 0.00203 37 0.264 0.484 0.0273 ## 13 0.00010 38 0.262 0.492 0.0275

plotcp(modelo.rpart,lty=2,col="blue")

Proceso de poda

cptabla<- modelo.rpart$cptable Minxerror1ES<- min(cptabla[,4])+cptabla[which.min(cptabla[,4]),5] Minxerror1ES

## [1] 0.5006814

cprecorte<- cptabla[cptabla[,4]<Minxerror1ES,][1,1] cprecorte

## [1] 0.008130081

modelo.rpart2<-prune.rpart(modelo.rpart,cp=cprecorte) cbind(modelo.rpart2$variable.importance)

## [,1] ## status 89.1070042 ## duration 32.7081748 ## purpose 32.4678087 ## amount 29.2971672 ## age 22.4602337 ## credit_history 20.2642897 ## employment_duration 15.2860861

Page 88: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

87

## other_debtors 11.4657942 ## housing 8.7242494 ## savings 8.6623140 ## present_residence 8.6465256 ## telephone 4.7149239 ## installment_rate 4.2968374 ## personal_status_sex 3.8206360 ## property 3.1408220 ## number_credits 3.0541167 ## job 1.4149195 ## people_liable 0.3682995

plot(modelo.rpart2,main=" Arbol recortado", uniform=TRUE,compress=TRUE) text(modelo.rpart2,col="blue",cex=0.5)

rpart.plot(modelo.rpart2,fallen.leaves=FALSE,cex=0.7)

Page 89: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

88

modelo.rpart2=modelo.rpart ct<-table(datostest$credit_risk, predict(modelo.rpart2, datostest,type="class")) ct

## ## good bad ## good 168 40 ## bad 43 49

Resultados. Sensitividad, Especificidad y porcentaje de acierto global

100*diag(prop.table(ct, 1))

## good bad ## 80.76923 53.26087

100*sum(diag(prop.table(ct)))

## [1] 72.33333

Obtención de la Curva COR en el conjunto test

probabiCART<- predict(modelo.rpart, datostest,"prob")[,1] prediobj<-prediction(probabiCART,datostest$credit_risk) plot(performance(prediobj, "tpr","fpr"), main="CURVA COR TEST. CART") abline(a=0,b=1,col="blue",lty=2)

Page 90: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

89

auc<- as.numeric(performance(prediobj,"auc")@y.values) cat("AUC test= ",auc ,"\n")

## AUC test= 0.7112772

Proceso de construcción del bosque aleatorio

Construcción del bosque calculando el tiempo empleado en ejecutar el proceso

t1=proc.time() modelo.rf<- randomForest(credit_risk ~ ., data=datosent, importance=TRUE, do.trace=TRUE,ntree=500)

## ntree OOB 1 2 ## 1: 26.39% 33.85% 17.86% ## 2: 25.47% 34.85% 15.25%

………………………………………………………………………………… ## 499: 9.65% 14.02% 5.28% ## 500: 9.55% 14.02% 5.08%

(tCPURF=proc.time()-t1)

## user system elapsed ## 2.58 0.02 2.59

print(modelo.rf)

## ## Call: ## randomForest(formula = credit_risk ~ ., data = datosent, importance = TRUE, do.trace = TRUE, ntree = 500)

Page 91: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

90

## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 4 ## ## OOB estimate of error rate: 9.55% ## Confusion matrix: ## good bad class.error ## good 423 69 0.14024390 ## bad 25 467 0.05081301

plot(modelo.rf) legend("topright",col=1:3,lty=1:3,lwd=2, legend=c("OOB",levels(datosent$credit_risk)))

importancias=importance(modelo.rf) importancias[order(-importancias[,3]),]

## good bad MeanDecreaseAccuracy ## status 29.293105 63.14946 60.40610 ## amount 14.612812 52.84664 52.50249 ## purpose 5.007404 49.52581 47.60030 ## duration 16.489885 45.72560 45.91294 ## age 4.459810 44.47733 41.19963 ## credit_history 11.330202 40.20672 37.22453 ## savings 2.961645 35.88971 34.09861 ## employment_duration 4.741200 35.46207 34.04849 ## property 6.186857 34.31460 32.17643 ## installment_rate 2.731290 32.63068 31.40249 ## job 2.609925 32.55214 30.42162 ## present_residence 1.432199 33.85867 30.42107 ## personal_status_sex 1.522872 31.89797 30.23173

Page 92: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

91

## other_installment_plans 4.588406 25.16724 23.90675 ## telephone 2.605330 24.29393 23.30215 ## other_debtors 12.351656 22.21189 22.93374 ## number_credits 4.444136 24.46366 22.86209 ## housing 3.037297 22.34031 21.53052 ## people_liable 3.414727 19.84907 19.34346 ## foreign_worker 4.456402 13.25792 13.11592 ## MeanDecreaseGini ## status 72.097003 ## amount 60.675184 ## purpose 41.789261 ## duration 45.761957 ## age 43.706102 ## credit_history 29.688017 ## savings 22.930153 ## employment_duration 24.591080 ## property 21.766414 ## installment_rate 16.768419 ## job 14.874647 ## present_residence 17.775996 ## personal_status_sex 17.528819 ## other_installment_plans 12.082816 ## telephone 8.149427 ## other_debtors 9.115525 ## number_credits 9.412774 ## housing 9.599195 ## people_liable 6.190293 ## foreign_worker 3.246032

datostest.pred <- predict(modelo.rf, datostest) ct<- table(observado = datostest$credit_risk, prediccion = datostest.pred) ct

## prediccion ## observado good bad ## good 186 22 ## bad 48 44

Resultados. Sensitividad, Especificidad y porcentaje de acierto global

100*diag(prop.table(ct, 1))

## good bad ## 89.42308 47.82609

100*sum(diag(prop.table(ct)))

## [1] 76.66667

Obtención de la Curva COR en el conjunto test

probabiRF<- predict(modelo.rf, datostest,"prob")[,1] prediobj<-prediction(probabiRF,datostest$credit_risk) plot(performance(prediobj, "tpr","fpr"),

Page 93: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

92

main="CURVA COR TEST. RF") abline(a=0,b=1,col="blue",lty=2)

auc<- as.numeric(performance(prediobj,"auc")@y.values) cat("AUC test= ",auc ,"\n")

## AUC test= 0.7636653

6.4.3 Umbrales de decisión alternativos

Proceso de construcción del árbol de clasificación

Cargar las librerias necesarias

library(caret)

library(rpart) library (rpart.plot) library(ROCR)

library(randomForest)

library(pROC)

Lectura de los datos

load(file="GermanCredit.RData") dim(datosent)

## [1] 700 21

Page 94: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

93

dim(datostest)

## [1] 300 21

vd=which(names(datosent)=="credit_risk")

Conjunto de validación

set.seed(12345) ival=sample(1:nrow(datosent),150) datosval=datosent[ival,] datosent2=datosent[-ival,] dim(datosent2)

## [1] 550 21

dim(datosval)

## [1] 150 21

Construcción del árbol de clasificación Se repiten las instrucciones del primer código, en el que se procede a la construcción de un árbol de clasificación sin antes balancear los datos.

modelo.rpart<- rpart(credit_risk~ ., data=datosent2,method="class",cp=0.0001) plot(modelo.rpart,main="GermanCredit. CP=0.001", uniform=TRUE,compress=TRUE) text(modelo.rpart,col="blue",cex=0.5)

printcp(modelo.rpart,digits=3)

Page 95: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

94

## ## Classification tree: ## rpart(formula = credit_risk ~ ., data = datosent2, method = "class", ## cp = 1e-04) ## ## Variables actually used in tree construction: ## [1] age amount ## [3] credit_history duration ## [5] employment_duration housing ## [7] job other_installment_plans ## [9] property purpose ## [11] savings status ## ## Root node error: 169/550 = 0.307 ## ## n= 550 ## ## CP nsplit rel error xerror xstd ## 1 0.07101 0 1.000 1.000 0.0640 ## 2 0.04142 2 0.858 0.899 0.0621 ## 3 0.02663 3 0.817 0.888 0.0618 ## 4 0.01775 7 0.669 0.935 0.0628 ## 5 0.01479 10 0.615 1.024 0.0644 ## 6 0.01183 12 0.586 1.024 0.0644 ## 7 0.00888 18 0.515 1.041 0.0647 ## 8 0.00010 20 0.497 1.041 0.0647

plotcp(modelo.rpart,lty=2,col="blue")

Proceso de poda

Page 96: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

95

cptabla<- modelo.rpart$cptable #Regla 1-ES Minxerror1ES<- min(cptabla[,4])+cptabla[which.min(cptabla[,4]),5] Minxerror1ES

## [1] 0.9493767

cprecorte<- cptabla[cptabla[,4]<Minxerror1ES,][1,1] cprecorte

## [1] 0.04142012

#Recorte modelo.rpart2<-prune.rpart(modelo.rpart,cp=cprecorte) modelo.rpart2

## n= 550 ## ## node), split, n, loss, yval, (yprob) ## * denotes terminal node ## ## 1) root 550 169 good (0.6927273 0.3072727) ## 2) status=... >= 200 DM / salary for at least 1 year,no checking account 230 28 good (0.8782609 0.1217391) * ## 3) status=... < 0 DM,0 <= ... < 200 DM 320 141 good (0.5593750 0.4406250) ## 6) duration< 31.5 256 97 good (0.6210938 0.3789062) * ## 7) duration>=31.5 64 20 bad (0.3125000 0.6875000) *

summary(modelo.rpart2)

## Call: ## rpart(formula = credit_risk ~ ., data = datosent2, method = "class", ## cp = 1e-04) ## n= 550 ## ## CP nsplit rel error xerror xstd ## 1 0.07100592 0 1.0000000 1.0000000 0.06402326 ## 2 0.04142012 2 0.8579882 0.8994083 0.06205764 ## ## Variable importance ## status duration credit_history savings amount ## 61 24 8 4 2 ## ## Node number 1: 550 observations, complexity param=0.07100592 ## predicted class=good expected loss=0.3072727 P(node) =1 ## class counts: 381 169 ## probabilities: 0.693 0.307 ## left son=2 (230 obs) right son=3 (320 obs) ## Primary splits: ## status splits as RRLL, improve=27.215460, (0 missing)

Page 97: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

96

## amount < 6409.5 to the left, improve=11.711980, (0 missing) ## duration < 31.5 to the left, improve=11.245300, (0 missing) ## credit_history splits as RRRRL, improve= 7.289101, (0 missing) ## savings splits as RRLLL, improve= 6.110754, (0 missing) ## Surrogate splits: ## credit_history splits as RRRRL, agree=0.636, adj=0.130, (0 split) ## savings splits as RRLLL, agree=0.611, adj=0.070, (0 split) ## duration < 6.5 to the left, agree=0.598, adj=0.039, (0 split) ## purpose splits as RRRRRRRRLR, agree=0.584, adj=0.004, (0 split) ## ## Node number 2: 230 observations ## predicted class=good expected loss=0.1217391 P(node) =0.4181818 ## class counts: 202 28 ## probabilities: 0.878 0.122 ## ## Node number 3: 320 observations, complexity param=0.07100592 ## predicted class=good expected loss=0.440625 P(node) =0.5818182 ## class counts: 179 141 ## probabilities: 0.559 0.441 ## left son=6 (256 obs) right son=7 (64 obs) ## Primary splits: ## duration < 31.5 to the left, improve=9.751562, (0 missing) ## amount < 8724.5 to the left, improve=6.735208, (0 missing) ## property splits as LRRR, improve=6.139099, (0 missing) ## credit_history splits as RRLLL, improve=4.145158, (0 missing) ## age < 25.5 to the right, improve=3.490901, (0 missing) ## Surrogate splits: ## amount < 6613 to the left, agree=0.822, adj=0.109, (0 split) ## ## Node number 6: 256 observations ## predicted class=good expected loss=0.3789062 P(node) =0.4654545 ## class counts: 159 97 ## probabilities: 0.621 0.379 ## ## Node number 7: 64 observations ## predicted class=bad expected loss=0.3125 P(node) =0.1163636 ## class counts: 20 44 ## probabilities: 0.312 0.688

Page 98: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

97

rpart.plot(modelo.rpart2, fallen.leaves=FALSE,cex=0.7)

modelo.rpart2=modelo.rpart probvalidac=predict(modelo.rpart, datosval,type="prob")[,2] library(pROC) rfvalidROC = roc(datosval$credit_risk, probvalidac, levels = levels(datosval$credit_risk)) rfvalidROC

## ## Call: ## roc.default(response = datosval$credit_risk, predictor = probvalidac,levels = levels(datosval$credit_risk)) ## ## Data: probvalidac in 111 controls (datosval$credit_risk good) < 39 cases (datosval$credit_risk bad). ## Area under the curve: 0.7503

Se busca el punto de corte, mediante los dos criterios previamente presentados. En este caso, ambos coinciden.

pc1 = coords(rfvalidROC, x = "best", ret="threshold", best.method="closest.topleft") pc2 = coords(rfvalidROC, x = "best", ret="threshold", best.method="youden") pc1

## [1] 0.1175676

Page 99: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

98

pc2

## [1] 0.1175676

Aplicación del modelo al conjunto test

probabitest=predict(modelo.rpart2, datostest,type="prob")[,2] preditest = factor(ifelse(probabitest < pc1, "good", "bad")) ct<-table(datostest$credit_risk, preditest) ct

## preditest ## bad good ## good 79 129 ## bad 65 27

ct=ct[c(2,1),] ct

## preditest ## bad good ## bad 65 27 ## good 79 129

Resultados. Sensitividad, Especificidad y Porcentaje de acierto global

100*diag(prop.table(ct, 1))

## bad good ## 70.65217 62.01923

100*sum(diag(prop.table(ct)))

## [1] 64.66667

Proceso de construcción del bosque aleatorio

Construcción del bosque calculando el tiempo empleado en ejecutar el proceso

modelo.rf<- randomForest(credit_risk ~ ., data=datosent2, importance=TRUE, do.trace=TRUE,ntree=500)

## ntree OOB 1 2 ## 1: 38.89% 21.60% 68.49% ## 2: 34.82% 23.94% 58.00% ## 3: 33.58% 22.34% 58.14%

………………………………………………………………………………… ## 498: 25.64% 9.19% 62.72%

Page 100: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

99

## 499: 25.82% 9.19% 63.31% ## 500: 25.82% 9.19% 63.31%

print(modelo.rf)

## ## Call: ## randomForest(formula = credit_risk ~ ., data = datosent2, importance = TRUE, do.trace = TRUE, ntree = 500) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 4 ## ## OOB estimate of error rate: 25.82% ## Confusion matrix: ## good bad class.error ## good 346 35 0.09186352 ## bad 107 62 0.63313609

plot(modelo.rf) legend("topright",col=1:3,lty=1:3,lwd=2, legend=c("OOB",levels(datosent$credit_risk)))

probvalidac=predict(modelo.rf, datosval,type="prob")[,2] rfvalidROC = roc(datosval$credit_risk, probvalidac, levels = levels(datosval$credit_risk)) rfvalidROC

Page 101: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

100

## ## Call: ## roc.default(response = datosval$credit_risk, predictor = probvalidac, levels = levels(datosval$credit_risk)) ## ## Data: probvalidac in 111 controls (datosval$credit_risk good) < 39 cases (datosval$credit_risk bad). ## Area under the curve: 0.8555

pc1 = coords(rfvalidROC, x = "best", ret="threshold", best.method="closest.topleft") pc2 = coords(rfvalidROC, x = "best", ret="threshold", best.method="youden") pc1

## [1] 0.32

pc2

## [1] 0.32

rfvalidROC = roc(datosval$credit_risk, probvalidac, levels = levels(datosval$credit_risk)) rfvalidROC

## ## Call: ## roc.default(response = datosval$credit_risk, predictor = probvalidac, levels = levels(datosval$credit_risk)) ## ## Data: probvalidac in 111 controls (datosval$credit_risk good) < 39 cases (datosval$credit_risk bad). ## Area under the curve: 0.8555

pc1 = coords(rfvalidROC, x = "best", ret="threshold", best.method="closest.topleft") pc2 = coords(rfvalidROC, x = "best", ret="threshold", best.method="youden") pc1

## [1] 0.32

pc2

## [1] 0.32

Resultados. Sensitividad, Especificidad y porcentaje de acierto global

100*diag(prop.table(ct, 1))

## bad good ## 70.65217 62.01923

100*sum(diag(prop.table(ct)))

Page 102: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

101

## [1] 64.66667

6.5. Resultados de los distintos métodos

Las tabla 6.1 y 6.2 contienen los indicadores obtenidos sobre el conjunto test para cada

una de las técnicas consideradas, la primera fila se refiere a los datos originales sin

balancear.

Tabla 6.1 Medidas de rendimiento (conjunto test) para los modelos CART aplicados a los datos

GermanCredit

AUC %Acierto global

%Sensitividad %Especificidad EMC

Datos originales 0.702 72.67 36.96 88.46 1.03

DownSampling 0.691 64.00 78.26 57.69 0.62

UpSampling 0.711 72.333 53.26 80.77 0.84

Punto de corte 0.750 64.67 70.65 62.02 0.71 Elaboración propia

Tabla 6.2 Medidas de rendimiento (conjunto test) para los modelos Random Forests aplicados a los datos

German Credit.

AUC %Acierto global

%Sensitividad %Especificidad EMC

Datos originales 0.763 75.00 33.69 93.27 1.04

DownSampling 0.769 69.33 65.22 71.15 0.81

UpSampling 0.764 76.67 47.83 89.42 0.79

Punto de corte 0.855 64.67 70.65 62.02 0.71 Elaboración propia

En la tablas 6.1 y 6.2., se observa el claro incremento en el valor de la sensitividad

para los tres métodos de tratamiento de datos no balanceados. Dependiendo del

criterio que se desee maximizar, puede ser preferible una técnica u otra. Si el interés

principal es el máximo valor posible de la sensitividad, se optaría por el método

DownSampling aplicado a los árboles de clasificación. También se pueden definir

criterios que tengan en cuenta costes de clasificación incorrectos. En este caso para

el banco puede ser mucho más costoso conceder un crédito a un cliente que no pueda

afrontar los pagos, que denegar un crédito a un cliente solvente.

Por ejemplo, el criterio coste esperado de clasificación incorrecto (Expected

Misclassification Cost) se define como sigue:

Page 103: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

102

/ /EMC P bueno P denegar bueno Coste denegar bueno

/ Cos /P malo P conceder malo te conceder malo

/ 1P denegar bueno Especificidad

/ 1P conceder malo Sensitividad

Por ejemplo, definiendo / 5P conceder malo , / 1P denegar bueno , es decir,

es cinco veces más costoso conceder créditos a clientes insolventes que al contrario,

las tablas 6.1 y 6.2, muestran el valor de dicho criterio en la última columna.

Se observa que según este criterio, los métodos elegidos serian, DownSampling para

árboles de clasificación y Punto de Corte para Random Forests ya que son aquellos

en los que se produce un menor error.

El criterio AUC no depende del punto de corte utilizado, puesto que se calcula a

partir de las probabilidades estimadas de que el crédito sea malo. Sin embargo, la

discrepancia que existe para los valores AUC de las filas 1 y 4 de cada tabla se debe

al hecho de haber particionado el conjunto de entrenamiento, por lo que se refieren a

modelos construidos sobe conjuntos distintos.

Page 104: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

103

7. Conclusiones y posibles aplicaciones futuras

Los árboles de clasificación son modelos de aprendizaje estadístico supervisado que

ofrecen diversas ventajas, especialmente la posible interpretación mediante reglas de

decisión que pueden ser representadas gráficamente. Sin embargo, su construcción debe

ser realizada cuidadosamente, algo de especial importancia debido a la alta variabilidad

de esta técnica. Los métodos de agregación de modelos, particularmente los Bosques

Aleatorios, pueden resolver estas limitaciones, y además aportan elementos importantes

como la medición de la importancia de cada variable.

Estas técnicas se aplican en una gran variedad de escenarios, por ejemplo: diagnóstico

de enfermedades, detección de correos electrónicos “spam”, identificación de

transacciones fraudulentas con tarjetas de crédito, construcción de sistemas de

reconocimientos de caracteres, análisis de información espacial.

En este trabajo se han desarrollado estos modelos sobre dos conjuntos de datos relativos

a créditos, con un gran rendimiento en el primer conjunto de datos. Para el segundo se

ha observado la necesidad de aplicar métodos específicos para el tratamiento de datos

no balanceados, lo que ha mejorado de forma importante los resultados respecto al

tratamiento original de los datos.

Toda la construcción se ha realizado sobre el entorno de programación R, un producto

de libre distribución muy utilizado hoy en día en la Minería de Datos.

Este trabajo puede continuar en el futuro en líneas como las siguientes:

– Construir árboles (y bosques aleatorios) de regresión.

– Aplicar otras técnicas de tratamiento de datos no balanceados, por ejemplo el

método SMOTE para sintetizar (generar artificialmente) nuevos casos.

– Trabajar con bases de datos de gran volumen (Big Data), mediante estrategias de

computación paralela u otro tipo de procedimientos.

En la actualidad los departamentos de riesgo de algunos bancos trabajan con algoritmos

de aprendizaje estadístico para estudiar la concesión de créditos. Sin embargo, según

Sanz (2015), la aplicación de estos modelos aún no está muy extendida en España, por

lo que cabe esperar en los próximos años un crecimiento en el uso de este tipo de

modelos de ayuda a la decisión, ya sea mediante árboles o bien mediante otras técnicas

alternativas. De acuerdo a la misma fuente, será necesario todavía completar la

información suministrada por los algoritmos con la posible intervención de expertos en

la materia. Los árboles de clasificación son modelos de aprendizaje estadístico

supervisado que ofrecen diversas ventajas, especialmente la posible interpretación

mediante reglas de decisión que pueden ser representadas gráficamente. Sin embargo,

su construcción debe ser realizada cuidadosamente, algo de especial importancia debido

a la alta variabilidad de esta técnica. Los métodos de agregación de modelos,

Page 105: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

104

particularmente los Bosques Aleatorios, pueden resolver estas limitaciones, y además

aportan elementos importantes como la medición de la importancia de cada variable.

Page 106: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

105

8. Referencias bibliográficas

Breiman, L., Friedman, J.H., Olshen, R.A., y Stone, C.J. (1984). Classification and

Regression Trees. Wadsworth, Belmont, CA.

Breiman, L. (1996). Bagging predictors. Machine Learning 24, 123-140.

Breiman, L. (2001). Random Forests. Machine Learning, 45 (1): 5-32, 2001.

Thomas Grubinger, Achim Zeileis, Karl-Peter Pfeiffer (2014). evtree: Evolutionary

Learning of Globally Optimal Classification and Regression Trees in R. Journal of

Statistical Software, 61(1), 1-29. URL http://www.jstatsoft.org/v61/i01/.

Hastie, T., Tibshirani, R., y Friedman, J. (2009). The elements of statistical learning: Data

Mining, Inference and Prediction. Springer Verlag.

James G, Witten D., Hastie, T. y Tibshirani, R (2013). An introduction to statistical

learning with application in R. Springer Verlag.

Liaw, A. and M. Wiener (2002). Classification and Regression by randomForest. R

News 2(3), 18--22.

Lichman, M. (2013). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml].

Irvine, CA: University of California, School of Information and Computer Science.

R Core Team (2017). R: A language and environment for statistical computing. R

Foundation for Statistical Computing, Vienna, Austria.

URL https://www.R-project.org/.

Robin,X., Turck, N., Hainard,A., Tiberti,N., Lisacek,F., Sanchez, J.C. and Müller, M.

(2011) pROC: an open-source package for R and S+ to analyze and compare ROC

curves. BMC Bioinformatics, 12, p. 77.

DOI: 10.1186/1471-2105-12-77 http://www.biomedcentral.com/1471-2105/12/77/

Sanz, E. (2015) http://www.elconfidencial.com/vivienda/2017-06-04/hipoteca-prestamos-algoritmos-seguros-bancos_1383183/ (último acceso 13 Junio 2017)

Therneau, T., Atkinson, B. and Brian Ripley (2017). rpart: Recursive Partitioning and

Regression Trees. R package version 4.1-11.

https://CRAN.R-project.org/package=rpart

Page 107: Evaluación del riesgo crediticio mediante árboles de ...bibing.us.es/proyectos/abreproy/91149/fichero/MEMORIATFG.pdf · incluye dos casos prácticos de construcción de árboles

106

Torgo, L. (2010). Data Mining with R, learning with case studies Chapman and

Hall/CRC. URL:

http://www.dcc.fc.up.pt/~ltorgo/DataMiningWithR (último acceso 15 Mayo 2017)