Proyecto de control de riesgos financieros Combate real: modelo de predicción de pérdidas de tarjetas de crédito bancarias_Basado en la red neuronal ANN_Capacitación financiera_Investigación de tesis_Proyecto de graduación

conocimiento de los negocios

Según los datos publicados por el banco central, la tasa de crecimiento de la emisión combinada de tarjetas de crédito y préstamos de los bancos nacionales ha disminuido año tras año desde el punto más alto del 26,35% de crecimiento interanual en 2017, y el año tras año. tasa de crecimiento anual se ha reducido a 4,26% para 2020. En el contexto de que la tasa de crecimiento de la emisión de tarjetas de crédito bancarias se ha ralentizado significativamente, el problema de prevenir la pérdida de clientes antiguos se ha vuelto cada vez más importante.

Supongamos que un gerente comercial en un banco de tarjetas de crédito para el consumidor se enfrenta a una pérdida de clientes. Los gerentes quieren analizar los datos, averiguar qué hay detrás y utilizar esos datos para predecir los clientes que probablemente abandonarán. Los gerentes también intentan encontrar las características principales de los clientes que abandonan y hacen recomendaciones para reducir la rotación.

estadísticas descriptivas

En este proyecto, construiremos un modelo de red neuronal artificial para predecir la rotación de tarjetas de crédito.

La primera tarea en este problema de negocios es identificar a los clientes que están rotando.

Incluso si predecimos que los clientes que no abandonan lo harán, no perjudica nuestro negocio.

Sin embargo, la predicción de abandonos como no abandonos funciona.

Por lo tanto, la tasa de recuperación (TP/TP+FN) debe ser mayor.

El conjunto de datos consta de 10.000 clientes (entradas),

Mencionaron su edad, salario, estado civil, límite de tarjeta de crédito, tipo de tarjeta de crédito, etc.

Entonces, estos 19 atributos (características) serán nuestra entrada a la red neuronal.

La siguiente figura muestra el análisis de correlación de variables.

La siguiente figura es una visualización de histograma de variables

Aquí hay un diagrama de KDE de los totales de contratos de un año univariados.

Dado que el conjunto de datos se caracteriza por múltiples formatos, en su mayoría cadenas y números enteros, debe prepararse.

Solo el 16,07% de nuestros clientes abandonan los servicios de tarjetas de crédito.

Por lo tanto, tenemos un conjunto de datos desequilibrado.

Para lidiar con este desequilibrio, asignaremos pesos a las dos clases de variables objetivo para equilibrarlas.

Preparamos el conjunto de datos para ANN reemplazando las variables de cadena en la columna de características con números enteros,

También eliminamos la columna "CLIENTNUM" ya que no es una característica que afecte la variable de destino.

#%% Importing Libraries
import matplotlib.pyplot as pltimport pandas as pdimport numpy as npimport seaborn as snsfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScaler, RobustScaler,MinMaxScalerfrom sklearn.metrics import accuracy_score,confusion_matrix,f1_score,matthews_corrcoef,precision_score,recall_scorefrom tensorflow.keras.layers import Densefrom tensorflow.keras.models import Sequentialfrom sklearn.utils import class_weight
#%% Loading the Dataset
df = pd.read_csv('C:/Users/Sahil Bagwe/Desktop/Python/dataset/Bank/BankChurners.csv')df = df.drop(df.columns[21:23],axis=1)df=df.drop('CLIENTNUM',axis=1)  
#%% Preparing the Dataset
df['Gender'].replace('M',1,inplace = True)df['Gender'].replace('F',0,inplace = True) df['Education_Level'].replace('Unknown',0,inplace = True)df['Education_Level'].replace('Uneducated',1,inplace = True)df['Education_Level'].replace('High School',2,inplace = True)df['Education_Level'].replace('College',3,inplace = True)df['Education_Level'].replace('Graduate',4,inplace = True)df['Education_Level'].replace('Post-Graduate',5,inplace = True)df['Education_Level'].replace('Doctorate',6,inplace = True)
df['Marital_Status'].replace('Unknown',0,inplace = True)df['Marital_Status'].replace('Single',1,inplace = True)df['Marital_Status'].replace('Married',2,inplace = True)df['Marital_Status'].replace('Divorced',3,inplace = True)
df['Card_Category'].replace('Blue',0,inplace = True)df['Card_Category'].replace('Gold',1,inplace = True)df['Card_Category'].replace('Silver',2,inplace = True)df['Card_Category'].replace('Platinum',3,inplace = True)

df['Income_Category'].replace('Unknown',0,inplace = True)df['Income_Category'].replace('Less than $40K',1,inplace = True)df['Income_Category'].replace('$40K - $60K',2,inplace = True)df['Income_Category'].replace('$60K - $80K',3,inplace = True)df['Income_Category'].replace('$80K - $120K',4,inplace = True)df['Income_Category'].replace('$120K +',5,inplace = True)
df['Attrition_Flag'].replace('Existing Customer',0,inplace = True)df['Attrition_Flag'].replace('Attrited Customer',1,inplace = True)

Preprocesar el conjunto de datos

Comenzamos esta fase dividiendo el conjunto de datos en una matriz de características (x) y una variable objetivo (y). Dado que los valores de los datos varían mucho, es necesario escalar los valores para normalizar el rango de estos valores. Robust Scaler elimina la mediana y escala los datos de acuerdo con el rango de cuantiles (IQR: Interquartile Range por defecto). IQR es el rango entre el primer cuartil (cuartil 25) y el tercer cuartil (cuartil 75).

Construir una red neuronal artificial

Dado que el conjunto de datos está desequilibrado, debemos asignarle pesos de categoría.

Esto se hace calculando la relación entre los clientes que se han despedido y el número total de clientes.

A continuación, construimos una red neuronal de 3 capas.

La capa de entrada contiene tantas neuronas como columnas hay en la matriz de características.

La capa de salida consta de una capa que predice la salida, es decir, 1 para clientes que se han ido y 0 para clientes existentes.

El número de neuronas en la capa oculta suele ser un valor entre el número de neuronas en las capas de entrada y salida.

Se considera seguro tomar el número de neuronas en la capa oculta como el promedio de las neuronas en las capas de entrada y salida.

#%% Assigning weights to classescw = class_weight.compute_class_weight('balanced', np.unique(Y_train), Y_train)a = y.value_counts()ratio = a[1]/(a[1]+a[0])weights = [ratio, 1-ratio]
#%% Building the Model
model = Sequential()model.add(Dense(19,activation="sigmoid"))model.add(Dense(10,activation="sigmoid"))model.add(Dense(1))model.compile(optimizer='rmsprop',loss = "binary_crossentropy",metrics=["BinaryAccuracy"],loss_weights=weights)

Predecir abandono

Dado que el conjunto de datos está desequilibrado, debemos asignarle pesos de categoría.

Esto se hace calculando la relación entre los clientes que se han despedido y el número total de clientes.

A continuación, construimos una red neuronal de 3 capas.

La capa de entrada contiene tantas neuronas como columnas hay en la matriz de características.

La capa de salida consta de una capa que predice la salida, es decir, 1 para clientes que se han ido y 0 para clientes existentes.

El número de neuronas en la capa oculta suele ser un valor entre el número de neuronas en las capas de entrada y salida.

Se considera seguro tomar el número de neuronas en la capa oculta como el promedio de las neuronas en las capas de entrada y salida.

#%% Predicting history = model.fit(x=X_train,y=Y_train,epochs=100, class_weight = {0:cw[0], 1:cw[1]})predictions = model.predict_classes(X_test)

A través de la verificación del modelo, la tasa de precisión alcanza el 0,89 y la tasa de recuperación alcanza el 0,9, que es un muy buen rendimiento del modelo.

El modelo para predecir pérdidas de tarjetas de crédito bancarias se presentará aquí. Más casos prácticos del "Modelo de cuadro de mando de control de riesgos financieros de Python y análisis de datos (edición mejorada)" se actualizarán regularmente para capacitación bancaria. Escanee el código QR a continuación. Recuerde marcar como favorito el curso.

Declaración de derechos de autor: el artículo proviene de la cuenta oficial (modelo de control de riesgos de Python), sin permiso, sin plagio. Siga el acuerdo de derechos de autor CC 4.0 BY-SA, adjunte el enlace de la fuente original y esta declaración para su reimpresión

Supongo que te gusta

Origin blog.csdn.net/fulk6667g78o8/article/details/131233398
Recomendado
Clasificación