Feature Store サンプルノートブックの概要 - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Feature Store サンプルノートブックの概要

重要

Amazon SageMaker Studio または Amazon SageMaker Studio Classic が Amazon SageMaker リソースを作成できるようにするカスタムIAMポリシーは、それらのリソースにタグを追加するアクセス許可も付与する必要があります。Studio と Studio Classic は、作成したリソースに自動的にタグ付けするため、リソースにタグを追加するアクセス許可が必要です。IAM ポリシーで Studio と Studio Classic がリソースの作成を許可されていてもタグ付けが許可されていない場合、リソースの作成を試みるとAccessDenied「」エラーが発生する可能性があります。詳細については、「リソースにタグ付けするための SageMakerアクセス許可を提供する」を参照してください。

AWS Amazon のマネージドポリシー SageMaker SageMaker リソースを作成するアクセス許可を付与する には、それらのリソースの作成中にタグを追加するアクセス許可が既に含まれています。

このトピックのサンプルコードは、「Introduction to Feature Store」のサンプルノートブックを参照しています。このノートブックは Studio Classic、ノートブックインスタンス、またはこのガイドのコードは概念的であり、コピーしても完全には機能しない JupyterLab ため、実行することをお勧めします。

次の手順に従って、サンプルノートブックを含む aws/amazon-sagemaker-examples GitHub リポジトリのクローンを作成します。

これでノートブック SageMaker の例ができました。 amazon-sagemaker-examples/sagemaker-featurestore ディレクトリに移動し、Introduction to Feature Store のサンプルノートブックを開きます。

ステップ 1: SageMaker セッションを設定する

Feature Store の使用を開始するには、 SageMaker セッションを作成します。次に、機能に使用する Amazon Simple Storage Service (Amazon S3) バケットを設定します。Amazon S3 バケットはオフラインストアです。次のコードは SageMaker デフォルトのバケットを使用し、カスタムプレフィックスを追加します。

注記

ノートブックの実行に使用するロールには、AmazonS3FullAccessAmazonSageMakerFeatureStoreAccess のマネージドポリシーががアタッチされている必要があります。IAM ロールにポリシーを追加する方法については、「」を参照してくださいIAM ロールへのポリシーの追加

# SageMaker Python SDK version 2.x is required import sagemaker import sys
import boto3 import pandas as pd import numpy as np import io from sagemaker.session import Session from sagemaker import get_execution_role prefix = 'sagemaker-featurestore-introduction' role = get_execution_role() sagemaker_session = sagemaker.Session() region = sagemaker_session.boto_region_name s3_bucket_name = sagemaker_session.default_bucket()

ステップ 2: データを検査する

このノートブック例では、ノートブック全体をホストするGitHub リポジトリから合成データを取り込みます。

customer_data = pd.read_csv("data/feature_store_introduction_customer.csv") orders_data = pd.read_csv("data/feature_store_introduction_orders.csv") print(customer_data.head()) print(orders_data.head())

次の図は、Feature Store がデータを取り込む前にデータが通過するステップを示しています。このノートブックでは、複数のソースからのデータがあり、それらを Feature Store に個別に保存する場合のユースケースについて説明します。この例では、データウェアハウスのデータ (顧客データ) とリアルタイムストリーミングサービスのデータ (注文データ) を考えます。

このサンプルノートブックの Feature Store での特徴量グループの作成とデータ取り込み。

ステップ 3: 特徴グループを作成する

まず、customer_data と orders_data の特徴グループ名を作成します。次に、 用の customer_dataと 用の 2 つの特徴量グループを作成しますorders_data

import time from time import strftime, gmtime customers_feature_group_name = 'customers-feature-group-' + strftime('%d-%H-%M-%S', gmtime()) orders_feature_group_name = 'orders-feature-group-' + strftime('%d-%H-%M-%S', gmtime())

customers_data と のFeatureGroupオブジェクトをインスタンス化しますorders_data

from sagemaker.feature_store.feature_group import FeatureGroup customers_feature_group = FeatureGroup( name=customers_feature_group_name, sagemaker_session=sagemaker_session ) orders_feature_group = FeatureGroup( name=orders_feature_group_name, sagemaker_session=sagemaker_session )
import time current_time_sec = int(round(time.time())) record_identifier_feature_name = "customer_id"

データフレームに EventTime 特徴を追加します。このパラメータは必須であり、各データポイントをタイムスタンプします。

customer_data["EventTime"] = pd.Series([current_time_sec]*len(customer_data), dtype="float64") orders_data["EventTime"] = pd.Series([current_time_sec]*len(orders_data), dtype="float64")

特徴量グループに特徴量定義をロードします。

customers_feature_group.load_feature_definitions(data_frame=customer_data) orders_feature_group.load_feature_definitions(data_frame=orders_data)

次の が createを呼び出して、orders_feature_groupそれぞれ customers_feature_groupと の 2 つの特徴量グループを作成します。

customers_feature_group.create( s3_uri=f"s3://{s3_bucket_name}/{prefix}", record_identifier_name=record_identifier_feature_name, event_time_feature_name="EventTime", role_arn=role, enable_online_store=True ) orders_feature_group.create( s3_uri=f"s3://{s3_bucket_name}/{prefix}", record_identifier_name=record_identifier_feature_name, event_time_feature_name="EventTime", role_arn=role, enable_online_store=True )

特徴量グループが作成されたことを確認するには、 DescribeFeatureGroupListFeatureGroups を使用してそれを表示しますAPIs。

customers_feature_group.describe()
orders_feature_group.describe()
sagemaker_session.boto_session.client('sagemaker', region_name=region).list_feature_groups() # We use the boto client to list FeatureGroups

ステップ 4: 特徴グループにデータを取り込む

特徴量グループを作成したら、そのグループにデータを配置できます。を使用している場合 SageMakerは AWS SDK for Python (Boto3)、 ingestAPI呼び出しを使用します。Python (Boto3) SDKで を使用している場合は、 PutRecord を使用しますAPI。この両方のオプションのデータ取り込みには 1 分もかかりません。この例では、 SageMaker SDK for Python (Boto3) を使用しているため、 ingestAPI呼び出しを使用します。

def check_feature_group_status(feature_group): status = feature_group.describe().get("FeatureGroupStatus") while status == "Creating": print("Waiting for Feature Group to be Created") time.sleep(5) status = feature_group.describe().get("FeatureGroupStatus") print(f"FeatureGroup {feature_group.name} successfully created.") check_feature_group_status(customers_feature_group) check_feature_group_status(orders_feature_group)
customers_feature_group.ingest( data_frame=customer_data, max_workers=3, wait=True )
orders_feature_group.ingest( data_frame=orders_data, max_workers=3, wait=True )

任意の顧客レコード ID である 573291 get_recordを使用して、データが特徴量グループに取り込まれていることを確認します。

customer_id = 573291 sample_record = sagemaker_session.boto_session.client('sagemaker-featurestore-runtime', region_name=region).get_record(FeatureGroupName=customers_feature_group_name, RecordIdentifierValueAsString=str(customer_id))
print(sample_record)

以下は、 batch_get_record を使用してレコードのバッチを取得する方法を示しています。

all_records = sagemaker_session.boto_session.client( "sagemaker-featurestore-runtime", region_name=region ).batch_get_record( Identifiers=[ { "FeatureGroupName": customers_feature_group_name, "RecordIdentifiersValueAsString": ["573291", "109382", "828400", "124013"], }, { "FeatureGroupName": orders_feature_group_name, "RecordIdentifiersValueAsString": ["573291", "109382", "828400", "124013"], }, ] )
print(all_records)

ステップ 5:クリーンアップ

ここでは、作成した特徴量グループを削除します。

customers_feature_group.delete() orders_feature_group.delete()

ステップ 6:次のステップ

この例では、Feature Store の開始方法、特徴量グループの作成方法、およびそれらへのデータの取り込み方法を学習しました。

Feature Store を不正検出のユースケースに使用する方法の詳細な例については、「Feature Store での不正検出」を参照してください。

ステップ 7: プログラマのコード例

このノートブックでは、さまざまなAPI呼び出しを使用しました。それらのほとんどは SageMaker Python を介してアクセスできますがSDK、一部は Boto3 内のみにあります。Feature Store オブジェクトで SageMaker Python SDKAPI呼び出しを直接呼び出すことができますが、Boto3 内に存在するAPI呼び出しを呼び出すには、まず Boto3 クライアントと SageMaker セッション、例えば から Boto3 クライアントにアクセスする必要がありますsagemaker_session.boto_session.client()

このノートブックのAPI呼び出しのリストを次に示します。これらの呼び出しは、SDK for Python および は Boto3 にあります。

SDK Python (Boto3) APIコール用

describe() ingest() delete() create() load_feature_definitions()

Boto3 APIコール

list_feature_groups() get_record()