Algoritmo di ranking

Prima bozza dell’algoritmo di ranking (prioritizzazione) delle notizie per l’aggregatore.

Per ogni articolo disponiamo dei seguenti dati in ingresso:

  • età: tempo trascorso in secondi dalla pubblicazione dell’articolo
  • intervallo: tempo trascorso in secondi tra la pubblicazione dell’articolo e la pubblicazione da parte della fonte dell’articolo precedente
  • viste: numero di volte che l’articolo è stato visualizzato sulla piattaforma
  • commenti: numero di commenti che gli utenti della piattaforma hanno dato all’articolo
  • rating: numero medio di stelline o pollici versi attribuito all’articolo, tra -5 e 5
  • rating_fonte: numero medio di stelline o pollici versi attribuito alla fonte, tra -5 e 5

Si propone di ordinare gli articoli secondo un punteggio decrescente.

Il punteggio è calcolato così:

punteggio = interesse / affondamento^gravità

dove la gravità è un esponente arbitrario che serve ad accelerare (valori più alti) o rallentare (valori più bassi) l’affondamento. Un valore di esempio potrebbe essere 2.

L’interesse è una misura dell’interesse dimostrato dai lettori, ed è calcolato così:

interesse = viste + fattore_commenti * commenti

dove il coefficiente arbitario fattore_commenti è un coefficiente d’interesse dei commenti che serve a dare maggiore (valori più alti) o minore peso (valori più bassi) ai commenti nella stima dell’interesse di un articolo.

L’affondamento tiene conto del tempo che passa e dei rating: col passare del tempo gli articoli “affondano” nella lista, e i lettori possono incoraggiare questo processo affossandoli con un rating negativo oppure facendoli galleggiare con un rating positivo.

L’affondamento è calcolato così:

affondamento = MAX(1, età_normalizzata / divisore_età - rating - rating_fonte)

dove il coefficiente arbitrario divisore_età è un divisore di normalizzazione dell’età che serve a dare maggiore (valori alti) o minore (valori bassi) peso ai rating rispetto all’età degli articoli nella determinazione della posizione; un valore di esempio può essere 100, che fa corrispondere ad ogni rating un incremento del valore di posizione circa unitario.

L’età_normalizzata viene introdotta per correggere il fatto che certe fonti hanno frequenza maggiore di altre, ed è calcolata così (SQRT è la radice quadrata):

età_normalizzata = età / SQRT(intervallo)

Ad esempio se una fonte A ha intervallo pari a 6000 (circa un ogni 2 ore) e un’altra B ha intervallo pari a 60000 (circa un post al giorno), per le ultime 24 ore si ottiene:

fonte articolo età intervallo età normalizzata
A 1 6000 3000 110
B 1 6000 60000 24
A 2 12000 3000 219
A 3 18000 3000 329
A 4 24000 3000 438
A 5 30000 3000 548
A 6 36000 3000 657
A 7 42000 3000 767
A 8 48000 3000 876
A 9 54000 3000 986
A 10 60000 3000 1095
A 11 63000 3000 1150
A 12 66000 3000 1205
B 2 66000 60000 269

Quindi gli articoli in ordine di età normalizzata decrescente sono:

  1. fonte B, articolo 1
  2. fonte A, articolo 1
  3. fonte A, articolo 2
  4. fonte B, articolo 2
  5. fonte A, articolo 3

Leave a Reply