Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2017 (14.x) en latere versies
van Azure SQL Managed Instance
In deel vier van deze vierdelige reeks zelfstudies implementeert u een clusteringmodel, ontwikkeld in Python, in een database met behulp van SQL Server Machine Learning Services of op Big Data-clusters.
In deel vier van deze vierdelige reeks zelfstudies implementeert u een clusteringmodel, ontwikkeld in Python, in een database met behulp van SQL Server Machine Learning Services.
In deel vier van deze vierdelige reeks zelfstudies implementeert u een clusteringmodel, ontwikkeld in Python, in een database met behulp van Azure SQL Managed Instance Machine Learning Services.
Als u clustering regelmatig wilt uitvoeren, moet u, omdat nieuwe klanten zich registreren, het Python-script vanuit elke app kunnen aanroepen. Hiervoor kunt u het Python-script in een database implementeren door het Python-script in een opgeslagen SQL-procedure te plaatsen. Omdat uw model wordt uitgevoerd in de database, kan het eenvoudig worden getraind op basis van gegevens die zijn opgeslagen in de database.
In deze sectie verplaatst u de Python-code die u zojuist hebt geschreven naar de server en implementeert u clustering.
In dit artikel leert u het volgende:
- Een opgeslagen procedure maken waarmee het model wordt gegenereerd
- Clustering uitvoeren op de server
- De clusterinformatie gebruiken
In deel 1 hebt u de vereisten geïnstalleerd en de voorbeelddatabase hersteld.
In deel twee hebt u geleerd hoe u de gegevens uit een database voorbereidt om clustering uit te voeren.
In deel drie hebt u geleerd hoe u een K-Means-clusteringmodel maakt en traint in Python.
Vereiste voorwaarden
- In deel vier van deze reeks zelfstudies wordt ervan uitgegaan dat u aan de vereisten van deel 1 hebt voldaan en dat u de stappen in deel 2 en deel drie hebt voltooid.
Een opgeslagen procedure maken waarmee het model wordt gegenereerd
Voer het volgende T-SQL-script uit om de opgeslagen procedure te maken. Met de procedure worden de stappen die u in deel één en twee van deze reeks zelfstudies hebt ontwikkeld, opnieuw gemaakt:
- klanten classificeren op basis van hun aankoop- en retourgeschiedenis
- vier clusters van klanten genereren met behulp van een K-Means-algoritme
USE [tpcxbb_1gb]
GO
DROP procedure IF EXISTS [dbo].[py_generate_customer_return_clusters];
GO
CREATE procedure [dbo].[py_generate_customer_return_clusters]
AS
BEGIN
DECLARE
-- Input query to generate the purchase history & return metrics
@input_query NVARCHAR(MAX) = N'
SELECT
ss_customer_sk AS customer,
CAST( (ROUND(COALESCE(returns_count / NULLIF(1.0*orders_count, 0), 0), 7) ) AS FLOAT) AS orderRatio,
CAST( (ROUND(COALESCE(returns_items / NULLIF(1.0*orders_items, 0), 0), 7) ) AS FLOAT) AS itemsRatio,
CAST( (ROUND(COALESCE(returns_money / NULLIF(1.0*orders_money, 0), 0), 7) ) AS FLOAT) AS monetaryRatio,
CAST( (COALESCE(returns_count, 0)) AS FLOAT) AS frequency
FROM
(
SELECT
ss_customer_sk,
-- return order ratio
COUNT(distinct(ss_ticket_number)) AS orders_count,
-- return ss_item_sk ratio
COUNT(ss_item_sk) AS orders_items,
-- return monetary amount ratio
SUM( ss_net_paid ) AS orders_money
FROM store_sales s
GROUP BY ss_customer_sk
) orders
LEFT OUTER JOIN
(
SELECT
sr_customer_sk,
-- return order ratio
count(distinct(sr_ticket_number)) as returns_count,
-- return ss_item_sk ratio
COUNT(sr_item_sk) as returns_items,
-- return monetary amount ratio
SUM( sr_return_amt ) AS returns_money
FROM store_returns
GROUP BY sr_customer_sk
) returned ON ss_customer_sk=sr_customer_sk
'
EXEC sp_execute_external_script
@language = N'Python'
, @script = N'
import pandas as pd
from sklearn.cluster import KMeans
#get data from input query
customer_data = my_input_data
#We concluded in step 2 in the tutorial that 4 would be a good number of clusters
n_clusters = 4
#Perform clustering
est = KMeans(n_clusters=n_clusters, random_state=111).fit(customer_data[["orderRatio","itemsRatio","monetaryRatio","frequency"]])
clusters = est.labels_
customer_data["cluster"] = clusters
OutputDataSet = customer_data
'
, @input_data_1 = @input_query
, @input_data_1_name = N'my_input_data'
with result sets (("Customer" int, "orderRatio" float,"itemsRatio" float,"monetaryRatio" float,"frequency" float,"cluster" float));
END;
GO
Clustering uitvoeren
Nu u de opgeslagen procedure hebt gemaakt, voert u het volgende script uit om clustering uit te voeren met behulp van de procedure.
--Create a table to store the predictions in
DROP TABLE IF EXISTS [dbo].[py_customer_clusters];
GO
CREATE TABLE [dbo].[py_customer_clusters] (
[Customer] [bigint] NULL
, [OrderRatio] [float] NULL
, [itemsRatio] [float] NULL
, [monetaryRatio] [float] NULL
, [frequency] [float] NULL
, [cluster] [int] NULL
,
) ON [PRIMARY]
GO
--Execute the clustering and insert results into table
INSERT INTO py_customer_clusters
EXEC [dbo].[py_generate_customer_return_clusters];
-- Select contents of the table to verify it works
SELECT * FROM py_customer_clusters;
De clusterinformatie gebruiken
Omdat u de clusterprocedure in de database hebt opgeslagen, kan het clusteren efficiënt worden uitgevoerd op basis van klantgegevens die zijn opgeslagen in dezelfde database. U kunt de procedure uitvoeren wanneer uw klantgegevens worden bijgewerkt en de bijgewerkte clusterinformatie gebruiken.
Stel dat u een promotie-e-mail wilt verzenden naar klanten in cluster 0, de groep die inactief was (u kunt zien hoe de vier clusters zijn beschreven in deel drie van deze zelfstudie). Met de volgende code worden de e-mailadressen van klanten in cluster 0 geselecteerd.
USE [tpcxbb_1gb]
--Get email addresses of customers in cluster 0 for a promotion campaign
SELECT customer.[c_email_address], customer.c_customer_sk
FROM dbo.customer
JOIN
[dbo].[py_customer_clusters] as c
ON c.Customer = customer.c_customer_sk
WHERE c.cluster = 0
U kunt de c.cluster-waarde wijzigen om e-mailadressen te retourneren voor klanten in andere clusters.
De hulpbronnen opschonen
Wanneer u klaar bent met deze zelfstudie, kunt u de tpcxbb_1gb-database verwijderen.
Volgende stappen
In deel vier van deze reeks zelfstudies hebt u de volgende stappen uitgevoerd:
- Een opgeslagen procedure maken waarmee het model wordt gegenereerd
- Clustering uitvoeren op de server
- De clusterinformatie gebruiken
Zie voor meer informatie over het gebruik van Python in SQL Machine Learning: