-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.py
148 lines (117 loc) · 5.72 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#Importação das bibliotecas
import streamlit as st
import pandas as pd
from sklearn.model_selection import train_test_split
from utils import DropFeatures, OneHotEncodingNames, OrdinalFeature, MinMaxWithFeatNames
from sklearn.pipeline import Pipeline
import joblib
from joblib import load
#carregando os dados
dados = pd.read_csv('https://raw.githubusercontent.com/alura-tech/alura-tech-pos-data-science-credit-scoring-streamlit/main/df_clean.csv')
############################# Streamlit ############################
st.markdown('<style>div[role="listbox"] ul{background-color: #6e42ad}; </style>', unsafe_allow_html=True)
st.markdown("<h1 style='text-align: center; '> Formulário para Solicitação de Cartão de Crédito 🤑</h1>", unsafe_allow_html = True)
st.warning('Preencha o formulário com todos os seus dados pessoais e clique no botão **ENVIAR** no final da página.')
# Idade
st.write('### Idade')
input_idade = float(st.slider('Selecione a sua idade', 18, 100))
# Grau de escolaridade
st.write('### Nível de escolaridade')
input_grau_escolaridade = st.selectbox('Qual o Grau de Escolaridade ?', dados['Grau_escolaridade'].unique())
# Estado civil
st.write('### Estado civil')
input_estado_civil = st.selectbox('Qual é o seu estado civil ?', dados['Estado_civil'].unique())
# Número de membros da família
st.write('### Família')
membros_familia = float(st.slider('Selecione quantos membros tem na sua família', 1, 20))
# Carro próprio
st.write('### Carro próprio')
input_carro_proprio = st.radio('Você possui um automóvel?',['Sim','Não'], index=0)
input_carro_proprio_dict = {'Sim': 1, 'Não':0}
input_carro_proprio = input_carro_proprio_dict.get(input_carro_proprio)
# Casa própria
st.write('### Casa própria')
input_casa_propria = st.radio('Você possui uma propriedade?',['Sim','Não'], index=0)
input_casa_propria_dict = {'Sim': 1, 'Não':0}
input_casa_propria = input_casa_propria_dict.get(input_casa_propria)
# Moradia
st.write('### Tipo de residência')
input_tipo_moradia = st.selectbox('Qual é o seu tipo de moradia ?', dados['Moradia'].unique())
# Situação de emprego
st.write('### Categoria de renda')
input_categoria_renda = st.selectbox('Qual é a sua categoria de renda ?', dados['Categoria_de_renda'].unique())
# Ocupação
st.write('### Ocupação')
input_ocupacao = st.selectbox('Qual é a sua ocupação ?', dados['Ocupacao'].unique())
# Tempo de experiência
st.write('### Experiência')
input_tempo_experiencia = float(st.slider('Selecione o seu tempo de experiência em anos', 0,30))
# Rendimentos
st.write('### Rendimentos')
input_rendimentos = float(st.text_input('Digite o seu rendimento anual (em reais) e pressione ENTER para confirmar',0))
# Telefone trabalho
st.write('### Telefone corporativo')
input_telefone_trabalho = st.radio('Você tem um telefone corporativo?',['Sim','Não'], index=0)
telefone_trabalho_dict = {'Sim': 1, 'Não':0}
telefone_trabalho = telefone_trabalho_dict.get(input_telefone_trabalho)
# Telefone fixo
st.write('### Telefone fixo')
input_telefone = st.radio('Você tem um telefone fixo?',['Sim','Não'], index=0)
telefone_dict = {'Sim': 1, 'Não':0}
telefone = telefone_dict.get(input_telefone)
# Email
st.write('### Email')
input_email = st.radio('Você tem um email?',['Sim','Não'], index=0)
email_dict = {'Sim': 1, 'Não':0}
email = email_dict.get(input_email)
# Lista de todas as variáveis:
novo_cliente = [0, # ID_Cliente
input_carro_proprio, # Tem_carro
input_casa_propria, # Tem_Casa_Propria
telefone_trabalho, # Tem_telefone_trabalho
telefone, # Tem_telefone_fixo
email, # Tem_email
membros_familia, # Tamanho_Familia
input_rendimentos, # Rendimento_anual
input_idade, # Idade
input_tempo_experiencia, # Anos_empregado
input_categoria_renda, # Categoria_de_renda
input_grau_escolaridade, # Grau_Escolaridade
input_estado_civil, # Estado_Civil
input_tipo_moradia, # Moradia
input_ocupacao, # Ocupacao
0 # target (Mau)
]
# Separando os dados em treino e teste
def data_split(df, test_size):
SEED = 1561651
treino_df, teste_df = train_test_split(df, test_size=test_size, random_state=SEED)
return treino_df.reset_index(drop=True), teste_df.reset_index(drop=True)
treino_df, teste_df = data_split(dados, 0.2)
#Criando novo cliente
cliente_predict_df = pd.DataFrame([novo_cliente],columns=teste_df.columns)
#Concatenando novo cliente ao dataframe dos dados de teste
teste_novo_cliente = pd.concat([teste_df,cliente_predict_df],ignore_index=True)
#Pipeline
def pipeline_teste(df):
pipeline = Pipeline([
('feature_dropper', DropFeatures()),
('OneHotEncoding', OneHotEncodingNames()),
('ordinal_feature', OrdinalFeature()),
('min_max_scaler', MinMaxWithFeatNames()),
])
df_pipeline = pipeline.fit_transform(df)
return df_pipeline
#Aplicando a pipeline
teste_novo_cliente = pipeline_teste(teste_novo_cliente)
#retirando a coluna target
cliente_pred = teste_novo_cliente.drop(['Mau'], axis=1)
#Predições
if st.button('Enviar'):
model = joblib.load('modelo/xgb.joblib')
final_pred = model.predict(cliente_pred)
if final_pred[-1] == 0:
st.success('### Parabéns! Você teve o cartão de crédito aprovado')
st.balloons()
else:
st.error('### Infelizmente, não podemos liberar crédito para você agora!')