Twórz wieloklasowe modele klasyfikacji za pomocą Amazon Redshift ML

Węzeł źródłowy: 1854697

Amazon Redshift ML upraszcza korzystanie z uczenia maszynowego (ML), używając prostych instrukcji SQL do tworzenia i trenowania modeli ML na podstawie danych w Amazonka Przesunięcie ku czerwieni. Możesz użyć Amazon Redshift ML do rozwiązywania problemów z klasyfikacją binarną, klasyfikacją wieloklasową i regresją, a także możesz bezpośrednio korzystać z AutoML lub XGBoost.

Ten post jest częścią serii opisującej korzystanie z Amazon Redshift ML. Aby uzyskać więcej informacji na temat budowania regresji za pomocą Amazon Redshift ML, zobacz Twórz modele regresji za pomocą Amazon Redshift ML.

Możesz użyć Amazon Redshift ML, aby zautomatyzować przygotowanie danych, wstępne przetwarzanie i wybór typu problemu, jak pokazano w ten wpis na blogu. Zakładamy, że dobrze rozumiesz swoje dane i jaki typ problemu jest najbardziej odpowiedni dla Twojego przypadku użycia. Ten post koncentruje się w szczególności na tworzeniu modeli w Amazon Redshift przy użyciu typu problemu klasyfikacji wieloklasowej, która polega na zaklasyfikowaniu instancji do jednej z trzech lub więcej klas. Na przykład można przewidzieć, czy transakcja jest fałszywa, nieudana lub udana, czy klient pozostanie aktywny przez 3 miesiące, sześć miesięcy, dziewięć miesięcy, 12 miesięcy lub czy wiadomość jest oznaczona jako sport, wiadomości ze świata, biznes.

Wymagania wstępne

Warunkiem wstępnym wdrożenia tego rozwiązania jest skonfigurowanie klastra Amazon Redshift z włączoną ML. Aby zapoznać się z wstępnymi krokami, aby rozpocząć, zobacz Twórz, trenuj i wdrażaj modele uczenia maszynowego w Amazon Redshift przy użyciu SQL z Amazon Redshift ML.

Przypadek użycia

W naszym przypadku użycia chcemy skierować naszych najbardziej aktywnych klientów do specjalnego programu lojalnościowego. Używamy Amazon Redshift ML i klasyfikacji wieloklasowej, aby przewidzieć, ile miesięcy klient będzie aktywny w okresie 13 miesięcy. Przekłada się to na maksymalnie 13 możliwych klas, co sprawia, że ​​lepiej pasuje do klasyfikacji wieloklasowej. Klienci z przewidywaną aktywnością 7 miesięcy lub dłużej są kierowani do specjalnego programu lojalnościowego dla klientów.

Wprowadź surowe dane

Aby przygotować nieprzetworzone dane dla tego modelu, wypełniliśmy tabelę ecommerce_sales w Amazon Redshift przy użyciu publicznego zestawu danych Prognoza sprzedaży e-commerce, który zawiera dane dotyczące sprzedaży internetowego sprzedawcy w Wielkiej Brytanii.

Wprowadź następujące oświadczenia, aby załadować dane do 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;

Aby odtworzyć ten skrypt w swoim środowisku, zamień < > z AWS Zarządzanie tożsamością i dostępem (IAM) ARN dla Twojego klastra Amazon Redshift.

Przygotowanie danych do modelu ML

Teraz, gdy nasz zestaw danych jest załadowany, możemy opcjonalnie podzielić dane na trzy zestawy do trenowania (80%), walidacji (10%) i przewidywania (10%). Zauważ, że Amazon Redshift ML Autopilot automatycznie podzieli dane na trening i walidację, ale dzieląc je tutaj, będziesz mógł zweryfikować dokładność swojego modelu. Dodatkowo obliczamy liczbę miesięcy aktywności klienta, ponieważ będzie to wartość, którą nasz model ma przewidywać na nowych danych. Do podziału danych używamy funkcji random w naszych instrukcjach SQL. Zobacz następujący kod:

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
);

Zestaw treningowy

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
);

Zestaw walidacyjny

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
);

Zestaw prognoz

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

Stwórz model w Amazon Redshift

Teraz, gdy stworzyliśmy nasze zestawy danych treningowych i walidacyjnych, możemy użyć stworzyć model oświadczenie w Amazon Redshift, aby stworzyć nasz model ML za pomocą Multiclass_Classification. Określamy typ problemu, ale pozwalamy AutoML zająć się wszystkim innym. W tym modelu celem, który chcemy przewidzieć, jest nbr_months_active. Amazon Sage Maker tworzy funkcję predict_customer_activity, którego używamy do wnioskowania w Amazon Redshift. Zobacz następujący kod:

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 );

Aby odtworzyć ten skrypt w swoim środowisku, zamień < > z rolą IAM Twojego klastra ARN.

Sprawdź poprawność prognoz

Na tym etapie oceniamy dokładność naszego modelu ML względem naszych danych walidacyjnych.

Tworząc model, Autopilot Amazon SageMaker automatycznie dzieli dane wejściowe na zestawy do pociągów i walidacji oraz wybiera model o najlepszej obiektywnej metryce, który jest wdrażany w klastrze Amazon Redshift. Możesz użyć instrukcji show model w klastrze, aby wyświetlić różne metryki, w tym wynik dokładności. Jeśli nie określisz wyraźnie, SageMaker automatycznie użyje dokładności dla typu celu. Zobacz następujący kod:

Show model ecommerce_customer_activity;

Jak pokazano w poniższych danych wyjściowych, nasz model ma wynik dokładności 0.996580.

Klawisz wartość
Nazwa modelu e-commerce_customer_activity
Nazwa schematu Publiczne
Właściciel Demo
Czas utworzenia pon., 22.03.2021 19:48:30
Stan modelu GOTOWY
Status pracy szkoleniowej Osiągnięto maksymalny czas pracy w trybie automatycznymMLJob
walidacja:dokładność 0.996580
Szacowany koszt 4.260437
DANE SZKOLENIOWE:
Pytanie WYBIERZ ID KLIENTA, KRAJ, KOD STOCKOWY, OPIS, DATĘ FAKTURY, SPRZEDAŻ_AMT, NBR_MONTHS_ACTIVE
OD ECOMMERCE_SALES_CLN_TRAINING
Kolumna docelowa NBR_MONTHS_ACTIVE
Parametry:
Typ modelu Samochody
Rodzaj problemu Klasyfikacja wieloklasowa
Rodzaj problemu Dokładność
Nazwa zadania AutoML 2021-03-07-19-48-30-960148-auto
Nazwa funkcji przewidywać_aktywność_klienta
Parametry funkcji identyfikator klienta kraj kod magazynowy opis data faktury data_sprzedaży
Typy parametrów funkcji int8 varchar varchar varchar varchar float8

Uruchommy zapytania wnioskowania na naszych danych walidacyjnych przy użyciu następującego kodu SQL w odniesieniu do danych walidacyjnych:

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;

Widzimy, że poprawnie przewidziliśmy 99.74% w naszym zestawie danych, co odpowiada naszemu wynikowi dokładności z modelu pokazowego.

przewidywane_mecze przewidywane_nie_dopasowania całkowite_przewidywania pct_dokładność
43489.00 132.00 43621.00 0.99697393

Teraz przeprowadźmy zapytanie, aby zobaczyć, którzy klienci kwalifikują się do naszego programu lojalnościowego, będąc aktywni przez co najmniej 7 miesięcy:

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;

Poniższa tabela przedstawia nasze dane wyjściowe.

Identyfikator klienta przewidywane_miesiące_aktywne
16895 8
18283 10
15044 11
16746 11
14702 11
16607 10
12901 10
15078 13
16393 10
15005 12

Rozwiązywanie problemów

Chociaż Create Model oświadczenie w Amazon Redshift automatycznie zajmuje się zainicjowaniem procesu SageMaker Autopilot w celu zbudowania, przeszkolenia i dostrojenia najlepszego modelu ML oraz wdrożenia tego modelu w Amazon Redshift, możesz wyświetlić kroki pośrednie wykonywane w tym procesie, które mogą również pomóc w rozwiązywaniu problemów jeśli coś pójdzie nie tak. Nazwę zadania AutoML można również pobrać z danych wyjściowych polecenia show model.

Tworząc model, należy wspomnieć o Usługa Amazon Simple Storage (Amazon S3) nazwa zasobnika jako wartość parametru, s3_bucket. Za pomocą tego zasobnika możesz udostępniać dane treningowe i artefakty między Amazon Redshift i SageMaker. Amazon Redshift tworzy podfolder w tym zasobniku przed wyładowaniem danych treningowych. Po zakończeniu treningu usuwa podfolder i jego zawartość, chyba że ustawisz parametr s3_garbage_collect do off, którego możesz użyć do rozwiązywania problemów. Aby uzyskać więcej informacji, zobacz UTWÓRZ MODEL.

Aby uzyskać informacje na temat korzystania z konsoli SageMaker i Studio Amazon SageMaker, Patrz Twórz modele regresji za pomocą Amazon Redshift ML.

Wnioski

Amazon Redshift ML zapewnia odpowiednią platformę dla użytkowników baz danych do tworzenia, trenowania i dostrajania modeli za pomocą interfejsu SQL. W tym poście omówiliśmy, jak stworzyć wieloklasowy model klasyfikacji. Mamy nadzieję, że możesz skorzystać z Amazon Redshift ML, aby uzyskać cenne informacje.

Aby uzyskać więcej informacji na temat budowania różnych modeli za pomocą Amazon Redshift ML, zobacz Twórz modele regresji za pomocą Amazon Redshift ML  i przeczytaj Amazonka Przesunięcie ku czerwieni Dokumentacja ML.

Podziękowanie

Według repozytorium uczenia maszynowego UCI, dane te zostały udostępnione przez dr Daqing Chen, dyrektora: Public Analytics group. chend '@' lsbu.ac.uk, School of Engineering, London South Bank University, London SE1 0AA, Wielka Brytania.

Dua, D. i Graff, C. (2019). Repozytorium uczenia maszynowego UCI [http://archive.ics.uci.edu/ml]. Irvine, Kalifornia: Uniwersytet Kalifornijski, Szkoła Informacji i Informatyki.


O autorach

Phila Batesa jest starszym specjalistą ds. analityki w architektu rozwiązań w AWS z ponad 25-letnim doświadczeniem w hurtowniach danych.

Debu Panda, główny menedżer produktu w AWS, jest liderem w branży w zakresie analityki, platform aplikacyjnych i technologii baz danych oraz ma ponad 25-letnie doświadczenie w świecie IT.

NIkos Koulouris jest inżynierem rozwoju oprogramowania w AWS. Doktoryzował się na Uniwersytecie Kalifornijskim w San Diego i zajmuje się bazami danych oraz analityką.

Enrico Sartorello jest starszym inżynierem ds. rozwoju oprogramowania w Amazon Web Services. Pomaga klientom wdrożyć rozwiązania uczenia maszynowego, które odpowiadają ich potrzebom, opracowując nowe funkcje dla Amazon SageMaker. W wolnym czasie z pasją podąża za swoją drużyną piłkarską i lubi doskonalić swoje umiejętności kulinarne.

Źródło: https://aws.amazon.com/blogs/machine-learning/build-multi-class-classification-models-with-amazon-redshift-ml/

Znak czasu:

Więcej z Blog dotyczący uczenia maszynowego AWS