Você viu os meus dados? O que são dados ausentes e como tratá-los

Jéssica Ramos
gsgcommunity
Published in
8 min readMay 18, 2021

Antes de começar, algumas semanas atrás estive no YouTube do GSG falando um pouco sobre dados ausentes e como tratá-los. Esse texto é uma versão escrita (e melhorada!) dos mesmos pontos passados na palestra, que pode ser acessada aqui.

Agora sigamos!

Para quem trabalha com analytics, dados ausentes não são nenhuma novidade. Eles aparecem (ou não!) em todos os lugares e geralmente ligados a informações que são muito importantes para a análise principal.

Nesse blog post eu gostaria te apresentar os principais conceitos associados a dados ausentes e ferramentas para tratá-los.

O que são dados ausentes? E por quê preciso tratá-los?

Quando falamos de dados ausentes, falamos de informações de variáveis que deveriam ter sido observadas, mas não foram. Portanto, o termo exclui casos em que um questionário tem um salto automático de questões, por exemplo, para evitar perguntar o cargo de um indivíduo que já respondeu que não trabalha.

A ausência em si pode ter causas variadas: a variável pode se tratar de um tema sensível, como renda, históricos de doenças, entre outras; pode também ter existido algum tipo de falha sistêmica que não carregou os dados adequadamente na base de dados; ou uma falha na transcrição de questionários de papel para uma base estruturada, etc.

Um argumento muito forte para o tratamento de dados ausentes é que muitos algoritmos de aprendizado de máquina, por exemplo, não lidam com dados ausentes. Mas existem razões ainda mais fortes: a ausência do dado pode estar fortemente correlacionada com outras variáveis na base de dados, inclusive a resposta estudada. Portanto, o tratamento correto desses dados é fundamental para o bom desempenho das ferramentas estatísticas.

O que são os mecanismos de perda?

Os mecanismos de perda descrevem o processo pelo qual a perda ocorreu. Identificar corretamente o mecanismo de perda em cada variável do banco de dados vai nos guiar a qual método de tratamento utilizar.

Podemos classificar o mecanismo de perda em 3 categorias:

Perda Completamente Aleatória (PCA)

Também conhecida como Missing Completely At Random (MCAR), a PCA ocorre quando a probabilidade de perda não depende das variáveis presentes no estudo. Ou seja, a chance de uma observação qualquer no banco estar ausente é uniforme e constante.

Esse tipo de perda pode acontecer no exemplo do erro de processamento sistêmico. Se o erro gera ausências em instâncias completamente aleatórias na base de dados, temos o mecanismo PCA.

Nesse caso, eliminar as linhas com dados ausentes não cria nenhum viés nas estimativas da variável. É como se tivéssemos obtido uma amostra aleatória menor da mesma população e a capacidade de extrapolação da amostra são mantidas.

É uma solução bem simples e, como a Lei de Murphy nunca falha, esse mecanismo é bem raro.

Perda Aleatória (PA)

Esse mecanismo também é conhecido como Missing At Random (MAR). Nesse cenário, a probabilidade da perda está relacionada a outras variáveis no estudo, mas não com a própria variável em que a perda ocorreu.

Por exemplo, suponha que estamos estudando a temperatura em diversas cidades do Brasil. Se em certa região geográfica, digamos a região de Cuiabá-MT, os termômetros falharem com mais frequência, teremos dados ausentes dessa região. Dado que Cuiabá é uma das cidades mais quentes do Brasil, ao calcular a temperatura média de todas as localidades observadas na amostra, estaremos subestimando a verdadeira média.

Você pode até pensar: mas essa perda não tem nenhuma relação com o valor da variável mesmo? Não tem! Se os termômetros falhassem com mais frequências em todas as localidades com temperatura mais alta, aí sim teríamos uma perda que depende do valor da própria variável.

Esse tipo de perda é bem mais comum e existem várias maneiras de tratar (e falaremos disso em breve).

Perda Não Aleatória (PNA)

Conhecida também como Missing Not At Random (MNAR), na PNA a probabilidade da perda está relacionada aos valores da própria variável com dados ausentes. Como exemplo, em um questionário que tem perguntas sócio-econômicas, pessoas de alta renda podem tender a não informar a própria renda.

Aqui a consequência é bem direta: se as pessoas de alta renda não informam o dado, nossas estimativas de renda média dos respondentes estarão subestimando a média real.

Já adianto que esse é um tipo de perda bem difícil de tratar. Mas como identificá-la?

Como sei qual o mecanismo de perda na minha variável?

Na PNA, o próprio diagnóstico é bem difícil. Uma maneira é tentar recuperar parte dos dados perdidos. No caso do questionário, poderíamos tentar entrar em contato com os respondentes que não informaram a renda e recuperar o dado. É bem provável que a muitos ainda se recusem a informar, mas podemos conseguir recuperar uma parte.

Se as respostas recuperadas tiverem uma distribuição muito diferente das observações que conseguimos no primeiro momento (digamos que a média das recuperadas é 5k enquanto a média das demais observações é 2k), temos um indício de PNA.

Então qual a solução? É tentar recuperar o máximo de dado possível e, se ainda houver dados ausentes, deixar bem claro no relatório de análise as limitações da extrapolação. Lembrando que limitações existem em todo estudo/análise. O importante é deixar isso claro para quem vai consumir a informação.

Mas e PA e PCA?

Quando a possibilidade de PNA é descartada, podemos fazer testes estatísticos para testar se existe diferença na proporção de dados ausentes nas regiões geográficas.

No exemplo da medição de temperatura, poderíamos ter 40% de dados ausentes em cidades do Centro-Oeste e apenas 1% de dados ausentes em cidades do Sul. Esse é um indício de PA. E em casos em que a diferença não é tão óbvia, podemos usar testes de proporção, de média, etc.

Caso não encontre diferenças significativas, provavelmente o mecanismo é de PCA, e podemos seguir apenas eliminando os indivíduos com dados ausentes da análise.

Beleza, identifiquei o mecanismo. Quais são os tratamentos possíveis?

A imputação é o processo de preencher o dado ausente com alguma informação. Existem dois grandes grupos de métodos: imputação simples e múltipla. Na imputação simples substituímos cada dado ausente por um único valor ou categoria. Seguem algumas possibilidades de imputação simples:

1. Valor/Categoria Fixo

A maneira mais simples é definir um valor ou categoria fixo, dentre o leque de opções já existentes da variável. Essa solução é simples, mas exige bastante conhecimento do problema e da população estudada. Escolhendo um valor inadequado, estaremos inserindo viés nas estimativas, o que nunca é bom.

2. Criar uma categoria nova

Para variáveis categóricas é possível criar uma nova categoria que representa os dados ausentes, como “Não informado” ou “Não respondeu”. É simples, fácil, e a informação da ausência é mantida nos dados. Porém, a informação original é completamente perdida.

3. Usar uma medida de tendência

Essa é uma das soluções mais comuns no mundo do aprendizado de máquina. Aqui, calculamos a média dos dados que foram de fato observados e imputamos esse valor para todas as observações ausentes. Além da média, podemos usar também a mediana ou a moda.

Lembrando que se o mecanismo de perda for PA, essa média contém viés (superestima ou subestima a média real). Nesse caso, estaremos apenas reproduzindo o viés para os dados ausentes. Portanto, a imputação pela média é adequada apenas no caso de PCA. Essa você não sabia né? Pois é.

OBS.: No vídeo da palestra eu explico com exemplos o efeito do uso da média em cenários PCA e PA. Se não ficou claro pra você, sugiro ir lá assistir. :)

4. k-Nearest Neighbors e outros modelos supervisionados

Outra maneira um pouco mais sofisticada é utilizar modelos preditivos supervisionados para encontrar o valor mais provável em cada observação ausente. Dessa forma, estou fazendo um “chute” mais assertivo do valor real.

Basta separar os casos completos do banco, treinar o modelo supervisionado escolhido (pode ser o kNN, por exemplo) sendo a variável com dados ausentes a variável resposta e as demais variáveis do banco explicativas.

Uma discussão importante aqui: Algumas pessoas preferem remover a variável resposta do estudo das variáveis explicativas da imputação, pensando que podem criar associação artificial entre a variável imputada e a resposta do estudo. Porém, essa estratégia pode estar diminuindo a eficiência do modelo de predição. Tem uma breve discussão sobre isso no contexto de imputação múltipla aqui.

Bônus: Variável de apoio

Essa estratégia pode ser utilizada de forma combinada com estratégias anteriores. Além de escolher um método de imputação para a variável X, também posso criar uma variável de apoio Z, que será uma variável binária que identifica se o dado da variável X é original (Z=0) ou foi imputado (Z=1). Essa informação pode ser útil para as análises feitas no banco de dados, como ajuste de modelos.

Ok, aprendi vários métodos de Imputação Simples. Mas o que é a Imputação Múltipla?

A Imputação Múltipla (IM) é um método proposto por Donald B. Rubin e popularizado por Joseph L. Schafer, e consiste basicamente em imputar múltiplos valores para cada observação ausente. O raciocínio aqui é muito parecido com o uso de modelos preditivos em imputação simples.

O algoritmo, de forma resumida, é o seguinte:

  1. Define a variável X que terá valores imputados.
  2. Seleciona as variáveis Z que serão utilizadas no processo de imputação. Só podem ser incluídas como explicativas as variáveis completas, ou seja, que não tem nenhuma observação ausente. Podem ser incluídas variáveis que já foram imputadas num passo anterior.
  3. Avalia a distribuição de X para as observações com valores idênticos em Z, ou seja, a distribuição preditiva de X condicionada às variáveis em Z.
  4. Substituir cada valor ausente por m valores aleatoriamente amostrados da distribuição condicional encontrada no passo anterior.

Ao fim desse processo, terei m valores distintos de X para cada observação ausente, ou seja, m bancos completos diferentes. A partir daqui, posso seguir minha análise original, ajustando um modelo em cada um dos m bancos de dados e combinando os resultados por meio de pooling.

Quando faço a imputação de m valores ao invés de um único, tenho a possibilidade de avaliar o nível de incerteza sobre o valor imputado. Se existe muita certeza sobre o valor, veremos pouca variabilidade entre os m valores amostrados, e vice-versa. No caso do ajuste do modelo de regressão, podemos avaliar também a variabilidade nos parâmetros estimados.

O valor de m não precisa ser muito grande para que a IM tenha bons resultados. A maioria dos problemas terá resultados satisfatórios com m ≤ 10 (ou mesmo muito menores).

E quando devo usar a IM?

A Imputação Múltipla costuma ter resultados muito bons quando o mecanismo de perda é PA. Também pode ser utilizada no caso de PCA, porém nesse caso o custo do processamento versus o ganho na análise final pode não valer a pena.

Quero usar IM. Onde posso fazer?

O pacote mais completo para IM é o mice do R. A documentação do pacote pode ser encontrada aqui.

Para os usuários de Python, o sklearn tem um estimador experimental e inspirado no mice. Mais informações aqui.

Pra fechar…

Antes de finalizar, quero destacar alguns pontos muito importantes:

  1. Antes de tentar imputar dados, sempre avalie recuperar o dado original. Dado original é sempre melhor que estimativa do dado.
  2. É muito importante avaliar os mecanismos de perda no banco de dados. Alguns problemas tem soluções mais simples do que IM. Não complique as coisas sem necessidade!
  3. O percentual da variável que está ausente tem bastante influência na eficiência dos métodos. Quando um percentual alto (>25%) da amostra está ausente, os resultados dos métodos para mecanismos PA perdem muita performance.
  4. Outra coisa que influencia muito a qualidade do resultado é o número de observações total da base. Quanto mais dado, melhor.

Espero ter te ajudado com esse texto. Eu aprendi muito sobre imputação com as referências que fui deixando ao longo do texto e existe bastante informação sobre o assunto na internet (majoritariamente em inglês).

Caso esteja procurando mais conteúdos sobre análise de dados e aprendizado de máquina, você pode me encontrar no LinkedIn ou no Twitter.

Lave as mãos, use máscara e, se puder, fique em casa e tome vacina!

--

--

Jéssica Ramos
gsgcommunity

Statistician & Data Scientist interested in data visualization, machine learning, artificial intelligence, and computer vision.