# 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ý