Dela via


Python-självstudie: Skapa en modell för att kategorisera kunder med SQL-maskininlärning

Gäller för: SQL Server 2017 (14.x) och senare versioner Azure SQL Managed Instance

I del tre i den här självstudieserien i fyra delar skapar du en K-Means-modell i Python för att utföra klustring. I nästa del av den här serien distribuerar du den här modellen i en databas med SQL Server Machine Learning Services eller i stordatakluster.

I del tre i den här självstudieserien i fyra delar skapar du en K-Means-modell i Python för att utföra klustring. I nästa del av den här serien distribuerar du den här modellen i en databas med SQL Server Machine Learning Services.

I del tre i den här självstudieserien i fyra delar skapar du en K-Means-modell i Python för att utföra klustring. I nästa del av den här serien distribuerar du den här modellen i en databas med Azure SQL Managed Instance Machine Learning Services.

I den här artikeln får du lära dig att:

  • Definiera antalet kluster för en K-Means-algoritm
  • Utföra klustring
  • Analysera resultaten

I del ett installerade du förhandskraven och återställde exempeldatabasen.

I del två lärde du dig hur du förbereder data från en databas för att utföra klustring.

I del fyra får du lära dig hur du skapar en lagrad procedur i en databas som kan utföra klustring i Python baserat på nya data.

Förutsättningar

  • Del tre i den här självstudien förutsätter att du har uppfyllt förutsättningarna för del ett och slutfört stegen i del två.

Definiera antalet kluster

För att klustra dina kunddata använder du K-Means-klustringsalgoritmen , ett av de enklaste och mest kända sätten att gruppera data. Du kan läsa mer om K-Means i En komplett guide till K-means-klustringsalgoritmen.

Algoritmen accepterar två indata: Själva data och ett fördefinierat tal "k" som representerar antalet kluster som ska genereras. Utdata är k-kluster med indata partitionerade mellan klustren.

Målet med K-means är att gruppera objekten i k-kluster så att alla objekt i samma kluster liknar varandra och skiljer sig från objekt i andra kluster som möjligt.

Om du vill fastställa antalet kluster som algoritmen ska använda använder du ett diagram med summan av kvadraterna inom grupper, efter antal extraherade kluster. Det lämpliga antalet kluster som ska användas är vid kurvan eller "armbågen" i diagrammet.

################################################################################################
## Determine number of clusters using the Elbow method
################################################################################################

cdata = customer_data
K = range(1, 20)
KM = (sk_cluster.KMeans(n_clusters=k).fit(cdata) for k in K)
centroids = (k.cluster_centers_ for k in KM)

D_k = (sci_distance.cdist(cdata, cent, 'euclidean') for cent in centroids)
dist = (np.min(D, axis=1) for D in D_k)
avgWithinSS = [sum(d) / cdata.shape[0] for d in dist]
plt.plot(K, avgWithinSS, 'b*-')
plt.grid(True)
plt.xlabel('Number of clusters')
plt.ylabel('Average within-cluster sum of squares')
plt.title('Elbow for KMeans clustering')
plt.show()

Armbågsdiagram

Baserat på diagrammet ser det ut som att k = 4 skulle vara ett bra värde att prova. Det k-värdet grupperar kunderna i fyra kluster.

Utföra klustring

I följande Python-skript använder du funktionen KMeans från sklearn-paketet.

################################################################################################
## Perform clustering using Kmeans
################################################################################################

# It looks like k=4 is a good number to use based on the elbow graph.
n_clusters = 4

means_cluster = sk_cluster.KMeans(n_clusters=n_clusters, random_state=111)
columns = ["orderRatio", "itemsRatio", "monetaryRatio", "frequency"]
est = means_cluster.fit(customer_data[columns])
clusters = est.labels_
customer_data['cluster'] = clusters

# Print some data about the clusters:

# For each cluster, count the members.
for c in range(n_clusters):
    cluster_members=customer_data[customer_data['cluster'] == c][:]
    print('Cluster{}(n={}):'.format(c, len(cluster_members)))
    print('-'* 17)
print(customer_data.groupby(['cluster']).mean())

Analysera resultaten

Nu när du har utfört klustring med K-Means är nästa steg att analysera resultatet och se om du kan hitta någon användbar information.

Titta på de klustringsmedelvärden och klusterstorlekar som skrevs ut från föregående skript.

Cluster0(n=31675):
-------------------
Cluster1(n=4989):
-------------------
Cluster2(n=1):
-------------------
Cluster3(n=671):
-------------------

         customer  orderRatio  itemsRatio  monetaryRatio  frequency
cluster
0        50854.809882    0.000000    0.000000       0.000000   0.000000
1        51332.535779    0.721604    0.453365       0.307721   1.097815
2        57044.000000    1.000000    2.000000     108.719154   1.000000
3        48516.023845    0.136277    0.078346       0.044497   4.271237

De fyra klustersätten ges med hjälp av variablerna som definieras i del ett:

  • orderRatio = returorderförhållande (totalt antal ordrar delvis eller helt returnerade jämfört med det totala antalet beställningar)
  • itemsRatio = return item ratio (totalt antal artiklar som returneras jämfört med antalet köpta artiklar)
  • monetaryRatio = förhållandet mellan returbelopp (totalt penningbelopp för poster som returneras jämfört med det köpta beloppet)
  • frequency = återfrekvens

Datautvinning med hjälp av K-Means kräver ofta ytterligare analys av resultaten och ytterligare steg för att bättre förstå varje kluster, men det kan ge några bra leads. Här följer några sätt att tolka dessa resultat:

  • Kluster 0 verkar vara en grupp kunder som inte är aktiva (alla värden är noll).
  • Kluster 3 verkar vara en grupp som sticker ut när det gäller returbeteende.

Kluster 0 är en uppsättning kunder som uppenbarligen inte är aktiva. Du kanske kan rikta marknadsföringsinsatser mot den här gruppen för att utlösa ett intresse för inköp. I nästa steg frågar du databasen efter e-postadresserna till kunder i kluster 0, så att du kan skicka ett marknadsföringsmeddelande till dem.

Rensa resurser

Om du inte ska fortsätta med den här självstudien tar du bort tpcxbb_1gb-databasen.

Nästa steg

I del tre av den här självstudieserien har du slutfört följande steg:

  • Definiera antalet kluster för en K-Means-algoritm
  • Utföra klustring
  • Analysera resultaten

Om du vill distribuera den maskininlärningsmodell som du har skapat följer du del fyra i den här självstudieserien: