Sdílet prostřednictvím


Kurz Pythonu: Vytvoření modelu pro kategorizaci zákazníků pomocí strojového učení SQL

Platí pro: SQL Server 2017 (14.x) a novější verze Azure SQL Managed Instance

Ve třetí části této čtyřdílné série kurzů vytvoříte v Pythonu model K-Means, který provede clustering. V další části této série nasadíte tento model do databáze se službou SQL Server Machine Learning Services nebo v clusterech s velkými objemy dat.

Ve třetí části této čtyřdílné série kurzů vytvoříte v Pythonu model K-Means, který provede clustering. V další části této série nasadíte tento model do databáze se službou SQL Server Machine Learning Services.

Ve třetí části této čtyřdílné série kurzů vytvoříte v Pythonu model K-Means, který provede clustering. V další části této série nasadíte tento model do databáze se službou Azure SQL Managed Instance Machine Learning Services.

V tomto článku se naučíte:

  • Definování počtu clusterů pro algoritmu K-Means
  • Proveď klastrovaní
  • Analýza výsledků

V první části jste nainstalovali požadavky a obnovili ukázkovou databázi.

V druhé části jste zjistili, jak připravit data z databáze na clustering.

Ve čtvrté části se dozvíte, jak vytvořit uloženou proceduru v databázi, která může provádět clustering v Pythonu na základě nových dat.

Požadavky

Definování počtu clusterů

Ke clusterování zákaznických dat použijete algoritmus clusteringu K-Means , jeden z nejjednodušších a nejznámějších způsobů seskupování dat. Další informace o K-Means najdete v úplném průvodci algoritmem clusteringu K-Means.

Algoritmus přijímá dva vstupy: samotná data a předdefinované číslo "k" představující počet clusterů, které se mají vygenerovat. Výstupem jsou clustery k se vstupními daty rozdělenými mezi clustery.

Cílem K-means je seskupit položky do clusterů k tak, aby všechny položky ve stejném clusteru byly podobné sobě a co nejvíce odlišné od položek v jiných clusterech.

Pokud chcete určit počet shluků, které má algoritmus použít, použijte graf součtu čtverců v rámci skupin podle počtu získaných shluků. Vhodný počet klastrů, které se mají použít, je v místě zalomení nebo "loktu" grafu.

################################################################################################
## 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()

Graf loktů

Na základě grafu to vypadá, že k = 4 by bylo dobrou hodnotou vyzkoušet. Tato hodnota k seskupí zákazníky do čtyř clusterů.

Proveď klastrovaní

V následujícím skriptu Pythonu použijete funkci KMeans z balíčku sklearn.

################################################################################################
## 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())

Analýza výsledků

Teď, když jste provedli clustering pomocí K-Means, je dalším krokem analýza výsledku a zjištění, jestli najdete nějaké užitečné informace.

Podívejte se na střední hodnoty clusteringu a velikosti clusterů vytištěné z předchozího skriptu.

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

Čtyři prostředky clusteru jsou dány pomocí proměnných definovaných v první části:

  • orderRatio = poměr vrácených objednávek (celkový počet objednávek částečně nebo zcela vrácených oproti celkovému počtu objednávek)
  • itemsRatio = poměr vrácených položek (celkový počet vrácených položek oproti počtu zakoupených položek)
  • monetaryRatio = poměr výnosové částky (celková peněžní částka vrácených položek a zakoupená částka)
  • frequency = návratová frekvence

Dolování dat pomocí K-Means často vyžaduje další analýzu výsledků a další kroky k lepšímu pochopení každého clusteru, ale může poskytnout některé dobré zájemce. Tady je několik způsobů, jak byste mohli tyto výsledky interpretovat:

  • Zdá se, že cluster 0 je skupina zákazníků, kteří nejsou aktivní (všechny hodnoty jsou nula).
  • Zdá se, že cluster 3 je skupina, která vynikne z hlediska chování při návratu.

Cluster 0 je sada zákazníků, kteří nejsou jasně aktivní. Možná můžete cílit na marketingové úsilí v této skupině, aby aktivovalo zájem o nákupy. V dalším kroku se do databáze dotazujete na e-mailové adresy zákazníků v clusteru 0, abyste jim mohli poslat marketingový e-mail.

Vyčistěte zdroje

Pokud nebudete pokračovat v tomto kurzu, odstraňte tpcxbb_1gb databázi.

Další kroky

Ve třetí části této série kurzů jste dokončili tyto kroky:

  • Definování počtu clusterů pro algoritmu K-Means
  • Proveď klastrovaní
  • Analýza výsledků

Pokud chcete nasadit model strojového učení, který jste vytvořili, postupujte podle části 4 této série kurzů: