Megosztás a következőn keresztül:


Python-oktatóanyag: Modell üzembe helyezése az ügyfelek sql-alapú gépi tanulással való kategorizálásához

A következőkre vonatkozik: Sql Server 2017 (14.x) és újabb verziók Felügyelt Azure SQL-példány

A négyrészes oktatóanyag-sorozat negyedik részében üzembe helyez egy Pythonban fejlesztett fürtözési modellt egy SQL Server Machine Learning Services vagy Big Data-fürtök használatával.

A négyrészes oktatóanyag-sorozat negyedik részében egy Pythonban kifejlesztett klaszterezési modellt fog telepíteni az SQL Server Machine Learning Services segítségével egy adatbázisba.

A négyrészes oktatóanyag-sorozat negyedik részében egy Pythonban kifejlesztett fürtözési modellt fog üzembe helyezni egy adatbázisba az Azure SQL Managed Instance Machine Learning Services használatával.

Ahhoz, hogy rendszeresen klaszterezhessen, ahogy új ügyfelek regisztrálnak, képesnek kell lennie meghívni a Python-szkriptet bármilyen alkalmazásból. Ehhez üzembe helyezheti a Python-szkriptet egy adatbázisban úgy, hogy a Python-szkriptet egy SQL-ben tárolt eljárásba helyezi. Mivel a modell az adatbázisban fut, közvetlenül betanítható az adatbázisban tárolt adatokkal.

Ebben a szakaszban áthelyezi az imént írt Python-kódot a szerverre, és elindítja a fürtözést.

Ebben a cikkben megtudhatja, hogyan:

  • A modellt létrehozó tárolt eljárás létrehozása
  • Fürtözés végrehajtása a kiszolgálón
  • A fürtözési adatok használata

Az első részben telepítette az előfeltételeket, és visszaállította a mintaadatbázist.

A második részben megtanulta, hogyan készítheti elő az adatokat egy adatbázisból a fürtözés végrehajtására.

A harmadik részben megtanulta, hogyan hozhat létre és taníthat be K-Means fürtözési modellt a Pythonban.

Előfeltételek

A modellt létrehozó tárolt eljárás létrehozása

Futtassa a következő T-SQL-szkriptet a tárolt eljárás létrehozásához. Az eljárás újra létrehozza az oktatóanyag-sorozat első és második részében kifejlesztett lépéseket:

  • az ügyfelek besorolása a vásárlási és visszaküldési előzmények alapján
  • Négy ügyfélcsoport létrehozása a K-Means algoritmus alkalmazásával.
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

Fürtözés végrehajtása

Most, hogy létrehozta a tárolt eljárást, hajtsa végre a következő szkriptet, hogy klaszterezést hajtson végre az eljárás segítségével.

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

A fürtözési adatok használata

Mivel a klaszterezési eljárást az adatbázisban tárolta, hatékonyan végezhet klaszterezést az ugyanazon az adatbázisban tárolt ügyféladatokon. Az eljárást bármikor végrehajthatja, amikor csak frissítik az ügyféladatokat, és alkalmazhatja a frissített klaszterezési információkat.

Tegyük fel, hogy promóciós e-mailt szeretne küldeni a 0. fürtben lévő ügyfeleknek, az inaktív csoportnak (az oktatóanyag harmadik részében láthatja, hogyan írta le a négy fürtöt). Az alábbi kód a 0. klaszter ügyfelei e-mail-címeit választja ki.

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

A c.cluster értékét módosítva visszakaphatja más fürtökben található ügyfelek e-mail-címeit.

Erőforrások tisztítása

Ha befejezte ezt az oktatóanyagot, törölheti a tpcxbb_1gb adatbázist.

Következő lépések

Az oktatóanyag-sorozat negyedik részében az alábbi lépéseket hajtotta végre:

  • A modellt létrehozó tárolt eljárás létrehozása
  • A fürtözés végrehajtása a kiszolgálón
  • A fürtözési adatok használata

A Python sql-alapú gépi tanulásban való használatáról a következő témakörben olvashat bővebben: