Press ESC to close

Python ile Film Öneri Sistemi

Keşfet, İzle, Keyfini Çıkar: Kişiselleştirilmiş Film Önerileri Streamlit ile Parmaklarının Ucunda!

Günümüzün dijital çağında, filmler de dahil olmak üzere ezici miktarda içerikle çevriliyiz. Netflix, Hulu ve Amazon Prime gibi yayın platformlarında bulunan sayısız seçenekle, bir sonraki adımda ne izleyeceğinize karar vermek zor olabilir. Geçenlerde arkadaşımla film izlemekten çok film aramaya harcadığımız vaktin uzun olduğunu düşündüm ve Python ile Film öneri sistemi geliştirmeye karar verdim. Hem portföyüme ekleyebileceğim hem de kullanırken keyif aldığım bu projeyi bir blog yazısında sizinle paylaşmak istedim. Vakit kaybetmeden yazımıza geçelim. 

Film Öneri Sistemlerini Tanımlamak

Film tavsiye sistemleri, bir kullanıcının film tercihlerini tahmin etmeyi amaçlayan bir tür bilgi filtreleme sistemidir. Bu sistemler, kişiselleştirilmiş film önerileri oluşturmak için kullanıcı davranışı, film meta verileri ve geçmiş derecelendirmeler gibi çeşitli veri noktalarını analiz eder. Bu sistemler, gelişmiş algoritmalar ve makine öğrenimi tekniklerinden yararlanarak kullanıcıların kendi zevklerine ve ilgi alanlarına uygun filmleri keşfetmelerine yardımcı olur.

Film Öneri Sistemi Türleri

Üç ana film öneri sistemi türü vardır:

1. İşbirlikçi Filtreleme: Benzer Kullanıcıları ve Öğeleri Bulma (Collabrative – Based Filtering)

İşbirlikçi filtreleme, geçmişte benzer tercihler göstermiş olan kullanıcıların gelecekte de benzer tercihlere sahip olma ihtimalinin yüksek olduğu fikrine dayanır. Önerilerde bulunmak için kullanıcı derecelendirmeleri, incelemeler veya satın alma geçmişi gibi kullanıcı-öğe etkileşim verilerine dayanır.

2. İçerik Tabanlı Filtreleme: Kullanıcı Tercihlerini Öğe Özellikleriyle Eşleştirme (Conten – Based Filtering)

Öte yandan içerik tabanlı filtreleme, önerilerde bulunmak için öğelerin özelliklerine ve kullanıcı profillerine dayanır. Öğelerin içeriğini veya özelliklerini analiz eder ve bunları kullanıcı tercihleriyle eşleştirir. İçerik tabanlı filtrelemedeki temel adımlar şunları içerir:

a. Öğe Profili Oluşturma

Her öğe, anahtar kelimeler, türler veya meta veriler gibi bir dizi özellik veya öznitelik kullanılarak tanımlanır. Bu özellikler, her bir öğe için bir profil oluşturmak ve benzersiz özelliklerini yakalamak için kullanılır.

b. Kullanıcı Profili Oluşturma

Sistem, kullanıcının geçmiş etkileşimlerine ve tercihlerine dayalı bir kullanıcı profili oluşturur. Bu profil, kullanıcının ilgi alanlarını temsil eden ağırlıklı özellikler içerir. Kullanıcının tercihlerini anlayarak, içerik tabanlı filtreleme kullanıcının zevklerine uygun öğeler önerebilir.

c. Öneri Oluşturma

İçerik tabanlı filtreleme, kullanıcının ilgi gösterdiği özelliklere benzer özelliklere sahip öğeleri bularak kullanıcının profiliyle eşleşen öğeleri önerir. Bu yaklaşım, öğe profillerinden ve kullanıcı tercihlerinden yararlanarak yeni kullanıcılar (soğuk başlangıç) ve öğeler için bile kişiselleştirilmiş öneriler sağlayabilir.

3. Hibrit Öneri Sistemleri: Her İki Dünyanın En İyilerini Birleştirmek

Uygulamada, hibrit tavsiye sistemleri genellikle her bir yaklaşımın sınırlamalarının üstesinden gelmek için işbirlikçi filtreleme ve içerik tabanlı filtrelemeyi birleştirir. Hibrit sistemler, her iki yöntemin güçlü yönlerinden yararlanarak daha doğru ve çeşitli öneriler sunmayı, daha geniş bir kullanıcı tercihi yelpazesine hitap etmeyi ve veri seyrekliği ve soğuk başlangıç sorunlarının zorluklarını azaltmayı amaçlamaktadır.

Python ile Film Öneri Sistemi

Python ile Film Öneri Sistemi Oluşturmak

Ben bu projede Content-based yani içerik tabanlı filtreleme kullanarak bir öneri sistemi geliştirmeye çalıştım. Veriseti olarak Kaggle platformunda bulunan ve projeme uygun olacağını düşündüğüm popüler TMDB 5000 Movie Verisetini kullandım.

Veriseti özellikleri

TMDB 5000 Veriseti isminden de anlaşılacağı gibi 5000 film içeren ve TMDb veritabanından hazırlanmış film verilerini içeriyor:

Veriseti içerisinde 2 farklı csv dosyası bulunuyor ve ayrı ayrı hazırlanmış bu csv dosyalarından birisinde filmlerin ismi, id’si, cast ekibi ve yönetim ekibi var. Diğer csv dosyasında ise bütçe, tür, film sayfası, id, anahtar kelime, orijinal dil, orijinal başlık, film özeti, popülerlik ve yapım şirketi yer alıyor.

İlk olarak iki verisetini de film isimlerine göre birleştiriyor,  ardından öneri sistemimiz için gerekli olan sütunları alıp geriye kalan sütunları kaldırarak verisetini model için hazırlıyoruz.

movies = movies[['movie_id','title','overview','genres','keywords','cast','crew']]

Bizim için gerekli sütunlar bunlar çünkü içerik tabanlı filtreleme uygulayacağımız bu modelde filmin başlığı, genel bakışı, türleri, ve anahtar kelime filmin içeriğini oldukça iyi bir şekilde tanımlar ve önerileri yüksek doğruluklu hale getirir. Cast ve yönetmen de yine bazı kişilerin sevdiği oyuncular ve yönetmenin filmlerine dayalı bir önerme alabilmeleri için kullanılır.

Veri ön işleme:

  1. İlk olarak verisetindeki eksik değerler ile ilgileniyoruz ve eksik değerleri kaldırarak model doğruluğumuz için ilk adımı tamamlıyoruz.
  2. Daha sonra verisetinde json formatında gibi yer alan cast, genres, crew ve Keywords kısımlarını düzenliyor ve boşluklarını kaldırıyoruz.
  3. Daha sonra tüm bu özellikleri tags isimli bir sütunda bir araya getiriyoruz.
  4. 3 sütunlu veriseitmizin görüntüsü artık bu şekilde.

Verisetimizi model için hazırladığımıza göre artık modelimizi kurabiliriz. Hadi oluşturduğum modele yakından bakalım. 

TF-IDF ve Benzerlik Hesaplama

TF-IDF Nedir?

(Term Frequency-Inverse Document Frequency), bir belgedeki terimlerin önemini ölçmek için kullanılan bir istatistiksel yöntemdir. Bu yöntem, bir belgede sıkça geçen terimlerin önemli olduğunu ve nadir terimlerin daha belirleyici olduğunu kabul eder. TF-IDF, bir belge içindeki bir terimin belge içindeki sıklığını ve belgedeki diğer terimlere göre o terimin diğer belgelerdeki sıklığını dikkate alır.

Python ile Film Öneri Sistemi

Kosinüs Benzerliği Nedir?

Kosinüs benzerliği, iki vektör arasındaki açıyı ölçerek benzerliklerini belirler. İki vektör arasındaki açı ne kadar küçükse, benzerlik o kadar yüksektir. Kosinüs benzerliği, vektörler arasındaki benzerliği ölçmek için sıklıkla kullanılır ve genellikle metin belgeleri gibi düşük boyutlu öznitelik uzaylarında etkilidir.

Python ile Film Öneri Sistemi

TF-IDF ve Kosinüs Benzerliği Film Öneri Sistemlerinde Nasıl Kullanılır?

Film öneri sistemlerinde, TF-IDF ve kosinüs benzerliği birlikte kullanılarak film önerileri üretilir. İlk olarak, film veri setindeki metin tabanlı özellikler (örneğin, açıklamalar, türler, anahtar kelimeler, oyuncular, yönetmenler) TF-IDF vektörlerine dönüştürülür. Bu vektörler, filmlerin içeriğini temsil eder. Daha sonra, kullanıcının seçtiği bir film başlığına dayanarak, bu film ile diğer filmler arasındaki benzerliği hesaplamak için kosinüs benzerliği kullanılır. En yüksek benzerlik skorlarına sahip olan filmler, kullanıcıya önerilir.

Modelimizi kurduktan sonra çıktıları bir kontrol edelim.

# Önerileri alalım
film_basligi = "Interstellar"  # Kullanıcı tarafından seçilen bir film başlığı
print("Film Önerileri:")
print(get_recommendations(film_basligi))

Öneri sistemimiz gördüğünüz gibi doğru sonuç veriyor. Ben tatmin oldum ardından bu sistemi bir arayüze dökmek için streamlit kullandım.

Streamlit, Python ile interaktif ve etkileşimli web uygulamaları geliştirmek için kullanılan güçlü bir araçtır. Biz de Streamlit’i kullanarak film öneri sistemi için bir arayüz oluşturduk.

Streamlit’in basit ve kullanıcı dostu arayüz oluşturma yetenekleri sayesinde, film öneri sistemi arayüzümüzü hızlı bir şekilde oluşturduk. Arayüz, kullanıcıların film önerilerini görsel olarak keşfetmelerini ve istedikleri filmi seçmelerini sağlayarak kullanıcı deneyimini arttırdığını düşünüyorum.

İlerleyen zamanlarda daha büyük verisetleri ile daha kapsamlı bir öneri sistemi oluşturmayı düşünüyorum. O zamana kadar bu projeyi yaparken öğrendiklerimi sizinle paylaşmak istedim. Daha fazla veri bilimi ve yazılım içeriği için bizi takip etmeyi unutmayın. Sağlıklı günler…

Projenin dosyalarına aşağıdaki kartlardan ulaşabilirsiniz. 

Forty Two Veri Bilimi Serisi

Fatih İlhan

Merhaba, ben Fatih İlhan. Elektrik-Elektronik Mühendisliği mezunuyum ve dijital dünyaya olan tutkum sayesinde SEO uzmanı, WordPress geliştiricisi ve içerik üreticisi olarak farklı projelerde yer alıyorum. Blogum Forty Two üzerinden teknoloji, yapay zeka, yenilenebilir enerji ve bilim gibi çeşitli konularda özgün içerikler paylaşıyorum.WordPress konusunda uzmanlığım, sitelerin sadece estetik değil, aynı zamanda kullanıcı dostu ve SEO uyumlu olmasını sağlıyor.Aynı zamanda veri bilimi ve yapay zeka alanlarında çalışarak projelere yenilikçi çözümler kazandırmayı seviyorum. Bilgi birikimimi paylaşmaktan keyif alıyorum ve dijital dünyayı daha anlamlı hale getirmek için sürekli öğrenmeye devam ediyorum.

Bir yanıt yazın

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

Kapatmak için ESC ye basın