Sanity Check — Análise de Sanidade dos Dados para Projetos de Machine Learning na OLX Brasil

Uma breve introdução sobre boas práticas de sanidade dos dados que a equipe de ciência de dados da OLX Brasil adota nos projetos internos.

Ane Almoaia
Grupo OLX Tech
Published in
5 min readOct 11, 2022

--

A análise de sanidade dos dados é um teste simples que pode ser aplicado nos dados como forma de validar se a informação trazida por ele é de fato verdadeira. Por lidarmos com uma quantidade imensa de dados nos projetos de ciência de dados na OLX Brasil, é impossível analisarmos linha a linha para verificar se todos os dados estão corretos e trazendo de fato a informação que deveria, principalmente quando estamos em produção onde os fluxos são automatizados. Por esta razão é necessário fazermos uso de ferramentas e métodos para nos auxiliar a identificar tais situações que podem comprometer a performance do modelo.

A importância de monitorar

Uma dúvida bem comum é o quanto essa etapa se difere do processo de monitoramento de modelos em produção (que é abordado aqui). A diferença essencial entre as duas análises é que a análise de sanidade feita durante a captura dos dados é responsável por identificar a presença de um dado incorreto em seu conceito, enquanto o monitoramento analisa se a distribuição dos dados sofreu alguma modificação com o tempo podendo ocasionar uma degradação do modelo. A etapa de monitoramento parte da premissa de que os dados estão corretos e limpos, enquanto a análise de sanidade é responsável pela limpeza desses dados, ou seja, é quem garante as premissas que a etapa de monitoramento precisa.

Durante a etapa de desenvolvimento, a análise de sanidade é convencionalmente feita após a extração dos dados e antes da etapa de análise exploratória de dados (EDA) como forma de identificar o que precisa ser limpo. Já durante a etapa de produção, essa análise é incorporada após a extração e antes da etapa de construção de atributos (feature engineering), sendo a cargo do cientista responsável decidir pela limpeza ou substituição dos dados incorretos ou um impedimento de continuar o processo de predição.

Checks que podem ser feitos:

  • Presença de dados nulos (lembrando que dependendo da situação é possível que a existência de dados nulos faça sentido e esteja correta)
  • Presença de dados incoerentes. Por exemplo, um dado de CPF precisa ter necessariamente 11 dígitos. Caso tenha menos ou mais do que isso, é um dado incoerente.
  • Averiguar se os dados estão dentro de limites aceitáveis. Por exemplo, no Brasil não se registra temperatura abaixo de -10 graus e acima de 60 graus
  • Quantidade de registros muito acima da média dos últimos dias. Por exemplo, em uma extração diária se tem em média 1 milhão de registros de um determinado evento, e de uma hora para outra você passa a receber 700 mil ou 1,5 milhão de registros, isso indica que alguma coisa aconteceu no seu processo de extração e que esse dado pode não ser confiável.
  • Averiguar se os dados categóricos são coerentes. Por exemplo, um dado que informa se o anúncio pertence a categoria de carros pode conter 3 possíveis valores: SIM; NAO; NULL. Se esse dado passa a conter valores como MOTO, o seu modelo não está preparado para identificar essa nova classe neste dado.
  • Campos com datas possuem datas coerentes. Por exemplo, dia 30 de fevereiro não existe, então este preenchimento está incorreto.

Nos tópicos acima, ficou implícito que o cientista de dados precisa conhecer muito bem os tipos de dados que está lidando para conseguir avaliar se um determinado comportamento é de fato esperado ou um erro. Por isso, a etapa de análise de sanidade juntamente com análise exploratória são tão importantes para o desenvolvimento de um modelo que consiga alcançar seus objetivos.

Ferramentas que podem nos ajudar neste processo

Em Python existe uma biblioteca chamada pandas_profiling (https://github.com/ydataai/pandas-profiling) que fornece uma interface gráfica para visualização de algumas características do seu dataset sendo esta útil durante a etapa de desenvolvimento. Caso o dataset seja muito grande e pesado, a própria biblioteca recomenda usar uma amostragem do mesmo para as análises como forma de otimizar os cálculos. Para cada coluna do dataset, essa biblioteca fornece as seguintes informações de forma interativa no notebook ou em HTML:

  • Detecta automaticamente o tipo de coluna do dataframe
  • Quantidade de valores únicos e porcentagem de valores nulos
  • Análises estatísticas como valor mínimo, quartil, mediana, range, média, moda, desvio padrão, soma, coeficiente de variação, kurtosis.
  • Valor mais frequente e extremo
  • Histograma numérico e categórico
  • Correlações e aviso de alta correlação baseado em diferentes métricas (Spearman, Pearson, Kendall, Cramér’s V, Phik)
  • Mapa de calor dos valores nulos
  • Identificação de linhas duplicadas
  • Análises comuns de texto, como letra maiúscula, minúscula, separadores.
  • Análise de arquivo e imagens, como data de criação, dimensão, tamanho.

Essa visualização é separada em três sessões:

  • Overview: um apanhado resumido de todo o dataset
  • Alertas: um lista de potenciais alertas e problemas de qualidade com o dataset (alta correlação, uniformidade, presença de zeros, valores nulos e constantes, etc)
  • Reprodução: informações técnicas sobre a análise usando essa biblioteca (tempo, versão e configuração)

Para exemplificar, colocarei prints de como é a utilização dessa biblioteca para o dataset Iris.

from sklearn.datasets import load_iris

from pandas_profiling import ProfileReport

#Carregando o dataset Iris

data = load_iris()

df = pd.DataFrame(data[‘data’], columns = data[‘feature_names’])

df[‘target’] = data[‘target’]

#Inicializando o Pandas Profile Report

profile = ProfileReport(df, title=”Pandas Profiling Report”)

#Renderizando o Pandas Profile Report no notebook

profile.to_widgets()

Resumindo

De forma geral, não há um caminho único a ser seguido quando se trata de sanidade dos dados. O importante é ter em mente o contexto de negócio onde os dados serão utilizados. Com base nisso, o cientista de dados deve ser capaz de identificar as premissas que devem ser garantidas antes da aplicação das informações recebidas e selecionar quais técnicas serão utilizadas para mensurar e avaliar sua veracidade.

Este artigo foi escrito pela squad de Data Science (Ane Almoaia, Jessica Cabral e Mateus Mendelson da Silva), pertencente à tribo de Big Data da OLX Brasil.

--

--