CodeBlanks Logo Icon CodeBlanks

Etiket analizi

Küme etiketlerini analiz edersin.

Segment profilleri

Kümeler ancak yorumlandığında değerlidir. Her segmentin özgün birimdeki ortalamaları çıkarılır ve segmentlere ad verilir:

for k in range(3):
    uye = X[km.labels_ == k]
    print(k, len(uye), uye.mean(axis=0).round(0))
# ör. düşük harcama + az ziyaret  -> "ara sıra gelen"
#     yüksek harcama + az ziyaret -> "büyük sepetçi"
#     orta harcama + çok ziyaret  -> "sadık sık gelen"

Ölçekli merkezler yerine özgün birimdeki ortalamalar raporlanır; pazarlama ekibi z-skoru değil TL konuşur.

Segment adlarını koda bağlamak

Küme numaraları her çalıştırmada değişebileceği için adlar numaraya sabit yazılmaz; merkezlerin özelliklerinden türetilir. Örneğin ziyaret ortalaması en yüksek küme "sadık" olarak seçilir:

ort = np.array([X[km.labels_ == k].mean(axis=0) for k in range(3)])
sadik = ort[:, 1].argmax()           # ziyareti en yüksek
buyuk = ort[:, 2].argmax()           # sepeti en yüksek
print(sadik, buyuk)

Bu yaklaşım, model yeniden eğitildiğinde adların yanlış kümeye kaymasını önler.

Uygulama Profilleri çıkar

Her segmentin özgün birimdeki ortalamalarını ort dizisinde topla ve np.round(ort, 0) ile yazdır. Ardından ziyareti en yüksek ve sepeti en yüksek segmentlerin numaralarını aynı satırda 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
Xs = StandardScaler().fit_transform(X)
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(Xs)

# 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
Xs = StandardScaler().fit_transform(X)
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(Xs)

ort = np.array([X[km.labels_ == k].mean(axis=0) for k in range(3)])
print(np.round(ort, 0))
print(ort[:, 1].argmax(), ort[:, 2].argmax())

Beklenen çıktı

[[ 303.    2.  181.]
 [1505.    4.  422.]
 [ 787.   12.   65.]]
2 1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Ölçekli verideki merkezleri raporlamanın sorunu nedir?

  • Değerler TL ya da ziyaret cinsinden okunamaz Doğru cevap
  • Yanlıştırlar
  • Hesaplanamazlar
  • Sorun yoktur

Açıklama: z-skorları göreli konumu anlatır; iş dili için özgün birim gerekir.

2 Ziyaret ortalaması en yüksek segmenti bul.

Soru
sadik = ort[:, 1].____()
Cevap
sadik = ort[:, 1].argmax()

Açıklama: argmax değerin değil kümenin numarasını verir.

3 Profilleri adlarla eşleştir.

Kavram Anlamı
Az harcama, az ziyaret Ara sıra gelen
Çok harcama, az ziyaret Büyük sepetçi
Orta harcama, çok ziyaret Sadık sık gelen
ort[:, 1].argmax() Ada bağlama

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