Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Calificación crediticia por bagging decision Trees

Este ejemplo muestra cómo crear una herramienta de calificación crediticia automatizada.

Una de las tareas fundamentales en la gestión del riesgo crediticio es asignar una calificación crediticia a un prestatario. Las calificaciones se utilizan para clasificar a los clientes de acuerdo con su solvencia percibida: mejores calificaciones significan clientes menos riesgosos; calificaciones similares significan un nivel de riesgo similar. Las calificaciones vienen en dos categorías: calificaciones crediticias y puntuaciones de crédito. Las calificaciones de crédito son un pequeño número de clases discretas, generalmente etiquetadas con letras, como ' AAA ', ' BB-', etc. Las puntuaciones de crédito son calificaciones numéricas como ' 640 ' o ' 720 '. Los grados de crédito son uno de los elementos clave en los marcos regulatorios, como Basilea II (véase el Comité de supervisión bancaria de Basilea [3]).

La asignación de una calificación crediticia implica analizar información sobre el prestatario. Si el prestatario es un individuo, la información de interés podría ser el ingreso del individuo, deuda pendiente (hipoteca, tarjetas de crédito), tamaño del hogar, estado residencial, etc. Para los prestatarios corporativos, uno puede considerar ciertos ratios financieros (por ejemplo, ventas divididas por activos totales), industria, etc. Aquí, nos referimos a estas piezas de información sobre un prestatario como o.featurespredictors Diferentes instituciones utilizan predictores diferentes, y también pueden tener diferentes clases de calificación o rangos de puntuación para clasificar a sus clientes. Para préstamos relativamente pequeños ofrecidos a un gran mercado de prestatarios potenciales (por ejemplo, tarjetas de crédito), es común utilizar puntuaciones de crédito, y el proceso de calificación de un prestatario es generalmente automatizado. Para préstamos más grandes, accesibles para pequeñas y medianas empresas y grandes corporaciones, las calificaciones de crédito se utilizan generalmente, y el proceso de calificación puede implicar una combinación de algoritmos automatizados y análisis de expertos.

Hay agencias de calificación que mantienen un registro de la solvencia de las empresas. Sin embargo, la mayoría de los bancos desarrollan una metodología interna para asignar calificaciones crediticias a sus clientes. Calificar a un cliente internamente puede ser una necesidad si el cliente no ha sido calificado por una agencia de calificación, pero incluso si existe una calificación de terceros, una calificación interna ofrece una evaluación complementaria del perfil de riesgo de un cliente.

Este ejemplo muestra cómo MATLAB® puede ayudar con la etapa automatizada de un proceso de calificación crediticia. En particular, aprovechamos una de las herramientas de aprendizaje estadístico fácilmente disponibles en estadísticas y machine learning Toolbox™, un algoritmo de clasificación conocido como a.bagged decision tree

Asumimos que la información histórica está disponible en forma de un conjunto de datos donde cada registro contiene las características de un prestatario y la calificación crediticia que se le asignó. Estas pueden ser calificaciones internas, asignadas por un Comité que seguía las políticas y procedimientos ya en su lugar. Alternativamente, las calificaciones pueden venir de una agencia de calificación, cuyas calificaciones se están utilizando para "iniciar" un nuevo sistema de clasificación de crédito interno.

Los datos históricos existentes son el punto de partida y se utilizan para el árbol de decisiones en bolsas que automatizará la calificación crediticia.train En el vocabulario del aprendizaje estadístico, este proceso de formación cae en la categoría de.supervised learning A continuación, el clasificador se utiliza para asignar clasificaciones a nuevos clientes. En la práctica, es muy probable que estos automatizados o clasificaciones se consideren tentativos, hasta que un Comité de crédito de expertos los revisa.predicted El tipo de clasificador que utilizamos aquí también puede facilitar la revisión de estas clasificaciones, ya que proporciona una medida de certeza para las calificaciones pronosticadas, a.classification score

En la práctica, uno necesita entrenar primero un clasificador, luego utilizarlo para asignar una calificación crediticia a nuevos clientes, y finalmente uno también necesita o o precisión del clasificador, un proceso también conocido como o.profileevaluate the qualityvalidationback-testing También discutimos algunas herramientas de back-testing disponibles.

Cargar los datos de calificación crediticia existentes

Cargamos los datos históricos del archivo de texto delimitado por comas.CreditRating_Historical.dat Elegimos trabajar con archivos de texto aquí, pero los usuarios con acceso a Database Toolbox™ sin duda pueden cargar esta información directamente desde una base de datos.

El conjunto de datos contiene ratios financieros, sector industrial y calificaciones crediticias para una lista de clientes corporativos. Esto es simulado, no datos reales. La primera columna es un identificador de cliente. Entonces tenemos cinco columnas de ratios financieros. Estas son las mismas proporciones utilizadas en la puntuación z de Altman (véase Altman [1]; Véase también Loeffler y Posch [4] para un análisis relacionado).

  • Capital circulante/activos totales (WC_TA)

  • Utilidades retenidas/activos totales (RE_TA)

  • Ganancias antes de intereses e impuestos/activos totales (EBIT_TA)

  • Valor de mercado de la equidad/valor contable de la deuda total (MVE_BVTD)

  • Ventas/activos totales (S_TA)

A continuación, tenemos una etiqueta del sector de la industria, un valor entero que oscila entre 1 y 12. La última columna tiene asignada la calificación crediticia al cliente. Cargamos los datos en una matriz.table

creditDS = readtable('CreditRating_Historical.dat'); 

Copiamos las entidades en una matriz, y las clases correspondientes, las clasificaciones, en un vector.XY Esto no es un paso necesario, ya que podríamos acceder a esta información directamente desde el o array, pero lo hacemos aquí para simplificar algunas llamadas a funciones repetidas a continuación.datasettable

Las características que se almacenarán en la matriz son los cinco ratios financieros y la etiqueta de la industria. es una variable categórica, de hecho, porque no hay ningún orden en los sectores de la industria.XIndustrynominal La variable de respuesta, las calificaciones de crédito, también es categórica, aunque se trata de una variable, porque, por definición, las calificaciones implican una capacidad crediticia.ordinalranking Podemos utilizar esta variable "tal cual" para entrenar nuestro clasificador. Aquí elegimos copiarlo en un porque de esta manera las salidas salen en el orden natural de las clasificaciones y son más fáciles de leer.ordinal array El orden de las calificaciones es establecido por el array de celdas que pasamos como un tercer argumento en la definición de.Y Las calificaciones de crédito también se pueden asignar a valores numéricos, que pueden ser útiles para probar métodos alternativos para analizar los datos (p. ej., regresión). Siempre se recomienda probar diferentes métodos en la práctica.

X = [creditDS.WC_TA creditDS.RE_TA creditDS.EBIT_TA creditDS.MVE_BVTD...      creditDS.S_TA creditDS.Industry]; Y = ordinal(creditDS.Rating); 

Utilizamos los predictores y la respuesta para ajustarse a un tipo determinado de conjunto de clasificación llamado a.XYbagged decision tree "Embolsado", en este contexto, significa "agregación de bootstrap." La metodología consiste en generar un número de sub-muestras, o, del conjunto de datos.bootstrap replicas Estas sub-muestras se generan aleatoriamente, muestreando con reemplazo de la lista de clientes en el conjunto de datos. Para cada réplica, se cultiva un árbol de decisión. Cada árbol de decisión es un clasificador entrenado por sí mismo y se podría usar aisladamente para clasificar a los nuevos clientes. Sin embargo, las predicciones de dos árboles cultivados a partir de dos réplicas de bootstrap diferentes pueden ser diferentes. El conjunto de las predicciones de todos los árboles de decisión que se cultivan para todas las réplicas de arranque.aggregates Si la mayoría de los árboles predicen una clase en particular para un nuevo cliente, es razonable considerar que la predicción es más robusta que la predicción de cualquier solo árbol. Además, si una clase diferente es predicha por un conjunto más pequeño de árboles, esa información también es útil. De hecho, la proporción de árboles que predicen diferentes clases es la base para los que son reportados por el conjunto al clasificar nuevos datos.classification scores

Construyendo el árbol de Bagger

El primer paso para construir nuestro conjunto de clasificación será encontrar un buen tamaño de hoja para los árboles individuales; Aquí tratamos tamaños de 1, 5 y 10. (Consulte la documentación sobre estadísticas y Toolbox para aprendizaje automático para más información.)TreeBagger Comenzamos con un pequeño número de árboles, 25 sólo, porque en su mayoría queremos comparar la tendencia inicial en el error de clasificación para diferentes tamaños de hoja. Para la reproducibilidad y las comparaciones justas, reinicializamos el generador de números aleatorios, que se utiliza para muestrear con reemplazo de los datos, cada vez que construimos un clasificador.

leaf = [1 5 10]; nTrees = 25; rng(9876,'twister'); savedRng = rng; % save the current RNG settings  color = 'bgr'; for ii = 1:length(leaf)    % Reinitialize the random number generator, so that the    % random samples are the same for each leaf size    rng(savedRng)    % Create a bagged decision tree for each leaf size and plot out-of-bag    % error 'oobError'    b = TreeBagger(nTrees,X,Y,'OOBPrediction','on',...                              'CategoricalPredictors',6,...                              'MinLeafSize',leaf(ii));    plot(oobError(b),color(ii))    hold on end xlabel('Number of grown trees') ylabel('Out-of-bag classification error') legend({'1', '5', '10'},'Location','NorthEast') title('Classification Error for Different Leaf Sizes') hold off 

Los errores son comparables para las tres opciones de tamaño de hoja. Por lo tanto, trabajaremos con un tamaño de hoja de 10, porque da como resultado árboles más delgados y cálculos más eficientes.

Tenga en cuenta que no tuvimos que dividir los datos en y subconjuntos.trainingtest Esto se hace internamente, está implícito en el procedimiento de muestreo que subyace al método. En cada iteración de arranque, la réplica de arranque es el conjunto de entrenamiento y los clientes que quedan fuera ("fuera de bolsa") se usan como puntos de prueba para estimar el error de clasificación fuera de bolsa que se ha notificado anteriormente.

A continuación, queremos averiguar si todas las características son importantes para la precisión de nuestro clasificador. Hacemos esto activando la medida (), y trazamos los resultados para encontrar visualmente las características más importantes.feature importanceOOBPredictorImportance También intentamos un mayor número de árboles ahora, y almacenamos el error de clasificación, para más comparaciones a continuación.

nTrees = 50; leaf = 10; rng(savedRng); b = TreeBagger(nTrees,X,Y,'OOBPredictorImportance','on',...                           'CategoricalPredictors',6,...                           'MinLeafSize',leaf);  bar(b.OOBPermutedPredictorDeltaError) xlabel('Feature number') ylabel('Out-of-bag feature importance') title('Feature importance results')  oobErrorFullX = oobError(b); 

Las características 2, 4 y 6 se destacan del resto. La característica 4, el valor de mercado de la equidad/valor contable de la deuda total (), es el predictor más importante para este conjunto de datos.MVE_BVTD Esta relación está estrechamente relacionada con los predictores de solvencia en modelos estructurales, como el modelo de Merton [5], donde el valor de la equidad de la empresa se compara con su deuda pendiente para determinar la probabilidad predeterminada.

La información sobre el sector de la industria, la característica 6 (), también es relativamente más importante que otras variables para evaluar la solvencia de una empresa para este conjunto de datos.Industry

Aunque no es tan importante como, la característica 2, las ganancias retenidas/activos totales (), se destaca del resto.MVE_BVTDRE_TA Existe una correlación entre las ganancias retenidas y la edad de una empresa (cuanto más tiempo ha existido una empresa, más ingresos puede acumular, en general), y a su vez la edad de una empresa se correlaciona con su solvencia (las empresas más antiguas tienden a ser más propensas a sobrevivir en Toug horas).

Vamos a encajar un nuevo conjunto de clasificación usando sólo predictores, y.RE_TAMVE_BVTDIndustry Comparamos su error de clasificación con el clasificador anterior, que utiliza todas las características.

X = [creditDS.RE_TA creditDS.MVE_BVTD creditDS.Industry];  rng(savedRng) b = TreeBagger(nTrees,X,Y,'OOBPrediction','on',...                           'CategoricalPredictors',3,...                           'MinLeafSize',leaf);  oobErrorX246 = oobError(b);  plot(oobErrorFullX,'b') hold on plot(oobErrorX246,'r') xlabel('Number of grown trees') ylabel('Out-of-bag classification error') legend({'All features', 'Features 2, 4, 6'},'Location','NorthEast') title('Classification Error for Different Sets of Predictors') hold off 

La precisión de la clasificación no se deteriora significativamente cuando eliminamos las características con una importancia relativamente baja (1, 3 y 5), por lo que usaremos el conjunto de clasificación más parsimonioso para nuestras predicciones.

En este ejemplo, hemos comenzado con un conjunto de seis características solamente, y utilizamos la medida de importancia de la característica del clasificador, y el error de clasificación fuera de bolsa como criterios para la pantalla hacia fuera tres de las variables. La selección de características puede ser un proceso que consume tiempo cuando el conjunto inicial de predictores potenciales contiene docenas de variables. Además de las herramientas que hemos utilizado aquí (importancia variable y una comparación "visual" de errores fuera de bolsa), otras herramientas de selección de variables en estadística y machine learning Toolbox pueden ser útiles para estos tipos de análisis (ver documentación). Sin embargo, al final, un proceso exitoso de selección de características requiere una combinación de herramientas cuantitativas y el juicio de un analista.

Por ejemplo, la medida de importancia variable que usamos aquí es un mecanismo de clasificación que estima el impacto relativo de una característica midiendo cuánto se deteriora la precisión predictiva del clasificador cuando los valores de esta característica se permutan aleatoriamente. La idea es que cuando la característica en cuestión agrega poco a la potencia predictiva del clasificador, el uso de valores alterados (en este caso permute) no debe afectar a los resultados de la clasificación. La información relevante, por otro lado, no puede intercambiarse aleatoriamente sin degradar las predicciones. Ahora, si dos características altamente correlacionadas son importantes, ambos clasificarán alto en este análisis. En ese caso, mantener una de estas características debe ser suficiente para las clasificaciones precisas, pero uno no sabría que de los resultados de la clasificación por sí solo. Uno tendría que comprobar las correlaciones por separado, o usar el juicio de un experto. Es decir, herramientas como la importancia variable o pueden ayudar en gran medida a la selección de características, pero el juicio de un analista es una pieza clave en este proceso.sequentialfs

En este punto, el clasificador se podría guardar (por ejemplo,), para ser cargado en una futura sesión () para clasificar a los nuevos clientes.save classifier.mat bload classifier Para mayor eficiencia, se recomienda mantener una versión compacta del clasificador una vez finalizado el proceso de entrenamiento.

b = compact(b); 

Clasificar nuevos datos

Aquí usamos el conjunto de clasificación previamente construido para asignar calificaciones crediticias a nuevos clientes. Debido a que las calificaciones de los clientes existentes también deben revisarse regularmente, especialmente cuando su información financiera ha cambiado sustancialmente, el conjunto de datos también podría contener una lista de los clientes existentes en revisión. Comenzamos cargando los nuevos datos.

newDS = readtable('CreditRating_NewCompanies.dat'); 

Para predecir la calificación crediticia de estos nuevos datos, llamamos al método en el clasificador.predict El método devuelve dos argumentos, la clase pronosticada y la puntuación de clasificación. Sin duda queremos obtener ambos argumentos de salida, ya que las puntuaciones de clasificación contienen información sobre cómo ciertas calificaciones pronosticadas parecen ser. Podríamos copiar variables, y en una matriz, como antes, pero ya que haremos sólo una llamada a, podemos omitir este paso y usar directamente.RE_TAMVE_BVTDIndustryXpredictnewDS

[predClass,classifScore] = predict(b,[newDS.RE_TA newDS.MVE_BVTD newDS.Industry]); 

En este punto, podemos crear un informe. Aquí solo mostramos en la pantalla un pequeño informe para los tres primeros clientes, con fines ilustrativos, pero las herramientas de implementación de MATLAB podrían mejorar en gran medida el flujo de trabajo aquí. Por ejemplo, los analistas de crédito podrían ejecutar esta clasificación de forma remota, utilizando un navegador web y obtener un informe, sin siquiera tener MATLAB en sus escritorios.

for i = 1:3    fprintf('Customer %d:\n',newDS.ID(i));    fprintf('   RE/TA    = %5.2f\n',newDS.RE_TA(i));    fprintf('   MVE/BVTD = %5.2f\n',newDS.MVE_BVTD(i));    fprintf('   Industry = %2d\n',newDS.Industry(i));    fprintf('   Predicted Rating : %s\n',predClass{i});    fprintf('   Classification score : \n');    for j = 1:length(b.ClassNames)       if (classifScore(i,j)>0)          fprintf('      %s : %5.4f \n',b.ClassNames{j},classifScore(i,j));       end    end end 
Customer 60644:    RE/TA    =  0.22    MVE/BVTD =  2.40    Industry =  6    Predicted Rating : AA    Classification score :        A : 0.2874        AA : 0.6919        AAA : 0.0156        BBB : 0.0051  Customer 33083:    RE/TA    =  0.24    MVE/BVTD =  1.51    Industry =  4    Predicted Rating : BBB    Classification score :        A : 0.0751        BB : 0.0017        BBB : 0.9232  Customer 63830:    RE/TA    =  0.18    MVE/BVTD =  1.69    Industry =  7    Predicted Rating : A    Classification score :        A : 0.6629        AA : 0.0067        B : 0.0008        BB : 0.0005        BBB : 0.3291  

Mantener registros de las calificaciones pronosticadas y las puntuaciones correspondientes puede ser útil para evaluaciones periódicas de la calidad del clasificador. Almacenamos esta información aquí en el array.tablepredDS

classnames = b.ClassNames; predDS = [table(newDS.ID,predClass),array2table(classifScore)]; predDS.Properties.VariableNames = {'ID','PredRating',classnames{:}}; 

Esta información podría guardarse, por ejemplo, en un archivo de texto delimitado por comas mediante el comandoPredictedRatings.dat

  writetable(predDS,'PredictedRatings.dat');

o escribir directamente en una base de datos utilizando Database Toolbox.

Back-testing: Perfilado del proceso de clasificación

o es el proceso de perfilado o evaluación de la calidad de las calificaciones crediticias.Validationback-testing Hay muchas medidas y pruebas diferentes relacionadas con esta tarea (véase, por ejemplo, el Comité de supervisión bancaria de Basilea [2]). Aquí, nos centramos en las siguientes dos preguntas:

  • ¿Cuán precisas son las calificaciones pronosticadas, en comparación con las calificaciones reales? Aquí "calificaciones pronosticadas" se refiere a los obtenidos del proceso de clasificación automatizada, y "calificaciones reales" a los asignados por un Comité de crédito que reúne las calificaciones pronosticadas y sus puntuaciones de clasificación, y otras piezas de información, tales como noticias y el estado de la economía para determinar una calificación final.

  • ¿Qué tan bien las calificaciones reales clasifican a los clientes de acuerdo con su solvencia? Esto se hace en un análisis realizado, por ejemplo, un año más tarde, cuando se sabe que las empresas por defecto durante el año.ex-post

El archivo contiene datos de "seguimiento" de las mismas empresas consideradas en la sección anterior.CreditRating_ExPost.dat Contiene las calificaciones reales que el Comité asignó a estas empresas, así como una "bandera por defecto" que indica si la empresa correspondiente por incumplimiento en el plazo de un año del proceso de calificación (si 1) o no (si 0).

exPostDS = readtable('CreditRating_ExPost.dat'); 

La razón para entrenar a un clasificador automatizado es agilizar el trabajo del Comité de crédito.Comparing predicted ratings vs. actual ratings. Cuanto más precisas sean las calificaciones pronosticadas, menor es el tiempo que el Comité tiene que gastar revisando las calificaciones pronosticadas. Por lo tanto, es concebible que el Comité desee realizar comprobaciones periódicas sobre la concordancia de las clasificaciones pronosticadas con las calificaciones finales que asignan, y recomendar volver a entrenar el clasificador automatizado (y tal vez incluir nuevas características, por ejemplo) si la discordancía parece Sobre.

La primera herramienta que podemos utilizar para comparar las calificaciones pronosticadas frente a las reales es una, fácilmente disponible en estadísticas y machine learning Toolbox:confusion matrix

C = confusionchart(exPostDS.Rating,predDS.PredRating); sortClasses(C,{'AAA' 'AA' 'A' 'BBB' 'BB' 'B' 'CCC'}) 

Las filas corresponden a las clasificaciones reales y las columnas a las clasificaciones pronosticadas. La cantidad en la posición en la matriz de confusión indica cuántos clientes recibieron una calificación real y se pronosticó como calificación.(i,j)ij Por ejemplo, la posición nos indica cuántos clientes recibieron una calificación de ' A ' por el Comité de crédito, pero se pronosticó como ' AA ' con el clasificador automatizado.(3,2) También se puede presentar esta matriz en porcentaje. Normalice cada valor por el número de observaciones que tiene la misma clasificación real.

C.Normalization = 'row-normalized'; 

Un buen acuerdo entre la predicción y las clasificaciones reales daría como resultado valores en la Diagonal principal que dominan el resto de los valores en una fila, idealmente valores cercanos a 1. En este caso, en realidad vemos un desacuerdo importante para ' B ', ya que aproximadamente la mitad de los clientes que fueron calificados como ' B ' por el Comité de crédito habían sido pronosticados como ' BB ' por el clasificador automatizado. Por otro lado, es bueno ver que las calificaciones difieren en la mayoría de una muesca en la mayoría de los casos, con la única excepción de ' BBB. '

También se podría utilizar una matriz de confusión para comparar las clasificaciones internas asignadas por la institución con las calificaciones de terceros; Esto se hace a menudo en la práctica.

Para cada calificación específica, podemos calcular otra medida de acuerdo entre clasificaciones previstas y reales. Podemos construir un usando la función de estadísticas y machine learning Toolbox, y comprobar el.Receiver Operating Characteristic (ROC) curveperfcurvearea under the curve (AUC) La función toma como argumento las calificaciones reales, que son nuestro punto de referencia, el estándar con el que estamos comparando, y las puntuaciones de clasificación ' BBB ' determinadas por el proceso automatizado.perfcurve Construyamos un ROC y calculamos el AUC para la calificación ' BBB ' en nuestro ejemplo.

[xVal,yVal,~,auc] = perfcurve(exPostDS.Rating,predDS.BBB,'BBB'); plot(xVal,yVal) xlabel('False positive rate') ylabel('True positive rate') text(0.5,0.25,strcat('AUC=',num2str(auc)),'EdgeColor','k') title('ROC curve BBB, predicted vs. actual rating') 

Aquí está una explicación de cómo se construye el ROC. Recuerde que para cada cliente el clasificador automatizado devuelve una puntuación de clasificación para cada una de las calificaciones de crédito, en particular, para ' BBB, ' que puede interpretarse como la probabilidad de que este cliente en particular debe ser calificado como ' BBB. ' Con el fin de construir la curva ROC, uno necesita variar el.classification threshold Es decir, la puntuación mínima para clasificar a un cliente como ' BBB. ' En otras palabras, si el umbral es, sólo clasificamos a los clientes como ' BBB ' si su puntuación ' BBB ' es mayor o igual a.tt Por ejemplo, supongamos que la empresa tenía una puntuación de ' BBB ' de 0,87.XYZ Si la calificación real de (la información en) es ' BBB ', entonces se clasificará correctamente como ' BBB ' para cualquier umbral de hasta 0,87.XYZexPostDS.RatingXYZ Esto sería un, y aumentaría lo que se llama el del clasificador.true positivesensitivity Para cualquier umbral mayor que 0,87, esta empresa no recibiría una calificación ' BBB ', y tendríamos un caso.false negative Para completar la descripción, Supongamos ahora que la calificación real es ' BB. 'XYZ Entonces se rechazaría correctamente como un ' BBB ' para umbrales de más de 0,87, convirtiéndose en un, y aumentando así el llamado del clasificador.true negativespecificity Sin embargo, para umbrales de hasta 0,87, se convertiría en (se clasificará como ' BBB ', cuando en realidad es un ' BB ').false positive La curva ROC se construye trazando la proporción de verdaderos positivos (sensibilidad), frente a falsos positivos (1-especificidad), ya que el umbral varía de 0 a 1.

El AUC, como su nombre indica, es el área bajo la curva ROC. Cuanto más cerca esté el AUC de 1, más preciso es el clasificador (un clasificador perfecto tendría un AUC de 1). En este ejemplo, el AUC parece lo suficientemente alto, pero sería hasta el Comité decidir qué nivel de AUC para las calificaciones debería desencadenar una recomendación para mejorar el clasificador automatizado.

Una herramienta común que se utiliza para evaluar la clasificación de los clientes implícitos en las calificaciones crediticias es la, y la medida asociada.Comparing actual ratings vs. defaults in the following year.Cumulative Accuracy Profile (CAP)accuracy ratio La idea es medir la relación entre las calificaciones crediticias asignadas y el número de incumplimientos observados en el año siguiente. Uno esperaría que se observan menos valores predeterminados para mejores clases de calificación. Si la tasa predeterminada fuera la misma para todas las calificaciones, el sistema de clasificación no sería diferente de un sistema de calificación ingenuo (e inútil) en el que se asignaba aleatoriamente a los clientes una calificación, independientemente de su solvencia.

No es difícil ver que la función también se puede utilizar para construir la PAC.perfcurve El estándar con el que comparamos no es una calificación, como antes, sino la marca predeterminada que hemos cargado desde el archivo.CreditRating_ExPost.dat La puntuación que utilizamos es una "puntuación ficticia" que indica la clasificación en la solvencia implícita en la lista de calificaciones. La partitura ficticia sólo necesita satisfacer que mejores calificaciones obtienen puntuaciones ficticias más bajas (son "menos propensos a tener una bandera predeterminada de 1"), y que cualquier dos clientes con la misma calificación obtienen la misma puntuación ficticia. Una probabilidad predeterminada se podría pasar como una puntuación, por supuesto, pero no tenemos probabilidades predeterminadas aquí, y de hecho, porque no estamos validando las probabilidades predeterminadas.we do not need to have estimates of the default probabilities to construct the CAP Todo lo que estamos evaluando con esta herramienta es lo bien que los clientes de calificaciones de acuerdo a su solvencia.rank

Por lo general, la PAC del sistema de clasificación en consideración se traza junto con la PAC del "sistema de clasificación perfecta." Este último es un sistema hipotético de calificación crediticia para el cual la calificación más baja incluye a todos los morosos, y no a otros clientes. El área bajo esta curva perfecta es el máximo posible AUC alcanzable por un sistema de clasificación. Por Convención, el AUC se ajusta para que CAPs reste el área bajo la PAC del, es decir, la PAC del sistema que asigna aleatoriamente calificaciones a los clientes.naive system La PAC del sistema ingenuo es simplemente una línea recta desde el origen hasta (1, 1), con un AUC de 0,5. El sistema de clasificación se define entonces como la relación entre el AUC ajustada (AUC del sistema en consideración menos el AUC del sistema ingenuo) y la precisión máxima (AUC del sistema perfecto menos el AUC del sistema ingenuo).accuracy ratio

ratingsList = {'AAA' 'AA' 'A' 'BBB' 'BB' 'B' 'CCC'}; Nratings = length(ratingsList); dummyDelta = 1/(Nratings+1); dummyRank = linspace(dummyDelta,1-dummyDelta,Nratings)';  D = exPostDS.Def_tplus1; fracTotDef = sum(D)/length(D); maxAcc = 0.5 - 0.5 * fracTotDef;  R = double(ordinal(exPostDS.Rating,[],ratingsList)); S = dummyRank(R); [xVal,yVal,~,auc] = perfcurve(D,S,1);  accRatio = (auc-0.5)/maxAcc; fprintf('Accuracy ratio for actual ratings: %5.3f\n',accRatio);  xPerfect(1) = 0; xPerfect(2) = fracTotDef; xPerfect(3) = 1; yPerfect(1) = 0; yPerfect(2) = 1; yPerfect(3) = 1; xNaive(1) = 0; xNaive(2) = 1; yNaive(1) = 0; yNaive(2) = 1;  plot(xPerfect,yPerfect,'--k',xVal,yVal,'b',xNaive,yNaive,'-.k') xlabel('Fraction of all companies') ylabel('Fraction of defaulted companies') title('Cumulative Accuracy Profile') legend({'Perfect','Actual','Naive'},'Location','SouthEast') text(xVal(2)+0.01,yVal(2)-0.01,'CCC') text(xVal(3)+0.01,yVal(3)-0.02,'B') text(xVal(4)+0.01,yVal(4)-0.03,'BB') 
Accuracy ratio for actual ratings: 0.850 

La clave para leer la información de la PAC está en los "doblones", etiquetados en la trama para clasificaciones ' CCC, ' B, ' y ' BB. ' Por ejemplo, el segundo Kink está asociado con la segunda calificación más baja, ' B ', y se encuentra en (0,097, 0,714). Esto significa que el 9,7% de los clientes fueron clasificados como ' B ', y representan el 71,4% de los valores predeterminados observados.or lower

En general, la relación de precisión debe tratarse como un pariente, en lugar de una medida absoluta. Por ejemplo, podemos agregar el CAP de las clasificaciones pronosticadas en la misma gráfica y calcular su ratio de precisión para compararlo con la relación de precisión de las clasificaciones reales.

Rpred = double(ordinal(predDS.PredRating,[],ratingsList)); Spred = dummyRank(Rpred); [xValPred,yValPred,~,aucPred] = perfcurve(D,Spred,1);  accRatioPred = (aucPred-0.5)/maxAcc; fprintf('Accuracy ratio for predicted ratings: %5.3f\n',accRatioPred);  plot(xPerfect,yPerfect,'--k',xVal,yVal,'b',xNaive,yNaive,'-.k',...    xValPred,yValPred,':r') xlabel('Fraction of all companies') ylabel('Fraction of defaulted companies') title('Cumulative Accuracy Profile') legend({'Perfect','Actual','Naive','Predicted'},'Location','SouthEast') 
Accuracy ratio for predicted ratings: 0.830 

La relación de precisión de la calificación pronosticada es menor, y su CAP está principalmente por debajo de la CAP de la calificación real. Esto es razonable, ya que las calificaciones reales son asignadas por los comités de crédito que toman en consideración la información adicional de calificaciones pronosticadas que puede ser importante para afinar las calificaciones.and

Observaciones finales

MATLAB ofrece una amplia gama de herramientas de aprendizaje automático, además de árboles de decisión en bolsas, que se pueden utilizar en el contexto de la calificación crediticia. En el cuadro de herramientas estadísticas y aprendizaje automático puede encontrar herramientas de clasificación como análisis discriminante y clasificadores Bayes ingenuos. MATLAB también ofrece Deep Learning Toolbox™. Además, las herramientas de implementación de Database Toolbox y MATLAB pueden proporcionarle más flexibilidad para adaptar el flujo de trabajo que se presenta aquí a sus propias preferencias y necesidades.

Aquí no se han calculado las probabilidades de incumplimiento. Para las calificaciones de crédito, las probabilidades de incumplimiento suelen calcularse en función del historial de migración de calificación crediticia. Consulte la página de referencia en Financial Toolbox™ para obtener más información.transprob

Bibliografía

[1] Altman, E., "ratios financieros, análisis discriminante y predicción de bancarrota corporativa", Vol. 23, no. 4, (Sep., 1968), págs. 589-609.Journal of Finance

[2] Comité de supervisión bancaria de Basilea, "estudios sobre la validación de sistemas de calificación interna", Banco de pagos internacionales (BIS), documentos de trabajo Nº 14, versión revisada, mayo 2005. Disponible en: https://www.bis.org/publ/bcbs_wp14.htm.

[3] Comité de supervisión bancaria de Basilea, "convergencia internacional de la medición de capital y normas de capital: Un marco revisado, "Banco para los asentamientos internacionales (BIS), versión completa, junio 2006. Disponible en: https://www.bis.org/publ/bcbsca.htm.

[4] Loeffler, G., y p. n. Posch,, West Sussex, Inglaterra:Credit Risk Modeling Using Excel and VBA Finanzas de Wiley, 2007.

[5] Merton, R., "sobre el precio de la deuda corporativa: La estructura de riesgo de los tipos de interés ", Vol. 29, no. 2, (mayo, 1974), págs. 449-70.Journal of Finance