Разблокируйте инсайты МО, используя процессор функций хранилища функций Amazon SageMaker.

Разблокируйте инсайты МО с помощью SageMaker.

Amazon SageMaker Feature Store предоставляет комплексное решение для автоматизации создания признаков для обучения моделей машинного обучения (ML). Для многих задач ML требуется преобразование исходных данных, таких как журналы, показания датчиков или записи транзакций, в осмысленные признаки, оптимизированные для обучения модели.

Качество признаков критично для обеспечения высокой точности модели ML. Часто требуется преобразование исходных данных в признаки с помощью агрегации, кодирования, нормализации и других операций, что может потребовать значительных усилий. Инженерам необходимо вручную писать пользовательскую логику предварительной обработки и агрегации данных на Python или Spark для каждой задачи.

Эта сложная и однообразная работа является громоздкой, повторяющейся и подверженной ошибкам. Процессор функций SageMaker Feature Store снижает эту нагрузку, автоматически преобразуя исходные данные в агрегированные признаки, подходящие для пакетного обучения моделей машинного обучения. Он позволяет инженерам предоставлять простые функции преобразования данных, затем обрабатывает их в масштабе на Spark и управляет основной инфраструктурой. Это позволяет ученым данным и инженерам по данным сосредоточиться на логике создания признаков, а не на деталях реализации.

В этой статье мы демонстрируем, как компания, занимающаяся продажей автомобилей, может использовать процессор функций для преобразования исходных данных о продажах автомобилей в признаки в три шага:

  1. Локальное выполнение преобразования данных.
  2. Удаленное выполнение в масштабе с использованием Spark.
  3. Операционализация через конвейеры.

Мы показываем, как SageMaker Feature Store принимает исходные данные, выполняет удаленное преобразование признаков с использованием Spark и загружает полученные агрегированные признаки в группу признаков. Затем эти созданные признаки можно использовать для обучения моделей машинного обучения.

В этом примере мы видим, как SageMaker Feature Store помогает преобразовать исходные данные о продажах автомобилей в структурированные признаки. Эти признаки впоследствии используются для получения следующих инсайтов:

  • Средняя и максимальная цена красных кабриолетов 2010 года
  • Модели с лучшим пробегом по цене
  • Тенденции продаж новых и подержанных автомобилей на протяжении лет
  • Различия в средней розничной цене по местоположениям

Мы также видим, как конвейеры SageMaker Feature Store поддерживают актуализацию признаков по мере поступления новых данных, что позволяет компании постоянно получать новые инсайты.

Обзор решения

Мы работаем с набором данных car_data.csv, который содержит характеристики, такие как модель, год выпуска, статус, пробег, цена и розничная цена для проданных компанией подержанных и новых автомобилей. Ниже показан пример набора данных.

В блокноте решения feature_processor.ipynb содержатся следующие основные шаги, которые мы объясним в этой статье:

  1. Создание двух групп признаков: одной с названием car-data для исходных записей о продажах автомобилей и другой с названием car-data-aggregated для агрегированных записей о продажах автомобилей.
  2. Использование декоратора @feature_processor для загрузки данных в группу признаков car-data из Amazon Simple Storage Service (Amazon S3).
  3. Удаленное выполнение кода @feature_processor в качестве приложения Spark для агрегации данных.
  4. Операционализация процессора признаков через конвейеры SageMaker и планирование запусков.
  5. Исследование конвейеров обработки признаков и линейности в Amazon SageMaker Studio.
  6. Использование агрегированных признаков для обучения модели машинного обучения.

Предварительные требования

Чтобы следовать этому руководству, вам потребуется следующее:

  • Учетная запись AWS.
  • Настроенная среда выполнения SageMaker Studio.
  • Права идентификации и доступа AWS (IAM). При создании этой роли IAM следуйте лучшей практике предоставления наименее привилегированного доступа.

В этой статье мы ссылаемся на следующий блокнот, который демонстрирует, как начать работу с процессором функций с использованием SageMaker Python SDK.

Создание групп признаков

Чтобы создать группы признаков, выполните следующие шаги:

  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 (Model, Year, Status, Mileage, Price и 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 следующим образом:
# Feature Group - Aggregated Car SalesAGG_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:
# Create Feature Group - Car sale records.
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:
# Create Feature Group - Aggregated car sales records.
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,
  )

Вы можете перейти к опции “Feature Store SageMaker” в разделе “Data” на главном меню SageMaker Studio, чтобы увидеть группы функций.

Используйте декоратор @feature_processor для загрузки данных

В этом разделе мы локально преобразуем исходные данные (car_data.csv) из Amazon S3 в группу признаков car-data с использованием Feature Processor Feature Store. Это начальная локальная работа позволяет нам разрабатывать и итерировать перед удаленным запуском и может быть выполнена на выборке данных для более быстрой итерации.

С помощью декоратора @feature_processor ваша функция преобразования выполняется в среде выполнения Spark, где входные аргументы, предоставленные вашей функции, и возвращаемое значение являются Spark DataFrames.

  1. Установите Feature Processor SDK из SageMaker Python SDK и его дополнительные модули с помощью следующей команды:
pip install sagemaker[feature-processor]

Количество входных параметров в вашей функции преобразования должно соответствовать количеству входов, настроенных в декораторе @feature_processor. В данном случае декоратор @feature_processor имеет входные данные car-data.csv и группу признаков car-data в качестве выходных данных, что указывает на то, что это пакетная операция с target_store в качестве OfflineStore:

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, выполняет базовую инженерию признаков, сохраняет в группу признаков"""
    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 с target_stores: ['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|    Acura TLX A-Spec|      2023|   New|     NA|50595.00|50595| 1686627154|
+---+--------------------+----------+------+-------+--------+-----+-----------+
only showing top 20 rows

Мы успешно преобразовали входные данные и загрузили их в группу функций car-data.

Запуск кода @feature_processor удаленно

В этом разделе мы демонстрируем запуск кода обработки функций удаленно в качестве приложения Spark с использованием ранее описанного декоратора @remote. Мы запускаем обработку функций удаленно с использованием 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). Эта функция выполняет следующие действия:
    • Конкатенирует model, year и status, чтобы создать 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()

В результате SageMaker создает задачу обучения для ранее определенного приложения Spark. Он создаст среду выполнения Spark с использованием образа sagemaker-spark-processing image.

Мы используем задачи обучения SageMaker здесь для запуска нашего приложения обработки функций Spark. С помощью задач обучения SageMaker вы можете сократить время запуска до 1 минуты или меньше, используя теплый пул, который недоступен в SageMaker Processing. Это делает задачи обучения SageMaker лучше оптимизированными для коротких пакетных заданий, таких как обработка функций, где время запуска важно.

  1. Чтобы просмотреть подробности, на консоли SageMaker выберите Training jobs в разделе Training в панели навигации, затем выберите задание с именем 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 выполнен успешно. Основной узел выходит.
Продолжительность обучения: 153 секунды
Оплата за использование: 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. Затем создайте пайплайн процессора функций car_data_pipeline с помощью функции .to_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"Создан пайплайн SageMaker: {car_data_pipeline_arn}.")
  1. Чтобы запустить пайплайн, используйте следующий код:
car_data_pipeline_execution_arn = fp.execute(pipeline_name=car_data_pipeline_name)
print(f"Запущено выполнение с арн: {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"Создано расписание.")

В разделе вывода вы увидите 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. Чтобы получить все пайплайны процессора функций в этой учетной записи, используйте функцию list_pipelines() процессора функций:
fp.list_pipelines()

Вывод будет следующим:

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

Мы успешно создали пайплайны процессора функций SageMaker.

Исследование пайплайнов обработки функций и линейности МО

В SageMaker Studio выполните следующие действия:

  1. На консоли SageMaker Studio выберите Главная в меню, а затем выберите Пайплайны.

Вы должны увидеть два созданных конвейера: car-data-ingestion-pipeline и car-data-aggregated-ingestion-pipeline.

  1. Выберите конвейер car-data-ingestion-pipeline.

На вкладке Executions отображаются детали выполнения.

  1. Чтобы просмотреть заполненную конвейером группу признаков, выберите Feature Store в разделе Data и выберите car-data.

Вы увидите две созданные ранее группы признаков.

  1. Выберите группу признаков car-data.

На вкладке Features отображаются детали признаков.

Просмотр запусков конвейера

Чтобы просмотреть запуски конвейера, выполните следующие действия:

  1. На вкладке Pipeline Executions выберите car-data-ingestion-pipeline.

Здесь отображаются все запуски.

  1. Выберите одну из ссылок, чтобы увидеть детали запуска.

  1. Чтобы просмотреть линейность, выберите Lineage.

Полная линейность для car-data показывает исходный источник данных car_data.csv и вышестоящие сущности. Линейность для car-data-aggregated показывает группу признаков car-data в качестве входных данных.

  1. Выберите Load features, а затем выберите Query upstream lineage для car-data и car-data-ingestion-pipeline, чтобы увидеть все вышестоящие сущности.

Полная иерархия для функциональной группы car-data должна выглядеть как на следующем скриншоте.

Аналогично, иерархия для функциональной группы car-aggregated-data должна выглядеть как на следующем скриншоте.

SageMaker Studio предоставляет единую среду для отслеживания запланированных конвейеров, просмотра запусков, исследования иерархии и просмотра кода обработки функций.

Агрегированные функции, такие как средняя цена, максимальная цена, средний пробег и другие в функциональной группе car-data-aggregated, предоставляют информацию о характере данных. Вы также можете использовать эти функции в качестве набора данных для обучения модели для прогнозирования цен на автомобили или для других операций. Однако обучение модели не является основной темой этого сообщения, которое фокусируется на демонстрации возможностей SageMaker Feature Store для инженерии функций.

Очистка

Не забудьте удалить созданные ресурсы, чтобы избежать дальнейших расходов.

  1. Отключите запланированный конвейер с помощью метода fp.schedule() с параметром состояния Disabled:
# Отключение запланированного конвейера
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
  • Отслеживание иерархии и единая среда для контроля конвейеров и исследования функций
  • Подготовка агрегированных функций, оптимизированных для обучения моделей машинного обучения

Следуя этим шагам, компания смогла преобразовать ранее непригодные данные в структурированные функции, которые затем могли быть использованы для обучения модели для прогнозирования цен на автомобили. SageMaker Feature Store позволил им сосредоточиться на инженерии функций, а не на основной инфраструктуре.

Мы надеемся, что данное сообщение поможет вам извлечь ценные инсайты машинного обучения из собственных данных с использованием SageMaker Feature Store Feature Processor!

Для получения дополнительной информации обратитесь к документации по обработке функций и примеру SageMaker на Amazon SageMaker Feature Store: Введение в функцию обработки.