Bouw classificatiemodellen met meerdere klassen met Amazon Redshift ML

Bronknooppunt: 1854697

Amazon RedshiftML vereenvoudigt het gebruik van machine learning (ML) door eenvoudige SQL-instructies te gebruiken om ML-modellen te maken en te trainen op basis van gegevens in data Amazon roodverschuiving. U kunt Amazon Redshift ML gebruiken om problemen met binaire classificatie, classificatie met meerdere klassen en regressie op te lossen en u kunt AutoML of XGBoost rechtstreeks gebruiken.

Dit bericht maakt deel uit van een serie die het gebruik van Amazon Redshift ML beschrijft. Voor meer informatie over het bouwen van regressie met Amazon Redshift ML, zie: Bouw regressiemodellen met Amazon Redshift ML.

U kunt Amazon Redshift ML gebruiken om gegevensvoorbereiding, voorverwerking en selectie van het probleemtype te automatiseren, zoals weergegeven in deze blog post. We gaan ervan uit dat u een goed begrip heeft van uw gegevens en welk probleemtype het meest van toepassing is op uw use case. Dit bericht richt zich specifiek op het maken van modellen in Amazon Redshift met behulp van het classificatieprobleemtype met meerdere klassen, die bestaat uit het classificeren van instanties in een van drie of meer klassen. U kunt bijvoorbeeld voorspellen of een transactie frauduleus, mislukt of succesvol is, of een klant 3 maanden, zes maanden, negen maanden, 12 maanden actief blijft, of dat nieuws wordt getagd als sport, wereldnieuws, zakelijk.

Voorwaarden

Als voorwaarde voor het implementeren van deze oplossing moet u een Amazon Redshift-cluster opzetten waarop ML is ingeschakeld. Voor de voorbereidende stappen om aan de slag te gaan, zie Maak, train en implementeer machine learning-modellen in Amazon Redshift met behulp van SQL met Amazon Redshift ML.

Gebruik geval

Voor onze use case willen we onze meest actieve klanten targeten voor een speciaal klantenloyaliteitsprogramma. We gebruiken Amazon Redshift ML en classificatie met meerdere klassen om te voorspellen hoeveel maanden een klant actief zal zijn over een periode van 13 maanden. Dit vertaalt zich in maximaal 13 mogelijke klassen, waardoor dit beter geschikt is voor classificatie met meerdere klassen. Klanten met een voorspelde activiteit van 7 maanden of langer worden getarget op een speciaal klantenloyaliteitsprogramma.

Ruwe gegevens invoeren

Om de onbewerkte gegevens voor dit model voor te bereiden, hebben we de tabel ecommerce_sales in Amazon Redshift ingevuld met behulp van de openbare dataset Verkoopprognose voor e-commerce, die verkoopgegevens van een online Britse detailhandelaar bevat.

Voer de volgende instructies in om de gegevens naar Amazon Redshift te 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;

Om dit script in uw omgeving te reproduceren, vervangt u < > met de AWS Identiteits- en toegangsbeheer (IAM) ARN voor uw Amazon Redshift-cluster.

Gegevensvoorbereiding voor het ML-model

Nu onze dataset is geladen, kunnen we de data eventueel opsplitsen in drie sets voor training (80%), validatie (10%) en voorspelling (10%). Merk op dat Amazon Redshift ML Autopilot de gegevens automatisch opsplitst in training en validatie, maar door deze hier te splitsen, kunt u de nauwkeurigheid van uw model verifiรซren. Daarnaast berekenen we het aantal maanden dat een klant actief is geweest, omdat dit de waarde is die we willen dat ons model op basis van nieuwe gegevens voorspelt. We gebruiken de willekeurige functie in onze SQL-instructies om de gegevens te splitsen. Zie de volgende 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
);

Validatieset

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

Voorspelling ingesteld

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

Maak het model in Amazon Redshift

Nu we onze trainings- en validatiegegevenssets hebben gemaakt, kunnen we de maak een model statement in Amazon Redshift om ons ML-model te maken met behulp van Multiclass_Classification. We specificeren het probleemtype, maar we laten AutoML voor al het andere zorgen. In dit model is het doel dat we willen voorspellen: nbr_months_active. Amazon Sage Maker creรซert de functie predict_customer_activity, die we gebruiken om gevolgtrekkingen uit te voeren in Amazon Redshift. Zie de volgende 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 );

Om dit script in uw omgeving te reproduceren, vervangt u < > met de IAM-rol ARN van uw cluster.

Voorspellingen valideren

In deze stap evalueren we de nauwkeurigheid van ons ML-model ten opzichte van onze validatiegegevens.

Tijdens het maken van het model, Amazon SageMaker-stuurautomaat splitst automatisch de invoergegevens in trein- en validatiesets en selecteert het model met de beste objectieve metriek, die wordt ingezet in het Amazon Redshift-cluster. U kunt de show model statement in uw cluster gebruiken om verschillende metrische gegevens te bekijken, waaronder de nauwkeurigheidsscore. Als u dit niet expliciet opgeeft, gebruikt SageMaker automatisch nauwkeurigheid voor het type doelstelling. Zie de volgende code:

Show model ecommerce_customer_activity;

Zoals te zien is in de volgende uitvoer, heeft ons model een nauwkeurigheidsscore van 0.996580.

sleutel Waarde
Modelnaam e-commerce_klant_activiteit
Schema naam Publieke
Eigenaar Demo
Aanmaak tijd ma, 22.03.2021 19:48:30
Modelstatus: GEREED
Trainingstaakstatus MaxAutoMLJobRuntimeReached
validatie:nauwkeurigheid 0.996580
Geschatte kosten 4.260437
TRAININGSDATA:
Vraag SELECTEER KLANT-ID, LAND, STOCKCODE, BESCHRIJVING, FACTUURDATUM, SALES_AMT, NBR_MONTHS_ACTIVE
VAN ECOMMERCE_SALES_CLN_TRAINING
Doelkolom NBR_MONTHS_ACTIEF
PARAMETERS:
Model type automobiel
Probleemtype Classificatie met meerdere klassen
Probleemtype Nauwkeurigheid
AutoML-taaknaam 2021-03-07-19-48-30-960148-auto
Functie Naam voorspellen_klantactiviteit
Functieparameters klantnummer land voorraadcode omschrijving factuurdatum sales_amt
Functieparametertypen: int8 varchar varchar varchar varchar float8

Laten we gevolgtrekkingsquery's uitvoeren op onze validatiegegevens met behulp van de volgende SQL-code op de validatiegegevens:

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;

We kunnen zien dat we op 99.74% correct hebben voorspeld op onze dataset, wat overeenkomt met onze nauwkeurigheidsscore van het showmodel.

voorspelde_overeenkomsten voorspelde_niet_overeenkomsten totale_voorspellingen pct_nauwkeurigheid
43489.00 132.00 43621.00 0.99697393

Laten we nu een zoekopdracht uitvoeren om te zien welke klanten in aanmerking komen voor ons klantenloyaliteitsprogramma door minimaal 7 maanden actief te zijn:

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;

De volgende tabel toont onze output.

Klanten ID voorspelde_maanden_actief
16895 8
18283 10
15044 11
16746 11
14702 11
16607 10
12901 10
15078 13
16393 10
15005 12

Probleem oplossen

Hoewel de Create Model verklaring in Amazon Redshift zorgt automatisch voor het starten van het SageMaker Autopilot-proces om het beste ML-model te bouwen, te trainen en af โ€‹โ€‹te stemmen en dat model in Amazon Redshift te implementeren, kunt u de tussenliggende stappen bekijken die in dit proces zijn uitgevoerd, wat u ook kan helpen bij het oplossen van problemen als er iets misgaat. U kunt de AutoML-taaknaam ook ophalen uit de uitvoer van de opdracht show model.

Bij het maken van het model moet u een . vermelden Amazon eenvoudige opslagservice (Amazon S3) bucketnaam als de waarde voor parameter, s3_bucket. Je gebruikt deze bucket om trainingsgegevens en artefacten te delen tussen Amazon Redshift en SageMaker. Amazon Redshift maakt een submap in deze bucket voordat de trainingsgegevens worden verwijderd. Wanneer de training is voltooid, worden de submap en de inhoud ervan verwijderd, tenzij u de parameter instelt s3_garbage_collect naar off, die u kunt gebruiken voor het oplossen van problemen. Voor meer informatie, zie MAAK EEN MODEL.

Voor informatie over het gebruik van de SageMaker-console en: Amazon SageMaker Studio, Zie Bouw regressiemodellen met Amazon Redshift ML.

Conclusie

Amazon Redshift ML biedt het juiste platform voor databasegebruikers om modellen te maken, te trainen en af โ€‹โ€‹te stemmen met behulp van een SQL-interface. In dit bericht hebben we u uitgelegd hoe u een classificatiemodel met meerdere klassen kunt maken. We hopen dat u kunt profiteren van Amazon Redshift ML om waardevolle inzichten te verkrijgen.

Voor meer informatie over het bouwen van verschillende modellen met Amazon Redshift ML, zie: Bouw regressiemodellen met Amazon Redshift ML  en lees de Amazon roodverschuiving ML-documentatie.

Dankwoord

Volgens de UCI Machine Learning Repository zijn deze gegevens beschikbaar gesteld door Dr. Daqing Chen, directeur van de Public Analytics-groep. chend '@' lsbu.ac.uk, School of Engineering, London South Bank University, London SE1 0AA, VK.

Dua, D. en Graff, C. (2019). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: Universiteit van Californiรซ, School voor Informatie en Computerwetenschappen.


Over de auteurs

Phil Bates is een Senior Analytics Specialist Solutions Architect bij AWS met meer dan 25 jaar datawarehouse-ervaring.

Debu Panda, een hoofdproductmanager bij AWS, is een marktleider op het gebied van analyse-, applicatieplatform- en databasetechnologieรซn en heeft meer dan 25 jaar ervaring in de IT-wereld.

Nikos Koulouris is een Software Development Engineer bij AWS. Hij is gepromoveerd aan de Universiteit van Californiรซ, San Diego en heeft gewerkt op het gebied van databases en analyses.

Enrico Sartorello is Sr. Software Development Engineer bij Amazon Web Services. Hij helpt klanten bij het adopteren van machine learning-oplossingen die passen bij hun behoeften door nieuwe functionaliteiten voor Amazon SageMaker te ontwikkelen. In zijn vrije tijd volgt hij met passie zijn voetbalteam en werkt hij graag aan zijn kookkunsten.

Bron: https://aws.amazon.com/blogs/machine-learning/build-multi-class-classification-models-with-amazon-redshift-ml/

Tijdstempel:

Meer van AWS Blog over machine learning