CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

model.py
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

model.py
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.

Soru
segment = km.predict(sc.____(yeni))[0]
Cevap
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

Orta seviye bölümündeki tüm dersler