Python ile Öneri Sistemleri

Kübra Kurt
KaVe

--

Herkesin bildiği gibi e-ticaret siteleri gün geçtikçe artış göstermektedir. Onların artış göstermesi sonucunda ise Öneri Sistemleri ortaya çıkmıştır. Alışveriş siteleri, müzik ve film platformları vs. kısacası e-ticarete giren her alan için büyük önem taşımaktadır. İyi çalışmasına bağlı olarak şirketlerin kazançlarına büyük katkı sağlamaktadır.

Öneri Sistemleri; kullanıcılara kişiselleştirilmiş ürün/hizmet sağlamayı amaçlar. Kullanıcıların daha önceden yaptıkları tercihlere, beğenilere göre ya da satın aldıkları ürünlere göre hizmet sunar.

Her iki tarafa da avantaj sağlar. Müşterilerin işlerini kolaylaştırır, onlara vakit kazancı sağlar ve onlara sevebilecekleri yeni ürünler sunarlar. Şirketlere daha çok satış yapma imkanı sağlar, geri planda kalmış ürünleri ortaya çıkarır ve müşteri memnuniyeti sağlar.

Nasıl çalıştığına gelecek olursak; sizin web üzerindeki davranışlarınızı kontrol ve kayıt ederler. Bir video izlediğinizde tamamını mı izlediniz yoksa yarım mı bıraktınız? Ne tür video izlediniz? Ürün baktıysanız hangilerine baktınız veya hangilerini satın aldınız? Bu soruları sorarak sizinle ilgili bilgileri toplarlar ve size en iyi hizmeti sağlamayı amaçlarlar.

Kaynak

Dört farklı türü vardır. Bunlardan bahsedecek olursak;

  1. İşbirliğine Dayalı Öneri Sistemleri

Benzer kullanıcıları tespit ederler ve sonra bu kullanıcıların tercihlerini birbirlerine önerirler.

2. İçeriğe Dayalı Öneri Sistemleri

Kullanıcıların daha önceden yapmış oldukları işlemlerden faydalanırlar. Sonrasında da tamamlayıcı ürünler önerebilirler. Defter alırsanız, kalem önerebilirler ya da kalem alırsanız silgi önerebilirler.

3. Popülarite Tabanlı Öneri Sistemleri

Kullanıcıların davranışlarından etkilenmez. O günün trend ürün/hizmetlerini öne çıkarmayı amaçlar. O gün en çok izlenen video, en çok satın alınan ürün vs.

Kaynak

4. Hibrit Öneri Sistemleri

İçeriğe Dayalı Öneri Sistemleri ve İşbirliğine Dayalı Öneri Sistemleri birlikte kullanır. İki sistemin birlikte kullanılmasıyla beraber en iyi performansı göstermeyi amaçlar. En çok kullanan platform ise Spotify’dır.

Kaynak
Kaynak

Öneri Sistemleri çok büyük markalar ve platformlar tarafından kullanılmaktadır. Örnek verecek olursak Amazon gelirinin yaklaşık %35’lik kısmı buradan gelmektedir. Amazon bunu en çok e-posta kampanyaları ve site içerisinde kullanmaktadır.

Netflix ise kullanıcıların izleme geçmişlerini kayıt eder, hangi filmi bitirmiş hangi filmi yarıda bırakmış? Beğendiği ya da beğenmediği filmler hangileri? Ayrıca benzer kullanıcıları tespit ederek birbirlerine izledikleri içerikleri de önermektedir.

Son olarak Spotify’dan bahsedecek olarsak üç farklı öneri modeli kullanmaktadır. İşbirliğine Dayalı; benzer kullanıcıları tespit eder, birbirlerine dinledikleri şarkıları önerir. Doğal Dil İşleme; her şarkıdaki metinleri analiz eder. Ses Modellemesi; Şarkının ham sesini kullanarak melodisini anlar ve diğer şarkılar ile karşılaştırır. Daha sonrasında da benzer melodilere sahip şarkıları bularak kullanıcıya öneri sunar.

  1. Basit Tavsiyeler

Bu tavsiye sistemi filmlere verilen puanlara ve oy veren sayısına göre en iyi filmleri listeleyecektir. Bunu yaparken ağırlıklı derecelendirme kullanılacaktır.

Ağırlıklı derecelendirme formülü;

Kaynak
  • v: Filmin oy sayısıdır.
  • m: Çizelgede listelenmesi gereken oylardır.
  • R: Filmin ortama puanıdır.
  • C: Verinin tamamındaki ortalama oydur.

İlk önce kullanacağımız kütüphaneleri import ediyoruz.

Kullanacağımız verileri yüklüyoruz.

Veriler üzerinde değişikliğe gidilmeden önce tüm oyların ortalamasını alıyoruz.

Bir filmin ortalama derecesinin 5'lik bir ölçekte 3.52 civarında olduğunu görüyoruz.

Öncelikle rating verisini film Id’lerine göre kaç tane kullanıcı tarafından kaç oy alındığına dair grupluyoruz. Daha sonradan da index üzerinde düzenlemeler yapıyoruz.

Şimdi de rating verisini film Id’lerine göre ortalamalarını veren yeni bir veri ortaya koyuyoruz. Daha sonradan bu veri üzerinde de index düzenlemeleri yapıyoruz.

Şimdi ise elde ettiğimiz iki veriyi merge modülü ile movieId değişkenine göre birleştiriyoruz.

90. persentilde bir filmin aldığı oy sayısını, m olarak hesaplıyoruz.

Oylama sayısına göre uygun olan filmler;

Bu listede 2675 tane film yer almaktadır. Her nitelikli film için metrik hesaplanması gerekiyor. Bunun için weighted_rating() tanımlayacak ve score bu işlemi nitelikli filmlere uygulayacak.

Her filmin ağırlıklı derecelendirmesini hesaplayan işlev;

Yeni bir özellik score tanımlayıp değerini weightted_rating() ile hesaplıyoruz. Ardından veriyi bu özelliğe göre sıralıyoruz. En iyi film sıralamasını ortaya çıkarıyoruz.

2. İçeriğe Dayalı Tavsiyeler

Bu kısımda da filmlerin türlerine göre benzer filmleri veren bir tavsiye sistemi uygulayacağız.

Terim Frekansı - Ters Belge Frekansı (TF-IDF) vektörlerini hesaplayacağız.

The” ve “a” gibi verileri kaldıralım. Ardından TF-IDF matrisini oluşturalım.

26744 film için 23 farklı tür olduğunu görüyoruz.

Bu matris ile benzerlik skorunu kosinüs benzerliğini kullanarak hesaplayacağız. Kosinüs skoru büyüklükten bağımsızdır. Hesaplanması bir tık daha kolaydır.

Kaynak

Kosinüs benzerlik matrisini hesaplıyoruz.

Film başlığını giriş olarak alan ve en çok benzeyen 10 filmi veren bir işlev çıkaracağız.

Öneri fonksiyonunu tanımlayacağız. İzlenecek adımlar;

  • Başlıkla eşleşen film dizini alınır.
  • Bu filmle tüm filmlerin benzerlik puanları alınır.
  • Filmler benzerlik puanına göre sıralanır.
  • En çok benzeyen 10 filmin puanları alınır.
  • Film dizinleri edinilir.
  • En çok benzeyen 10 film listelenir.

Toy Story (1995) filmine en çok benzeyen 10 filme bakalım;

Innocence (2014) filmine en çok benzeyen 10 filme bakalım;

--

--