La calificación crediticia y la segmentación se refieren al proceso de evaluar la solvencia de personas o empresas y dividirlos en distintos grupos según sus perfiles crediticios. Su objetivo es evaluar la probabilidad de que los prestatarios pagen sus deudas y ayuda a las instituciones financieras a tomar decisiones informadas sobre préstamos y gestión del riesgo crediticio. Si desea aprender a calcular puntajes crediticios y segmentar clientes en función de sus puntajes crediticios, este artículo es para usted. En este artículo, lo guiaré a través de la tarea de segementación y calificación crediticia usando Python.
Calificación crediticia y segmentación: descripción general
El proceso de calcular puntajes crediticios y segmentar clientes en función de sus puntajes crediticios implica varios pasos. En primer lugar, se recopilan y organizan datos relevantes sobre los prestatarios, como:
historial de pagos,
utilización del crédito
historial crediticio
combinación de créditos.
Luego, utilizando algoritmos complejos y modelos estadísticos, los datos recopilados se analizan para generar calificaciones crediticias para cada prestatario.
Estos puntajes crediticios son representación numéricas de la solvencia del prestatario e indican la probabilidad de incumplimiento o pago oportuno. Una vez que se calculan los puntajes crediticios, los clientes se segmentan en diferentes categorías de riesgo o niveles de crédito según umbrales predefinidos.
Esta segmentación ayuda a las instituciones financieras a evaluar el riesgo crediticio asociado con cada cliente y a tomar decisiones informadas sobre aprobaciones de préstamos, tasas de interés y límites de crédito. Al clasificar a los clientes en segmentos, las instituciones financieras pueden gestionar mejor sus carteras de préstamos y mitigar eficazmente el riesgo de posibles incumplimientos.
Entonces, para comenzar con la tarea de calificación y segmentación crediticia, primero necesitamos tener los datos apropiados. Encontré un conjuntos de datos ideal para esta tarea. Puede descargar el conjunto de datos desde Aquí.
Calificación crediticia y segmentación usando Python
Ahora comencemos con la tarea de segmentación y calificación crediticia importando las bibliotecas de Python necesarias y el conjunto de datos
import pandas as pdimport plotly.graph_objects as goimport plotly.express as pximport plotly.io as piopio.templates.default ="plotly_white"data = pd.read_csv("credit_scoring.csv")data.head()
Age
Gender
Marital Status
Education Level
Employment Status
Credit Utilization Ratio
Payment History
Number of Credit Accounts
Loan Amount
Interest Rate
Loan Term
Type of Loan
0
60
Male
Married
Master
Employed
0.22
2685.0
2
4675000
2.65
48
Personal Loan
1
25
Male
Married
High School
Unemployed
0.20
2371.0
9
3619000
5.19
60
Auto Loan
2
30
Female
Single
Master
Employed
0.22
2771.0
6
957000
2.76
12
Auto Loan
3
58
Female
Married
PhD
Unemployed
0.12
1371.0
2
4731000
6.57
60
Auto Loan
4
32
Male
Married
Bachelor
Self-Employed
0.99
828.0
2
3289000
6.28
36
Personal Loan
A continuación se muestra la descripción de todas los campos de los datos:
Age: representa la edad del individuo
Gender: identifica el género del individuo
Marital Status: denota el estado civil del individuo
Education Level: representa en nivel más alto de educación alcanzado por el individuo.
Employment Status: indica el estado de empleo actual del individuo
Credit Utilization: refleja la proporción de crédito utilizado por el individuo en comparación con su límite de crédito total disponible.
Interest Rate: tasa de interés asociada con el préstamo.
Payment History: representa el comportamiento de pago neto mensual de cada cliente, tomando en cuenta factores como pagos a tiempo, pagos atrasados, pagos atrasados e incumplimientos.
Number of Credit Accounts: representa el conteo de cuentas de crédito activas que posee la persona.
Loan Amount: indica el valor monetario del préstamo.
Loan Term: indica la duraciòn o plazo del préstamo.
Type of Loan: incluye categorías como “Préstamo personal”, “Préstamo para automovil” o potencialmente otro tipos de préstamos.
Ahora echemos un vistazo a las estadísticas de las columnas antes de seguir adelante:
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Age 1000 non-null int64
1 Gender 1000 non-null object
2 Marital Status 1000 non-null object
3 Education Level 1000 non-null object
4 Employment Status 1000 non-null object
5 Credit Utilization Ratio 1000 non-null float64
6 Payment History 1000 non-null float64
7 Number of Credit Accounts 1000 non-null int64
8 Loan Amount 1000 non-null int64
9 Interest Rate 1000 non-null float64
10 Loan Term 1000 non-null int64
11 Type of Loan 1000 non-null object
dtypes: float64(3), int64(4), object(5)
memory usage: 93.9+ KB
Ahora echemos un vistazo a las estadísticas descriptivas de los datos:
data.describe()
Age
Credit Utilization Ratio
Payment History
Number of Credit Accounts
Loan Amount
Interest Rate
Loan Term
count
1000.000000
1000.000000
1000.000000
1000.000000
1.000000e+03
1000.000000
1000.000000
mean
42.702000
0.509950
1452.814000
5.580000
2.471401e+06
10.686600
37.128000
std
13.266771
0.291057
827.934146
2.933634
1.387047e+06
5.479058
17.436274
min
20.000000
0.000000
0.000000
1.000000
1.080000e+05
1.010000
12.000000
25%
31.000000
0.250000
763.750000
3.000000
1.298000e+06
6.022500
24.000000
50%
42.000000
0.530000
1428.000000
6.000000
2.437500e+06
10.705000
36.000000
75%
54.000000
0.750000
2142.000000
8.000000
3.653250e+06
15.440000
48.000000
max
65.000000
1.000000
2857.000000
10.000000
4.996000e+06
19.990000
60.000000
Ahora echemos un vistazo a la distribución del índice de utilización del crédito en los datos:
credit_utilization_fig = px.box(data, y='Credit Utilization Ratio', title='Distribución del índice de utilización del crédito')credit_utilization_fig.show()
Ahora echemos un vistazo a la distribución del monto del préstamo en los datos:
loan_amount_fig = px.histogram(data, x='Loan Amount', nbins=20, title='Distribución del monto del préstamo')loan_amount_fig.show()
Luego, echemos un vistazo a la correlación en los datos:
numeric_df = data[['Credit Utilization Ratio', 'Payment History', 'Number of Credit Accounts', 'Loan Amount', 'Interest Rate', 'Loan Term']]correlation_fig = px.imshow(numeric_df.corr(), title='Mapa de calor de correlación')correlation_fig.show()
Calcular puntajes de crédito
El conjunto de datos no tiene ninguna característica que represente los puntajes crediticios de las personas. Para calcular las puntuaciones de crédito, debemos utilizar una técnica adecuada. Existen varias técnicas ampliamente utilizadas para calcular puntajes credeticios, cada una con su propio proceso de cálculo. Un ejemplo es el puntaje FICO, es un modelo de calificación crediticia comúnmente utilizado en la industria.
A continuación se muestra cómo podemos implementar el método de puntuación FICO para calcular las puntuaciones de crédito.
# Definir el mapeo para características categóricaseducation_level_mapping = {'High School': 1, 'Bachelor': 2, 'Master': 3, 'PhD': 4}employment_status_mapping = {'Unemployed': 0, 'Employed': 1, 'Self-Employed': 2}# Aplicar mapeo a características categóricasdata['Education Level'] = data['Education Level'].map(education_level_mapping)data['Employment Status'] = data['Employment Status'].map(employment_status_mapping)# Calcule puntajes de crédito utilizando la fórmula FICO completacredit_scores = []for index, row in data.iterrows(): payment_history = row['Payment History'] credit_utilization_ratio = row['Credit Utilization Ratio'] number_of_credit_accounts = row['Number of Credit Accounts'] education_level = row['Education Level'] employment_status = row['Employment Status']# Apliaue la fórmula FICO para calcular el puntaje crediticio credit_score = (payment_history *0.35) + (credit_utilization_ratio *0.30) + (number_of_credit_accounts *0.15) + (education_level *0.10) + (employment_status *0.10) credit_scores.append(credit_score)# Agregue los puntajes de crédito como una nueva columna al DataFramedata['Credit Score'] = credit_scoresdata.head()
Age
Gender
Marital Status
Education Level
Employment Status
Credit Utilization Ratio
Payment History
Number of Credit Accounts
Loan Amount
Interest Rate
Loan Term
Type of Loan
Credit Score
0
60
Male
Married
3
1
0.22
2685.0
2
4675000
2.65
48
Personal Loan
940.516
1
25
Male
Married
1
0
0.20
2371.0
9
3619000
5.19
60
Auto Loan
831.360
2
30
Female
Single
3
1
0.22
2771.0
6
957000
2.76
12
Auto Loan
971.216
3
58
Female
Married
4
0
0.12
1371.0
2
4731000
6.57
60
Auto Loan
480.586
4
32
Male
Married
2
2
0.99
828.0
2
3289000
6.28
36
Personal Loan
290.797
A continuación se muestra cómo funciona el código anterior:
En primer lugar, define asignaciones para dos características categóricas: “Nivel de educación” y “Estado laboral”. La asignación de “Nivel de educación” asigna valores numéricos a diferentes niveles de educación, como “Escuela secundaria” asignada a 1, “Licenciatura” a 2, “Maestría” a 3 y “Doctorado” a 4. El “Estado de empleo” el mapeo asigna valores numéricos a diferentes estados laborales, como “desempleado” asignado a 0, “empleado” asigna 1 y “autónomo” a 2.
A continuación, el código aplica las asignaciones definidas a las columnas correspondientes en el DataFrame. Transforma los valores de las columnas “Nivel de educación” y “Estado de empleo” de su forma categórica original a las representaciones numéricas asignadas.
Después de eso, el código inicia una iteración sobre cada fila del DataFrame para calcular las puntuaciones de crédito de cada individuo. Recupera los valores de características relevantes, como “Historial de pagos”, “índice de utilización de crédito”, “Número de cuentas de crédito”, “Nivel de educación” y “Estado de empleo”, de cada fila.
Dentro de la iteración, se aplica la fórmula FICO para calcular el puntaje de crediticio de cada individuo. La fórmula incorpora los valores ponderados de las características mencionadas anteriormente:
Peso del 35% para “Historial de pagos (Payment History)”
Peso del 30% para el “índice de utilización de crédito (Credit Utilization Ratio)”
Peso del 15% para “Número de cuentas de crédito (Number of Credit Accounts)”
10% de peso para “Nivel de educación (Education Level)”
y 10% de ponderación para “Estatus laboral (Employment Status)”
Luego, el puntaje crediticio calculado se almacena en una lista llamada "credit_scores".
Segmentación basada en puntakes crediticios
Ahora, usemos el algoritmo de agrupamiento KMeans para segmentar a los clientes según sus puntajes crediticios.
# Convertir la columna segmento al tipo de datos categoríadata['Segment'] = data['Segment'].astype('category')# Visualiza los segmentos usando Plotlyfig = px.scatter(data, x=data.index, y='Credit Score', color='Segment', color_discrete_sequence=['green', 'blue', 'yellow', 'red'])fig.update_layout( xaxis_title='Indice de clientes', yaxis_title='Credit Score', title='Customer Segmentation based on Credit Scores')fig.show()
Ahora nombremos los segmentos según los grupos anteriores y echemos un vistazo a los segmentos nuevamente:
data['Segment'] = data['Segment'].map({2: 'Muy baja', 0: 'Baja',1: 'Buena',3: "Excelente"})# Convertir la columna segmento al tipo de datos de categoriadata['Segment'] = data['Segment'].astype('category')# Visualiza los segmentos usando Plotlyfig = px.scatter(data, x=data.index, y='Credit Score', color='Segment', color_discrete_sequence=['green', 'blue', 'yellow', 'red'])fig.update_layout( xaxis_title='Customer Index', yaxis_title='Credit Score', title='Customer Segmentation based on Credit Scores')fig.show()
Así es como puede realizar la segmentación y la calificación crediticia utilizando Python.
Resumen
La calificación crediticia y la segmentación se refieren al proceso de evaluar la solvencia de personas o empresas y dividirlos en distintos grupos según sus perfiles crediticios. Su objetivo es evaluar la probabilidad de que los prestatarios paguen sus dedudas y ayuda a las instituciones financieras a tomar decisiones informadas sobre préstamos y gestión del riesgo crediticio.
Espero que te haya gustado este artículo sobre segmentación y calificación crediticia usando Python. No dude en hacer preguntas valiosas en la sección de comentarios a continuación.