Aracılığıyla paylaş


Python öğreticisi: SQL makine öğrenmesi ile müşterileri kategorilere ayırmak için model dağıtma

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri Azure SQL Yönetimli Örnek

Bu dört bölümden oluşan öğretici serisinin dördüncü bölümünde, Python'da geliştirilen bir kümeleme modelini SQL Server Machine Learning Services veya Büyük Veri Kümeleri kullanarak bir veritabanına dağıtacaksınız.

Bu dört bölümden oluşan öğretici serisinin dördüncü bölümünde, Python'da geliştirilen bir kümeleme modelini SQL Server Machine Learning Services kullanarak bir veritabanına dağıtacaksınız.

Bu dört bölümden oluşan öğretici serisinin dördüncü bölümünde, Python'da geliştirilen bir kümeleme modelini Azure SQL Yönetilen Örneği Machine Learning Services kullanarak bir veritabanına dağıtacaksınız.

Yeni müşteriler kaydolarak düzenli aralıklarla kümeleme gerçekleştirmek için herhangi bir Uygulamadan Python betiğini çağırabilmeniz gerekir. Bunu yapmak için Python betiğini bir SQL saklı yordamının içine yerleştirerek python betiğini bir veritabanına dağıtabilirsiniz. Modeliniz veritabanında yürütülürken, veritabanında depolanan verilere karşı kolayca eğitilebilir.

Bu bölümde, az önce yazdığınız Python kodunu sunucuya taşıyacak ve kümeleme dağıtacaksınız.

Bu makalede şunları nasıl yapacağınızı öğreneceksiniz:

  • Modeli üreten saklı yordam oluşturun
  • Sunucuda kümeleme gerçekleştirme
  • Kümeleme bilgilerini kullanma

Birinci bölümde önkoşulları yüklemiş ve örnek veritabanını geri yüklemişsinizdir.

İkinci bölümde, kümeleme gerçekleştirmek için veritabanındaki verileri nasıl hazırlayabileceğinizi öğrendinsiniz.

Üçüncü bölümde Python'da K-Means kümeleme modeli oluşturmayı ve eğitmeyi öğrendiniz.

Önkoşullar

  • Bu öğretici serisinin dördüncü bölümünde birinci bölümün önkoşullarını yerine getirdiğiniz ve ikinci ve üçüncübölümdeki adımları tamamladığınız varsayılır.

Modeli üreten saklı yordam oluşturun

Saklı yordamı oluşturmak için aşağıdaki T-SQL betiğini çalıştırın. Prosedür, bu öğretici serisinin birinci ve ikinci bölümlerinde geliştirdiğiniz adımları yeniden oluşturur.

  • müşterileri satın alma ve iade geçmişine göre sınıflandırma
  • K-Means algoritması kullanarak dört müşteri kümesi oluşturma
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

Kümeleme gerçekleştirme

Saklı yordamı oluşturduğunuza göre, yordamı kullanarak kümeleme gerçekleştirmek için aşağıdaki betiği yürütebilirsiniz.

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

Kümeleme bilgilerini kullanma

Kümeleme yordamını veritabanında depoladığınız için, aynı veritabanında depolanan müşteri verilerine karşı kümeleme işlemini verimli bir şekilde gerçekleştirebilir. Müşteri verileriniz her güncelleştirildiğinde yordamı yürütebilir ve güncelleştirilmiş kümeleme bilgilerini kullanabilirsiniz.

Etkin olmayan grup olan küme 0'daki müşterilere tanıtım amaçlı bir e-posta göndermek istediğinizi varsayalım (bu öğreticinin üçüncü bölümünde dört kümenin nasıl açıklandığını görebilirsiniz). Aşağıdaki kod, küme 0'daki müşterilerin e-posta adreslerini seçer.

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

Diğer kümelerdeki müşterilerin e-posta adreslerini döndürmek için c.cluster değerini değiştirebilirsiniz.

Kaynakları temizle

Bu öğreticiyi tamamladığınızda tpcxbb_1gb veritabanını silebilirsiniz.

Sonraki Adımlar

Bu öğretici serisinin dördüncü bölümünde şu adımları tamamladınız:

  • Modeli üreten saklı yordam oluşturun
  • Sunucuda kümeleme gerçekleştirme
  • Kümeleme bilgilerini kullanma

SQL makine öğrenmesinde Python kullanma hakkında daha fazla bilgi edinmek için bkz: