top of page

ESTIMACIÓN DEL VALOR AÑADIDO APORTADO POR LOS MODELOS DE RIESGO DE CRÉDITO III

  • fjroar
  • 17 ene 2024
  • 6 Min. de lectura

En esta última parte de la medición del valor añadido, quiero ofrecer un acercamiento práctico a través de una función R que dejo en mi git para el interesado en usarla:

 

 

Con lo tratado hasta aquí podemos medir el beneficio en modelos de admisión de riesgos enfocados a compras aplazadas y préstamos fundamentalmente, siendo algo más complejo el tema de tarjetas de crédito que en función del tipo de tarjeta y de sus opciones convendría analizarlo con un poco más de detalle en algunos casos.


Por tanto, teniendo en cuenta lo anterior, nos centramos en la última parte del siguiente esquema:



Figura 1: Esquema genérico de un sistema de estimación de beneficios de un modelo en una cartera de clientes


Antes de llegar a dicha última parte indicar que dado que en general se toman datos mensuales, sólo interesan unas pocas variables, los datos finales que van a trabajarse con la función R que explico a continuación no van a suponer un problema de volumen de información y por tanto esta función puede ser perfectamente trabajada en local.

Esta función emplea a su vez algunos elementos de unas de mis librerías favoritas como es la scorecardModelUtils, con lo que esta versión está restringuida para modelos de Credit Scoring, pero no sería muy complicado extenderla para modelos Machine Lerning en general, aunque para estos caso algunas cosas que nos simplifica la anterior librería deberán ser programadas a mano.


Así pues los parámetros de entrada de la función a considerar aquí serían los siguientes:


 







Figura 2: Parámetros y dependencias principales


En principio el último parámetro denominado perc no sería necesario si se trabaja con los rechazados y se tiene además, para dichos rechazados por el modelo los valores de exposición y de fee correspondientes tal y como se comentó en el anterior post, pero por simplificar la exposición y porque no siempre en todas las situaciones los valores anteriores son factibles, lo que hace esta función es que trabaja sólo sobre los aceptados y se estima, en función del porcentaje de rechazo lo siguiente:

 

  • Estima el número de clientes rechazados en esta parte del código:



  • Se estima la exposición media de dichos clientes, calculando primero la media de las exposiciones en los clientes conocidos y extrapolando este valor al cada uno de los anteriores clientes

  • Se estima el ingreso (fee) medio de dichos clientes, calculando primero la media de los fees en los clientes conocidos y extrapolando este valor al cada uno de los anteriores clientes. Los dos pasos anteriores se hacen justo aquí:



Y se añade al dataset agregado df_model_sum con:

 

                               df_model_sum <- rbind(df0, df_model_sum)


Nótese que para llegar a lo anterior se han creado las siguientes tablas básicas:

 

  • Variables internas y selección de las fechas de los datos:


  • Generación de la tabla gini mediante el uso de la librería scorecardModelUtils y su función gini_table() además se estima uno de los parámetros de salida de la función como será el gini y dentro del dataset df_model_prev está la variable Total que se usa para el cálculo del número total de individuos según la inferencia realizada en el apartado anterior:



El dataset df_model_prev intenta ser de unos 100 registros (percentiles) que en ocasiones, si el modelo no es muy granular no van a conseguir o si hay puntos de acumulación. La función gini_table() preserva la integridad de los puntos score que emplea de modo que no asocia a distintos tramos clientes con la misma puntuación, lo que distorciona todos los cálculos, de ahí que sea tan recomendable scorecarModelUtils frente a una mera división en percentiles con n_tile() de dplyr 

que puede generar muchos problemas

 

  • Otro elemento a destacar de la anterior tabla es que genera columnas con los puntos de corte, lo que nos permite aplicalos nuestro dataset original para hacer posteriormente las segmentaciones por importes (exposiciones y exposiciones en default) que es lo que nos interesa, ya que por desgracia, scorecardModelUtils sólo agrupa por número, no por importes. Esto se hace precisamente aquí:



Nótese que df_model_sum tiene ya casi todo lo necesario para aplicar la metodología del anterior post

 

  • La inferencia del riesgo se hace mediante el siguiente modelo de regresión lineal de orden 2. En aplicaciones más avanzadas se pueden dejar distitas modelizaciones y que se tome la de menor R-cuadrado, pero en esta ocasión me declino por esta por dar unos resultados en general coherentes. Nótese que como variable explicaa va el procentaje (sin acumular) de la tasa de riesgo en importes (no en número) y como variable explicativa de grado 1 y 2 el porcentaje de exposición acumulado pero considerando la inferencia realizada en el paso anterior (que es la que nos interesa estimar):



El anterior fragmento de código es equivalente a plantear el siguiente gráfico ya

mostrado en el anterior post:

 


Generándose la estimación de la tasa de riesgo deseada del siguiente modo:

 

                                                 rate = as.numeric((model$coefficients[1] +

                                                 model$coefficients[2] * perc +

                                                 model$coefficients[3] perc*2))


  • Una vez que se obtiene rate se completa el dato que se necesita en el segmento de inferencia del dataset df_model_sum, nótese que lo que nos va a interesar realmente e la exposición at default en el tramo inferido, este valor puede ser interpretado como el Coste de Riesgo evitado por el modelo y por tanto si este Coste de Riesgo > Fees rechazados, entonces la aplicación del modelo genera beneficios que será de lo que se trata después.

 

df_model_sum$risk[1] = rate

                 df_model_sum$exposure_at_default[1] = df_model_sum$total_exposure[1] * rate


  • El último paso de la función es generar el resto de los indicadores y ofrecerlos en forma de una lista de valores:




Con todo lo anterior cabe ya generar la siguiente tabla mostrada también en el anterior post:


Figura 3: Tabla de seguimiento de la eficiencia de una cartera de pago aplazado a 3 meses con algunas columnas relevantes (ac significa after cutoff y bc before cutoff)


Nota: (1) Hay borrones y eliminación de datos a propósito en la anterior figura

            (2) Nótese que Global Profits sería Profits without model y Profits ac sería Profits with model

 

Donde Add value = Total_ProfitsMod – Total_Profits pudiéndose por tanto con esta función y con un poco de desarrollo adicional tenerse automatizado el cálculo sistemático de beneficios o de valor añadido aportado por un modelo que en general va a ser una función dependiente de los siguientes elementos principales:



Figura 4: Nivel conceptual de las dependencias principales de una función de beneficios en modelos de admisión de riesgo de crédito genérica



Conviene indicar que aunque la acción en sí de medir los beneficios que aporta un modelo parece no aportar realmente valor a una empresa lo cierto, es que tener su sistemática creada permitiría lo siguiente:

 

  • Valorar el valor que aportan las áreas analíticas cuando se les encomienda la construcción de un modelo para un determinado segmento de negocio

 

  • Valorar pruebas de concepto cuando vienen los “vendedores de humo” o “alfombras” a colocarnos sus maravillosos productos. A veces son buenos e incluso necesarios, pero podría citar varios casos de algunas patatas que se han colado por no hacer mediciones precisas

 

  • Conocer el límite real de mejora de los modelos y analizar cuándo es necesario articular variaciones bien en la política de riesgos, bien en la de pricing para alcanzar los objetivos de la empresa

 

  • Valorar si merece la pena un cambio de modelo frente a otro por unos cuantos puntos de Gini (tener en cuenta que el Gini, la ROC, … son variables aleatorias, las variaciones de +- 5 puntos arriba o abajo pueden deberse a fluctuaciones muestrales y por tanto modelo de un 44 de Gini puede generar similar beneficio a uno de un 48, eso sí cuando la diferencia es de +-10 puntos, la cosa es bastante distinta

 

 

Por tanto no hay ninguna excusa, salvo la “vagancia” o el desconocimiento de no querer llevar a cabo un programa de medición sistemática del beneficio aportado por los modelos, máxime sabiendo que si se hace con cuidado, esta acción se puede automatizar en un alto grado sin generar un coste de mantenimiento posterior elevado. Por supuesto que no todos los modelos se miden igual y por tanto no todos van a aportar el mismo valor, no es lo mismo un modelo de riesgos que uno de on-boarding, de fuga o de series temporales, cada uno tiene su metodología y en cada uno hay que combinar por un lado técnica estadística y por otro conocimiento de negocio para saber si estamos ganando pasta o tirando el dinero en interminables proyectos analíticos que mucho prometen pero que poco impactan en las cuentas de resultados a la hora de la verdad.

 
 
 

1 comentario


Juan Jose Cabezas
Juan Jose Cabezas
28 ene 2024

Por más tiempo que pase y más te conozca, nunca dejas de sorprenderme, tienes una mente privilegiada, un abrazo

Me gusta

© 2021 by Francisco J. Rodríguez Aragón. Proudly created with Wix.com

bottom of page