Python ile Film Öneri Sistemi Oluşturma

Film Öneri Sisteminin Temelleri

Film öneri sistemleri, kullanıcıların ilgi alanlarına ve geçmişteki izleme alışkanlıklarına dayanarak yeni filmler önermeyi amaçlayan uygulamalardır. Bu sistemler, hem kullanıcı deneyimini iyileştirmek hem de izleme sürecini daha eğlenceli hale getirmek için oldukça etkilidir. Recent years have seen the extensive use of such systems in platforms like Netflix and IMDb, helping millions of users discover films they may enjoy.

Bir film öneri sistemi oluşturmak için öncelikle hedef kitlenizi belirlemeniz ve öneri sisteminizin temel özelliklerini netleştirmeniz önemlidir. Örneğin, kullanıcıların izlemek istedikleri film türlerini, daha önce izledikleri filmleri ve bu filmlere verdikleri derecelendirmeleri dikkate alarak bir öneri algoritması geliştirebilirsiniz. Bunun için veri tabanında kullanıcı ve film bilgilerini saklamak için uygun bir yapı oluşturmalısınız.

Film öneri sistemleri genellikle içerik tabanlı veya işbirlikçi filtreleme teknikleri kullanır. İçerik tabanlı sistemler, filmlerin özelliklerine (örneğin, tür, aktör, yönetmen) dayalı olarak önerilerde bulunurken; işbirlikçi filtreleme, diğer kullanıcıların geçmiş davranışlarına dayalı öneriler sunarak çalışır. Bu makalede, basit bir öneri sistemi oluşturmak için Python’un gücünden nasıl yararlanabileceğinizi öğreneceksiniz.

Gerekli Kütüphanelerin Kurulumu

Python ile bir film öneri sistemi geliştirmek için öncelikle bazı kütüphaneleri kurmamız gerekiyor. Bu kütüphaneler, verileri işlemek, analiz etmek ve makine öğrenimi tekniklerini uygulamak için gerekli olacak. İlk adım olarak, pandas, NumPy ve scikit-learn kütüphanelerini yüklemeliyiz. Bu kütüphaneleri projenize dahil etmek için aşağıdaki komutu terminalinize yazabilirsiniz:

pip install pandas numpy scikit-learn

Pandas, verileri kolayca işlemek ve analiz etmek için kullanılırken, NumPy, sayısal işlemler için oldukça etkilidir. Scikit-learn ise çeşitli makine öğrenimi algoritmalarını kullanarak öneri sistemi oluşturmak için oldukça faydalıdır. Yüklemeler tamamlandıktan sonra, verilerimizi okumak ve hazırlamak için gerekli Python kodlarını yazmaya başlayabiliriz.

Örneğin, bir veri kümesi oluşturarak filmler ve kullanıcıların verdikleri puanlar hakkında bilgiler edinebiliriz. İşte basit bir film veri kümesi için bir örnek:

import pandas as pd

film_veri = { 
    'film_id': [1, 2, 3, 4], 
    'film_ad': ['Karanlık Şehir', 'Aşk ve Savaş', 'Büyüler', 'Zaman Yolcusunun Güncesi'], 
    'genre': ['Suç', 'Romantik', 'Fantastik', 'Bilim Kurgu']
}

film_df = pd.DataFrame(film_veri)

Veri Kümesini İnceleme ve Temizleme

Veri kümesini okuduktan ve yapılandırdıktan sonra, verimizin kalitesini artırmak amacıyla temizleme işlemleri gerçekleştirmeliyiz. Kullanıcıdan aldığımız verilerde eksik veya hatalı girişler olabilir. Bu nedenle, veriyi inceleyip temizlemek önemlidir. İşte basit bir veri incelemesi yapmanın yollarından biri:

print(film_df.head())

Elde ettiğimiz veri çerçevesinin ilk birkaç satırını görüntülemek, verimizi anlamamıza yardımcı olacaktır. Eğer veri eksikse veya gereksiz sütunlar bulunuyorsa, bunları düzenlememiz gerekebilir. Temizleme işlemleri sonrasında verimizi daha sağlıklı bir hale getirmiş olacağız.

Bunun ardından, kullanıcıların puanladığı filmleri temsil eden bir kullanıcı veri çerçevesi oluşturmalıyız. Bu kullanıcı verisini hem kullanıcı kimliklerini hem de film kimliklerini içerecek şekilde yapılandırmalıyız. Aşağıda basit bir kullanıcı veri çerçevesi örneği bulunmaktadır:

kullanici_veri = { 
    'kullanici_id': [1, 1, 2, 2, 3], 
    'film_id': [1, 2, 1, 3, 4], 
    'puan': [5, 4, 4, 5, 2]
}

kullanici_df = pd.DataFrame(kullanici_veri)

Öneri Algoritmasının Uygulanması

Veri setimizi oluşturduktan ve temizledikten sonra, artık öneri algoritmamızı geliştirmeye başlayabiliriz. Bu aşamada, işbirlikçi filtreleme yöntemini kullanarak, kullanıcıların vermiş olduğu puanlardan hareketle benzer zevklere sahip kullanıcıların önerilerini alacağız. İşbirlikçi filtreleme, kullanıcılar arasındaki benzerlikleri inceleyerek öneri sağlar, bu sayede aktarılan bilgi kullanıcı bazında özelleştirilir.

Öneri algoritmamız için, kullanıcılar arasındaki puan benzerliğini ölçmek için bir matris oluşturmalıyız. Bunun için, bir ‘pivot’ tablosu oluşturarak, kullanıcıların puanladığı filmleri ve bu filmlere verdikleri puanları düzenlemeliyiz:

pivot_df = kullanici_df.pivot(index='kullanici_id', columns='film_id', values='puan').fillna(0)

Bu pivot tablosu ile her kullanıcının hangi filme ne kadar puan verdiği bilgisine sahip olacağız. Bu yapı üzerinde benzerlik ölçecek şekilde bir algoritma geliştirebiliriz. Örneğin, Cosine benzerliği kullanarak kullanıcılar arasındaki benzerlikleri hesaplamak için scikit-learn kütüphanesinden yararlanabiliriz:

from sklearn.metrics.pairwise import cosine_similarity
benzerlik_matrisi = cosine_similarity(pivot_df)
benzerlik_df = pd.DataFrame(benzerlik_matrisi, index=pivot_df.index, columns=pivot_df.index)

Önerilerin Yapılması

Artık kullanıcılar arasındaki benzerlikleri hesapladıktan sonra, diğer kullanıcıların yüksek puan verdiği filmleri önermek için bir işlev geliştirebiliriz. Kullanıcının geçmişte puanladığı filmleri inceleyerek hangi filmlere daha fazla ilgi gösterebileceğini belirlemek için aşağıdaki gibi bir fonksiyon yazabiliriz:

def film_oner(kullanici_id):
    benzer_kullanicilar = benzerlik_df[kullanici_id].sort_values(ascending=False)[1:]
    oneriler = pd.Series()

    for benzer_kullanici in benzer_kullanicilar.index:
        benzer_kullanici_filmleri = pivot_df.loc[benzer_kullanici] > 0
        for film_id in benzer_kullanici_filmleri[benzer_kullanici_filmleri].index:
            if film_id not in pivot_df.loc[kullanici_id][pivot_df.loc[kullanici_id] > 0].index:
                oneriler[film_id] = benzer_kullanici_filmleri[film_id] * benzerlik_kullanicilari[benzer_kullanici]

    return oneriler.nlargest(5)

Bu fonksiyon, kullanıcıların benzerlik skorlarını kullanarak önerilerde bulunacak ve daha önce izlenmemiş filmleri alarak sonuca ulaşacaktır. Fonksiyonu çalıştırarak, kullanıcının hangi filmleri izlemesi gerektiği hakkında öneriler alabiliriz.

Sonuç ve Geliştirmeye Açık Alanlar

Temel bir film öneri sistemi oluşturmuş olduk. Bu model, kullanıcılar arasındaki benzerlikleri kullanarak yeni film önerileri sunmayı sağlıyor. Ancak, bu öneri sistemini daha da zenginleştirmek için ileri düzey makine öğrenimi tekniklerini kullanabilirsiniz. Örneğin, içerik tabanlı filtreleme yöntemini de ekleyerek daha bireysel öneriler yaratabilirsiniz.

Ayrıca, kullanıcı etkileşimlerini daha iyi analiz etmek için ek veriler toplamak, kullanıcıların belirli stillere, jenerlere veya temalara olan ilgilerini tespit etmek de önerilerin kalitesini artıracaktır. Gelişmiş öneri sistemleri, derin öğrenme teknikleri, görüntü işleme ve doğal dil işleme yöntemlerini kullanarak daha karmaşık veri kümeleri ile çalışabilmektedir.

Sonuç olarak, Python ile film öneri sistemleri geliştirerek hem kullanıcı deneyimini artırabilir hem de programlama becerilerinizi geliştirebilirsiniz. Bu tür projeler, gerçek dünya uygulamaları için büyük bir temel oluşturur ve Python ekosistemindeki gücünüzü göstermenize yardımcı olur.

Scroll to Top