Conjuntos de dados que compreendem as melhores práticas

13

Eu sou um estudante de mestrado em mineração de dados. Meu supervisor me disse uma vez que, antes de executar qualquer classificador ou fazer qualquer coisa com um conjunto de dados, preciso entender completamente os dados e garantir que eles estejam limpos e corretos.

Minhas perguntas:

  • Quais são as melhores práticas para entender um conjunto de dados (alta dimensão com atributos numéricos e nominais)?

  • Práticas para garantir que o conjunto de dados esteja limpo?

  • Práticas para garantir que o conjunto de dados não possua valores incorretos ou não?

Jack Twain
fonte

Respostas:

8

Existem coisas básicas que você pode fazer com qualquer conjunto de dados:

  1. Validar valores (tolerância do comprimento da string, tipo de dados, máscaras de formatação, presença de campo obrigatória etc.)
  2. Correção do intervalo (esses dados aparentemente corretos estão dentro dos intervalos de valores esperados)
  3. Processamento preliminar (se eu tentar analisar esses dados, posso executar o básico sem encontrar erros)
  4. Relatório preliminar (execute um relatório em um conjunto de dados e garanta que ele passe em um teste de sanidade)
  5. Definindo nulo vs. vazio vs. zero vs. falso para qualquer coluna de dados
  6. Identificando dados que estão fora do lugar (valores numéricos dramaticamente diferentes de outros valores em um conjunto de dados, valores de sequência que parecem estar com erros de ortografia etc.)
  7. Eliminar ou corrigir dados obviamente errados

Compreender os dados para identificar erros é um jogo totalmente diferente e muito importante.

Por exemplo, você pode ter uma regra que diz que um número de série deve estar presente em um determinado conjunto de dados e esse número de série deve ser alfanumérico, com um comprimento máximo de 255 e um mínimo de 5.

Observando os dados, você pode encontrar um valor específico de número de série com a mensagem "PLEASE ENTER SERIAL" É perfeitamente válido, mas errado.

Isso é óbvio, mas digamos que você esteja processando dados de estoque e tenha uma faixa de preço para 1.000 ações abaixo de um dólar. Muita gente não saberia que um preço das ações tão baixo é inválido em certas bolsas e perfeitamente válido em outras. Você precisa conhecer seus dados para entender se o que está vendo é problemático ou não.

No mundo real, você nem sempre tem o luxo de entender seus dados intimamente.

A maneira como evito problemas é aproveitando as pessoas ao meu redor. Para conjuntos de dados pequenos, posso pedir a alguém para revisar os dados em sua totalidade. Para os grandes, extrair um conjunto de amostras aleatórias e solicitar que alguém faça uma verificação de sanidade dos dados é mais apropriado.

Além disso, é imperativo questionar a fonte dos dados e até que ponto essa fonte de dados pode ser confiável. Costumo ter várias fontes de dados conflitantes e criamos regras para determinar a "fonte da verdade". Às vezes, um conjunto de dados possui ótimos dados em um determinado aspecto, mas outros são mais fortes em outras áreas.

Os dados inseridos manualmente geralmente são os mais céticos, mas em alguns casos são mais fortes do que qualquer coisa que possa ser adquirida através da automação.

Steve Kallestad
fonte
5

Eu gosto muito da resposta do @Kallestad, mas gostaria de adicionar uma meta-etapa: certifique-se de entender como os dados foram coletados e que tipos de restrições existem. Eu acho que é muito comum pensar que não existem etapas não óbvias quando os dados foram coletados, mas este não é o caso: Na maioria das vezes, algum processo ou indivíduo parecia algo com os dados, e essas etapas podem e serão influenciar a forma dos dados.

Dois exemplos: recentemente fiz um estudo em que os dados foram coletados por vários empreiteiros em todo o mundo. Eu não estava no briefing, então isso foi opaco para mim. Infelizmente, as medições foram feitas em algumas partes da França: todas as pessoas gostavam de gelados, mas esperávamos uma distribuição aleatória. Não havia razão óbvia para essa uniformidade, então comecei a caçar os erros. Quando perguntei aos empreiteiros, um tinha entendido mal o briefing e selecionado apenas amantes de sorvete em seu banco de dados.

O segundo erro foi mais desafiador: ao fazer algumas análises geográficas, descobri que muitas pessoas tinham padrões de movimento extremamente grandes, o que sugeria que muitos deles viajavam de Munique para Hamburgo em minutos. Quando falei com pessoas a montante, eles encontraram um bug sutil no software de agregação de dados, que antes era despercebido.

Conclusões:

  • Não assuma que seus dados foram coletados por processos / humanos perfeitos.
  • Tente entender os limites de seus provedores de dados.
  • Observe padrões / valores individuais e tente determinar se eles são lógicos (fácil para movimentação / dados geográficos)
Christian Sauer
fonte
4

Eu costumo adotar uma abordagem em duas etapas

  1. calcule estatísticas de resumo univariadas (variável por variável), como média, intervalo, variância, número de desaparecidos, cardinalidade etc. para cada variável e procure por esquisitices (por exemplo, intervalo não plausível, dado o significado da variável). Traçar histogramas para essas variáveis ​​ímpares.

  2. divida os dados em subconjuntos gerenciáveis ​​(escolha uma variável significativa e divida os dados de acordo com ela, por exemplo, todos os exemplos positivos e todos negativos) e explore-os visualmente (por exemplo, com ggobi ). Use especialmente ferramentas como escovar e espalhar gráficos para entender como as variáveis ​​são vinculadas.

E ao começar a criar modelos, certifique-se de plotar os resíduos, procurando erros extremos que possam ser causados ​​por um erro externo, ou observe a matriz de confusão e verifique se ela está equilibrada. Use a validação cruzada de dobras k para otimizar seus modelos e observe a variação do erro de treinamento para cada dobra; se uma dobra tiver um desempenho muito pior do que as outras, pode conter discrepâncias.

damienfrancois
fonte
4

Abaixo, você pode encontrar uma cópia da minha resposta para uma pergunta relacionada (no entanto, focada no aspecto de limpeza de dados) aqui no Data Science StackExchange ( /datascience//a/722/2452 ), fornecida na íntegra para conveniência dos leitores. Acredito que ele também responda parcialmente à sua pergunta e espero que seja útil. Embora a resposta esteja focada no Recossistema, pacotes e / ou bibliotecas semelhantes podem ser encontrados para outros ambientes de análise de dados . Além disso, enquanto os dois artigos citados sobre preparação de dados também contêm exemplos em R, esses documentos apresentam fluxo de trabalho geral (estrutura) e melhores práticas aplicáveis ​​a qualquer ambiente de análise de dados.

R contém algumas padrão funções para manipulação de dados, que podem ser utilizados para limpeza de dados, na sua base de pacote ( gsub, transform, etc.), bem como em vários pacotes de terceiros, tais como stringr , remodelagem , reshape2 , e plyr . Exemplos e práticas recomendadas de uso para esses pacotes e suas funções são descritos no documento a seguir: http://vita.had.co.nz/papers/tidy-data.pdf .

Além disso, o R oferece alguns pacotes especificamente focados na limpeza e transformação de dados:

Uma abordagem abrangente e coerente à limpeza de dados em R, incluindo exemplos e uso de editrules e pacotes deducorretos , além de uma descrição do fluxo de trabalho ( estrutura ) da limpeza de dados em R, é apresentada no documento a seguir, que eu recomendo: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .

Aleksandr Blekh
fonte
1

Vou acrescentar uma coisa: se possível, faça uma verificação de razoabilidade comparando seus dados com alguma outra fonte. Parece que sempre que deixo de fazer isso, fico queimado :(

JenSCDC
fonte