

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Rilevamento delle frodi con un notebook di esempio Feature Store
<a name="feature-store-fraud-detection-notebook"></a>

**Importante**  
Le politiche IAM personalizzate che consentono ad Amazon SageMaker Studio o Amazon SageMaker Studio Classic di creare SageMaker risorse Amazon devono inoltre concedere le autorizzazioni per aggiungere tag a tali risorse. L’autorizzazione per aggiungere tag alle risorse è necessaria perché Studio e Studio Classic applicano automaticamente tag a tutte le risorse che creano. Se una policy IAM consente a Studio e Studio Classic di creare risorse ma non consente l'etichettatura, possono verificarsi errori AccessDenied "" durante il tentativo di creare risorse. Per ulteriori informazioni, consulta [Fornisci le autorizzazioni per etichettare SageMaker le risorse AI](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS politiche gestite per Amazon SageMaker AI](security-iam-awsmanpol.md)che danno i permessi per creare SageMaker risorse includono già le autorizzazioni per aggiungere tag durante la creazione di tali risorse.

Il codice di esempio in questa pagina si riferisce al notebook di esempio: [Fraud Detection with Amazon SageMaker Feature Store](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-featurestore/sagemaker_featurestore_fraud_detection_python_sdk.html). Consigliamo di eseguire questo notebook in Studio Classic, nelle istanze del notebook o in JupyterLab, perché il codice riportato in questa guida è concettuale e non completamente funzionale se copiato.

Usa quanto segue per clonare il amazon-sagemaker-examples GitHub repository [aws/](https://github.com/aws/amazon-sagemaker-examples), contenente il notebook di esempio.
+ **Per Studio Classic**

  Prima di tutto, avvia Studio Classic. Puoi aprire Studio Classic se l’esperienza predefinita è impostata su Studio o Studio Classic. Per aprire Studio Classic, consulta [Avvia Amazon SageMaker Studio Classic utilizzando la console Amazon SageMaker AI](studio-launch.md#studio-launch-console).

  Clona il amazon-sagemaker-examples GitHub repository [aws/ su Studio Classic](https://github.com/aws/amazon-sagemaker-examples) seguendo i passaggi indicati. [Clona un repository Git in Amazon Studio Classic SageMaker](studio-tasks-git.md)
+ **Per le istanze di SageMaker notebook Amazon**

  Avvia innanzitutto l'istanza del SageMaker notebook seguendo le istruzioni riportate in[Accesso alle istanze del notebook](howitworks-access-ws.md).

  Quindi, segui le istruzioni in [Aggiungi un repository Git al tuo account Amazon SageMaker AI](nbi-git-resource.md).

Ora che hai i notebook di esempio di SageMaker intelligenza artificiale, vai alla `amazon-sagemaker-examples/sagemaker-featurestore` directory e apri il notebook di esempio [Fraud Detection with Amazon SageMaker Feature Store](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-featurestore/sagemaker_featurestore_fraud_detection_python_sdk.html).

## Fase 1. Configura la tua sessione Feature Store
<a name="feature-store-setup"></a>

Per iniziare a utilizzare Feature Store, crea una sessione SageMaker AI, una sessione Boto3 e una sessione Feature Store. Inoltre, configura il bucket Amazon S3 che desideri utilizzare per le funzionalità. Questo è l’archivio offline. Il codice seguente utilizza il bucket SageMaker AI predefinito e vi aggiunge un prefisso personalizzato.

**Nota**  
Al ruolo utilizzato per eseguire il notebook devono essere collegate le seguenti policy gestite: `AmazonSageMakerFullAccess` e `AmazonSageMakerFeatureStoreAccess`. Per informazioni sull’aggiunta di policy al ruolo IAM, consulta [Aggiunta di policy al ruolo 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
)
```

## Fase 2: caricamento dei set di dati e suddivisione dei dati in gruppi di funzionalità
<a name="feature-store-load-datasets"></a>

Carica i dati in data frame per ciascuna funzionalità. Questi data frame vengono utilizzati dopo aver configurato il gruppo di funzionalità. Nell'esempio relativo al rilevamento delle frodi, puoi vedere queste fasi nel codice seguente.

```
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"})
```

## Fase 3: configurazione dei gruppi di funzionalità
<a name="feature-store-set-up-feature-groups-fraud-detection"></a>

Quando configuri i gruppi di funzionalità, devi personalizzare i nomi delle funzionalità con un nome univoco e configurare ogni gruppo di funzionalità con la 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)
```

Nell'esempio di rilevamento delle frodi, i due gruppi di funzionalità sono `identity` e `transaction`. Nel codice seguente puoi vedere come i nomi vengono personalizzati con una marcatura temporale, quindi ogni gruppo viene impostato trasmettendo nome e sessione.

```
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)
```

## Fase 4: impostazione di un identificativo del record e delle funzionalità relative all’ora dell’evento
<a name="feature-store-set-up-record-identifier-event-time"></a>

In questa fase viene specificato un nome identificativo del record e un nome per la funzionalità relativa all'ora dell'evento. Questo nome viene mappato alla colonna delle funzionalità corrispondenti nei dati. Nell'esempio di rilevamento delle frodi, la colonna di interesse è `TransactionID`. `EventTime` può essere aggiunto ai dati quando non è disponibile alcuna marcatura temporale. Nel codice seguente, è possibile vedere come vengono impostate queste variabili, quindi si aggiunge `EventTime` ai dati di entrambe le funzionalità.

```
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")
```

## Fase 5: caricamento delle definizioni di funzionalità
<a name="feature-store-load-feature-definitions"></a>

È ora possibile caricare le definizioni delle funzionalità trasmettendo un data frame contenente i dati delle funzionalità. Nel codice seguente per l'esempio di rilevamento delle frodi, la funzione di identità e la funzionalità di transazione vengono caricate utilizzando `load_feature_definitions`; questa funzione rileva automaticamente il tipo di dati di ogni colonna di dati. Per gli sviluppatori che utilizzano uno schema anziché il rilevamento automatico, è possibile consultare l'esempio [Esporta gruppi di funzionalità da Data Wrangler](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-data-export.html#data-wrangler-data-export-feature-store) per un codice che mostra come caricare lo schema, mapparlo e aggiungerlo come `FeatureDefinition` da utilizzare per creare `FeatureGroup`. Questo esempio copre anche un' AWS SDK per Python (Boto3) implementazione, che puoi usare al posto dell'SDK 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
```

## Fase 6: creazione di un gruppo di funzionalità
<a name="feature-store-setup-create-feature-group"></a>

In questa fase, viene usata la funzione `create` per creare il gruppo di funzionalità. Il codice seguente mostra tutti i parametri disponibili. L'archivio online non viene creato per impostazione predefinita, quindi è necessario impostarlo come `True` se si desidera abilitarlo. `s3_uri` è la posizione del bucket S3 dell’archivio 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"])
```

Il codice seguente, tratto dall'esempio di rilevamento delle frodi, mostra una chiamata `create` minima per ciascuno dei due gruppi di funzionalità creati.

```
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 si crea un gruppo di funzionalità, il caricamento dei dati richiede tempo, ed è necessario attendere la creazione del gruppo di funzionalità prima di poterlo utilizzare. È possibile controllare lo stato utilizzando il metodo descritto di seguito.

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

Durante la creazione del gruppo di funzionalità, si riceve `Creating` come risposta. Dopo aver completato correttamente questa fase, la risposta è `Created`. Altri stati possibili sono `CreateFailed`, `Deleting` o `DeleteFailed`.

## Fase 7: operazioni con i gruppi di funzionalità
<a name="feature-store-working-with-feature-groups"></a>

Dopo aver configurato il tuo gruppo di funzionalità, puoi eseguire una delle seguenti attività:

**Topics**
+ [Descrizione di un gruppo di funzionalità](#feature-store-describe-feature-groups)
+ [Elenco di gruppi di funzionalità](#feature-store-list-feature-groups)
+ [Inserimento di record in un gruppo di funzionalità](#feature-store-put-records-feature-group)
+ [Ottenimento di record da un gruppo di funzionalità](#feature-store-get-records-feature-group)
+ [Generazione di comandi Hive DDL](#feature-store-generate-hive-ddl-commands-feature-group)
+ [Creazione di un set di dati di addestramento](#feature-store-build-training-dataset)
+ [Scrittura ed esecuzione di una query Athena](#feature-store-write-athena-query)
+ [Eliminazione di un gruppo di funzionalità](#feature-store-delete-feature-group)

### Descrizione di un gruppo di funzionalità
<a name="feature-store-describe-feature-groups"></a>

È possibile recuperare informazioni sul gruppo di funzionalità con la funzione `describe`.

```
feature_group.describe()
```

### Elenco di gruppi di funzionalità
<a name="feature-store-list-feature-groups"></a>

È possibile elencare tutti i gruppi di funzionalità con la funzione `list_feature_groups`.

```
sagemaker_client.list_feature_groups()
```

### Inserimento di record in un gruppo di funzionalità
<a name="feature-store-put-records-feature-group"></a>

È possibile utilizzare la funzione `ingest` per caricare i dati delle funzionalità. Puoi trasmettere un data frame di funzionalità, impostare il numero di operatori e scegliere se attendere che venga restituito o meno. L'esempio seguente illustra l'utilizzo della funzione `ingest`.

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

Per ogni gruppo di funzionalità di cui disponi, esegui la funzione `ingest` sui dati delle funzionalità che desideri caricare.

### Ottenimento di record da un gruppo di funzionalità
<a name="feature-store-get-records-feature-group"></a>

È possibile utilizzare la funzione `get_record` per recuperare i dati di una specifica funzionalità tramite il relativo identificativo di record. L'esempio seguente utilizza un identificativo esemplificativo per recuperare il record.

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

Risposta esemplificativa tratta dall'esempio di rilevamento delle frodi:

```
...
'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'},
...
```

### Generazione di comandi Hive DDL
<a name="feature-store-generate-hive-ddl-commands-feature-group"></a>

La `FeatureStore` classe SageMaker Python SDK fornisce anche la funzionalità per generare comandi Hive DDL. Lo schema della tabella viene generato in base alle definizioni delle funzionalità. Le colonne prendono il nome da quello della funzione e il tipo di dati viene dedotto in base al tipo di funzionalità.

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

Output di esempio:

```
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
 ...
```

### Creazione di un set di dati di addestramento
<a name="feature-store-build-training-dataset"></a>

Feature Store crea automaticamente un catalogo di AWS Glue dati quando crei gruppi di funzionalità e puoi disattivarlo se lo desideri. Di seguito viene descritto come creare un singolo set di dati di addestramento con i valori delle funzionalità provenienti dai gruppi di funzionalità di identità e di transazione creati in precedenza in questo argomento. Inoltre, di seguito viene descritto come eseguire una query Amazon Athena per unire i dati memorizzati nell'archivio offline da gruppi di funzionalità di identità e transazione.

Per iniziare, crea una query Athena utilizzando `athena_query()` per i gruppi di funzionalità sia di identità sia di transazione. Il `table\$1name` è la AWS Glue tabella generata automaticamente da 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
```

### Scrittura ed esecuzione di una query Athena
<a name="feature-store-write-athena-query"></a>

Scrivi la tua query utilizzando SQL su questi gruppi di funzionalità, quindi esegui la query con il comando `.run()` e specifica la posizione del bucket Amazon S3 per il set di dati da salvare.

```
# 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()
```

Da qui, puoi addestrare un modello utilizzando questo set di dati ed eseguire l'inferenza.

### Eliminazione di un gruppo di funzionalità
<a name="feature-store-delete-feature-group"></a>

È possibile eliminare un gruppo di funzionalità con la funzione `delete`.

```
feature_group.delete()
```

Il seguente esempio di codice è tratto dall'esempio di rilevamento delle frodi.

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

Per ulteriori informazioni, consulta [Eliminazione di un’API del gruppo di funzionalità](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteFeatureGroup.html).