Bu projede, büyük bir alışveriş merkezi (AVM) yönetiminin pazarlama bütçesini daha verimli kullanabilmesi için makine öğrenmesi tabanlı müşteri segmentasyonu gerçekleştirilmiştir. Amaç, benzer harcama davranışlarına sahip müşterileri gruplamak ve her segmente özel pazarlama stratejileri geliştirilmesini sağlamaktır.
-
Gender
-
Age
-
Annual Income (Yıllık Gelir)
-
Spending Score (Harcama Skoru – 1-100)
-
Müşterilerin nasıl kategorize edileceği bilinmemektedir.
-
Her müşteriye aynı kampanyayı yapmak maliyetlidir.
-
Zengin ama az harcayanlar
-
Orta gelirli ama çok harcayanlar
-
Sadık müşteriler
-
Düşük gelir – düşük harcama grubu
gibi segmentler oluşturmak.
-
Pandas: Veri setinin yüklenmesi, ön işlenmesi ve tablo tabanlı veri analizinin gerçekleştirilmesi için kullanılmıştır.
-
NumPy: Sayısal hesaplamalar ve makine öğrenmesi algoritmalarının matematiksel altyapısını sağlamak amacıyla kullanılmıştır.
-
Matplotlib: Veri analizi ve model sonuçlarının grafikler aracılığıyla görselleştirilmesi için kullanılmıştır.
-
Seaborn: Kümeleme sonuçlarının daha anlaşılır ve estetik biçimde görselleştirilmesi için kullanılmıştır.
-
Scikit-learn: Müşteri segmentasyonu için K-Means kümeleme modeli ve veri ölçekleme işlemlerinin uygulanması amacıyla kullanılmıştır.
# Kütüphaneleri Yükleme
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import warnings
warnings.filterwarnings('ignore')
# Veriyi Yükleme
df = pd.read_csv('/kaggle/input/customer-segmentation-tutorial-in-python/Mall_Customers.csv')
print("--- Veri Seti Bilgisi ---")
print(df.info())
print("\n--- İlk 5 Satır ---")
print(df.head())
# İstatistiksel Özet
print("\n--- İstatistiksel Özet ---")
print(df.describe().T)
# Eksik Değer Kontrolü
print("\n--- Eksik Değer Sayısı ---")
print(df.isnull().sum())
* Gözlem Sayısı: Veri seti 200 satırdan oluşuyor. Bir makine öğrenmesi projesi için başlangıç düzeyinde, temiz ve dengeli bir örneklemdir.
* Değişken Tipleri: 4 adet sayısal (int64): CustomerID, Age, Annual Income, Spending Score. 1 adet kategorik (object): Gender.
* Eksik Veri (Null Values): Veri setinde hiç eksik değer (0 null) bulunmuyor. Bu durum, veri temizleme aşamasında bizi büyük bir yükten kurtarıyor ve verinin güvenilir olduğunu gösteriyor.
* Ortalama gelir 60.500 $ civarındadır. Gelir dağılımında çok uç noktalar (outliers) olup olmadığının görselleştirme aşamasında kontrol edilmesi gerekir.
* Puanların merkeze (50) yakın yoğunlaşması, müşterilerin çoğunun "ortalama harcamacı" olduğunu, ancak uçlarda çok değerli (99 puan) veya kazanılması gereken (1 puan) müşterilerin de bulunduğunu gösterir.
* CustomerID sütunu sadece bir etiket (ID) görevindedir. Modelin öğrenme sürecine bir katkısı olmayacağı için Feature Engineering aşamasında bu sütunu analizden çıkaracağız.
* Gender sütunu "Male/Female" olarak kodlanmıştır. Gender değişkeni kategorik olduğu için sayısal olarak anlamlı bir mesafe ifade etmez. K-Means algoritması mesafe hesaplarına dayandığından encoding yapılmamıştır ve K-Means algoritmasında kullanılmamıştır.
Aşağıdaki grafiklerde veri setinde yer alan Yaş, Yıllık Gelir ve Harcama Skoru değişkenlerinin dağılımları incelenmiştir.
Müşterilerin yaşlarının büyük ölçüde 20–40 yaş aralığında yoğunlaştığı görülmektedir. Daha ileri yaş gruplarında müşteri sayısı kademeli olarak azalmaktadır. Bu durum, AVM’nin genç ve orta yaş grubunu hedefleyen bir müşteri profiline sahip olduğunu göstermektedir.
Yıllık gelirler ağırlıklı olarak 30–80 bin dolar aralığında toplanmıştır. Daha yüksek gelir seviyelerinde müşteri sayısı azalmaktadır. Gelir dağılımının geniş bir aralığa yayılması, farklı ekonomik segmentlerden müşterilerin bulunduğunu göstermektedir.
Harcama skoru dağılımı orta seviyelerde (40–60 aralığı) yoğunlaşmakla birlikte, düşük ve yüksek harcama alışkanlığına sahip müşteriler de bulunmaktadır. Bu durum, müşteri davranışlarının heterojen olduğunu ve segmentasyona uygun bir yapı sunduğunu göstermektedir.
Bu dağılımlar, müşteri segmentasyonu için kullanılan değişkenlerin ayırt edici ve anlamlı olduğunu ortaya koymaktadır. Özellikle Yıllık Gelir ve Harcama Skoru değişkenleri, müşterilerin farklı gruplara ayrılabilmesi açısından güçlü bir temel oluşturmaktadır.
Aşağıdaki korelasyon ısı haritası, veri setinde yer alan değişkenler arasındaki doğrusal ilişkileri göstermektedir. Korelasyon katsayıları -1 ile +1 arasında değer almakta olup, mutlak değerin büyümesi ilişkinin gücünü ifade etmektedir.
CustomerID ile diğer değişkenler arasında yüksek korelasyon görülmesi, bu değişkenin yalnızca tanımlayıcı (ID) bir alan olmasından kaynaklanmaktadır. Modelleme sürecinde anlamlı bir bilgi taşımadığı için analiz dışında bırakılması uygundur.
Yaş ile Yıllık Gelir arasında anlamlı bir korelasyon bulunmamaktadır.
Harcama Skoru arasında zayıf negatif bir korelasyon (-0.33) bulunmaktadır.
Bu durum, yaş arttıkça harcama eğiliminin kısmen azaldığını göstermektedir; ancak ilişkinin güçlü olmadığı görülmektedir.
Yıllık gelir ile Harcama Skoru arasında neredeyse hiçbir doğrusal ilişki (≈ 0) bulunmamaktadır.
Bu sonuç, yüksek gelirli her müşterinin yüksek harcama yapmadığını ve gelir ile harcama davranışının doğrudan bağlantılı olmadığını göstermektedir.
Harcama skoru, özellikle müşteri davranışlarını ayırt etmede önemli bir değişken olup, gelirden bağımsız olarak farklı müşteri profillerinin oluşabileceğini göstermektedir.
Korelasyon analizi sonucunda:
Değişkenler arasında güçlü doğrusal ilişkiler bulunmamaktadır.
Bu durum, müşteri segmentasyonu için kümeleme algoritmalarının (K-Means) uygun olduğunu göstermektedir.
Annual Income ve Spending Score değişkenleri, birbirinden bağımsız bilgi sunduğu için müşteri gruplarını ayırt etmede etkili bir kombinasyon oluşturmaktadır.
Ölçeklendirme, K-Means gibi mesafe tabanlı algoritmalar gözlemler arasındaki benzerliği mesafeye göre hesapladığı için kritik öneme sahiptir. Farklı ölçeklere sahip değişkenler (örneğin yıllık gelir ve harcama skoru) ölçeklendirilmediğinde, büyük değer aralığına sahip değişkenler mesafe hesaplamalarını domine eder ve model yanıltıcı kümeler oluşturur, bu nedenle tüm değişkenlerin eşit katkı sağlaması ve anlamlı müşteri segmentleri elde edilebilmesi için veriler ölçeklendirilmiştir.
# Kümeleme için kullanılacak özelliklerin seçilmesi
# Analizi zenginleştirmek için Yaş, Gelir ve Skoru dahil ediyoruz
X = df[['Age', 'Annual Income (k$)', 'Spending Score (1-100)']]
# Standartlaştırma (Verileri 0-1 aralığına/benzer ölçeğe çekme)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print("Veri ön işleme tamamlandı ve ölçeklendirildi.")
Kaç adet müşteri segmenti oluşturmalıyız? Dirsek yöntemi, hata oranının (WCSS) en keskin düştüğü noktayı bularak bize ideal küme sayısını verir.
Bu grafikte, farklı küme sayıları için WCSS (Within-Cluster Sum of Squares) değerleri gösterilmektedir. WCSS, kümeler içindeki veri noktalarının merkeze olan uzaklıklarının toplamını ifade eder ve daha düşük değerler daha kompakt kümeleri temsil eder.
Grafik incelendiğinde, küme sayısı 5’e kadar WCSS değerinde belirgin bir düşüş gözlemlenmekte, bu noktadan sonra ise azalma hızının yavaşladığı görülmektedir. Bu kırılma noktası, dirsek (elbow) olarak adlandırılır ve optimal küme sayısının 5 olduğunu göstermektedir.
Bu nedenle, müşteri segmentasyonunda en dengeli ve anlamlı sonuçları elde edebilmek için model 5 küme olacak şekilde yapılandırılmıştır.
# Final modelin kurulması
kmeans = KMeans(n_clusters=5, init='k-means++', random_state=42, n_init=10)
df['Segment'] = kmeans.fit_predict(X_scaled)
# Segment sayılarını kontrol etme
print(df['Segment'].value_counts())
# 3D İnteraktif Görselleştirme (Plotly)
fig = px.scatter_3d(df,
x='Age',
y='Annual Income (k$)',
z='Spending Score (1-100)',
color='Segment',
title='AVM Müşteri Segmentasyonu (3 Boyutlu)',
opacity=0.8,
color_continuous_scale='Viridis')
fig.show()
Yaş, Yıllık Gelir ve Harcama Skoru değişkenleri kullanılarak oluşturulan 5 farklı müşteri segmenti üç boyutlu olarak görselleştirilmiştir. Her renk, K-Means algoritması tarafından belirlenen farklı bir müşteri grubunu temsil etmektedir.
Segmentlerin uzamsal olarak belirgin şekilde ayrıştığı görülmektedir; bu durum modelin müşteriler arasındaki davranış farklılıklarını başarılı bir şekilde yakaladığını göstermektedir. Özellikle yüksek gelir–yüksek harcama, yüksek gelir–düşük harcama ve düşük gelir–düşük harcama profillerinin birbirinden net biçimde ayrıldığı gözlemlenmektedir.
Üçüncü boyut olarak yaş değişkeninin eklenmesi, benzer gelir ve harcama skorlarına sahip ancak farklı yaş gruplarında yer alan müşterilerin ayrıştırılmasına katkı sağlamış ve segmentlerin daha anlamlı yorumlanabilmesini mümkün kılmıştır. Bu sonuçlar, AVM yönetiminin her segmente özel pazarlama ve kampanya stratejileri geliştirebilmesi için güçlü bir karar destek mekanizması sunmaktadır.
Segment 0 – Düşük Gelir / Düşük Harcama (Düşük Değerli Müşteriler) - (Koyu Mor)
Bu segmentte yer alan müşteriler düşük yıllık gelire ve düşük harcama skoruna sahiptir. Pazarlama açısından önceliği düşük olan bu grup, genel kampanyalar ve maliyeti düşük promosyonlarla hedeflenebilir.
Segment 1 – Düşük Gelir / Yüksek Harcama (Sadık Müşteriler) - (Lacivert)
Gelir seviyesi düşük olmasına rağmen harcama skoru yüksek olan bu müşteriler, AVM’ye bağlılık göstermektedir. Sadakat programları ve özel indirimler ile elde tutulmaları önemlidir.
Segment 2 – Orta Gelir / Orta Harcama (Standart Müşteriler) - (Turkuaz)
Bu segment, AVM’nin ana müşteri kitlesini oluşturmaktadır. Dengeli gelir ve harcama profiline sahip olan bu grup için genel kampanyalar ve çapraz satış stratejileri uygundur.
Segment 3 – Yüksek Gelir / Düşük Harcama (Potansiyel Müşteriler) - (Açık Yeşil)
Yüksek gelir düzeyine sahip olmalarına rağmen harcama skorları düşük olan bu müşteriler, doğru pazarlama stratejileriyle daha yüksek değere dönüştürülebilir. Kişiselleştirilmiş teklifler ve premium deneyimler önerilmektedir.
Segment 4 – Yüksek Gelir / Yüksek Harcama (VIP Müşteriler) - (Sarı)
Bu segment, AVM için en değerli müşteri grubunu temsil etmektedir. Özel etkinlikler, kişisel kampanyalar ve ayrıcalıklı hizmetlerle bu grubun memnuniyeti ve bağlılığı artırılmalıdır.
Bu bölümde, K-Means algoritması ile elde edilen müşteri segmentleri analiz edilmiş ve her segment için AVM yönetimine yönelik iş değeri, fırsatlar ve stratejik aksiyonlar önerilmiştir.
İş Analizi: Bu segment, düşük satın alma gücü ve düşük alışveriş sıklığı nedeniyle AVM açısından sınırlı gelir potansiyeline sahiptir.
Strateji Önerileri:
-
Genel indirim günleri ve düşük maliyetli kampanyalar
-
Temel ihtiyaç odaklı mağaza ve ürün promosyonları
-
Pazarlama bütçesinde düşük önceliklendirme
İş Analizi: Gelir seviyesi görece düşük olmasına rağmen harcama eğilimi yüksek olan bu grup, AVM’ye güçlü bağlılık göstermektedir.
Strateji Önerileri:
-
Sadakat kartları ve puan sistemleri
-
Sıklık bazlı indirim ve kişiselleştirilmiş kampanyalar
-
Uzun vadeli müşteri elde tutma (retention) odaklı stratejiler
İş Analizi: Bu segment, AVM için en yüksek gelir ve kârlılık potansiyeline sahip müşteri grubudur.
Strateji Önerileri:
-
Özel etkinlik davetleri ve VIP kampanyalar
-
Kişisel alışveriş danışmanlığı
-
Premium mağaza ve marka iş birlikleri
İş Analizi: Satın alma gücü yüksek olmasına rağmen harcama düzeyi düşük olan bu müşteriler, önemli bir büyüme fırsatı sunmaktadır.
Strateji Önerileri:
-
Kişiselleştirilmiş teklifler ve deneyim odaklı kampanyalar
-
Premium hizmet tanıtımları
-
Deneme ve ilk alışveriş teşvikleri
İş Analizi: Dengeli gelir ve harcama yapısıyla AVM’nin istikrarlı müşteri kitlesini oluşturmaktadır.
Strateji Önerileri:
-
Çapraz satış ve paket kampanyaları
-
Uzun vadeli sadakat programları
-
Mevsimsel ve tematik kampanyalar