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à.
Importante
IAMLe politiche 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 taggano automaticamente tutte le risorse che creano. Se una IAM politica consente a Studio e Studio Classic di creare risorse ma non consente l'aggiunta di tag, si possono verificare errori AccessDenied "" durante il tentativo di creare risorse. Per ulteriori informazioni, consulta Fornisci le autorizzazioni per etichettare le risorse SageMaker.
AWS Policy gestite per Amazon SageMakerche concedono le autorizzazioni 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
Usa quanto segue per clonare il amazon-sagemaker-examples GitHub repository aws/
-
Per Studio Classic
Avvia per prima cosa Studio Classic. Puoi aprire Studio Classic se Studio o Studio Classic sono abilitati come esperienza predefinita. Per aprire Studio Classic, vediAvvia Studio Classic utilizzando la SageMaker console Amazon.
Clona il amazon-sagemaker-examples GitHub repository aws/
su Studio Classic seguendo i passaggi indicati. Clona un repository Git in Studio Classic SageMaker -
Per le istanze di SageMaker notebook Amazon
Avvia innanzitutto l'istanza del SageMaker notebook seguendo le istruzioni riportate inAccesso alle istanze del notebook.
Controlla se gli esempi sono già presenti nei tuoi taccuini seguendo le istruzioni contenute in. Accedi a taccuini di esempio In caso contrario, segui le istruzioni riportate in. Aggiungi un repository Git al tuo account Amazon SageMaker
Ora che hai i taccuini di SageMaker esempio, vai alla amazon-sagemaker-examples/sagemaker-featurestore
directory e apri il notebook di esempio Fraud Detection with Amazon SageMaker Feature Store
Passaggio 1: configura la sessione del Feature Store
Per iniziare a utilizzare Feature Store, crea una SageMaker sessione, 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 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 politiche al tuo IAM ruolo, consulta. Aggiungere politiche al proprio IAM ruolo
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à
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à
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
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à
È 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 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 for Python (Boto3) implementazione, che puoi usare al posto di SageMaker PythonSDK.
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à
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à
Dopo aver configurato il tuo gruppo di funzionalità, puoi eseguire una delle seguenti attività:
Argomenti
- Descrizione di un gruppo di funzionalità
- Elenco di gruppi di funzionalità
- Inserimento di record in un gruppo di funzionalità
- Ottenimento di record da un gruppo di funzionalità
- Genera comandi hive DDL
- Creazione di un set di dati di addestramento
- Scrittura ed esecuzione di una query Athena
- Eliminazione di un gruppo di funzionalità
Descrizione di un gruppo di funzionalità
È possibile recuperare informazioni sul gruppo di funzionalità con la funzione describe
.
feature_group.describe()
Elenco di gruppi di funzionalità
È 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à
È 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à
È 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'},
...
Genera comandi hive DDL
La FeatureStore
classe SageMaker Python SDK fornisce anche la funzionalità per generare comandi DDL Hive. 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
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. `table_name` è 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
Scrivi la tua query utilizzando SQL questi gruppi di funzionalità, quindi esegui la query con il .run()
comando e specifica la posizione del bucket Amazon S3 per il set di dati da salvare 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()
Da qui, puoi addestrare un modello utilizzando questo set di dati ed eseguire l'inferenza.
Eliminazione di un gruppo di funzionalità
È 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 la sezione Eliminare un gruppo di funzionalità. API