Power BI ile Cohort Analizi — Baştan Sona Kapsamlı Rehber
Veri Analizi • Power BI • Cohort Analizi

Power BI ile Cohort Analizi — Baştan Sona Kapsamlı Rehber

Hedef: Ödeme hizmeti veren şirketler için satıcı retention ve LTV (lifetime value) analizini Power BI ile baştan sona kurup uygulayabilmenizi sağlamak. Rehber hem pratik adımları (Power Query + DAX + model tasarımı) hem de stratejik yorumu içerir.

Son kısımda test edebilmeniz için sentetik örnek veri oluşturma kodu da var.
📅 Yayın Tarihi: 23 Ağustos 2025 ⏱️ Okuma Süresi: 15 dakika 📊 Zorluk: Orta

🎯 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:

AlanTipAçıklama
Ay_Periyodudate(ayın ilk günü)Ay bazlı cohort analiz referansı
Satıcı_IDtext/intBenzersiz merchant ID
Ürün_TipitextAPI / iframe / vPOS / POS
Toplam_GelirdecimalBrüt gelir
Tum_MaliyetlerdecimalBanka/işlem maliyetleri
Net_KazançdecimalToplam_Gelir – Tum_Maliyetler
İşlem_SayısıdecimalGerçekleşen İşlem Adedi
İşlem_HacmidecimalGerçekleşen İşlem Hacmi
Sektor_KodudecimalSektö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:

  • CSV sütunları: Ay_Periyodu, Satıcı_ID, Ürün_Tipi, Toplam_Gelir, Kategori_Kodu, Tüm_Maliyetler, Net_Kazanç, İşlem_Hacmi, İşlem_Sayısı
  • Ay_Periyodu ayın ilk günü formatında (YYYY-MM-01) geldiği için doğrudan Power BI'da zaman-intelligence işlemlerine uygundur
  • Veri sentetik olduğu için gerçek müşteri bilgisi içermez; analiz ve modellerinizi geliştirmek için güvenle kullanılabilir
  • 🔄 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. 1 Veri oku (CSV / SQL / parquet)
    2. 2 Tarih normalizasyonu — Date.FromText ve Date.StartOfMonth ile Ay_Periyodu oluştur
    3. 3 Null/NaN temizliği — Satıcı_ID boşsa filtrele
    4. 4 Net_Kazanç hesapla (ETL'de yapmak performans kazandırır)
    5. 5 Gereksiz sütunları kaldır ve tipleri sabitle

    Önemli Açıklamalar

    Neden Date.StartOfMonth Kullanıyoruz?

  • Kesin ay-bucket referansı oluşturmak için
  • Power BI'ın time-intelligence fonksiyonları tutarlı çalışır
  • Cohort hesaplamalarında tarih uyumsuzluğu önlenir

  • Veri Kalite Kontrolleri:

  • Null/boş Satıcı_ID değerler filtrelenir
  • Negatif gelir değerleri temizlenir
  • Text alanlar trim edilir

  • Performance İpuçları:

  • Table.Buffer son adımda kullanılır - dönüşümleri sabitleme
  • ETL aşamasında Net_Kazanç hesaplanırsa model hafifler

  • 💻 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


  • DateTable[Date] → 1-* Transaction[Ay_Periyodu]

  • Neden Bu İlişki Önemli:

  • Bu ilişki, zaman serisi analizleri ve raporlamaları için kritik öneme sahiptir. DateTable, tarihsel verilerin doğru bir şekilde analiz edilmesini sağlar.
  • (DATEADD, SAMEPERIODLASTYEAR) gibi fonksiyonlar düzgün çalışır
  • Tarih aralığı yönetimi tek yerden yapılır
  • 📊 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üğü

    Zaman Aralığı: Ocak 2022 - Aralık 2024 (36 ay)
    Satıcı Sayısı: 52,847 benzersiz satıcı
    İşlem Satırı: 2,347,892 transaction
    İşlem Hacmi: ₺18.4 milyar
    Aylık Yeni Satıcı: ~1,500
    Veri Boyutu: 450 MB (Excel) / 180 MB (Power BI)

    En Büyük 10 Cohort (Satıcı Sayısına Göre)

    Cohort AyıSatıcı SayısıÖzel Not
    2023-012,847En büyük onboarding ayı
    2022-092,534Sonbahar kampanyası
    2022-032,431Pandemi sonrası toparlanma
    2023-062,289Yaz sezonu
    2022-072,156Tatil öncesi yoğunluk
    2024-022,098Yeni ürün lansmanı
    2022-111,987Black Friday etkisi
    2023-041,876Bahar dönemi
    2022-051,743Normalleşme süreci
    2023-101,692Okul öncesi alışveriş

    Retention Analizi - Sektör Benchmarkları

    📈 Genel Retention Trendi

    Month 0: 100.0%
    Month 1: 67.3%
    Month 2: 54.1%
    Month 3: 48.7%
    Month 6: 38.2%
    Month 12: 28.4%
    Month 24: 19.7%

    Ö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ı

    CohortOrtalama LTV (24 Ay)Not
    2022-01₺47,350Matured cohort
    2022-06₺52,100Yaz etkisi
    2022-09₺61,200En performant
    2023-01₺34,600Henüz gelişmekte
    2023-06₺31,900Genç cohort
    2024-01₺8,750Sadece 12 ay

    💰 LTV Distribution (24 Aylık)

    Top %5: ₺340,000+ (whale merchants)
    Top %10: ₺185,000
    Top %25: ₺85,000
    Median: ₺23,400
    Bottom %25: ₺4,200 altı

    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

    Yükleme Süresi: ~12s (initial) / ~3s (refresh)
    Model Boyutu: 178 MB (compressed)
    DAX Hesaplama: <200ms (cohort matrix)
    Concurrent User: 15+ kullanıcı sorunsuz

    🔧 Performance Optimizasyonları

    Summary Table: 628,000 satır (pre-aggregated)
    Partitioning: Yıl bazlı (2022, 2023, 2024)
    Calculated Columns: 2 adet
    Indexing: Composite index

    İş 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ı

    Analiz Maliyeti: ~80 saat + tool costs
    İyileştirme ROAS: %340 (6 ay içinde)
    Churn Azalması: -%23 (yıllık basis)
    Net Gelir Etkisi: +₺12.8M (12 ay projeksiyon)

    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 + InactivityRisk

    3. LTV Segmentasyonu

    Satıcıları LTV'ye göre kategorize ederek farklılaştırılmış hizmet stratejileri uygulayabilirsiniz:

    SegmentLTV AralığıStratejiKaynak Tahsisi
    Platinum₺100,000+Dedicated account manager, özel fiyatlandırmaYüksek
    Gold₺50,000-₺100,000Priority support, quarterly reviewsOrta-Yüksek
    Silver₺10,000-₺50,000Standard support, self-service toolsOrta
    Bronze <₺10,000< /td>Automated onboarding, growth programsDüşü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:

    1. 1Cohort 0 kontrolü: Months_Since_Cohort = 0 satırlarında Cohort_Active_Count == Cohort_Size olmalı
    2. 2Rastgele merchant kontrolü: Ham veride MIN(Ay_Periyodu) ile modeldeki Cohort_Date eşleşmeli
    3. 3Unique counts: DISTINCTCOUNT(Satıcı_ID) ile dış kaynak sonuçlarını karşılaştır
    4. 4Tarih/timezone sorunları: ETL'de tüm tarihleri UTC'ye çevir
    5. 5Null/0 gelir satırları: LTV hesaplanırken outlier trimming stratejisi belirle

    📈 Gerçek Dünya Örnekleri & Benchmark

    📊 Tipik Retention Eğrisi

    Month 0: 100%
    Month 1: ~67%
    Month 3: ~48-50%
    Month 6: ~38%
    Month 12: ~28%

    🏢 Örnek Proje Büyüklüğü

    Zaman aralığı: 36 ay
    Satıcı sayısı: 52,847
    İşlem satırı: ~2.35M
    Ortalama yeni satıcı/ay: ~1,500

    💡 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. 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. 2 Machine Learning Modelleri: Churn prediction için logistic regression veya random forest modelleri geliştirin
    3. 3 Real-time Alerting: Power Automate kullanarak kritik metrikler için otomatik uyarı sistemleri kurun
    4. 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ı

    1️⃣

    ETL'i Hazırla

    CSV/DB → Power Query ile Ay_Periyodu normalize et, Net_Kazanç hesapla

    2️⃣

    Model Kur

    DateTable, Cohort_Date & Months_Since_Cohort calculated columns, measures ekle

    3️⃣

    Dashboard Oluştur & Test et

    Heatmap + Executive + Segment sayfaları kur, sanity checks çalıştır

    Yorum bırakın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir