Veri hazırlama
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 65/112
- 7 dk
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
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
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.
Xs = StandardScaler().____(X)
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 |