

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Detecção de fraudes com o caderno de exemplo do Feature Store
<a name="feature-store-fraud-detection-notebook"></a>

**Importante**  
Políticas personalizadas do IAM que permitem que o Amazon SageMaker SageMaker Studio ou o Amazon Studio Classic criem SageMaker recursos da Amazon também devem conceder permissões para adicionar tags a esses recursos. A permissão para adicionar tags aos recursos é necessária porque o Studio e o Studio Classic marcam automaticamente todos os recursos que eles criam. Se uma política do IAM permitir que o Studio e o Studio Classic criem recursos, mas não permitisse a marcação, erros AccessDenied "" podem ocorrer ao tentar criar recursos. Para obter mais informações, consulte [Forneça permissões para marcar recursos de SageMaker IA](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS políticas gerenciadas para Amazon SageMaker AI](security-iam-awsmanpol.md)que dão permissões para criar SageMaker recursos já incluem permissões para adicionar tags ao criar esses recursos.

O código de exemplo nesta página se refere ao caderno de exemplo: [Detecção de fraudes com a Amazon SageMaker Feature Store](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-featurestore/sagemaker_featurestore_fraud_detection_python_sdk.html). É recomendável executar esse caderno no Studio Classic, instâncias de caderno ou no JupyterLab, pois o código neste guia é conceitual e não é totalmente funcional se copiado.

Use o seguinte para clonar o amazon-sagemaker-examples GitHub repositório [aws/](https://github.com/aws/amazon-sagemaker-examples), contendo o notebook de exemplo.
+ **Para Studio Classic**

  Primeiro, execute o Studio Classic. Você pode abrir o Studio Classic se o Studio ou o Studio Classic estiverem habilitados como sua experiência padrão. Para abrir o Studio Classic, consulte [Inicie o Amazon SageMaker Studio Classic usando o Amazon SageMaker AI Console](studio-launch.md#studio-launch-console).

  Clone o amazon-sagemaker-examples GitHub repositório [aws/](https://github.com/aws/amazon-sagemaker-examples) no Studio Classic seguindo as etapas em. [Clone um repositório Git no SageMaker Amazon Studio Classic](studio-tasks-git.md)
+ **Para instâncias de SageMaker notebooks da Amazon**

  Primeiro, inicie a instância do SageMaker notebook seguindo as instruções em[Acessar instâncias de caderno](howitworks-access-ws.md).

  Em seguida, siga as instruções em [Adicione um repositório Git à sua conta Amazon AI SageMaker](nbi-git-resource.md).

Agora que você tem os cadernos de exemplo de SageMaker IA, navegue até o `amazon-sagemaker-examples/sagemaker-featurestore` diretório e abra o caderno de exemplo [Fraud Detection with Amazon SageMaker Feature Store](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-featurestore/sagemaker_featurestore_fraud_detection_python_sdk.html).

## Etapa 1: configure o Feature Store
<a name="feature-store-setup"></a>

Para começar a usar a Feature Store, crie uma sessão de SageMaker IA, uma sessão de Boto3 e uma sessão de Feature Store. Além disso, configure o bucket do Amazon S3 que deseja usar para seus atributos. Esse é seu armazenamento offline. O código a seguir usa o bucket padrão do SageMaker AI e adiciona um prefixo personalizado a ele.

**nota**  
A função que você usa para executar esse caderno deve ter as seguintes políticas gerenciadas anexadas: `AmazonSageMakerFullAccess` e `AmazonSageMakerFeatureStoreAccess`. Para obter informações sobre como adicionar políticas ao seu perfil do IAM, consulte [Adicionar políticas ao seu perfil do IAM](feature-store-adding-policies.md).

```
import boto3
import sagemaker
from sagemaker.session import Session

sagemaker_session = sagemaker.Session()
region = sagemaker_session.boto_region_name
boto_session = boto3.Session(region_name=region)
role = sagemaker.get_execution_role()
default_bucket = sagemaker_session.default_bucket()
prefix = 'sagemaker-featurestore'
offline_feature_store_bucket = 's3://{}/{}'.format(default_bucket, prefix)

sagemaker_client = boto_session.client(service_name='sagemaker', region_name=region)
featurestore_runtime = boto_session.client(service_name='sagemaker-featurestore-runtime', region_name=region)

feature_store_session = Session(
    boto_session=boto_session,
    sagemaker_client=sagemaker_client,
    sagemaker_featurestore_runtime_client=featurestore_runtime
)
```

## Etapa 2: carregar conjuntos de dados e particionar dados em grupos de atributos
<a name="feature-store-load-datasets"></a>

Carregue seus dados em quadros de dados para cada um dos seus atributos. Você usa esses quadros de dados depois de configurar o grupo de atributos. No exemplo de detecção de fraudes, você pode ver essas etapas no código a seguir.

```
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import io

s3_client = boto3.client(service_name='s3', region_name=region)

fraud_detection_bucket_name = 'sagemaker-featurestore-fraud-detection'
identity_file_key = 'sampled_identity.csv'
transaction_file_key = 'sampled_transactions.csv'

identity_data_object = s3_client.get_object(Bucket=fraud_detection_bucket_name, Key=identity_file_key)
transaction_data_object = s3_client.get_object(Bucket=fraud_detection_bucket_name, Key=transaction_file_key)

identity_data = pd.read_csv(io.BytesIO(identity_data_object['Body'].read()))
transaction_data = pd.read_csv(io.BytesIO(transaction_data_object['Body'].read()))

identity_data = identity_data.round(5)
transaction_data = transaction_data.round(5)

identity_data = identity_data.fillna(0)
transaction_data = transaction_data.fillna(0)

# Feature transformations for this dataset are applied before ingestion into FeatureStore.
# One hot encode card4, card6
encoded_card_bank = pd.get_dummies(transaction_data['card4'], prefix = 'card_bank')
encoded_card_type = pd.get_dummies(transaction_data['card6'], prefix = 'card_type')

transformed_transaction_data = pd.concat([transaction_data, encoded_card_type, encoded_card_bank], axis=1)
transformed_transaction_data = transformed_transaction_data.rename(columns={"card_bank_american express": "card_bank_american_express"})
```

## Etapa 3: configurar grupos de atributos
<a name="feature-store-set-up-feature-groups-fraud-detection"></a>

Ao configurar seus grupos de atributos, você precisa personalizar os nomes dos atributos com um nome exclusivo e configurar cada grupo de atributos com a classe `FeatureGroup`.

```
from sagemaker.feature_store.feature_group import FeatureGroup
feature_group_name = "some string for a name"
feature_group = FeatureGroup(name=feature_group_name, sagemaker_session=feature_store_session)
```

Por exemplo, no exemplo de detecção de fraudes, os dois grupos de atributos são `identity` e `transaction`. No código a seguir, você pode ver como os nomes são personalizados com um carimbo de data/hora e, em seguida, cada grupo é configurado passando o nome e a sessão.

```
import time
from time import gmtime, strftime, sleep
from sagemaker.feature_store.feature_group import FeatureGroup

identity_feature_group_name = 'identity-feature-group-' + strftime('%d-%H-%M-%S', gmtime())
transaction_feature_group_name = 'transaction-feature-group-' + strftime('%d-%H-%M-%S', gmtime())

identity_feature_group = FeatureGroup(name=identity_feature_group_name, sagemaker_session=feature_store_session)
transaction_feature_group = FeatureGroup(name=transaction_feature_group_name, sagemaker_session=feature_store_session)
```

## Etapa 4: configurar atributos de identificador de registro e horário do evento
<a name="feature-store-set-up-record-identifier-event-time"></a>

Nesta etapa, você especifica um nome de identificador de registro e um nome do atributo no horário do evento. Esse nome é mapeado para a coluna dos atributos correspondentes em seus dados. Por exemplo, no exemplo de detecção de fraudes, a coluna de interesse é`TransactionID`. `EventTime` pode ser anexado aos seus dados quando nenhum carimbo de data/hora estiver disponível. No código a seguir, você pode ver como essas variáveis são definidas e, em seguida, `EventTime` é anexado aos dados de ambos os atributos.

```
record_identifier_name = "TransactionID"
event_time_feature_name = "EventTime"
current_time_sec = int(round(time.time()))
identity_data[event_time_feature_name] = pd.Series([current_time_sec]*len(identity_data), dtype="float64")
transformed_transaction_data[event_time_feature_name] = pd.Series([current_time_sec]*len(transaction_data), dtype="float64")
```

## Etapa 5: carregar definições dos atributos
<a name="feature-store-load-feature-definitions"></a>

Agora você pode carregar as definições dos atributos passando um quadro de dados contendo os dados do atributo. No código a seguir para o exemplo de detecção de fraudes, o atributo de identidade e o atributo de transação são carregados usando `load_feature_definitions`, e essa função detecta automaticamente o tipo de dados de cada coluna de dados. Para desenvolvedores que usam um esquema em vez de detecção automática, consulte o exemplo de [Exportar grupos de atributos do Data Wrangler](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-data-export.html#data-wrangler-data-export-feature-store) para obter um código que mostra como carregar o esquema, mapeá-lo e adicioná-lo como uma `FeatureDefinition` que você pode usar para criar o `FeatureGroup`. Este exemplo também aborda uma AWS SDK para Python (Boto3) implementação, que você pode usar em vez do SDK do SageMaker Python.

```
identity_feature_group.load_feature_definitions(data_frame=identity_data); # output is suppressed
transaction_feature_group.load_feature_definitions(data_frame=transformed_transaction_data); # output is suppressed
```

## Etapa 6: criar um grupo de atributos
<a name="feature-store-setup-create-feature-group"></a>

Nesta etapa, você usa a função `create` para criar o grupo de atributos. O código a seguir mostra os parâmetros disponíveis. O armazenamento on-line não é criado por padrão, então você deve configurá-lo como `True` se quiser habilitá-lo. O `s3_uri` é o local do bucket do S3 do seu armazenamento offline.

```
# create a FeatureGroup
feature_group.create(
    description = "Some info about the feature group",
    feature_group_name = feature_group_name,
    record_identifier_name = record_identifier_name,
    event_time_feature_name = event_time_feature_name,
    feature_definitions = feature_definitions,
    role_arn = role,
    s3_uri = offline_feature_store_bucket,
    enable_online_store = True,
    online_store_kms_key_id = None,
    offline_store_kms_key_id = None,
    disable_glue_table_creation = False,
    data_catalog_config = None,
    tags = ["tag1","tag2"])
```

O código a seguir do exemplo de detecção de fraudes mostra uma `create` chamada mínima para cada um dos dois grupos de atributos que estão sendo criados.

```
identity_feature_group.create(
    s3_uri=offline_feature_store_bucket,
    record_identifier_name=record_identifier_name,
    event_time_feature_name=event_time_feature_name,
    role_arn=role,
    enable_online_store=True
)

transaction_feature_group.create(
    s3_uri=offline_feature_store_bucket,
    record_identifier_name=record_identifier_name,
    event_time_feature_name=event_time_feature_name,
    role_arn=role,
    enable_online_store=True
)
```

Quando você cria um grupo de atributos, leva tempo para carregar os dados e você precisa esperar até que o grupo de atributos seja criado antes de poder usá-lo. É possível verificar o status usando o método a seguir.

```
status = feature_group.describe().get("FeatureGroupStatus")
```

Enquanto o grupo de atributos está sendo criado, você recebe `Creating` como resposta. Quando essa etapa for concluída com êxito, a resposta será `Created`. Outros status possíveis são `CreateFailed`, `Deleting`, ou `DeleteFailed`.

## Etapa 7: trabalhar com grupos de atributos
<a name="feature-store-working-with-feature-groups"></a>

Agora que você configurou seu grupo de atributos, pode realizar qualquer uma das seguintes tarefas:

**Topics**
+ [Descrever um grupo de atributos](#feature-store-describe-feature-groups)
+ [Listar grupos de atributos](#feature-store-list-feature-groups)
+ [Colocar um registro em um grupo de atributos](#feature-store-put-records-feature-group)
+ [Obter registros de um grupo de atributos](#feature-store-get-records-feature-group)
+ [Gerar comandos DDL do hive](#feature-store-generate-hive-ddl-commands-feature-group)
+ [Criar um conjunto de dados de treinamento](#feature-store-build-training-dataset)
+ [Gravar e executar uma consulta Athena](#feature-store-write-athena-query)
+ [Excluir um grupo de atributos](#feature-store-delete-feature-group)

### Descrever um grupo de atributos
<a name="feature-store-describe-feature-groups"></a>

Você pode recuperar informações sobre seu grupo de atributos com a função `describe`.

```
feature_group.describe()
```

### Listar grupos de atributos
<a name="feature-store-list-feature-groups"></a>

Você pode listar todos os seus grupos de atributos com a função `list_feature_groups`.

```
sagemaker_client.list_feature_groups()
```

### Colocar um registro em um grupo de atributos
<a name="feature-store-put-records-feature-group"></a>

Você pode usar a função `ingest` para carregar os dados do seu atributo. Você passa um quadro de dados contendo dados do atributo, define o número de operadores e opta por esperar que ele retorne ou não. O exemplo a seguir demonstra o uso da função `ingest`.

```
feature_group.ingest(
    data_frame=feature_data, max_workers=3, wait=True
)
```

Para cada grupo de atributos que você tem, execute a função `ingest` nos dados do atributo que você deseja carregar.

### Obter registros de um grupo de atributos
<a name="feature-store-get-records-feature-group"></a>

Você pode usar a função `get_record` para recuperar os dados de um atributo específico por meio de seu identificador de registro. O exemplo a seguir usa um identificador de exemplo para recuperar o registro.

```
record_identifier_value = str(2990130)
featurestore_runtime.get_record(FeatureGroupName=transaction_feature_group_name, RecordIdentifierValueAsString=record_identifier_value)
```

Exemplo de resposta do exemplo de detecção de fraudes:

```
...
'Record': [{'FeatureName': 'TransactionID', 'ValueAsString': '2990130'},
  {'FeatureName': 'isFraud', 'ValueAsString': '0'},
  {'FeatureName': 'TransactionDT', 'ValueAsString': '152647'},
  {'FeatureName': 'TransactionAmt', 'ValueAsString': '75.0'},
  {'FeatureName': 'ProductCD', 'ValueAsString': 'H'},
  {'FeatureName': 'card1', 'ValueAsString': '4577'},
...
```

### Gerar comandos DDL do hive
<a name="feature-store-generate-hive-ddl-commands-feature-group"></a>

A `FeatureStore` classe do SDK do SageMaker Python também fornece a funcionalidade para gerar comandos DDL do Hive. O esquema da tabela é gerado com base nas definições do atributo. As colunas são nomeadas de acordo com o nome do atributo e o tipo de dado é inferido com base no tipo de atributo.

```
print(feature_group.as_hive_ddl())
```

Resultado do exemplo:

```
CREATE EXTERNAL TABLE IF NOT EXISTS sagemaker_featurestore.identity-feature-group-27-19-33-00 (
  TransactionID INT
  id_01 FLOAT
  id_02 FLOAT
  id_03 FLOAT
  id_04 FLOAT
 ...
```

### Criar um conjunto de dados de treinamento
<a name="feature-store-build-training-dataset"></a>

O Feature Store cria automaticamente um catálogo de AWS Glue dados quando você cria grupos de recursos e você pode desativá-lo se quiser. A seguir, descrevemos como criar um único conjunto de dados de treinamento com valores de atributos dos grupos de atributos de identidade e transação criados anteriormente neste tópico. Além disso, o texto a seguir descreve como executar uma consulta do Amazon Athena para juntar dados armazenados no armazenamento offline de grupos de atributos de identidade e de transação.

Para começar, crie uma consulta Athena usando `athena_query()` tanto para grupos de atributos de identidade como de transação. O `table\_name` é a AWS Glue tabela que é gerada automaticamente pela Feature Store.

```
identity_query = identity_feature_group.athena_query()
transaction_query = transaction_feature_group.athena_query()

identity_table = identity_query.table_name
transaction_table = transaction_query.table_name
```

### Gravar e executar uma consulta Athena
<a name="feature-store-write-athena-query"></a>

Você grava sua consulta usando SQL nesses grupos de atributos e, em seguida, executa a consulta com o comando `.run()` e especifica a localização do bucket do Amazon S3 para que o conjunto de dados seja salvo lá.

```
# Athena query
query_string = 'SELECT * FROM "'+transaction_table+'" LEFT JOIN "'+identity_table+'" ON "'+transaction_table+'".transactionid = "'+identity_table+'".transactionid'

# run Athena query. The output is loaded to a Pandas dataframe.
dataset = pd.DataFrame()
identity_query.run(query_string=query_string, output_location='s3://'+default_s3_bucket_name+'/query_results/')
identity_query.wait()
dataset = identity_query.as_dataframe()
```

A partir daqui, você pode treinar um modelo usando esse conjunto de dados e depois realizar a inferência.

### Excluir um grupo de atributos
<a name="feature-store-delete-feature-group"></a>

Você pode excluir um grupo de atributos com a função `delete`.

```
feature_group.delete()
```

O exemplo de código a seguir é do exemplo de detecção de fraudes.

```
identity_feature_group.delete()
transaction_feature_group.delete()
```

Para obter mais informações, consulte [Excluir uma API do grupo de atributos](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteFeatureGroup.html).