Создавайте мультиклассовые модели классификации с помощью Amazon Redshift ML

Исходный узел: 1854697

Amazon Redshift ML упрощает использование машинного обучения (ML) за счет использования простых операторов SQL для создания и обучения моделей машинного обучения на основе данных в Амазонка Redshift. Amazon Redshift ML можно использовать для решения задач двоичной классификации, многоклассовой классификации и регрессии, а также напрямую использовать AutoML или XGBoost.

Этот пост является частью серии, в которой описывается использование Amazon Redshift ML. Для получения дополнительной информации о построении регрессии с помощью Amazon Redshift ML см. Создание регрессионных моделей с помощью Amazon Redshift ML.

Вы можете использовать Amazon Redshift ML для автоматизации подготовки данных, предварительной обработки и выбора типа проблемы, как показано на это сообщение в блоге. Мы предполагаем, что вы хорошо понимаете свои данные и тип проблемы, наиболее подходящий для вашего варианта использования. В этом посте особое внимание уделяется созданию моделей в Amazon Redshift с использованием типа задачи классификации нескольких классов., который заключается в классификации экземпляров в один из трех или более классов. Например, вы можете предсказать, является ли транзакция мошеннической, неудачной или успешной, будет ли клиент оставаться активным в течение 3 месяцев, шести месяцев, девяти месяцев, 12 месяцев или будут ли новости отмечены как спортивные, мировые новости, бизнес.

Предпосылки

В качестве предварительного условия для реализации этого решения вам необходимо настроить кластер Amazon Redshift с включенным на нем машинным обучением. Предварительные шаги для начала работы см. В разделе Создание, обучение и развертывание моделей машинного обучения в Amazon Redshift с помощью SQL с Amazon Redshift ML.

Примеры использования

В нашем случае мы хотим привлечь наших самых активных клиентов к специальной программе лояльности. Мы используем Amazon Redshift ML и мультиклассовую классификацию, чтобы спрогнозировать, сколько месяцев клиент будет активен в течение 13-месячного периода. Это позволяет получить до 13 возможных классов, что делает его более подходящим для мультиклассовой классификации. Клиенты с прогнозируемой активностью 7 месяцев и более становятся объектом специальной программы лояльности..

Введите необработанные данные

Чтобы подготовить необработанные данные для этой модели, мы заполнили таблицу ecommerce_sales в Amazon Redshift, используя общедоступный набор данных. Прогноз продаж электронной коммерции, который включает данные о продажах онлайн-магазина в Великобритании.

Введите следующие операторы, чтобы загрузить данные в Amazon Redshift:

CREATE TABLE IF NOT EXISTS ecommerce_sales
( invoiceno VARCHAR(30) ,stockcode VARCHAR(30) ,description VARCHAR(60) ,quantity DOUBLE PRECISION ,invoicedate VARCHAR(30) ,unitprice DOUBLE PRECISION ,customerid BIGINT ,country VARCHAR(25) )
;

Copy ecommerce_sales
From 's3://redshift-ml-multiclass/ecommerce_data.txt'
iam_role '<<your-amazon-redshift-sagemaker-iam-role-arn>>' delimiter 't' IGNOREHEADER 1 region 'us-east-1' maxerror 100;

Чтобы воспроизвести этот сценарий в своей среде, замените < > с Управление идентификацией и доступом AWS (IAM) ARN для кластера Amazon Redshift.

Подготовка данных для модели машинного обучения

Теперь, когда наш набор данных загружен, мы можем при желании разделить данные на три набора для обучения (80%), проверки (10%) и прогнозирования (10%). Обратите внимание, что Amazon Redshift ML Autopilot автоматически разделит данные на обучение и проверку, но, разделив их здесь, вы сможете проверить точность своей модели. Кроме того, мы вычисляем количество месяцев, в течение которых клиент был активен, так как это будет значение, которое мы хотим, чтобы наша модель предсказывала на новых данных. Мы используем случайную функцию в наших операторах SQL для разделения данных. См. Следующий код:

create table ecommerce_sales_data as ( select t1.stockcode, t1.description, t1.invoicedate, t1.customerid, t1.country, t1.sales_amt, cast(random() * 100 as int) as data_group_id from ( select stockcode, description, invoicedate, customerid, country, sum(quantity * unitprice) as sales_amt from ecommerce_sales group by 1, 2, 3, 4, 5 ) t1
);

Обучающий набор

create table ecommerce_sales_training as ( select a.customerid, a.country, a.stockcode, a.description, a.invoicedate, a.sales_amt, (b.nbr_months_active) as nbr_months_active from ecommerce_sales_data a inner join ( select customerid, count( distinct( DATE_PART(y, cast(invoicedate as date)) || '-' || LPAD( DATE_PART(mon, cast(invoicedate as date)), 2, '00' ) ) ) as nbr_months_active from ecommerce_sales_data group by 1 ) b on a.customerid = b.customerid where a.data_group_id < 80
);

Набор для проверки

create table ecommerce_sales_validation as ( select a.customerid, a.country, a.stockcode, a.description, a.invoicedate, a.sales_amt, (b.nbr_months_active) as nbr_months_active from ecommerce_sales_data a inner join ( select customerid, count( distinct( DATE_PART(y, cast(invoicedate as date)) || '-' || LPAD( DATE_PART(mon, cast(invoicedate as date)), 2, '00' ) ) ) as nbr_months_active from ecommerce_sales_data group by 1 ) b on a.customerid = b.customerid where a.data_group_id between 80 and 90
);

Набор прогнозов

create table ecommerce_sales_prediction as ( select customerid, country, stockcode, description, invoicedate, sales_amt from ecommerce_sales_data where data_group_id > 90);

Создайте модель в Amazon Redshift

Теперь, когда мы создали наши наборы данных для обучения и проверки, мы можем использовать создать модель заявление в Amazon Redshift для создания нашей модели машинного обучения с использованием Multiclass_Classification. Мы указываем тип проблемы, но позволяем AutoML позаботиться обо всем остальном. В этой модели цель, которую мы хотим спрогнозировать, это nbr_months_active. Создатель мудреца Амазонки создает функцию predict_customer_activity, который мы используем для вывода в Amazon Redshift. См. Следующий код:

create model ecommerce_customer_activity
from (
select customerid, country, stockcode, description, invoicedate, sales_amt, nbr_months_active from ecommerce_sales_training) TARGET nbr_months_active FUNCTION predict_customer_activity IAM_ROLE '<<your-amazon-redshift-sagemaker-iam-role-arn>>' problem_type MULTICLASS_CLASSIFICATION SETTINGS ( S3_BUCKET '<<your-amazon-s3-bucket-name>>’, S3_GARBAGE_COLLECT OFF );

Чтобы воспроизвести этот сценарий в своей среде, замените < > с ролью IAM вашего кластера ARN.

Подтвердите прогнозы

На этом этапе мы оцениваем точность нашей модели машинного обучения по нашим данным проверки.

Создавая модель, Amazon SageMaker Автопилот автоматически разделяет входные данные на наборы для обучения и проверки и выбирает модель с наилучшей объективной метрикой, которая развернута в кластере Amazon Redshift. Вы можете использовать оператор show model в своем кластере для просмотра различных показателей, включая оценку точности. Если вы не укажете явно, SageMaker автоматически использует точность для типа цели. См. Следующий код:

Show model ecommerce_customer_activity;

Как показано в следующих выходных данных, наша модель имеет показатель точности 0.996580.

Основные Значение
Название модели электронная торговля_клиент_активность
Имя схемы Общая
Владелец Демо
Время создания Пн, 22.03.2021 19:48:30
Состояние модели ГОТОВ
Статус работы по обучению MaxAutoMLJobRuntimeReached
проверка: точность 0.996580
Ориентировочная стоимость 4.260437
ДАННЫЕ ДЛЯ ОБУЧЕНИЯ:
запрос ВЫБЕРИТЕ CUSTOMERID, COUNTRY, STOCKCODE, DESCRIPTION, INVOICEDATE, SALES_AMT, NBR_MONTHS_ACTIVE
ОТ ECOMMERCE_SALES_CLN_TRAINING
Целевой столбец NBR_MONTHS_ACTIVE
ПАРАМЕТРЫ:
Тип модели Авто
Тип проблемы Мультикласс
Тип проблемы точность
Имя задания AutoML 2021-03-07-19-48-30-960148-auto
Имя функции pred_customer_activity
Параметры функции страна-заказчик код товара описание invoicedate sales_amt
Типы функциональных параметров int8, varchar, varchar, varchar, varchar, float8

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

select cast(sum(t1.match)as decimal(7,2)) as predicted_matches
,cast(sum(t1.nonmatch) as decimal(7,2)) as predicted_non_matches
,cast(sum(t1.match + t1.nonmatch) as decimal(7,2)) as total_predictions
,predicted_matches / total_predictions as pct_accuracy
from (select customerid, country, stockcode, description, invoicedate, sales_amt, nbr_months_active, predict_customer_activity(customerid, country, stockcode, description, invoicedate, sales_amt) as predicted_months_active, case when nbr_months_active = predicted_months_active then 1 else 0 end as match, case when nbr_months_active <> predicted_months_active then 1 else 0 end as nonmatch from ecommerce_sales_validation )t1;

Мы видим, что мы сделали правильный прогноз на 99.74% по нашему набору данных, что соответствует нашей оценке точности из модели шоу.

предсказанные_матчи предсказано_не_матчес total_predictions pct_accuracy
43489.00 132.00 43621.00 0.99697393

Теперь давайте запустим запрос, чтобы узнать, какие клиенты имеют право на участие в нашей программе лояльности, будучи активными не менее 7 месяцев:

select customerid, predict_customer_activity(customerid, country, stockcode, description, invoicedate, sales_amt) as predicted_months_active from ecommerce_sales_prediction where predicted_months_active >=7 group by 1,2 limit 10;

В следующей таблице показаны наши результаты.

Пользовательский ИД предсказанные_месяцы_активные
16895 8
18283 10
15044 11
16746 11
14702 11
16607 10
12901 10
15078 13
16393 10
15005 12

УСТРАНЕНИЕ НЕПОЛАДОК

Несмотря на то, Create Model Заявление в Amazon Redshift автоматически запускает процесс автопилота SageMaker для создания, обучения и настройки лучшей модели машинного обучения и развертывания этой модели в Amazon Redshift, вы можете просмотреть промежуточные шаги, выполняемые в этом процессе, которые также могут помочь в устранении неполадок если что-то пойдет не так. Вы также можете получить имя задания AutoML из выходных данных команды show model.

При создании модели необходимо указать Простой сервис хранения Amazon (Amazon S3) имя корзины в качестве значения параметра, s3_bucket. Вы используете эту корзину для обмена данными обучения и артефактами между Amazon Redshift и SageMaker. Amazon Redshift создает в этом сегменте подпапку перед выгрузкой данных обучения. По завершении обучения подпапка и ее содержимое удаляются, если вы не установите параметр s3_garbage_collect в off, который можно использовать для устранения неполадок. Для получения дополнительной информации см. СОЗДАТЬ МОДЕЛЬ.

Для получения информации об использовании консоли SageMaker и Студия Amazon SageMakerСм. Создание регрессионных моделей с помощью Amazon Redshift ML.

Заключение

Amazon Redshift ML предоставляет пользователям баз данных подходящую платформу для создания, обучения и настройки моделей с помощью интерфейса SQL. В этом посте мы рассказали вам, как создать модель классификации с несколькими классами. Мы надеемся, что вы сможете воспользоваться преимуществами Amazon Redshift ML, чтобы получить ценные сведения.

Для получения дополнительной информации о создании различных моделей с помощью Amazon Redshift ML см. Создание регрессионных моделей с помощью Amazon Redshift ML  , а также прочесть Амазонка Redshift Документация по ML.

Благодарности

Согласно репозиторию машинного обучения UCI, эти данные были предоставлены доктором Дацин Ченом, директором группы общественной аналитики. chend '@' lsbu.ac.uk, Школа инженерии, Лондонский университет Южного берега, Лондон SE1 0AA, Великобритания.

Дуа, Д. и Графф, К. (2019). Репозиторий машинного обучения UCI [http://archive.ics.uci.edu/ml]. Ирвин, Калифорния: Калифорнийский университет, Школа информационных и компьютерных наук.


Об авторах

Фил Бейтс является старшим специалистом по аналитике и архитектором решений в AWS с более чем 25-летним опытом работы с хранилищами данных.

Дебу Панда, главный менеджер по продуктам в AWS, является лидером в области аналитики, платформ приложений и технологий баз данных и имеет более чем 25-летний опыт работы в мире ИТ.

NИкос Кулурис является инженером по разработке программного обеспечения в AWS. Он получил докторскую степень в Калифорнийском университете в Сан-Диего и работал в области баз данных и аналитики.

Энрико Сарторелло является старшим инженером по разработке программного обеспечения в Amazon Web Services. Он помогает клиентам внедрять решения машинного обучения, соответствующие их потребностям, разрабатывая новые функции для Amazon SageMaker. В свободное время он страстно следит за своей футбольной командой и любит совершенствовать свои кулинарные навыки.

Источник: https://aws.amazon.com/blogs/machine-learning/build-multi-class-classification-models-with-amazon-redshift-ml/

Отметка времени:

Больше от Блог машинного обучения AWS