Deep Feature Synthesis (DFS)

Seu feature engineering nunca mais será igual

Arthur Lamblet Vaz
Data Hackers
4 min readFeb 3, 2022

--

Todos que trabalham com dados enfretam o mesmo trabalho inicial, que é ajustar as variáveis para criar todas variáveis de suporte necessárias. Esse algoritmo possui uma lógica para facilitar a vida na manipulação dos dados, deixando o código mais performático e organizado. Aqueles longos comandos de vários tipos de agrupamentos com diferentes operação e variáveis.

Como DFS pode nos ajudar nesse processo?

DFS é um algoritmo que gera automaticamente recursos para conjuntos de dados relacionais. Em essência, o algoritmo segue relacionamentos nos dados para um campo base e, em seguida, aplica funções matemáticas sequencialmente ao longo desse caminho para criar o recurso final. Empilhando os cálculos sequencialmente, observamos que podemos definir cada novo recurso como tendo uma determinada profundidade. Por isso, chamamos o algoritmo Deep Feature Synthesis.

Portanto, a parte inicial necessária de ajustes dos dados que geralmente são trabalhosas e não entregam valor, pode ser automatizado. Além de ser uma bibliotexa open source, se tornando já uma das bibliotecas mais populares no github.

Hands On

DFS tem uma blibioteca em python chamada featuretools, com ela teremos muito mais agilidade fazendo feature engineering. Mas vale pontuar que precisamos entender muito bem como funciona os parâmetros, para termos êxito em extrair o melhor dessa obra prima.

Entity

É uma tabela ou data frame que precisa ter únicos index sem ter nenhuma observação duplicada.

Set entity ou Entityset

É a definição da relação de diferentes tabelas, data frame ou até mesmo variável. Essa estrutura pode funcionar como se fosse um tensor, muito parecido com a função nest em R. No exemplo abaixo iremos demonstrar como funciona a relação de variáveis pais e filhos, que tem similaridade com estrutura de dados hierárquicos.

Primitives

São as operações de agregattion e transformation aplicadas no set entity ou no entity, gerando novas features.

Como vocês podem perceber, quando eu importo a função primitives já seleciono quais as medidas que gostaria que fossem disponibilizada para o uso. Vale lembrar que não é necessário escrever dessa maneira, pode simplesmente importar featuretools e irá disponibilizar o pacote default.

Irei utilizar diferentes exemplos para mostrar a aplicação com bases de dados e objetivos distintos. Acredito que quando nós comparamos em 2 ou 3 exemplos diferentes, conseguimos destinguir mais rápido o que muda entre eles e assim assimilando mais fácil.

Relationships

A relação é definida entre o nome da entity e o nome da variável, lembrando que sempre devemos considerar 4 informações de input, uma dupla de parentes e o outro criança.

(parent_entity, parent_variable, child_entity, child_variable)

Essa analogia é utilizada para referenciar a relação de um para muitos, já que os pais podem ter vários filhos mas filhos não podem ter vários pais.

Feature Primitives

Uma importante técnica é a possibilidade criar variáveis, de agrupamente e de transformação que estamos acostumados a fazer.

Agregação (agrupamente): Operação que tem como objetivo unir as variáveis filhas para cada pai relacionado. Pode-se aplicar as funções básicas de estatística, além de ser possível de associar diferentes tabelas que possui uma relação entre si.

Transformação: Uma operação aplicada a uma ou mais colunas em uma única tabela.

Existe um comando que você consegue explorar todas as possibilidades de operações existentes na biblioteca.

Operações de transformações
output
Operações de agregação

Voltando para os exemplos em questão, iremos criar os dois tipos de operações.

Existe também a opção de geração de variáveis de forma automática. Essa opção acaba se tornando interessante, já que podemos gerar milhares de variáveis intuitivas sem precisar escrever o comando. Na hora de chamar a função ft.dfs , precisamos especificar o parâmetro max_depth que traduz na complexidade das variáveis geradas, em quais níveis de operação elas serão.

Para consulta do código completo, segue:

Espero que tenha sido útil, ajudado a entender um pouco do verdadeiro ganho do DFS.

Fontes:

https://docs.featuretools.com/en/v0.16.0/automated_feature_engineering/afe.html

--

--

Arthur Lamblet Vaz
Data Hackers

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