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:
- fonte B, articolo 1
- fonte A, articolo 1
- fonte A, articolo 2
- fonte B, articolo 2
- fonte A, articolo 3
- …