Close Menu
    Trending
    • 🚗 Predicting Car Purchase Amounts with Neural Networks in Keras (with Code & Dataset) | by Smruti Ranjan Nayak | Jul, 2025
    • Futurwise: Unlock 25% Off Futurwise Today
    • 3D Printer Breaks Kickstarter Record, Raises Over $46M
    • People are using AI to ‘sit’ with them while they trip on psychedelics
    • Reinforcement Learning in the Age of Modern AI | by @pramodchandrayan | Jul, 2025
    • How This Man Grew His Beverage Side Hustle From $1k a Month to 7 Figures
    • Finding the right tool for the job: Visual Search for 1 Million+ Products | by Elliot Ford | Kingfisher-Technology | Jul, 2025
    • How Smart Entrepreneurs Turn Mid-Year Tax Reviews Into Long-Term Financial Wins
    AIBS News
    • Home
    • Artificial Intelligence
    • Machine Learning
    • AI Technology
    • Data Science
    • More
      • Technology
      • Business
    AIBS News
    Home»Machine Learning»Netflix and Content-Based Filtering: A Perfect Match for Movie Recommendations | by Andi Engku Putribuana | Feb, 2025
    Machine Learning

    Netflix and Content-Based Filtering: A Perfect Match for Movie Recommendations | by Andi Engku Putribuana | Feb, 2025

    Team_AIBS NewsBy Team_AIBS NewsFebruary 14, 2025No Comments5 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Telegram Email
    Share
    Facebook Twitter LinkedIn Pinterest Email


    Gambaran Struktur Information

    Information yang digunakan adalah dataset yang berasal dari Kaggle — Netflix Popoular Movies Dataset yang terdiri dari 9 kolom, diantaranya:

    • title = Judul dari movie
    • yr= Tahun rilis movie
    • certificates = Sertifikat score usia, seperti “PG-13”, “R”, dll..
    • period = Durasi movie dalam format waktu, misalnya “2h 30m”
    • style = Style movie, misalnya “Motion”, “Comedy”, dll..
    • score = Score movie berdasarkan skor pengguna
    • description = Deskripsi singkat tentang cerita movie
    • stars = Nama-nama yang membintangi movie
    • votes = Jumlah suara (votes) yang diberikan oleh pengguna untuk movie tersebut

    Import Library

    Import library sesuai dengan kebutuhan. Library yang aku pake disini adalah sebagai berikut: os buat kerja dengan file dan sistem operasi, re buat pencarian pola di teks, numpy buat komputasi ilmiah, pandas buat manipulasi dan analisis information, seaborn dan matplotlib.pyplot buat visualisasi information, tensorflow buat machine studying, TfidfVectorizer buat konversi teks ke matriks TF-IDF, dan cosine_similarity buat hitung kesamaan antara vektor.

    import os
    import re
    import numpy as np
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    import tensorflow as tf
    from sklearn.feature_extraction.textual content import TfidfVectorizer
    from sklearn.metrics.pairwise import cosine_similarity

    Load Dataset

    Selanjutnya, kita akan load information yang diambil dari lewat kaggle.com.

    #!/bin/bash
    !kaggle datasets obtain narayan63/netflix-popular-movies-dataset

    import zipfile

    zip_path = '/content material/netflix-popular-movies-dataset.zip'
    zip_ref = zipfile.ZipFile(zip_path, 'r')
    zip_ref.extractall('netflix/')
    zip_ref.shut()

    netflix = '/content material/netflix/n_movies.csv'

    Examine Dataset

    df.isnull().sum()
    melihat lacking worth

    Karena terdapat banyak lacking worth pada information yaitu pada kolom yr sebanyak 527, kolom certificates sebanyak 3453, kolom period sebanyak 2036, kolom style = 73, kolom score 1173 dan kolom votes= 1173, maka dari itu kita akan membersihkannya.


    df.dropna(inplace=True)

    Sekarang, information yang kita miliki berjumlah 5754 baris.

    Cek Nilai Unik Setiap Kolom

    1. Kolom ‘title’
    df.title.distinctive()

    2. Kolom ‘yr’

    df.yr.distinctive()

    Pada kolom yr, terlihat information tanggal yang bervariasi dengan beberapa pola diantarany :

    • (YYYY): Hanya tahun.
    • (YYYY– ): Tahun mulai hingga sekarang.
    • (YYYY–YYYY): Tahun mulai hingga tahun berakhir.
    • (II) (YYYY): Tahun dengan penanda tambahan (II).
    • (YYYY–2022): Tahun mulai hingga 2022

    maka dari itu, kita akan melakukan perbaikan.

    def clean_year(year_str):
    """Membersihkan dan mengekstrak tahun dari string."""
    # Menghapus tanda kurung dan spasi ekstra
    year_str = year_str.strip('()').strip()

    # Pola untuk mencocokkan tahun
    match = re.search(r'(d{4})', year_str)

    if match:
    return match.group(1) # Mengembalikan tahun jika ditemukan
    else:
    return None # Mengembalikan None jika tidak ditemukan

    # Terapkan fungsi clean_year ke kolom 'yr'
    df['year'] = df['year'].apply(clean_year)

    # Ubah kolom 'yr' menjadi tipe information datetime
    df['year'] = pd.to_datetime(df['year'], format='%Y', errors='coerce')

    Berikut hasilnya:

    3. kolom ‘certificates’

    df.certificates.distinctive()

    4. kolom ‘period’

    df.period.distinctive()

    Pada kolom durasi, terlihat pola yang tidak rapi dan tipe datanya masih string, maka dari itu kita akan lakukan perbaikan.

    def clean_duration(duration_str):
    """Membersihkan dan mengekstrak durasi dalam menit dari string."""
    match = re.search(r'(d+)s*min', duration_str)
    if match:
    return int(match.group(1))
    else:
    return None # Mengembalikan None jika tidak ditemukan

    # Terapkan fungsi clean_duration ke kolom 'period'
    df['duration'] = df['duration'].apply(clean_duration)

    berikut outputnya:

    5. kolom ‘style’

    df.style.value_counts()

    6. kolom ‘score’

    df.score.distinctive()

    7. kolom ‘description’

    df.description.distinctive()

    8. Kolom ‘stars’

    df.stars.distinctive()

    9. Kolom ‘votes’

    df.votes.distinctive()

    Eksplor Information Kategorikal Fitur

    objects = ['title','certificate', 'genre', 'description', 'stars']

    category_df = df[objects]
    category_df.describe()

    Eksplor Information Numerikal Fitur

    #For Numerical Column
    numerical = [col for col in df.columns if df[col].dtype in ['int', 'float64']]

    for col in numerical:
    print(f'nDescriptive statistics for {col}:')
    print(f'Imply: {df[col].imply()}')
    print(f'Median: {df[col].median()}')
    print(f'Mode: {df[col].mode().iloc[0]}')
    print(f'Commonplace Deviation: {df[col].std()}')
    print(f'Min: {df[col].min()}')
    print(f'Max: {df[col].max()}')
    print(f'twenty fifth Percentile: {df[col].quantile(0.25)}')
    print(f'fiftieth Percentile: {df[col].quantile(0.50)}')
    print(f'seventy fifth Percentile: {df[col].quantile(0.75)}')

    Information Preparation

    Karena kita akan membuat sistem rekomendasi berdasarkan style dan score movie, kita akan melihat kembali nilau unik pada kolom goal.

    1. Melihat nilai unik pada kolom ‘style’
    df['genre'] = df['genre'].apply(lambda x: ', '.be a part of(x) if isinstance(x, checklist) else x)

    unique_genres = df['genre'].distinctive()
    print(unique_genres)

    2. Konversi Information dengan tolist()

    Selanjutnya, kita kan mengonversi information yang akan menjadi fitur utama, yaitu kolom style, title, dan kolom score.

    # Convert a Pandas Sequence to a listing:
    title_list = df['title'].tolist()

    # Convert a particular column with a number of values (like 'style') to a listing of lists:
    genre_lists = df['genre'].apply(lambda x: x.break up(', ') if isinstance(x, str) else x).tolist()

    stars_list = df['rating'].tolist()

    array = np.array([1, 2, 3])
    list_from_array = array.tolist()

    print(len(title_list))
    print(len(genre_lists))
    print(len(stars_list))

    3. Membuat Dictionary Pada Information

    movie_dict = {}
    for i in vary(len(title_list)):
    movie_id = i
    movie_dict[movie_id] = {
    'title': title_list[i],
    'style': genre_lists[i],
    'score': stars_list[i]
    }

    movie_dict

    Tahap berikutnya, kita akan membuat dataframe baru berdasarkan dictionary information:

    movie_df = pd.DataFrame.from_dict(movie_dict, orient='index')
    movie_df.head()

    Melakukan TF-IDF

    TF-IDF (Time period Frequency-Inverse Doc Frequency) adalah tehnik untuk mengukut seberapa sering sebuah kata muncul pada information.

    • TF-IDF Vectorization: untuk mengubah teks pada kolom ‘style’ menjadi representatik numerik berbasis bobot. Pada tahap ini, aku menggabungkan teks pada kolom ‘style’ menjadi string untuk setiap movie dan menginisialisasi TfidfVectorizer dari sklearnkemudian melakukan transformasi teks style menjadi matriks TF-IDF.
    from sklearn.feature_extraction.textual content import TfidfVectorizer

    # Inisialisasi TfidfVectorizer
    tf = TfidfVectorizer()

    # Ubah checklist style menjadi string
    information['genre_str'] = information['genre'].apply(lambda x: ' '.be a part of(x))

    # Melakukan perhitungan idf pada information style yang sudah diubah menjadi string
    tf.match(information['genre_str'])

    # Mapping array dari fitur index integer ke fitur nama
    tf.get_feature_names_out()

    pd.DataFrame(
    tfidf_matrix.todense(),
    columns=tf.get_feature_names_out(),
    index=information.title
    ).pattern(5, axis=1).pattern(10, axis=0)

    Cosine Similarity

    Cosine similarity adalah tahapan untuk mengidentifikasi dokumen yang memiliki pola serupa dalam analisis teks menggunakan library sklearn.

    Untuk itu, kita akan menghitung cosine similarity pada matriks TF-IDF untuk sistem content-based filtering ini dengan tujuan: untuk menemukan merchandise yang mirip berdasarkan konten.

    from sklearn.metrics.pairwise import cosine_similarity

    # Menghitung cosine similarity pada matrix tf-idf
    cosine_sim = cosine_similarity(tfidf_matrix)
    cosine_sim

    Konfersi ke dataframe baru untuk proses pencarian

    Tahap berikutnya, mengatur dan memvisualisasikan information similarity untuk analisis lebih lanjut dalam sistem content-based filtering.

    cosine_sim_df = pd.DataFrame(cosine_sim, index=information['title'], columns=information['title'])
    print('Form:', cosine_sim_df.form)

    # Melihat similarity matrix pada setiap judul
    cosine_sim_df.pattern(10, axis=1).pattern(3, axis=0)

    Mannequin Growth dengan Content material-Based mostly Filtering

    Tahapan yang dilakukan:

    • Cosine Similarity: Menghitung skor kesamaan antar movie menggunakan Cosine Similarity pada matriks TF-IDF dan melihat nilai kesamaan yang berkisar dari 0 (tidak mirip) hingga 1 (identik).
    • Rekomendasi Prime-N: Berdasarkan skor kesamaan, sistem menghasilkan daftar movie yang paling mirip dengan movie pilihan pengguna.
    def movie_recommendations(movie_title, similarity_data=cosine_sim_df, objects=information[['title', 'genre', 'rating']], okay=10):
    # Mengambil information dengan menggunakan argpartition untuk melakukan partisi secara tidak lengkap
    index = similarity_data.loc[:,movie_title].to_numpy().argpartition(
    vary(-1, -k, -1))

    # Mengambil information dengan similarity terbesar dari index yang sudah dipartisi
    closest = similarity_data.columns[index[-1:-(k+2):-1]]

    # Drop movie_title agar judul yang dicari tidak direkomendasikan
    closest = closest.drop(movie_title, errors='ignore')

    return pd.DataFrame(closest).merge(objects).head(okay)

    Take a look at Prediksi

    Disini saya akan mencoba melakukan prediksi hasil rekomendasi yang telah dibuat, dengan memilih judul “Legally Excessive”.

    movie_recommendations("Legally Excessive", okay=10)

    Dari hasil output diatas, mannequin menampilkan 10 rekomendasi movie yang paling mirip berdasarkan cosine similiarity yang telah dibuat.

    Dapat dilihat juga, bahwa mannequin memberikan beberapa movie ber-genre “Dokumentary” dengan score yang bervariasi.

    Perception

    Sistem yang dibuat dengan mannequin cosine similarity terbukti sukses merekomendasikan movie yang bergenre sama, dan menunjukkan relevansi tinggi untuk pencarian berbasis ‘style’.

    Mannequin ini nggak cuma mudah diterapkan, tapi juga komputasinya efisien, jadi cocok untuk platform dengan skala besar kayak Netflix.



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleMassachusetts Launches Flagship AI Models Innovation Challenge, $2M in Funding
    Next Article Learnings from a Machine Learning Engineer — Part 1: The Data
    Team_AIBS News
    • Website

    Related Posts

    Machine Learning

    🚗 Predicting Car Purchase Amounts with Neural Networks in Keras (with Code & Dataset) | by Smruti Ranjan Nayak | Jul, 2025

    July 1, 2025
    Machine Learning

    Reinforcement Learning in the Age of Modern AI | by @pramodchandrayan | Jul, 2025

    July 1, 2025
    Machine Learning

    Finding the right tool for the job: Visual Search for 1 Million+ Products | by Elliot Ford | Kingfisher-Technology | Jul, 2025

    July 1, 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Top Posts

    🚗 Predicting Car Purchase Amounts with Neural Networks in Keras (with Code & Dataset) | by Smruti Ranjan Nayak | Jul, 2025

    July 1, 2025

    I Tried Buying a Car Through Amazon: Here Are the Pros, Cons

    December 10, 2024

    Amazon and eBay to pay ‘fair share’ for e-waste recycling

    December 10, 2024

    Artificial Intelligence Concerns & Predictions For 2025

    December 10, 2024

    Barbara Corcoran: Entrepreneurs Must ‘Embrace Change’

    December 10, 2024
    Categories
    • AI Technology
    • Artificial Intelligence
    • Business
    • Data Science
    • Machine Learning
    • Technology
    Most Popular

    Nissan Is Laying Off 20,000 Workers In the Next Two Years

    May 14, 2025

    Solid-State Batteries Could Help Microbots Take Off

    March 9, 2025

    This AI is the Key to Unlocking Explosive Sales Growth in 2025

    December 21, 2024
    Our Picks

    🚗 Predicting Car Purchase Amounts with Neural Networks in Keras (with Code & Dataset) | by Smruti Ranjan Nayak | Jul, 2025

    July 1, 2025

    Futurwise: Unlock 25% Off Futurwise Today

    July 1, 2025

    3D Printer Breaks Kickstarter Record, Raises Over $46M

    July 1, 2025
    Categories
    • AI Technology
    • Artificial Intelligence
    • Business
    • Data Science
    • Machine Learning
    • Technology
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us
    Copyright © 2024 Aibsnews.comAll Rights Reserved.

    Type above and press Enter to search. Press Esc to cancel.