CodeBlanks Logo Icon CodeBlanks

Veri hazırlama

Kümeleme için veriyi hazırlarsın.

Proje: müşteri segmentasyonu

Bu projede bir mağazanın 400 müşterisini aylık harcama, ziyaret sayısı ve ortalama sepet tutarına göre gruplara ayıracağız. Etiket yok; amaç pazarlama ekibine anlamlı segmentler sunmak.

harcama = ...   # aylık TL
ziyaret = ...   # aylık ziyaret
sepet = harcama / ziyaret
X = np.column_stack([harcama, ziyaret, sepet])

Sepet tutarı türetilmiş bir özelliktir: aynı harcamayı az ziyaretle yapan "büyük sepetçi" ile sık gelen "küçük sepetçi"yi ayırır.

Hazırlık

Önce özelliklerin aralıklarına bakılır, sonra her biri ortalama 0, standart sapma 1 olacak biçimde ölçeklenir. Kümeleme etiketsiz olduğu için eğitim/test bölmesi yapılmaz; tüm müşteriler kümelenir.

print(X.min(axis=0).round(0), X.max(axis=0).round(0))
Xs = StandardScaler().fit_transform(X)
print(Xs.std(axis=0).round(2))   # [1. 1. 1.]

Yeni müşteriler gelince aynı ölçekleyici ve km.predict kullanılacak; bu yüzden ölçekleyici nesnesi saklanmalıdır.

Uygulama Müşteri verisini incele

X'in şeklini, ardından sütun ortalamalarını np.round(..., 0) ile yazdır. StandardScaler ile ölçekleyip ölçekli verinin sütun standart sapmalarını np.round(..., 2) ile 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

# 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

print(X.shape)
print(np.round(X.mean(axis=0), 0))
Xs = StandardScaler().fit_transform(X)
print(np.round(Xs.std(axis=0), 2))

Beklenen çıktı

(400, 3)
[858.   6. 224.]
[1. 1. 1.]

Soru ve cevaplar

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

1 Bu veride neden ölçekleme şarttır?

  • Etiket olmadığı için
  • Gerekmez
  • Harcama yüzlerce TL, ziyaret tek haneli; mesafeyi harcama domine eder Doğru cevap
  • Kümeleme ölçekle hızlanır

Açıklama: Ölçeksiz KMeans pratikte yalnızca harcamaya göre kümeler.

2 Özellikleri ölçekle.

Soru
Xs = StandardScaler().____(X)
Cevap
Xs = StandardScaler().fit_transform(X)

Açıklama: fit_transform ortalama ve std'yi öğrenip uygular.

3 Özellikleri eşleştir.

Kavram Anlamı
harcama Aylık TL
ziyaret Aylık gelme sayısı
sepet Türetilmiş: TL / ziyaret
Xs Ölçekli matris

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