「Amazon SageMaker Feature Store Feature Processorを使用して、MLの洞察を解き放つ」

Unlocking ML insights with Amazon SageMaker Feature Store Feature Processor.

Amazon SageMaker Feature Storeは、機械学習(ML)のための特徴量エンジニアリングを自動化するエンドツーエンドのソリューションを提供します。多くのMLユースケースでは、ログファイル、センサーの読み取り、トランザクションレコードなどの生データを、モデルトレーニングに最適化された有意義な特徴量に変換する必要があります。

特徴量の品質は、高精度なMLモデルを確保するために重要です。集計、エンコーディング、正規化などを使用して生データを特徴量に変換することは、しばしば必要であり、かなりの努力を必要とする場合もあります。エンジニアは、各ユースケースごとにPythonやSparkでカスタムのデータ前処理や集計ロジックを手動で記述する必要があります。

この一般的な作業は手間がかかり、繰り返しであり、エラーの原因となります。SageMaker Feature Storeの特徴量プロセッサは、生データをバッチトレーニング用の集約された特徴量に自動的に変換することで、この負担を軽減します。エンジニアは簡単なデータ変換関数を提供し、それをSpark上でスケールで実行し、基礎となるインフラストラクチャを管理します。これにより、データサイエンティストやデータエンジニアは、実装の詳細ではなく、特徴量エンジニアリングの論理に集中することができます。

この記事では、自動車販売会社がFeature Processorを使用して生の販売トランザクションデータを特徴量に変換する方法を3つのステップで紹介します:

  1. データ変換のローカル実行。
  2. Sparkを使用したスケールでのリモート実行。
  3. パイプラインを介した運用化。

SageMaker Feature Storeが生データを取り込み、Sparkを使用して特徴量変換をリモートで実行し、結果の集計された特徴量を特徴量グループにロードする様子を示します。これらのエンジニアリングされた特徴量は、MLモデルのトレーニングに使用することができます。

このユースケースでは、SageMaker Feature Storeが生の自動車販売データを構造化された特徴量に変換する方法を見ていきます。これらの特徴量を使用して、次のような洞察を得ることができます:

  • 2010年以降における赤いコンバーチブルの平均価格と最高価格
  • 最高の走行距離と価格を持つモデル
  • 年ごとの新車と中古車の販売トレンド
  • 場所ごとの平均MSRPの違い

SageMaker Feature Storeパイプラインによって、新しいデータが入力されるたびに特徴量が更新され、企業は時間の経過に応じて継続的に洞察を得ることができます。

ソリューションの概要

私たちは、car_data.csvというデータセットを使用して作業します。このデータセットには、企業が販売した中古車と新車のモデル、年、ステータス、走行距離、価格、およびMSRPなどの仕様が含まれています。次のスクリーンショットは、データセットの例を示しています。

解決策のノートブックfeature_processor.ipynbには、この投稿で説明する以下の主要なステップが含まれています:

  1. car-dataという名前の特徴量グループと、生の自動車販売レコード用の特徴量グループであるcar-data-aggregatedを作成します。
  2. @feature_processorデコレータを使用して、Amazon Simple Storage Service(Amazon S3)からcar-data特徴量グループにデータをロードします。
  3. @feature_processor codeをSparkアプリケーションとしてリモートで実行してデータを集計します。
  4. SageMakerパイプラインを介して特徴量プロセッサを運用化し、実行をスケジュールします。
  5. Amazon SageMaker Studioで特徴量処理パイプラインとラインナップを探索します。
  6. 集計された特徴量を使用してMLモデルをトレーニングします。

前提条件

このチュートリアルを実行するには、以下が必要です:

  • AWSアカウント。
  • SageMaker Studioのセットアップ。
  • AWS Identity and Access Management(IAM)の権限。このIAMロールを作成する際には、最小特権アクセスを許可するベストプラクティスに従ってください。

この投稿では、SageMaker Python SDKを使用してFeature Processorを始める方法を示した以下のノートブックを参照しています。

特徴量グループの作成

特徴量グループを作成するには、以下の手順を完了します:

  1. 次のようにcar-dataの特徴量グループ定義を作成します:

    # Feature Group - Car Sales CAR_SALES_FG_NAME = "car-data"
    CAR_SALES_FG_ARN = f"arn:aws:sagemaker:{region}:{aws_account_id}:feature-group/{CAR_SALES_FG_NAME}"
    CAR_SALES_FG_ROLE_ARN = offline_store_role
    CAR_SALES_FG_OFFLINE_STORE_S3_URI = f"s3://{s3_bucket}/{s3_offline_store_prefix}"
    CAR_SALES_FG_FEATURE_DEFINITIONS = [
        FeatureDefinition(feature_name="id", feature_type=FeatureTypeEnum.STRING),
        FeatureDefinition(feature_name="model", feature_type=FeatureTypeEnum.STRING),
        FeatureDefinition(feature_name="model_year", feature_type=FeatureTypeEnum.STRING),
        FeatureDefinition(feature_name="status", feature_type=FeatureTypeEnum.STRING),
        FeatureDefinition(feature_name="mileage", feature_type=FeatureTypeEnum.STRING),
        FeatureDefinition(feature_name="price", feature_type=FeatureTypeEnum.STRING),
        FeatureDefinition(feature_name="msrp", feature_type=FeatureTypeEnum.STRING),
        FeatureDefinition(feature_name="ingest_time", feature_type=FeatureTypeEnum.FRACTIONAL),
    ]

各フィーチャーは、car_data.csvデータセットの各列に対応しています(ModelYearStatusMileagePrice、およびMSRP)。

  1. レコード識別子idとイベントの時間ingest_timeをフィーチャーグループに追加します:
CAR_SALES_FG_RECORD_IDENTIFIER_NAME = "id"
CAR_SALES_FG_EVENT_TIME_FEATURE_NAME = "ingest_time"
  1. 次のようにcar-data-aggregatedのフィーチャーグループ定義を作成します:
# フィーチャーグループ - 集計された車の販売AGG_CAR_SALES_FG_NAME = "car-data-aggregated"
AGG_CAR_SALES_FG_ARN = (
    f"arn:aws:sagemaker:{region}:{aws_account_id}:feature-group/{AGG_CAR_SALES_FG_NAME}"
)
AGG_CAR_SALES_FG_ROLE_ARN = offline_store_role
AGG_CAR_SALES_FG_OFFLINE_STORE_S3_URI = f"s3://{s3_bucket}/{s3_offline_store_prefix}"
AGG_CAR_SALES_FG_FEATURE_DEFINITIONS = [
    FeatureDefinition(feature_name="model_year_status", feature_type=FeatureTypeEnum.STRING),
    FeatureDefinition(feature_name="avg_mileage", feature_type=FeatureTypeEnum.STRING),
    FeatureDefinition(feature_name="max_mileage", feature_type=FeatureTypeEnum.STRING),
    FeatureDefinition(feature_name="avg_price", feature_type=FeatureTypeEnum.STRING),
    FeatureDefinition(feature_name="max_price", feature_type=FeatureTypeEnum.STRING),
    FeatureDefinition(feature_name="avg_msrp", feature_type=FeatureTypeEnum.STRING),
    FeatureDefinition(feature_name="max_msrp", feature_type=FeatureTypeEnum.STRING),
    FeatureDefinition(feature_name="ingest_time", feature_type=FeatureTypeEnum.FRACTIONAL),
]

集計されたフィーチャーグループでは、フィーチャーはモデルの年とステータス、平均走行距離、最大走行距離、平均価格、最大価格、平均MSRP、最大MSRP、およびイベントの時間です。このフィーチャーグループにレコード識別子model_year_statusとイベントの時間ingest_timeを追加します。

  1. さあ、car-dataフィーチャーグループを作成しましょう:
# フィーチャーグループ - 車の販売記録を作成します。
car_sales_fg = FeatureGroup(
    name=CAR_SALES_FG_NAME,
    feature_definitions=CAR_SALES_FG_FEATURE_DEFINITIONS,
    sagemaker_session=sagemaker_session,
)

create_car_sales_fg_resp = car_sales_fg.create(
        record_identifier_name=CAR_SALES_FG_RECORD_IDENTIFIER_NAME,
        event_time_feature_name=CAR_SALES_FG_EVENT_TIME_FEATURE_NAME,
        s3_uri=CAR_SALES_FG_OFFLINE_STORE_S3_URI,
        enable_online_store=True,
        role_arn=CAR_SALES_FG_ROLE_ARN,
    )
  1. car-data-aggregatedフィーチャーグループを作成します:
# フィーチャーグループ - 集計された車の販売記録を作成します。
agg_car_sales_fg = FeatureGroup(
    name=AGG_CAR_SALES_FG_NAME,
    feature_definitions=AGG_CAR_SALES_FG_FEATURE_DEFINITIONS,
    sagemaker_session=sagemaker_session,
)

create_agg_car_sales_fg_resp = agg_car_sales_fg.create(
    record_identifier_name=AGG_CAR_SALES_FG_RECORD_IDENTIFIER_NAME,
    event_time_feature_name=AGG_CAR_SALES_FG_EVENT_TIME_FEATURE_NAME,
    s3_uri=AGG_CAR_SALES_FG_OFFLINE_STORE_S3_URI,
    enable_online_store=True,
    role_arn=AGG_CAR_SALES_FG_ROLE_ARN,
    )

フィーチャーグループを表示するには、SageMaker StudioのホームメニューのデータでSageMaker Feature Storeオプションに移動できます。

@feature_processorデコレータを使用してデータをロードする

このセクションでは、Amazon S3からの生の入力データ(car_data.csv)をFeature Storeのcar-dataフィーチャーグループにローカルで変換します。この初期のローカル実行により、リモートで実行する前に開発と反復を行うことができ、より速い反復のためにデータのサンプルで行うこともできます。

@feature_processorデコレータを使用すると、変換関数がSparkランタイム環境で実行され、関数に提供される入力引数とその戻り値がSparkのDataFrameとなります。

  1. SageMaker Python SDKおよびそのエクストラからFeature Processor SDKをインストールするために、以下のコマンドを使用してください:
pip install sagemaker[feature-processor]

変換関数の入力パラメータの数は、@feature_processorデコレータで構成された入力の数と一致する必要があります。この場合、@feature_processorデコレータは入力としてcar-data.csvを持ち、出力としてcar-dataフィーチャーグループを指定しており、これはtarget_storeOfflineStoreであるバッチ操作であることを示しています:

from sagemaker.feature_store.feature_processor import (
   feature_processor,
   FeatureGroupDataSource,
   CSVDataSource,
)

@feature_processor(
   inputs=[CSVDataSource(RAW_CAR_SALES_S3_URI)],
   output=CAR_SALES_FG_ARN,
   target_stores=["OfflineStore"],
)
  1. データを変換するtransform()関数を定義します。この関数は以下のアクションを実行します:
    • 列名を小文字に変換します。
    • イベント時刻をingest_time列に追加します。
    • 句読点を削除し、欠損値をNAで置き換えます。
def transform(raw_s3_data_as_df):
    """S3からデータをロードし、基本的な特徴エンジニアリングを実行し、Feature Groupに保存する"""
    from pyspark.sql.functions import regexp_replace
    from pyspark.sql.functions import lit
    import time

    transformed_df = (
        raw_s3_data_as_df.withColumn("Price", regexp_replace("Price", "\$", ""))
        # 列名の変更
        .withColumnRenamed("Id", "id")
        .withColumnRenamed("Model", "model")
        .withColumnRenamed("Year", "model_year")
        .withColumnRenamed("Status", "status")
        .withColumnRenamed("Mileage", "mileage")
        .withColumnRenamed("Price", "price")
        .withColumnRenamed("MSRP", "msrp")
        # イベント時刻の追加
        .withColumn("ingest_time", lit(int(time.time())))
        # 句読点と不要な文字列の削除、NAで置換
        .withColumn("mileage", regexp_replace("mileage", "(,)|(mi\.)", ""))
        .withColumn("mileage", regexp_replace("mileage", "Not available", "NA"))
        .withColumn("price", regexp_replace("price", ",", ""))
        .withColumn("msrp", regexp_replace("msrp", "(^MSRP\s\\$)|(,)", ""))
        .withColumn("msrp", regexp_replace("msrp", "Not specified", "NA"))
        .withColumn("msrp", regexp_replace("msrp", "\\$\d+[a-zA-Z\s]+", "NA"))
        .withColumn("model", regexp_replace("model", "^\d\d\d\d\s", ""))
    )
  1. transform()関数を呼び出してデータをcar-dataフィーチャーグループに保存します:
# FeatureProcessorの実行
transform()

出力によると、データが正常にcar-dataフィーチャーグループにインジェストされています。

transform_df.show()関数の出力は次のようになります:

INFO:sagemaker:変換されたデータをarn:aws:sagemaker:us-west-2:416578662734:feature-group/car-dataにインジェストしています。ターゲットストア: ['OfflineStore']

+---+--------------------+----------+------+-------+--------+-----+-----------+
| id|               model|model_year|status|mileage|   price| msrp|ingest_time|
+---+--------------------+----------+------+-------+--------+-----+-----------+
|  0|    Acura TLX A-Spec|      2022|   New|     NA|49445.00|49445| 1686627154|
|  1|    Acura RDX A-Spec|      2023|   New|     NA|50895.00|   NA| 1686627154|
|  2|    Acura TLX Type S|      2023|   New|     NA|57745.00|   NA| 1686627154|
|  3|    Acura TLX Type S|      2023|   New|     NA|57545.00|   NA| 1686627154|
|  4|Acura MDX Sport H...|      2019|  Used| 32675 |40990.00|   NA| 1686627154|
|  5|    Acura TLX A-Spec|      2023|   New|     NA|50195.00|50195| 1686627154|
|  6|    Acura TLX A-Spec|      2023|   New|     NA|50195.00|50195| 1686627154|
|  7|    Acura TLX Type S|      2023|   New|     NA|57745.00|   NA| 1686627154|
|  8|    Acura TLX A-Spec|      2023|   New|     NA|47995.00|   NA| 1686627154|
|  9|    Acura TLX A-Spec|      2022|   New|     NA|49545.00|   NA| 1686627154|
| 10|Acura Integra w/A...|      2023|   New|     NA|36895.00|36895| 1686627154|
| 11|    Acura TLX A-Spec|      2023|   New|     NA|48395.00|48395| 1686627154|
| 12|Acura MDX Type S ...|      2023|   New|     NA|75590.00|   NA| 1686627154|
| 13|Acura RDX A-Spec ...|      2023|   New|     NA|55345.00|   NA| 1686627154|
| 14|    Acura TLX A-Spec|      2023|   New|     NA|50195.00|50195| 1686627154|
| 15|Acura RDX A-Spec ...|      2023|   New|     NA|55045.00|   NA| 1686627154|
| 16|    Acura TLX Type S|      2023|   New|     NA|56445.00|   NA| 1686627154|
| 17|    Acura TLX A-Spec|      2023|   New|     NA|47495.00|47495| 1686627154|
| 18|   Acura TLX Advance|      2023|   New|     NA|52245.00|52245| 1686627154|
| 19|

入力データを正常に変換し、car-dataフィーチャーグループにインジェストしました。

@feature_processorコードをリモートで実行する

このセクションでは、以前に説明した@remoteデコレータを使用して、Sparkアプリケーションとしてフィーチャープロセッシングコードをリモートで実行する方法を示します。大規模なデータセットにスケーリングするために、Sparkを使用してフィーチャープロセッシングをリモートで実行します。Sparkは、単一のマシンでは処理しきれない大きなデータをクラスター上で分散処理する機能を提供します。 @remoteデコレータは、ローカルのPythonコードを単一またはマルチノードのSageMakerトレーニングジョブとして実行します。

  1. 次のように@remoteデコレータと@feature_processorデコレータを使用します:
@remote(spark_config=SparkConfig(), instance_type = "ml.m5.xlarge", ...)
@feature_processor(inputs=[FeatureGroupDataSource(CAR_SALES_FG_ARN)],
                  output=AGG_CAR_SALES_FG_ARN, target_stores=["OfflineStore"], enable_ingestion=False )

spark_configパラメータは、これがSparkアプリケーションとして実行されることを示しています。 SparkConfigインスタンスは、Sparkの設定と依存関係を構成します。

  1. aggregate()関数を定義して、PySpark SQLとユーザー定義関数(UDF)を使用してデータを集計します。この関数は以下のアクションを実行します:
    • modelyearstatusを連結してmodel_year_statusを作成します。
    • priceの平均を取り、avg_priceを作成します。
    • priceの最大値を取り、max_priceを作成します。
    • mileageの平均を取り、avg_mileageを作成します。
    • mileageの最大値を取り、max_mileageを作成します。
    • msrpの平均を取り、avg_msrpを作成します。
    • msrpの最大値を取り、max_msrpを作成します。
    • model_year_statusでグループ化します。
def aggregate(source_feature_group, spark):
   """
   SQLクエリとUDFを使用してデータを集計します。
   """
   import time
   from pyspark.sql.types import StringType
   from pyspark.sql.functions import udf

   @udf(returnType=StringType())
   def custom_concat(*cols, delimeter: str = ""):
      return delimeter.join(cols)

   spark.udf.register("custom_concat", custom_concat)

   # SQL文字列を実行します。
   source_feature_group.createOrReplaceTempView("car_data")
   aggregated_car_data = spark.sql(
      f"""
      SELECT
          custom_concat(model, "_", model_year, "_", status) as model_year_status,
          AVG(price) as avg_price,
          MAX(price) as max_price,
          AVG(mileage) as avg_mileage,
          MAX(mileage) as max_mileage,
          AVG(msrp) as avg_msrp,
          MAX(msrp) as max_msrp,
          "{int(time.time())}" as ingest_time
      FROM car_data
      GROUP BY model_year_status
      """
  )

  aggregated_car_data.show()

  return aggregated_car_data
  1. aggregate()関数を実行し、SageMakerトレーニングジョブを作成してSparkアプリケーションを実行します:
# aggregate関数を実行します。
aggregate()

結果として、SageMakerは以前に定義したSparkアプリケーションに対してトレーニングジョブを作成します。 sagemaker-spark-processingイメージを使用してSparkランタイム環境を作成します。

ここでは、SageMakerトレーニングジョブを使用して、Sparkフィーチャープロセッシングアプリケーションを実行します。 SageMakerトレーニングを使用することで、SageMakerプロセッシングでは使用できないウォームプーリングを使用して、起動時間を1分以下に短縮することができます。これにより、起動時間が重要なフィーチャープロセッシングなどの短いバッチジョブの最適化が向上します。

  1. 詳細を表示するには、SageMakerコンソールで、ナビゲーションペインのトレーニングの下にあるトレーニングジョブを選択し、aggregate-<timestamp>という名前のジョブを選択します。

aggregate()関数の出力はテレメトリコードを生成します。出力の中には以下のように集計されたデータが表示されます:

+--------------------+------------------+---------+------------------+-----------+--------+--------+-----------+
|   model_year_status|         avg_price|max_price|       avg_mileage|max_mileage|avg_msrp|max_msrp|ingest_time|
+--------------------+------------------+---------+------------------+-----------+--------+--------+-----------+
|Acura CL 3.0_1997...|            7950.0|  7950.00|          100934.0|    100934 |    null|      NA| 1686634807|
|Acura CL 3.2 Type...|            6795.0|  7591.00|          118692.5|    135760 |    null|      NA| 1686634807|
|Acura CL 3_1998_Used|            9899.0|  9899.00|           63000.0|     63000 |    null|      NA| 1686634807|
|Acura ILX 2.0L Te...|         14014.125| 18995.00|         95534.875|     89103 |    null|      NA| 1686634807|
|Acura ILX 2.0L Te...|           15008.2| 16998.00|           94935.0|     88449 |    null|      NA| 1686634807|
|Acura ILX 2.0L Te...|           16394.6| 19985.00|           97719.4|     80000 |    null|      NA| 1686634807|
|Acura ILX 2.0L w/...|14567.181818181818| 16999.00| 96624.72727272728|     98919 |    null|      NA| 1686634807|
|Acura ILX 2.0L w/...|           16673.4| 18995.00|           84848.6|     96637 |    null|      NA| 1686634807|
|Acura ILX 2.0L w/...|12580.333333333334| 14546.00|100207.33333333333|     95782 |    null|      NA| 1686634807|
|Acura ILX 2.0L_20...|         14565.375| 17590.00|         92941.125|     81842 |    null|      NA| 1686634807|
|Acura ILX 2.0L_20...|           14877.9|  9995.00|           99739.5|     89252 |    null|      NA| 1686634807|
|Acura ILX 2.0L_20...|           15659.5| 15660.00|           82136.0|     89942 |    null|      NA| 1686634807|
|Acura ILX 2.0L_20...|17121.785714285714| 20990.00| 78278.14285714286|     96067 |    null|      NA| 1686634807|
|Acura ILX 2.4L (A...|           17846.0| 21995.00|          101558.0|     85974 |    null|      NA| 1686634807|
|Acura ILX 2.4L Pr...|           16327.0| 16995.00|           85238.0|     95356 |    null|      NA| 1686634807|
|Acura ILX 2.4L w/...|           12846.0| 12846.00|           75209.0|     75209 |    null|      NA| 1686634807|
|Acura ILX 2.4L_20...|           18998.0| 18998.00|           51002.0|     51002 |    null|      NA| 1686634807|
|Acura ILX 2.4L_20...|17908.615384615383| 19316.00| 74325.38461538461|     89116 |    null|      NA| 1686634807|
|Acura ILX 4DR SDN...|           18995.0| 18995.00|           37017.0|     37017 |    null|      NA| 1686634807|
|Acura ILX 8-SPD_2...|           24995.0| 24995.00|           22334.0|     22334 |    null|      NA| 1686634807|
+--------------------+------------------+---------+------------------+-----------+--------+--------+-----------+
only showing top 20 rows

トレーニングジョブが完了したら、以下の出力が表示されるはずです:

06-13 05:40 smspark-submit INFO     spark submit was successful. primary node exiting.
Training seconds: 153
Billable seconds: 153

SageMakerパイプラインを使用して特徴量プロセッサを運用化する

このセクションでは、特徴量プロセッサをSageMakerパイプラインに昇格させ、実行をスケジュールする方法を示します。

  1. まず、特徴量処理ロジックを含むtransformation_code.pyファイルをAmazon S3にアップロードします:
car_data_s3_uri = s3_path_join("s3://", sagemaker_session.default_bucket(),
                               'transformation_code', 'car-data-ingestion.py')
S3Uploader.upload(local_path='car-data-ingestion.py', desired_s3_uri=car_data_s3_uri)
print(car_data_s3_uri)
  1. 次に、.to_pipeline()関数を使用して特徴量プロセッサパイプラインcar_data_pipelineを作成します:
car_data_pipeline_name = f"{CAR_SALES_FG_NAME}-ingestion-pipeline"
car_data_pipeline_arn = fp.to_pipeline(pipeline_name=car_data_pipeline_name,
                                      step=transform,
                                      transformation_code=TransformationCode(s3_uri=car_data_s3_uri) )
print(f"Created SageMaker Pipeline: {car_data_pipeline_arn}.")
  1. パイプラインを実行するには、次のコードを使用します:
car_data_pipeline_execution_arn = fp.execute(pipeline_name=car_data_pipeline_name)
print(f"Started an execution with execution arn: {car_data_pipeline_execution_arn}")
  1. 同様に、集計された特徴のためのパイプラインcar_data_aggregated_pipelineを作成し、実行を開始できます。
  2. car_data_aggregated_pipelineを24時間ごとに実行するようにスケジュールします:
fp.schedule(pipeline_name=car_data_aggregated_pipeline_name,
           schedule_expression="rate(24 hours)", state="ENABLED")
print(f"Created a schedule.")

出力セクションには、パイプラインおよびパイプライン実行ロールのARN、およびスケジュールの詳細が表示されます:

{'pipeline_arn': 'arn:aws:sagemaker:us-west-2:416578662734:pipeline/car-data-aggregated-ingestion-pipeline',
 'pipeline_execution_role_arn': 'arn:aws:iam::416578662734:role/service-role/AmazonSageMaker-ExecutionRole-20230612T120731',
 'schedule_arn': 'arn:aws:scheduler:us-west-2:416578662734:schedule/default/car-data-aggregated-ingestion-pipeline',
 'schedule_expression': 'rate(24 hours)',
 'schedule_state': 'ENABLED',
 'schedule_start_date': '2023-06-13T06:05:17Z',
 'schedule_role': 'arn:aws:iam::416578662734:role/service-role/AmazonSageMaker-ExecutionRole-20230612T120731'}
  1. Feature Processorのすべてのパイプラインを取得するには、list_pipelines()関数を使用します:
fp.list_pipelines()

出力は次のようになります:

[{'pipeline_name': 'car-data-aggregated-ingestion-pipeline'},
 {'pipeline_name': 'car-data-ingestion-pipeline'}]

SageMaker Feature Processorパイプラインが正常に作成されました。

特徴量処理パイプラインとMLの経緯を探索する

SageMaker Studioで、次の手順を完了します:

  1. SageMaker Studioコンソールで、ホームメニューを選択し、Pipelinesを選択します。

2つのパイプラインが作成されるはずです:car-data-ingestion-pipelinecar-data-aggregated-ingestion-pipeline

  1. car-data-ingestion-pipelineを選択してください。

実行タブに実行の詳細が表示されます。

  1. パイプラインによって作成されたフィーチャーグループを表示するには、データの下のフィーチャーストアを選択し、car-dataを選択してください。

前の手順で作成した2つのフィーチャーグループが表示されます。

  1. car-dataフィーチャーグループを選択してください。

フィーチャータブにフィーチャーの詳細が表示されます。

パイプラインの実行を表示する

パイプラインの実行を表示するには、以下の手順を完了してください:

  1. パイプライン実行タブでcar-data-ingestion-pipelineを選択してください。

これにより、すべての実行が表示されます。

  1. 実行の詳細を表示するためのリンクのいずれかを選択してください。

  1. ラインナップを表示するには、ラインナップを選択してください。

car-dataの完全なラインナップには、入力データソースcar_data.csvと上流エンティティが表示されます。car-data-aggregatedのラインナップには、入力car-dataフィーチャーグループが表示されます。

  1. car-datacar-data-ingestion-pipelineフィーチャーの読み込みを選択し、上流ラインナップのクエリを選択して、すべての上流エンティティを表示してください。

car-dataのフルラインナップは、次のスクリーンショットのようになります。

同様に、car-aggregated-dataのフィーチャーグループのラインナップは、次のスクリーンショットのようになります。

SageMaker Studioは、スケジュールされたパイプラインを追跡し、実行を表示し、ラインナップを探索し、フィーチャープロセッシングコードを表示するための単一の環境を提供します。

car-data-aggregatedフィーチャーグループ内の平均価格、最高価格、平均走行距離などの集計されたフィーチャーは、データの特性に関する洞察を提供します。これらのフィーチャーは、車の価格を予測するためのモデルのトレーニングにも使用したり、他の操作に使用したりすることもできます。ただし、この投稿ではモデルのトレーニングは対象外であり、SageMaker Feature Storeのフィーチャーエンジニアリング機能のデモンストレーションに焦点を当てています。

クリーンアップ

この投稿の一環として作成されたリソースをクリーンアップして、継続的な料金が発生しないようにすることを忘れないでください。

  1. 次のコードを使用して、スケジュールされたパイプラインを無効にします。
# スケジュールされたパイプラインを無効にする
fp.schedule(
pipeline_name=car_data_aggregated_pipeline_name,
schedule_expression="rate(24 hours)",
state="DISABLED",
)
  1. 両方のフィーチャーグループを削除します。
# フィーチャーグループを削除する
car_sales_fg.delete()
agg_car_sales_fg.delete()

S3バケットとオフラインフィーチャーストア内にあるデータには費用がかかる場合があるため、料金が発生しないようにそれらを削除する必要があります。

  1. S3オブジェクトを削除します。
  2. フィーチャーストアからレコードを削除します。

結論

この投稿では、カーセールス会社がSageMaker Feature Store Feature Processorを使用して、次のような貴重な洞察を得る方法を示しました。

  • Sparkを使用してバッチデータを大規模に取り込んで変換する
  • SageMakerパイプラインを介してフィーチャーエンジニアリングワークフローを操作化する
  • ラインナップの追跡とフィーチャーの探索を行うための単一の環境を提供する
  • MLモデルのトレーニングに最適化された集計されたフィーチャーの準備

これらの手順に従うことで、企業は以前使用できなかったデータを構造化されたフィーチャーに変換し、それらを使用して車の価格を予測するためのモデルのトレーニングに使用することができました。SageMaker Feature Storeは、基礎となるインフラストラクチャではなく、フィーチャーエンジニアリングに注力することができるようにしました。

この投稿がSageMaker Feature Store Feature Processorを使用して独自のデータから貴重なMLの洞察を引き出すのに役立つことを願っています!

詳細については、「Feature Processing」と「Amazon SageMaker Feature Store: Feature Processor Introduction」のSageMakerの例を参照してください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

「AIフィードバックループ:AI生成コンテンツの時代におけるモデルの製品品質の維持」

「AIのフィードバックループが、生成型AIの登場に伴い、モデルの品質維持、効率向上、パフォーマンス向上にどのように役立つ...

機械学習

Google AIはWeatherBench 2を紹介します:さまざまな天気予測モデルの評価と比較のための機械学習フレームワーク

機械学習(ML)は近年、天気予報においてますます使用されています。MLモデルが運用物理モデルと精度の面で競争できるように...

人工知能

「生成AIのキーワードを解説する」

この記事では、生成AIに重要なキーワードを紹介し、説明しますさらに学習するための追加のリソースへのリンクも提供されます

機械学習

このAI論文は、周波数領域での差分プライバシーを利用したプライバシー保護顔認識手法を提案しています

ディープラーニングは、畳み込みニューラルネットワークに基づいた顔認識モデルを大幅に進化させました。これらのモデルは高...

AI研究

アリババの研究者たちは、ChatGPTのような現代のチャットボットの指示に従う能力を活用した、オープンセットの細かいタグ付けツールであるINSTAGを提案しています

ChatGPTのような大規模な言語モデルが指示に従う能力をどのように獲得するのか、考えたことはありますか?さまざまな基礎言語...