CRM Analytics — CLTV Projeksiyonu

Oğuz Erdoğan
6 min readJun 4, 2021

E-ticaret ya da perakende sektöründe müşteriler ve şirketler arasındaki ilişki sözleşmeye dayalı olmayan bir ilişkidir.

Buna benzer sözleşmesiz bir iş dünyasında kullanıcıların churn olması (kayıp) genellikle sessizce gerçekleşen bir eylemdir ve bu kullanıcıların aslında uykuda mı olduklarını ya da churn mü olduklarını anlayabilmek oldukça güçtür.

Bu durum Customer Lifetime Value hesabınında da zorluk çıkartır.

Bu yazımda sözleşmesiz iş modelleri için BG\NBD & Gamma Gamma Modelleri ile CLTV tahmini yapacağız. Kullanıcıların geçmiş alışveriş alışkanlıklarıyla kuracağımız modeller ile bize belirli zaman periyotları içerisinde hangi müşterilerimizin geleceğini, en kârlı müşterilerimizi ve müşterilerimizin CLTV değerlerinin tahmini yapacağız.

Eğer CLTV hakkında bilgi sahibi değilseniz serinin daha önceki yazılarına göz gezdirmenizi tavsiye ederim. Burada CRM Analitiği ve CLTV hakkında bilgilere ulaşabilirsiniz.

Daha önceki basit Customer Lifetime Value hesaplamamızda bazı önemli faktörler hesaba katılamıyordu. Bunlar;

  • Basit CLTV yalnızca analizin yapıldığı zamanı temsil edebiliyordu.
  • Genel olarak Total Price (Toplam satın alma) üzerine kurulu bir hesaplamaydı ve bu durum Frekans sıklığının önüne geçiyordu.
  • Yani aynı fiyatı kazandırdıktan sonra müşterinin yaptığı işlem sayısının bir önemi yoktu.
  • Churn Rate ve Profit tüm kitleden geliyordu, kişisel değildiler.

Anlayacağınız üzere kişilerin değerlerini belirlemek istediğimiz zaman bu kişilerin yaptıkları işlem geçmişlerini onlara özel şekilde hesaba katmalıyız.

Bunun için bir müşterinin son işleminden bu yana geçen zaman, ortalama bıraktığı para gibi faktörlere kişi özelinde bakmamız gerekir.

Müşteri yaşıyor ama uykuda mı yoksa müşteri ölü mü?

Dead: Churn — Terketmiş müşteri — ölü müşteri

Alive: aktif olarak satın alım yapan müşteri — canlı müşteri, yaşıyor

Buradaki ölü diye nitelendirdiğimiz durum bizim için canlı olmayan churn olmuş bir kullanıcı tanımıyken, uykuda dediğimiz durum ise kendisinden hareket beklediğimiz fakat henüz bu hareket zamanının gelmediği müşteri tanımıdır.

Ön bilgileri aldığımıza göre projeye geçelim.

Veri Seti Bilgisi

Online Retail II isimli veri seti İngiltere merkezli online bir satış mağazasının 01/12/2009–09/12/2011 tarihleri arasındaki satışlarını içeriyor.

Bu şirketin ürün kataloğunda hediyelik eşyalar yer alıyor. Promosyon ürünleri olarak da düşünülebilir.

Çoğu müşterisinin toptancı olduğu bilgisi de mevcut.

Veri setine ve kodlara buradaki repodan ulaşabilirsiniz.

Kütüphaneleri yüklenmesi

Veri setinin yüklenmesi

Veri ön işleme adımları

Gerekli sütunları alalım.

Tekil müşteri sayısına bakma

  • Frequency: Müşterinin yaptığı tekrar satın alma sayısını temsil eder.
  • RFM de bunu satın alma sayısı olarak almıştık CLTV hesabında ise müşterinin toplam satın alma sayısından bir eksik olacak şekilde alacağız.
  • - Invoice.nunique() - 1
  • T, seçilen zaman birimlerinde (veri setimizde günlük olarak) müşterinin yaşını temsil eder.
  • Müşterinin ilk satın alımı ile incelenen dönemin sonu arasındaki süreye eşittir.
  • - Analiz Tarihi - İlk satın alma tarihi
  • Recency, müşterinin en son alışverişlerini yaptığı yaşını temsil eder.
  • Müşterinin ilk satın alımı ile son satın alımı arasındaki süreye eşittir. (Dolayısıyla, yalnızca 1 satın alma yapmışlarsa, yenilik 0'dır.)
  • - Son satın alım tarihi - İlk satın alım tarihi

Bu çalışma için pythondaki lifetimes kütüphanesini kullanacağız.

Lifetimes kütüphanesinin yüklenmesi

Verisetinin en son tarihi 2011–12–9

Data Explore

Transaction datasını lifetimesın metodu ile hazırlayalım.

Kullanıcı özelinde bilgilere bakacak olursak:

Kullanıcı 12346.0 sadece 1 alışveriş yapmış (tekrar yok) bu sebeple frequency ve recency değerleri 0

Kullanıcı 12348 ise 4 farklı günde işlemi var, ilk işlemini dahil etmeyip monetary hesabı yapılıyor.

Sadece 1 kez alışveriş yapan müşteriler

Veri setimizdeki tüm kullanıcıların neredeyse %35i 1 kez alışveriş yapmış.

BG/NBD Modelini Kullanarak Frequency/Recency Analizi

Küçük verisetleri için, parametreler inanılmaz derecede büyük olabilir, bu nedenle olasılığa bir l2 cezası ekleyerek, bu parametrelerin ne kadar büyük olabileceğini kontrol edebiliriz.

Bunu modeli fit ederken penalizer_coef değeri girerek yapıyoruz.

Tipik uygulamalarda, 0,001 ila 0,1 arasındaki cezalandırıcılar etkilidir

Şöyle düşünelim:

Ayşe Hanım 4 hafta boyunca her gün bizden alışveriş yapmış olsun ve kendisinden bu ay hiçbir haber alamıyoruz.

Ayşe Hanımın bizim için ‘alive’ yani yaşıyor olmasının ihtimali nedir? Oldukça düşüktür değil mi?

Diğer yandan Mehmet Bey; Bizimle her üç ayda bir alışveriş yapıyor ve geçen çeyreklikte de alışverişini yapmış. Mehmet Bey bizim için hala yaşıyor diyebiliriz.

Bir müşterinin bir sonraki zaman diliminde yapması beklenen işlem sayısını: Frequency / Recency matrisini kullanarak görselleştirebiliriz.

Frequency ( Tekrar yaptığı alışveriş sayısı ) / Recency ( son alışveriş tarihi — ilk alışveriş tarihi)

Bir müşteri 120 satın alma işlemi gerçekleştirdiyse ve en son satın alma işlemi yaklaşık 350 günlükken gerçekleştiyse o zaman en iyi müşterimizdir.

(Recency: İlk işlemi ile son işlemi arasındaki süre 350 gün ise) Bu durumu sağ alt tarafta gözlemleyebiliriz.

Çok fazla satın alma işlemi gerçekleştirmiş ve bu işlemleri de yakın zamanda gerçekleştirmiş müşteriler gelecekte en iyi müşteriler olacaktır.

Ayrıca 40–300 aralıkların farklı bir kullanıcı tipini gözlemleyebiliriz. Bu müşterilerimizi son zamanlarda görmediğimiz için tekrar satın alma işlemini gerçekleştirebilirler. Fakat bu müşterilerin bizi terk ettiklerini mi yoksa satın alma periyotlarının içerisinde mi olduklarını tam olarak kestiremiyoruz.

Müşterilerin hala alive (hayatta olma) olasılığına bakmak istersek:

Yakın zamanda satın alan müşteriler neredeyse kesinlikle “canlıdır”.

Çok sık alışveriş yapan fakat son zamanlarda uğramayan müşteriler churn olmaya doğru giden kullanıcılar. Bu kullanıcılar geçmişte ne kadar fazla alışveriş yaptılarsa o kadar churn olasılıkları artıyor. (Sağ üst tarafta gözlemlenebilir)

Müşterileri en çok satın alma olasılıklarına göre çoktan aza doğru sıralayalım.

Kullanacağımız model, müşterilerin geçmiş alışveriş alışkanlıklarını kullanarak gelecek dönemde beklenen satın alma işlemlerini tahmin etmeye yarıyor.

30 gün içerisinde en çok işlem yapması beklenen müşteriler

Yukarıda listelenenler, modelin ertesi 30 gün sonra satın alım yapmalarını beklediği ilk 5 müşterimizdir.

predicted_purchases, Beklenen Satın Alma sayısını temsil ederken diğer üç sütun, mevcut RFM metriklerini temsil eder.

BG/NBD modeli, bu kişilerin şu anki en iyi müşterilerimiz oldukları için yakın gelecekte daha fazla alışveriş yapacaklarına inanmaktadır.

Model Uyumunun Değerlendirilmesi

Modeli kurduk fakat ne kadar iyi?

Gördüğümüz gibi model hiç kötü değil, bu yüzden analizimize devam edebiliriz.

Şimdi de tıpkı makine öğrenmesindeki cross-validation gibi modelimizin görmediği veri üzerindeki durumunu gözlemleyelim.

Yukarıdaki grafikte train ve test seti olarak ayırdığımız verileri görebiliriz.

  • Train döneminin bitişi “2011–06–09” iken
  • Test döneminin bitişi “2011–12–9” tarihidir.

Grafik train periyodundaki tüm müşterileri tekrar alım sayısına göre (x ekseni) gruplar ve ardından bekleme süresindeki (y ekseni) tekrar alımlarının ortalamasını alır.

Mavi ve turuncu çizgi sırasıyla, train ve test setini belirtir. Gördüğümüz gibi modelimiz müşteri davranışını çok doğru bir şekilde tahmin edebiliyor.

Fakat 4. ve 5. satın alımlar sonrasında eksik tahminler yapıyor.

Müşteri Bazında Tahmin

Müşteri geçmişine dayanarak, artık bir bireyin gelecekteki satın alımlarını da tahmin etmemiz mümkün.

Modelimiz, müşteri 15498'nin gelecekteki işleminin 10 gün içinde 0.391 olduğunu tahmin ediyor.

Müşteri Olasılık Geçmişleri

Bir müşteri işlem geçmişi göz önüne alındığında, eğitimli modelimize göre onların geçmişte hayatta olma olasılıklarını hesaplayabiliriz.

Örneğin, en iyi müşterimizin işlem geçmişine bakmak ve hayatta olma olasılığını görmek istersek;

En iyi müşterimizi inceleyecek olursak kendisi kesinlikle canlı yani aktif olarak alışverişlerini sürdürüyor.

Fakat 2011in ikinci yarısında birkaç ara verdiği aralık mevcut.

Gamma Gamma Modelinin Kurulması

Beklenen ortalama kârlılık değerlerini gösterir. Burada GammaGamma modelini kurabilmemiz için en az 1 kere alışverişini tekrar ettiren kullanıcıları seçmemiz gerekiyor.

Bu sebeple tekil müşteri sayımız 2790'a düşmekte.

En çok kâr getirmesini beklediğimiz 10 müşteri

BG/NBD & GammaGamma modelleri ile CLTV Hesabı

Azalan sırada sıralama.

CLV değerlerini anlamak için bu tabloyu ana tablomuz ile bağlayalım

CLTV değerlerini MinMax scaler ile 0–100 arasında ölçeklendirelim.

Segment analizleri

İlgili segmentlerin tanımlayıcı istatiklerini de bu şekilde görebiliriz.

Bu yazımda sizlerle müşterin satın alma alışkanlıkları ile BG/NBD & Gamma Gamma olasılıksal modelleri ile;

Bu kişilerden:

  • Yakın zamanda gelmesini beklediklerimizi
  • Bizim için en iyi müşterilerin tanımlarını
  • Kişi özelinde müşterilerin canlı olup olmayacağının incelenmesini
  • Kurulan modelin sağlamasının yapılmasını
  • En çok kâr getirebilecek ve tüm müşterilerin yaşam boyu değerlerini tahmin ettik.
  • Ve bu değerlere göre bir segmentasyon gerçekleştirdik.

Bir sonraki yazım K- Means kümeleme algoritması ile bu müşteri verilerinden makine öğrenmesi yöntemi ile bir kümeleme çalışması yapıp bu zamana kadar olan sınıfları birlikte gözlemleyeceğiz.

Sağlıcakla kalın!

Sorularınız için:

Oğuz Erdoğan | LinkedIn

Kaynaklar:

Veri Bilimci Yetiştirme Programı — Veri Bilimi Okulu

I , II , III

--

--