Categorias
Análise de dados Ciência de Dados Machine Learning

Preparação de Dados: três técnicas para transformar a escala e manter o shape.

Nesse post você vai encontrar técnicas para fazer as transformações necessárias nas variáveis, com a finalidade de ganhar performance no modelo.

O aprendizado dos algoritmos de Machine Learning é baseado em diversas premissas, ou seja, detalhes que facilitam a aprendizagem e influenciam a performance do modelo.

Essas premissas seguem a base da teoria da Navalha de Ockhan, em que o conjunto de dados mais adequado para o modelo, deve estar construído com simplicidade e estar organizado de forma sistemática, apresentando:

  • A menor dimensionalidade
  • A menor complexidade
  • Menor nº de colunas

É importante destacar que é mais fácil o algoritmo aprender com dados numéricos e na mesma escala, porque os métodos de otimização que estes modelos utilizam tem a sua base em cálculos, como as derivadas e a soma.

O primeiro passo para obter um conjunto de dados adequado às premissas que atendem à boa performance do modelo, está em fazer uma boa análise exploratória univariada, bivariada e multivariada. Pois, dessa forma, é possível encontrar quais variáveis são importantes e quais estão correlacionadas, podendo ser agrupadas ou excluídas, para a melhor generalização do modelo.

Existem vários algoritmos que ajudam nesse seleção de features, mas é importante que o Cientista de dados faça a sua análise exploratória antes dessa etapa, para adquirir conhecimento a fim de confirmar ou confrontar as features que o algoritmo apresenta como sendo as mais relevantes.

É necessário que os dados estejam em uma mesma escala para que a comparação dos resultados não seja enviesada ou equivocada. Para isso, são utilizadas três técnicas que quando aplicadas, fazem com que o conjunto de dados continue no mesmo shape (nº de linhas e colunas) e no mesmo range (escala).

Abaixo descrevo estas técnicas de preparação de dados separadamente. São elas: Normalização, Rescaling e Transformação (Encoding e Natureza).

NORMALIZAÇÃO

É comum encontrarmos em um Dataset, dados que estejam organizados em colunas com um range muito diferente, o que torna a comparação dos dados muito “injusta”. Quando temos esse cenário é necessário equalizar a importância das features, para que o modelo entenda que não necessariamente a feature que tem o range maior é a mais importante.

Este tipo de preparação desloca a variável para um mesmo range (mesmo conteúdo, mesma escala). Através deste método ocorre a reescala do centro para o zero com desvio padrão igual a 1.

A fórmula que aplicada para realizar esta reescala é:

Sendo: Nova_coluna = coluna – média / desvio-padrão

No entanto, este método possui algumas limitações e só pode ser aplicado em dados que apresentam uma Distribuição Normal/Gaussiana.

RESCALING

É um método que reescala os dados para o intervalo entre zero e 1. Sua utilização é recomendada quando os dados apresentam um comportamento não Gaussiano, ou seja, não apresentam uma Distribuição Normal.

É importante observar se a coluna possui outliers, porque isso influencia na escolha do método de Rescaling. Se não houver outliers, pode ser utilizada a técnica MinMaxScaler, que considera valores mínimo e máximo. E, se houver outliers, utiliza-se uma técnica mais robusta diante de outliers, que é a RobustScaler. Essa técnica se comporta melhor com outliers porque, diferente da Normalização que utiliza a Média e o MinMaxScaler que utiliza os valores mínimo e máximo, a RobustScaler utiliza os quartis.

Fórmulas:

Fórmula MinMaxScaler
Fórmula RobustScaler

O MinMaxScaler e RobustScaler são classes encontrados no pacote Sklearn:

TRANSFORMAÇÃO

Aqui vamos abordar dois tipos de transformações: Encoding (transformar dados categóricos em numéricos) e Transformação de Natureza.

Encoding

Existem muitos tipos de transformação de dados categóricos em numéricos. Escolher qual Encoding usar, não é uma tarefa fácil, por isso é tão importante conhecer o conjunto de dados através da análise exploratória e também, fazer testes, calculando o erro, para descobrir qual forma é a mais adequada de tratar esse conjunto de dados.

Abaixo, segue um breve resumo de técnicas de Encoding, que são usadas para “traduzir” categorias em números:

a) One Hot Encoding

É uma técnica bem simples de ser compreendida. Observe que no exemplo abaixo, as cores são substituídas pelos números 1 e 0. Se for verdadeiro é 1 e se for falso é 0.

É interessante usar para variáveis categóricas que dão a ideia de estado (Ex: feriado, temperatura).

  • Vantagem: Super simples de aplicar.
  • Desvantagem: cria novas colunas no dataset e aumenta a dimensionalidade (overfitt).

b) Label Encoding

Esta técnica substitui a categoria por números de forma aleatória. Observe que no exemplo abaixo, as cores são substituídas por números.

Isso funciona muito bem para variáveis que são apenas nomes (ex: nome de lojas).

c) Ordinal Encoding

É uma técnica parecida com Label Encoding, porém tem uma diferença: respeita uma relação de ordem (hierarquia). Observe que no exemplo abaixo, a hierarquia é de tamanho: menor ao maior:

Funciona muito bem quando tem uma relação de maior e menor (ordem). Exemplo: baixo, médio, alto / muito frio, frio, morno, quente, muito quente.

d) Target Encoding

Leva em consideração a variável resposta (target). Por exemplo, calcula a média de vendas para cada um dos níveis das categorias (cores, cidades).

Funciona bem quando tem muitos níveis de categorias. Exemplo: cores.

e) Frequency Encoding

É parecido com Target Encoding. Faz uma contagem da frequência e calcula média (em percentual).

f) Embedding Encoding

É um método implícito dentro das redes neurais profundas (deep learning). São camadas que traduzem a variável categórica para numérica tentando manter uma relação de distância dentro de um contexto. É muito utilizado dentro de NLP e previsão de demandas.

g) Exemplo de implementação do código de alguns Encodings:

transformação

Existem dois principais tipos de transformações: Grandeza e Natureza.

a) Transformação de Grandeza: o objetivo é trazer a variável resposta com uma distribuição mais próxima da normal. Os algoritmos de ML tem a premissa que os dados sejam normalmente distribuídos, isso aumenta a acurácia do modelo.

b) Transformação de Natureza: o objetivo é trazer a natureza real dos dados. Por exemplo, se a natureza é cíclica os dados devem apresentar a forma de ciclo. Os meses são um bom exemplo, porque quando colocados em números de 1 a 12 – janeiro é perto de fevereiro mas é longe de dezembro, mas se isso for pensado em número (por exemplo janeiro de 2021 é perto de dezembro de 2020), perde-se essa noção de cíclico. Precisamos deixar janeiro próximo de dezembro.

Tipos de transformação de grandeza

a) Transformação Logarítmica: transforma um conjunto que tenha uma skill para a direita ou esquerda mais para o centro, mais próxima de uma normal. Aplica o log em todas as variáveis resposta.

b) Transformação Box-Cox: Também aproxima o conjunto de dados de uma normal. Tem uma fórmula e também aplica o log em todas as variáveis resposta.

c) Transformação Cube-Root: Extrai a raiz cúbica de todos os valores.

d) Tranformação Square-Root: Extrai a raiz quadrada de todos os valores.

e) Transformação Seno e Cosseno: Aplica o seno e o cosseno em todos os valores.

f) Exemplos de implementação de código:

transformação de natureza cíclica

Calcula-se o seno e cosseno, que combinados vão representar a natureza cíclica. Na prática, aumenta a dimensionalidade do dataset, porque cria novas colunas. Apesar disso, melhora a performance porque a natureza da variável fica equalizada.

Exemplo de implementação de código:

Concluindo este tema, observamos que são muitas as formas de realizar o encoding das variáveis e, que estas são técnicas necessárias e amplamente utilizadas antes de fazer o treinamento do modelo de Machine Learning.

Agradeço seu tempo de leitura. Fica como dica a leitura abaixo, para aprofundar o tema.

All about Categorical Variable Encoding | by Baijayanta Roy | Towards Data Science

Category Encoders — Category Encoders 2.6.0 documentation (scikit-learn.org)

Navalha de Ockham – Wikipédia, a enciclopédia livre (wikipedia.org)

Meus contatos:

github.com/denisemerazzi
www.linkedin.com/in/denisewmerazzi/

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *