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:
- Recency (Yenilik): Son satın alma tarihi
- Frequency (Sıklık): Toplam satın alma sayısı
- 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
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:
pythondef 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
Segment | Müşteri Sayısı | Ort. Harcama (TL) | Toplam Değer (TL) |
---|---|---|---|
Hibernating | 3,604 | 366.27 | 1,320,026.49 |
Loyal Customers | 3,361 | 1,216.82 | 4,089,727.37 |
Champions | 1,932 | 1,406.63 | 2,717,599.71 |
At Risk | 3,131 | 646.61 | 2,024,536.65 |
Kritik İş Etkileri
- 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).
- 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).
- 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.
- 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.
- 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ış