• Michel

Feature Engineering no RapidMiner

Feature engineering é um tópico absolutamente chave para o sucesso na aprendizagem de máquina. 25% do sucesso de um bom projeto depende do feature engineering.

“Criar features (atributos) é difícil, consome tempo e requer conhecimento especializado. Aprendizado de máquina aplicada é basicamente feature engineering”

Andrew Ng





Numa base de dados os dados são descritos em termos de observações ou instâncias (linhas) que são feitas de features chamados em português de variáveis independentes ou atributos que são as colunas.

No reconhecimento de imagens, uma imagem é uma observação, mas uma feature pode ser uma linha na imagem. No processamento de linguagem natural, um documento ou um tweet é uma observação, e uma frase ou a contagem de palavras podem ser features. No reconhecimento de fala, um enunciado é uma observação, mas uma feature pode ser uma única palavra ou fonema.

Uma feature em geral deve ser útil ou significativa para o seu problema, mas também pode ser inútil ou até prejudicial. Por exemplo, se você tem uma feature de uma dada área, uma em cm2 e outra em pol2, você só precisa de um delas.

Feature importance

Uma feature é importante se for razoavelmente correlacionada com a variável dependente (target). Para pré-selecionar features importantes você pode estimar objetivamente a utilidade das features. Isto geralmente é feito usando algoritmos de modelagem preditiva que já fornecem a importância das features e fazem a seleção internamente ao modelo. Para as features são atribuídas pontuações ou pesos. As features com as pontuações mais altas são selecionadas para inclusão no conjunto de dados de treinamento, enquanto as restantes podem ser ignoradas.

No gráfico vemos a importância das features em transmissão de dados por satélite. (Predictive Analytics for Enhancing Travel Time Estimation in Navigation Apps of Apple, Google, and Microsoft)




Informalmente podemos dizer que há quatro formas principais de Featuring Engineering:


Feature Transformation (transformação de variáveis)

Um dos primeiros passos a serem dados antes da construção dos modelos é revisar cuidadosamente os tipos de variáveis ​​presentes nos dados e tentar determinar antecipadamente se as variáveis devem, de alguma forma, ser transformadas. Por exemplo, se temos variáveis numéricas com escalas muito diferentes, é conveniente normalizá-las ou standartizá-las; se temos uma variável com uma distribuição muito assimétrica podemos aplicar o logaritmo para obter uma distribuição mais normalizada (figura abaixo); variáveis categóricas podem ser transformadas em dummy variables e assim por diante.


No RapidMiner você encontra dezenas de opções para transformação das features. Veja o exemplo do operador “Normalization” abaixo:





Feature Selection (seleção de variáveis)

É o processo de seleção de um subconjunto de features relevantes para uso na construção de modelos. As técnicas de seleção de features são usadas para simplificar modelos tornando-os mais fáceis de interpretar, manipular e treinar. Além disso favorecem a redução da curse of dimensionality que refere-se a vários fenômenos que surgem ao analisar e organizar dados em espaços de alta dimensão, geralmente com centenas ou milhares de dimensões (cada feature corresponde a uma dimensão) que não ocorrem em configurações de baixa dimensão, como o espaço físico tridimensional da experiência cotidiana.

A premissa central ao usar uma técnica de seleção de features é que os dados contêm algumas features que são redundantes ou irrelevantes e, portanto, podem ser removidas sem incorrer em perda de informações.



Alguns exemplos comuns de feature selection através da eliminação de features são:

  • Forward Selection: é um método iterativo no qual começamos com uma feature. Em cada iteração, adicionamos a feature que melhor aprimora nosso modelo até que uma adição de uma nova feature não melhore o desempenho do modelo.

  • Backward Elimination: Neste caso começamos com o conjunto completo de features e mantemos somente as features que apresentam a menor redução de desempenho até que não haja melhoria no desempenho.

  • Recursive Feature Elimination: É um algoritmo de otimização “greddy” que visa encontrar o subconjunto de features com melhor desempenho.

No RapidMiner há várias maneiras de executar feature selection.




Na figura abaixo temos o operador Forward Selection, que usa um algoritmom k-nn seleciona as features usando cross-validation.


Note que o Forward SelectionF só irá parar de selecionar features quando não houver mais incremento na performance



A base de dados com as features a1 ...a5 é carregada. Você pode ver que existem 5 features e a variável dependente Label. O operador Forwaed Selection é aplicado a base de dados.

O operador X-Validation é usado no treinamento usando o algoritmo K-NN. O modelo treinado é aplicado usando o operador aplicar modelo no subprocesso ' Teste '. O desempenho é medido por meio do operador Performance. Executando o processo você pode ver que a base de dados que tinha 5 atributos agora foi reduzida para 3 atributos.




Feature extraction (extração de variáveis)

A extração de features cria novas features a partir das originais. Este também é um processo de redução de dimensionalidade como em Feature Selection, em que um conjunto inicial de variáveis ​​brutas é reduzido a grupos mais gerenciáveis para processamento, com a diferença que as novas features geradas não tem necessariamente nenhum significado no contexto do problema.

Algumas bases de dados são muito volumosas em seu estado bruto para serem modeladas por algoritmos de modelagem preditiva diretamente.

Exemplos comuns incluem dados de imagem, vídeo, áudio e texto, mas poderiam facilmente incluir dados tabulares com milhões de atributos.

Em geral, a extração de features é o processo de reduzir automaticamente a dimensionalidade dessas observações em um conjunto muito menor que possa ser modelado. Para dados tabulares, isso pode incluir métodos de projeção como análise de componentes principais (PCA) e métodos de clustering não supervisionados. Para dados de imagem, isso pode incluir a detecção de linhas ou bordas.

Assim, no lugar de usar as features originais, utilizamos os features geradas pelo PCA ou outros algoritmos.

Algumas das principais técnicas de redução de dimensionalidade são Principal Components Analysis (PCA), Linear Discriminant Analysis (LDA) e Autoencoders.

Na figura abaixo temos uma redução de um base de dados de 3 dimensões para duas dimensões. Observe que em duas dimensões as features x1, x2 e x3 são substituídas pela features z1 e z2.



O RapidMiner oferece três modelos para redução de dimensionalidade, como vemos abaixo.



A base de dados ' Polynomial ' é carregada usando o operador Retrive. O operador de matriz de covariância é aplicado sobre ele. Um ponto de interrupção é inserido aqui para que você possa dar uma olhada na matriz de covariância com as features originais. O operador PCA é aplicado no conjunto de dados ' polinomial '. O parâmetro de redução de dimensionalidade é definido como número fixo 4. Assim, a base de dados resultante será composta de 4 componentes principais. Os componentes principais não devem ser correlacionados uns com os outros, portanto, sua covariância deve ser zero ou próxima de zero. O operador de matriz de covariância é aplicado na saída do operador PCA. Como você pode ver a covariância entre os componentes é zero.



Feature Generation (geração de variáveis)

É o processo de construir ou transformar variáveis ​​independentes - features – de uma base de dados que podem ser usadas ​​para treinar um modelo de aprendizado de máquina para um problema de previsão. A abordagem tradicional é criar novas features usando o conhecimento da aplicação em questão - o domínio.


Uma feature tipo data-hora (date-time), em sua forma nativa, contém muita informação que pode ser difícil para um modelo tirar proveito. Por exemplo na norma ISO 8601 um date-time é representada por 2018-19-15T30:15:40Z.

Se você suspeitar que há relacionamentos entre horários e outras features, você pode decompor um date-time em suas partes constituintes e descobrir e explorar novas relações.

Por exemplo, você pode suspeitar que há uma relação entre a hora do dia e volume de vendas.

Você pode criar um nova feature numérica chamada “Hora_do_dia” para a hora ou uma nova feature ordinal chamada “Período” com 3 valores: manhã, tarde e noite. Isso pode ser útil ao visualizar uma árvore de decisão.

Você pode usar abordagens semelhantes para escolher variáveis temporais, sazonalidades, feriados ao longo de um ano, etc.



Muitas vezes seus dados contém quantidades que podem ser desmembradas ou combinadas.

Numa aplicação em que queremos saber se um Cliente comprará um certo produto, pode-se saber, por exemplo, que valores acima de R$ 1.000,00 incorrem em uma taxa de tributação mais elevada, e assim criar uma feature “>1000” em que um valor de "1" representa “sim” e “0” representa “não”. Com isso é possível avaliar se esta taxa adicional tem influência na decisão de compra.



Construção de novas features

Uma outra forma de extração de features, quando os dados são todos numéricos e você não tem ideia o que eles significam, é criar colunas de soma, média, máximo, etc das linhas e verificar se existem correlações desta colunas com a variável target.



Para obter os melhores resultados você tem que “ralar” manipulando as features, pois você precisa criá-las manualmente. Isso requer gastar tempo com os dados e pensar sobre formas subjacentes do problema, estruturas, e a melhor forma de aplicar algoritmos de modelagem preditiva.

Muitas vezes significa uma mistura de agregar, combinar ou decompor features para criar novas features. Por exemplo:

  • Com dados textuais significa conceber indicadores de contexto específicos relevantes para o problema.

  • Com imagens pode significar enorme quantidade de tempo prescrevendo filtros automáticos para escolher as estruturas relevantes.

Esta é a parte da engenharia de features que é muitas vezes assinalada como o diferencial no aprendizado de máquina. É manual, é lento, exige raciocínio, e faz uma grande diferença.

A seguir temos um exemplo de Feature Engineering no RapidMiner usando os dados metereológicos da base Houston Historical Hourly Weather Data 2012-2017 (via Kaggle) que pode ser encontrada de base de dados que já vem com o programa.

Saliento que este não é um tutorial do RapidMiner nem de Machine Learning. Você poderá consultar outros artigos meus a respeito se nunca usou o RapidMiner.



Temos 4 operadores na figura acima: Carregamento da base de dados, Renomeação (nomeei as colunas em português), Generate Attributes que é onde iremos gerar novas features e finalmente Select Attributes onde retiramos as features que não iremos usar.

Temos 45.252 observações, e 7 features. A primeira coluna indica a data da medição e as outras são as medidas observadas.



No operador generate Attributes geramos 6 novos atributos que detalhamos a seguir.




Veja cima que o RapidMiner oferece uma maneira prática e simples de editar novas features, dispensando programação.

feature nova

Geramos uma feature que transforma graus Kelvin em Celcius.

Na tabela de edição temos à esquerda as funções que podemos aplicar às features à direita são listados as features (Regular Attributes)


feature nova

Geramos uma feature “Probabilidade de Chuva” em que se a Humidade for maior que 90% e a temperatura maior que 60ºF a resposta é “1” caso contrário é “0”.

feature “Alarme” em que se a feature Tempo = “Smoke” ou “volcanic ash”, resposta é “1” caso contrário é “0.

Geramos uma feature “log_Pressao” que é simplesmente o logaritmo do valor da pressão.

feature nova: “Mês”

feature nova: “Dia do Mês”

feature nova: “Diferença_dias”, que é diferença em dias entre a data atual e a data da medição.

feature nova: “Tipo_Tempo”, que é simplesmente colocar as categorias em letras maiúsculas.

Agora é só selecionar os atributos.


E nossa base de dados com as novas features está pronta.


Automated Feature Engineering

Podemos evitar a carga manual de prescrição de como construir ou extrair features de dados brutos?

Automated Feature Engineering é um tema quente atualmente.

Métodos modernos de deep learning estão conseguindo significativo sucesso nesta área. O Deep Learning automatiza o trabalho de Feature Engineering. As novas features são preparadas automaticamente, mas geralmente você não consegue interpretar estas features e então tem que trabalhar numa caixa preta. Deep Learning é parte da família de Redes Neurais.

Uma observação (por exemplo, uma imagem), pode ser representada de várias maneiras, tais como um vetor de valores de intensidade por pixel, ou de uma forma mais abstrata como um conjunto de arestas, regiões com um formato particular, etc. Algumas representações são melhores do que outras para simplificar a tarefa de aprendizagem (por exemplo, reconhecimento facial ou reconhecimento de expressões faciais).extração hierárquica de características.



Recentemente o RapidMiner incorporou esta facilidade. Trata-se de um processo totalmente automático de seleção das melhores features que ainda pode gerar novas features.

Isto está detalhado em meu artigo aqui.



3 Dimensões

Inteligência Artificial nas Empresas

Al. das Papoulas, 147 - Santana de Parnaíba - Alphaville, SP 06539-180 - (11) 4153 6004  - (11) 9 9795 9765

michel@3dimensoes.com.br