O blog da AWS

Análise exploratória de dados, engenharia de atributos e operacionalização do fluxo de dados em seu pipeline de ML com o Amazon SageMaker Data Wrangler

Por Phi Nguyen e Roberto Bruno Martins

 

De acordo com a pesquisa The State of Data Science 2020 , o gerenciamento de dados, a análise exploratória de dados (AED), e a seleção e engenharia de atributos são responsáveis por mais de 66% do tempo de um cientista de dados (veja o diagrama a seguir).

 

 

A mesma pesquisa destaca que os três maiores obstáculos para implementar um modelo em produção são o gerenciament de ambientes e dependências, a segurança, e falta de conhecimento técnico (consulte o diagrama a seguir).

 

 

A pesquisa postula que essas lutas resultam em menos da metade (48%) dos entrevistados se sentindo capazes de ilustrar o impacto que a ciência de dados tem nos resultados dos negócios.

Entra em cena o Amazon SageMaker Data Wrangler, a maneira mais rápida e fácil de preparar dados para aprendizado de máquina (ML). O SageMaker Data Wrangler oferece a você a capacidade de usar uma interface visual para acessar os dados, executar a engenharia de atributos e AED, e operacionalizar perfeitamente seu fluxo de dados exportando-o para um pipeline do Amazon SageMaker, um job do Amazon SageMaker Data Wrangler, um arquivo Python ou um grupo de armazenamento de atributos (Feature Store) do Sagemaker.

O SageMaker Data Wrangler também fornece mais de 300 transformações integradas, transformações personalizadas usando um executável Python, PySpark ou SparkSQL, análise de dados nativa, como gráficos comuns (por exemplo gráfico de dispersão ou histograma), gráficos personalizados usando a biblioteca Altair e análises críticas dos modelos como a importância dos atributos escolhidos, a precisão, e a explicabilidade do modelo. Finalmente, o SageMaker Data Wrangler cria um arquivo de fluxo de dados que pode ser versionado e compartilhado entre suas equipes para facilitar a reprodução em diversos ambientes.

 

Visão geral da solução

Neste post usamos o exemplo da loja de demonstração de varejo e geramos um conjunto de dados de amostra. Usamos três arquivos: users.csv, items.csv e interactions.csv. Primeiro iremos preparar os dados para prever o segmento do cliente com base em interações passadas. Nosso alvo é o campo chamado persona, que mais tarde transformaremos e renomearemos para USER_SEGMENT.

O código a seguir é uma pré-visualização do conjunto de dados de usuários:

id,username,email,first_name,last_name,addresses,age,gender,persona
1,user1,nathan.smith@example.com,Nathan,Smith,"[{""first_name"": ""Nathan"", ""last_name"": ""Smith"", ""address1"": ""049 Isaac Stravenue Apt. 770"", ""address2"": """", ""country"": ""US"", ""city"": ""Johnsonmouth"", ""state"": ""NY"", ""zipcode"": ""12758"", ""default"": true}]",28,M,electronics_beauty_outdoors 2,user2,kevin.martinez@example.com,Kevin,Martinez,"[{""first_name"": ""Kevin"", ""last_name"": ""Martinez"", ""address1"": ""074 Jennifer Flats Suite 538"", ""address2"": """", ""country"": ""US"", ""city"": ""East Christineview"", ""state"": ""MI"", ""zipcode"": ""49758"", ""default"": true}]",19,M,electronics_beauty_outdoors

O código a seguir é uma visualização do conjunto de dados itens:

ITEM_ID,ITEM_URL,ITEM_SK,ITEM_NAME,ITEM_CATEGORY,ITEM_STYLE,ITEM_DESCRIPTION,ITEM_PRICE,ITEM_IMAGE,ITEM_FEATURED,ITEM_GENDER_AFFINITY
36,http://dbq4nocqaarhp.cloudfront.net/#/product/36,,Exercise Headphones,electronics,headphones,These stylishly red ear buds wrap securely around your ears making them perfect when exercising or on the go.,19.99,5.jpg,true,
49,http://dbq4nocqaarhp.cloudfront.net/#/product/49,,Light Brown Leather Lace-Up Boot,footwear,boot,Sturdy enough for the outdoors yet stylish to wear out on the town.,89.95,11.jpg,,

The following code is a preview of the interactions dataset:

O código a seguir é uma visualização do conjunto de dados de interações:

ITEM_ID,USER_ID,EVENT_TYPE,TIMESTAMP
2,2539,ProductViewed,1589580300
29,5575,ProductViewed,1589580305
4,1964,ProductViewed,1589580309
46,5291,ProductViewed,1589580309

Este post não se destina a ser um guia passo a passo, mas sim descrever o processo de preparação de um conjunto de dados de treinamento e destacar algumas das transformações e recursos de análise de dados usando o SageMaker Data Wrangler. Você pode baixar os arquivos .flow, se quiser, e fazer o upload no seu ambiente do SageMaker Studio para refazer o exemplo completo.

Em suma, executaremos as seguintes etapas:

  1. Conectar ao Amazon Simple Storage Service (Amazon S3) e importar os dados.
  2. Transformar os dados, incluindo type casting, remover colunas desnecessárias, imputar valores ausentes, codificação de rótulos (label encoding), codificação one hot (one-hot encoding) e executar transformações personalizadas para extrair elementos de uma coluna formatada como JSON.
  3. Criar resumos de tabelas e gráficos para análise de dados. Usaremos a opção de executar um modelo rápido para ter uma noção de quais recursos estão adicionando poder preditivo à medida que avançamos com nossa preparação de dados. Também usaremos a capacidade nativa de detectar contaminação de dados (data/target leakage) e obteremos um relatório sobre quaisquer atributos que estejam contaminando os dados.
  4. Criar um fluxo de dados, no qual combinaremos e uniremos as três tabelas para realizar agregações adicionais e análise de dados.
  5. Iterar realizando engenharia de atributos adicionais ou análise de dados nos dados recém-adicionados.
  6. Exportar nosso fluxo de trabalho para um job do SageMaker Data Wrangler.

 

Pré-requisitos

Certifique-se de que você não tem limites de cota do tipo de instância m5.4xlarge do Sagemaker Studio antes de criar um novo fluxo de dados. Para obter mais informações sobre pré-requisitos, consulte Conceitos básicos com o Data Wrangler.

 

Importação dos dados

Importamos nossos três arquivos CSV a partir do Amazon S3. O SageMaker Data Wrangler suporta arquivos CSV e Parquet. Ele também permite que você escolha somente alguns dados no caso de os dados serem muito grandes para caberem em seu aplicativo do Sagemaker Studio. A captura de tela a seguir mostra uma visualização do conjunto de dados dos usuários.

 

 

Depois de importar nossos arquivos CSV, os  conjuntos de dados se parecem com a seguinte captura de tela no SageMaker Data Wrangler.

 

 

Agora podemos adicionar algumas transformações e realizar a análise de dados.

 

Transformando os dados

Para cada tabela, verificamos os tipos de dados e certificamo-nos de que foi inferido corretamente.

Tabela de itens

Para realizar as transformações na tabela de itens, execute as seguintes etapas:

  1. Na interface do usuário do SageMaker Data Wrangler, para a tabela de itens, escolha +.
  2. Escolha Editar tipos de dados.

 

 

A maioria das colunas foi inferida corretamente, com exceção de uma. A coluna ITEM_FEATURED está faltando alguns valores e esta deve ser convertida como um Booleano.

 

 

Para a tabela de itens, realizaremos as seguintes transformações:

  • Preencheremos valores ausentes com false para a coluna ITEM_FEATURED
  • Removeremos colunas desnecessárias, como URL, SK, IMAGE, NAME, STYLE, ITEM_FEATURED e DESCRIPTION
  • Renomearemos ITEM_FEATURED_IMPUTED para ITEM_FEATURED
  • Converteremos a coluna ITEM_FEATURED para booleano
  • Codificaremos a coluna ITEM_GENDER_AFFINITY

3. Para adicionar uma nova transformação, escolha + e escolha Adicionar transformação .

 

 

4. Preencha os valores ausentes usando a transformação nativa de Tratar Valores Ausentes.

 

 

5. Para eliminar colunas, vá em Gerenciar colunas, no campo Coluna de entrada, escolha ITEM_URL.

a. Para Operador de coluna obrigatório, escolha Remover coluna.

 

 

b. Repita esta etapa para SK, IMAGE, NAME, STYLE, ITEM_FEATURED e DESCRIPTION

6. Em Conversão de Tipo, no campo Coluna, escolha ITEM_FEATURED.

7. No campo Para, escolha Booleano.

 

 

8. Em Codificar categóricos (Encore categorical), adicione uma codificação one-hot à coluna ITEM_GENDER_AFFINITY.

 

 

9. Renomeie a coluna de ITEM_FEATURED_IMPUTED para ITEM_FEATURED.

10. Veja o resumo da tabela.

 

 

A análise de dados no resumo da tabela não fornece informações sobre todas as colunas.

11. Execute a função df.info () como uma transformação personalizada.

12. Escolha Visualizar para verificar se nossa coluna ITEM_FEATURED vem como um tipo de dados booleano.

Dataframe.info() imprime informações sobre o DataFrame, incluindo os tipos de dados, valores não-nulos e uso de memória.

 

 

 

13. Verifique se a coluna ITEM_FEATURED foi convertida corretamente e que não tem nenhum valor nulo.

Vamos passar para a tabela de usuários e preparar nosso conjunto de dados para treinamento.

Tabela de usuários

Para a tabela de usuários, executaremos as seguintes etapas:

  1. Remova colunas desnecessárias, como username, e-mail, first_name e last_name.
  2. Extraia elementos de uma coluna JSON, como zipcode, state e city.

A coluna addresses que contém uma string JSON se parece com o seguinte código:

[{“first_name”: “Nome”,

    “last_name”: “Smith”,

    “address1": “049 Isaac Stravenue Apt. 770",

    “address2": “”,

    “country”: “EUA”,

    “city”: “Johnsonmouth”,

    “state”: “Estado”,

    “zipcode”: “12758",

    “default”: true

    }]

Para extrair elementos de localização relevantes para o nosso modelo, aplicamos várias transformações e as salvamos em suas respectivas colunas. A captura de tela a seguir mostra um exemplo de extração do zipcode do usuário.

 

 

Aplicamos a mesma transformação para extrair city e state, respectivamente.

3. Na transformação a seguir, dividimos e reorganizamos as diferentes personas (como electronics_beauty_outdoors) e salvamos comoUSER_SEGMENT.

 

 

4. Também realizamos uma codificação one-hot na coluna USER_GENDER .

 

 

Tabela Interações

Finalmente, na tabela de interações, concluímos as seguintes etapas:

  1. Execute uma transformação personalizada para extrair a data e a hora do evento de um carimbo de data/hora.

Transformações personalizadas são bastante poderosas porque permitem inserir um trecho de código e executar a transformação usando diferentes mecanismos de execução como PySpark, Python ou SparkSQL. Tudo o que você precisa fazer é iniciar sua transformação com df, que define o DataFrame.

O código a seguir é um exemplo usando uma transformação personalizada do PySpark para extrair a data e a hora do carimbo de data/hora:

from pyspark.sql.functions import from_unixtime, to_date, date_format df = df.withColumn(‘DATE_TIME’, from_unixtime(‘TIMESTAMP’)) df = df.withColumn( ‘EVENT_DATE’, to_date(‘DATE_TIME’)).withColumn( ‘EVENT_TIME’, date_format(‘DATE_TIME’, ‘HH:mm:ss’))

2. Execute uma codificação one-hot no EVENT_TYPE

 

 

3. Por fim, remova todas as colunas que não precisamos.

 

Realizando a análise de dados

Além da análise de dados simples incorporada, como gráficos de dispersão e histogramas, o SageMaker Data Wrangler oferece a capacidade de criar visualizações personalizadas usando a biblioteca Altair.

No gráfico de histograma a seguir foram vinculados o usuário por faixas etárias no eixo x e a porcentagem total de usuários no eixo y.

 

 

Também podemos usar a funcionalidade de modelagem rápida para mostrar a importância de um atributo. A métrica F1 Score, indicando a acurácia preditiva do modelo, também é mostrada na visualização a seguir. Isso permite que você itere adicionando novos conjuntos de dados e realizando engenharia de atributos adicionais para melhorar incrementalmente a precisão do modelo.

 

 

A visualização a seguir é um gráfico de caixa por idade e estado. Isso é particularmente útil para entender o intervalo interquartil e possíveis pontos fora da curva.

 

 

Construindo um fluxo de dados

O SageMaker Data Wrangler cria um fluxo de dados e mantém as dependências de todas as transformações, análises de dados e junções de tabela. Isso permite que você mantenha uma linhagem de sua análise exploratória de dados, e também permite que você reproduza experimentos passados de forma consistente.

Nesta seção juntamos nossas tabelas de interações e itens.

 

 

  1. Junte as tabelas usando a chave ITEM_ID .
  2. Use uma transformação personalizada para agregar o conjunto de dados por USER_ID e gerar outros recursos pivotando o ITEM_CATEGORY e EVENT_TYPE:

import pyspark.sql.functions as F df = df.groupBy([“USER_ID”]).pivot(“ITEM_CATEGORY”) .agg(F.sum(“EVENT_TYPE_PRODUCTVIEWED”).alias(“EVENT_TYPE_PRODUCTVIEWED”), F.sum(“EVENT_TYPE_PRODUCTADDED”).alias(“EVENT_TYPE_PRODUCTADDED”), F.sum(“EVENT_TYPE_CARTVIEWED”).alias(“EVENT_TYPE_CARTVIEWED”), F.sum(“EVENT_TYPE_CHECKOUTSTARTED”).alias(“EVENT_TYPE_CHECKOUTSTARTED”), F.sum(“EVENT_TYPE_ORDERCOMPLETED”).alias(“EVENT_TYPE_ORDERCOMPLETED”), F.sum(F.col(“ITEM_PRICE”) * F.col(“EVENT_TYPE_ORDERCOMPLETED”)).alias(“TOTAL_REVENUE”), F.avg(F.col(“ITEM_FEATURED”).cast(“integer”)).alias(“FEATURED_ITEM_FRAC”), F.avg(“GENDER_AFFINITY_F”).alias(“FEM_AFFINITY_FRAC”), F.avg(“GENDER_AFFINITY_M”).alias(“MASC_AFFINITY_FRAC”)).fillna(0)

3. Junte o nosso conjunto de dados com as tabelas de username .

A captura de tela a seguir mostra como nosso DAG (Directed Acyclic Graph) se parece depois de juntar todas as tabelas.

 

 

4. Agora que combinamos todas as três tabelas, execute a análise de dados para verificar a contaminação de dados (data leakage ou target leakage).

A contaminação de dados ou contaminação de alvo é um dos problemas mais comuns e difíceis de identificar ao construir um modelo. Contaminação de dados significa que você usa atributos como parte do treinamento do modelo que não estão disponíveis no momento da inferência. Por exemplo, se você tentar prever um acidente de carro e um dos recursos for airbag_deployed, você não sabe se o airbag foi utilizado até que o acidente tenha acontecido.

A captura de tela a seguir mostra que não temos um candidato a contaminação de dados forte depois de executar a análise de dados.

 

 

5. Finalmente, rodamos uma execução rápida de um modelo usando o conjunto de dados unificado.

A captura de tela a seguir mostra que nossa pontuação F1 é de 0,89 depois de juntar dados adicionais e realizar outras transformações de recursos.

 

 

Exportação do fluxo de dados

O SageMaker Data Wrangler oferece a capacidade de exportar seu fluxo de dados para um notebook Jupyter com código previamente construído para as seguintes opções:

  • Job do SageMaker Data Wrangler
  • Pipelines SageMaker
  • Armazenamento de atributos do SageMaker

O SageMaker Data Wrangler também pode gerar um arquivo Python.

 

 

O job do SageMaker Data Wrangler é construído em um notebook Jupyter pronto para ser executado.

 

 

Conclusão

O SageMaker Data Wrangler facilita a ingestão de dados e a execução de tarefas de preparação de dados, como análise exploratória de dados, seleção de atributos, engenharia de atributos e análises de dados mais avançadas, como importância de atributos, contaminação de dados e explicação do modelo usando uma interface de usuário fácil e intuitiva. O SageMaker Data Wrangler facilita a transição ao converter seu fluxo de dados em um artefato operacional, como um job do SageMaker Data Wrangler, armazenamento de atributos do SageMaker ou pipeline do SageMaker, de forma muito fácil com apenas um clique de um botão.

Faça login no seu ambiente Sagemaker Studio, baixe o arquivo.flow e experimente o SageMaker Data Wrangler hoje mesmo.

 

 

Este artigo foi traduzido do Blog da AWS em Inglês.

 


Sobre os Autores

Phi Nguyen é um arquiteto de soluções da AWS, ajudando os clientes em sua jornada na nuvem com foco especial em data lake, análise, tecnologias semânticas e aprendizado de máquina. Em seu tempo livre, você pode encontrá-lo de bicicleta para trabalhar, treinando o time de futebol de seu filho ou curtindo a natureza andar com sua família.

 

 

 

Roberto Bruno Martins é um arquiteto de soluções especialista em aprendizado de máquina, ajudando clientes de várias indústrias a criar, implantar e executar soluções de machine learning. Ele trabalha com dados desde 1994, e não tem planos para parar tão cedo. Em seu tempo livre ele joga jogos, pratica artes marciais e gosta de experimentar comida nova.

 

 

 

Paulo Aragão é um Arquiteto de Soluções Sênior que trabalha há mais de 20 anos com clientes Enterprise. Com ampla experiência em Computação de Alta Performance (HPC), atualmente dedica seus dias a ajudar clientes a inovarem através do uso de serviços de IA e ML na nuvem AWS. Apaixonado por música e mergulho, você pode encontra-lo em vídeos de covers musicais no Youtube ou no fundo do mar. No seu tempo livre, gosta de ler livros, jogar World of Warcraft, e cozinhar para os amigos.