Blog

Postado em em 31 de outubro de 2022

Datasets Desbalanceados – O que São e Como Trabalhar com Eles?

Você sabe o que é são datasets desbalanceados? Sabe como você pode trabalhar com eles para não ignorar informações importantes?

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Trabalhando com Datasets Desbalanceados

Você sabe o que são datasets desbalanceados? Sabe como trabalhar com eles da forma correta?

Nessa aula eu vou te mostrar o que são as bases de dados desbalanceadas e como trabalhar com um dataset desbalanceado para que consiga fazer suas análises sem problemas!

Como trabalhar com Datasets Desbalanceados

O que é um dataset desbalanceado? Imagine que dentro da sua base de dados, você tenha uma quantidade muito grande de informações de uma classe, só que na outra classe você tem uma quantidade muito pequena.

Ainda não entendeu? Imagine que você tenha uma base de fraudes. Você vai concordar comigo que a quantidade de transações que são normais é muito maior do que quantidade de transações que de fato são fraudes não é mesmo?

Isso vale para uma base de saúde, onde a maioria dos pacientes não vai ter uma determinada doença, só uma quantidade muito pequena vai ter essa doença.

Só que nesses casos o nosso foco está justamente nessas poucas informações, que apesar de poucas são muito importantes.

Quando estamos trabalhando com esse tipo de dado temos que tomar MUITO CUIDADO, pois se estivermos avaliando apenas o percentual de acerto do modelo isso pode ser um problema.

Imagine que o seu modelo classifique todas as transações de um banco como não fraude. Esse modelo vai ter um percentual de acerto muito grande, só que o nosso foco principal é justamente verificar essas fraudes.

Então o que é fraude, foi classificado como uma transação comum e não conseguimos identificar isso de forma correta.

Nesse caso o nosso modelo pode acertar muito, mas não cumpre seu objetivo, que é exatamente verificar quais são as transações fraudulentas.

Vou deixar como sugestão uma aula de Avaliação de Modelo de Classificação caso você tenha alguma dúvida em relação as métricas que utilizamos e os termos!

Vamos então dar início ao nosso aprendizado de máquinas em dataset desbalanceado. Aqui vamos utilizar o dataset disponível no Kaggle no link abaixo:

https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud

Importando e visualizando a base de dados
Importando e visualizando a base de dados

Nesses primeiros blocos de código vamos importar o pandas, que vamos utilizar para nossas análises, vamos ler a nossa base de dados e vamos visualizá-la dentro do Jupyter.

Você deve ter notado que as colunas estão nomeadas como V1, V2… Isso é para garantir que as informações fiquem anônimas.

Mas no final da base você vai notar que temos a coluna Amount, que significa o valor da transação e a coluna Class que vai indicar se temos uma fraude (1) ou uma transação comum (0).

Então mesmo com as informações anônimas, nós temos essas duas informações que vão ser úteis para fazer a nossa classificação.

No gráfico de pizza você deve ter percebido que 99,83% das transações são comuns, ou seja, apenas 0,17% são fraudes.

Por isso temos que tomar cuidado com o nosso modelo, pois como a quantidade de fraude é quase nula o nosso modelo pode acabar ignorando essas informações. E não é isso que queremos!

Contagem dos dados
Contagem dos dados

Para ver melhor esses números fizemos a contagem dos valores, onde o 0 representa uma transação comum e o número 1 representa uma fraude.

Então temos 284.315 transações comuns para apenas 492 fraudes dentro dessa base de dados, mas você vai concordar que não vai querer deixar passar nenhuma delas dentro do seu modelo, não é mesmo?

Vamos começar! Devemos inicialmente separar os dados em treino e teste usando o train test split.

Separando a base de dados em treino e teste e verificando as proporções
Separando a base de dados em treino e teste e verificando as proporções

Aqui fizemos a separação dos dados para que possamos utilizar uma base para o treino e outra base para o teste do nosso modelo.

Além disso, verificamos a proporção dos dados nas duas bases e você pode notar que temos a mesma quantidade para que o teste seja feito da forma correta.

OBS: Para manter essa proporção tanto na base de treino quanto na base de teste é possível utilizar o parâmetro straitfy. Essa informação também está no link do train test split!

Agora vamos partir para a criação de um modelo utilizando Regressão Logística.

Utilizando a regressão logística
Utilizando a regressão logística

E então vamos avaliar o modelo.

Avaliando o modelo
Avaliando o modelo

Vamos começar com a acurácia do modelo. Só que você vai notar que a acurácia em datasets desbalanceados, geralmente é muito alta.

Mas isso não representa a qualidade do nosso modelo nesse caso, pois o nosso foco é justamente nas informações com menos registros.

Então para resolver essa questão utilizamos a matriz de confusão e o recall score.

OBS: Além da página do scikit learn, nós temos uma publicação que fala mais detalhadamente sobre a matriz de confusão para que você entenda melhor como as análises são feitas. Para isso basta clicar aqui.

Geralmente nós testamos mais de um algoritmo para verificar qual deles funciona melhor. Nesse caso não será diferente, vamos testar também a árvore de decisão.

Datasets Desbalanceados
Utilizando a árvore de classificação

Pelo recall nós conseguimos verificar que o segundo modelo consegue encontrar 74% das fraudes, que já é bem maior do que os 58% do primeiro modelo.

Então é importante que você saiba o que são cada uma dessas análises para não informar que o seu modelo com 0,99 de acurácia encontra as fraudes em 99% dos casos.

Agora que já sabemos como trabalhar com esses dados e já entendemos isso tudo, vamos para a parte importante, que é o balanceamento do dataset.

Datasets Desbalanceados
Balanceando o dataset

Nós podemos fazer o balanceamento de duas formas, ou diminuindo a classe majoritária ou aumentando a classe minoritária.

Eu vou mostrar apenas um dos casos nessa aula para não fica muito grande, mas o outro você pode visualizar no arquivo que está disponível para download.

Não se preocupe, pois a análise é a mesma, a única diferente é que um nós vamos fazer o undersampling e na outra o oversampling!

Então vamos ao exemplo reduzindo os registros da classe majoritária, mas vamos fazer isso excluindo os registros de forma aleatória com o RandomUnderSampler.

OBS: Lembrando que para esse passo vamos instalar a biblioteca imbalanced-Learn.

Datasets Desbalanceados
Balanceando os dados pelo RandomUnderSampler

Aqui vamos importar a biblioteca e definir o RandomUnderSampler. Em seguida vamos aplicar para x e y e por fim vamos visualizar os dados.

Aqui você já nota que agora temos a mesma quantidade de informações, ou seja, a mesma quantidade de transações normais e transações fraudulentas.

Datasets Desbalanceados
Analisando e comparando os resultados

Feito isso podemos utilizar novamente a regressão logística e a árvore de decisão para verificar se tivemos uma melhora.

Para a regressão logística usando o undersample passamos de um recall de 58% para 88%, então já tivemos uma melhora significativa.

Já no uso da árvore de decisão passamos de um recall de 74% para 90%. Também uma melhora significativa.

Conclusão

Nessa aula eu te mostrei como trabalhar com datasets desbalanceados da forma correta para que você não pense que uma acurácia de 99% nesses casos é um bom modelo.

É importante analisar outras métricas e depois até balancear o dataset para que possa obter melhores resultados.

Pois em datasets desbalanceados as informações mais importantes são as que temos em quantidade mínima, então precisamos analisá-las melhor e não as ignorar!

Lembrando que a segunda análise está no arquivo disponível para download, então você pode verificar quais foram os resultados e pode fazer suas alterações, colocar outros algoritmos para verificar se encontra melhores modelos!

Hashtag Treinamentos

Para acessar outras publicações de Ciência de Dados, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero em Excel e virar uma referência na sua empresa? Matricule-se agora mesmo no Excel Impressionador!