Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Betrugserkennung mit einem Beispiel-Notebook aus dem Feature Store
Wichtig
Benutzerdefinierte IAM Richtlinien, die es Amazon SageMaker Studio oder Amazon SageMaker Studio Classic ermöglichen, SageMaker Amazon-Ressourcen zu erstellen, müssen auch Berechtigungen zum Hinzufügen von Tags zu diesen Ressourcen gewähren. Die Berechtigung zum Hinzufügen von Tags zu Ressourcen ist erforderlich, da Studio und Studio Classic automatisch alle von ihnen erstellten Ressourcen taggen. Wenn eine IAM Richtlinie Studio und Studio Classic das Erstellen von Ressourcen, aber kein Taggen erlaubt, können "AccessDenied" Fehler auftreten, wenn versucht wird, Ressourcen zu erstellen. Weitere Informationen finden Sie unter Stellen Sie Berechtigungen für das Taggen von Ressourcen SageMaker bereit.
AWS Verwaltete Richtlinien für Amazon SageMakerdie Berechtigungen zum Erstellen von SageMaker Ressourcen gewähren, beinhalten bereits Berechtigungen zum Hinzufügen von Tags beim Erstellen dieser Ressourcen.
Der Beispielcode auf dieser Seite bezieht sich auf das Beispielnotizbuch: Fraud Detection with Amazon SageMaker Feature Store
Gehen Sie wie folgt vor, um das amazon-sagemaker-examples GitHub aws/-Repository
-
Für Studio Classic
Starten Sie zuerst Studio Classic. Sie können Studio Classic öffnen, wenn Studio oder Studio Classic als Standarderlebnis aktiviert ist. Informationen zum Öffnen von Studio Classic finden Sie unterStarten Sie Studio Classic mit der SageMaker Amazon-Konsole.
Klonen Sie das amazon-sagemaker-examples GitHub aws/-Repository
nach Studio Classic, indem Sie die Schritte unter befolgen. Klonen Sie ein Git-Repository in SageMaker Studio Classic -
Für SageMaker Amazon-Notebook-Instances
Starten Sie zunächst die SageMaker Notebook-Instance, indem Sie den Anweisungen unter folgenZugreifen auf Notebook-Instances.
Prüfen Sie anhand der Anweisungen unter, ob sich die Beispiele bereits in Ihren Notizbüchern befindenRufen Sie Beispiel-Notizbücher auf. Falls nicht, folgen Sie den Anweisungen unterFügen Sie Ihrem SageMaker Amazon-Konto ein Git-Repository hinzu.
Nachdem Sie die SageMaker Beispiel-Notizbücher haben, navigieren Sie zum amazon-sagemaker-examples/sagemaker-featurestore
Verzeichnis und öffnen Sie das Beispiel-Notizbuch Fraud Detection with Amazon SageMaker Feature Store
Schritt 1: Richten Sie Ihre Feature Store-Sitzung ein
Um mit der Nutzung des Feature Store zu beginnen, erstellen Sie eine SageMaker Sitzung, eine Boto3-Sitzung und eine Feature Store-Sitzung. Richten Sie außerdem den Amazon-S3-Bucket ein, den Sie für Ihre Funktionen verwenden möchten. Dies ist Ihr Offline-Speicher. Der folgende Code verwendet den SageMaker Standard-Bucket und fügt ihm ein benutzerdefiniertes Präfix hinzu.
Anmerkung
Der Rolle, die Sie zum Ausführen des Notebooks verwenden, müssen die folgenden verwalteten Richtlinien zugeordnet sein: AmazonSageMakerFullAccess
und AmazonSageMakerFeatureStoreAccess
. Informationen zum Hinzufügen von Richtlinien zu Ihrer IAM Rolle finden Sie unterHinzufügen von Richtlinien zu Ihrer IAM Rolle.
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 )
Schritt 2: Datensätze laden und Daten in Feature-Gruppen partitionieren
Laden Sie Ihre Daten für jedes Ihrer Features in Datenrahmen. Sie verwenden diese Datenrahmen, nachdem Sie die Feature-Gruppe eingerichtet haben. Im Beispiel zur Betrugserkennung können Sie diese Schritte im folgenden Code nachlesen.
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"})
Schritt 3: Einrichten von Feature-Gruppen
Wenn Sie Ihre Feature-Gruppen einrichten, müssen Sie die Feature-Namen mit einem eindeutigen Namen anpassen und jede Feature-Gruppe mit der FeatureGroup
Klasse einrichten.
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)
Im Beispiel zur Betrugserkennung lauten die beiden Funktionsgruppen beispielsweise identity
und transaction
. Im folgenden Code können Sie sehen, wie die Namen mit einem Zeitstempel angepasst werden. Anschließend wird jede Gruppe eingerichtet, indem der Name und die Sitzung übergeben werden.
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)
Schritt 4: Einrichten von Datensatz-Identifikations- und Ereigniszeitfunktionen
In diesem Schritt geben Sie einen Namen für die Datensatz-ID und einen Namen für das Feature zur Ereigniszeit an. Dieser Name ist der Spalte mit den entsprechenden Features in Ihren Daten zugeordnet. Im Beispiel zur Betrugserkennung lautet die interessierende Spalte beispielsweise TransactionID
. EventTime
kann an Ihre Daten angehängt werden, wenn kein Zeitstempel verfügbar ist. Im folgenden Code können Sie sehen, wie diese Variablen festgelegt und dann EventTime
an die Daten beider Funktionen angehängt werden.
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")
Schritt 5: Laden von Feature-Definitionen
Sie können die Feature-Definitionen jetzt laden, indem Sie einen Datenrahmen mit den Feature-Daten übergeben. Im folgenden Code für das Beispiel zur Betrugserkennung werden die Identitätsfunktion und die Transaktionsfunktion jeweils mithilfe von geladen load_feature_definitions
, und diese Funktion erkennt automatisch den Datentyp jeder Datenspalte. Entwickler, die eher ein Schema als automatische Erkennung verwenden, finden im Beispiel Feature-Gruppen aus Data Wrangler exportieren Code, der zeigt, wie das Schema geladen, zugeordnet und als ein Element hinzugefügt wird, mit dem Sie FeatureDefinition
das erstellen können FeatureGroup
. Dieses Beispiel behandelt auch eine AWS SDK for Python (Boto3) Implementierung, die Sie anstelle von SageMaker Python verwenden könnenSDK.
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
Schritt 6: Erstellen einer Feature-Gruppe
In diesem Schritt erstellen Sie mit der create
Funktion die Feature-Gruppe. Im folgenden Codebeispiel werden die verfügbaren Parameter angezeigt. Der Online-Speicher wird standardmäßig nicht erstellt, daher müssen Sie ihn so einstellen, als True
ob Sie ihn aktivieren möchten. Dies s3_uri
ist der S3-Bucket-Speicherort Ihres Offline-Speichers.
# 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"])
Der folgende Code aus dem Beispiel für die Betrugserkennung zeigt, dass jede der beiden Funktionsgruppen, die erstellt werden, nur minimal create
aufgerufen wird.
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 )
Wenn Sie eine Featuregruppe erstellen, dauert es einige Zeit, bis die Daten geladen sind, und Sie müssen warten, bis die Featuregruppe erstellt ist, bevor Sie sie verwenden können. Sie können mit den folgenden Methoden Statusprüfungen anzeigen und damit arbeiten.
status = feature_group.describe().get("FeatureGroupStatus")
Während die Feature-Gruppe erstellt wird, erhalten Creating
Sie eine Antwort. Wenn dieser Schritt erfolgreich abgeschlossen wurde, lautet die Antwort Created
. Andere mögliche Status sind CreateFailed
, Deleting
oder DeleteFailed
.
Schritt 7: Arbeiten Sie mit Feature-Gruppen
Nachdem Sie Ihre Feature-Gruppe eingerichtet haben, können Sie einen der folgenden Vorgänge ausführen:
Themen
Beschreiben einer Funktionsgruppe
Sie können Informationen zu Ihrer Feature-Gruppe mit der describe
Funktion abrufen.
feature_group.describe()
Listet Feature-Gruppen auf.
Mit der list_feature_groups
Funktion können Sie alle Ihre Feature-Gruppen auflisten.
sagemaker_client.list_feature_groups()
Ablegen eines Datensatzes in einer Feature-Gruppe.
Sie können die ingest
Funktion verwenden, um Ihre Feature-Daten zu laden. Sie übergeben einen Datenrahmen mit Feature-Daten, legen die Anzahl der Worker fest und entscheiden, ob Sie warten möchten, bis die Daten zurückkehren oder nicht. Das folgende Beispiel veranschaulicht die Verwendung des ingest
-Parameters.
feature_group.ingest( data_frame=feature_data, max_workers=3, wait=True )
Führen Sie die Funktion für jede Feature-Gruppe, über die ingest
Sie verfügen, für die Feature-Daten aus, die Sie laden möchten.
Abrufen eines Datensatzes aus einer Feature-Gruppe.
Sie können die get_record
Funktion verwenden, um die Daten für ein bestimmtes Feature anhand seiner Datensatz-ID abzurufen. Im folgenden Beispiel wird eine Beispiel-ID verwendet, um den Datensatz abzurufen.
record_identifier_value = str(2990130) featurestore_runtime.get_record(FeatureGroupName=transaction_feature_group_name, RecordIdentifierValueAsString=record_identifier_value)
Eine Beispielantwort aus dem Beispiel zur Betrugserkennung:
... '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'}, ...
Generieren Sie Hive-Befehle DDL
Die SageMaker SDK FeatureStore
Python-Klasse bietet auch die Funktionalität zum Generieren von DDL Hive-Befehlen. Das Schema der Tabelle wird auf der Grundlage der Feature-Definitionen generiert. Spalten werden nach dem Feature-Namen benannt und der Datentyp wird anhand des Feature-Typs abgeleitet.
print(feature_group.as_hive_ddl())
Beispielausgabe:
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 ...
Erstellen eines Trainingsdatensatzes
Feature Store erstellt automatisch einen AWS Glue Datenkatalog, wenn Sie Feature-Gruppen erstellen, und Sie können diesen bei Bedarf deaktivieren. Im Folgenden wird beschrieben, wie Sie einen einzelnen Trainingsdatensatz mit Feature-Werten aus Identity- und Transaktions-Feature-Gruppen erstellen, die zuvor in diesem Thema erstellt wurden. Im Folgenden wird außerdem beschrieben, wie Sie eine Amazon Athena Athena-Abfrage ausführen, um im Offline-Speicher gespeicherte Daten aus Identitäts- und Transaktionsfunktionsgruppen zu verknüpfen.
Erstellen Sie zunächst eine Athena-Abfrage, die sowohl Identitäts- als auch Transaktionsfunktionsgruppen verwendet athena_query()
. Der `table_name` ist die AWS Glue Tabelle, die von Feature Store automatisch generiert wird.
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
Eine Athena-Abfrage schreiben und ausführen
Sie schreiben Ihre Abfrage mithilfe SQL dieser Feature-Gruppen und führen dann die Abfrage mit dem .run()
Befehl aus und geben Ihren Amazon S3 S3-Bucket-Speicherort für den Datensatz an, der dort gespeichert werden soll.
# 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()
Von hier aus können Sie ein Modell anhand dieses Datensatzes trainieren und dann Inferenzen durchführen.
Feature-Gruppe löschen
Mit der delete
Funktion können Sie eine Feature-Gruppe löschen.
feature_group.delete()
Das folgende Codebeispiel stammt aus dem Beispiel zur Betrugserkennung.
identity_feature_group.delete() transaction_feature_group.delete()
Weitere Informationen finden Sie unter Eine Feature-Gruppe löschen API.