Sonuç yazdırma
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 68/112
- 7 dk
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ümelemeKü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.
Başlangıç kodu
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))
# buraya yazÖrnek çözüm
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]])Beklenen çıktı
ara sıra: 139 müşteri büyük sepetçi: 133 müşteri sadık: 128 müşteri büyük sepetçi
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 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 Doğru cevap
Açıklama: Merkezler ölçekli uzaydadır; ham değerler o uzayda çok uzak bir noktadır.
2 Yeni müşteriyi eğitimdeki ölçekleyiciyle dönüştür.
segment = km.predict(sc.____(yeni))[0]
segment = km.predict(sc.transform(yeni))[0]
Açıklama: Yeni veride yalnızca transform kullanılır.
3 Rapor parçalarını eşleştir.
| Kavram | Anlamı |
|---|---|
segment adı |
Profilden türetilir |
boyut |
bincount |
yeni müşteri |
sc.transform + predict |
sınırlama |
Eksik özellikler, kayma |