Doporučení podobných uživatelů a filmů

 

# data = {user_id: [rating filmu]}
# 0 = neviděl / nehodnoceno
# 1–5 = hodnocení filmu
data = {
    "user1": [0, 5, 0, 4, 5],
    "user2": [5, 0, 4, 4, 5],
    "user3": [0, 0, 0, 5, 4],
    "user4": [0, 0, 3, 5, 5],
    "user5": [5, 5, 5, 0, 0],
}


def find_similar_user(user_id: str, data: dict[str, list[int]]) -> str:
    """
    Najděte uživatele s nejpodobnějším vkusem.
    Popište použitou metriku podobnosti.
    """

def recommend_movie(user_id: str, data: dict[str, list[int]]) -> int | None:
    """
    Doporuč uživateli film, který ještě neviděl.
    Uživatelé jsou si podobní, pokud podobně hodnotili stejné filmy.
    Funkce vrací index doporučeného filmu, nebo None, pokud není co doporučit.
    """
    pass


  • Pokud 0 znamená, že uživatel film neviděl, dá se s tím nějak pracovat při zkoumání podobnosti s jinými uživateli?
  • Co když jeden uživatel dává běžně 5 hvězdiček a jiný maximálně 4?
  • Má stejnou váhu podobnost vypočtená z 2 filmů a 100 filmů?
  • Jak reprezentovat řídká data? Tj. pokud mají uživatelé typicky málo hodnocených filmů a většinu prvků matice zabírají nuly?
  • Co když je uživatel nový a ještě nemá žádné hodnocení?
Co se touto úlohou naučím a o čem si něco přečíst?
  • kolaborativní filtrování
  • cosine similarity
  • euklidovská vzdálenost
  • K nearest neighbors
  • matrix factorization
Kde se s touhle úlohou typově setkám?
  • doporučovací systémy
Úroveň znalostí
Středně pokročilý