Zephyrnet-Logo

Erstellen Sie Klassifizierungsmodelle mit mehreren Klassen mit Amazon Redshift ML

Datum:

Amazon Redshift ML vereinfacht die Verwendung von Machine Learning (ML) durch Verwendung einfacher SQL-Anweisungen zum Erstellen und Trainieren von ML-Modellen aus Daten in Amazon RedShift. Sie können Amazon Redshift ML verwenden, um Binärklassifizierungs-, Mehrklassenklassifizierungs- und Regressionsprobleme zu lösen und entweder AutoML oder XGBoost direkt verwenden.

Dieser Beitrag ist Teil einer Serie, die die Verwendung von Amazon Redshift ML beschreibt. Weitere Informationen zum Erstellen von Regressionen mit Amazon Redshift ML finden Sie unter Erstellen Sie Regressionsmodelle mit Amazon Redshift ML.

Sie können Amazon Redshift ML verwenden, um die Datenvorbereitung, Vorverarbeitung und Auswahl des Problemtyps zu automatisieren, wie in . dargestellt dieser Blog-Post. Wir gehen davon aus, dass Sie Ihre Daten gut kennen und wissen, welcher Problemtyp für Ihren Anwendungsfall am besten geeignet ist. Dieser Beitrag konzentriert sich speziell auf das Erstellen von Modellen in Amazon Redshift unter Verwendung des Problemtyps für die Klassifizierung mit mehreren Klassen, die darin besteht, Instanzen in eine von drei oder mehr Klassen zu klassifizieren. Sie können beispielsweise vorhersagen, ob eine Transaktion betrügerisch, fehlgeschlagen oder erfolgreich ist, ob ein Kunde 3 Monate, 12 Monate, XNUMX Monate, XNUMX Monate aktiv bleibt oder ob eine Nachricht als Sport, Weltnachrichten, Wirtschaft markiert ist.

Voraussetzungen:

Als Voraussetzung für die Implementierung dieser Lösung müssen Sie einen Amazon Redshift-Cluster mit aktiviertem ML einrichten. Die vorbereitenden Schritte für den Einstieg finden Sie unter Erstellen, trainieren und implementieren Sie Machine-Learning-Modelle in Amazon Redshift mithilfe von SQL mit Amazon Redshift ML.

Anwendungsfall

Für unseren Anwendungsfall wollen wir unsere aktivsten Kunden für ein spezielles Kundenbindungsprogramm ansprechen. Wir verwenden Amazon Redshift ML und die Mehrklassenklassifizierung, um vorherzusagen, wie viele Monate ein Kunde über einen Zeitraum von 13 Monaten aktiv sein wird. Dies führt zu bis zu 13 möglichen Klassen, wodurch dies besser für die Klassifizierung mit mehreren Klassen geeignet ist. Kunden mit einer prognostizierten Aktivität von 7 Monaten oder länger werden für ein spezielles Kundenbindungsprogramm angesprochen.

Rohdaten eingeben

Um die Rohdaten für dieses Modell vorzubereiten, haben wir die Tabelle ecommerce_sales in Amazon Redshift mit dem öffentlichen Datensatz gefüllt E-Commerce-Verkaufsprognose, die Verkaufsdaten eines britischen Online-Händlers enthält.

Geben Sie die folgenden Anweisungen ein, um die Daten in Amazon Redshift zu laden:

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;

Um dieses Skript in Ihrer Umgebung zu reproduzieren, ersetzen Sie < > an. Nach der Installation können Sie HEIC-Dateien mit der AWS Identity and Access Management and (IAM) ARN für Ihren Amazon Redshift-Cluster.

Datenaufbereitung für das ML-Modell

Nachdem unser Datensatz nun geladen ist, können wir die Daten optional in drei Sätze für Training (80 %), Validierung (10 %) und Vorhersage (10 %) aufteilen. Beachten Sie, dass Amazon Redshift ML Autopilot die Daten automatisch in Training und Validierung aufteilt, aber wenn Sie sie hier aufteilen, können Sie die Genauigkeit Ihres Modells überprüfen. Darüber hinaus berechnen wir die Anzahl der Monate, in denen ein Kunde aktiv war, da dies der Wert ist, den unser Modell für neue Daten vorhersagen soll. Wir verwenden die Random-Funktion in unseren SQL-Anweisungen, um die Daten aufzuteilen. Siehe folgenden Code:

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

Trainingsset

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

Validierungssatz

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

Vorhersage-Set

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

Erstellen Sie das Modell in Amazon Redshift

Nachdem wir nun unsere Trainings- und Validierungsdatensätze erstellt haben, können wir die Modell erstellen -Anweisung in Amazon Redshift zum Erstellen unseres ML-Modells mit Multiclass_Classification. Wir spezifizieren den Problemtyp, aber wir lassen AutoML sich um alles andere kümmern. In diesem Modell ist das Ziel, das wir vorhersagen wollen, nbr_months_active. Amazon Sage Maker erstellt die Funktion predict_customer_activity, die wir für die Inferenz in Amazon Redshift verwenden. Siehe folgenden Code:

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

Um dieses Skript in Ihrer Umgebung zu reproduzieren, ersetzen Sie < > mit dem IAM-Rollen-ARN Ihres Clusters.

Vorhersagen validieren

In diesem Schritt bewerten wir die Genauigkeit unseres ML-Modells anhand unserer Validierungsdaten.

Beim Erstellen des Modells Amazon SageMaker-Autopilot teilt die Eingabedaten automatisch in Trainings- und Validierungssätze auf und wählt das Modell mit der besten objektiven Metrik aus, das im Amazon Redshift-Cluster bereitgestellt wird. Sie können die Anweisung show model in Ihrem Cluster verwenden, um verschiedene Metriken anzuzeigen, einschließlich der Genauigkeitsbewertung. Wenn Sie dies nicht explizit angeben, verwendet SageMaker automatisch die Genauigkeit für den Zieltyp. Siehe folgenden Code:

Show model ecommerce_customer_activity;

Wie in der folgenden Ausgabe gezeigt, hat unser Modell einen Genauigkeitswert von 0.996580.

Wesentliche Wert
Modell ecommerce_customer_activity
Schemaname Öffentliche
Eigentümer Demo
Erstellungszeitpunkt Mo, 22.03.2021 19:48:30
Modellstatus BEREIT
Ausbildungsjobstatus MaxAutoMLJobRuntimeReached
Validierung: Genauigkeit 0.996580
Geschätzte Kosten 4.260437
TRAININGSDATEN:
Abfrage WÄHLEN SIE KUNDENID, LAND, STOCKCODE, BESCHREIBUNG, RECHNUNGSDATUM, SALES_AMT, NBR_MONTHS_ACTIVE
VON ECOMMERCE_SALES_CLN_TRAINING
Zielspalte NBR_MONTHS_ACTIVE
PARAMETER:
Modelltyp Auto
Problemtyp Multiklassifizierung
Problemtyp Genauigkeit
AutoML-Auftragsname 2021-03-07-19-48-30-960148-auto
Funktionsname Predict_customer_activity
Funktionsparameter Kunden-ID Land Lagercode Beschreibung Rechnungsdatum sales_amt
Funktionsparametertypen int8 varchar varchar varchar varchar float8

Lassen Sie uns Rückschlussabfragen für unsere Validierungsdaten ausführen, indem wir den folgenden SQL-Code für die Validierungsdaten verwenden:

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;

Wir können sehen, dass wir in unserem Datensatz zu 99.74% richtig vorhergesagt haben, was unserem Genauigkeitswert aus dem Show-Modell entspricht.

vorhergesagte_matches vorhergesagt_non_matches total_predictions pct_accuracy
43489.00 132.00 43621.00 0.99697393

Lassen Sie uns nun eine Abfrage durchführen, um zu sehen, welche Kunden sich für unser Kundenbindungsprogramm qualifizieren, wenn sie mindestens 7 Monate aktiv sind:

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;

Die folgende Tabelle zeigt unsere Ausgabe.

Kundennummer vorhergesagt_monate_aktiv
16895 8
18283 10
15044 11
16746 11
14702 11
16607 10
12901 10
15078 13
16393 10
15005 12

Problemlösung

Obwohl die Create Model -Anweisung in Amazon Redshift automatisch den SageMaker Autopilot-Prozess einleitet, um das beste ML-Modell zu erstellen, zu trainieren und abzustimmen und dieses Modell in Amazon Redshift bereitzustellen, können Sie die in diesem Prozess durchgeführten Zwischenschritte anzeigen, die Ihnen auch bei der Fehlerbehebung helfen können Wenn etwas schief läuft. Sie können den AutoML-Auftragsnamen auch aus der Ausgabe des Befehls show model abrufen.

Beim Erstellen des Modells müssen Sie einen Amazon Simple Storage-Service (Amazon S3) Bucket-Name als Wert für Parameter, s3_bucket. Sie verwenden diesen Bucket, um Trainingsdaten und Artefakte zwischen Amazon Redshift und SageMaker auszutauschen. Amazon Redshift erstellt in diesem Bucket einen Unterordner, bevor die Trainingsdaten entladen werden. Wenn das Training abgeschlossen ist, löscht es den Unterordner und seinen Inhalt, es sei denn, Sie legen den Parameter fest s3_garbage_collect zu off, die Sie zur Fehlerbehebung verwenden können. Weitere Informationen finden Sie unter MODELL ERSTELLEN.

Informationen zur Verwendung der SageMaker-Konsole und Amazon SageMaker-Studio, Siehe Erstellen Sie Regressionsmodelle mit Amazon Redshift ML.

Zusammenfassung

Amazon Redshift ML bietet Datenbankbenutzern die richtige Plattform zum Erstellen, Trainieren und Optimieren von Modellen mithilfe einer SQL-Schnittstelle. In diesem Beitrag haben wir Sie durch die Erstellung eines Klassifizierungsmodells mit mehreren Klassen geführt. Wir hoffen, dass Sie Amazon Redshift ML nutzen können, um wertvolle Erkenntnisse zu gewinnen.

Weitere Informationen zum Erstellen verschiedener Modelle mit Amazon Redshift ML finden Sie unter Erstellen Sie Regressionsmodelle mit Amazon Redshift ML  und lesen Sie die Amazon RedShift ML-Dokumentation.

Anerkennungen

Laut UCI Machine Learning Repository wurden diese Daten von Dr. Daqing Chen, Direktor: Public Analytics Group, zur Verfügung gestellt. chend '@' lsbu.ac.uk, School of Engineering, London South Bank University, London SE1 0AA, UK.

Dua, D. und Graff, C. (2019). UCI-Repository für maschinelles Lernen [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.


Über die Autoren

Phil Bates ist Senior Analytics Specialist Solutions Architect bei AWS mit über 25 Jahren Data Warehouse-Erfahrung.

Debu Panda, Principal Product Manager bei AWS, ist ein Branchenführer in den Bereichen Analyse-, Anwendungsplattform- und Datenbanktechnologien und verfügt über mehr als 25 Jahre Erfahrung in der IT-Welt.

NIkos Koulouris ist Softwareentwicklungsingenieur bei AWS. Er promovierte an der University of California, San Diego und arbeitete in den Bereichen Datenbanken und Analytik.

Enrico Sartorello ist Senior Software Development Engineer bei Amazon Web Services. Er unterstützt Kunden bei der Einführung von Lösungen für maschinelles Lernen, die ihren Anforderungen entsprechen, indem er neue Funktionen für Amazon SageMaker entwickelt. In seiner Freizeit folgt er leidenschaftlich seiner Fußballmannschaft und verbessert gerne seine Kochkünste.

Münzsmart. Beste Bitcoin-Börse in Europa
Quelle: https://aws.amazon.com/blogs/machine-learning/build-multi-class-classification-models-with-amazon-redshift-ml/

spot_img

Neueste Intelligenz

spot_img