Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Relazione di Tirocinio
Sistemi di recommendation
per personal video recording
Supervisore Candidato
Prof. Giancarlo Ruffo Matteo Bovetti
Alla mia famiglia.
A Anto.
Indice
1. SISTEMI DI RECOMMENDATION................................................................................4
1.1 Che cosa sono e a cosa servono?.................................................................................4
1.2 L'approccio Collaborative Filtering.............................................................................6
1.2.1 Introduzione.........................................................................................................6
1.2.2 Utilizzi del Collaborative Filtering......................................................................8
1.2.3 Confronto tra Collaborative Filtering e Content-Based Filtering......................12
1.2.4 L'approccio neighborhood-based......................................................................14
1.2.5 Valutazioni.........................................................................................................16
2. L'APPLICAZIONE RD-PVR..........................................................................................19
2.1 Il servizio V-Cast.......................................................................................................19
2.2 RD-PVR e Facebook.................................................................................................21
2.3 Algoritmo di Recommendation per RD-PVR............................................................24
2.4 Collaborative Filtering in RD-PVR...........................................................................26
2.4.1 Calcolo degli insiemi usr-affini e el-affini.........................................................26
2.5 Il calcolo del weight..................................................................................................27
2.6 Implementazione in PHP5.........................................................................................28
3. TEST E VALUTAZIONI..................................................................................................34
3.1 Test condotti sui dump di V-Cast...............................................................................34
3.2 Risultati e conclusioni...............................................................................................37
4. CODICE CORRELATO...................................................................................................41
Ringraziamenti.....................................................................................................................45
Bibliografia...........................................................................................................................46
1. SISTEMI DI RECOMMENDATION
I sistemi di recommendation sono uno specifico tipo di information filtering (IF). Essi
vengono utilizzati per presentare oggetti (film, musica, libri, news, immagini, web pages,
ecc..) che possono interessare l'utente.
Quando viene costruito il profilo utente, la distinzione viene fatta tra collezioni di dati
espliciti ed impliciti.
• Ottenere una lista degli oggetti che l'utente ha ascoltato o guardato sul suo
computer.
• Analizzare la rete sociale dell'utente e scoprirne similarità di gusto con altri utenti.
1.2.1 Introduzione
Come mostra la figura il sistema MovieLens offre una lista predittiva su quali film è
consigliato vedere. Gli utenti, che hanno visto alcuni film e vogliono fornire un feedback
diretto sul gradimento della pellicola, lo possono fare utilizzando il sistema da uno a
cinque stelle che permette di esprimere un voto. Le stelle vengono valutate dal sistema
MovieLens in questo modo:
Il calcolo del rating può essere rappresentato da una matrice, utente e oggetto, che
associa un valore di affinità tra gli oggetti (film) e gli utenti per cui deve essere calcolata la
predizione. Di seguito viene riportato un esempio di matrice dove, sulle righe abbiamo gli
utenti, e sulle colonne i film. Ogni cella indica il rating di quel film con l'utente specificato.
The Matrix Speed Sideways Brokeback
Mountain
Amy 1 2 5
Matt 3 5 4
Paul 5 5 2 1
Cliff 5 5 5 5
La matrice è solo uno dei modi che si hanno per rappresentare e per dare una
predizione. Esistono diversi modi per fornire un feedback utile per la predizione di un
oggetto:
Come spiegato nel paragrafo precedente esistono due modi per esprimere un feedback,
esplicito o implicito. Il primo modo, indica una volontaria intenzione dell'utente di dare un
giudizio su un oggetto del sistema. Questo tipo di dato deriva da un comportamento
intenzionale che l'utente ha verso il sistema. Il secondo modo, viene inferito
automaticamente da un comportamento o da una azione sul sistema tenuta dall'utente. Ad
esempio se un utente visita una pagina contenente un prodotto, oppure acquista il prodotto
stesso, è possibile banalmente dedurre che l'oggetto interessi all'utente. Questa inferenza
permette di presentare oggetti (prodotti) affini e quindi mantenere l'utente sul sistema.
Gli utilizzi che vengono fatti dei sistemi collaborative filtering sono molti. Di seguito
vengono presentati i più comuni legati a cosa un utente può ottenere dal un sistema di
recommendation.
1. Innanzi tutto il collaborative filtering viene utilizzato per ricercare nuovi oggetti
che potrebbero piacere all'utente. In contesti molto grandi, non è possibile che
l'utente ricerchi manualmente tutti gli oggetti che gli possano interessare. Lo scopo
principale di questi sistemi è proprio di ricercare oggetti e presentarli all'utente in
modo che possa ricercare cosa gli interessa in un insieme ristretto.
3. Un altro importante utilizzo che si può fare del collaborative filtering è quello di
aiutare l'utente a ricercare altri utenti affini a lui. Questo meccanismo permette di
costruire gruppi di utenti con affinità di gusti, oppure connettere utenti per
permettere un tipo di raccomandazione sociale.
4. Come indicato dal punto 1, il sistema può eseguire lo stesso compito con un gruppo
di utenti. Definito un gruppo di utenti affini, ad esempio un gruppo di ricerca, è
possibile sfruttare le funzionalità del sistema per ricercare una pubblicazione utile a
tutti i membri del gruppo.
Questi cinque punti descrivono quello che un utente, che utilizza il sistema, può
ottenere. Ora viene spostata l'attenzione sul sistema vero e proprio. In particolare sulle
funzionalità che i sistemi collaborative filtering offrono.
2. Calcolo della predizione di un dato oggetto. Questo tipo di calcolo viene fatto dal
sistema per indicare un sottoinsieme di possibili elementi candidati alla
recommendation. Esso è fondamentale per fornire un valore di affinità tra l'oggetto,
a cui è associato il rating, e l'utente per cui si sta svolgendo la predizione. Molti di
questi algoritmi hanno la caratteristica di essere altamente scalabili e di avere un
basso uso di memoria e di tempo di computazione.
Proprietà dei domini per il Collaborative Filtering (CF). Il CF è noto per essere
effettivo in domini che presentano determinate proprietà. Bisogna valutare quali sono le
proprietà che le applicazioni utente considerano maggiormente. Raggruppiamo queste
proprietà in:
• Data distribution
• Underlying mining
• Data persistence
1. Avere all'interno del sistema una grande quantità di oggetti. Se la quantità di oggetti
considerabili è bassa, l'utente può esplorarli e conoscerli tutti senza avere bisogno
del supporto del sistema.
2. Avere un gran numero di ratings per oggetto. Se la quantità di ratings per oggetto è
bassa non ci sono abbastanza informazioni per fare delle predizioni o
recommendation utili.
Underlying mining.
1. Per ogni utente del sistema ci sono altri utenti con necessità o gusti in comune. CF
lavora perché le persone hanno necessità e gusti in comune. Se una persona ha gusti
così unici da non averne in comune con nessun altro, allora il CF non può fare
nessuna valutazione (fallisce). In generale CF lavora bene quando ogni utente può
trovare molti altri utenti che condividono i suoi gusti in molte categorie.
2. La valutazione degli oggetti richiede gusti personali. Nei casi in cui ci sono criteri
oggettivi di bontà che possono essere computati automaticamente, questi criteri
possono essere meglio applicati a altri contesti piuttosto che al CF (ad esempio gli
algoritmi di ricerca). Il CF permette agli utenti con gusti simili di informare se
stessi sull'esistenza di oggetti che potrebbero interessare. Il CF aggiunge valori
sostanziali quando le valutazioni di oggetti sono in buona parte soggettivi (musica)
o quando questi oggetti hanno molti criteri oggettivi differenti che necessitano di
essere pesati soggettivamente gli uni con gli altri (ad esempio le auto). Alcune volte
esistono criteri oggettivi che possono aiutare il lavoro dell'algoritmo (es.
raccomandare solo libri scritti in inglese). Se la recommendation può essere fatta
utilizzando criteri oggettivi, il CF non è utile.
3. Gli oggetti sono omogenei. L'omogeneità è data dai criteri oggettivi che sono simili
tra tutti gli oggetti presenti nel sistema. La differenziazione è fatta solo sui criteri
soggettivi. Gli album musicali appartengono a questa categoria, molti sono simili
da comprare e simili in lunghezza. Un altro tipo di oggetto che presenta questa
proprietà sono i libri o le pubblicazioni di ricerca.
Data persistence. Le proprietà elencate di seguito trattano la rilevanza dei dati nel CF.
1. Persistenza degli oggetti. Un sistema CF non solo necessita che un singolo oggetto
sia classificato da molte persone, ma richiede inoltre che le persone condividano
molti oggetti precedentemente classificati. Consideriamo il dominio di notizie
(news). Molte notizie appaiono per giorni, altre probabilmente sono solo interessati
per poco tempo. Per un sistema collaborative filtering generare una predizione
riguardante una notizia apparsa recentemente, richiede che siano vere due
precondizioni:
B) Questi utenti hanno inoltre classificato alcune altre notizie che io ho anche
classificato.
In un dominio come quello delle notizie, per essere classificate da un largo numero
di persone, esse sono molto più interessanti quando sono appena uscite e di cronaca
nera. Se queste notizie sono solo importanti per un breve periodo questa richiesta è
difficile da incontrare.
Il collaborative filtering (CF) utilizza delle assunzioni su utenti (affini) per creare una
lista di oggetti pronti per la recommendation. Su questi oggetti l'algoritmo crea un rating
che indica l'affinità dell'oggetto con l'utente. L'approccio content-based filtering (CBF)
utilizza delle assunzioni su oggetti che reputa affini all'utente o di suo gradimento. Un
esempio chiarificatore è il seguente: se viene creato un collegamento a una pagina
contenente “tomato sauce”, l'approccio content-base filtering consiglierà un'altra pagina
con “tomato sauce”. Questa è la prima importante distinzione tra questi due tipi di
approcci. L'approccio content-based filtering può fare predizioni senza costruire un rating
associato agli oggetti che raccomanda. Questo non avviene nel collaborative filtering dove
è necessario costruire un rating.
Un ulteriore caratteristica del collaborative filtering, è data dal fatto che gli oggetti
esaminati dall'algoritmo sono spesso manipolati dall'utente, il quale fornisce una
valutazione all'oggetto stesso. Valutare l'oggetto, permette all'algoritmo di avere a
disposizione ulteriori informazioni per analizzare in modo preciso gli elementi da
raccomandare. Fornendo un maggior numero di informazioni è possibile aumentare la
precisione sulle valutazioni fatte dall'algoritmo.
Per approfondire ulteriormente il rapporto che c'è tra oggetti utilizzati in un approccio
content-based e collaborative filtering, viene ora presentata una tabella [9] riassuntiva che
permette di vedere quali oggetti utilizzano i vari approcci. Questa tabella è importante
anche per vedere l'evoluzione dei sistemi di raccomandazione partendo proprio
dall'information retrieval.
Concept Modeling Matrix
Information Retrieval terms x documents
Information Filtering features x documents
Content-based Filtering features x artifacts
Collaborative Filtering people x documents
Recommender System people x artifacts
Si vuole calcolare una predizione per l'oggetto “Speed” per l'utente 3 (Segnata con X).
Osserviamo i ratings per l'oggetto “Speed”, si nota che il ratings sono simili a quelli di
“Sideways” ma non simili a quelli si “The Matrix”. Cerchiamo di predire il rating X
costruendo una media pesata su gli altri ratings dell'utente 3 (3 per “The Matrix” e 4 per
“Sideways”). Visto che “Speed” è simile a “Sideways”, consideriamo il rating dato a
“Sideways” molto più rilevante rispetto a quello dato a “The Matrix”. Calcoliamo quindi la
predizione eseguendo questo semplice calcolo: X = 0.25 * 3 + 0.75 * 4 = 3.75.
Di seguito viene riportata l'equazione formalizzata per il calcolo della predizione per
un rating utente u che ha similarità con un oggetto i.
user/ 1 2 3 4 5 6 7 8 9 10 11 12
items
1 1 3 ? 5 5 4
2 5 4 4 4 2 1 3
3 2 4 1 2 3 3 5
4 2 4 5 4 2
5 4 3 4 2 2 5
6 1 3 3 2 4
Le celle bianche non contengono un rating, mentre le celle gialle hanno specificato al
loro interno il valore di rating per quell'oggetto-utente. In rosso viene indicato il rating che
si vuole calcolare per l'oggetto 1 e l'utente 5.
Procediamo con la selezione degli oggetti vicini (Neighbor selection). Come mostrato
di seguito l'algoritmo seleziona gli oggetti 3 e 6, perché vicini ai gusti dell'utente.
user/ 1 2 3 4 5 6 7 8 9 10 11 12
items
1 1 3 ? 5 5 4
2 5 4 4 4 2 1 3
3 2 4 1 2 3 3 5
4 2 4 5 4 2
5 4 3 4 2 2 5
6 1 3 3 2 4
Come indicato dalla equazione per il calcolo della predizione pred(u,i) viene calcolata
una media pesata dei valori selezionati dall'algoritmo:
user/ 1 2 3 4 5 6 7 8 9 10 11 12
items
1 1 3 2,6 5 5 4
2 5 4 4 4 2 1 3
3 2 4 1 2 3 3 5
4 2 4 5 4 2
5 4 3 4 2 2 5
6 1 3 3 2 4
Il risultato del calcolo viene inserito nella cella relativa e quindi la predizione è stata
calcolata. Infine vengono presentate le proprietà che caratterizzano questo approccio:
Le proprietà dell'approccio neighborhood-based CF sono:
• Intuitivo
• Rende semplice spiegare le ragioni che portano a una raccomandazione
• Operare senza discontinuità nuovi ratings / users
1.2.5 Valutazioni
In una scala di utilità errori all'inizio della lista classificata possono essere
esponenzialmente maggiori rispetto agli errori nella parte terminale della lista.
Oltre l'accuratezza. Di seguito vengono presentate altre tecniche per valutare la bontà
del sistema collaborative filtering.
Novelty è l'abilità del sistema CF di raccomandare oggetti di cui gli utenti non erano a
conoscenza.
Un'idea più forte di novelty di recommendation è quella serendipity, in cui agli utenti
vengono inviate raccomandazioni per oggetti che loro non avrebbero potuto notare dai loro
canali. Per chiarire la distinzione tra questi due approcci, viene presentato un esempio su
un sistema di recommendation di news:
I ricercatori hanno studiato come raffinare gli algoritmi per promuovere i due approcci
serendipity e novelty. Ma misurando la novelty si è notato che si ha bisogno che gli utenti,
in modo live, indichino se la raccomandazione è stata fatta su oggetti nuovi (novelty).
Coverage è la percentuale degli oggetti conosciuti dal collaborative filtering per i quali
esso genera una predizione. È inoltre possibile calcolare una variante simile alla
percentuale degli oggetti potenzialmente raccomandabili agli utenti. Ottimizzare le
performance permette di non ottenere oggetti che sono già stati precedentemente
raccomandati.
User satisfaction metrics. I metodi descritto sopra sono solo alcuni dei modi che si
hanno per valutare la capacità di predizione di un sistema collaborative filtering. Se il
sistema è ben progettato e ben presentato, può essere una misura di quale percezione ha
l'utente verso il sistema. Questo può essere misurato dalle statistiche di utilizzo o dalla
ritenzione che si ha verso il sistema.
Site performance metric. Questa metrica utilizza per la propria analisi le informazioni
ricavate dall'utilizzo di un sito web. Vengono valutate il numero di utenti che lo utilizzano,
il numero di utenti che vi si iscrivono, l'utilizzo di oggetti, lo scaricamento di oggetti e la
frequenza di ritorno sul sito web. Queste misurazioni sono di tipo statistico, quindi facili da
ottenere. Cosa meno semplice è capire quali parti bisogna cambiare all'interno del sito web.
2. L'APPLICAZIONE RD-PVR
Quello che RD-PVR vuole realizzare è, non solo che gli utenti Facebook utilizzino V-
Cast, ma che ogni singolo utente possa ampliare il numero di registrazioni che segue.
Questo obbiettivo può essere raggiunto fornendo a RD-PVR un sistema di
recommendation che permetta di costruire, secondo i gusti e i comportamenti dell'utente,
un insieme di registrazioni che l'utilizzatore non ha notato o non conosce, ma comunque di
suo gradimento.
L'utente che intende programmare una registrazione deve compilare i seguenti campi:
8. Titolo
Una volta compilato il form con i dati sopra elencati il server procederà alla
registrazione. Il risultato dell'elaborazione sarà un file, scaricabile dal server V-Cast, con la
registrazione che è stata programmata. Ecco un esempio di due registrazioni eseguite dal
sistema:
L'applicazione viene installata sul profilo utente Facebook. Esso permette sia l'utilizzo
da parte dell'utente installatore, sia ai contatti (friends) di vederla e installarla a loro volta
sul loro profilo.
L'applicazione RD-PVR nasce con l'intento di far conoscere il servizio V-Cast [3] al
maggior numero di utenti utilizzando la piattaforma Facebook.
• discrete: tabella contenente gli elementi discreti e i campi relativi per descriverli.
• recom-deleted: contiene gli elementi che sono stati esplicitamente cancellati dagli
utenti dalle precedenti recommendation.
• relation: crea una relazione tra l'utente V-Cast e l'utente Facebook che utilizza RD-
PVR.
• titles: elenco di titoli associati ad un elemento discreto.
Un concetto importante, legato alla nostra base dati, è quello di elemento discreto. Con
questo nome si indica un elemento che è a rappresentanza di altri elementi rappresentati a
lui. Il calcolo del rappresentante è frutto di un algoritmo di discretizzazione che viene
eseguito sugli elementi registrati nel sistema V-Cast.
In particolare analizziamo l'utilizzo e il significato delle prime tre tabelle, discrete, usr-
discrete e recom-deleted.
• first-found: data e ora della prima occorrenza associata a questo elemento discreto.
La tabella recom-deleted contiene gli elementi discreti, già raccomandati dal sistema ad
un utente, ma che sono stati scartati dall'utente stesso. Questo elenco ci permette di
restringere il numero di elementi utili alle recommendation future.
Ora è possibile procedere con il calcolo degli insiemi affini all'utente.
Gli insiemi di affinità che vengono calcolati, per un ipotetico utente u, sono i seguenti:
• usr-affini a u
• el-affini a u
L'insieme usr-affini è l'insieme che contiene tutti gli utenti che hanno visto almeno una
delle registrazioni che u segue. Questo meccanismo permette di ottenere un insieme di
utenti che hanno una certa affinità di gusti con u. La rete V-Cast, a differenza di quella
Facebook, non permette di avere una visione delle amicizie che l'utente stringe con altri
utenti; essa permette soltanto di trovare legami, tra utenti, analizzando elementi in comune.
L'insieme el-affini viene costruito a partire dall'insieme di utenti affini (usr-affini). Esso
conterrà tutti gli elementi che sono stati visti dagli utenti affini ad u, ma che u non ha visto.
Come ultimo passo vengono eliminati, da el-affini, tutti gli elementi discreti che sono stati
esplicitamente cancellati dagli utenti nelle recommendation passate (tabella recom-
deleted).
Esempio:
Siano u1, u2, u3, u4 utenti della piattaforma V-Cast. Tutti gli utenti hanno registrato alcuni
elementi discreti di loro gradimento.
u1 ha registrato {X,Y}
u2 ha registrato {Y,Z}
u3 ha registrato {Y,W}
u4 ha registrato {M,N}
Si supponga che venga calcolata la recommendation per l'utente u1; esso ha in comune
con gli utenti u2 e u3 l'elemento Y. Questo permette di creare l'insieme di usr-
affini(u1)={u2,u3}.
Come da definizione, una volta calcolato usr-affini(u1), è possibile ottenere gli elementi
affini a u1. L'insieme el-affini(u1)={Z,W}.
Nel prossimo capitolo viene descritto come gli elementi affini {Z,W}, vengano pesati
tramite il calcolo del valore di weight.
Il weight è un valore che viene calcolato per ogni elemento discreto presente
nell'insieme degli elementi affini ad u. Il calcolo viene fatto sommando il valore numerico
decimale di tutte le clausole. Questo meccanismo permette di “spingere” in alto gli
elementi discreti con valore di weight maggiore e che, secondo l'algoritmo, devono essere
presentati all'utente per primi.
Per ogni elemento di el-affini viene costruito il weight valutando le seguenti clausole:
Clausola Descrizione
Repeat Dato un insieme r di tipi di ripetibilità {no-
repeat, daily, weekly}, sia ru l'insieme delle
ripetitività che hanno gli elementi-discreti di
un utente u, dove ru è sottoinsieme di r. Se
un elemento-discreto candidato alla
recommendation ha un valore del campo
repeat che è presente in ru allora viene
assegnato il valore 0.5 al rating
dell'elemento.
Variabili globali:
private $id_usr: utente per cui viene fatta la recommendation.
private $db: oggetto contenente le primitive per usare il database.
Metodi pubblici:
public function __construct($id_usr):
public function __destruct();
public function acf();
Metodi privati:
private function c_repeat($row);
private function c_repeat($row);
private function c_rating($row);
Le variabili globali della classe ACF permettono di memorizzare l'utente per cui dovrà
essere costruita la recommendation ed un oggetto, di tipo DB, che implementa le primitive
per utilizzare la base di dati.
/* Costruttore */
$this->id_usr = $id_usr;
/* Distruttore */
$id_usr = null;
$db = null;
Il metodo acf() è il vero cuore del sistema di recommendation. Esso restituisce un array
associativo contenente la lista di elementi raccomandati; ogni cella contiene una coppia di
valori [id-elemento,weight]. L'array associativo è ordinato in modo decrescente rispetto al
campo weight, in modo da avere in cima gli elementi con valore maggiore.
La struttura dati utilizzata è un array associativo; questo tipo di struttura dati permette
di utilizzare indici testuali anziché indici numerici (Es: $weight['avg_weight'], per ottenere
la media). Di seguito viene spiegato, attraverso il commento del codice, come il metodo
acf() calcola la lista di elementi discreti utili alla recommendation.
public function acf()
$elaffini = $this->db->execute_query($q);
La query seleziona, dalla tabella usr_discrete, i campi id_el e id_usr di tutte le tuple
utili alla recommendation. Questa selezione viene fatta dalle tabelle usr_discrete e
utentiaffini. Le clausole WHERE, discriminano tutti gli elementi che l'utente (10664
nell'esempio) ha già visto, e tutti quelli che sono già stati esplicitamente cancellati dalle
recommendation passate. Questi ultimi sono contenuti nella tabella recom-deleted.
$weight = array();
$i = 0;
$avg_weight = 0;
$ris_weight = 0;
$ris_weight += $this->c_repeat($row);
$ris_weight += $this->c_cont($row);
$ris_weight += $this->c_rating($row);
$avg_weight += $ris_weight;
$i++;
rsort($weight);
$weight['num_el'] = $i;
return $weight;
}
Di seguito viene proposto un esempio di output dell'algoritmo:
Viene ora focalizzata l'attenzione su metodi che calcolano il valore di weight. Iniziamo
l'analisi dal metodo che implementa la clausola c_repeat($row):
$row_el = mysql_fetch_assoc($rs_repeat);
if($row_el)
return 0.5;
return 0;
La query che viene eseguita controlla se l'utente per cui viene calcolata la
recommendation è solito seguire registrazioni con una certa ripetibilità (daily, weekly,
no_repeat). Se l'elemento discreto che si sta analizzando ha ripetibilità affine a quella
dell'utente viene assegnato il valore 0.5.
Proseguo il commento con la clausola c_cont($row):
$row_el = mysql_fetch_assoc($rrow);
return ($row_el['cont']/10);
Il metodo estrae il valore del campo usr_discrete.cont e lo restituisce diviso per dieci. Il
campo cont indica il numero di accessi all'elemento discreto. Di seguito viene riportata
l'ultima clausola per il calcolo del weight c_rating($row).
$row_el = mysql_fetch_assoc($rrow);
if($row_el['rating'] != -1)
return $row_el['rating'];
return 0;
Questa clausola permette di recuperare dalla base dati il valore del rating associato a un
elemento discreto. Come indica il FROM della query SQL il valore è contenuto nella
tabella usr_discrete. Esso è molto importante, perché indica il feedback diretto che gli
utenti hanno esplicitato su un elemento. L'utente decide il valore di rating assegnando
all'elemento un valore che varia da 1 a 5. Il campo può assumere anche il valore -1.
Quest'ultimo indica che l'utente ha premuto il pulsante “x” per cancellare l'elemento dalla
lista sull'interfaccia utente.
3. TEST E VALUTAZIONI
Per l'utente u viene calcolata una predizione che chiamiamo P(u,i). Questa predizione,
calcolata per u considerando il dump i, presenta tutti gli elementi che l'algoritmo ha
reputato affini secondo i criteri stabiliti nel capitolo precedente (Capitolo 2).
• Falsi negativi: quante registrazioni nuove ci sono in R(u,j) che non ci sono in
P(u,i)
• Falsi positivi: quante registrazioni ci sono in P(u,i) che non ci sono in R(u,j)
Supponiamo di avere R(u,i) = {el1, el2, el3} e P(u,i) = {el4, el5}. Prendiamo ora in
considerazione un nuovo dump, chiamato j, dove R(u,j) = {el1, el2, el3, el4, el6}. Ora
vogliamo calcolare il numero dei falsi negativi (FN) per l'utente u. FN(u) = 1 (el6).
Falsi positivi. Questa misura indica il numero di registrazioni che sono state predette
dal sistema ma che l'utente non ha registrato, e quindi non sono presenti nel dump
successivo (j) a quando è stata calcolata la predizione P(u,i). Questa misurazione è
importante perché da una visione sul numero di elementi che il sistema crede affini
all'utente ma che in verità non lo sono. Di seguito viene ripreso l'esempio di prima per
chiarire la definizione di falsi positivi.
Supponiamo di avere R(u,i) = {el1, el2, el3} e P(u,i) = {el4, el5, el7}. Prendiamo ora in
considerazione un nuovo dump, chiamato j, dove R(u,j) = {el1, el2, el3, el4, el6}. Ora
vogliamo calcolare il numero dei falsi positivi (FP) per l'utente u. FP(u) = 2 (el5,el7).
25 annozero weekly
Questi due elementi sono si differenti perché il primo indica una specifica puntata di
“annozero”, non ripetibile che si riferisce probabilmente a un argomento preciso, mentre il
secondo elemento si riferisce all'appuntamento “annozero” con ripetibilità settimanale, ma
questo aspetto non è rilevante per l'utente e a chi vuole verificare e provare il livello di
accuratezza del sistema di recommendation.
Per questo motivo si procede a valutare questo tipo di elementi discreti come simili,
nonostante siano diversi come ripetibilità. Il nocciolo del problema si vede quando l'utente
registra una nuova puntata, in questo caso, di “annozero” e magari il sistema di
discretizzazione assegna la nuova registrazione a un elemento discreto già esistente oppure
ne crea uno nuovo, ad esempio:
Nel calcolo del numero di FN e FP il nuovo elemento (26) deve essere valutato come
simile ai due precedenti (5, 25). Questo deve essere fatto perché si rischia di concludere
che queste registrazioni sono diverse mentre appartengono alla stessa trasmissione
televisiva, appunto “annozero”.
Per ovviare a questo problema è stato realizzato il confronto lavorando sul campo
most_likely_title. Questo campo, che indica il titolo più vicino all'elemento discreto, viene
suddiviso in token e poi confrontato con il secondo titolo da comparare.
Dopo aver affrontato, nel paragrafo precedente, le problematiche legate al calcolo del
numero di falsi negativi e falsi positivi, vengono presentati i risultati dei test effettuati.
La prima tabella contiene i dati relativi alle percentuali con la quale le predizioni hanno
effettivamente predetto elementi discreti che l'utente ha poi visionato. Questi dati
forniscono un quadro generale sull'accuratezza e il comportamento dell'algoritmo.
Proseguiamo l'analisi dei dati con la seconda tabella che presenta il calcolo dei dei falsi
positivi e dei falsi negativi. La voce P(u,i) indica il numero di elementi predetti per l'utente
u nel dump i, mentre la voce R(u,j) indica il numero di registrazioni che l'utente u ha
effettuato nel dump j.
Analizzando i dati nella seconda tabella si è notata una importante suddivisione in tre
categorie di comportamenti dell'algoritmo. Questi tre comportamenti indicano quanto è
stato affine il calcolo della predizione dell'algoritmo.
Dalla suddivisione in tre categorie si è notato che gli utenti (con predizione rossa)
hanno un numero basso di elementi registrati. Questo crea difficoltà all'algoritmo che
produce una predizione con bassa affinità.
Infine le predizioni categorizzate in verde sono le più affini. Esse presentano un largo
numero di elementi predetti correttamente e provengono da utenti che hanno un numero
medio-alto di registrazioni. Di seguito viene riportata una tabella riassuntiva che mostra il
numero medio di registrazioni che hanno effettuato gli utenti per ognuna delle tre
categorizzazioni.
La classe DB (db.php):
<?php
/*
version: 1.0
*/
class DB {
/*
*/
$this->conn = null;
mysql_select_db($db_name, $this->conn);
mysql_close($conn);
}
/*
*/
?>
Di seguito viene riportato il codice PHP5 che è stato utilizzato per calcolare il numero
di falsi positivi risolvendo il problema descritto nel capitolo precedente.
<?php
/*
version: 1.0
*/
require_once 'db.php';
$fp = 0;
$i = 1;
{
// test id_el
if($fp_test1['num'] == 0)
$fp_t_erac = mysql_fetch_assoc($fp_t_er);
$fp_t_elv = $db->execute_query('SELECT
rdpvr_260209.discrete.most_likely_title from rdpvr_260209.usr_discrete,
rdpvr_260209.discrete where rdpvr_260209.usr_discrete.id_usr = '.$fp_user['id_usr'].' and
rdpvr_260209.usr_discrete.id_el = rdpvr_260209.discrete.id_el;');
$s = 0;
$trovate = 0;
while($fp_t_elvisti = mysql_fetch_assoc($fp_t_elv))
$s = 0;
$trovate++;
$s++;
}
$fp++;
$fp = 0;
?>
• PHP 5
• Sun MySql 5
• NetBeans 6.5
Ringraziamenti
Il primo ringraziamento va al Prof. Giancarlo Ruffo, relatore di questa tesi, per la
disponibilità e il supporto datomi nella realizzazione di questo documento e nel lavoro
svolto durante lo stage.
Infine ringrazio la mia famiglia per il sostegno e l'appoggio datomi in questi tre anni di
duro lavoro e studio. Appoggio sia umano che economico, fondamentali per il cammino
che ho intrapreso e che qui vado a concludere.
Bibliografia
1: J. Ben Schafer, Dan Frankowski, Jon Herlocker, Shilad Sen, Collaborative Filtering
Recommender SystemSchool of Electrical Engineering and Computer Science Oregon
State University.
2: Facebook, facebook.com.
3: V-Cast, vcast.it.
4: Giancarlo Ruffo and Rossano Schifanella, A Peer-to-Peer Recommender System Based
on Spontaneous Affinities, Università degli Studi di Torino.
5: Badrul Sarwar, George Karypis, Joseph Konstan, and John Riedl. Item- based
Collaborative Filtering Recommendation Algorithms. Appears in WWW10, May 1-5,
2001, Hong Kong.
6: Badrul Sarwar, George Karypis, Joseph Konstan, and John Riedl. Analysis of
Recommendation Algorithms for E-Commerce. Department of Computer Science and
Engineering University of Minnesota Minneapolis, MN 55455.
7: J. Ben Schafer, Dan Frankowski, Jon Herlocker, and Shilad Sen. Collaborative Filtering
Recommender Systems. School of Electrical Engineering and Computer Science Oregon
State University 102 Dearborn Hall Corvallis, OR 97331.
8: Robert M. Bell and Yehuda Koren, Improved Neighborhood-based Collaborative
Filtering, ATT Labs Research 180 Park Ave, Florham Park, NJ 07932.
9: SAVERIO PERUGINI and MARCOS ANDRE GONCALVES and ED-WARD A. FOX.
A Connection-Centric Survey of Recommender Systems Research, Department of
Computer Science, Virginia Tech, Blacksburg, VA 24061.
10: Yehuda Koren. Tutorial - Recent Progress in Collaborative Filtering.