Normalizar ou padronizar as variáveis?

Um dos processos muito rotineiros para um Data Science é "colocar as variáveis na mesma página". Mas quando devemos escolher entre normalization, standardization e porque?

Arthur Lamblet Vaz
Data Hackers
5 min readJun 30, 2019

--

Photo by Robert Anasch on Unsplash

A transformação dos seus dados, que já estão tratados, é uma pratica para evitar que seu algoritmo fique enviesado para as variáveis com maior ordem de grandeza.

As duas técnicas tem o mesmo objetivo: transformar todas as variáveis na mesma ordem de grandeza. E a diferença básica é que padronizar as variáveis irá resultar em uma média igual a 0 e um desvio padrão igual a 1. Já normalizar tem como objetivo colocar as variáveis dentro do intervalo de 0 e 1, caso tenha resultado negativo -1 e 1.

Padronizar os dados normalmente é feita usando a fórmula z-score:

z-score fórmula

Normalizar os dados usando Min-Max:

Min-Max fórmula

Se a distribuição não é Gaussiana ou o desvio padrão é muito pequeno, normalizar os dados é uma escolha a ser tomada.

Cuidado com os outliers, alguns artigos irão dizer que normalizar é o melhor método e também encontrará artigos dizendo que padronizar os dados é a opção a ser feita. Como já diz o teorema No Free Lunch, a melhor saída é testar e avaliar o resultado. Isso vale tanto para algoritmos de detecção de outliers, quanto para não suavizar efeitos de outliers em seu dataset. A biblioteca scikit-learn tem alguns exemplos com outliers, vale a pena conferir como fica graficamente.

Assimetria

Basicamente são técnicas que transformam a distribuição em normal das suas variáveis.

Gráfico de tipos de distribuição

As suas variáveis podem estar com 3 tipos de formato, como mostra a figura acima. A figura mostra três gráficos, onde o primeiro da esquerda representa a distribuição normal e já os demais, são distribuições assimétricas.

Existem técnicas específicas para cada caso de assimetria, que servem para transforma a distribuição em normal.

Assimetria positiva, pode ser tratada com as seguintes técnicas: raiz quadrada, raiz cúbica e log.

Assimetria negativa, pode ser tratada com as seguintes técnicas: quadrado, raiz cúbica e log. Entretanto, log tem um fator especial a ser considerado, você deverá criar uma condicional para os casos de valores negativos considerar a seguinte fórmula: -log(abs(-x)) e para os casos 0 deverá somar 1, exemplo: log(0+1), pois log(1) é zero.

Exemplo práticos

Em muitos casos é preciso normalizar|padronizar|escalar mas também no final da modelagem, os números precisam ser interpretáveis. Portanto, é preciso saber fazer a transformação reversa.

O exemplo abaixo, escrito em R, traz um exemplo utilizando a biblioteca escale. Utilizei a fórmula, mas também escrevi a equação com intuito de mostrar como ela funciona.

Já para padronizar as variáveis, utilizamos a função scale() e caso seja preciso retomar os valores iniciais, a função está descrita abaixo.

Para python, é possível reverter a normalização MinMax seguindo o passo a passo a seguir:

O parâmetro feature_range= (0,1) é o default que resultará a normalização variando entre 0 e 1. No R é feito da seguinte maneira: rescale(x,c(0,1)) , lembrando que esses valores podem ser definidos da maneira que for mais conveniente para você.

Também é possível conseguir os valores na escala original usando StandardScaler , já a função Normalizer dessa biblioteca, não possui a transformação inversa.

Entretanto, existe um parâmetro interessante na função Normalizer que pode escolher qual métrica de cálculo da distância entre as variáveis que faça sentido ao problema. O parâmetro norm="l2" que é o default, usa a distância Euclidiana, uma outra alternativa é utilizar a distância Manhattan, norm="l1" .

De forma simples, uma maneira de exemplificar o momento mais adequado em se utilizar cada uma delas é pensar e uma distância entre dois pontos no Rio de Janeiro. Se é um trajeto de um pássaro, a distância euclidiana é mais conveniente já que pode traçar uma diagonal de um ponto para o outro. Agora, se pensarmos que esses pontos serão percorridos por um humano ou carro que precisa respeitar as ruas e quarteirões o uso da distância Manhattan é mais adequada .

Também não podemos deixar de comentar da transformação log(), que é muito eficaz e utilizado, já que é a transformação mais simples para normalizar e transformar os valores na escala original, exp().

Lembrando que para casos seja necessário passar log() em um conjunto de variável que contém zero. A melhor saída é considerar uma condicional para os valores iguais a zero, efetuar log(1) que é igual a zero. Todavia, a transformação log() não funciona para números negativos.

As principais mensagens que quero deixar…

As transformações são importantes para conseguir que o seu modelo consiga uma acurácia satisfatória. Entretanto, em muitos casos, saber fazer o calculo reverso para o número gerado do modelo seja um valor interpretado, também é fundamental.

Por fim, é aconselhável que seja testado diferentes técnicas e comparar o resultado da acurácia do teste para escolher qual que resultou um melhor fit no seu problema.

--

--

Arthur Lamblet Vaz
Data Hackers

Surfista, natureba e engenheiro de produção com ênfase em Data Science🌱🌍♻️