O Naive Bayes é um algoritmo de aprendizado supervisionado baseado no Teorema de Bayes. Ele é amplamente utilizado para filtros de spam, classificação de documentos e análise de risco de crédito.

Teorema de Bayes

P(classe | atributos) = P(atributos | classe) · P(classe) / P(atributos)

Na prática, o algoritmo calcula a probabilidade de uma nova entrada pertencer a cada classe e escolhe a de maior probabilidade.

Premissa “Naive” (ingênua)

Assume que os atributos são condicionalmente independentes entre si, dada a classe. Isso simplifica os cálculos, embora raramente seja verdadeiro na realidade — mesmo assim, o classificador costuma funcionar bem.

Correção Laplaciana

Quando uma combinação de atributos nunca apareceu no treino, a probabilidade resulta em zero e o modelo falha. A correção de Laplace adiciona um registro fictício à base para evitar probabilidades nulas.

GaussianNB (Scikit-learn)

Na disciplina, utiliza-se a classe GaussianNB, que assume distribuição Gaussiana (normal) dos atributos numéricos.

MétodoFunção
fit(X, Y)Gera a tabela de probabilidades a partir do treino.
predict(X)Classifica novas entradas.
accuracy_scoreCompara previsões com os valores reais.

Talk is cheap, show me the code: Bases utilizadas nesta aula (disponíveis no Google Drive): risco_credito.csv · credito.pkl · creditoSE.pkl

Roteiro para a aula de Aprendizado Bayesiano
1 – Executar a importação das bibliotecas (pode ser no mesmo arquivo da semana passada):

#biblioteca para gerar gráficos dinâmicos
!pip install plotly --upgrade
#pandas é uma biblioteca que trabalha com a importação de arquivos .csv
import pandas as pd
#numpy é uma biblioteca para a realização de operações em arrays
import numpy as np
#seaborn é uma biblioteca para vizualização de gráficos
import seaborn as sb
#matplotlib é também uma biblioteca para a geração de gráficos
import matplotlib.pyplot as plt
import plotly.express as px

2 - Colocar a base de dados 'risco_credito.csv' dentro da pasta do Colab Notebooks e fazer o import da base:

base_risco_credito = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/risco_credito.csv')

3 - Realizar o pré-processamento da base

#pré-processamento
X_risco_credito = base_risco_credito.iloc[:,0:4].values

Y_risco_credito = base_risco_credito.iloc[:,4].values

#transformar de categórico para numérico
from sklearn.preprocessing import LabelEncoder
label_encoder_historia = LabelEncoder()
label_encoder_divida = LabelEncoder()
label_encoder_garantia = LabelEncoder()
label_encoder_renda = LabelEncoder()

X_risco_credito[:, 0] = label_encoder_historia.fit_transform(X_risco_credito[:, 0])
X_risco_credito[:, 1] = label_encoder_divida.fit_transform(X_risco_credito[:, 1])
X_risco_credito[:, 2] = label_encoder_garantia.fit_transform(X_risco_credito[:, 2])
X_risco_credito[:, 3] = label_encoder_renda.fit_transform(X_risco_credito[:, 3])

4 - Salvar a base no drive:

import pickle
with open('risco_credito.pkl', 'wb') as f:
  pickle.dump([X_risco_credito, Y_risco_credito], f)

Jogue para o drive o arquivo risco_credito.pkl

5 - Algoritmo Naive Bayes

from sklearn.naive_bayes import GaussianNB # importa a classe para trabalhar com o aprendizado bayesiano
naive_risco_credito = GaussianNB()
naive_risco_credito.fit(X_risco_credito, Y_risco_credito) # faz o treinamento e gera a tabela de probabilidade

#gerar previsao
#historio = Boa (0), divida = Alta (0), garantia nenhuma (1), renda > 35 (2)
#historio = ruim (2), divida = alta (0), garantia = adequada (0), renda < 15 (0)
previsao = naive_risco_credito.predict([[0, 0, 1, 2],[2, 0, 0, 0]]) # a função não retorna a probabilidade


==================================================base de dados credit_data========================================================
1 - Importar o arquivo .pkl salvo na aula aterior (quem não tiver, pegar o enviado pelo professor)
import pickle
with open('/content/drive/MyDrive/Colab Notebooks/credito.pkl', 'rb') as f:
  X_credito_treinamento, Y_credito_treinamento, X_credito_teste, Y_credito_teste = pickle.load(f)

2 - Criar a variável naive_bayes_credito para receber a classe GaussianNB
naive_dados_credito = GaussianNB()
naive_dados_credito.fit(X_credito_treinamento, Y_credito_treinamento) # faz os dados de treinamento com a classe de treinamento salva

3 - Fazer a previsão com base nos dados de testes

previsao = naive_dados_credito.predict(X_credito_teste)  # função predict faz a predição dos valores que estão na variável X_credito_teste

4- Fazer a seguinte importação:

from sklearn.metrics import accuracy_score #faz a comparação entre o que o algoritmo previu e o que a classe teste possui
accuracy_score(Y_credito_teste, previsao)

5 - Outra forma de comparação - Matriz de confusão
from sklearn.metrics import confusion_matrix
confusion_matrix(Y_credito_teste, previsao)

6 - Outra visualização
from yellowbrick.classifier import ConfusionMatrix


from sklearn.metrics import classification_report

print(classification_report(Y_credito_teste, previsao))


==================================================base de dados credit_data SEM escalonar ========================================================
1 - Importar o arquivo .pkl salvo na aula aterior (quem não tiver, pegar o enviado pelo professor)
import pickle
with open('/content/drive/MyDrive/Colab Notebooks/creditoSE.pkl', 'rb') as f:
  X_credito_treinamentoSE, Y_credito_treinamentoSE, X_credito_testeSE, Y_credito_testeSE = pickle.load(f)

2 - Criar a variável naive_bayes_credito para receber a classe GaussianNB
naive_dados_creditoSE = GaussianNB()
naive_dados_creditoSE.fit(X_credito_treinamentoSE, Y_credito_treinamentoSE) # faz os dados de treinamento com a classe de treinamento salva

3 - Fazer a previsão com base nos dados de testes

previsaoSE = naive_dados_creditoSE.predict(X_credito_testeSE)  # função predict faz a predição dos valores que estão na variável X_credito_teste

4- Fazer a seguinte importação:

from sklearn.metrics import accuracy_score #faz a comparação entre o que o algoritmo previu e o que a classe teste possui
accuracy_score(Y_credito_testeSE, previsaoSE)

5 - Outra forma de comparação - Matriz de confusão
from sklearn.metrics import confusion_matrix
confusion_matrix(Y_credito_testeSE, previsaoSE)