Ebebek Tavsiye Sistemleri

Sevay Yıldırım
Ebebek Tech
Published in
7 min readDec 28, 2022

Merhabalar,

Bu yazımda sizlere Ebebek’teki Tavsiye Sistemi konusunda yaptığımız projelerden bahsedeceğim.

Bu yazı kapsamında;

— Basit Tavsiye Sistemleri (Simple Recommender Systems)

— Birliktelik Kuralı Öğrenimi (Association Rule Learning)

— İçerik Temelli Filtreleme (Content Based Filtering)

— İş Birlikçi Filtreleme (Collaborative Filtering) konularına Python uygulamalı şekilde değineceğim.

Keyifli okumalar!

Tavsiye Sistemi Nedir?

Kullanıcının ilgisine göre, sonraki davranışlarını tahmin edip kullanıcılara önerilerde bulunan yapılardır.

- Basit Tavsiye Sistemleri (Simple Recommender Systems)

İş bilgisi ya da basit tekniklerle yapılan genel önerileri içermektedir. Örneğin bir ürünün veya hizmet kategorisinin en yüksek puanlıları, trend olanlar, efsaneler…

- Birliktelik Kuralı Öğrenimi (Association Rule Learning)

Birliktelik Kuralları, market pazar analizlerinde ve tavsiye sistemlerinde kullanılan önemli makine öğrenme tekniklerinden birisidir. Kullanıcı ve ürünler arasındaki ilişkinin incelenmesiyle kullanıcının alışkanlıkları gözlemlenebilir ve bu gözlemler sonucunda aksiyon alınması sağlanır. Birliktelik Kuralı uygulamalarında Apriori Algoritması kullanılmaktadır.

Apriori Algoritması ( Apriori Algorithm )

Sepet Analizi yöntemidir. Ürün birlikteliklerini ortaya çıkarmak için kullanılır.

Apriori algoritmasında bilinmesi gereken üç kavram Support, Confidence ve Lift önemlidir. X ve Y markette bulunan ürünleri, N ise toplam alışveriş sayısını ifade eder diyelim.

Support: X ve Y’nin ne sıklıkta birlikte görüldüğünü ifade eder.

Confidence: X ürününü alan bir müşterinin Y ürününü alma ihtimalini gösterir.

Lift: X ürünü satın alındığında Y ürününün satışının ne kadar artış gösterdiğini belirtir.

Apriori Algoritması Örnek:

Yukarıdaki Lift hesabı, ekmek satın alındığında süt satın alınma olasılığı 1 kat artmaktadır şeklinde yorumlanır. 1 çıkması aralarında birbirini etkileyen bir durumun olduğunu gösterir.

Apriori Nasıl Çalışır?

Apriori algoritması adım adım çalışmanın başında belirlenecek bir support eşik değerine göre olası ürün çiftlerini hesaplar ve her iterasyonda belirlenen support değerine göre elemeler yaparak nihai final tablosunu oluşturur.

- İçerik Temelli Filtreleme (Content Based Filtering)

Ürün içeriklerinin benzerlikleri üzerinden tavsiyeler geliştirilir.

Örneğin bir kullanıcı bir kitap okudu ve bu kullanıcıya okuduğu kitaba göre ürün önermemiz gerektiğini düşünelim. Bu durumda kullanıcıdan edindiğimiz tek bilgi okuduğu bir kitap ise, bu kitabın kategorisi, içeriği veya kitabın konusuna benzer kitabı önerebiliriz.

Metinlerin birbirlerine yakınlığını iki adımda ölçebiliriz:

  1. Metinleri Matematiksel Olarak Temsil Et (Metinleri Vektörleştirme)
  2. Benzerlikleri Hesaplanması

Metinleri Matematiksel Olarak Temsil Etmek:

Metinleri matematiksel olarak ölçülebilir bir forma getirmektir. Örneğin bir ürünü alan kullanıcılara aldığı ürüne benzer ürünleri bulmak istersek burada yapılması gereken ürün isimlerinde geçen kelimeleri vektörlere ayırmak ve diğer ürünlerle olan benzerliklerini hesaplamaktır. Bu problem için iki yöntem uygulanabilmektedir:

· Count Vector (Word Count)

· TF-IDF

Metinlerin Vektörel Temsilleri (Count Vector)

Yukarıdaki tabloda m tane film ve bu m tane filmin içindeki eşsiz n tane kelimenin filmlerde geçme frekansları verilmiştir. Satırlardan bakılınca Öklid uzaklıkları hesaplandığında Movie3 ile Moviem’in birbirlerine en benzer film oldukları görülür.

Benzerlikler hesaplanırken Kosinüs Benzerliği, Öklid Uzaklığı, Pearson Korelasyonu gibi çeşitli metotlar kullanılabilir. Kosinüs Benzerliği tepe noktası sıfırda olan iki nokta arasındaki açıyı ölçerken Öklid Uzaklığı ise uzayda 2 noktanın birbirleri arasındaki düz çizginin (uzaklığın) uzunluğunu ölçer.

- İş Birlikçi Filtreleme (Collaborative Filtering)

· Item-Based Collaborative Filtering

· User-Based Collaborative Filtering

· Model-Based Collaborative Filtering

Item-Based Collaborative Filtering

Item benzerliği üzerinden öneriler yapılır. Örneğin izlenilen bir filmin beğenilme yapısına benzer beğenilme yapısı gösteren bir film arıyorsak bu yöntem kullanılır. Örneğin Müşteri A’nın B filmini beğendiğini varsayalım. Bu film ile benzer beğenilme yapısı gösteren filmler nelerdir? A’nın beğenmiş olduğu bu filme benzerlik durumunu, bu film ile benzer beğenilme pattern’ı gösteren filmleri bulacak şekilde yanıtlıyoruz.

Kullanıcı Tabanlı İş Birlikçi Filtreleme ( User-Based Collaborative Filtering )

User benzerlikleri üzerinden öneriler yapılır. Kullanıcı Tabanlı Filtreleme yaparken örneğin müşteri A ile aynı filmleri izlemiş kullanıcıları topluyoruz. Müşteri A’ya en benzer beğenmeye sahip kullanıcılardan, bu kullanıcıların beğendiği filmleri A da beğenebilir ihtimalini varsayıyoruz.

Matris Çarpanlarına Ayırma ( Matrix Factorization )

Tavsiye sistemlerinde model based filtreleme yöntemlerindendir. Problemimiz ise tablodaki boşlukları doldurmaktır.

Amacımız yeşil blank kutucuklarının yerine ne gelebileceğini tahmin ederek doldurmaktır. Boşlukları doldurmak için user’lar ve movie’ler için var olduğu varsayılan latent feature’ların ağırlıkları var olan veri üzerinden bulunur ve bu ağırlıklar ile var olmayan gözlemler için tahmin yapılır.

· User-Item matrisini 2 tane daha az boyutlu matrise ayrıştırır.

· 2 matristen User-Item matrisine gidişin latent factor’ler ile gerçekleştiği varsayımında bulunur.

· Dolu olan gözlemler üzerinden latent factor’lerin ağırlıklarını bulur.

· Bulunan ağırlıklar ile boş olan gözlemler doldurulur.

Matrix Factorization

· Rating matrisinin iki faktör matrisin çarpımı (dot product) ile oluştuğu varsayılır.

· Factor matrisler? user latent factors, movie latent factors

· Latent factors? Latent features? Gizli faktörler ya da değişkenler.

· Kullanıcıların ve filmlerin latent feature’lar için skorlara sahip olduğu düşünülür.

· Bu ağırlıklar (skorlar) önce var olan veri üzerinden bulunur ve sonra BLANK bölümler bu ağırlıklara göre doldurulur.

Proje1: Birliktelik Kuralına Dayalı Tavsiye Sistemi

İş Problemi: Sepet aşamasında kullanıcılara ürün önermek.

Kütüphaneler

Kütüphanelere ek olarak mlxtend kütüphanesini de kurmamız ve import etmemiz gerekiyor.

Veri Ön İşleme

Verilerdeki Değişkenler; FaturaNo, Stok Kodu, Açıklama (ürün ismi), Miktar, FaturaTarihi, BirimFiyat, MüşteriNo, Müşteri Adı, Mağaza

df.head() kodunun çıktısı

Fatura tarihi ve miktar değişkenlerinin tipi kontrol edilir, olması gerektiği şekilde değiştirilir. Daha sonra ürünlerden (Description_ değişkeninden) Etorba ve Kargo Bedeli çıkarılır.

df.describe().T kodunun çıktısı

df.isnull().sum() kodunun çıktısı

df.shape kodunun çıktısı

Veri Ön İşleme

Bir değişkenin dışındaki değerlere aykırı değerler denir. Değişkenler için eşik değerleri ayarlayacağız, sayılardan herhangi birinin aykırı olup olmadığını kontrol edeceğiz ve aykırı değerlere bir eşik değeri vereceğiz. Eşik değerlerini belirlemek için fonksiyonumuzu oluşturarak başlayalım. İlk çeyrek sayısı genellikle %25 olarak girilir ve ikinci çeyrek değeri genellikle %75 olarak girilir. Ancak, veri yapısını önemli ölçüde değiştirmeden aykırı değerleri mümkün olan en basit şekilde fark etmek istediğimiz için bu şekilde yazıyoruz.

Veri çerçevesi içinde erişmek istediğimiz alt ve üst sınırları belirledigimiz eşik değerine dönüştürerek bastırma işlemini gerçekleştireceğiz.

ARL Veri Yapılarının Hazırlanması (Fatura-Ürün Matrisi)

Faturalara göre hangi üründen ne kadar alındığını gözlemleyebilmek için;

unstack() bir pivot oluşturmaya izin verir. Yukarıdaki görseldeki isimlerin değişken isimlerine dönüştürüldüğünden emin oluyoruz. iloc yapısı ile indekslerden seçim yapıyoruz.

Bu işlemi eksik olan değerlerin yerine sıfır, tam olanların yerine birler yazacak şekilde yapmalıyız. Öncelikle unstack() işleminden sonra fillna(0) diyerek boş alanları sıfır ile dolduruyoruz.

Applymap işlevi, tüm işlev boyunca döngü yapar. Bu fonksiyonu kullanarak sıfırdan büyük değerlere lambda fonksiyonu ile 1 yazdırıyoruz.

Bilginin hem StockCode hem de Description’a göre gelmesini istiyorsak yukarıdaki fonksiyonu kullanabiliriz.

Birliktelik Kurallarının Çıkarılması

Apriori olası ürün ilişkilendirmelerinin olasılığını verir. 0.001'in altında değerler istemiyoruz, bu yüzden bu şekilde belirtiyoruz. (min_support=0,001). Kod çıktısında görüldüğü üzere sağdaki ürünlere karşılık azalan sırayla olacak şekilde support değerleri verilmiştir. Örneğin Keçi Sütlü Bebek Bisküvisinin tek basına gözlenme olasılığı 0.014948’dir.

Bu verileri kullanarak bir birliktelik kuralı türeteceğiz. Bunun için Association_rules methodu kullanılır.

Proje2: İçerik Temelli Filtrelemeye Dayalı Tavsiye Sistemi

İş Problemi: Benzerliklere Göre Önerilerin Yapılması

Kütüphaneler

Verideki Değişkenler; title

df.head() kodunun çıktısı

--

--