Como lidar com valores faltantes (missing)?
Um dos problemas mais comuns que podemos enfrentar na limpeza e exploração de dados é lidar com os valores ausentes. Em primeiro lugar, entenda que NÃO há uma boa maneira de lidar com dados faltantes. Eu encontrei diferentes soluções para imputação de dados dependendo do tipo de problema – Análise de séries temporais, ML, Regressão etc. e é difícil fornecer uma solução geral. Vamos aqui então resumir os métodos mais usados e tentar encontrar uma solução estrutural. Imputação vs Remoção de Dados Antes de saltar para os métodos de imputação de dados, temos que entender o motivo pelo qual os dados desaparecem. Missing at Random (MAR): Faltar dados aleatoriamente significa que a propensão para um ponto de dados estar ausente não está relacionada aos dados ausentes, mas está relacionada a alguns dos dados observados. Missing Completely at Random (MCAR): O fato de que um certo valor está faltando não tem nada a ver com seu valor hipotético e com os valores de outras variáveis. Missing not at Random (MNAR): Duas razões possíveis são que o valor ausente depende do valor hipotético (por exemplo, pessoas com salários altos geralmente não querem revelar suas rendas em pesquisas) ou o valor ausente depende do valor de alguma outra variável (por exemplo Vamos supor que as mulheres geralmente não querem revelar suas idades! Aqui, o valor em falta na variável age é impactado pela variável gender) Nos dois primeiros casos, é seguro remover os dados com valores ausentes dependendo de suas ocorrências, enquanto no terceiro caso, remover observações com valores ausentes pode produzir um viés no modelo. Portanto, temos que ter muito cuidado antes de remover as observações. Observe que a imputação não fornece necessariamente melhores resultados. Eliminação Listwise Listwise deletion (análise de caso completo) remove todos os dados de uma observação que tenha um ou mais valores ausentes. Particularmente, se os dados faltantes forem limitados a um pequeno número de observações, você pode optar por eliminar esses casos da análise. No entanto, na maioria dos casos, muitas vezes é desvantajoso usar a exclusão Listwise. Isso ocorre porque as suposições do MCAR (Missing Completely at Random) são geralmente raras de serem suportadas. Como resultado, os métodos de exclusão de lista produzem parâmetros e estimativas com viés. # No R novos_dados <- na.omit(dados) # No python dados.dropna(inplace=True) Pairwise A exclusão por pares (Pairwise deletion) analisa todos os casos em que as variáveis de interesse estão presentes e, assim, maximiza todos os dados disponíveis por uma base de análise. Uma força para essa técnica é que ela aumenta o poder em sua análise, mas tem muitas desvantagens. Ele assume que os dados ausentes são MCAR. Se você excluir pairwise, você acabará com um número diferente de observações contribuindo para diferentes partes do seu modelo, o que pode dificultar a interpretação. #Pairwise Deletion ncovMatrix <- cov(mydata, use=”pairwise.complete.obs”) #Listwise Deletion ncovMatrix <- cov(mydata, use=”complete.obs”) Variáveis Descartáveis Na minha opinião, é sempre melhor manter os dados do que descartá-los. Às vezes, você pode eliminar variáveis se os dados estiverem faltando para mais de 60% de observações, mas apenas se essa variável for insignificante. Dito isto, a imputação é sempre uma escolha preferida em vez de descartar variáveis df <- subconjunto (mydata, select = -c (x, z)) df <- mydata [-c (1,3: 4)] Em python del mydata.column_name mydata.drop(‘column_name’, axis=1, inplace=True) Métodos Específicos de Séries Temporais Última observação realizada (LOCF) e próxima observação levada para trás (NOCB) Esta é uma abordagem estatística comum para a análise de dados longitudinais de medidas repetidas, onde algumas observações de acompanhamento podem estar faltando. Dados longitudinais rastreiam a mesma amostra em diferentes pontos no tempo. Ambos os métodos podem introduzir um viés na análise e um desempenho ruim quando os dados têm uma tendência visível Interpolação linear Esse método funciona bem para uma série temporal com alguma tendência, mas não é adequado para dados sazonais Ajuste Sazonal + Interpolação Linear Esse método funciona bem para dados com tendência e sazonalidade library(imputeTS) na.random(mydata) # Random Imputation na.locf(mydata, option = “locf”) # Last Obs. Carried Forward na.locf(mydata, option = “nocb”) # Next Obs. Carried Backward na.interpolation(mydata) # Linear Interpolation na.seadec(mydata, algorithm = “interpolation”) # Seasonal Adjustment then Linear Interpolation Média, Mediana e Moda O cálculo da média geral, mediana ou moda é um método de imputação muito básico, é a única função testada que não aproveita as características da série temporal ou a relação entre as variáveis. É muito rápido, mas tem desvantagens claras. Uma desvantagem é que a imputação média reduz a variação no conjunto de dados library(imputeTS) na.mean(mydata, option = “mean”) # Mean Imputation na.mean(mydata, option = “median”) # Median Imputation na.mean(mydata, option = “mode”) # Mode Imputation In Python from sklearn.preprocessing import Imputer values = mydata.values imputer = Imputer(missing_values=’NaN’, strategy=’mean’) transformed_values = imputer.fit_transform(values) # strategy can be changed to “median” and “most_frequent” Regressão linear Para começar, vários preditores da variável com valores omissos são identificados usando uma matriz de correlação. Os melhores preditores são selecionados e utilizados como variáveis independentes em uma equação de regressão. A variável com dados perdidos é usada como a variável dependente. Casos com dados completos para as variáveis preditoras são usados para gerar a equação de regressão; a equação é então usada para prever valores ausentes para casos incompletos. Em um processo iterativo, os valores da variável ausente são inseridos e, em seguida, todos os casos são usados para prever a variável dependente. Essas etapas são repetidas até que haja pouca diferença entre os valores previstos de um passo para o próximo, ou seja, eles convergem. Ele “teoricamente” fornece boas estimativas para valores ausentes. No entanto, existem várias desvantagens desse modelo que tendem a superar as vantagens. Primeiro, porque os valores substituídos foram preditos a partir de outras variáveis, eles tendem a se encaixar “muito bem” e, portanto, o erro padrão é esvaziado. Deve-se também assumir que existe uma relação linear entre as variáveis usadas na equação de regressão quando pode não haver uma. Imputação Múltipla Imputação : Impute as entradas ausentes dos conjuntos de dados incompletos m vezes ( m = 3 na figura). Observe que os valores imputados são extraídos de uma distribuição. A simulação de sorteios aleatórios não inclui a incerteza nos parâmetros do modelo. Melhor abordagem é usar a
Como lidar com valores faltantes (missing)? Read More »