翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
次の手順に従って、サンプルノートブックを含む aws/amazon-sagemaker-examples
-
Studio Classic の場合
Studio Classic を起動します。Studio Classic または Studio Classic がデフォルトのエクスペリエンスとして有効になっている場合は、Studio Classic を開くことができます。Studio Classic を開く方法については、「」を参照してくださいAmazon SageMaker コンソールを使用して Studio Classic を起動する。
の手順に従って、aws/amazon-sagemaker-examples
GitHub リポジトリを Studio Classic にクローンします SageMaker Studio Classic で Git リポジトリをクローンする。 -
Amazon SageMaker ノートブックインスタンスの場合
の手順に従って SageMaker ノートブックインスタンスを起動しますノートブックインスタンスへのアクセス。
「」の指示に従って、サンプルがノートブックに既にあるかどうかを確認しますノートブックの例にアクセスする。そうでない場合は、「」の指示に従ってくださいAmazon SageMaker アカウントに Git リポジトリを追加する。
これでノートブック SageMaker の例ができました。 amazon-sagemaker-examples/sagemaker-featurestore
ディレクトリに移動し、Introduction to Feature Store
ステップ 1: SageMaker セッションを設定する
Feature Store の使用を開始するには、 SageMaker セッションを作成します。次に、機能に使用する Amazon Simple Storage Service (Amazon S3) バケットを設定します。Amazon S3 バケットはオフラインストアです。次のコードは SageMaker デフォルトのバケットを使用し、カスタムプレフィックスを追加します。
注記
ノートブックの実行に使用するロールには、AmazonS3FullAccess
と AmazonSageMakerFeatureStoreAccess
のマネージドポリシーががアタッチされている必要があります。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 に個別に保存する場合のユースケースについて説明します。この例では、データウェアハウスのデータ (顧客データ) とリアルタイムストリーミングサービスのデータ (注文データ) を考えます。
ステップ 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 )
特徴量グループが作成されたことを確認するには、 DescribeFeatureGroup
と ListFeatureGroups
を使用してそれを表示します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)、 ingest
API呼び出しを使用します。Python (Boto3) SDKで を使用している場合は、 PutRecord
を使用しますAPI。この両方のオプションのデータ取り込みには 1 分もかかりません。この例では、 SageMaker SDK for Python (Boto3) を使用しているため、 ingest
API呼び出しを使用します。
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()