Makine Öğrenmesi
Sonuç yazdırma
Kümeleme sonuçlarını yazdırırsın.
Sonuç raporu
Rapor her segment için ad, boyut ve özgün birimde profil içerir. Ayrıca yeni müşterilerin hangi segmente düşeceğini gösteren bir örnek, sistemin nasıl kullanılacağını somutlaştırır:
yeni = np.array([[1400, 3, 1400 / 3]])
segment = km.predict(sc.transform(yeni))[0]
print(f"Yeni müşteri: {adlar[segment]}")
Yeni müşteri, eğitimde kullanılan aynı ölçekleyiciyle dönüştürülmelidir.
Sınırlamalar
Dürüst bir rapor sınırlamaları da yazar: segmentler yalnızca kullanılan üç özelliğe dayanır; mevsimsel davranış, yaş ya da kanal bilgisi yok. KMeans yuvarlak kümeler varsayar; gerçek müşteri dağılımı farklı olabilir. Segmentler zamanla kayar; model belli aralıklarla yeniden eğitilmelidir.
# izleme önerisi: her ay segment boyutlarını kaydet
# büyük değişim = davranış kayması -> yeniden kümeleme
Kümeleme bir keşif aracıdır; sonuçları ilk kampanyalarla doğrulamak gerekir.
Uygulama Raporu yaz
Segment adlarını profillerden türet: ziyareti en yüksek segment "sadık", sepeti en yüksek "büyük sepetçi", kalan "ara sıra". Her segment için f"{ad}: {boyut} müşteri" satırını segment numarası sırasıyla yazdır. Ardından [[1400, 3, 1400 / 3]] müşterisinin segment adını yazdır.
Örnek çözümü göster
import numpy as np
rng = np.random.default_rng(5)
n = 400
grup = rng.integers(0, 3, n)
harcama = np.array([300, 1500, 800])[grup] + rng.normal(0, 120, n)
ziyaret = np.array([2, 4, 12])[grup] + rng.normal(0, 1.2, n)
sepet = harcama / np.maximum(ziyaret, 1)
X = np.column_stack([harcama, ziyaret, sepet])
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
sc = StandardScaler().fit(X)
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(sc.transform(X))
ort = np.array([X[km.labels_ == k].mean(axis=0) for k in range(3)])
adlar = ["ara sıra"] * 3
adlar[ort[:, 1].argmax()] = "sadık"
adlar[ort[:, 2].argmax()] = "büyük sepetçi"
for k, boyut in enumerate(np.bincount(km.labels_)):
print(f"{adlar[k]}: {boyut} müşteri")
print(adlar[km.predict(sc.transform([[1400, 3, 1400 / 3]]))[0]])
Kendini test et
-
Yeni müşteriyi ölçeklemeden <code>km.predict</code>'e verirsen ne olur?
- Doğru çalışır
- Hata verir
- Yeni küme açılır
- Yanlış segmente atanır
Cevabı göster
Yanlış segmente atanır — Merkezler ölçekli uzaydadır; ham değerler o uzayda çok uzak bir noktadır.
-
Yeni müşteriyi eğitimdeki ölçekleyiciyle dönüştür.
segment = km.predict(sc.____(yeni))[0]
Cevabı göster
segment = km.predict(sc.transform(yeni))[0]
-
Rapor parçalarını eşleştir.
- segment adı
- Profilden türetilir
- boyut
- bincount
- yeni müşteri
- sc.transform + predict
- sınırlama
- Eksik özellikler, kayma
Sıradaki ders: PCA nedir?