Guida Progetto · Percorso Python

Sistema di Raccomandazione

Consiglia prodotti o contenuti simili basandoti sulla similarità tra le loro caratteristiche.

0 di 5 passaggi completati

01Obiettivo del Progetto

Cosa costruirai

Un piccolo motore di raccomandazione che, dato un prodotto o un libro che piace all'utente, suggerisce gli elementi più simili nel catalogo — lo stesso principio (in forma semplificata) usato da piattaforme di e-commerce e streaming.

Prerequisiti — guide da cui questo progetto attinge

Guida 10Pandas — per organizzare il catalogo
Guida 9NumPy — per i calcoli vettoriali
Guida 19Embeddings e similarità coseno

02Passo dopo Passo

Spunta ogni passaggio man mano che lo completi: sbloccherai l'attestato del progetto al termine.

Passo 1 — Codice

import pandas as pd

catalogo = pd.DataFrame({
    "titolo": ["Il Signore degli Anelli", "Harry Potter", "Dune", "1984", "Il Nome della Rosa"],
    "descrizione": [
        "Fantasy epico, viaggio, amicizia, magia",
        "Fantasy, magia, scuola, avventura giovanile",
        "Fantascienza, politica, deserto, potere",
        "Distopia, sorveglianza, politica, controllo",
        "Mistero, storia medievale, indagine, monastero"
    ]
})
print(catalogo)
1. Crea il catalogoCostruisci un DataFrame con almeno 5 elementi e una breve descrizione ciascuno, come nel Passo 1.

Passo 2 — Codice

from sentence_transformers import SentenceTransformer

modello = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = modello.encode(catalogo["descrizione"].tolist())
print(embeddings.shape)
2. Calcola gli embedding delle descrizioniUsa SentenceTransformer per trasformare ogni descrizione in un vettore, come nel Passo 2.

Passo 3 — Codice

from sklearn.metrics.pairwise import cosine_similarity

matrice_similarita = cosine_similarity(embeddings)
print(matrice_similarita.shape)  # (5, 5) → similarità tra ogni coppia
3. Costruisci la matrice di similaritàUsa cosine_similarity() su tutti gli embedding contemporaneamente, come nel Passo 3.

Passo 4 — Codice

import numpy as np

def raccomanda(titolo, n=2):
    idx = catalogo[catalogo["titolo"] == titolo].index[0]
    punteggi = list(enumerate(matrice_similarita[idx]))
    punteggi = sorted(punteggi, key=lambda x: x[1], reverse=True)
    simili = [i for i, punteggio in punteggi if i != idx][:n]
    return catalogo.iloc[simili]["titolo"].tolist()
4. Scrivi la funzione di raccomandazioneCrea raccomanda() che restituisce i titoli più simili a uno dato, come nel Passo 4.

Passo 5 — Codice

print(raccomanda("Il Signore degli Anelli"))
# Ci si aspetta "Harry Potter" tra i risultati, per l'affinità fantasy
5. Testa il sistema con più titoliChiama raccomanda() su almeno 3 titoli diversi e verifica che i suggerimenti abbiano senso, come nel Passo 5.

03Sfide ed Estensioni

Sfida 1

Catalogo più grande

Espandi il catalogo a 20 elementi di categorie diverse (libri, film, prodotti) e verifica che il sistema continui a raccomandare in modo sensato.

⏱ 25 minuti🖥️ Individuale
Sfida 2

Punteggio di similarità visibile

Modifica raccomanda() per restituire anche il punteggio di similarità accanto a ogni titolo consigliato, non solo il nome.

⏱ 15 minuti🖥️ Individuale
Sfida 3

Interfaccia Streamlit

Costruisci una piccola app Streamlit dove l'utente sceglie un titolo da un menu a tendina e vede subito i suggerimenti, usando quanto imparato nella guida sul Deployment.

⏱ 30 minuti🖥️ Individuale

🎓 Attestato di completamento progetto

Completa tutti i 5 passaggi per sbloccare il tuo attestato in PDF.

0 / 5 passaggi completati