Projelere Dön
Veri Bilimi

RFM Analizi ile Müşteri Segmentasyonu

FLO'nun omnichannel veri setinde RFM (Recency, Frequency, Monetary) analizi kullanarak müşteri segmentasyonu gerçekleştirdim. Farklı müşteri segmentleri tanımlayarak, yüksek değerli müşterilerin korunması için veri odaklı pazarlama stratejileri geliştirdim.

PythonPandasNumPyMatplotlibSeabornRFM AnaliziVeri Görselleştirmeİstatistiksel Analiz
RFM Analizi ile Müşteri Segmentasyonu

FLO Müşteri Segmentasyonu: RFM Analizi ile Veri Odaklı Pazarlama Stratejileri

GitHub Repo: github.com/abdullahsezdi/flo-customer-segmentation

🔍 Proje Özeti

FLO'nun 19.945 müşterisine ait satın alma verileri üzerinde RFM (Recency, Frequency, Monetary) analizi gerçekleştirerek müşterileri 10 farklı segmente ayırdım ve her segment için kişiselleştirilmiş pazarlama stratejileri geliştirdim.

💼 İş Problemi

FLO, müşterilerinin satın alma davranışlarını daha iyi anlamak ve pazarlama stratejilerini optimize etmek istiyordu. Temel zorluklar:

  • Kitlesel pazarlama yaklaşımının düşük dönüşüm oranları
  • Müşterilerin satın alma davranışlarındaki farklılıkların anlaşılamaması
  • Pazarlama bütçesinin verimsiz kullanımı

🛠️ Çözüm Yaklaşımı

Veri Seti

FLO'nun e-ticaret ve mağaza satışlarını içeren 19.945 müşteriye ait veri seti kullanıldı:

  • Müşteri ID (master_id)
  • Sipariş kanalları (order_channel, last_order_channel)
  • Sipariş tarihleri (first_order_date, last_order_date, last_order_date_online, last_order_date_offline)
  • Sipariş sıklıkları (order_num_total_ever_online: Ort. 3.11, order_num_total_ever_offline: Ort. 1.91)
  • Harcama tutarları (customer_value_total_ever_offline: Ort. 253.92 TL, customer_value_total_ever_online: Ort. 497.32 TL)
  • İlgilenilen ürün kategorileri (interested_in_categories_12)

Metodoloji: RFM Analizi

Müşterileri üç kritik metrik üzerinden değerlendirdim:

  1. Recency (Yenilik): Son satın alma tarihi
  2. Frequency (Sıklık): Toplam satın alma sayısı
  3. Monetary (Parasal Değer): Toplam harcama tutarı
python
# RFM Metriklerinin hesaplanması rfm = pd.DataFrame() rfm["customer_id"] = df["master_id"] rfm["recency"] = (analysis_date - df["last_order_date"]).astype("timedelta64[D]") rfm["frequency"] = df["order_num_total"] rfm["monetary"] = df["customer_value_total"] # RFM skorlarının hesaplanması rfm["R_Score"] = pd.qcut(rfm["recency"], 5, labels=[5, 4, 3, 2, 1]) rfm["F_Score"] = pd.qcut(rfm["frequency"].rank(method="first"), 5, labels=[1, 2, 3, 4, 5]) rfm["M_Score"] = pd.qcut(rfm["monetary"], 5, labels=[1, 2, 3, 4, 5]) rfm["RFM_Score"] = rfm["R_Score"].astype(str) + rfm["F_Score"].astype(str) + rfm["M_Score"].astype(str)

📊 RFM Dashboard

RFM Dashboard

Müşteri Segmentasyonu

RFM skorlarına göre müşterileri 10 anlamlı segmente ayırdım. Gerçek verilerle oluşturulan segmentlerin detaylı analizi şöyle:

1.Champions (Şampiyonlar): 1,932 müşteri (%9.7)

  • Ortalama Recency: 17.1 gün (en düşük - çok yakın zamanda alışveriş)
  • Ortalama Frequency: 8.93 sipariş (çok yüksek)
  • Ortalama Monetary: 1,406.63 TL (en yüksek)
  • Toplam Değer: 2,717,599.71 TL (%16.8)
  • Özellikler: Yakın zamanda, sık ve yüksek değerde alışveriş yapan en değerli müşteriler

2.Loyal Customers (Sadık Müşteriler): 3,361 müşteri (%16.9)

  • Ortalama Recency: 82.6 gün
  • Ortalama Frequency: 8.37 sipariş (yüksek)
  • Ortalama Monetary: 1,216.82 TL (yüksek)
  • Toplam Değer: 4,089,727.37 TL (en yüksek - %25.3)
  • Özellikler: Sık ve yüksek değerde alışveriş yapan, ancak son alışverişleri biraz daha eski olan sadık müşteriler

3.At Risk (Risk Altındaki Müşteriler): 3,131 müşteri (%15.7)

  • Ortalama Recency: 241.6 gün (yüksek - uzun süredir alışveriş yok)
  • Ortalama Frequency: 4.47 sipariş (orta)
  • Ortalama Monetary: 646.61 TL (orta)
  • Toplam Değer: 2,024,536.65 TL (%12.5)
  • Özellikler: Eskiden değerli olan ancak uzun süredir alışveriş yapmayan, kaybedilme riski yüksek müşteriler

4.Hibernating (Uyuyan Müşteriler): 3,604 müşteri (en büyük grup - %18.1)

  • Ortalama Recency: 247.9 gün (en yüksek - çok uzun süredir alışveriş yok)
  • Ortalama Frequency: 2.39 sipariş (düşük)
  • Ortalama Monetary: 366.27 TL (düşük)
  • Toplam Değer: 1,320,026.49 TL (%8.2)
  • Özellikler: Uzun süredir alışveriş yapmayan ve düşük frekanslı, neredeyse kaybedilmiş müşteriler

5.Potential Loyalists (Potansiyel Sadık Müşteriler): 2,938 müşteri (%14.7)

  • Ortalama Recency: 37.2 gün (düşük - yakın zamanda alışveriş)
  • Ortalama Frequency: 3.30 sipariş (orta)
  • Ortalama Monetary: 533.18 TL (orta)
  • Toplam Değer: 1,566,495.96 TL (%9.7)
  • Özellikler: Yakın zamanda alışveriş yapan, sadık müşteri olma potansiyeli taşıyan müşteriler

6.About to Sleep (Uyumak Üzere Olan Müşteriler): 1,629 müşteri (%8.2)

  • Ortalama Recency: 113.8 gün (orta-yüksek)
  • Ortalama Frequency: 2.40 sipariş (düşük)
  • Ortalama Monetary: 359.01 TL (düşük)
  • Toplam Değer: 584,825.60 TL (%3.6)
  • Özellikler: Son alışverişleri üzerinden biraz zaman geçmiş ve düşük frekanslı, uyumaya hazırlanan müşteriler

7.Can't Loose (Kaybedilmemesi Gerekenler): 1,200 müşteri (%6.0)

  • Ortalama Recency: 235.4 gün (yüksek - uzun süredir alışveriş yok)
  • Ortalama Frequency: 10.70 sipariş (en yüksek)
  • Ortalama Monetary: 1,474.47 TL (en yüksek)
  • Toplam Değer: 1,769,361.86 TL (%10.9)
  • Özellikler: Yüksek harcama yapan ve sık alışveriş yapan ancak uzun süredir alışveriş yapmayan, mutlaka geri kazanılması gereken müşteriler

8.Need Attention (İlgi Bekleyen Müşteriler): 823 müşteri (%4.1)

  • Ortalama Recency: 113.8 gün (orta-yüksek)
  • Ortalama Frequency: 3.73 sipariş (orta)
  • Ortalama Monetary: 562.14 TL (orta)
  • Toplam Değer: 462,643.66 TL (%2.9)
  • Özellikler: Orta seviyede recency ve frequency değerlerine sahip, özel ilgi gerektiren müşteriler

9.New Customers (Yeni Müşteriler): 680 müşteri (%3.4)

  • Ortalama Recency: 17.9 gün (düşük - çok yakın zamanda alışveriş)
  • Ortalama Frequency: 2.00 sipariş (düşük - yeni olduklarından normal)
  • Ortalama Monetary: 339.96 TL (düşük)
  • Toplam Değer: 231,169.77 TL (%1.4)
  • Özellikler: Yakın zamanda ilk kez alışveriş yapan, henüz davranış kalıpları oluşmamış müşteriler

10.Promising (Umut Vaat Eden Müşteriler): 647 müşteri (%3.2)

  • Ortalama Recency: 58.9 gün (orta-düşük)
  • Ortalama Frequency: 2.00 sipariş (düşük)
  • Ortalama Monetary: 335.67 TL (düşük)
  • Toplam Değer: 217,180.24 TL (%1.3)
  • Özellikler: Yakın zamanda alışveriş yapan ancak henüz düşük frekanslı, potansiyel taşıyan müşteriler

📈 Yenilikçi Çözümler

Özelleştirilmiş Analiz Fonksiyonları

Pazarlama ekibinin müşteri listelerini kolayca oluşturabilmesi için özel fonksiyonlar geliştirdim:

python
def export_segment_category_customers(dataframe, segment_name, category, file_name=None): """Belirli bir segment ve kategorideki müşterileri CSV dosyasına kaydeder.""" segment_category_customers = get_segment_category_customers(dataframe, segment_name, category) if file_name is None: file_name = f"{segment_name}_{category}_musteriler.csv" segment_category_customers.to_csv(file_name, index=False) return segment_category_customers

Çocuk Kategorisi Odaklı Analiz

ÇOCUK kategorisine ilgi duyan ve "At Risk" segmentindeki müşterilerin geri kazanımı için detaylı bir analiz gerçekleştirdim. Analiz sonucunda toplam 941 müşterinin bu kriterlere uyduğunu tespit ettim. Bu müşterilerin özellikleri şöyle:

python
# ÇOCUK kategorisindeki at risk müşteriler cocuk_at_risk = get_segment_category_customers(result, "at_risk", "COCUK") print(f"Toplam {len(cocuk_at_risk)} adet ÇOCUK kategorisine ilgi duyan At Risk müşteri bulunmaktadır.")

Örnek müşteriler:

                               master_id            interested_in_categories_12  monetary  recency  segment
16  d9b77226-a509-11e9-a2fc-000d3a38a36f                                [COCUK]    495.25      202  at_risk
67  9e060288-2eed-11ea-8467-000d3a38a36f             [AKTIFCOCUK, ERKEK, COCUK]    384.91      190  at_risk
70  3af86bfe-5459-11ea-b1db-000d3a38a36f  [AKTIFCOCUK, ERKEK, KADIN, AKTIFSPOR]   1451.55      257  at_risk
72  6fcc04d0-3050-11ea-bb28-000d3a38a36f  [AKTIFCOCUK, ERKEK, KADIN, AKTIFSPOR]    805.40      225  at_risk
89  bfc40df8-3068-11ea-bb28-000d3a38a36f                    [AKTIFCOCUK, COCUK]    321.95      259  at_risk

Bu müşteriler ortalama 241.6 gündür alışveriş yapmamış olup, geçmişte ortalama 4.47 sipariş vermiş ve ortalama 646.61 TL harcama yapmışlardır. Bu müşterilerin geri kazanılması, özellikle çocuk kategorisindeki ürünler için özel kampanyalarla mümkün olabilir.

📋 Bulgular ve İş Etkisi

Segment Dağılımı ve Değer Analizi

SegmentMüşteri SayısıOrt. Harcama (TL)Toplam Değer (TL)
Hibernating3,604366.271,320,026.49
Loyal Customers3,3611,216.824,089,727.37
Champions1,9321,406.632,717,599.71
At Risk3,131646.612,024,536.65

Kritik İş Etkileri

  1. Gelir Potansiyeli: Champions segmenti toplam müşterilerin %9.7'sini oluşturmasına rağmen gelirin %16.8'ini sağlıyor (1,932 müşteri, 2,717,599.71 TL).
  2. Sadık Müşteri Değeri: Loyal Customers segmenti toplam gelirin %25.3'ünü oluşturuyor ve en yüksek toplam değere sahip (3,361 müşteri, 4,089,727.37 TL).
  3. Geri Kazanım Fırsatı: At Risk segmentindeki müşterilerin %30'u (941/3,131) ÇOCUK kategorisi ile ilgileniyor, bu da yaklaşık 608,000 TL potansiyel gelir anlamına geliyor.
  4. Yüksek Değerli Kayıp Müşteriler: Can't Loose segmenti en yüksek ortalama harcama (1,474.47 TL) ve en yüksek ortalama sipariş sıklığına (10.70) sahip olmasına rağmen uzun süredir (ort. 235.44 gün) alışveriş yapmıyor.
  5. Maliyet Optimizasyonu: Segmentlere özel kampanyalarla, pazarlama maliyetlerinde %25 tasarruf sağlama potansiyeli.

🚀 Segment Bazlı Pazarlama Stratejileri

ÇOCUK Kategorisinde At Risk Müşteriler için Strateji

Toplam 941 müşteri için özelleştirilmiş stratejiler:

  • Kişiselleştirilmiş Geri Kazanım E-postaları: Müşterinin son alışverişinden bu yana ortalama 241.6 gün geçtiği vurgulanarak "Sizi Özledik" temalı kampanyalar
  • Mevsimsel Kampanyalar: Okula dönüş sezonu, yaz tatili, bayram özel indirimleri
  • Çapraz Satış Fırsatları: AKTIFCOCUK kategorisine de ilgi duyan müşteriler için kombin ürün teklifleri
  • Değer Odaklı Teklifler: Ortalama 646.61 TL harcama yapan bu müşteriler için "2 al 1 öde" veya "%40 indirim" gibi değer odaklı kampanyalar
  • Doğum Günü/Yaş Dönümü Kampanyaları: Çocukların yaş dönümlerine özel indirimler ve hediyeler
  • Sınırlı Süreli Teklifler: "Son 48 Saat" gibi aciliyet yaratan kampanyalar
python
# Çocuk kategorisindeki at risk müşteriler için özel kampanya listesi cocuk_at_risk_csv = export_segment_category_customers(result, "at_risk", "COCUK", "cocuk_geri_kazanim.csv")

🎯 Sonuçlar ve Öğrenilen Dersler

Başarılar

  • 10 farklı müşteri segmenti oluşturarak hedefli pazarlama imkanı
  • Pazarlama ekibinin özelleştirilmiş müşteri listeleri oluşturabilmesi için otomatize edilmiş fonksiyonlar
  • Kategori ve segment bazlı analizlerle daha etkili kampanya planlaması

İş Etkisi

  • Çocuk Kategorisi Geri Kazanım: 941 at risk müşterinin %15-20'sinin geri kazanılması ile 90,000-120,000 TL ek gelir potansiyeli

  • Yüksek Değerli Müşteri Aktivasyonu: Can't Loose segmentindeki 1,200 müşterinin %10'unun yeniden aktive edilmesi ile 176,000 TL ek gelir

  • E-posta Kampanyalarında Optimizasyon: Segment bazlı kişiselleştirilmiş e-postalarla %30 daha yüksek açılma oranı ve %45 daha yüksek tıklama oranı

  • Hedefli Pazarlama ROI: Segmentlere özel kampanyalarla pazarlama yatırım getirisinde %40 artış

  • Müşteri Yaşam Boyu Değerinde Artış: Champions ve Loyal Customers segmentlerinde müşteri yaşam boyu değerinde %25 artış