Son yıllarda tavsiye sistemleri hayatımızda önemli bir rol almış durumda. Film veya dizi izlediğimiz, müzik dinlediğimiz uygulamaların veya çevrim içi alışveriş yaptığımız platformların çoğu tavsiye sistemlerini kullanarak her bir kullanıcı özelinde önerilerde bulunmakta. Bu kişiselleştirilmiş deneyime Amazon’un geçmiş alışverişlerimize veya görüntülediğimiz ürünlere göre bizlerle aynı davranışı sergileyen kişileri baz alarak yaptığı ürün tavsiyeleri ve Netflix’in izlediğimiz türe, verdiğimiz puana, son görüntülediğimiz içeriklere göre yaptığı film ve dizi önerileri de örnek olarak verilebilir.
Tavsiye sistemlerini basitçe çeşitli kriterlere göre kullanıcılara ürün veya hizmet öneren algoritma ve analiz teknikleri olarak tanımlayabiliriz. Peki neden önemli bu sistemler?
gibi birçok nedenden dolayı bugün şirketler kendi öneri algoritmalarını geliştirmekte.
Tavsiye sistemlerini birliktelik kuralı temelli (association rule-based), içerik temelli filtreleme (content-based filtering) ve işbirlikçi filtreleme (collaborative filtering) başlıkları altında inceleyebiliriz. Bu yazıda sadece birliktelik kuralı temelli tavsiye sistemlerini detaylı olarak ele alıyorum. Ama kısaca diğer başlıklara da değinelim. Yukarıda yer almayan ama basit tavsiyeler olarak adlandırabileceğimiz, iş bilgisi ya da basit tekniklerle yapılan öneriler de vardır. Bunlar kategoriye ait en çok puanı alan, en çok satılan, trend olan ürünleri öneren sistemlerdir.
İçerik temelli ve işbirlikçi filtreleme yöntemleri için ise öncelikle kısaca filtreleme kavramını biraz açalım. Bir e-ticaret sitesini düşünün. İçerisinde yüzlerce, binlerce ürün barındırır. Filtreleme yöntemi bu ürünlerin sayısını belli bir kritere göre kullanıcının beğeneceği, ilgileneceği şekilde azaltmaya, küçültmeye yardımcı olur. İçerik temelli filtreleme bu küçültmeyi uzaklık temelli yöntemler kullanarak ürün özelliklerinin benzerliklerine göre yaparken, işbirlikçi filtreleme ürün özelliklerine ihtiyaç duymadan kullanıcı benzerliklerine göre (user-based) veya kullanıcının etkileşime girdiği ürünlere göre (item-based) yapar.
Tavsiye sistemleri ile ilgili genel bir fikir edindiğimize göre birliktelik kuralına (association rule) giriş yapabiliriz.
Birliktelik kuralları, market pazar analizlerinde ve tavsiye sistemlerinde kullanılan önemli makine öğrenmesi tekniklerinden biridir. Kullanıcı ve ürünler arasındaki ilişkinin incelenmesiyle kullanıcının alışkanlıkları gözlemlenmekte ve bu gözlem sonucunda çeşitli aksiyonlar uygulanmakta.
Birliktelik kuralları için birçok algoritma kullanılmaktadır. Bunların içerisinde en popüler olanı apriori algoritmasıdır. Apriori algoritmasında bilmemiz gereken üç önemli kavram var: Support, Confidence ve Lift. X ve Y markette bulunan ürünleri, N ise toplam ürün sayısını ifade etsin:
Birliktelik kuralı oluşturulmaya başlamadan önce minimum support ve minimum confidence değerleri belirlenir. Ürünlerin support değerleri bulunarak minimum support değerinin altında kalanlar çıkartılır. Bu işlem ürünlerin ikişer, üçer şekilde gruplanması ve minimum support değerine uymayanların çıkartılmasıyla devam eder. Daha sonrasında elde edilen itemsetin confidence değeri hesaplanır ve minimum confidence değerinin altında kalanlar çıkartılır. Geriye kalanlarla birliktelik kuralları oluşturulur.
Bir örnekle adım adım apriori algoritmasını uygulayalım.
5 alışveriş kaydımız var ve bu alışverişlerde A, B, C, D, E, F ürünleri satın alınmış. Support eşik değerimiz 0.2 ve support frekans değerimiz 1 olsun.
Adım 1: Her bir ürünün frekans ve support değeri hesaplanır.
Adım 2: Support değerine göre eleme yapılır, C ve F ürünlerinin supportu 0.2'den büyük olmadığı için itemsdan çıkarılır.
Adım 3: Yeni kombinasyonların listesi ve supportu oluşturulur. Tekrar support eşik değerine göre eleme yapılır.
Adım 4: Tekrar itemsa göre yeni kombinasyonlar oluşturulur ve supporta göre eleme yapılır.
Sonuç: Final tablomuz aşağıdaki gibi. Birliktelik kurallarını bulmuş olduk.
Tablonun nasıl yorumlanacağına örnek olması için (B,E) items değerini seçelim:
Apriori algoritmasının çalışma prensibini de adım adım incelediğimize göre artık tavsiye sistemi uygulamamıza geçebiliriz.
Çalışma kapsamında Online Retail II isimli veri setini kullanıyor olacağız. Müşterilerin 6 aylık CLTV değerlerini tahmin edip bu değerlere göre müşterileri segmentlere ayıracağız. Daha sonra bu segmentler bazında ayrı ayrı birliktelik kuralları oluşturarak müşterinin son yaptığı alışverişe de bakarak her bir müşteri özelinde ürün önerisinde bulunabileceğimiz bir uygulama yapacağız.
Adım 1: Gerekli kütüphanelerin yüklenmesi ve veri setinin okutulması
Adım 2: Veri ön-işleme
Ürün iadesi yapılan, ürün adedi sıfır olan işlemler veri setinden çıkarıldı. Fiyat ve ürün adedi değişkenlerindeki aykırı değerler baskılandı. Her bir işlemdeki toplam ödeme miktarını görebilmek için ürün adedi ve fiyatı çarparak TotalPrice değişkeni oluşturuldu.
Adım 3: BG-NBD ve GammaGamma modeli ile CLTV’nin hesaplanması ve segmentleme
CLTV için müşterilerin recency, tenure, frequency ve monetary değerleri hesaplandı.
Müşterilerin gelecek altı ay için değerleri bulundu ve bu değerlere göre A, B ve C segmentlerine ayrıldılar.
Adım 4: Birliktelik kurallarının oluşturulması
İlk olarak sadece A segmentine göre birliktelik kuralı oluşturup bu segmentteki tek bir müşteriye özelleştirilmiş ürün önerisinde bulunacağız. Daha sonra tüm veri seti için aynı işlemi gerçekleştireceğiz.
A segmentindeki kişilerin idlerini bir listeye ve bu idlere ait en baştaki ham verideki gözlemler bir dataframee atandı. create_invoice_product_df fonksiyonu ile fatura bazında yapılan tüm işlemlerde hangi ürünün alındığı bilgisini tutan yeni bir dataframe oluşturuldu.
A segmenti için birliktelik kuralları oluşturuldu. Confidence değerine göre büyükten küçüğe sıralandı.
Adım 5: Kişiselleştirilmiş ürün önerisi
A segmentinden 12347 idli müşteri seçildi ve en son alışverişinde aldığı ürünler miktar ve fiyata göre sıralandı.
En üstteki üründen başlayarak, A segmenti kuralları antecedents değişkeni içerisinde bulunmaya çalışılır. İlk bulunan ürünün kuralının consequents değeri öneri olarak verilir. 12347 idli müşteri için 23084 kodlu üründen başlandı ve kurallar içerisinde bulunan ilk ürün 20719 kodlu ürün oldu. Bu kurala göre önerilen ürün ise 20724 kodlu ürün oldu.
Adım 6: Tüm müşteriler için öneri
Create_rules fonksiyonu birliktelik kurallarının oluşturulmasını sağlamakta. Her bir segment için ayrı ayrı kurallar oluşturulacak. Bunun için tüm segmentlere ait idler ayrı listelere atandı ve ayrı ham dataframeler oluşturuldu. df_cltv dataframeine tavsiye edilecek ürünleri eklemek için Recommended Product değişkeni eklendi.
add_recommended_product fonksiyonu 12347 idli müşteri için yazdığımız kodun her bir müşteri için uygulanabileceği fonksiyonlaştırılmış halidir. Oluşturulan A, B ve C segmentlerinin dataframeleri tek tek bu fonksiyona sokulup müşterilere önerilecek ürünler belirlendi. Bazı gözlemlerde Recommended Productın None değeri aldığı görülüyor. Bunun sebebi müşterinin son yaptığı alışverişteki ürünlerine ait herhangi bir kural bulunmaması. Bu boş değerleri diğer geçmiş alışverişlerine bakarak doldurabiliriz ama segmentlere göre en yüksek supporta sahip ürünleri bularak boş değerleri dolduracağım.
Boş değerlerimiz müşterinin segmentindeki en çok satılan ürünle doldu.
Ürünleri stok kodları ile görebiliyoruz. check_id fonksiyonu ürünlerin isimlerine ulaşmamıza yardımcı olur.
Artık uygulamamızın sonuna geldik. Basit bir yaklaşımla müşterileri segmentlere ayırıp bu segmentler özelinde ürünlerin birlikte alınma durumlarından kurallar çıkararak her müşteri için kişiselleştirilmiş önerilerde bulunduğumuz bir çalışma gerçekleştirmiş olduk.
Çalışmada kullandığımız kodlara bağlantıdan ulaşabilirsiniz.
Tavsiye Sistemleri hakkında daha geniş kapsamlı bilgiye erişmek, kariyerinizde fark yaratacak adımlar atmak isterseniz Miuul'un sunduğu Tavsiye Sistemleri eğitimine göz atabilirsiniz.
Kaynaklar