Betrugserkennung mit einem Beispiel-Notebook aus dem Feature Store - Amazon SageMaker

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 Genehmigung 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. Wir empfehlen, dieses Notizbuch in Studio Classic, Notebook-Instances oder Jupyter auszuführenLab weil der Code in diesem Handbuch konzeptionell ist und nicht voll funktionsfähig ist, wenn er kopiert wird.

Gehen Sie wie folgt vor, um das amazon-sagemaker-examples GitHub aws/-Repository zu klonen, das das Beispiel-Notizbuch enthält.

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 umfasst auch 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:

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 ein AWS Glue Datenkatalog, wenn Sie Feature-Gruppen erstellen, und Sie können ihn deaktivieren, wenn Sie möchten. 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 AWS Glue Tabelle, die vom 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.