O que fazer quando faltam dados?
Mágicas para tapar buracos no seu dataset
Podemos dividir, de forma bastante grosseira, qualquer tipo de dado em duas categorias: temporais e atemporais. Dados atemporais são bastante comuns nos datasets mais utilizados nos tutoriais de ciência de dados: as características dos sobreviventes do Titanic, os tamanhos de pétalas de flores ou as características de um tumor. Estes, podem ter dados temporais, como o momento em que o usuário tomou uma determinada atitude, mas o dado temporal é uma característica secundária, não sua essência.
Os dados temporais, por outro lado, foram criados em um momento de extrema importância. Exemplos clássicos são as variações cambiais ao longo de um dia ou o tráfego de usuários por hora.
Quando tratamos um dado atemporal que tem dados ausentes, normalmente vemos explicações de que o mais simples é remover as linhas que têm falta de dados. Isso porque muitos algoritmos não conseguem fazer análises com dados ausentes e, na maioria dos casos, eles são abundantes o suficiente para que a remoção de algumas linhas tenha pouca influência.
No entanto, quando falamos de dados temporais, a remoção de um dado pode ser bastante problemática. Os dados precisam de cadência, padrão, especialmente se formos fazer análises de frequência. Então, quais são as alternativas? Esse texto é justamente para ilustrar algumas dessas alternativas :)
Todos os gráficos e códigos usados nesse texto estão disponíveis nesse notebook.
Nossa série temporal
Vamos pegar a série abaixo para analisar. Temos um dado bastante simples que possui uma forma senoidal. Sabemos, de antemão, que esse dado não sofre variações bruscas e que ele deve ser recebido em intervalos regulares. Podemos ver, então, que o nono elemento foi perdido e esse é o dado em que vamos focar as análises.
O dado original está apresentado em vermelho:
Substituição pela média
Uma alternativa viável é substituir pela média da série temporal inteira. Podemos verificar o resultado disto no gráfico abaixo:
Parece estranho, né? E é mesmo! Como conhecemos o padrão do dado essa alternativa parece bastante estranha, de fato. No entanto, esse método pode ser bastante útil dependendo do caso, uma vez que a média do conjunto todo permanece a mesma.
No entanto, fique atento! Não é porque o valor da média do conjunto não foi alterado que as características estatísticas permanecem intactas. Como estamos adicionando um ou mais dados perto da média, o desvio padrão da série tende a cair. Veja:
Interpolação
A interpolação é um método matemático que ajusta uma função ao seu dado e usa essa função para extrapolar os dados que faltam. A interpolação mais simples que existe é a linear, que faz uma média entre os valores anterior e posterior do dado ausente.
Como nosso dado não é uma curva, temos uma diferença entre o dado real e o interpolado. No entanto, como temos uma forma bem conhecida e que sabemos que o nosso fenômeno não tem alterações bruscas, essa interpolação é bastante satisfatória e resolve o nosso problema.
Claro que poderíamos ter um padrão mais complexo onde a interpolação linear não seria o ideal. Apesar de ter mostrado um só tipo, existem muitos tipos diferentes de interpolação, cada um para uma realidade diferente. E pra provar que eu não estou mentindo, essas são as opções de tipos de interpolação disponíveis em séries do Pandas: ‘linear’, ‘time’, ‘index’, ‘values’, ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘krogh’, ‘polynomial’, ‘spline’, ‘piecewise_polynomial’, ‘from_derivatives’, ‘pchip’, ‘akima’.
Haja opção hein!
Interpolação de dados sem padrão conhecido
Uma coisa que é imprescindível dizer é que nem todos os sinais temporais tem um padrão bem claro. Vamos analisar uma segunda série temporal.
No caso dessa série, não conhecemos o padrão e não temos como prever com certeza o ponto que foi perdido, e não é possível dizer que houve uma baixa. Sendo assim, a interpolação linear não faz muito sentido, porque o padrão entre pontos não é claramente linear.
É aí que o preenchimento pela média da série parece fazer mais sentido. Isso porque nenhum dado vai representar de fato o ponto perdido, mas a média faz com que a série passe a ser contínua sem alterar a média da série inteira. Dependendo do tipo de análise que você precisa fazer com os dados, isso pode ser exatamente o que você procura.
No nosso caso, o dado perdido e a média têm valores bem próximos, mas isso nem sempre é o caso. Agora visualize: o que aconteceria se o ponto ausente fosse o pico da série?
Substituição por outros dados
Outra opção é substituir os dados pelos dados próximos. Podemos substituir, por exemplo, pelo dado anterior. Essa técnica é chamada de Forward Fill porque ele propaga os dados existentes pra frente.
Da mesma forma, podemos usar a técnica de substituir pelo dado posterior. Como estamos propagando os dados de trás pra frente, esse método também é chamado de Backward Fill:
Mas qual usar?
Difícil dizer. Se seu dado tem um padrão conhecido, provavelmente algum tipo de interpolação pode ser útil, mas se o padrão é desconhecido, recomendo avaliar bem que tipo de análises você pretende fazer antes de escolher o melhor pra você :)
Referências legais
Missing value given the mean — Khan Academy
Principled missing data methods for researchers
Missing Data & How to Deal: An overview of missing data
A review of missing values handling methods on time-series data
Finalmente
E é isso aí pessoal! Esse foi mais um post em parceria com o Data Bootcamp. Saiba tudo sobre o calendário de turmas no site www.databootcamp.com.br
Nos cursos do Data, você aprende isso e muito mais, se capacita e se torna apto para encarar o mercado de trabalho de cabeça. Nas aulas, os instrutores levam desafios do dia a dia deles para deixar o treinamento dinâmico e único.
Também não deixe de ouvir o Pizza de Dados para saber mais sobre novas tendências da área de ciência de dados, veja várias dicas sobre essa área no Guia do Cientista de Dados da Galáxia e fique ligado(a) também no meu site, que contém vários posts como esse :)