

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 Tagging erlaubt, können "AccessDenied" Fehler beim Versuch, Ressourcen zu erstellen, auftreten. Weitere Informationen finden Sie unter [Erteilen Sie Berechtigungen für das Taggen von SageMaker KI-Ressourcen](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS verwaltete Richtlinien für Amazon SageMaker AI](security-iam-awsmanpol.md)die 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](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-featurestore/sagemaker_featurestore_fraud_detection_python_sdk.html). Wir empfehlen Ihnen, dieses Notebook in Studio Classic, Notebook-Instances oder JupyterLab auszuführen, da der Code in diesem Handbuch konzeptionell ist und beim Kopieren nicht vollständig funktioniert.

Verwenden Sie Folgendes, um das [amazon-sagemaker-examples GitHub aws/-Repository](https://github.com/aws/amazon-sagemaker-examples) zu klonen, das das Beispiel-Notizbuch enthält.
+ **Für Studio Classic**

  Starten Sie zuerst Studio Classic. Sie können Studio Classic öffnen, wenn Studio oder Studio Classic als Standardkonfiguration aktiviert ist. Informationen zum Öffnen von Studio Classic finden Sie unter[Starten Sie Amazon SageMaker Studio Classic mit der Amazon SageMaker AI-Konsole](studio-launch.md#studio-launch-console).

  Klonen Sie das [amazon-sagemaker-examples GitHub aws/-Repository](https://github.com/aws/amazon-sagemaker-examples) nach Studio Classic, indem Sie den Schritten unter folgen. [Klonen Sie ein Git-Repository in Amazon SageMaker Studio Classic](studio-tasks-git.md)
+ **Für SageMaker Amazon-Notebook-Instances**

  Starten Sie zunächst die SageMaker Notebook-Instance, indem Sie den Anweisungen unter folgen[Zugreifen auf Notebook-Instances](howitworks-access-ws.md).

  Befolgen Sie dann die Anweisungen unter [Fügen Sie Ihrem Amazon SageMaker AI-Konto ein Git-Repository hinzu](nbi-git-resource.md).

Nachdem Sie die SageMaker KI-Beispielnotizbücher haben, navigieren Sie zum `amazon-sagemaker-examples/sagemaker-featurestore` Verzeichnis und öffnen Sie das Beispielnotizbuch [Fraud Detection with Amazon SageMaker Feature Store](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-featurestore/sagemaker_featurestore_fraud_detection_python_sdk.html).

## Schritt 1: Einrichten von Feature-Store-Sitzungen


Um mit der Nutzung von Feature Store zu beginnen, erstellen Sie eine SageMaker AI-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 AI-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 unter [Hinzufügen von Richtlinien zu Ihrer IAM-Rolle](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
)
```

## 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](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-data-export.html#data-wrangler-data-export-feature-store) 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 für Python (Boto3) Implementierung, die Sie anstelle des SageMaker Python-SDK verwenden können.

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

**Topics**
+ [

### Beschreiben einer Funktionsgruppe
](#feature-store-describe-feature-groups)
+ [

### Listet Feature-Gruppen auf.
](#feature-store-list-feature-groups)
+ [

### Ablegen eines Datensatzes in einer Feature-Gruppe.
](#feature-store-put-records-feature-group)
+ [

### Abrufen eines Datensatzes aus einer Feature-Gruppe.
](#feature-store-get-records-feature-group)
+ [

### Generieren Sie Hive-DDL-Befehle
](#feature-store-generate-hive-ddl-commands-feature-group)
+ [

### Erstellen eines Trainingsdatensatzes
](#feature-store-build-training-dataset)
+ [

### Eine Athena-Abfrage schreiben und ausführen
](#feature-store-write-athena-query)
+ [

### Feature-Gruppe löschen
](#feature-store-delete-feature-group)

### 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-DDL-Befehle


Die `FeatureStore` Klasse des SageMaker Python-SDK bietet auch die Funktionalität zum Generieren von Hive-DDL-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\$1name` 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 mit SQL für diese Feature-Gruppen und führen dann die Abfrage mit dem `.run()` Befehl aus und geben Ihren Amazon-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 [Löschen einer API einer Feature-Gruppe](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteFeatureGroup.html).