Projeto de Controle de Riscos Financeiros Combate Real - Modelo de Previsão de Perda de Cartão de Crédito Bancário_Baseado em Rede Neural ANN_Treinamento Financeiro_Pesquisa de Tese_Projeto de Graduação

fundo de negócios

De acordo com os dados divulgados pelo banco central, a taxa de crescimento da emissão combinada de cartões de crédito e empréstimos dos bancos nacionais diminuiu ano a ano, desde o ponto alto de 26,35% de crescimento ano a ano em 2017, e o crescimento ano a ano taxa de crescimento anual caiu para 4,26% até 2020. Tendo em vista que a taxa de crescimento da emissão de cartões de crédito bancário diminuiu significativamente, o problema de evitar a perda de clientes antigos tornou-se cada vez mais importante.

Suponha que um gerente de negócios em um banco de cartão de crédito ao consumidor esteja enfrentando rotatividade de clientes. Os gerentes querem analisar os dados, descobrir o que está por trás deles e usar esses dados para prever os clientes que provavelmente desistirão. Os gerentes também procuram encontrar as principais características dos clientes churn e fazem recomendações para reduzir o churn.

estatísticas descritivas

Neste projeto, construiremos um modelo de rede neural artificial para prever a rotatividade de cartões de crédito.

A primeira tarefa neste problema de negócios é identificar os clientes que estão mudando.

Mesmo que prevejamos clientes não churn como churn, isso não prejudica nossos negócios.

No entanto, prever os churners como não churners resolve o problema.

Portanto, a taxa de rechamada (TP/TP+FN) precisa ser maior.

O conjunto de dados consiste em 10.000 clientes (entradas),

Mencionaram idade, salário, estado civil, limite do cartão de crédito, tipo de cartão de crédito, etc.

Portanto, esses 19 atributos (recursos) serão nossa entrada na rede neural.

A figura abaixo mostra a análise de correlação de variáveis

A figura a seguir é uma visualização de histograma de variáveis

Aqui está um gráfico do KDE dos totais univariados de contrato de um ano.

Como o conjunto de dados é caracterizado por vários formatos; principalmente strings e inteiros, ele precisa ser preparado.

Apenas 16,07% dos nossos clientes abandonam os serviços de cartão de crédito.

Portanto, temos um conjunto de dados desbalanceado.

Para lidar com esse desequilíbrio, atribuiremos pesos às duas classes de variáveis-alvo para torná-las equilibradas.

Preparamos o conjunto de dados para a ANN substituindo as variáveis ​​de string na coluna de recursos por números inteiros,

Também removemos a coluna "CLIENTNUM", pois não é um recurso que afeta a variável 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)

Pré-processar o conjunto de dados

Iniciamos esta fase dividindo o conjunto de dados em uma matriz de recursos (x) e uma variável de destino (y). Como os valores dos dados variam muito, é necessário escalonar os valores para normalizar a faixa desses valores. O Robust Scaler remove a mediana e dimensiona os dados de acordo com o intervalo quantil (IQR: intervalo interquartil por padrão). IQR é o intervalo entre o primeiro quartil (25º quantil) e o terceiro quartil (75º quantil).

Construir uma rede neural artificial

Como o conjunto de dados é desbalanceado, precisamos atribuir pesos de categoria a ele.

Isso é feito calculando a proporção de clientes cancelados em relação ao número total de clientes.

Em seguida, construímos uma rede neural de 3 camadas.

A camada de entrada contém tantos neurônios quantas colunas na matriz de recursos.

A camada de saída consiste em uma camada que prevê a saída, ou seja, 1 para clientes com rotatividade e 0 para clientes existentes.

O número de neurônios na camada oculta geralmente é um valor entre o número de neurônios nas camadas de entrada e saída.

É considerado seguro tomar o número de neurônios na camada oculta como a média dos neurônios nas camadas de entrada e saída.

#%% 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)

Prever Churn

Como o conjunto de dados é desbalanceado, precisamos atribuir pesos de categoria a ele.

Isso é feito calculando a proporção de clientes cancelados em relação ao número total de clientes.

Em seguida, construímos uma rede neural de 3 camadas.

A camada de entrada contém tantos neurônios quantas colunas na matriz de recursos.

A camada de saída consiste em uma camada que prevê a saída, ou seja, 1 para clientes com rotatividade e 0 para clientes existentes.

O número de neurônios na camada oculta geralmente é um valor entre o número de neurônios nas camadas de entrada e saída.

É considerado seguro tomar o número de neurônios na camada oculta como a média dos neurônios nas camadas de entrada e saída.

#%% 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)

Por meio da verificação do modelo, a taxa de precisão chega a 0,89 e a taxa de rechamada chega a 0,9, o que é um desempenho de modelo muito bom.

O modelo para prever a perda do cartão de crédito bancário será apresentado aqui. Mais casos práticos de "Python Financial Risk Control Scorecard Model and Data Analysis (Enhanced Edition)" serão atualizados regularmente para treinamento bancário. Por favor, escaneie o código QR abaixo. Lembre-se de marcar como favorito o curso.

Declaração de direitos autorais: o artigo vem da conta oficial (modelo de controle de risco python), sem permissão, sem plágio. Siga o contrato de direitos autorais CC 4.0 BY-SA, anexe o link da fonte original e esta declaração para reimpressão

Acho que você gosta

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