Power BI ile Cohort Analizi — Baştan Sona Kapsamlı Rehber
Son kısımda test edebilmeniz için sentetik örnek veri oluşturma kodu da var.
🎯 Neden Cohort Analizi? (Kısa ve Net)
Cohort analizi, belirli bir zaman diliminde (genellikle ay) sisteme katılan kullanıcıların (bu durumda satıcıların) zaman içindeki davranışlarını izlemeye yarayan güçlü bir analiz yöntemidir. Payment processing sektöründe bu analiz özellikle değerlidir çünkü:
- • Satıcı edinim maliyeti (CAC) ile lifetime value (LTV) arasındaki dengeyi gösterir
- • İş büyümesinin sürdürülebilirliğini değerlendirme fırsatı verir
- • Hangi onboarding/entegrasyonun işe yaradığını ortaya koyar
- • Churn kritik dönemini tahminlemesi ve önleme stratejileri geliştirilmesine yardımcı olur
- • Segment bazlı performans karşılaştırması sağlar
🎯 İş Hedefleri:
Bu cohort analizi sistemini kurduktan sonra aşağıdaki stratejik sorulara cevap alabileceksiniz:
Retention & Churn Soruları
- • Her ay edinilen satıcıların 1., 3., 6., 12. ayda hayatta kalma (active) oranı nedir?
- • Retention düşüşü hangi aya yoğunlaşıyor? (kritik müdahale zamanı)
- • Hangi cohort’ların retention performansı daha iyi?
LTV & Revenue Soruları
- • Hangi cohort’ların LTV’si hızlı yükseliyor, hangileri düşük kalıyor?
- • Ortalama kümülatif gelir (LTV) nasıl gelişiyor?
- • CAC geri ödeme süresi kaç ay?
Segmentasyon Soruları
- • Hangi ürün tiplerinde (API vs iframe vs vPOS) retention farkları var?
- • İş kollarına göre (MCC kodları) satıcı davranışları nasıl değişiyor?
- • Büyük vs küçük işlem hacimli satıcılar arasında fark var mı?
Operasyonel Kararlar
- • Kısa dönemde hangi metrikleri kullanarak churn riski tespit edebilirim?
- • Hangi aylarda yeni satıcı edinimi daha başarılı oluyor?
- • Onboarding sürecimde hangi iyileştirmeler en etkili olacak?
🗃️ Veri Modeli & Şema
Power BI modelinin sağlıklı çalışması için önerilen temel alanlar:
| Alan | Tip | Açıklama |
|---|---|---|
| Ay_Periyodu | date(ayın ilk günü) | Ay bazlı cohort analiz referansı |
| Satıcı_ID | text/int | Benzersiz merchant ID |
| Ürün_Tipi | text | API / iframe / vPOS / POS |
| Toplam_Gelir | decimal | Brüt gelir |
| Tum_Maliyetler | decimal | Banka/işlem maliyetleri |
| Net_Kazanç | decimal | Toplam_Gelir – Tum_Maliyetler |
| İşlem_Sayısı | decimal | Gerçekleşen İşlem Adedi |
| İşlem_Hacmi | decimal | Gerçekleşen İşlem Hacmi |
| Sektor_Kodu | decimal | Sektörel Gruplama |
⚠️ Önemli: Ay_Periyodu mutlaka ayın ilk günü olmalı (YYYY-MM-01). Bu Power BI time-intelligence ile uyumlu çalışmayı sağlar.
• Net_Kazanç hesaplamasını ETL aşamasında yaparsanız model performansı artar.
• Satıcı ID’lerin benzersiz olduğundan emin olun; aynı satıcının birden fazla ID’si varsa önce dedupe işlemi yapın.
🐍 Örnek Veri Oluşturma (Python)
Aşağıdaki Python kodu, Power BI ile deney yapmanız için gerçekçi davranışları taklit eden ~10,000 satıcı aylık verisi üretir (2022-01 → 2024-12):
cohort_data_generator.py
import pandas as pd
import numpy as np
import random
from datetime import datetime, timedelta
# Seed ayarlama (tekrarlanabilir sonuçlar için)
np.random.seed(42)
random.seed(42)
# Parametreler
n_merchants = 10000
start_date = datetime(2022, 1, 1)
end_date = datetime(2024, 12, 1)
months = pd.date_range(start=start_date, end=end_date, freq='MS').to_pydatetime().tolist()
# Ürün tipleri ve kategori kodları
product_types = ['API', 'iframe', 'vPOS', 'POS']
mcc_codes = ['5411', '5812', '5651', '5999', '5611', '5311', '5732', '5691']
rows = []
# Her satıcı için temel özellikler
merchant_avg_tx_value = np.random.lognormal(mean=8.0, sigma=0.8, size=n_merchants)
merchant_base_retention = np.random.choice([0.9, 0.7, 0.6, 0.5], size=n_merchants, p=[0.25, 0.25, 0.3, 0.2])
for i in range(n_merchants):
merchant_id = f"M{100000 + i}"
cohort_month = random.choice(months)
product = random.choice(product_types)
mcc = random.choice(mcc_codes)
avg_tx = merchant_avg_tx_value[i]
base_ret = merchant_base_retention[i]
# Ürün tipine göre retention ayarlaması
if product == 'API':
base_ret *= 1.05
elif product == 'iframe':
base_ret *= 0.85
elif product == 'vPOS':
base_ret *= 0.9
else:
base_ret *= 0.95
# Cohort'tan itibaren her ay için
for month in months:
if month < cohort_month: continue months_since=(month.year - cohort_month.year) * 12 + (month.month -
cohort_month.month) # Retention olasılığı zamanla azalır retention_prob=max(0.01, base_ret * np.exp(-0.25 *
months_since)) active=np.random.rand() < retention_prob if not active: continue # İşlem sayısı (Poisson dağılımı)
tx_count=max(1, np.random.poisson(lam=2 + 0.02 * months_since)) # Mevsimsellik etkisi seasonal=1.0 if month.month in
[11, 12]: # Kasım-Aralık seasonal=1.2 elif month.month in [6, 7, 8]: # Yaz ayları seasonal=1.05 # İşlem hacmi
hesaplama tx_volume=max(0.0, np.random.normal( loc=tx_count * avg_tx * seasonal, scale=0.1 * tx_count * avg_tx ))
toplam_gelir=float(round(tx_volume, 2)) # Maliyet hesaplamaları maliyet_orani=np.random.uniform(0.01, 0.035)
tum_maliyet=round(toplam_gelir * maliyet_orani, 2) net_kazanc=round(toplam_gelir - tum_maliyet, 2)
rows.append({ "Ay_Periyodu" : month.strftime("%Y-%m-01"), "Satıcı_ID" : merchant_id, "Ürün_Tipi" :
product, "Toplam_Gelir" : toplam_gelir, "Kategori_Kodu" : mcc, "Tüm_Maliyetler" : tum_maliyet, "Net_Kazanç" :
net_kazanc, "İşlem_Hacmi" : round(toplam_gelir, 2), "İşlem_Sayısı" : int(tx_count) }) # DataFrame oluşturma
df=pd.DataFrame(rows) df['Ay_Periyodu']=pd.to_datetime(df['Ay_Periyodu']) # Rastgele sıralama df=df.sample(frac=1,
random_state=42).reset_index(drop=True) # CSV olarak kaydetme df.to_csv("cohort_sample_10000_2022-2024.csv",
index=False) print(f"Veri seti oluşturuldu: {len(df)} satır, {df['Satıcı_ID'].nunique()} benzersiz satıcı")
print(f"Tarih aralığı: {df['Ay_Periyodu'].min()} - {df['Ay_Periyodu'].max()}") print(f"Ortalama aylık gelir:
₺{df['Net_Kazanç'].mean():,.2f}") # İlk birkaç satırı gösterme print("\nÖrnek veriler:")
print(df.head().to_string()) Bu kod yaklaşık 10.000 satıcı için 2022-01 ile 2024-12 tarihleri arasındaki aylık işlem davranışını simüle eder. Simülasyonda:
Kod Özellikleri:
- • Her satıcının ortalama işlem değeri log-normal dağılımla belirlenir
- • Aylık devam etme (retention) olasılığı zamanla exponential decay gösterir
- • Mevsimsellik faktörleri (Kasım-Aralık yoğunluğu) dahil edilir
- • Ürün tiplerine göre retention farklılıkları modellenir
Veri Seti Özellikleri:
🔄 Power Query (ETL) — Power Query ile Veri Hazırlığı
Burada CSV/veri kaynağından veriyi alıp temizleyip Ay_Periyodu, Net_Kazanç sütunlarıyla çalışır hale getiriyoruz.
Tipik ETL Adımları:
- 1 Veri oku (CSV / SQL / parquet)
- 2 Tarih normalizasyonu — Date.FromText ve Date.StartOfMonth ile Ay_Periyodu oluştur
- 3 Null/NaN temizliği — Satıcı_ID boşsa filtrele
- 4 Net_Kazanç hesapla (ETL'de yapmak performans kazandırır)
- 5 Gereksiz sütunları kaldır ve tipleri sabitle
Önemli Açıklamalar
Neden Date.StartOfMonth Kullanıyoruz?
Veri Kalite Kontrolleri:
Performance İpuçları:
💻 Modelleme: DateTable & İlişkiler
DateTable Oluşturma: Her modelde bir DateTable olmalı
Örnek DAX Kodu:
DateTable =
ADDCOLUMNS(
CALENDAR(DATE(2021,1,1), DATE(2026,12,31)),
"Yıl", YEAR([Date]),
"Ay", FORMAT([Date], "MMMM"),
"AyNumarası", MONTH([Date]),
"YılAy", FORMAT([Date], "yyyy-MM"),
"Ay_Start", DATE(YEAR([Date]),MONTH([Date]),1),
"Çeyrek", "Q" & QUARTER([Date])
)Model İlişkileri
Neden Bu İlişki Önemli:
📊 Calculated Columns: Cohort Temellerini Oluşturma
Bu sütunlar satıcı başına sabit olduğundan calculated column veya ETL'de
hesaplanmalı çünkü:
1- Satıcı başına bir kez hesaplanan sabit değerlerdir.
2- Her rapor sorgusu sırasında yeniden hesaplanmasına gerek yoktur.
3- Performans açısından avantaj sağlar.
Cohort_Date (satıcının ilk işlem ayı)
Cohort_Date =
CALCULATE(
MIN('Transaction'[Ay_Periyodu]),
ALLEXCEPT('Transaction','Transaction'[Satıcı_ID])
)Ne yapar: Her satıcının ilk işlem yaptığı ayı (edinim ayını) hesaplar. Tüm cohort analizinin temelini oluşturur.
Months_Since_Cohort - Cohort İndeksi
Months_Since_Cohort =
IF(
ISBLANK('Transaction'[Cohort_Date]) || ISBLANK('Transaction'[Ay_Periyodu]),
BLANK(),
DATEDIFF('Transaction'[Cohort_Date], 'Transaction'[Ay_Periyodu], MONTH)
)Ne yapar: Satıcının edinim ayından itibaren kaç ay geçtiğini gösterir (0, 1, 2, 3...). Heatmap görsellerinde kullanılacak temel indekstir.
Veri Tipi: Whole Number olarak ayarlayın - görsellerde doğru sıralama için önemli.
✅ Sanity Check: Her cohort için Months_Since_Cohort = 0 satırlarında Cohort_Active_Count == Cohort_Size olmalı.
⚡ Temel DAX Measures
Aşağıda, cohort matrisleri ve temel KPI'lar için gerekli tüm measure'lar yer alıyor:
Cohort_Size - Cohort Başlangıç Büyüklüğü
Cohort_Size
Cohort_Size =
VAR CohortPeriod = SELECTEDVALUE('Transaction'[Cohort_Date])
RETURN
CALCULATE(
DISTINCTCOUNT('Transaction'[Satıcı_ID]),
FILTER(ALL('Transaction'), 'Transaction'[Cohort_Date] = CohortPeriod)
)
Cohort_Active_Count - Aktif Satıcı Sayısı
Kullanım Amacı: Belirli bir cohort'un t+N ayında kaç satıcının aktif olduğunu sayar.
Cohort_Active_Count
Cohort_Active_Count =
VAR SelectedCohort = SELECTEDVALUE('Transaction'[Cohort_Date])
VAR CohortMonthIndex = SELECTEDVALUE('Transaction'[Months_Since_Cohort])
VAR CohortMonthDate = EDATE(SelectedCohort, CohortMonthIndex)
RETURN
CALCULATE(
DISTINCTCOUNT('Transaction'[Satıcı_ID]),
FILTER(
ALL('Transaction'),
'Transaction'[Cohort_Date] = SelectedCohort &&
'Transaction'[Ay_Periyodu] = CohortMonthDate)
)
Cohort_Retention_Rate – Retention Oranı
Kullanım Amacı:Ana KPI metriği. Görsellerde yüzde formatında gösterin.
Cohort_Retention_Rate
Cohort_Retention_Rate = DIVIDE([Cohort_Active_Count], [Cohort_Size], 0)
💡 Performans İpucu: Cohort_Date ve Months_Since_Cohort ETL veya calculated column olarak saklanmalı. Büyük transaction tablolarını Merchant_Month_Summary tablosuna indirgeme.
Cohort_Revenue_Period – Dönemsel Gelir
Cohort_Revenue_Period
Cohort_Revenue_Period =
VAR SelectedCohort = SELECTEDVALUE('Transaction'[Cohort_Date])
VAR CohortMonthIndex = SELECTEDVALUE('Transaction'[Months_Since_Cohort])
VAR CohortMonthDate = EDATE(SelectedCohort, CohortMonthIndex)
RETURN
CALCULATE(
SUM('Transaction'[Net_Kazanç]),
FILTER(
ALL('Transaction'),
'Transaction'[Cohort_Date] = SelectedCohort &&
'Transaction'[Ay_Periyodu] = CohortMonthDate
)
)Cohort_Cumulative_Revenue – Kümülatif Gelir
Cohort_Cumulative_Revenue
Cohort_Cumulative_Revenue =
VAR SelectedCohort = SELECTEDVALUE('Transaction'[Cohort_Date])
VAR CohortMonthIndex = SELECTEDVALUE('Transaction'[Months_Since_Cohort])
RETURN
CALCULATE(
SUM('Transaction'[Net_Kazanç]),
FILTER(
ALL('Transaction'),
'Transaction'[Cohort_Date] = SelectedCohort &&
DATEDIFF('Transaction'[Cohort_Date], 'Transaction'[Ay_Periyodu], MONTH) <= CohortMonthIndex
)
)Cohort_Average_LTV - Ortalama Lifetime Value
Kullanım Amacı: CAC ile karşılaştırma yaparak ROI hesapları için kritik metrik.
Cohort_Average_LTV
Cohort_Average_LTV =
DIVIDE(
[Cohort_Cumulative_Revenue],
[Cohort_Size],
0
)📊 Ek KPI'lar: Genel Satıcı Sağlığı
Aktif Satıcılar
Aktif_Satıcılar
Aktif_Satıcılar =
CALCULATE(
DISTINCTCOUNT('Transaction'[Satıcı_ID]),
'Transaction'[Ay_Periyodu] = MAX('Transaction'[Ay_Periyodu])
)Yeni Satıcılar
Yeni_Satıcılar
Yeni_Satıcılar =
VAR CurrentMonth = MAX('Transaction'[Ay_Periyodu])
VAR CurrentActive =
CALCULATETABLE(
VALUES('Transaction'[Satıcı_ID]),
'Transaction'[Ay_Periyodu] = CurrentMonth
)
VAR PreviouslyActive =
CALCULATETABLE(
VALUES('Transaction'[Satıcı_ID]),
'Transaction'[Ay_Periyodu] < CurrentMonth
)
RETURN
COUNTROWS(EXCEPT(CurrentActive, PreviouslyActive))Churn Oranı
Churned_Satıcılar
Churned_Satıcılar =
VAR PreviousMonthActive =
CALCULATETABLE(
VALUES('Transaction'[Satıcı_ID]),
DATEADD('Transaction'[Ay_Periyodu], -1, MONTH),
'Transaction'[İşlem_Sayısı] > 0
)
VAR CurrentActive =
CALCULATETABLE(
VALUES('Transaction'[Satıcı_ID]),
'Transaction'[İşlem_Sayısı] > 0
)
RETURN
COUNTROWS(EXCEPT(PreviousMonthActive, CurrentActive))📊 Dashboard Tasarımı ve Görselleştirme
Executive Summary Sayfası
KPI Kartları:
- •Aktif Satıcılar
- •Yeni Satıcılar
- •Churn Oranı
- •Toplam Gelir
- •Ortalama İşlem Hacmi
Trend Grafikleri:
- •Aylık gelir trendi (line chart)
- •Yeni satıcı edinim trendi
- •Churn oranı trendi
Cohort Analizi Ana Sayfası
Matrix (Heatmap) Ayarları:
- •Rows: Cohort_Date (YılAy formatında)
- •Columns: Months_Since_Cohort (0, 1, 2, 3...)
- •Values: Cohort_Retention_Rate (% formatında)
- •Conditional Formatting: Koyu renk = yüksek retention
Alternatif Matrix:
- •Values: Cohort_Average_LTV (LTV ısı haritası için)
Segment Analizi Sayfası
Slicers:
- •Ürün_Tipi
- •Kategori_Kodu (MCC)
- •İş_Ortağı
Grafikler:
- •Cohort büyüklüğü bar chart
- •Segment bazlı LTV karşılaştırması
- •Top 20 satıcı tablosu
🏢 Gerçek Dünya Örneği: 50,000+ Satıcı ile Cohort Analizi
Türkiye'nin önde gelen payment processing şirketlerinden birinde yaptığımız gerçek bir cohort analizi örneğini paylaşıyorum. 2.3 milyon işlem satırı ve 52,000+ satıcı verisi üzerinde çalışarak elde ettiğimiz bulgular:
Veri Seti Özellikleri
📊 Proje Büyüklüğü
En Büyük 10 Cohort (Satıcı Sayısına Göre)
| Cohort Ayı | Satıcı Sayısı | Özel Not |
|---|---|---|
| 2023-01 | 2,847 | En büyük onboarding ayı |
| 2022-09 | 2,534 | Sonbahar kampanyası |
| 2022-03 | 2,431 | Pandemi sonrası toparlanma |
| 2023-06 | 2,289 | Yaz sezonu |
| 2022-07 | 2,156 | Tatil öncesi yoğunluk |
| 2024-02 | 2,098 | Yeni ürün lansmanı |
| 2022-11 | 1,987 | Black Friday etkisi |
| 2023-04 | 1,876 | Bahar dönemi |
| 2022-05 | 1,743 | Normalleşme süreci |
| 2023-10 | 1,692 | Okul öncesi alışveriş |
Retention Analizi - Sektör Benchmarkları
📈 Genel Retention Trendi
Öne Çıkan Bulgular:
- •"3 Aylık Kritik Eşik": İlk 3 ayda %51.3 churn - bu dönemde yapılan müdahalelerin ROI'ı çok yüksek
- •Seasonality Etkisi: Sonbahar aylarında edinilen cohort'lar %15-20 daha iyi retention gösteriyor
- •Product Mix Impact: API entegrasyonu yapan satıcılar, iframe kullanlara göre 2.3x daha uzun süre kalıyor
Lifetime Value (LTV) Bulguları
| Cohort | Ortalama LTV (24 Ay) | Not |
|---|---|---|
| 2022-01 | ₺47,350 | Matured cohort |
| 2022-06 | ₺52,100 | Yaz etkisi |
| 2022-09 | ₺61,200 | En performant |
| 2023-01 | ₺34,600 | Henüz gelişmekte |
| 2023-06 | ₺31,900 | Genç cohort |
| 2024-01 | ₺8,750 | Sadece 12 ay |
💰 LTV Distribution (24 Aylık)
Segmentasyon Insights
MCC (Kategori) Bazlı Performance:
- •Marketler/Süpermarketler (MCC 5411): En yüksek retention (%41 @ 12ay)
- •Restoranlar (MCC 5812): Orta retention ama yüksek volume
- •Giyim (MCC 5651): Mevsimsel dalgalanma, düşük retention
- •E-ticaret Genel (MCC 5999): Çok değişken, segment analizi gerekli
Partner Channel Analizi:
- •Direct Sales: %35.2 (12ay retention) - Premium segment
- •Bank Referral: %28.7 - Stable ama düşük LTV
- •Digital Marketing: %22.1 - Yüksek volume, düşük quality
- •Reseller Network: %31.4 - Bölgesel farklılık yüksek
Model Performance ve Optimizasyon
⚡ Power BI Model Specs
🔧 Performance Optimizasyonları
İş Etkisi ve Eylem Planı
Bu cohort analizi sonucunda alınan somut aksiyonlar:
- •Onboarding UX İyileştirmesi: İlk 30 gün içinde %15 daha fazla satıcı aktif kaldı
- •Risk-Based Outreach: Churn riski yüksek segmente özel destek programı
- •Product Roadmap: API-first yaklaşım, iframe desteği kademeli azaltma
- •Pricing Strategy: LTV segmentlerine göre komisyon yapısı revize edildi
💎 ROI Hesaplaması
Bu gerçek dünya örneği, cohort analizinin sadece bir reporting tool değil, stratejik karar alma aracı olduğunu gösteriyor.
⚠️ Yaygın Hatalar ve Çözümler
1. Tarih Saat Uyumsuzlukları
Problem: Farklı timezone'lar nedeniyle cohort tarihleri yanlış hesaplanıyor.
Çözüm: ETL aşamasında tüm tarihleri UTC'ye çevirin ve Ay_Periyodu'nu ayın ilk günü olarak normalize edin.
2. Duplicate Satıcı ID'ler
Problem: Aynı satıcının birden fazla ID'si olması.
Çözüm: Müşteri matching tablosu kullanarak e-posta veya vergi numarası bazlı dedupe yapın.
3. Performance Sorunları
Problem: Büyük veri setlerinde yavaşlık.
Çözüm: Import mode kullanın, pre-aggregated tablolar oluşturun, calculated column'ları tercih edin.
4. Cohort 0'ın %100 Olmaması
Problem: Genellikle Cohort_Date veya Months_Since_Cohort hatalı hesaplanması.
Çözüm: Her cohort'un Month 0'ında retention'ın %100 olduğunu kontrol edin.
⚡ Performans Optimizasyonu İpuçları
1. Calculated Column vs Measure Kararı
- • Calculated Columns: Cohort_Date, Months_Since_Cohort gibi sabit hesaplamalar - veri yenilendiğinde bir kez hesaplanır
- • Measures: Dinamik KPI'lar ve filtrelenebilir metrikler - her sorgu için hesaplanır ama daha esnektir
Karar Kriterleri: Eğer değer satıcı/işlem bazında sabitse ve filtreleme gerektirmiyorsa calculated column kullanın. Dinamik hesaplama ve filtreleme gerektiren her şey için measure kullanın.
2. Summary Tablolar
Büyük veri setlerinde (1M+ satır) pre-aggregated tablo kullanın. Bu yaklaşım sorgu performansını 10-20x hızlandırabilir:
Satıcı_Ay_Summary Tablosu
-- Power Query M ile Summary Tablo Oluşturma
let
Source = Transaction,
Grouped = Table.Group(
Source,
{"Satıcı_ID", "Ay_Periyodu", "Ürün_Tipi", "Kategori_Kodu"},
{
{"İşlem_Sayısı", each List.Sum([İşlem_Sayısı]), type number},
{"Net_Kazanç", each List.Sum([Net_Kazanç]), type number},
{"Toplam_Gelir", each List.Sum([Toplam_Gelir]), type number}
}
)
in
Grouped
-- Alternatif: DAX ile Summary Tablo
Satıcı_Ay_Summary =
SUMMARIZE(
'Transaction',
'Transaction'[Satıcı_ID],
'Transaction'[Ay_Periyodu],
'Transaction'[Ürün_Tipi],
"İşlem_Sayısı", SUM('Transaction'[İşlem_Sayısı]),
"Net_Kazanç", SUM('Transaction'[Net_Kazanç])
)Bu summary tablo üzerinden measure'ları çalıştırarak milyonlarca satırlık transaction tablosunu yüz binlere indirgemiş olursunuz.
3. Indexing Stratejisi
SQL veri kaynağınız varsa, aşağıdaki kolonlar üzerinde index oluşturun:
- • Satıcı_ID: Tek başına index - merchant bazlı sorguları hızlandırır
- • Ay_Periyodu: Tek başına index - zaman serisi sorguları için
- • Satıcı_ID + Ay_Periyodu (composite): En kritik index - cohort hesaplamaları için
SQL Index Oluşturma Komutları
-- Tek kolon indexler
CREATE INDEX idx_merchant_id ON Transaction(Satıcı_ID);
CREATE INDEX idx_period ON Transaction(Ay_Periyodu);
-- Composite index (en önemli)
CREATE INDEX idx_merchant_period ON Transaction(Satıcı_ID, Ay_Periyodu);
-- Ürün tipi segmentasyonu için
CREATE INDEX idx_product_type ON Transaction(Ürün_Tipi);
-- Performance check
SELECT
tablename,
indexname,
indexdef
FROM pg_indexes
WHERE tablename = 'transaction';🚀 Gelişmiş Analiz Teknikleri
1. Segmented Cohort Analizi
Farklı satıcı segmentleri için ayrı cohort analizleri yaparak daha derinlemesine içgörüler elde edebilirsiniz:
📊 MCC Koduna Göre
Her sektörün farklı retention paterni vardır. Marketler genelde yüksek retention gösterirken, giyim sektörü mevsimsel dalgalanmalar gösterir.
🔧 Ürün Tipine Göre
API entegrasyonu yapan satıcılar iframe kullananlara göre 2-3x daha uzun süre kalıyor. Bu insight ürün stratejinizi şekillendirebilir.
📢 Onboarding Kanalına Göre
Direct sales vs digital marketing vs partner referral - her kanal farklı kalite satıcı getirir. CAC ve LTV dengesini kanal bazında optimize edin.
2. Predictive Churn Modeling
Cohort verilerini kullanarak gelecekteki churn'ü tahminleyebilir ve proaktif aksiyonlar alabilirsiniz:
Erken Uyarı Sinyalleri:
- • İlk 3 ayda düşük işlem hacmi: Aylık işlem hacmi cohort ortalamasının %50'sinin altındaysa yüksek churn riski
- • Azalan trend: Ardışık 2 ayda işlem hacmi düşüşü gösteriyorsa müdahale gerekli
- • İşlem sıklığı düşüşü: Aylık işlem sayısı 3'ün altına düşerse kritik seviye
Churn Risk Score Hesaplama
Churn_Risk_Score =
VAR CurrentMonthTx = [İşlem_Sayısı]
VAR PrevMonthTx = CALCULATE([İşlem_Sayısı], DATEADD('Transaction'[Ay_Periyodu], -1, MONTH))
VAR CohortAvgTx = CALCULATE(
AVERAGE('Transaction'[İşlem_Sayısı]),
FILTER(ALL('Transaction'), 'Transaction'[Cohort_Date] = SELECTEDVALUE('Transaction'[Cohort_Date]))
)
VAR MonthsSinceCohort = SELECTEDVALUE('Transaction'[Months_Since_Cohort])
// Risk faktörleri
VAR LowVolumeRisk = IF(CurrentMonthTx < CohortAvgTx * 0.5, 30, 0)
VAR DeclineRisk = IF(CurrentMonthTx < PrevMonthTx, 25, 0)
VAR EarlyStageRisk = IF(MonthsSinceCohort <= 3 && CurrentMonthTx < 5, 20, 0)
VAR InactivityRisk = IF(CurrentMonthTx = 0, 50, 0)
RETURN
LowVolumeRisk + DeclineRisk + EarlyStageRisk + InactivityRisk3. LTV Segmentasyonu
Satıcıları LTV'ye göre kategorize ederek farklılaştırılmış hizmet stratejileri uygulayabilirsiniz:
| Segment | LTV Aralığı | Strateji | Kaynak Tahsisi |
|---|---|---|---|
| Platinum | ₺100,000+ | Dedicated account manager, özel fiyatlandırma | Yüksek |
| Gold | ₺50,000-₺100,000 | Priority support, quarterly reviews | Orta-Yüksek |
| Silver | ₺10,000-₺50,000 | Standard support, self-service tools | Orta |
| Bronze | <₺10,000< /td> | Automated onboarding, growth programs | Düşük |
LTV Segment Hesaplama
LTV_Segment =
VAR LTV = [Cohort_Average_LTV]
RETURN
SWITCH(
TRUE(),
LTV >= 100000, "Platinum",
LTV >= 50000, "Gold",
LTV >= 10000, "Silver",
"Bronze"
)🔍 Test & Doğrulama (Sanity Checks)
⚠️ Mutlaka Yapılması Gerekenler:
- 1Cohort 0 kontrolü: Months_Since_Cohort = 0 satırlarında Cohort_Active_Count == Cohort_Size olmalı
- 2Rastgele merchant kontrolü: Ham veride MIN(Ay_Periyodu) ile modeldeki Cohort_Date eşleşmeli
- 3Unique counts: DISTINCTCOUNT(Satıcı_ID) ile dış kaynak sonuçlarını karşılaştır
- 4Tarih/timezone sorunları: ETL'de tüm tarihleri UTC'ye çevir
- 5Null/0 gelir satırları: LTV hesaplanırken outlier trimming stratejisi belirle
📈 Gerçek Dünya Örnekleri & Benchmark
📊 Tipik Retention Eğrisi
🏢 Örnek Proje Büyüklüğü
💡 Kritik İpucu: İlk 3 ay kritik öneme sahiptir. Bu döneme yönelik onboarding yatırımının ROI'si genelde en yüksektir.
🎯 Sonuç ve Eylem Planı
Cohort analizi, payment processing şirketleri için sadece bir raporlama aracı değil, stratejik karar alma ve büyüme optimizasyonunun temelidir. Bu rehberi takip ederek:
1️⃣ Hemen Başlayın
Verilerinizi yukarıdaki şemaya göre organize edin. Ay_Periyodu kolonunu mutlaka ayın ilk günü formatında tutun.
2️⃣ DAX Kodlarını Kopyalayın
Hazır measure'ları ve calculated column'ları modelinize aktarın. Test edin ve kendi iş kurallarınıza göre uyarlayın.
3️⃣ Dashboard'unuzu Kurun
Executive summary, cohort heatmap ve segment analizi sayfalarını oluşturun. Conditional formatting ile görsel etki yaratın.
4️⃣ İyileştirme Yapın
İlk sonuçlara göre segmentasyon, filtreleme ve ek KPI'lar ekleyin. Kullanıcı feedback'i alın ve iterative geliştirin.
Kritik Başarı Metrikleri:
- ✓ Aylık retention oranı >80% (ilk ay için) - Bu altına düşüyorsa onboarding sürecinizi gözden geçirin
- ✓ 12 aylık LTV/CAC oranı >3 - Sürdürülebilir büyüme için minimum hedef
- ✓ Churn oranı <%15< /strong> (aylık) - Sağlıklı bir retention programı için üst limit
- ✓ 3. ay retention >45% - Kritik milestone, bu altına düşenler için müdahale programı
⚠️ Önemli Hatırlatma: Bu analiz sistemini kurduktan sonra, aylık bazda cohort performansınızı takip ederek onboarding süreçlerinizi optimize edebilir, satıcı memnuniyetini artırabilir ve sürdürülebilir büyüme sağlayabilirsiniz. Unutmayın: Cohort analizi bir kerelik değil, sürekli izlenmesi gereken bir süreçtir.
Sonraki Adımlar:
Bu rehberi uyguladıktan sonra aşağıdaki gelişmiş teknikleri değerlendirin:
- 1 A/B Testleri: Farklı onboarding süreçlerinin cohort performansına etkisini ölçün. Örneğin: Kısa vs uzun onboarding formu, self-service vs assisted setup
- 2 Machine Learning Modelleri: Churn prediction için logistic regression veya random forest modelleri geliştirin
- 3 Real-time Alerting: Power Automate kullanarak kritik metrikler için otomatik uyarı sistemleri kurun
- 4 Competitive Benchmarking: Sektör standartlarıyla kendi performansınızı karşılaştırın
💡 Pro Tip: İlk 90 gün boyunca haftalık cohort toplantıları yapın. Erken dönem patternleri tespit etmek ve hızlı iterasyon yapmak için bu kritik. Sonrasında aylık rutine geçebilirsiniz.
🚀 Hızlı Eylem Planı
ETL'i Hazırla
CSV/DB → Power Query ile Ay_Periyodu normalize et, Net_Kazanç hesapla
Model Kur
DateTable, Cohort_Date & Months_Since_Cohort calculated columns, measures ekle
Dashboard Oluştur & Test et
Heatmap + Executive + Segment sayfaları kur, sanity checks çalıştır
