# importando a biblioteca pandas do python
import pandas as pd
# atribuindo ao "dataframe" todos os registros da base de dados
dataframe = pd.read_csv("risco_credito.csv", encoding = "utf-8", sep = ",")
# visualizando a base de dados
dataframe
historia | divida | garantias | renda | risco | |
---|---|---|---|---|---|
0 | ruim | alta | nenhuma | 0_15 | alto |
1 | desconhecida | alta | nenhuma | 15_35 | alto |
2 | desconhecida | baixa | nenhuma | 15_35 | moderado |
3 | desconhecida | baixa | nenhuma | acima_35 | alto |
4 | desconhecida | baixa | nenhuma | acima_35 | baixo |
5 | desconhecida | baixa | adequada | acima_35 | baixo |
6 | ruim | baixa | nenhuma | 0_15 | alto |
7 | ruim | baixa | adequada | acima_35 | moderado |
8 | boa | baixa | nenhuma | acima_35 | baixo |
9 | boa | alta | adequada | acima_35 | baixo |
10 | boa | alta | nenhuma | 0_15 | alto |
11 | boa | alta | nenhuma | 15_35 | moderado |
12 | boa | alta | nenhuma | acima_35 | baixo |
13 | ruim | alta | nenhuma | 15_35 | alto |
# separando os atributos previsores do meta classe
previsores = dataframe.iloc[:, 0:4].values
meta_classe = dataframe.iloc[:, 4].values
# visualizando os atributos previsores
print(previsores)
[['ruim' 'alta' 'nenhuma' '0_15'] ['desconhecida' 'alta' 'nenhuma' '15_35'] ['desconhecida' 'baixa' 'nenhuma' '15_35'] ['desconhecida' 'baixa' 'nenhuma' 'acima_35'] ['desconhecida' 'baixa' 'nenhuma' 'acima_35'] ['desconhecida' 'baixa' 'adequada' 'acima_35'] ['ruim' 'baixa' 'nenhuma' '0_15'] ['ruim' 'baixa' 'adequada' 'acima_35'] ['boa' 'baixa' 'nenhuma' 'acima_35'] ['boa' 'alta' 'adequada' 'acima_35'] ['boa' 'alta' 'nenhuma' '0_15'] ['boa' 'alta' 'nenhuma' '15_35'] ['boa' 'alta' 'nenhuma' 'acima_35'] ['ruim' 'alta' 'nenhuma' '15_35']]
# visualizando os atributos meta classe
print(meta_classe)
['alto' 'alto' 'moderado' 'alto' 'baixo' 'baixo' 'alto' 'moderado' 'baixo' 'baixo' 'alto' 'moderado' 'baixo' 'alto']
# importando a biblioteca sklearn do python
from sklearn.preprocessing import LabelEncoder
# definindo e configurando o objeto "labelencoder"
labelencoder = LabelEncoder()
# transformando as variáveis categóricas em numéricas, nos previsores, usando o objeto "labelencoder"
# criado
previsores[:, 0] = labelencoder.fit_transform(previsores[:, 0])
previsores[:, 1] = labelencoder.fit_transform(previsores[:, 1])
previsores[:, 2] = labelencoder.fit_transform(previsores[:, 2])
previsores[:, 3] = labelencoder.fit_transform(previsores[:, 3])
# visualizando os atributos previsores
print(previsores)
[[2 0 1 0] [1 0 1 1] [1 1 1 1] [1 1 1 2] [1 1 1 2] [1 1 0 2] [2 1 1 0] [2 1 0 2] [0 1 1 2] [0 0 0 2] [0 0 1 0] [0 0 1 1] [0 0 1 2] [2 0 1 1]]
# importando a biblioteca sklearn do python
from sklearn.tree import DecisionTreeClassifier
# configurando e definindo o objeto "classificador"
classificador = DecisionTreeClassifier(criterion = "entropy")
# fazendo o treinamento com a base de dados no objeto criado "classificador". Nele, será criado a árvore de
# decisão
classificador.fit(previsores, meta_classe)
DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='entropy', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort='deprecated', random_state=None, splitter='best')
# observando o resultando de ganho para cada um dos campos de dados. O maior valor tem mais relevância na
# hierárquia da árvore de decisão
print(classificador.feature_importances_)
[0.48015651 0.03885431 0.03885431 0.44213486]
Valor de ganho na hierárquia da árvore de decisões |
---|
1 - Renda |
2 - História |
3 - Dívida |
4 - Garantias |
# importando a biblioteca sklearn do python
from sklearn.tree import DecisionTreeClassifier, export
# criando o arquivo "arvore.dot" com códigos renderizáveis no Graphviz
export.export_graphviz(classificador, out_file = 'arvore.dot',
feature_names = ['história', 'dívidas', 'garantia', 'renda'],
class_names = ['alto', 'moderado', 'baixo'],
filled = True, leaves_parallel = True)
Cliente com Baixo Risco |
---|
História de Crédito: Boa (0) |
Dívida: Alta (0) |
Garantias: Nenhuma (1) |
Renda: >35 (2) |
Cliente de Alto Risco |
---|
História de Crédito: Ruim (2) |
Dívida: Alta (0) |
Garantias: Adequada (0) |
Renda: <15 (0) |
# avaliando o noss algoritmo para os dois cliente com os registros acima
resultado = classificador.predict([[0,0,1,2], [2,0,0,0]])
# observando so resultados para os dois cliente acima
print(resultado)
['baixo' 'alto']
# observando as classes do objeto "classificador"
print(classificador.classes_)
['alto' 'baixo' 'moderado']
# função para análise de riscos em empréstimos
def risco_creditos(historia, divida, garantia, renda):
if(historia == "boa"):
historia = 0
elif(historia == "ruim"):
historia = 2
elif(historia == "desconhecida"):
historia = 1
if(divida == "alta"):
divida = 0
elif(divida == "baixa"):
divida = 1
if(garantia == "adequada"):
garantia = 1
elif(garantia == "nenhuma"):
garantia = 0
if(renda == "0_15"):
renda = 0
elif(renda == "15_35"):
renda = 1
elif(renda == "acima_35"):
renda = 2
retorno = classificador.predict([[historia, divida, garantia, renda]])
print("Risco de Empréstimo: {}".format(retorno))
return
# usando a função criada para fazer a predição do primeiro usuário
risco_creditos(historia = "boa", divida = "alta", garantia = "nenhuma", renda = "acima_35")
Risco de Empréstimo: ['baixo']
# usando a função criada para fazer a predição do segundo usuário
risco_creditos(historia = "ruim", divida = "alta", garantia = "adequada", renda = "0_15")
Risco de Empréstimo: ['alto']