Você está na página 1de 15

https://medium.

com/turing-
talks/dados-desbalanceados-o-
que-s%C3%A3o-e-como-evit
%C3%A1-los-43df4f49732b

Dados Desbalanceados — O que


são e como lidar com eles

Escrito por
Felipe Azank
e
Gustavo Korzune Gurgel

from Eduardo Sánchez


De acordo com os últimos levantamentos, atualmente nós
humanos produzimos mais de 2,5 quintilhões de bytes de
dados todos os dias. Apesar de parecer assustador, uma vez
que esse número é aproximadamente 100 mil vezes o número de
células de um corpo humano, esse fato levanta a possibilidade de
analisarmos e estudarmos cada vez mais dados e aspectos da
vida humana. Contudo, não é incomum, em nossas idas e vindas
no mundo dos dados, nos deparamos com datasets que
demonstram categorias muito mais frequentes que as demais e
que prejudicam nossas previsões e modelos.

Tendo isso em vista, hoje conheceremos em detalhe sobre esse


tipo de dataset, além de sua identificação, seus problemas e
como evitar que esse fenômeno prejudique o seu modelo e suas
previsões. Hoje vamos falar de Dados Desbalanceados.

Para isso, seguiremos a seguinte estrutura:

1. Definição

2. Problemas ocasionados

3. Ressalvas

4. Lidando com Dados Desbalanceados

5. Conclusão

Definição
Exemplo de Dados Desbalanceados: Vinho Bom e Ruim

Dados Desbalanceados podem ser definidos pela pequena


incidência de uma categoria dentro de um dataset (classe
minoritária) em comparação com as demais categorias (classes
majoritárias). Na maioria dos casos, isso faz com que tenhamos
muitas informações a respeito das categorias mais incidentes, e
menos das minoritárias, o que pode, em muito casos, interferir
no workflow padrão de um Cientista de Dados.

O desbalanceamento nos dados mostra-se presente em diversos


setores e campos do conhecimento, não sendo incomum
encontrarmos eles regularmente e em contextos variados. Como
em dados de diagnóstico e prognostico de câncer, em que a
maioria das pessoas que realizam o experimento apresentam um
resultado negativo; fraudes de pagamento, as quais costumam
ocorrer em menor incidência do que não-fraudes; e até em sua
caixa de spam, na qual a maioria dos e-mails são legítimos.
Problemas ocasionados

Contudo, mesmo sendo bem presentes no cotidiano de um


cientista de dados, se não lidados de alguma maneira, dados
desbalanceados podem acarretar em problemas na construção
de modelos e na geração de previsões.

Se desenvolvermos um modelo sem considerar essa


desproporcionalidade nos dados, o modelo será vítima
do Paradoxo da Acurácia (explicado no último Turing Talk),
em que os parâmetros do algoritmo não diferenciarão a classe
minoritária das demais categorias, acreditando que estão
agregando resultado devido à aparente alta acurácia.

Essa falta de diferenciação pode ocasionar problemas sérios,


uma vez que a identificação desses casos minoritários podem ser
o cerne do desafio a ser resolvido. Vamos usar como exemplo o
caso citado acima: Se nosso modelo não diferencia com sucesso
os diagnósticos positivos para câncer, classificando-os como
casos negativos (classe majoritária), estaríamos mandando
pacientes com câncer para casa, o que apenas agregaria
prejuízos.

Ressalvas
Apesar de seu potencial destrutivo na criação de modelos, os
dados desbalanceados nem sempre mostram-se tão nocivos em
determinadas áreas da Ciência de Dados. Segue portanto,
algumas ressalvas que podemos levantar sobre os dados
desbalanceados:

Para análise de dados, dados desbalanceados nem


sempre são um problema

Antes de montarmos qualquer modelo, explorar os dados e


buscar insights lógicos a respeito dos dados que temos é sempre
importante (quando se não, o a tarefa principal). Em muitos
casos, o fato de estarmos trabalhando com dados
desbalanceados durante a análise nem sempre trás prejuízos aos
seus insights uma vez que algumas conclusões não necessitam
de uma quantidade elevada (porém suficiente) de dados.
Ademais, é de se perceber que, em muitos casos, descobrir o
“porquê” do desbalanceamento pode trazer informações válidas
para a resolução do problema.

Com classes muito diferentes, lidar com o


desbalanceamento é desnecessário

Outra ressalva importante e destacar se relaciona com a


diferença entre as categorias majoritária e minoritária: em
alguns casos sua diferença é tão grande que alguns modelos
conseguem distinguir as classes mesmo com uma quantidade
pequena de dados.

Um exemplo simples que retrata esse cenário seria na criação de


um modelo que diferencia humanos e girafas com base na
altura, mesmo com poucos humanos no dataset, a maioria dos
modelos captará a grande diferença de altura entre as espécies.

Porém, para trabalhar da melhor forma com os dados e eliminar


as incertezas, lidar com os dados desbalanceados de alguma
maneira sempre é a melhor escolha a se fazer.

Lidando com Dados Desbalanceados

Após essa introdução e apresentação dos problemas causados


pelos Dados Desbalanceados, vamos agora estudar algumas das
formas mais comuns que existem para resolver esse empecilho.

1-Reestruturação dos Dados


Uma forma de tirar o viés causado pela diferença de proporção
das categorias consiste em manipular a quantidade de dados que
são efetivamente utilizados pelo modelo de Machine Learning,
tentando igualar o número de observações entre as classes.

1.1-Undersampling

Esse método consiste em reduzir o número de observações da


classe majoritária para diminuir a diferença entre as categorias.

Há duas formas de realizar o Undersampling:

 Random Undersampling, que consiste na retirada


aleatória de dados da classe majoritária (o que
acarreta em uma perda grave de informação), ou;

 Utilizar métodos para “unir” duas ou mais


observações de classes majoritárias em apenas uma,
o que acarreta em uma menor perda de informação.
Entre os métodos de fusão de dados mais famosos,
podemos encontrar os algoritmos clássicos de
clusterização, algoritmos de k-NN (K-Nearest
Neighbors Algorithm), NearMiss, entre outros.

A implementação básica desses métodos podem ser encontradas


na biblioteca imbalanced-learn, com aplicações que podem ser
vistas a seguir.

É importante ressaltar que independentemente do método


usado para o Undersampling a frequência dos dados acaba igual,
mas a distribuição deles é diferente, e isso é o que se reflete na
performance do modelo. Segue a frequência dos dados após o
Undersampling.

1.2-Oversampling

Ao contrário do Undersampling, o Oversampling consiste em


criar sinteticamente novas observações da classe minoritária,
com o objetivo de igualar a proporção das categorias.

A maneira mais primitiva de fazer um Oversampling é por meio


de cópias de dados já existentes na classe minoritária. Por
exemplo, se nossos dados possuem três parâmetros (x, y e z) o
Oversampling poderia ser feito escolhendo algumas entries e
simplesmente duplicando o número de vezes que
essas entries aparecem. A conduta descrita acima pode oferecer
bons resultados quando a classe minoritária não tem uma
variação quantitativa muito grande nos seus parâmetros, caso
contrário o modelo pode ficar muito bom em identificar casos
específicos da classe minoritária e não a categoria como um
todo.

1.2.1-SMOTE

Com o objetivo de resolver o problema acima, foi proposta uma


técnica mais sofisticada conhecida como SMOTE. A ideia por
trás dela consiste em criar observações intermediárias entre
dados parecidos, ou seja, se no dataset existem 2 pessoas, uma
com altura 1,80 m e pesando 78 kg, a outra com 1,82 m e
pesando 79 kg; o algoritmo do SMOTE adiciona uma “pessoa”
intermediária medindo 1,81 m e pesando 78,3 kg. Vale notar que
o SMOTE não seleciona necessariamente a média entre
ambas as informações preexistentes.

Veja abaixo a implementação desses dois métodos.

Concluindo, enquanto o Random Oversampling simula a


existência de casos específicos e aleatório da classe minoritária,
o SMOTE tenta simular a classe minoritária como um todo. Tal
diferente de implementação gera um aumento na performance
do modelo como ainda será demostrado neste texto.

Segue o gráfico da frequência dos dados após o Oversampling:


2-Escolher um algoritmo mais resistente

Existem diversos algoritmos de classificação, todos com suas


peculiaridades, fraquezas e vantagens. Em tratar-se de Dados
Desbalanceados, há algoritmos mais robustos e que agregam
mais resultado no modelo do que outros. Modelos
como Gradient Boosting, por exemplo, demonstram um
desempenho melhor lidando com dados desbalanceados do que
modelos como o KNN e SVM.

Para decidir que algoritmo usar e qual é mais robusto para


determinada situação, é sempre bom conhecer um pouco sobre a
parte parte teórica de cada um deles. Por sorte, temos
uma coleção de Turing Talks que tratam em detalhe sobre os
principais.

3-Coletar mais dados


Fonte: https://media.tenor.com/images/
c5701d1e88f1f9750823a9bcda559127/tenor.gif

Se você se encontra em uma situação em que é de fato possível


coletar mais dados da classe minoritária, não deixe de fazê-lo.
Pode não ser o método mais fácil, mas com certeza é o mais
eficaz para atingir o balanceamento.

Entretanto, é de extrema importância utilizar essa técnica


apenas em situações que os dados a serem adicionados são
similares o suficiente com a sua base inicial. Haja vista que
dados distintos podem prejudicar os parâmetros do modelo.

Um exemplo simples do uso correto e incorreto desse método


pode ser visto em um hipotético estudo de altura entre homens e
mulheres da cidade de São Paulo (média: 162,0 cm). Se, na
tentativa de aumentar a quantidade de dados referentes à
mulheres, você adicionasse mais alturas de garotas da cidade de
Campinas (média: 161,8 cm), esses dados apresentariam uma
alta probabilidade de serem semelhantes em relação à sua
distribuição. Entretanto, se, no lugar de garotas de Campinas,
você adicionasse alturas referentes a mulheres da Grécia (média:
169,1 cm), talvez esses dados não ajudariam o modelo a atingir
resultados melhores.

4-Usar modelos Penalizados (diferentes funções de


custo)

Fonte: https://media.tenor.com/images/
fec7c019d5aeed88a77628d545065a48/tenor.gif

Usualmente, os modelos de Machine Learning, enquanto


atualizam seus parâmetros na base de treino, penalizam erros de
classificação da mesma forma para todas as classes, isto é,
classificar A como B ou B como A será penalizado da mesma
maneira pela função de custo.

Para que seja possível fazer um modelo mais resistente aos


Dados Desbalanceados, adicionar uma penalidade maior para
erros de classificação da categoria minoritária faz com que o
algoritmo “tome mais cuidado” em errar essa classe. Dessa
forma, teremos um modelo que evitará entregar resultados que
ignorem as categorias com menores observações.

5-Utilizar outras métricas para o Treino

Como padrão para a maioria dos modelos “clássicos” de


Machine Learning, a métrica utilizada para treino dos
parâmetros é a acurácia, contudo, com, como vimos
anteriormente, problemas com Dados Desbalanceados
costumam ser vítimas do Paradoxo da Acurácia.

Uma maneira que visa resolver isso consiste em alterar a


acurácia como métrica de treino, substituindo-a por outra mais
estratégica para que seu modelo tenha parâmetros que “tome
mais cuidado” em errar a classe minoritária, assim como o
método anterior de mudança da função de custo.

6-Utilizar as métricas corretas de avaliação

Por fim, assim como a construção de qualquer modelo de


Machine Learning, verificar o desempenho de seu modelo com
diferentes métricas pode te ajudar a encontrar eventuais
problemas com Dados Desbalanceados, assim como verificar
posteriormente se o modelo efetivamente soluciona esses
problemas.

Caso ainda não tenha visto, não deixe de consultar nosso Turing
Talks sobre as métricas de avaliação para problemas
de Classificação e Regressão.

Como foi comentado no Turing Talks de métricas de avaliação,


as métricas clássicas não são um meio confiável de avaliar um
modelo treinado em dados desbalanceado.

Implementando os intens 4,5 e 6

As práticas descritas nos itens 4,5 e 6 são muito


interdependentes e quando se deseja implementá-las é possível
adicionar muita substância ao modelo com algumas poucas
funções da bilbioteca scikit-learn. O uso dos parâmetros
corretos nas funções é de suma importante para isso. Veja a
implementação abaixo, e os resultados que ela gera:

O mais interessante de ser visto no código acima é que o manejo


correto de dados desbalanceados pode resultar em melhorias
muito expressivas na qualidade de predições. Perceba que em
todos os casos os dados foram treinados com o mesmo modelo
(SVM), mas após o resampling a performance do modelo nas
métricas escolhidas cresceu fortemente.

Conclusão

Dados Desbalanceados estão por toda parte e podem causar


inúmeros problemas na sua jornada como Cientista de Dados se
não forem levados em consideração. Portanto, saber como lidar
com eles e como melhorar o seu modelo perante essa
adversidade torna-se uma ferramenta muito útil.

Esperamos que você tenha gostado e muito obrigado por chegar


até aqui. Se quiserem conhecer um pouco mais sobre o que
fazemos no Grupo Turing, não deixem de nos seguir nas redes
sociais: Facebook, Instagram, LinkedIn e, claro, acompanhar
nossos posts no Medium. Para acompanhar também um pouco
de nosso projetos, acesse nosso GitHub.

Até a próxima!
1.2K
1.2K
Sign up for Turing Talks
By Turing Talks
Acompanhe os artigos semanais do Turing Talks! Aprenda de
maneira simples como funciona Inteligência Artificial e como
criar seus próprios algoritmos. Take a look.
Get this newsletter
Emails will be sent to prof.dourival.junior@gmail.com.Not you?

More from Turing Talks


Follow
Inteligência Artificial para todos

Felipe Azank

·Sep 23, 2020

Você também pode gostar