Creazione di un set di dati dai gruppi di funzionalità - Amazon SageMaker

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

Creazione di un set di dati dai gruppi di funzionalità

Dopo aver creato un gruppo di funzionalità del Feature Store in un archivio offline, puoi scegliere di utilizzare i seguenti metodi per ottenere i dati:

  • Usare Amazon SageMaker Python SDK

  • Esecuzione di SQL query in Amazon Athena

Importante

Feature Store richiede la registrazione dei dati in un catalogo di AWS Glue dati. Per impostazione predefinita, Feature Store crea automaticamente un catalogo di AWS Glue dati quando si crea un gruppo di funzionalità.

Dopo aver creato i gruppi di funzionalità per il tuo negozio offline e averli popolati con i dati, puoi creare un set di dati eseguendo query o utilizzando il SDK per unire i dati archiviati nell'archivio offline da diversi gruppi di funzionalità. Puoi anche unire i gruppi di funzionalità a un singolo data frame Pandas. Puoi usare Amazon Athena per scrivere ed eseguire SQL query.

Nota

Per assicurarti che i tuoi dati siano aggiornati, puoi configurare un AWS Glue crawler da eseguire secondo una pianificazione.

Per configurare un AWS Glue crawler, specifica un IAM ruolo che il crawler utilizza per accedere ai bucket Amazon S3 dello store offline. Per ulteriori informazioni, consulta Creare un ruolo. IAM

Per ulteriori informazioni su come utilizzare AWS Glue e Athena per creare un set di dati di addestramento per l'addestramento e l'inferenza dei modelli, vedere. Usa Feature Store con SDK per Python (Boto3)

Utilizzo di Amazon SageMaker Python SDK per ottenere dati dai gruppi di funzionalità

Puoi utilizzare il Feature Store APIs per creare un set di dati dai tuoi gruppi di funzionalità. I data scientist creano set di dati ML per l’addestramento recuperando i dati delle funzionalità ML da uno o più gruppi di funzionalità nell’archivio offline. Utilizza la funzione create_dataset() per creare il set di dati. Puoi usare il SDK per fare quanto segue:

  • Creazione di un set di dati da più gruppi di funzionalità.

  • Creazione di un set di dati dai gruppi di funzionalità e da un data frame Pandas.

Per impostazione predefinita, Feature Store non include i record che hai eliminato dal set di dati. Inoltre, non include record duplicati. Un record duplicato mantiene l'ID del record e il valore della marcatura temporale nella colonna dell'ora dell'evento.

Prima di utilizzare il SDK per creare un set di dati, è necessario avviare una SageMaker sessione. Usa il codice seguente per avviare la sessione.

import boto3 from sagemaker.session import Session from sagemaker.feature_store.feature_store import FeatureStore region = boto3.Session().region_name boto_session = boto3.Session(region_name=region) 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, ) feature_store = FeatureStore(feature_store_session)

Il codice seguente mostra un esempio di creazione di un set di dati da più gruppi di funzionalità. Il seguente frammento di codice utilizza i gruppi di funzionalità di esempio»base_fg_name", "first_fg_name«e»second_fg_name«, che potrebbe non esistere o avere lo stesso schema nel Feature Store. Si consiglia di sostituire questi gruppi di funzionalità con gruppi di funzionalità esistenti nel Feature Store. Per informazioni su come creare un gruppo di funzionalità, consulta Fase 3: creazione di gruppi di funzionalità.

from sagemaker.feature_store.feature_group import FeatureGroup s3_bucket_name = "offline-store-sdk-test" base_fg_name = "base_fg_name" base_fg = FeatureGroup(name=base_fg_name, sagemaker_session=feature_store_session) first_fg_name = "first_fg_name" first_fg = FeatureGroup(name=first_fg_name, sagemaker_session=feature_store_session) second_fg_name = "second_fg_name" second_fg = FeatureGroup(name=second_fg_name, sagemaker_session=feature_store_session) feature_store = FeatureStore(feature_store_session) builder = feature_store.create_dataset( base=base_fg, output_path=f"s3://{amzn-s3-demo-bucket1}", ).with_feature_group(first_fg ).with_feature_group(second_fg, "base_id", ["base_feature_1"])

Il codice seguente mostra un esempio di creazione di un set di dati da più gruppi di funzionalità e da un data frame Pandas.

base_data = [[1, 187512346.0, 123, 128], [2, 187512347.0, 168, 258], [3, 187512348.0, 125, 184], [1, 187512349.0, 195, 206]] base_data_df = pd.DataFrame( base_data, columns=["base_id", "base_time", "base_feature_1", "base_feature_2"] ) builder = feature_store.create_dataset( base=base_data_df, event_time_identifier_feature_name='base_time', record_identifier_feature_name='base_id', output_path=f"s3://{s3_bucket_name}" ).with_feature_group(first_fg ).with_feature_group(second_fg, "base_id", ["base_feature_1"])

Il Feature Store APIs fornisce metodi di supporto per la create_dataset funzione. Puoi usarle per le seguenti operazioni:

  • Creazione di un set di dati da più gruppi di funzionalità.

  • Creazione di un set di dati da più gruppi di funzionalità e da un data frame Pandas.

  • Creazione di un set di dati da un singolo gruppo di funzionalità e da un data frame Pandas.

  • Creazione di un set di dati utilizzando un’unione precisa nel momento in cui i record del gruppo di funzionalità unito si succedono in sequenza.

  • Creazione di un set di dati con i record duplicati, invece di seguire il comportamento predefinito della funzione.

  • Creazione di un set di dati con i record eliminati, invece di seguire il comportamento predefinito della funzione.

  • Creazione un set di dati per i periodi di tempo specificati.

  • Salva il set di dati come file. CSV

  • Salvataggio del set di dati come data frame Pandas.

Il gruppo di funzionalità di base è un concetto importante per le unioni. Il gruppo di funzionalità di base è quello a cui vengono uniti altri gruppi di funzionalità o il data frame Pandas. Per ogni set di dati

Puoi aggiungere i seguenti metodi opzionali alla funzione create_dataset per configurare il modo in cui stai creando il set di dati:

  • with_feature_group: esegue un'unione interna tra il gruppo di funzionalità di base e un altro gruppo di funzionalità utilizzando l'identificativo del record e il nome della funzionalità di destinazione nel gruppo di funzionalità di base. Di seguito vengono fornite informazioni sui parametri specificati:

    • feature_group: il gruppo di funzionalità da unire.

    • target_feature_name_in_base: il nome della funzionalità nel gruppo di funzionalità di base che stai utilizzando come chiave per l'unione. L'identificativo del record negli altri gruppi di funzionalità rappresenta le altre chiavi utilizzate dal Feature Store nell’unione.

    • included_feature_names: un elenco di stringhe che rappresentano i nomi delle funzionalità del gruppo di funzionalità di base. Puoi anche utilizzare il campo per specificare le funzionalità da includere nel set di dati.

    • feature_name_in_target: stringa opzionale che rappresenta la funzionalità nel gruppo di funzionalità di destinazione che verrà confrontata con la funzionalità di destinazione nel gruppo di funzionalità di base.

    • join_comparator: JoinComparatorEnum opzionale che rappresenta il comparatore usato durante l’unione della funzionalità di destinazione nel gruppo di funzionalità di base con la funzionalità nel gruppo di funzionalità di destinazione. Questi valori JoinComparatorEnum possono essere GREATER_THAN, GREATER_THAN_OR_EQUAL_TO, LESS_THAN, LESS_THAN_OR_EQUAL_TO, NOT_EQUAL_TO o EQUALS per impostazione predefinita.

    • join_type: JoinTypeEnum opzionale che rappresenta il tipo di unione tra i gruppi di funzionalità di base e di destinazione. Questi valori JoinTypeEnum possono essere LEFT_JOIN, RIGHT_JOIN, FULL_JOIN, CROSS_JOIN o INNER_JOIN per impostazione predefinita.

  • with_event_time_range: crea un set di dati utilizzando l'intervallo di tempo dell'evento specificato.

  • as_of: crea un set di dati fino a una marcatura temporale specificata. Ad esempio, se si specifica datetime(2021, 11, 28, 23, 55, 59, 342380) come valore, viene creato un set di dati fino al 28 novembre 2021.

  • point_time_accurate_join: crea un set di dati in cui tutti i valori temporali dell'evento del gruppo di funzionalità di base sono inferiori a tutti i valori temporali dell'evento del gruppo di funzionalità o del data frame Pandas da unire.

  • include_duplicated_records: mantiene i valori duplicati nei gruppi di funzionalità.

  • include_deleted_records: mantiene i valori eliminati nei gruppi di funzionalità.

  • with_number_of_recent_records_by_record_identifier: un numero intero specificato per determinare quanti dei record più recenti compaiono nel set di dati.

  • with_number_of_records_by_record_identifier: un numero intero che rappresenta il numero di record presenti nel set di dati.

Dopo aver configurato il set di dati, è possibile specificare l'output utilizzando uno dei seguenti metodi:

  • to_csv_file— Salva il set di dati come file. CSV

  • to_dataframe: salva il set di dati come data frame Pandas.

È possibile recuperare i dati disponibili dopo un periodo di tempo specifico. Il codice seguente recupera i dati dopo una marcatura temporale.

fg1 = FeatureGroup("example-feature-group-1") feature_store.create_dataset( base=fg1, output_path="s3://example-S3-path" ).with_number_of_records_from_query_results(5).to_csv_file()

Puoi inoltre recuperare i dati da un determinato periodo di tempo. È possibile utilizzare il codice seguente per ottenere dati per un intervallo di tempo specifico:

fg1 = FeatureGroup("fg1") feature_store.create_dataset( base=fg1, output_path="example-S3-path" ).with_event_time_range( datetime(2021, 11, 28, 23, 55, 59, 342380), datetime(2020, 11, 28, 23, 55, 59, 342380) ).to_csv_file() #example time range specified in datetime functions

Potresti voler unire più gruppi di funzionalità a un data frame Pandas in cui i valori temporali dell'evento del gruppo di funzionalità si verifichino non più tardi dell'ora dell'evento del frame di dati. Utilizza il codice seguente come modello per eseguire l'unione.

fg1 = FeatureGroup("fg1") fg2 = FeatureGroup("fg2") events = [['2020-02-01T08:30:00Z', 6, 1], ['2020-02-02T10:15:30Z', 5, 2], ['2020-02-03T13:20:59Z', 1, 3], ['2021-01-01T00:00:00Z', 1, 4]] df = pd.DataFrame(events, columns=['event_time', 'customer-id', 'title-id']) feature_store.create_dataset( base=df, event_time_identifier_feature_name='event_time', record_identifier_feature_name='customer_id', output_path="s3://example-S3-path" ).with_feature_group(fg1, "customer-id" ).with_feature_group(fg2, "title-id" ).point_in_time_accurate_join( ).to_csv_file()

È possibile inoltre recuperare i dati disponibili dopo un periodo di tempo specifico. Il codice seguente recupera i dati dopo l’ora specificata dalla marcatura temporale nel metodo as_of.

fg1 = FeatureGroup("fg1") feature_store.create_dataset( base=fg1, output_path="s3://example-s3-file-path" ).as_of(datetime(2021, 11, 28, 23, 55, 59, 342380) ).to_csv_file() # example datetime values

Query di Amazon Athena di esempio

Puoi scrivere query in Amazon Athena per creare un set di dati dai tuoi gruppi di funzionalità. Puoi anche scrivere query che creano un set di dati a partire da gruppi di funzionalità e da un singolo data frame Pandas.

Esplorazione interattiva

Questa query seleziona i primi 1000 record. 

SELECT * FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName> LIMIT 1000

Istantanea più recente senza duplicati

Questa query seleziona i record non duplicati più recenti.

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>) WHERE row_num = 1;

Ultima istantanea senza duplicati e record eliminati nell'archivio offline

Questa query filtra tutti i record eliminati e seleziona i record non duplicati dall'archivio offline. 

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>) WHERE row_num = 1 and  NOT is_deleted;

Time Travel senza duplicati e record eliminati nell'archivio offline

Questa query filtra tutti i record eliminati e seleziona i record non duplicati da un particolare momento.

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>     where <EventTimeFeatureName> <= timestamp '<timestamp>')     -- replace timestamp '<timestamp>' with just <timestamp>  if EventTimeFeature is of type fractional WHERE row_num = 1 and NOT is_deleted