Uso de Random Forest en problemas financieros
Abstract
Este trabajo consinste en predecir una clasificación de riesgo financiero de compañías en función de varias variables. Para ello, hemos aplicado Random Forest, un algoritmo de machine learning de clasificación supervisada. En la introducción, se pone en contexto y se describe el problema de clasificación al que nos enfrentamos. En el capítulo 2, se presentan diversos conceptos sobre los árboles de clasificación y regresión y del bagging, utilizados en este trabajo. En el capítulo 3, se habla del modelo Random Forests, describiendo sus principales características. Finalmente, en el capítulo 4 se aplica Random Forest a nuestro conjunto de datos.
Full text
Grado en Matemáticas TRABAJO FIN DE GRADO Uso de Random Forest en problemas financieros Andrés Vázquez Medina Sevilla, Marzo de 2024
Índice general Resumen........................................ iii Abstract........................................ iv 1. Introducción 1 1.1. Introducción al Random Forest y por qué lo hemos elegido. Algunas ventajasdelmismo................................. 3 2. Árboles de clasificación y regresión. Bagging 5 2.1. Introducción a los árboles de clasificación y regresión . . . . . . . . . . . . 5 2.1.1. Evaluación de la bondad de las divisiones. Medidas de impureza . . 6 2.1.2. Algoritmo de construcción de un árbol, regla de parada y predicción delosnodosfinales........................... 7 2.1.3. Podadelárbol ............................. 8 2.2. Introducción al Bagging . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3. Bagging en árboles de clasificación . . . . . . . . . . . . . . . . . . . . . . 9 2.3.1. Resultados para conjuntos de datos de tamaño moderado . . . . . . 9 2.3.2. Comparaciones de Statlog para conjuntos de datos más grandes . . 10 2.4. Bagging en árboles de regresión . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5. Algunas justificaciones teóricas de Bagging y por qué funciona . . . . . . . 11 2.5.1. Predicción numérica . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.5.2. Clasificación............................... 12 2.5.3. Usando el conjunto de aprendizaje como conjunto test . . . . . . . 13 2.6. Observacionesfinales.............................. 14 2.6.1. ¿Cuántas repeticiones bootstrap son suficientes? . . . . . . . . . . . 14 2.6.2. ¿Qué tamaño debe tener el conjunto de aprendizaje Bootstrap? . . 14 3. Random Forest 17 3.1. Introducción................................... 17 3.2. Algoritmo .................................... 17 i
3.3. Validacióncruzada ............................... 18 3.4. EstimadorOOB................................. 18 3.5. Importancia de cada variable . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.6. Proximidad entre casos y valores perdidos . . . . . . . . . . . . . . . . . . 20 3.7. Precisión de los bosques aleatorios . . . . . . . . . . . . . . . . . . . . . . . 20 3.7.1. Convergencia de los bosques aleatorios . . . . . . . . . . . . . . . . 20 3.7.2. Fuerza y correlación . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.8. Random Forest para regresión . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.9. Random Forest aplicado al análisis financiero . . . . . . . . . . . . . . . . . 25 4. Aplicación a R 29 4.1. Conjuntodedatos ............................... 29 4.2. Random Forest sobre los datos . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.1. Primer conjunto de datos . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.2. Segundo conjunto de datos . . . . . . . . . . . . . . . . . . . . . . . 42 4.2.3. Tercer conjunto de datos . . . . . . . . . . . . . . . . . . . . . . . . 50 4.2.4. Cuarto conjunto de datos . . . . . . . . . . . . . . . . . . . . . . . 58 4.2.5. Quinto conjunto de datos . . . . . . . . . . . . . . . . . . . . . . . 66 Bibliografía 77 ii
Resumen Este trabajo consinste en predecir una clasificación de riesgo financiero de compañías en función de varias variables. Para ello, hemos aplicado Random Forest, un algoritmo de machine learning de clasificación supervisada. En la introducción, se pone en contexto y se describe el problema de clasificación al que nos enfrentamos. En el capítulo 2, se presentan diversos conceptos sobre los árboles de clasificación y regresión y del bagging, utilizados en este trabajo. En el capítulo 3, se habla del modelo Random Forests, describiendo sus principales características. Finalmente, en el capítulo 4 se aplica Random Forest a nuestro conjunto de datos. iii
Abstract This work consists of predicting a financial risk classification of companies based on various variables. For this purpose, we have applied Random Forest, a supervised classification machine learning algorithm. In the introduction, the context is set and the classification problem we are facing is described. In chapter 2, various concepts about classification and regression trees and bagging, used in this work, are presented. In chapter 3, the Random Forest model is discussed, describing its main characteristics. Finally, in chapter 4, Random Forest is applied to our dataset. iv
Capítulo 1 Introducción El riesgo financiero es la posibilidad de que ocurra algo con consecuencias financieras negativas para la empresa. En el mundo financiero, la capacidad para evaluar y gestionar el riesgo es fundamental para la toma de decisiones informadas y la protección de los intereses de los inversores y las empresas. En este contexto, el uso de técnicas avanzadas de machine learning se ha convertido en una herramienta muy importante para analizar y predecir el riesgo financiero de las compañías. Este trabajo tiene como objetivo principal predecir una clasificación de riesgo financiero de compañías en función de varias variables. Para ello, vamos a usar Random Forest, un algoritmo de machine learning de clasificación supervisada que explicaremos más adelante. No obstante, el problema del riesgo financiero ya estaba presente mucho antes en las economías de todo el mundo. En la década de 1930, fue planteado y las investigaciones se centraban principalmente en el análisis de ratios financieros y en el desarrollo de métodos para evaluar la solvencia y estabilidad financiera de las empresas. Los enfoques eran predominantemente descriptivos y se basaban en el análisis histórico de los estados financieros. A partir de la década de 1960 se desarrolló una etapa predictiva, donde se comenzó a analizar la significatividad estadística de cada ratio entre los diferentes grupos de empresas, así como la capacidad que tienen para poder predecir la quiebra de una empresa. Altman [1968] comenzó con el desarrollo de modelos con estas características en economías desarrolladas, que se fueron adaptando y extendiendo a economías emergentes. En su estudio recurrió a la aplicación de herramientas estadísticas multivariadas, como el análisis discriminante, con el objetivo de clasificar empresas según su riesgo de quiebra, donde la metodología seguida se basó en un diseño apareado de muestras no aleatorias y la aplicación de métodos de discriminación lineal y cuadrática. El modelo que utilizó para estudiarlo fue preciso para predecir la quiebra, pero se limitó al estudio de empresas de poder público, por lo que no podemos generalizar sus resultados ya que no estudió empresas relativamente más pequeñas, donde la incidencia de fracaso comercial es mayor. Poco después, con la aparición de la teoría de carteras y el modelo de valoración de activos financieros (CAPM), se comenzó a entender mejor la relación entre riesgo y rendimiento en los mercados financieros. Se desarrollaron modelos de valoración de riesgo y se introdujeron medidas como la volatilidad y el coeficiente beta para cuantificar el riesgo de los activos financieros. Además, se aplicaron técnicas de análisis de series temporales y regresión para predecir el riesgo financiero. 1
A partir de la década de 1980, con el avance de la informática, se empezaron a aplicar técnicas de árboles de decisión, como en Frydman et al. [1985] o en Altman and Hotchkiss [2005]. Con el uso de estas técnicas se logró un mayor grado de acierto que con las técnicas clásicas usadas hasta el momento. Los datos de todos los métodos mencionados son de corte trasversal, es decir, no tienen en cuenta la diferencia de tiempo. Sin embargo, Jones and Hensher [2004] y Jones and Hensher [2007] usan datos correlacionados en el tiempo y aplicaron modelos mixtos. Dichos estudios los usaron Caro et al. [2016], que adaptaron el modelo a los datos de una economía emergente para la predicción de crisis en empresas argentinas en la década de 1990 y en la década de los 2000 en su artículo Caro and Díaz [2016]. La crisis financiera global de 2008 destacó la importancia de una gestión más efectiva del riesgo financiero y se produjo un aumento en el uso de modelos de valoración de riesgo y técnicas avanzadas de aprendizaje automático para prever y gestionar el riesgo. Monelos et al. [2015] desarrollaron modelos para diagnosticar y pronosticar el fracaso empresarial de pequeñas empresas gallegas con base en variables financieras aplicando tres metodologías de análisis: discriminante, logit y lineal multivariante. También utilizaron programación matemática DEA (Análisis envolvente de Datos) para fundamentar la determinación del fracaso. No obstante, estas técnicas presentan el inconveniente de que parten de hipótesis más o menos restrictivas acerca de las propiedades distribucionales de las variables explicativas, las cuales no se suelen cumplir. Para resolver este problema, entre otros, surge el uso de técnicas procedentes del aprendizaje automático ya que, debido a su carácter no paramétrico, no precisan de hipótesis preestablecidas sobre las variables de partida. Las nuevas posibilidades tecnológicas, unidas a la capacidad para recopilar y procesar fuentes de información, hacen que las técnicas de aprendizaje automático (machine learning) puedan aplicarse en múltiples procesos en prácticamente todos los sectores de la actividad económica, como explican Gimeno and Marqués [2022]. A raíz de este avance, se han realizado estudios usando estas técnicas, como el realizado por Castillo et al. [2017] en el que se presentan resultados de análisis funcional exploratorio y construyen modelos de clasificación supervisada en base a la clasificación del riesgo de las cooperativas de ahorro y crédito, sujetas al control de la Superintendencia de Bancos del Ecuador, tomando como variables funcionales el índice de morosidad y el margen neto de utilidad, en el perıodo desde julio de 2011 a diciembre de 2012. En el estudio realizado, llegaron a la conclusión de que la variable que mejor permite clasificar las cooperativas de ahorro y crédito de acuerdo a los niveles de riesgo es la morosidad, ya que tiene mayor relación con las diferentes medidas de riesgo financiero. Otra técnica muy usada es la clasificación de árboles, de la cual existen varios algoritmos, como el algoritmo Chaid, que fue usado por Caro et al. [2018] con el fin de analizar la incidencia de determinadas razones contables sobre la situación financiera de empresas de distintos mercados latinoamericanos: Chile, Perú y Argentina, en base a los estados contables correspondientes al periodo 2001-2011. Esta técnica de clasificación de árboles es usada en la actualidad, como en el trabajo realizado por Hernández and Moreno [2023], en el que identifican las variables clave que influyen en el riesgo de impago en la cartera de consumo fiduciario de instituciones financieras en Honduras, aplicando técnicas como el Random Forest o el XGBoost, entre otras. 2CAPÍTULO 1. INTRODUCCIÓN
1.1. INTRODUCCIÓN AL RANDOM FOREST Y POR QUÉ LO HEMOS ELEGIDO. ALGUNAS VENTAJAS DEL MISMO 1.1. Introducción al Random Forest y por qué lo hemos elegido. Algunas ventajas del mismo Random forest es una modificación del modelo Bagging que mejora aún más el rendimiento del mismo al introducir aleatoriedad en el proceso de selección de las variables. En Random Forest, se crean múltiples árboles de decisión utilizando un subconjunto de las variables. En cada nodo del árbol, en lugar de utilizar todas las variables, seleccionamos aleatoriamente un subconjunto de ellas para dividir los datos. Este proceso se repite para cada nodo, lo que resulta en un árbol de decisión que utiliza un subconjunto de las variables. Una pequeña explicación paso a paso del proceso que se sigue sería la siguiente. Se inicia con un conjunto de entrenamiento que tiene n observaciones, la variable interés Y y las variables predictoras X1,X2,...,Xp. Luego se aplican los siguientes pasos: 1. Se construye un nuevo conjunto de entrenamiento del mismo tamaño del original usando la técnica bootstrap. Esto se hace generando un muestreo con reemplazo y de esta forma es posible que algunas observaciones aparezcan varias veces mientras que otras observaciones no aparezcan. 2. Se construye un árbol (de regresión o clasificación) usando en cada partición un subconjunto con k variables predictoras de las X1,X2,...,Xpdisponibles, elegidas aleeatoriamente. 3. Se repiten los pasos anteriores K veces (con K al menos 100). De esta forma se tendrán muchos árboles que luego se pueden usar para hacer predicciones de Y. Si queremos predecir la variable Y para un caso en el cual se tienen la información (x1,x2,...,xp)’, se toman cada uno de los B árboles creados y se predice la variable Y, de esta manera se trendrán las predicciones ˆ Y1,ˆ Y2,...,ˆ YK. Luego usando estas K predicciones, se puede obtener una predicción unificada dependiendo de si el problema es de clasificación o de regresión. Random Forest se destaca por una serie de ventajas. En estudios empíricos, proporciona resultados muy buenos. Una de las ventajas más notables del Random Forest es su eficiencia en el manejo de grandes conjuntos de datos. A diferencia de otros algoritmos que pueden tardar mucho tiempo o requerir grandes recursos computacionales, Random Forest puede ejecutarse de manera rápida y efectiva incluso en bases de datos masivas. Además, puede manejar miles de variables sin necesidad de eliminar ninguna. El algoritmo también proporciona estimaciones de la importancia de cada variable. Durante el proceso de construcción del modelo, Random Forest genera internamente un estimador insesgado del error de generalización mediante la técnica de Out-of-Bag (OOB). Otra ventaja importante es su capacidad para estimar valores perdidos de manera efectiva. Random Forest calcula prototipos que proporcionan información sobre la relación entre las variables y la clasificación. El algoritmo 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 Por esta serie de ventajas vamos a usar el Random Forest, ya que es el más adecuado para el estudio del conjunto de datos del que dispongo. CAPÍTULO 1. INTRODUCCIÓN 3
2.4. BAGGING EN ÁRBOLES DE REGRESIÓN errónea eS(L,T). Se selecciona una muestra de arranque (bootstrap) L(B)de Ly se construye un árbol usando L(B). El conjunto de aprendizaje original Lse utiliza como conjunto de prueba para seleccionar el mejor subárbol podado. Esto se repite 50 veces dando clasificadores de árbol φ1(x),... ,φ50(x). Si (yn, xn)∈ T , entonces la clase estimada de xnes aquella clase que tenga la pluralidad en φ1(x),...,φ50(x). Si hay un empate, la clase estimada es aquella con la etiqueta de clase más baja. La proporción de veces que la clase estimada difiere de la clase real es la tasa de clasificación errónea de bagging eB(L,T). La división aleatoria de los datos en LyTse repite 100 veces y las ˜eS,˜eB obtenidas son los promedios sobre las 100 iteraciones. Para los datos waveform, se generan 1800 casos nuevos en cada iteración. También se calculan los errores estándar de ˜eSy˜eBsobre las 100 iteraciones. En estos mismos datos se sabe que la tasa de error mínima posible es del 14%. Bagging reduce el exceso de error en aproximadamente dos tercios. Breiman obtuvo que el error ˜eBfue menor que ˜eSpara todos los conjuntos de datos. 2.3.2. Comparaciones de Statlog para conjuntos de datos más grandes El Proyecto Statlog comparó 22 métodos de clasificación en una amplia variedad de conjuntos de datos. Para la mayoría de estos conjuntos de datos, las tasas de error se estimaron utilizando una única validación cruzada. Sin conocer las subdivisiones aleatorias utilizadas en estas validaciones cruzadas, la variabilidad en las estimaciones de error resultantes hace que las comparaciones sean inciertas. Sin embargo, se utilizaron conjuntos de datos más grandes en el proyecto, que se dividieron en conjuntos de entrenamiento y prueba. Cuatro de estos (letters, satellite, shuttle y DNA) están disponibles públicamente, y los utilizaron como base para la comparación. Pueden accederse por ftp a ftp.strath.ac.uk. En cada conjunto de datos, se apartó aleatoriamente un 10 % del conjunto de entrenamiento y se desarrolló un árbol en el otro 90%. El 10 % apartado se utilizó para seleccionar el mejor subárbol podado. En bagging, se generaron 50 réplicas bootstrap del conjunto de entrenamiento y se desarrolló un árbol en cada una. En comparación con los 22 clasificadores en el Proyecto Statlog, los árboles bagged ocuparon el segundo lugar en precisión en el conjunto de datos de DNA, el primero en el shuttle, el segundo en el satellite y el primero en letters. Siguiendo el método de Statlog de ordenar los clasificadores por su clasificación promedio, los árboles bagged fueron el clasificador principal en estos cuatro conjuntos de datos con una clasificación promedio de 1.8. El siguiente clasificador más alto de los 22 tiene una clasificación promedio de 6.3, por lo tanto, el método que estamos estudiando fue el mejor clasificador de los estudiados. 2.4. Bagging en árboles de regresión Para llegar a estos resultados, Breiman siguió un procedimiento similar al utilizado en la clasificación. 10 CAPÍTULO 2. ÁRBOLES DE CLASIFICACIÓN Y REGRESIÓN. BAGGING
2.5. ALGUNAS JUSTIFICACIONES TEÓRICAS DE BAGGING Y POR QUÉ FUNCIONA Cada conjunto de datos real se divide aleatoriamente en un conjunto de prueba que consiste en el 10% de los datos y un conjunto de aprendizaje Lque consiste en el otro 90%. Se construye un árbol de regresión a partir de Lutilizando validación cruzada de 10 pliegues. Si ejecutamos el conjunto de prueba en este árbol nos da el error cuadrático eS(L,T). A continuación se selecciona una muestra bootstrap LBde Ly se construye un árbol utilizando LB, mientras que Lse utiliza para seleccionar el subárbol podado. Esto se repite 25 veces, dando predictores de árbol φ1(x),...,φ25(x). Para (yn, xn)∈ T , el predictor es ˆyn=avkφk(xn)y el error cuadrático eB(L,T)es avn(yn−ˆyn)2, donde av denota la media aritmética. La división aleatoria de los datos en LyTse repite 100 veces y las ˜eS,˜eBobtenidas son los promedios sobre las 100 iteraciones. Breiman obtuvo que el error ˜eBfue menor que ˜eSpara todos los conjuntos de datos. 2.5. Algunas justificaciones teóricas de Bagging y por qué funciona 2.5.1. Predicción numérica Sea cada caso (y, x)en Lindependientemente extraído de la distribución de probabilidad P. Supongamos que yes numérico y φ(x, L)es el predictor. Entonces, el predictor agregado es el promedio sobre Lde φ(x, L), es decir, ϕA(x) = EL[φ(x, L)] Tomemos xcomo un valor de entrada fijo e ycomo un valor de salida. Entonces, EL[(y−φ(x, L))2] = y2−2yEL[φ(x, L)] + EL[φ2(x, L)] (2.1) Usando EL[φ(x, L)] = ϕA(x)y aplicando la desigualdad E[Z2]≥[E(Z)]2al tercer término en (2.1) se obtiene EL[(y−φ(x, L))2]≥(y−ϕA(x))2(2.2) Integrando ambos lados de (2.2) sobre la distribución conjunta de y,x, obtenemos que el error cuadrático medio de ϕA(x)es menor que el error cuadrático medio promediado sobre Lde φ(x, L). La magnitud de la reducción depende de cuánto de desiguales sean los dos lados de [EL[φ(x, L)]2≤EL[φ2(x, L)] El efecto de la inestabilidad es claro. Si φ(x, L)no cambia mucho con Lrepetido, los dos lados serán casi iguales y la agregación no ayudará. Cuanto más variable sea φ(x, L), mayor será la mejora que puede producir la agregación. Pero φAsiempre mejora φ. CAPÍTULO 2. ÁRBOLES DE CLASIFICACIÓN Y REGRESIÓN. BAGGING 11
2.5. ALGUNAS JUSTIFICACIONES TEÓRICAS DE BAGGING Y POR QUÉ FUNCIONA Ahora ϕAno depende solo de xsino también de la distribución de probabilidad subyacente Pde la cual se extrae L, es decir, ϕA=ϕA(x, P). Pero la estimación bagged no es φA(x, P), sino φB(x) = φA(x, PL), donde PLes la distribución que concentra la masa 1/N en cada punto (yn, xn)∈ L (PLse llama la aproximación bootstrap a P). Entonces, por un lado, φBpuede mejorar a través de la agregación si el procedimiento es inestable. Por otro lado, si el prodecimiento es estable, entonces φB=φA(x, PL)no será tan preciso para los datos extraídos de P como φA(x, P)≈φ(x, L). Hay un punto de cruce entre inestabilidad y estabilidad en el que φBdeja de mejorar φ(x, L)y lo hace peor. Hay otra limitación obvia del bagging. Para algunos conjuntos de datos, puede suceder que φ(x, L)esté cerca de los límites de precisión alcanzables en esos datos. Entonces, ninguna cantidad de bagging mejorará mucho. 2.5.2. Clasificación En clasificación, un predictor φ(x, L)predice una etiqueta de clase j∈ {1, ..., J}. Denotemos Q(j|x) = P(φ(x, L) = j). La interpretación de Q(j|x)es la siguiente: sobre muchas repeticiones independientes del conjunto de aprendizaje L,φpredice la etiqueta de clase jen la entrada xcon una frecuencia relativa Q(j|x). Sea P(j|x)la probabilidad de que la entrada xgenere la clase j. Entonces, la probabilidad de que el predictor clasifique correctamente el estado generado en xes: X j Q(j|x)P(j|x)(2.3) La probabilidad general de clasificación correcta es: r=Z X j Q(j|x)P(j|x) PX(dx) donde PX(dx)es la distribución de probabilidad de x. Observando (2.3), nota que para cualquier Q(j|x), X j Q(j|x)P(j|x)≤m´ax jP(j|x) con igualdad solo si Q(j|x) = 1si P(j|x) = m´axiP(i|x) 0en otro caso 12 CAPÍTULO 2. ÁRBOLES DE CLASIFICACIÓN Y REGRESIÓN. BAGGING
2.5. ALGUNAS JUSTIFICACIONES TEÓRICAS DE BAGGING Y POR QUÉ FUNCIONA El predictor φ∗(x) = argmaxjP(j|x)(conocido como el predictor de Bayes) conduce a la expresión anterior para Q(j|x)y proporciona la tasa de clasificación correcta más alta posible: r∗=Zm´ax jP(j|x)PX(x)dx Llamamos a φde orden correcto en la entrada xsi argmaxjQ(j|x) = argmaxjP(j|x) Esto significa que si la entrada xresulta en la clase jmás a menudo que cualquier otra clase, entonces φtambién predice la clase jen xmás a menudo que cualquier otra clase. Un predictor de orden correcto no necesariamente es un predictor preciso. Por ejemplo, en un problema de dos clases, supongamos que P(1|x) = 0.9,P(2|x) = 0.1yQ(1|x) = 0.6, Q(2|x)=0.4. Entonces, la probabilidad de clasificación correcta por φen xes 0.58, pero el predictor de Bayes obtiene una clasificación correcta con probabilidad 0.90. El predictor agregado es: ϕA(x) = argmaxjQ(j|x). Para el predictor agregado, la probabilidad de clasificación correcta en xes X j I(argmaxiQ(i|x) = j)P(j|x)(2.4) donde I(·)es la función indicadora. Si φes de orden correcto en x, entonces (2.4) es igual a m´axjP(j|x). Si denominamos Ccomo el conjunto de todas las entradas xen las que φes de orden correcto, obtenemos para la probabilidad de clasificación correcta de ϕAla expresión rA=Zx∈Cm´ax jP(j|x)PX(dx) + Zx∈C′ X j I(ϕA(x) = j)P(j|x) PX(x) Incluso si φes de orden correcto en x, su tasa de clasificación correcta puede estar lejos de ser óptima. Pero ϕAes óptimo. Si un predictor es bueno en el sentido de que es de orden correcto para la mayoría de las entradas x, entonces la agregación puede transformarlo en un predictor casi óptimo. Por otro lado, a diferencia de la situación de predicción numérica, los malos predictores pueden convertirse en peores. El mismo comportamiento con respecto a la estabilidad se mantiene. Bagging de clasificadores inestables generalmente los mejora. Bagging de clasificadores estables no es una buena idea. 2.5.3. Usando el conjunto de aprendizaje como conjunto test En el método de bagging de árboles, el conjunto de entrenamiento LBse genera mediante muestreo de la distribución PL. Usando LB, se construye un árbol más grande T. Encontramos la secuencia de subárboles podados de costo mínimo de Tcon la metodología estándar de CART (Classification and Regression Trees). El “mejor” subárbol podado en esta secuencia se selecciona utilizando ya sea validación cruzada o un conjunto de prueba. CAPÍTULO 2. ÁRBOLES DE CLASIFICACIÓN Y REGRESIÓN. BAGGING 13
2.6. OBSERVACIONES FINALES La idea de un conjunto de prueba es que se forma mediante muestreo independiente de la misma distribución subyacente que dio lugar al conjunto de aprendizaje. En el contexto actual, un conjunto de prueba se forma mediante muestreo independiente de PL, es decir, podemos obtener un conjunto de prueba mediante muestreo con reemplazo, del conjunto de aprendizaje original L. Consideremos el muestreo de L, con reemplazo, un gran número de veces N′. Si k(n)es el número de veces que se selecciona (yn, xn), entonces el contenido intuitivo del argumento es que k(n)/k(n′)≈1, es decir, cada caso (yn, xn)se seleccionará aproximadamente el mismo número de veces, en proporción, que cualquier otro caso. Por lo tanto, usar un conjunto de prueba muy grande muestreado de PLes equivalente a simplemente usar L como un conjunto de prueba. Un argumento algo más convincente es el siguiente: si hay Ncasos (yn, xn), entonces el número de veces que se selecciona cualquier (yn, xn)tiene una distribución binomial con p= 1/N yN′pruebas. El número esperado de veces que se selecciona (yn, xn)es N′p=N′/N. La desviación típica del número de veces que se selecciona (yn, xn)es √N′pq ≈qN′/N. Por lo tanto, para todo n, k(n) (N′/N)≈1 + o(1). El hecho de que Lse pueda usar como un conjunto de prueba para predictores generados en una muestra de bootstrap L(B)es más útil en general que solo en el contexto de predictores de árboles. Por ejemplo, en redes neuronales, la parada depende del uso de un conjunto de prueba. Así, en el bagging de redes neuronales, el punto óptimo de parada se puede estimar utilizando el conjunto de aprendizaje original como conjunto de prueba. 2.6. Observaciones finales 2.6.1. ¿Cuántas repeticiones bootstrap son suficientes? En los experimentos que realizó Breiman, se utilizaron 50 repeticiones bootstrap para clasificación y 25 para regresión, lo cual no quiere decir que fueran las necesarias o suficientes, sino que eran razonables. Se ejecutaron unos datos (concretamente los waveform) utilizando 10, 25, 50 y 100 repeticiones bootstrap, con los que se obtuvo que la mayor parte de la mejora se conseguía ya con 10 repeticiones, por lo que más de 25 era trabajar en vano. Sin embargo, esta tampoco es una cuestión muy importante ya que bagging tiene la ventaja de que se puede trabajar en paralelo, es decir, se puede construir un predictor en cada L(B)sin necesidad de comunicación entre los demás. 2.6.2. ¿Qué tamaño debe tener el conjunto de aprendizaje Bootstrap? En todas las ejecuciones realizadas por Breiman, utilizaron repeticiones bootstrap L(B) del mismo tamaño que el conjunto de aprendizaje inicial L. Aunque una repetición boots- 14 CAPÍTULO 2. ÁRBOLES DE CLASIFICACIÓN Y REGRESIÓN. BAGGING
2.6. OBSERVACIONES FINALES trap puede tener 2 o más duplicados de una instancia dada, también deja fuera aproximadamente el 37% de las instancias. Por esto, se pensó que la precisión podría mejorar si se utilizara un conjunto bootstrap más grande. Experimentaron con conjuntos de aprendizaje bootstrap del doble del tamaño de L, con los que se dejaban fuera aproximadamente e−2= 0.14 de las instancias. Sin embargo, no hubo mejora en la precisión. CAPÍTULO 2. ÁRBOLES DE CLASIFICACIÓN Y REGRESIÓN. BAGGING 15
Capítulo 3 Random Forest 3.1. Introducción Se han logrado mejoras significativas en la precisión de la clasificación al considerar un conjunto de árboles y seleccionar la clase más popular. Para hacer crecer estos conjuntos, a menudo se generan vectores aleatorios que controlan el crecimiento de cada árbol del conjunto. Un ejemplo es el bagging, explicado en la sección anterior, donde para hacer crecer cada árbol se realiza una selección aleatoria con reemplazo a partir de los ejemplos del conjunto de entrenamiento. Otro ejemplo es la selección de división aleatoria, donde en cada nodo la división se selecciona al azar entre las k mejores divisiones. Otro enfoque es seleccionar el conjunto de entrenamiento a partir de un conjunto aleatorio de pesos. En todos estos procedimientos se genera un vector aleatorio Θkpara el k-ésimo árbol, independiente de los vectores aleatorios anteriores Θ1,...,Θk−1pero con la misma distribución, y se construye un árbol usando el conjunto de entrenamiento y Θk, lo que da como resultado un clasificador φ(x,Θk)donde xes un vector de entrada. En la selección dividida aleatoria, Θconsta de números enteros aleatorios independientes entre 1 y K. La naturaleza y dimensionalidad de Θdepende de su uso en la construcción de los árboles. Después de generar una gran cantidad de árboles, se escoge la clase más popular. A estos procedimientos los llamamos bosques aleatorios (random forests). Definición 3.1.1. Un bosque aleatorio es un clasificador que consta de una colección de árboles clasificadores {φ(x,Θk),k= 1, ...} donde los {Θk} son vectores aleatorios independientes idénticamente distribuidos y cada árbol emite un voto para la clase más popular en x. 3.2. Algoritmo Para estas secciones, nos hemos basado en los apuntes del Máster Propio de la Universidad de Sevilla Data Science y Big Data, Gálvez Ruiz. Vamos a suponer que estamos usando un criterio de parada basado en que se alcance un determinado tamaño mínimo de nodo. Para k= 1 hasta K(Kal menos 100). 17
3.3. VALIDACIÓN CRUZADA En primer lugar, tomamos una muestra bootstrap Z∗de tamaño Na partir de los datos de entrenamiento. A continuación, creamos un árbol hkcon los datos bootstrap, repitiendo recursivamente los siguientes pasos para cada nodo terminal del árbol, hasta que se alcance el tamaño mínimo de nodo nmin. 1. Seleccionamos mvariables al azar de las pvariables. 2. Elegimos la mejor variable de división entre las m. 3. Dividimos el nodo en dos nodos hijos. Finalmente, obtenemos el conjunto de árboles {hk}K k=1. Para hacer una predicción en un nuevo punto x, si estamos en un problema de regresión, la predicción sería ˆ fK(x) = 1 KPK k=1 hk(x). Por otro lado, si estamos en un problema de clasificación, sea ˆ Ck(x)la predicción de clase del k-ésimo árbol de bosque aleatorio. Entonces, la predicción es ˆ CK(x), que es el voto mayoritario de {ˆ Ck(x)}K k=1. 3.3. Validación cruzada Es uno de los métodos más sencillos para estimar el error de predicción. Primeros, debemos tomar un k, el cual es el número de grupos, del mismo tamaño aproximadamente, en los que dividimos aleatoriamente la muestra. A continuación, tomamos cada grupo como muestra test y el resto como muestra de aprendizaje, obteniendo así los kerrores. Finalmente, tomamos como error la media de los kerrores así obtenidos. Existen también otros método de validación cruzada, como el denominado “leave one out”, que se basa en lo siguiente. Para cada dato de la muestra, tomamos éste como muestra test, y los restantes como muestra de aprendizaje. Finalmente, tomamos como error la media de los errores así obtenidos. 3.4. Estimador OOB El estimador OOB (“Out Of Bag”) del error de predicción se basa en el aprovechamiento de las observaciones no incluidas en cada muestra bootstrap. Se puede utilizar como alternativa al conjunto test cuando no hay suficientes datos. En problemas de clasificación, se puede obtener dicho estimador de la siguiente forma: Sea un conjunto de entrenamiento {L= (yi, xi), i = 1,2, ..., n}, donde las clases de cada caso se identifican mediante las clases yi. Para k= 1 hasta K: Generamos una muestra bootstrap L(B)del conjunto L. Sea Lk= {Li/Li/∈ L(B)} = L−L(B). Construimos el modelo hksobre L(B). Aplicamos hka cada elemento de Lk. Aplicamos lo anterior al siguiente k. 18 CAPÍTULO 3. RANDOM FOREST
3.5. IMPORTANCIA DE CADA VARIABLE Se tendrán predicciones para cada caso Liproporcionadas por los modelos en los que no se incluya Lien el conjunto de entrenamiento. Como en el procedimiento de validación cruzada, obtenemos la predicción agregada para Licalculando la clase en la cual es clasificado más veces dicho caso por los modelos explicados. Vi=arg m´ax j∈1,2,...,K{#[hk(xí) = j/Li∈ Lk]} El estimador OOB de la tasa de error se define a partir de las clasificaciones “out of the bag” OOB =1 n n X i=1 I(yi=Vi) Entonces, la tasa de error OOB se puede ver como la proporción de casos cuya clasificación OOB no coincide con su clase real. 3.5. Importancia de cada variable Una de las ventajas de Random Forest es que podemos dar una estimación de la importancia de cada variable, lo hacemos de la siguiente forma: Sean pvariables predictoras. Para k= 1 hasta K: Generamos una muestra bootstrap L(B)del conjunto L. Sea Lk= {Li/Li/∈ L(B)} = L−L(B). Construimos el modelo hksobre L(B). Aplicamos hka cada elemento de Lk. Calculamos le número de clasificaciones correctas sobre los elementos de Lk. Lk= #{hk(xi) = yi/Li∈ Lk} Para j= 1,2, ..., p: Permutamos aleatoriamente los valores de la variable jentre los casos del conjunto Lk. Calculamos de nuevo el número de clasificaciones correctas sobre Lky lo denominamos Ljk. Calculamos Rjk =Ck−Cjk. Reiteramos este proceso para todos los posibles jy todos los posibles k. Definimos el decrecimiento medio de la precisión para cada variable como: IMj=1 K K X k=1 Rjk CAPÍTULO 3. RANDOM FOREST 19
3.9. RANDOM FOREST APLICADO AL ANÁLISIS FINANCIERO Generalmente, Random Forest asume el mismo peso para todos los clasificadores, pero realmente no todos los árboles tienen la misma capacidad para tomar decisiones y algunos pueden tener menos peso que otros. Para ello, trabajamos con el Random Forest ponderado, con el fin de controlar el riesgo financiero de manera más efectiva. En un estudio realizado en 2020 por Wang et al. [2020], utilizaron un conjunto de datos de préstamos de un banco comercial para probar cinco algoritmos diferentes de aprendizaje automático, incluidos KNN(k vecinos más cercanos), DT(árboles de decisión), RF(random forest), NB(modelo bayesiano) y regresión logística para la evaluación del riesgo crediticio. Sus resultados muestran que el algoritmo de bosque aleatorio (Random Forest) funciona mejor que los otros algoritmos probados. Suponiendo que el conjunto de muestras de entrenamiento Dcon Ndatos de crédito financiero se puede dividir en Kcategorías, se establecen las siguientes fórmulas en árboles de decisión, explicados en el capítulo anterior: H(D) = − K X k=1 nk Nlog2p(nk N) donde H(D)denota la entropía, nkel número de la categoría kypla probabilidad. De manera similar, tenemos una fórmula para la ganancia de información: g(D, a) = H(D)− V X v=1 |Dv| DH(Dv) y para la tasa de dicha ganancia de información: gR(D, a) = g(D, a) −PV v=1 |Dv| Dlog2(|Dv| D) Denotamos también la impureza de Gini como: Gini(D) = 1 − K X k=1 (nk N)2 donde nkes el número de la categoría k,vrepresenta el número de subconjuntos del conjunto de muestras divididas según la característica a, cuyo rango de valores es [1,V]. Supongamos que el conjunto de datos de entrenamiento de crédito financiero de entrada es D, el número de iteraciones del árbol de decisión es M, y generamos un bosque aleatorio (algoritmo de random forest) como hemos explicado anteriormente. Si tratamos con datos desbalanceados, el algoritmo tiende a ignorar la clasificación de clases con menos datos para minimizar la tasa de error general, y construir así un modelo favoreciendo la clasificación de la mayoría de las clases. Para mejorar esta situación, trabajamos con random forest ponderado, que consiste en aumentar la influencia de las clases menos numerosas dándoles más peso y mejorando así la precisión de los resultados de clasificación de los datos menos numerosos. El peso de la clase se refleja principalmente en: 26 CAPÍTULO 3. RANDOM FOREST
3.9. RANDOM FOREST APLICADO AL ANÁLISIS FINANCIERO El proceso de crecimiento del árbol de decisión: la reducción △gide la impureza de Gini ponderada GI se utiliza para encontrar la característica de división óptima. Cuanto mayor sea el valor, menor será la impureza representativa y mejor será el resultado de la separación. La fórmula de cálculo es: GI(J) = PK i=1(niWi)2 PK i=1 niWi △gi=GI(J)−GI(JL)−GI(JR) donde Krepresenta el número total de categorías, Jrepresenta el conjunto de muestras en el nodo, JLyJRrepresentan el conjunto de muestras de los nodos tras la división, nirepresenta el número de muestras en el nodo y Wirepresenta el valor del peso asignado a cada clase. Determinación de la categoría en el nodo final: el resultado final de la clasificación cse determina combinando la votación ponderada de cada árbol de decisión. La fórmula de cálculo es: c= arg m´ax i(niWi). Mediante estos cálculos, conseguimos la clasificamos de los datos de crédito financiero para la posterior evaluación del riesgo financiero. Construimos el índice de evaluación de riesgo financiero para evaluar el mismo. Para su construcción, debemos tener en cuenta los siguientes factores: Algunos principios básicos, entre los que destacan el principio de exhaustividad, ya que se deben cubrir bien todos los factores que afectan el riesgo y garantizar la precisión de la evaluación; el principio de optimización del sistema, para seleccionar los indicadores importantes y eliminar aquellos que sean redundantes; la operabilidad, es decir, asegurar la fiabilidad y precisión de los datos obtenidos por los indicadores; el principio de legalidad y equidad, para que el índice sea legal, objetivo y justo. Las variables que vamos a tener en cuenta son las siguientes: Indicadores de información personal, entre los que se encuentran la edad, que disminuye el riesgo a medida que aumenta la edad, generalmente; el estado civil; el género, siendo levemente mayor el riesgo en los hombres; el nivel educativo, disminuyendo el error cuanto mayor nivel educativo tenga la persona, ya que generalmente la calidad personal está correlacionada positivamente con el nivel educativo; el tipo de ocupación y la posición, por ejemplo, a un cliente desempleado no se le otorga un préstamo normalmente y un cliente con un cargo o posición elevada tendrá menor riesgo debido a que puede prestar más atención a su reputación personal. Indicadores económicos, entre los que destacan el ingreso mensual del cliente, siendo menor el riesgo cuanto mayor sea el ingreso mensual; la proporción de pago mensual en el ingreso disponible mensual, siendo menor el riesgo a medida que disminuye esta proporción; el plazo del préstamo, siendo mayor el riesgo cuanto mayor sea el plazo. CAPÍTULO 3. RANDOM FOREST 27
3.9. RANDOM FOREST APLICADO AL ANÁLISIS FINANCIERO Indicadores de reputación personal, entre los que destacan el historial crediticio del cliente, los registros judiciales del cliente para indicar si tiene antecedentes penales y otros registros de daño como pueden ser la evasión de impuestos, atrasos en el pago de servicios de agua o luz, entre otros. Finalmente, para verificar todo esto, Guo Yangyudongnanxin realizó un experimento para simular el problema de evaluación del riesgo financiero con una biblioteca de Phyton en la que se encuentra el algoritmo de Random Forest. Usaron un conjunto de datos reales de la base de datos de crédito personal de una sucursal de un banco comercial, de la cual seleccionaron aleatoriamente 75 muestras a las que le aplicaron el Random Forest ponderado. Para evaluarlo, consideraron la precisión del modelo, es decir: Precisión=V P +V N V P +FP +FN +V N donde V P yV N son los verdaderos positivos y negativos, y FP yFN son los falsos positivos y negativos. Obtuvieron una tasa de precisión del 97.5%, siendo estos unos resultados muy buenos. 28 CAPÍTULO 3. RANDOM FOREST
Capítulo 4 Aplicación a R 4.1. Conjunto de datos El conjunto de datos elegido es Tomczak [2016], que trata sobre la predicción de quiebras de empresas polacas. Los datos fueron recopilados de Emerging Markets Information Service (citar Emerging markets research, data and news | EMIS), que es una base de datos que contiene información sobre mercados emergentes en todo el mundo. Las empresas en quiebra fueron analizadas en el periodo 2000-2012, mientras que las empresas que aún operaban fueron evaluadas desde 2007 hasta 2013. Basándose en los datos recopilados, en los cuales hay algunos valores perdidos, voy a trabajar con cinco conjuntos de datos, los cuales dependen del periodo de pronóstico: Y1=1year; los datos contienen tasas financieras del primer año del periodo de pronóstico y una etiqueta de clase correspondiente que indica el estado de quiebra después de 5 años. Los datos contienen 7027 instancias (estados financieros), 271 representan empresas que quebraron, 6756 empresas que no quebraron en el periodo de pronóstico. Y2=2year; los datos contienen tasas financieras del segundo año del periodo de pronóstico y una etiqueta de clase correspondiente que indica el estado de quiebra después de 4 años. Los datos contienen 10173 instancias (estados financieros), 400 representan empresas que quebraron, 9773 empresas que no quebraron en el periodo de pronóstico. Y3=3year; los datos contienen tasas financieras del tercer año del periodo de pronóstico y una etiqueta de clase correspondiente que indica el estado de quiebra después de 3 años. Los datos contienen 10503 instancias (estados financieros), 495 representan empresas que quebraron, 10008 empresas que no quebraron en el periodo de pronóstico. Y4=4year; los datos contienen tasas financieras del cuarto año del periodo de pronóstico y una etiqueta de clase correspondiente que indica el estado de quiebra después de 2 años. Los datos contienen 9792 instancias (estados financieros), 515 representan empresas que quebraron, 9277 empresas que no quebraron en el periodo de pronóstico. Y5=5year; los datos contienen tasas financieras del quinto año del periodo de pronóstico y una etiqueta de clase correspondiente que indica el estado de quiebra después de 1 año. Los datos contienen 5910 instancias (estados financieros), 410 representan empresas que quebraron, 5500 empresas que no quebraron en el periodo de pronóstico. 29
4.1. CONJUNTO DE DATOS En todos estos conjuntos de datos la variable que voy a tratar de predecir es la que determina si la empresa va a caer en bancarrota o no, para ello, tenemos una serie de variables predictoras con las que trabajaré, que son las siguientes: X1: Beneficio neto / activos totales X2: Pasivo total / activos totales X3: Capital de trabajo / activos totales X4: Activos corrientes / pasivos a corto plazo X5: [(efectivo + valores a corto plazo + cuentas por cobrar - pasivos a corto plazo) / (gastos operativos - depreciación)] * 365 X6: Utilidades retenidas / activos totales X7: EBIT / activos totales X8: Valor en libros del capital / pasivos totales X9: Ventas / activos totales X10: Capital / activos totales X11: (Beneficio bruto + ítems extraordinarios + gastos financieros) / activos totales X12: Beneficio bruto / pasivos a corto plazo X13: (Beneficio bruto + depreciación) / ventas X14: (Beneficio bruto + intereses) / activos totales X15: (pasivos totales * 365) / (beneficio bruto + depreciación) X16: (Beneficio bruto + depreciación) / pasivos totales X17: Activos totales / pasivos totales X18: Beneficio bruto / activos totales X19: Beneficio bruto / ventas X20: (inventario * 365) / ventas X21: Ventas (n) / ventas (n-1) X22: Beneficio en actividades operativas / activos totales X23: Beneficio neto / ventas X24: Beneficio bruto (en 3 años) / activos totales X25: (capital - capital social) / activos totales X26: (beneficio neto + depreciación) / pasivos totales X27: Beneficio en actividades operativas / gastos financieros X28: Capital de trabajo / activos fijos X29: Logaritmo de los activos totales X30: (pasivos totales - efectivo) / ventas X31: (Beneficio bruto + intereses) / ventas 30 CAPÍTULO 4. APLICACIÓN A R
4.1. CONJUNTO DE DATOS X32: (pasivos corrientes * 365) / costo de los productos vendidos X33: Gastos operativos / pasivos a corto plazo X34: Gastos operativos / pasivos totales X35: Beneficio en ventas / activos totales X36: Ventas totales / activos totales X37: (activos corrientes - inventarios) / pasivos a largo plazo X38: Capital constante / activos totales X39: Beneficio en ventas / ventas X40: (activos corrientes - inventario - cuentas por cobrar) / pasivos a corto plazo X41: Pasivos totales / ((beneficio en actividades operativas + depreciación) * (12/365)) X42: Beneficio en actividades operativas / ventas X43: Rotación de cuentas por cobrar + rotación de inventarios en días X44: (cuentas por cobrar * 365) / ventas X45: Beneficio neto / inventario X46: (activos corrientes - inventario) / pasivos a corto plazo X47: (inventario * 365) / costo de los productos vendidos X48: EBITDA (beneficio en actividades operativas - depreciación) / activos totales X49: EBITDA (beneficio en actividades operativas - depreciación) / ventas X50: Activos corrientes / pasivos totales X51: Pasivos a corto plazo / activos totales X52: (pasivos a corto plazo * 365) / costo de los productos vendidos X53: Capital / activos fijos X54: Capital constante / activos fijos X55: Capital de trabajo X56: (ventas - costo de los productos vendidos) / ventas X57: (activos corrientes - inventario - pasivos a corto plazo) / (ventas - beneficio bruto - depreciación) X58: Costos totales / ventas totales X59: Pasivos a largo plazo / capital X60: Ventas / inventario X61: Ventas / cuentas por cobrar X62: (pasivos a corto plazo * 365) / ventas X63: Ventas / pasivos a corto plazo X64: Ventas / activos fijos CAPÍTULO 4. APLICACIÓN A R 31
4.2. RANDOM FOREST SOBRE LOS DATOS 4.2. Random Forest sobre los datos En esta sección, vamos a realizar el estudio sobre la base de datos explicada para predecir qué empresa entrará o no en bancarrota a lo largo de los años. 4.2.1. Primer conjunto de datos Vamos a empezar con los datos 1year: set.seed(123) library(foreign) datos1 <- read.arff("1year.arff") summary(datos1) ## Attr1 Attr2 Attr3 Attr4 ## Min. :-256.89000 Min. :-72.1620 Min. :-440.5000 Min. : 0.000 ## 1st Qu.: 0.02118 1st Qu.: 0.2967 1st Qu.: 0.0270 1st Qu.: 1.063 ## Median : 0.07580 Median : 0.4830 Median : 0.1813 Median : 1.502 ## Mean : 0.03466 Mean : 0.5602 Mean : 0.1200 Mean : 2.629 ## 3rd Qu.: 0.16027 3rd Qu.: 0.6802 3rd Qu.: 0.3625 3rd Qu.: 2.461 ## Max. : 94.28000 Max. :441.5000 Max. : 1.0000 Max. :1017.800 ## NA’s :3 NA’s :3 NA’s :3 NA’s :30 ## Attr5 Attr6 Attr7 ## Min. :-2722100.0 Min. :-397.8900 Min. :-189.5600 ## 1st Qu.: -44.5 1st Qu.: 0.0000 1st Qu.: 0.0280 ## Median : -5.4 Median : 0.0000 Median : 0.0901 ## Mean : -263.2 Mean : 0.0597 Mean : 0.3139 ## 3rd Qu.: 37.8 3rd Qu.: 0.1467 3rd Qu.: 0.1887 ## Max. : 990900.0 Max. : 303.6700 Max. : 453.7700 ## NA’s :8 NA’s :3 NA’s :3 ## Attr8 Attr9 Attr10 Attr11 ## Min. :-141.4100 Min. : 0.000 Min. :-440.5500 Min. :-189.4500 ## 1st Qu.: 0.4457 1st Qu.: 1.037 1st Qu.: 0.3008 1st Qu.: 0.0382 ## Median : 1.0151 Median : 1.206 Median : 0.4922 Median : 0.1027 ## Mean : 2.6240 Mean : 5.553 Mean : 1.8258 Mean : 0.3544 ## 3rd Qu.: 2.2677 3rd Qu.: 2.133 3rd Qu.: 0.6757 3rd Qu.: 0.2021 ## Max. :1452.2000 Max. :3876.100 Max. :1099.5000 Max. : 453.7800 ## NA’s :25 NA’s :1 NA’s :3 NA’s :39 ## Attr12 Attr13 Attr14 Attr15 ## Min. :-23.2070 Min. : -607.420 Min. :-189.5600 Min. :-5611900 ## 1st Qu.: 0.0631 1st Qu.: 0.038 1st Qu.: 0.0280 1st Qu.: 344 ## Median : 0.2482 Median : 0.081 Median : 0.0901 Median : 926 ## Mean : 0.7998 Mean : 2.093 Mean : 0.3139 Mean : 1803 ## 3rd Qu.: 0.6876 3rd Qu.: 0.145 3rd Qu.: 0.1887 3rd Qu.: 2166 ## Max. :331.4600 Max. :13315.000 Max. : 453.7700 Max. : 3599100 ## NA’s :30 NA’s :3 NA’s :2 ## Attr16 Attr17 Attr18 Attr19 32 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS ## Min. :-42.3220 Min. : -0.4129 Min. :-189.5600 Min. :-622.0600 ## 1st Qu.: 0.1228 1st Qu.: 1.4670 1st Qu.: 0.0280 1st Qu.: 0.0148 ## Median : 0.3111 Median : 2.0627 Median : 0.0901 Median : 0.0500 ## Mean : 0.8707 Mean : 3.7519 Mean : 0.3139 Mean : 0.4624 ## 3rd Qu.: 0.7378 3rd Qu.: 3.3475 3rd Qu.: 0.1887 3rd Qu.: 0.1045 ## Max. :405.3300 Max. :1529.9000 Max. : 453.7700 Max. :2156.8000 ## NA’s :25 NA’s :25 NA’s :3 ## Attr20 Attr21 Attr22 Attr23 ## Min. : 0 Min. :-1325.000 Min. :-216.8000 Min. :-634.5900 ## 1st Qu.: 17 1st Qu.: 1.024 1st Qu.: 0.0204 1st Qu.: 0.0113 ## Median : 36 Median : 1.137 Median : 0.0872 Median : 0.0421 ## Mean : 1162 Mean : 10.368 Mean : 0.2882 Mean : 0.4236 ## 3rd Qu.: 61 3rd Qu.: 1.288 3rd Qu.: 0.1852 3rd Qu.: 0.0883 ## Max. :7809200 Max. :27900.000 Max. : 454.6400 Max. :2156.8000 ## NA’s :1622 NA’s :3 ## Attr24 Attr25 Attr26 Attr27 ## Min. :-189.5600 Min. :-459.5600 Min. :-21.7930 Min. : -14790.0 ## 1st Qu.: 0.0491 1st Qu.: 0.1953 1st Qu.: 0.1103 1st Qu.: 0.2 ## Median : 0.1645 Median : 0.3982 Median : 0.2763 Median : 1.3 ## Mean : 0.5402 Mean : 1.2644 Mean : 0.8314 Mean : 1322.0 ## 3rd Qu.: 0.3360 3rd Qu.: 0.6040 3rd Qu.: 0.6587 3rd Qu.: 6.3 ## Max. : 831.6600 Max. :1353.3000 Max. :612.8800 Max. :2040800.0 ## NA’s :124 NA’s :3 NA’s :25 NA’s :311 ## Attr28 Attr29 Attr30 Attr31 ## Min. :-490.0900 Min. :0.1761 Min. : -149.07 Min. :-622.0600 ## 1st Qu.: 0.0505 1st Qu.:3.7209 1st Qu.: 0.09 1st Qu.: 0.0192 ## Median : 0.4447 Median :4.1335 Median : 0.21 Median : 0.0566 ## Mean : 2.7029 Mean :4.1948 Mean : 23.57 Mean : 0.4737 ## 3rd Qu.: 1.2946 3rd Qu.:4.6034 3rd Qu.: 0.37 3rd Qu.: 0.1150 ## Max. :1570.0000 Max. :9.3861 Max. :152860.00 Max. :2156.8000 ## NA’s :34 NA’s :3 ## Attr32 Attr33 Attr34 Attr35 ## Min. : 0.0 Min. : 0.000 Min. :-280.2600 Min. :-169.4700 ## 1st Qu.: 48.3 1st Qu.: 3.050 1st Qu.: 0.2474 1st Qu.: 0.0231 ## Median : 76.2 Median : 4.775 Median : 1.7246 Median : 0.0861 ## Mean : 236.6 Mean : 7.144 Mean : 3.6663 Mean : 0.3069 ## 3rd Qu.: 119.3 3rd Qu.: 7.514 3rd Qu.: 4.1559 3rd Qu.: 0.1897 ## Max. :351630.0 Max. :884.200 Max. : 884.2000 Max. : 445.4700 ## NA’s :38 NA’s :30 NA’s :25 NA’s :3 ## Attr36 Attr37 Attr38 Attr39 ## Min. : 0.000 Min. : -525.5 Min. :-440.5500 Min. :-701.6300 ## 1st Qu.: 1.265 1st Qu.: 1.3 1st Qu.: 0.4194 1st Qu.: 0.0128 ## Median : 1.810 Median : 3.4 Median : 0.5917 Median : 0.0469 ## Mean : 5.901 Mean : 173.5 Mean : 1.9119 Mean : 0.2693 ## 3rd Qu.: 2.604 3rd Qu.: 11.4 3rd Qu.: 0.7436 3rd Qu.: 0.1034 ## Max. :3876.100 Max. :398920.0 Max. :1099.5000 Max. :2156.5000 ## NA’s :3 NA’s :2740 NA’s :3 ## Attr40 Attr41 Attr42 Attr43 CAPÍTULO 4. APLICACIÓN A R 33
4.2. RANDOM FOREST SOBRE LOS DATOS ## Min. :-101.2700 Min. :-77.7910 Min. :-701.6300 Min. : 0 ## 1st Qu.: 0.0523 1st Qu.: 0.0348 1st Qu.: 0.0115 1st Qu.: 65 ## Median : 0.1568 Median : 0.0886 Median : 0.0478 Median : 95 ## Mean : 0.8261 Mean : 0.6045 Mean : 0.2636 Mean : 4589 ## 3rd Qu.: 0.5173 3rd Qu.: 0.2041 3rd Qu.: 0.1022 3rd Qu.: 130 ## Max. :1014.6000 Max. :813.1400 Max. :2156.8000 Max. :30393000 ## NA’s :30 NA’s :84 ## Attr44 Attr45 Attr46 Attr47 ## Min. : 0 Min. :-256230.00 Min. :-101.2600 Min. : 0.00 ## 1st Qu.: 34 1st Qu.: 0.10 1st Qu.: 0.6100 1st Qu.: 18.29 ## Median : 52 Median : 0.41 Median : 0.9648 Median : 39.19 ## Mean : 3426 Mean : -30.21 Mean : 1.8533 Mean : 86.75 ## 3rd Qu.: 76 3rd Qu.: 1.17 3rd Qu.: 1.6537 3rd Qu.: 68.86 ## Max. :22584000 Max. : 5986.80 Max. :1017.8000 Max. :62233.00 ## NA’s :134 NA’s :31 NA’s :29 ## Attr48 Attr49 Attr50 Attr51 ## Min. :-218.4200 Min. :-9001.000 Min. : 0.0000 Min. : 0.0000 ## 1st Qu.: -0.0170 1st Qu.: -0.010 1st Qu.: 0.8054 1st Qu.: 0.2161 ## Median : 0.0422 Median : 0.023 Median : 1.1878 Median : 0.3596 ## Mean : 0.1489 Mean : -1.367 Mean : 2.0398 Mean : 0.4677 ## 3rd Qu.: 0.1427 3rd Qu.: 0.075 3rd Qu.: 1.9622 3rd Qu.: 0.5391 ## Max. : 405.5900 Max. : 31.639 Max. :261.5000 Max. :441.5000 ## NA’s :3 NA’s :25 NA’s :3 ## Attr52 Attr53 Attr54 Attr55 ## Min. : 0.0000 Min. : -130.47 Min. : -122.03 Min. :-800470 ## 1st Qu.: 0.1321 1st Qu.: 0.72 1st Qu.: 0.97 1st Qu.: 97 ## Median : 0.2082 Median : 1.19 Median : 1.36 Median : 1605 ## Mean : 0.5846 Mean : 98.72 Mean : 99.64 Mean : 8856 ## 3rd Qu.: 0.3261 3rd Qu.: 2.04 3rd Qu.: 2.18 3rd Qu.: 5956 ## Max. :453.9600 Max. :180440.00 Max. :180440.00 Max. :4398400 ## NA’s :29 NA’s :34 NA’s :34 ## Attr56 Attr57 Attr58 ## Min. :-1108300.0 Min. :-315.37000 Min. : 0.0 ## 1st Qu.: 0.0 1st Qu.: 0.05677 1st Qu.: 0.9 ## Median : 0.1 Median : 0.17575 Median : 0.9 ## Mean : -157.7 Mean : 0.19324 Mean : 158.7 ## 3rd Qu.: 0.1 3rd Qu.: 0.35192 3rd Qu.: 1.0 ## Max. : 1.0 Max. : 126.67000 Max. :1108300.0 ## NA’s :1 ## Attr59 Attr60 Attr61 Attr62 ## Min. :-327.9700 Min. : 0.0 Min. : 0.000 Min. : 0 ## 1st Qu.: 0.0000 1st Qu.: 5.9 1st Qu.: 4.829 1st Qu.: 43 ## Median : 0.0284 Median : 10.0 Median : 7.034 Median : 69 ## Mean : 0.2778 Mean : 432.9 Mean : 15.642 Mean : 4763 ## 3rd Qu.: 0.2739 3rd Qu.: 20.1 3rd Qu.: 10.703 3rd Qu.: 106 ## Max. : 119.5800 Max. :2137800.0 Max. :21110.000 Max. :25016000 ## NA’s :1 NA’s :135 NA’s :22 ## Attr63 Attr64 class 34 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS ## Min. : 0.000 Min. : 0.00 0:6756 ## 1st Qu.: 3.425 1st Qu.: 2.54 1: 271 ## Median : 5.303 Median : 4.64 ## Mean : 8.127 Mean : 208.73 ## 3rd Qu.: 8.358 3rd Qu.: 9.78 ## Max. :1042.200 Max. :294770.00 ## NA’s :30 NA’s :34 Aquí tenemos un resumen de nuestra primera base de datos, en el que podemos ver, entre otras cosas, las medias de todas las variables predictoras. Vamos a asegurarnos ahora que la variable que estamos estudiando (class) es de tipo factor: datos1$class <- factor(datos1$class) Ahora, con el objetivo de aplicar Random Forest, vamos a cargar las librerías que necesitamos: library(caret) library(randomForest) library(pROC) Ahora, vamos a dividir nuestros datos en un conjunto de aprendizaje y un conjunto test para, posteriormente, aplicar el Random Forest. part <- createDataPartition(datos1$class, p=0.7,list = F) datos1_entr <- datos1[part,] datos1_test <- datos1[-part,] A continuación, vamos a generar el modelo Random Forest. mod <- randomForest (class ~., data = datos1_entr, na.action = na.exclude) mod ## ## Call: ## randomForest(formula = class ~ ., data = datos1_entr, na.action = na.exclude) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 8 ## ## OOB estimate of error rate: 0.94% ## Confusion matrix: ## 0 1 class.error ## 0 2217 3 0.001351351 ## 1 18 0 1.000000000 Vamos a representar la curva ROC del modelo y el AUC, es decir, el área bajo la curva, para ver la eficacia de nuestro modelo. CAPÍTULO 4. APLICACIÓN A R 35
4.2. RANDOM FOREST SOBRE LOS DATOS ## ## Accuracy : 0.9854 ## 95% CI : (0.9756, 0.992) ## No Information Rate : 0.9874 ## P-Value [Acc > NIR] : 0.77317 ## ## Kappa : -0.0036 ## ## Mcnemar’s Test P-Value : 0.01616 ## ## Sensitivity : 0.9979 ## Specificity : 0.0000 ## Pos Pred Value : 0.9874 ## Neg Pred Value : 0.0000 ## Prevalence : 0.9874 ## Detection Rate : 0.9854 ## Detection Prevalence : 0.9979 ## Balanced Accuracy : 0.4989 ## ## ’Positive’ Class : 0 ## Obtenemos en este caso un accuracy igual a 0.9854, por lo que nuestro tiene una precisión “bastante buena”, aunque sigue clasificando la inmensa mayoría de casos como clase 0. 4.2.2. Segundo conjunto de datos Apliquemos ahora Random Forest al segundo conjunto de datos: datos2 <- read.arff("2year.arff") summary(datos2) ## Attr1 Attr2 Attr3 Attr4 ## Min. :-75.33100 Min. : 0.0000 Min. :-479.9600 Min. : 0.002 ## 1st Qu.: 0.00036 1st Qu.: 0.2777 1st Qu.: 0.0121 1st Qu.: 1.029 ## Median : 0.04949 Median : 0.4873 Median : 0.1897 Median : 1.524 ## Mean : 0.04307 Mean : 0.6470 Mean : 0.0709 Mean : 4.144 ## 3rd Qu.: 0.14110 3rd Qu.: 0.7050 3rd Qu.: 0.4004 3rd Qu.: 2.741 ## Max. : 7.37270 Max. :480.9600 Max. : 5.5022 Max. :4881.600 ## NA’s :1 NA’s :1 NA’s :1 NA’s :22 ## Attr5 Attr6 Attr7 Attr8 ## Min. :-438250.0 Min. :-508.4100 Min. :-75.3310 Min. : -1.594 ## 1st Qu.: -50.1 1st Qu.: 0.0000 1st Qu.: 0.0020 1st Qu.: 0.394 ## Median : -1.9 Median : 0.0000 Median : 0.0601 Median : 1.005 ## Mean : -144.8 Mean : -0.1116 Mean : 0.1221 Mean : 9.869 ## 3rd Qu.: 51.4 3rd Qu.: 0.0747 3rd Qu.: 0.1659 3rd Qu.: 2.519 42 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS ## Max. : 70686.0 Max. : 35.5510 Max. :649.2300 Max. :18554.000 ## NA’s :24 NA’s :1 NA’s :1 NA’s :18 ## Attr9 Attr10 Attr11 Attr12 ## Min. : -0.613 Min. :-479.9100 Min. :-65.6240 Min. :-455.5900 ## 1st Qu.: 1.026 1st Qu.: 0.2774 1st Qu.: 0.0130 1st Qu.: 0.0050 ## Median : 1.286 Median : 0.4909 Median : 0.0816 Median : 0.1686 ## Mean : 2.868 Mean : 0.3443 Mean : 0.1590 Mean : 0.9647 ## 3rd Qu.: 2.257 3rd Qu.: 0.7033 3rd Qu.: 0.1863 3rd Qu.: 0.6327 ## Max. :9742.300 Max. : 74.4340 Max. :681.5400 Max. :1744.5000 ## NA’s :4 NA’s :1 NA’s :1 NA’s :22 ## Attr13 Attr14 Attr15 ## Min. :-1317.600 Min. :-75.3310 Min. :-2132900.0 ## 1st Qu.: 0.019 1st Qu.: 0.0020 1st Qu.: 166.6 ## Median : 0.066 Median : 0.0601 Median : 755.0 ## Mean : 1.028 Mean : 0.1221 Mean : 646.0 ## 3rd Qu.: 0.133 3rd Qu.: 0.1659 3rd Qu.: 2130.6 ## Max. : 9247.900 Max. :649.2300 Max. : 1831700.0 ## NA’s :63 NA’s :1 NA’s :12 ## Attr16 Attr17 Attr18 Attr19 ## Min. :-214.6700 Min. : 0.000 Min. :-75.3310 Min. :-1325.600 ## 1st Qu.: 0.0619 1st Qu.: 1.417 1st Qu.: 0.0020 1st Qu.: 0.001 ## Median : 0.2450 Median : 2.049 Median : 0.0601 Median : 0.035 ## Mean : 1.3159 Mean : 10.942 Mean : 0.1282 Mean : 0.596 ## 3rd Qu.: 0.7161 3rd Qu.: 3.594 3rd Qu.: 0.1659 3rd Qu.: 0.093 ## Max. :1744.5000 Max. :18555.000 Max. :649.2300 Max. : 9230.500 ## NA’s :19 NA’s :18 NA’s :1 NA’s :64 ## Attr20 Attr21 Attr22 Attr23 ## Min. : 0.00 Min. : 0.000 Min. :-65.6240 Min. :-1325.600 ## 1st Qu.: 13.71 1st Qu.: 0.910 1st Qu.: 0.0000 1st Qu.: 0.000 ## Median : 33.19 Median : 1.024 Median : 0.0676 Median : 0.028 ## Mean : 68.01 Mean : 2.645 Mean : 0.1478 Mean : 0.606 ## 3rd Qu.: 61.80 3rd Qu.: 1.160 3rd Qu.: 0.1656 3rd Qu.: 0.079 ## Max. :70962.00 Max. :6964.200 Max. :681.5400 Max. : 9230.500 ## NA’s :63 NA’s :3164 NA’s :1 NA’s :63 ## Attr24 Attr25 Attr26 Attr27 ## Min. :-75.3310 Min. :-500.9300 Min. :-214.6700 Min. :-157160 ## 1st Qu.: 0.0186 1st Qu.: 0.1290 1st Qu.: 0.0552 1st Qu.: 0 ## Median : 0.1442 Median : 0.3568 Median : 0.2186 Median : 1 ## Mean : 0.2401 Mean : 0.1680 Mean : 1.0841 Mean : 1243 ## 3rd Qu.: 0.3476 3rd Qu.: 0.5902 3rd Qu.: 0.6395 3rd Qu.: 5 ## Max. :649.2300 Max. : 48.6690 Max. :1744.5000 Max. :4208800 ## NA’s :225 NA’s :1 NA’s :19 NA’s :706 ## Attr28 Attr29 Attr30 Attr31 ## Min. :-3829.900 Min. :-0.8861 Min. : -380.55 Min. :-1325.600 ## 1st Qu.: 0.019 1st Qu.: 3.4127 1st Qu.: 0.08 1st Qu.: 0.004 ## Median : 0.444 Median : 3.9316 Median : 0.21 Median : 0.042 ## Mean : 5.070 Mean : 3.9308 Mean : 9.03 Mean : 0.610 ## 3rd Qu.: 1.489 3rd Qu.: 4.4550 3rd Qu.: 0.40 3rd Qu.: 0.103 CAPÍTULO 4. APLICACIÓN A R 43
4.2. RANDOM FOREST SOBRE LOS DATOS ## Max. :10033.000 Max. : 9.4648 Max. :62048.00 Max. : 9244.300 ## NA’s :212 NA’s :1 NA’s :63 NA’s :63 ## Attr32 Attr33 Attr34 Attr35 ## Min. : -165 Min. : -19.197 Min. : -309.000 Min. :-61.4550 ## 1st Qu.: 44 1st Qu.: 2.841 1st Qu.: 0.381 1st Qu.: 0.0063 ## Median : 77 Median : 4.698 Median : 2.181 Median : 0.0652 ## Mean : 2033 Mean : 10.244 Mean : 7.279 Mean : 0.1406 ## 3rd Qu.: 127 3rd Qu.: 8.188 3rd Qu.: 4.956 3rd Qu.: 0.1658 ## Max. :17364000 Max. :21944.000 Max. :21944.000 Max. :626.9200 ## NA’s :87 NA’s :22 NA’s :18 NA’s :1 ## Attr36 Attr37 Attr38 Attr39 ## Min. : -0.001 Min. : -89.39 Min. :-479.9100 Min. :-1395.8000 ## 1st Qu.: 1.160 1st Qu.: 1.10 1st Qu.: 0.4069 1st Qu.: 0.0043 ## Median : 1.731 Median : 2.88 Median : 0.6039 Median : 0.0378 ## Mean : 3.112 Mean : 82.94 Mean : 0.4413 Mean : -0.3192 ## 3rd Qu.: 2.573 3rd Qu.: 9.87 3rd Qu.: 0.7688 3rd Qu.: 0.0944 ## Max. :9742.300 Max. :72701.00 Max. : 74.6890 Max. : 21.3860 ## NA’s :1 NA’s :4518 NA’s :1 NA’s :63 ## Attr40 Attr41 Attr42 ## Min. : -12.545 Min. :-1234.4000 Min. :-1395.8000 ## 1st Qu.: 0.054 1st Qu.: 0.0254 1st Qu.: 0.0000 ## Median : 0.173 Median : 0.0831 Median : 0.0391 ## Mean : 1.901 Mean : 0.7210 Mean : -0.2789 ## 3rd Qu.: 0.649 3rd Qu.: 0.2052 3rd Qu.: 0.0961 ## Max. :4849.300 Max. : 990.0800 Max. : 71.6330 ## NA’s :22 NA’s :197 NA’s :63 ## Attr43 Attr44 Attr45 Attr46 ## Min. : -48532.0 Min. : -48532.0 Min. : -2686.00 Min. : -8.243 ## 1st Qu.: 61.7 1st Qu.: 32.7 1st Qu.: 0.00 1st Qu.: 0.580 ## Median : 94.3 Median : 51.9 Median : 0.28 Median : 1.000 ## Mean : 404.6 Mean : 336.6 Mean : 22.93 Mean : 3.279 ## 3rd Qu.: 135.6 3rd Qu.: 77.0 3rd Qu.: 1.05 3rd Qu.: 1.877 ## Max. :1562300.0 Max. :1562300.0 Max. :113820.00 Max. :4881.600 ## NA’s :63 NA’s :63 NA’s :541 NA’s :22 ## Attr47 Attr48 Attr49 Attr50 ## Min. : -96 Min. :-70.2870 Min. :-1403.8000 Min. : 0.002 ## 1st Qu.: 14 1st Qu.: -0.0395 1st Qu.: -0.0250 1st Qu.: 0.752 ## Median : 36 Median : 0.0226 Median : 0.0131 Median : 1.192 ## Mean : 719 Mean : 0.0686 Mean : -0.3486 Mean : 5.273 ## 3rd Qu.: 69 3rd Qu.: 0.1220 3rd Qu.: 0.0683 3rd Qu.: 2.156 ## Max. :6084200 Max. :623.8500 Max. : 21.3860 Max. :18542.000 ## NA’s :74 NA’s :2 NA’s :63 NA’s :18 ## Attr51 Attr52 Attr53 Attr54 ## Min. : 0.0000 Min. : -0.45 Min. :-3828.90 Min. :-3828.90 ## 1st Qu.: 0.1945 1st Qu.: 0.12 1st Qu.: 0.65 1st Qu.: 0.94 ## Median : 0.3516 Median : 0.21 Median : 1.18 Median : 1.36 ## Mean : 0.5277 Mean : 5.57 Mean : 14.05 Mean : 14.39 ## 3rd Qu.: 0.5492 3rd Qu.: 0.35 3rd Qu.: 2.21 3rd Qu.: 2.36 44 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS ## Max. :480.9600 Max. :47572.00 Max. :86795.00 Max. :87092.00 ## NA’s :1 NA’s :74 NA’s :212 NA’s :212 ## Attr55 Attr56 Attr57 Attr58 ## Min. :-1805200 Min. :-8534.600 Min. :-979.2500 Min. : -4.55 ## 1st Qu.: 6 1st Qu.: 0.010 1st Qu.: 0.0100 1st Qu.: 0.87 ## Median : 833 Median : 0.055 Median : 0.1262 Median : 0.95 ## Mean : 6081 Mean : -1.129 Mean : -0.0435 Mean : 12.66 ## 3rd Qu.: 4020 3rd Qu.: 0.134 3rd Qu.: 0.3091 3rd Qu.: 0.99 ## Max. : 3657400 Max. : 20.200 Max. : 147.1900 Max. :59672.00 ## NA’s :1 NA’s :63 NA’s :2 NA’s :39 ## Attr59 Attr60 Attr61 Attr62 ## Min. : -189.580 Min. : 0.0 Min. : -0.008 Min. : -992 ## 1st Qu.: 0.000 1st Qu.: 5.7 1st Qu.: 4.695 1st Qu.: 40 ## Median : 0.005 Median : 10.4 Median : 6.989 Median : 70 ## Mean : 3.035 Mean : 375.3 Mean : 16.884 Mean : 891 ## 3rd Qu.: 0.249 3rd Qu.: 22.2 3rd Qu.: 11.073 3rd Qu.: 116 ## Max. :23853.000 Max. :639940.0 Max. :26862.000 Max. :4144800 ## NA’s :2 NA’s :543 NA’s :16 NA’s :63 ## Attr63 Attr64 class ## Min. : -0.368 Min. :-10677.00 0:9773 ## 1st Qu.: 3.102 1st Qu.: 2.31 1: 400 ## Median : 5.199 Median : 4.54 ## Mean : 11.218 Mean : 55.28 ## 3rd Qu.: 9.013 3rd Qu.: 10.60 ## Max. :23454.000 Max. :127680.00 ## NA’s :22 NA’s :212 Aquí tenemos un resumen de nuestra segunda base de datos, en el que podemos ver, entre otras cosas, las medias de todas las variables predictoras. Vamos a asegurarnos ahora que la variable que estamos estudiando (class) es de tipo factor: datos2$class <- factor(datos2$class) Ahora, vamos a dividir nuestros datos en un conjunto de aprendizaje y un conjunto test para, posteriormente, aplicar el Random Forest. part2 <- createDataPartition(datos2$class, p=0.7,list = F) datos2_entr <- datos2[part2,] datos2_test <- datos2[-part2,] A continuación, vamos a generar el modelo Random Forest. mod2 <- randomForest (class ~., data = datos2_entr, na.action = na.exclude) mod2 ## ## Call: CAPÍTULO 4. APLICACIÓN A R 45
4.2. RANDOM FOREST SOBRE LOS DATOS ## randomForest(formula = class ~ ., data = datos2_entr, na.action = na.exclude) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 8 ## ## OOB estimate of error rate: 1.68% ## Confusion matrix: ## 0 1 class.error ## 0 2803 2 0.0007130125 ## 1 46 0 1.0000000000 Vamos a representar la curva ROC del modelo y el AUC, es decir, el área bajo la curva, para ver la eficacia de nuestro modelo. pred_prob2 <- predict(mod2, datos2_test, type = "prob")[,2] roc_obj2 <- roc(datos2_test$class, pred_prob2) plot(roc_obj2, main = "Curva ROC para el modelo de Random Forest", col = "blue",lwd = 2) Curva ROC para el modelo de Random Forest Specificity Sensitivity 1.0 0.5 0.0 0.0 0.2 0.4 0.6 0.8 1.0 ´ print(paste("AUC:",auc(roc_obj2))) ## [1] "AUC: 0.814983164983165" 46 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS Obtenemos un AUC igual a 0.815, el cual es bueno pero podríamos mejorarlo. Veamos ahora la tabla de confusión del modelo, usando el conjunto de entrenamiento: mod2$confusion ## 0 1 class.error ## 0 2803 2 0.0007130125 ## 1 46 0 1.0000000000 Podemos ver que para la clase 0, es decir, que la empresa no cae en bancarrota, tenemos 2803 observaciones que han sido correctamente clasificadas y 2 mal clasificadas. Por otro lado, podemos ver que para la clase 1 hay 46 observaciones, y todas están mal clasificadas. Vemos que la tasa de error para la clase 1 es del 100%. Esto podría deberse a un desequilibrio en las clases, donde la clase 1 es mucho menos frecuente que la clase 0, como podemos observar en los datos. Por tanto, este problema nos sugiere utilizar alguna técnica adicional como podría ser el balanceo de clases. Antes de aplicar dicha técnica, veamos la matriz de confusión construida sobre nuestro conjunto test para así obtener el accuracy del modelo: pred_class_unbalanced2 <- predict(mod2, datos2_test) conf_matrix_unbalanced2 <- confusionMatrix(pred_class_unbalanced2, datos2_test$class) conf_matrix_unbalanced2 ## Confusion Matrix and Statistics ## ## Reference ## Prediction 0 1 ## 0 1208 27 ## 1 2 0 ## ## Accuracy : 0.9766 ## 95% CI : (0.9665, 0.9842) ## No Information Rate : 0.9782 ## P-Value [Acc > NIR] : 0.695 ## ## Kappa : -0.003 ## ## Mcnemar’s Test P-Value : 8.324e-06 ## ## Sensitivity : 0.9983 ## Specificity : 0.0000 ## Pos Pred Value : 0.9781 ## Neg Pred Value : 0.0000 ## Prevalence : 0.9782 ## Detection Rate : 0.9766 ## Detection Prevalence : 0.9984 CAPÍTULO 4. APLICACIÓN A R 47
4.2. RANDOM FOREST SOBRE LOS DATOS ## Balanced Accuracy : 0.4992 ## ## ’Positive’ Class : 0 ## Obtenemos un accuracy igual a 0.9766, el cual parece un buen resultado, pero es engañoso, ya que nuestro modelo predice que la inmensa mayoría de las observaciones tienen clase 0, es decir, que no caen en bancarrota. Esto lo hace ya que hay una clara mayoría de observaciones con dicha clase. Para obtener una mejor predicción, vamos a aplicar el balanceo de clases como antes: datos2_bal <- ovun.sample(class ~., data = datos2,method = "both")$data partb <- createDataPartition(datos2_bal$class, p=0.7,list = F) datos2b_entr <- datos2_bal[partb,] datos2b_test <- datos2_bal[-partb,] mod2bal <- randomForest (class ~., data = datos2b_entr, na.action = na.exclude) mod2bal ## ## Call: ## randomForest(formula = class ~ ., data = datos2b_entr, na.action = na.exclude) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 8 ## ## OOB estimate of error rate: 0.24% ## Confusion matrix: ## 0 1 class.error ## 0 1424 7 0.004891684 ## 1 0 1431 0.000000000 Obtenemos un modelo muy bueno con solo 7 errores, veamos el AUC y la curva ROC del mismo. pred_probb2 <- predict(mod2bal, datos2b_test, type = "prob")[,2] roc_objb2 <- roc(datos2b_test$class, pred_probb2) plot(roc_objb2, main = "Curva ROC para el modelo balanceado de Random Forest", col = "blue",lwd = 2) 48 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS Curva ROC para el modelo balanceado de Random Forest Specificity Sensitivity 1.0 0.5 0.0 0.0 0.2 0.4 0.6 0.8 1.0 print(paste("AUC:",auc(roc_objb2))) ## [1] "AUC: 1" Obtenemos que el modelo tiene un AUC igual a 1, por lo que tiene una capacidad de clasificación perfecta. Veamos ahora la matriz de confusión construida sobre el conjunto test para obtener el accuracy del modelo: pred_class_balanced2 <- predict(mod2bal, datos2b_test) conf_matrix_balanced2 <- confusionMatrix(pred_class_balanced2, datos2b_test$class) conf_matrix_balanced2 ## Confusion Matrix and Statistics ## ## Reference ## Prediction 0 1 ## 0 610 0 ## 1 3 613 ## ## Accuracy : 0.9976 ## 95% CI : (0.9929, 0.9995) ## No Information Rate : 0.5 ## P-Value [Acc > NIR] : <2e-16 ## CAPÍTULO 4. APLICACIÓN A R 49
4.2. RANDOM FOREST SOBRE LOS DATOS ## Kappa : 0.9951 ## ## Mcnemar’s Test P-Value : 0.2482 ## ## Sensitivity : 0.9951 ## Specificity : 1.0000 ## Pos Pred Value : 1.0000 ## Neg Pred Value : 0.9951 ## Prevalence : 0.5000 ## Detection Rate : 0.4976 ## Detection Prevalence : 0.4976 ## Balanced Accuracy : 0.9976 ## ## ’Positive’ Class : 0 ## Hemos obtenido un accuracy igual a 0.9976, por lo que el modelo tiene una precisión casi perfecta, mejorando al modelo sin balancear. 4.2.3. Tercer conjunto de datos Apliquemos ahora el Random Forest al tercer conjunto de datos: datos3 <- read.arff("3year.arff") summary(datos3) ## Attr1 Attr2 Attr3 Attr4 ## Min. :-17.69200 Min. : 0.0000 Min. :-479.7300 Min. : 0.00 ## 1st Qu.: 0.00069 1st Qu.: 0.2540 1st Qu.: 0.0175 1st Qu.: 1.04 ## Median : 0.04303 Median : 0.4641 Median : 0.1986 Median : 1.61 ## Mean : 0.05284 Mean : 0.6199 Mean : 0.0955 Mean : 9.98 ## 3rd Qu.: 0.12380 3rd Qu.: 0.6893 3rd Qu.: 0.4195 3rd Qu.: 2.96 ## Max. : 52.65200 Max. :480.7300 Max. : 17.7080 Max. :53433.00 ## NA’s :18 ## Attr5 Attr6 Attr7 Attr8 ## Min. :-11903000 Min. :-508.1200 Min. :-17.69200 Min. : -2.08 ## 1st Qu.: -52 1st Qu.: 0.0000 1st Qu.: 0.00212 1st Qu.: 0.43 ## Median : 2 Median : 0.0000 Median : 0.05094 Median : 1.11 ## Mean : -1348 Mean : -0.1212 Mean : 0.06562 Mean : 19.14 ## 3rd Qu.: 56 3rd Qu.: 0.0726 3rd Qu.: 0.14228 3rd Qu.: 2.86 ## Max. : 685440 Max. : 45.5330 Max. : 52.65200 Max. :53432.00 ## NA’s :25 NA’s :14 ## Attr9 Attr10 Attr11 Attr12 ## Min. : -1.216 Min. :-479.7300 Min. :-17.69200 Min. :-1543.800 ## 1st Qu.: 1.011 1st Qu.: 0.2973 1st Qu.: 0.00981 1st Qu.: 0.006 ## Median : 1.199 Median : 0.5155 Median : 0.06810 Median : 0.156 ## Mean : 1.819 Mean : 0.3661 Mean : 0.08676 Mean : 2.411 50 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS ## 3rd Qu.: 2.059 3rd Qu.: 0.7256 3rd Qu.: 0.16109 3rd Qu.: 0.570 ## Max. :740.440 Max. : 11.8370 Max. : 52.65200 Max. : 8259.400 ## NA’s :3 NA’s :18 ## Attr13 Attr14 Attr15 Attr16 ## Min. :-631.710 Min. :-17.69200 Min. :-2321800 Min. :-204.300 ## 1st Qu.: 0.021 1st Qu.: 0.00213 1st Qu.: 187 1st Qu.: 0.060 ## Median : 0.066 Median : 0.05095 Median : 806 Median : 0.235 ## Mean : 0.377 Mean : 0.06563 Mean : 3004 Mean : 2.730 ## 3rd Qu.: 0.134 3rd Qu.: 0.14228 3rd Qu.: 2187 3rd Qu.: 0.643 ## Max. :4972.000 Max. : 52.65200 Max. :10236000 Max. :8259.400 ## NA’s :43 NA’s :8 NA’s :14 ## Attr17 Attr18 Attr19 Attr20 ## Min. : -0.04 Min. :-17.69200 Min. :-771.6500 Min. : 0.00 ## 1st Qu.: 1.45 1st Qu.: 0.00213 1st Qu.: 0.0016 1st Qu.: 14.25 ## Median : 2.15 Median : 0.05095 Median : 0.0321 Median : 34.43 ## Mean : 20.51 Mean : 0.07074 Mean : -0.1708 Mean : 68.45 ## 3rd Qu.: 3.92 3rd Qu.: 0.14228 3rd Qu.: 0.0876 3rd Qu.: 63.70 ## Max. :53433.00 Max. : 53.68900 Max. : 123.9400 Max. :91600.00 ## NA’s :14 NA’s :43 NA’s :43 ## Attr21 Attr22 Attr23 ## Min. : -1.107 Min. :-17.69200 Min. :-771.6500 ## 1st Qu.: 0.797 1st Qu.: 0.00000 1st Qu.: 0.0006 ## Median : 0.955 Median : 0.05463 Median : 0.0271 ## Mean : 4.671 Mean : 0.07568 Mean : -0.1765 ## 3rd Qu.: 1.106 3rd Qu.: 0.14589 3rd Qu.: 0.0759 ## Max. :29907.000 Max. : 47.59700 Max. : 123.9400 ## NA’s :807 NA’s :43 ## Attr24 Attr25 Attr26 Attr27 ## Min. :-60.74200 Min. :-500.7500 Min. :-204.300 Min. :-190130.0 ## 1st Qu.: 0.01494 1st Qu.: 0.1357 1st Qu.: 0.055 1st Qu.: 0.0 ## Median : 0.15837 Median : 0.3777 Median : 0.213 Median : 1.1 ## Mean : 0.21194 Mean : 0.1962 Mean : 2.581 Mean : 1185.9 ## 3rd Qu.: 0.37367 3rd Qu.: 0.6141 3rd Qu.: 0.589 3rd Qu.: 4.8 ## Max. :179.92000 Max. : 8.8345 Max. :8262.300 Max. :2723000.0 ## NA’s :227 NA’s :14 NA’s :715 ## Attr28 Attr29 Attr30 Attr31 ## Min. :-690.400 Min. :-0.3585 Min. :-6351.700 Min. :-771.3900 ## 1st Qu.: 0.027 1st Qu.: 3.3932 1st Qu.: 0.074 1st Qu.: 0.0040 ## Median : 0.460 Median : 3.9321 Median : 0.217 Median : 0.0397 ## Mean : 6.093 Mean : 3.9212 Mean : 0.459 Mean : -0.1771 ## 3rd Qu.: 1.565 3rd Qu.: 4.4500 3rd Qu.: 0.426 3rd Qu.: 0.0990 ## Max. :6233.300 Max. : 9.6199 Max. : 2940.500 Max. : 60.4300 ## NA’s :228 NA’s :43 NA’s :43 ## Attr32 Attr33 Attr34 Attr35 ## Min. : -9296 Min. : -1.922 Min. :-1696.000 Min. :-17.07300 ## 1st Qu.: 45 1st Qu.: 2.786 1st Qu.: 0.367 1st Qu.: 0.00173 ## Median : 78 Median : 4.681 Median : 2.052 Median : 0.05305 ## Mean : 1172 Mean : 8.420 Mean : 5.398 Mean : 0.07108 CAPÍTULO 4. APLICACIÓN A R 51
4.2. RANDOM FOREST SOBRE LOS DATOS ## ## Mcnemar’s Test P-Value : 0.4795 ## ## Sensitivity : 0.9972 ## Specificity : 1.0000 ## Pos Pred Value : 1.0000 ## Neg Pred Value : 0.9973 ## Prevalence : 0.4945 ## Detection Rate : 0.4932 ## Detection Prevalence : 0.4932 ## Balanced Accuracy : 0.9986 ## ## ’Positive’ Class : 0 ## Obtenemos un accuracy igual a 0.9986, por lo que nuestro modelo tiene una precisión bastante buena. 4.2.4. Cuarto conjunto de datos Apliquemos ahora el Random Forest al cuarto conjunto de datos: datos4 <- read.arff("4year.arff") summary(datos4) ## Attr1 Attr2 Attr3 ## Min. :-12.458000 Min. : 0.0000 Min. :-445.9100 ## 1st Qu.: 0.001321 1st Qu.: 0.2631 1st Qu.: 0.0204 ## Median : 0.041364 Median : 0.4677 Median : 0.1993 ## Mean : 0.043019 Mean : 0.5964 Mean : 0.1310 ## 3rd Qu.: 0.111130 3rd Qu.: 0.6893 3rd Qu.: 0.4107 ## Max. : 20.482000 Max. :446.9100 Max. : 22.7690 ## NA’s :1 NA’s :1 NA’s :1 ## Attr4 Attr5 Attr6 ## Min. : -0.045 Min. :-379460.0 Min. :-486.8200 ## 1st Qu.: 1.047 1st Qu.: -51.2 1st Qu.: -0.0006 ## Median : 1.592 Median : -0.1 Median : 0.0000 ## Mean : 8.137 Mean : 64.7 Mean : -0.0593 ## 3rd Qu.: 2.880 3rd Qu.: 55.7 3rd Qu.: 0.0653 ## Max. :27146.000 Max. :1034100.0 Max. : 322.2000 ## NA’s :43 NA’s :21 NA’s :1 ## Attr7 Attr8 Attr9 Attr10 ## Min. :-12.45800 Min. : -1.85 Min. : -0.0324 Min. :-445.9100 ## 1st Qu.: 0.00300 1st Qu.: 0.43 1st Qu.: 1.0067 1st Qu.: 0.2944 ## Median : 0.04882 Median : 1.09 Median : 1.1613 Median : 0.5104 ## Mean : 0.05945 Mean : 19.88 Mean : 1.8823 Mean : 0.3890 ## 3rd Qu.: 0.12694 3rd Qu.: 2.69 3rd Qu.: 1.9702 3rd Qu.: 0.7143 58 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS ## Max. : 38.61800 Max. :53209.00 Max. :1704.8000 Max. : 12.6020 ## NA’s :1 NA’s :19 NA’s :1 ## Attr11 Attr12 Attr13 ## Min. :-12.24400 Min. :-6331.800 Min. :-1460.6000 ## 1st Qu.: 0.00946 1st Qu.: 0.008 1st Qu.: 0.0212 ## Median : 0.06254 Median : 0.144 Median : 0.0638 ## Mean : 0.07542 Mean : 0.211 Mean : 0.3989 ## 3rd Qu.: 0.14081 3rd Qu.: 0.514 3rd Qu.: 0.1279 ## Max. : 38.61800 Max. : 3340.900 Max. : 2707.7000 ## NA’s :1 NA’s :43 NA’s :21 ## Attr14 Attr15 Attr16 Attr17 ## Min. :-12.45800 Min. :-1567500 Min. :-6331.800 Min. : 0.00 ## 1st Qu.: 0.00301 1st Qu.: 217 1st Qu.: 0.062 1st Qu.: 1.45 ## Median : 0.04886 Median : 907 Median : 0.219 Median : 2.13 ## Mean : 0.05946 Mean : 3018 Mean : 0.618 Mean : 20.98 ## 3rd Qu.: 0.12696 3rd Qu.: 2412 3rd Qu.: 0.600 3rd Qu.: 3.78 ## Max. : 38.61800 Max. : 8085500 Max. : 4401.300 Max. :53210.00 ## NA’s :1 NA’s :8 NA’s :19 NA’s :19 ## Attr18 Attr19 Attr20 Attr21 ## Min. :-12.45800 Min. :-1578.7000 Min. : 0.00 Min. : -1.1463 ## 1st Qu.: 0.00301 1st Qu.: 0.0019 1st Qu.: 15.24 1st Qu.: 0.9201 ## Median : 0.04886 Median : 0.0310 Median : 35.66 Median : 1.0457 ## Mean : 0.06458 Mean : -0.0191 Mean : 62.70 Mean : 1.2187 ## 3rd Qu.: 0.12696 3rd Qu.: 0.0833 3rd Qu.: 65.67 3rd Qu.: 1.2089 ## Max. : 50.26600 Max. : 1082.6000 Max. :26606.00 Max. :396.1600 ## NA’s :1 NA’s :21 NA’s :21 NA’s :158 ## Attr22 Attr23 Attr24 ## Min. :-12.24400 Min. :-1578.7000 Min. :-314.3700 ## 1st Qu.: 0.00000 1st Qu.: 0.0010 1st Qu.: 0.0040 ## Median : 0.05012 Median : 0.0259 Median : 0.1492 ## Mean : 0.06620 Mean : -0.0704 Mean : 0.2477 ## 3rd Qu.: 0.12668 3rd Qu.: 0.0717 3rd Qu.: 0.3606 ## Max. : 38.61800 Max. : 879.8600 Max. : 400.5900 ## NA’s :1 NA’s :21 NA’s :211 ## Attr25 Attr26 Attr27 ## Min. :-466.3400 Min. :-6331.800 Min. :-259010.0 ## 1st Qu.: 0.1356 1st Qu.: 0.058 1st Qu.: 0.0 ## Median : 0.3868 Median : 0.199 Median : 1.0 ## Mean : 0.2228 Mean : 0.451 Mean : 1115.9 ## 3rd Qu.: 0.6140 3rd Qu.: 0.542 3rd Qu.: 5.2 ## Max. : 12.6020 Max. : 3594.600 Max. :2037300.0 ## NA’s :1 NA’s :19 NA’s :641 ## Attr28 Attr29 Attr30 Attr31 ## Min. : -990.020 Min. :-0.4401 Min. :-4940.000 Min. :-1495.6000 ## 1st Qu.: 0.035 1st Qu.: 3.3984 1st Qu.: 0.083 1st Qu.: 0.0044 ## Median : 0.471 Median : 3.9764 Median : 0.227 Median : 0.0379 ## Mean : 6.725 Mean : 3.9465 Mean : 5.354 Mean : 0.0413 ## 3rd Qu.: 1.570 3rd Qu.: 4.4985 3rd Qu.: 0.434 3rd Qu.: 0.0936 CAPÍTULO 4. APLICACIÓN A R 59
4.2. RANDOM FOREST SOBRE LOS DATOS ## Max. :11864.000 Max. : 9.6518 Max. :29526.000 Max. : 1083.1000 ## NA’s :231 NA’s :1 NA’s :21 NA’s :21 ## Attr32 Attr33 Attr34 Attr35 ## Min. : 0.0 Min. : 0.000 Min. :-756.500 Min. :-9.04310 ## 1st Qu.: 47.2 1st Qu.: 2.702 1st Qu.: 0.297 1st Qu.: 0.00087 ## Median : 80.9 Median : 4.468 Median : 1.976 Median : 0.04686 ## Mean : 341.6 Mean : 8.445 Mean : 4.979 Mean : 0.05809 ## 3rd Qu.: 133.2 3rd Qu.: 7.627 3rd Qu.: 4.510 3rd Qu.: 0.12637 ## Max. :385590.0 Max. :5534.100 Max. :4260.200 Max. :38.61800 ## NA’s :96 NA’s :43 NA’s :19 NA’s :1 ## Attr36 Attr37 Attr38 Attr39 ## Min. : 0.000 Min. : -3.715 Min. :-445.9100 Min. :-7522.000 ## 1st Qu.: 1.031 1st Qu.: 1.097 1st Qu.: 0.4198 1st Qu.: 0.001 ## Median : 1.559 Median : 3.110 Median : 0.6133 Median : 0.030 ## Mean : 2.077 Mean : 70.660 Mean : 0.4872 Mean : -1.073 ## 3rd Qu.: 2.284 3rd Qu.: 12.240 3rd Qu.: 0.7774 3rd Qu.: 0.081 ## Max. :1704.800 Max. :24487.000 Max. : 12.6020 Max. : 112.020 ## NA’s :1 NA’s :4442 NA’s :1 NA’s :21 ## Attr40 Attr41 Attr42 Attr43 ## Min. : -8.833 Min. :-1086.800 Min. :-719.8000 Min. :-115870.0 ## 1st Qu.: 0.051 1st Qu.: 0.025 1st Qu.: 0.0000 1st Qu.: 68.9 ## Median : 0.182 Median : 0.089 Median : 0.0324 Median : 103.5 ## Mean : 3.064 Mean : 0.969 Mean : -0.3715 Mean : 735.7 ## 3rd Qu.: 0.666 3rd Qu.: 0.216 3rd Qu.: 0.0816 3rd Qu.: 148.1 ## Max. :8007.100 Max. : 3443.400 Max. : 160.1100 Max. :3020000.0 ## NA’s :43 NA’s :187 NA’s :21 NA’s :21 ## Attr44 Attr45 Attr46 ## Min. :-115870.0 Min. :-2834.900 Min. : -6.639 ## 1st Qu.: 36.5 1st Qu.: 0.010 1st Qu.: 0.614 ## Median : 57.9 Median : 0.233 Median : 1.041 ## Mean : 673.0 Mean : 5.458 Mean : 7.274 ## 3rd Qu.: 85.1 3rd Qu.: 0.816 3rd Qu.: 1.971 ## Max. :3020000.0 Max. :10337.000 Max. :27146.000 ## NA’s :21 NA’s :613 NA’s :43 ## Attr47 Attr48 Attr49 ## Min. : -3.63 Min. :-13.81500 Min. :-837.8600 ## 1st Qu.: 15.84 1st Qu.: -0.04740 1st Qu.: -0.0354 ## Median : 38.48 Median : 0.00699 Median : 0.0046 ## Mean : 112.99 Mean : -0.00237 Mean : -0.5172 ## 3rd Qu.: 70.94 3rd Qu.: 0.08442 3rd Qu.: 0.0511 ## Max. :140990.00 Max. : 33.53500 Max. : 107.6800 ## NA’s :73 NA’s :1 NA’s :21 ## Attr50 Attr51 Attr52 Attr53 ## Min. : -0.045 Min. : 0.0000 Min. : 0.00 Min. :-1033.700 ## 1st Qu.: 0.769 1st Qu.: 0.1853 1st Qu.: 0.13 1st Qu.: 0.685 ## Median : 1.230 Median : 0.3367 Median : 0.22 Median : 1.212 ## Mean : 7.085 Mean : 0.4693 Mean : 10.03 Mean : 6.115 ## 3rd Qu.: 2.269 3rd Qu.: 0.5308 3rd Qu.: 0.36 3rd Qu.: 2.274 60 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS ## Max. :27146.000 Max. :446.9100 Max. :88433.00 Max. : 4784.100 ## NA’s :19 NA’s :1 NA’s :76 NA’s :231 ## Attr54 Attr55 Attr56 Attr57 ## Min. :-1033.700 Min. :-713220 Min. :-7522.100 Min. :-597.4200 ## 1st Qu.: 0.947 1st Qu.: 22 1st Qu.: 0.003 1st Qu.: 0.0088 ## Median : 1.378 Median : 950 Median : 0.044 Median : 0.0980 ## Mean : 7.403 Mean : 7686 Mean : -0.992 Mean : 0.0350 ## 3rd Qu.: 2.426 3rd Qu.: 4695 3rd Qu.: 0.117 3rd Qu.: 0.2427 ## Max. :11678.000 Max. :6123700 Max. : 112.020 Max. : 226.7600 ## NA’s :231 NA’s :21 NA’s :1 ## Attr58 Attr59 Attr60 Attr61 ## Min. :-30.8920 Min. :-284.3800 Min. : 0.00 Min. : -12.66 ## 1st Qu.: 0.8857 1st Qu.: 0.0000 1st Qu.: 5.36 1st Qu.: 4.27 ## Median : 0.9583 Median : 0.0021 Median : 9.48 Median : 6.28 ## Mean : 1.1333 Mean : 0.8561 Mean : 118.16 Mean : 25.19 ## 3rd Qu.: 0.9962 3rd Qu.: 0.2118 3rd Qu.: 19.51 3rd Qu.: 9.94 ## Max. :668.7500 Max. :1661.0000 Max. :251570.00 Max. :108000.00 ## NA’s :16 NA’s :1 NA’s :614 NA’s :32 ## Attr62 Attr63 Attr64 class ## Min. : -14965 Min. : -0.024 Min. : 0.000 0:9277 ## 1st Qu.: 43 1st Qu.: 2.939 1st Qu.: 2.013 1: 515 ## Median : 75 Median : 4.849 Median : 4.042 ## Mean : 2015 Mean : 8.661 Mean : 35.950 ## 3rd Qu.: 123 3rd Qu.: 8.364 3rd Qu.: 9.414 ## Max. :10779000 Max. :5662.400 Max. :21153.000 ## NA’s :21 NA’s :43 NA’s :231 Aquí tenemos un resumen de nuestra cuarta base de datos, en el que podemos ver, entre otras cosas, las medias de todas las variables predictoras. Vamos a asegurarnos ahora que la variable que estamos estudiando (class) es de tipo factor: datos4$class <- factor(datos4$class) Ahora, vamos a dividir nuestros datos en un conjunto de aprendizaje y un conjunto test para, posteriormente, aplicar el Random Forest. part4 <- createDataPartition(datos4$class, p=0.7,list = F) datos4_entr <- datos4[part4,] datos4_test <- datos4[-part4,] A continuación, vamos a generar el modelo Random Forest. ´ mod4 <- randomForest (class ~., data = datos4_entr, na.action = na.exclude) mod4 ## ## Call: CAPÍTULO 4. APLICACIÓN A R 61
4.2. RANDOM FOREST SOBRE LOS DATOS ## randomForest(formula = class ~ ., data = datos4_entr, na.action = na.exclude) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 8 ## ## OOB estimate of error rate: 2.65% ## Confusion matrix: ## 0 1 class.error ## 0 3265 4 0.001223616 ## 1 85 0 1.000000000 Vamos a representar la curva ROC del modelo y el AUC, es decir, el área bajo la curva, para ver la eficacia de nuestro modelo. pred_prob4 <- predict(mod4, datos4_test, type = "prob")[,2] roc_obj4 <- roc(datos4_test$class, pred_prob4) plot(roc_obj4, main = "Curva ROC para el modelo de Random Forest", col = "blue",lwd = 2) Curva ROC para el modelo de Random Forest Specificity Sensitivity 1.0 0.5 0.0 0.0 0.2 0.4 0.6 0.8 1.0 print(paste("AUC:",auc(roc_obj4))) ## [1] "AUC: 0.878923395445135" Obtenemos un AUC igual a 0.879, el cual es bueno pero podríamos mejorarlo. Veamos ahora la tabla de confusión del modelo, usando el conjunto de entrenamiento: 62 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS mod4$confusion ## 0 1 class.error ## 0 3265 4 0.001223616 ## 1 85 0 1.000000000 Podemos ver que para la clase 0, es decir, que la empresa no cae en bancarrota, tenemos 3265 observaciones que han sido correctamente clasificadas y 4 mal clasificadas. Por otro lado, podemos ver que para la clase 1 hay 85 observaciones, todas mal clasificadas. Vemos que la tasa de error para la clase 1 es bastante alta. Esto podría deberse a un desequilibrio en las clases, donde la clase 1 es mucho menos frecuente que la clase 0, como podemos observar en los datos. Por tanto,vamos a aplicar el balanceo de clases como antes. Antes de aplicar dicha técnica, veamos la matriz de confusión construida sobre nuestro conjunto test para así obtener el accuracy del modelo: pred_class_unbalanced4 <- predict(mod4, datos4_test) conf_matrix_unbalanced4 <- confusionMatrix(pred_class_unbalanced4, datos4_test$class) conf_matrix_unbalanced4 ## Confusion Matrix and Statistics ## ## Reference ## Prediction 0 1 ## 0 1376 34 ## 1 4 1 ## ## Accuracy : 0.9731 ## 95% CI : (0.9633, 0.9809) ## No Information Rate : 0.9753 ## P-Value [Acc > NIR] : 0.7312 ## ## Kappa : 0.0441 ## ## Mcnemar’s Test P-Value : 2.546e-06 ## ## Sensitivity : 0.99710 ## Specificity : 0.02857 ## Pos Pred Value : 0.97589 ## Neg Pred Value : 0.20000 ## Prevalence : 0.97527 ## Detection Rate : 0.97244 ## Detection Prevalence : 0.99647 ## Balanced Accuracy : 0.51284 ## ## ’Positive’ Class : 0 ## CAPÍTULO 4. APLICACIÓN A R 63
4.2. RANDOM FOREST SOBRE LOS DATOS Obtenemos un accuracy igual a 0.9731, el cual parece un buen resultado, pero es engañoso, ya que nuestro modelo predice que la inmensa mayoría de las observaciones tienen clase 0, es decir, que no caen en bancarrota. Esto lo hace ya que hay una clara mayoría de observaciones con dicha clase. Para obtener una mejor predicción, vamos a aplicar el balanceo de clases como antes: datos4_bal <- ovun.sample(class ~., data = datos4,method = "both")$data partb4 <- createDataPartition(datos4_bal$class, p=0.7,list = F) datos4b_entr <- datos4_bal[partb4,] datos4b_test <- datos4_bal[-partb4,] mod4bal <- randomForest (class ~., data = datos4b_entr, na.action = na.exclude) mod4bal ## ## Call: ## randomForest(formula = class ~ ., data = datos4b_entr, na.action = na.exclude) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 8 ## ## OOB estimate of error rate: 0.54% ## Confusion matrix: ## 0 1 class.error ## 0 1682 18 0.01058824 ## 1 0 1639 0.00000000 Obtenemos un modelo bastante bueno con tan solo 18 observaciones mal clasificadas. Veamos ahora el AUC y la curva ROC del modelo: pred_prob4 <- predict(mod4bal, datos4b_test, type = "prob")[,2] roc_objb4 <- roc(datos4b_test$class, pred_prob4) plot(roc_objb4, main = "Curva ROC para el modelo balanceado de Random Forest", col = "blue",lwd = 2) 64 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS Curva ROC para el modelo balanceado de Random Forest Specificity Sensitivity 1.0 0.5 0.0 0.0 0.2 0.4 0.6 0.8 1.0 print(paste("AUC:",auc(roc_objb4))) ## [1] "AUC: 0.999313186813187" Obtenemos que el modelo tiene un AUC igual a 0.999. Veamos la matriz de confusión construida sobre nuestro conjunto test para así obtener el accuracy del modelo. pred_class_balanced4 <- predict(mod4bal, datos4b_test) conf_matrix_balanced4 <- confusionMatrix(pred_class_balanced4, datos4b_test$class) conf_matrix_balanced4 ## Confusion Matrix and Statistics ## ## Reference ## Prediction 0 1 ## 0 722 0 ## 1 6 702 ## ## Accuracy : 0.9958 ## 95% CI : (0.9909, 0.9985) ## No Information Rate : 0.5091 ## P-Value [Acc > NIR] : < 2e-16 ## ## Kappa : 0.9916 CAPÍTULO 4. APLICACIÓN A R 65
4.2. RANDOM FOREST SOBRE LOS DATOS ## ## Mcnemar’s Test P-Value : 0.04123 ## ## Sensitivity : 0.9918 ## Specificity : 1.0000 ## Pos Pred Value : 1.0000 ## Neg Pred Value : 0.9915 ## Prevalence : 0.5091 ## Detection Rate : 0.5049 ## Detection Prevalence : 0.5049 ## Balanced Accuracy : 0.9959 ## ## ’Positive’ Class : 0 ## Obtenemos un accuracy igual a 0.9958, por lo que nuestro modelo tiene una precisión bastante buena, mejorando la precisión del modelo sin balancear. 4.2.5. Quinto conjunto de datos Apliquemos por último el Random Forest al quinto conjunto de datos: datos5 <- read.arff("5year.arff") summary(datos5) ## Attr1 Attr2 Attr3 Attr4 ## Min. :-463.8900 Min. :-430.8700 Min. :-72.06700 Min. : -0.403 ## 1st Qu.: 0.0040 1st Qu.: 0.2554 1st Qu.: 0.04395 1st Qu.: 1.094 ## Median : 0.0467 Median : 0.4518 Median : 0.21944 Median : 1.652 ## Mean : -0.0223 Mean : 0.4651 Mean : 0.18915 Mean : 4.892 ## 3rd Qu.: 0.1170 3rd Qu.: 0.6616 3rd Qu.: 0.41843 3rd Qu.: 2.931 ## Max. : 87.4590 Max. : 72.4160 Max. : 28.33600 Max. :6845.800 ## NA’s :3 NA’s :3 NA’s :3 NA’s :21 ## Attr5 Attr6 Attr7 ## Min. :-1076400.0 Min. :-463.8900 Min. :-517.4800 ## 1st Qu.: -43.8 1st Qu.: 0.0000 1st Qu.: 0.0059 ## Median : 0.5 Median : 0.0000 Median : 0.0565 ## Mean : 19.4 Mean : 0.0226 Mean : -0.1120 ## 3rd Qu.: 48.8 3rd Qu.: 0.1087 3rd Qu.: 0.1369 ## Max. : 1250100.0 Max. : 543.2500 Max. : 5.5300 ## NA’s :11 NA’s :3 NA’s :3 ## Attr8 Attr9 Attr10 Attr11 ## Min. : -3.735 Min. :-3.496 Min. :-71.4440 Min. :-463.8900 ## 1st Qu.: 0.482 1st Qu.: 1.015 1st Qu.: 0.3189 1st Qu.: 0.0152 ## Median : 1.149 Median : 1.140 Median : 0.5233 Median : 0.0708 ## Mean : 5.738 Mean : 1.588 Mean : 0.5456 Mean : -0.0101 ## 3rd Qu.: 2.771 3rd Qu.: 1.826 3rd Qu.: 0.7208 3rd Qu.: 0.1483 66 CAPÍTULO 4. APLICACIÓN A R
4.2. RANDOM FOREST SOBRE LOS DATOS ## Max. :6868.500 Max. :65.607 Max. :339.8500 Max. : 6.3880 ## NA’s :18 NA’s :1 NA’s :3 NA’s :3 ## Attr12 Attr13 Attr14 Attr15 ## Min. :-231.8500 Min. :-310.3400 Min. :-517.4800 Min. :-9632400 ## 1st Qu.: 0.0156 1st Qu.: 0.0240 1st Qu.: 0.0059 1st Qu.: 234 ## Median : 0.1680 Median : 0.0678 Median : 0.0566 Median : 872 ## Mean : 1.0652 Mean : 0.3544 Mean : -0.1119 Mean : 1034 ## 3rd Qu.: 0.5408 3rd Qu.: 0.1351 3rd Qu.: 0.1369 3rd Qu.: 2256 ## Max. :2470.3000 Max. :2340.2000 Max. : 5.5300 Max. : 1341700 ## NA’s :21 NA’s :3 NA’s :6 ## Attr16 Attr17 Attr18 ## Min. :-221.3300 Min. : -0.002 Min. :-517.4800 ## 1st Qu.: 0.0742 1st Qu.: 1.510 1st Qu.: 0.0059 ## Median : 0.2364 Median : 2.209 Median : 0.0566 ## Mean : 1.1863 Mean : 6.835 Mean : -0.1026 ## 3rd Qu.: 0.6379 3rd Qu.: 3.886 3rd Qu.: 0.1369 ## Max. :2837.4000 Max. :6869.500 Max. : 55.1250 ## NA’s :18 NA’s :18 NA’s :3 ## Attr19 Attr20 Attr21 Attr22 ## Min. :-310.80000 Min. : -29.34 Min. :-135.150 Min. :-431.5900 ## 1st Qu.: 0.00410 1st Qu.: 18.28 1st Qu.: 0.989 1st Qu.: 0.0000 ## Median : 0.03520 Median : 38.62 Median : 1.117 Median : 0.0611 ## Mean : -0.09025 Mean : 56.67 Mean : 2.459 Mean : -0.0045 ## 3rd Qu.: 0.08842 3rd Qu.: 67.66 3rd Qu.: 1.266 3rd Qu.: 0.1364 ## Max. : 77.24400 Max. :9928.50 Max. :7661.500 Max. : 15.5410 ## NA’s :103 NA’s :3 ## Attr23 Attr24 Attr25 ## Min. :-310.89000 Min. :-463.8900 Min. :-71.4440 ## 1st Qu.: 0.00257 1st Qu.: 0.0208 1st Qu.: 0.1780 ## Median : 0.03010 Median : 0.1632 Median : 0.4246 ## Mean : -0.09686 Mean : 0.1389 Mean : 0.3751 ## 3rd Qu.: 0.07573 3rd Qu.: 0.3573 3rd Qu.: 0.6350 ## Max. : 77.24400 Max. : 252.3400 Max. :266.8600 ## NA’s :135 NA’s :3 ## Attr26 Attr27 Attr28 Attr29 ## Min. :-221.3300 Min. :-158130.0 Min. :-1089.700 Min. :0.006359 ## 1st Qu.: 0.0689 1st Qu.: 0.1 1st Qu.: 0.082 1st Qu.:3.648750 ## Median : 0.2109 Median : 1.0 Median : 0.527 Median :4.174700 ## Mean : 1.0913 Mean : 463.6 Mean : 10.234 Mean :4.153190 ## 3rd Qu.: 0.5759 3rd Qu.: 4.1 3rd Qu.: 1.601 3rd Qu.:4.669400 ## Max. :2689.1000 Max. : 565940.0 Max. :21701.000 Max. :9.698300 ## NA’s :18 NA’s :391 NA’s :107 NA’s :3 ## Attr30 Attr31 Attr32 Attr33 ## Min. : -23.0600 Min. :-310.80000 Min. : -255 Min. : -1.433 ## 1st Qu.: 0.0856 1st Qu.: 0.00676 1st Qu.: 50 1st Qu.: 2.759 ## Median : 0.2242 Median : 0.04307 Median : 81 Median : 4.473 ## Mean : 0.8478 Mean : -0.06578 Mean : 2112 Mean : 8.337 ## 3rd Qu.: 0.4062 3rd Qu.: 0.09876 3rd Qu.: 131 3rd Qu.: 7.313 CAPÍTULO 4. APLICACIÓN A R 67
4.2. RANDOM FOREST SOBRE LOS DATOS ## ## Mcnemar’s Test P-Value : 0.04123 ## ## Sensitivity : 0.9869 ## Specificity : 1.0000 ## Pos Pred Value : 1.0000 ## Neg Pred Value : 0.9868 ## Prevalence : 0.5044 ## Detection Rate : 0.4978 ## Detection Prevalence : 0.4978 ## Balanced Accuracy : 0.9934 ## ## ’Positive’ Class : 0 ## Obtenemos un accuracy igual a 0.9934, por lo que nuestro modelo tiene una precisión bastante buena, mejorando la precisión del modelo sin balancear. 74 CAPÍTULO 4. APLICACIÓN A R
Bibliografía Universidad de sevilla. Disponible en https://www.us.es, Página web. JJ Allaire, Yihui Xie, Christophe Dervieux, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, Winston Chang, and Richard Iannone. rmarkdown: Dynamic Documents for R, 2023. URL https://github.com/rstudio/ rmarkdown. R package version 2.25, https://pkgs.rstudio.com/rmarkdown/. Edward I. Altman. Financial Ratios, Discriminant Analysis and the Prediction of Corporate Bankruptcy. The Journal of Finance, 23(4):589–609, 1968. ISSN 0022-1082. doi: 10.2307/2978933. URL https://www.jstor.org/stable/2978933. Publisher: [American Finance Association, Wiley]. Edward I. Altman and Edith Hotchkiss. Corporate Financial Distress and Bankruptcy: Predict and Avoid Bankruptcy, Analyze and Invest in Distressed Debt. Wiley, 1 edition, November 2005. ISBN 978-0-471-69189-1 978-1-118-26780-6. doi: 10.1002/9781118267806. URL https://onlinelibrary.wiley.com/doi/book/10.1002/ 9781118267806. Leo Breiman. Heuristics of instability in model selection. technique report. statistics department. University of California at Berkeley, 1994. Leo Breiman. Bagging predictors. Machine Learning, 24(2):123–140, August 1996. ISSN 0885-6125, 1573-0565. doi: 10.1007/BF00058655. URL http://link.springer.com/10. 1007/BF00058655. Leo Breiman. Random forests. Machine learning, 45:5–32, 2001. Wray Buntine. Learning classification trees. In Artificial Intelligence frontiers in statistics, pages 182–201. Chapman and Hall/CRC, 2020. Norma Caro and Margarita Díaz. Factores determinantes para predecir la crisis financiera en empresas argentinas. Cuadernos de Estudios Empresariales, 25, November 2016. doi: 10.5209/rev_CESE.2015.v25.53631. Norma Patricia Caro, Margarita Díaz, and Marcela Porporato. Predicción de quiebras empresariales en economías emergentes: uso de un modelo logístico mixto. Revista de Métodos Cuantitativos para la Economía y la Empresa, 16, November 2016. ISSN 1886-516X, 1886-516X. doi: 10.46661/revmetodoscuanteconempresa.2187. URL https: //www.upo.es/revistas/index.php/RevMetCuant/article/view/2187. Norma Patricia Caro, Mariana Guardiola, Pablo Ortiz, Norma Patricia Caro, Mariana Guardiola, and Pablo Ortiz. Árboles de clasificación como herramienta para predecir 75
Bibliografía dificultades financieras en empresas Latinoamericanas a través de sus razones contables. Contaduría y administración, 63(1):0–0, March 2018. ISSN 0186-1042. doi: 10.22201/fca.24488410e.2018.1148. URL http://www.scielo.org.mx/scielo.php?script= sci_abstract&pid=S0186-10422018000100008&lng=es&nrm=iso&tlng=es. Publisher: Facultad de Contaduría y Administración, UNAM. Emilio Carrizosa. Clasificación supervisada y regresión (I). Sergio Castillo, Miguel Flores, and Giovanni Herrera. Functional Data Analysis Applied to Financial Risk: a Case Study in Ecuadorian Credit Unions. Latin-American Journal of Computing, 4(1):7–7, July 2017. ISSN 1390-9134. URL https://lajc.epn.edu.ec/ index.php/LAJC/article/view/120. Number: 1. Facultad de Matemáticas (Univ. Sevilla), s.f. URL https://www.matematicas.us.es. Halina Frydman, Edward I. Altman, and Duen-Li Kao. Introducing Recursive Partitioning for Financial Classification: The Case of Financial Distress. The Journal of Finance, 40(1):269–291, 1985. ISSN 0022-1082. doi: 10.2307/2328060. URL https://www.jstor. org/stable/2328060. Publisher: [American Finance Association, Wiley]. Ricardo Gimeno and José Manuel Marqués. Tradición e inteligencia artificial: oportunidades y retos del machine learning para los servicios financieros. ICE, Revista de Economía, (926), June 2022. ISSN 2340-8790. doi: 10.32796/ice.2022.926.7403. URL https://revistasice.com/index.php/ICE/article/view/7403. Number: 926. David Gálvez Ruiz. RF_2023.pdf. D Heath, S Kasif, and S Salzberg. k-dt: A multi-tree learning method. In Proc. of the Second Int. Workshop on Multistrategy Learning, pages 138–149, 1993. José Manuel García Hernández and Walther Nahun Torres Moreno. Predicción de riesgo de impago en institución financiera usando modelos de Machine Learning. Thesis, Universidad Tecnológica Centroamericana UNITEC, December 2023. URL https://repositorio.unitec.edu/xmlui/handle/123456789/12906. Accepted: 2023-12- 09T17:23:27Z Publication Title: Universidad Tecnológica Centroamericana UNITEC. Stewart Jones and David A. Hensher. Predicting Firm Financial Distress: A Mixed Logit Model. The Accounting Review, 79(4):1011–1038, 2004. ISSN 00014826. URL https:// www.proquest.com/docview/218543491/abstract/DBF970CB1DEE4CD2PQ/1. Num Pages: 28 Place: Sarasota, United States Publisher: American Accounting Association. Stewart Jones and David A. Hensher. Modelling corporate failure: A multinomial nested logit analysis for unordered outcomes. The British Accounting Review, 39(1):89–107, March 2007. ISSN 0890-8389. doi: 10.1016/j.bar.2006.12.003. URL https://www. sciencedirect.com/science/article/pii/S0890838906001272. Suk Wah Kwok and Chris Carter. Multiple decision trees. In Machine intelligence and pattern recognition, volume 9, pages 327–335. Elsevier, 1990. Juan Fernando Lopez, Sergio Fernández Henao, and Marcela María Morales. Aplicación de la programación por metas en la distribución de servicios entre empresas operadoras del sistema de transporte masivo. Scientia et technica, 13(37):339–343, 2007. 76
Bibliografía Pedro L. Luque Calvo. Escribir un Trabajo Fin de Estudios con R Markdown, 2017. URL http://destio.us.es/calvo. Pedro L. Luque Calvo. Cómo crear Tablas de información en R Markdown, 2019. URL http://destio.us.es/calvo. Luque Calvo, Pedro L. Página personal de Pedro L. Luque, 2021. URL http://destio.us. es/calvo. Pablo de Llano Monelos, Carlos Piñeiro Sánchez, and Manuel Rodríguez López. DEA as a business failure prediction tool Application to the case of galician SMEs. Contaduría y Administración, 59(2):65–96, February 2015. ISSN 2448-8410. doi: 10.1016/ S0186-1042(14)71255-0. URL http://www.cya.unam.mx/index.php/cya/article/view/ 57. Number: 2. R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria, 2016. URL https://www.R-project.org/. RStudio Team. RStudio: Integrated Development Environment for R. RStudio, Inc., Boston, MA, 2015. URL http://www.rstudio.com/. Techopedia. "definition - what does business intelligence (bi) mean?". Disponible en https://www.techopedia.com/definition/345/business-intelligence-bi, 2017. Sebastian Tomczak. Polish companies bankruptcy data, 2016. URL https://archive.ics. uci.edu/dataset/365. Yuelin Wang, Yihan Zhang, Yan Lu, and Xinran Yu. A Comparative Assessment of Credit Risk Model Based on Machine Learning ——a case study of bank loan data. Procedia Computer Science, 174:141–149, 2020. ISSN 18770509. doi: 10.1016/j.procs.2020.06.069. URL https://linkinghub.elsevier.com/retrieve/pii/S1877050920315830. Yihui Xie. knitr: A General-Purpose Package for Dynamic Report Generation in R, 2023. URL https://yihui.org/knitr/. R package version 1.45. Guo Yangyudongnanxin. Financial Credit Risk Control Strategy Based on Weighted Random Forest Algorithm. Scientific Programming, 2021:1–9, October 2021. ISSN 1875-919X, 1058-9244. doi: 10.1155/2021/6276155. URL https://www.hindawi.com/ journals/sp/2021/6276155/. 77