Sto creando un sito web che pubblicherà uno o più articoli a settimana.
Mi piacerebbe essere in grado di classificare gli articoli in base alla popolarità. Per fare questo, ho bisogno di una formula per calcolare un punteggio per ogni articolo. Questa formula dovrebbe premiare gli articoli popolari (quelli che ricevono molti punti di vista), portando anche i nuovi articoli più vicini alla cima per mantenere il contenuto fresco e interessante.
Il sito Web non supporta la votazione sugli articoli. I lettori saranno in grado di commentare e posso far sì che il sito tenga traccia della quantità di visualizzazioni uniche ottenute dall'articolo.
Il mio tentativo
Ho trovato un modo per calcolare un punteggio per ogni articolo, ma non sono sicuro che sia il modo giusto per farlo, o se funzionerà del tutto.
Questa formula calcola il punteggio:
score = unique_views / ( hours_since_release * 4 )
La formula mantiene a galla articoli con molte viste, assicurandosi anche che alla fine si abbassino per lasciare spazio ai nuovi articoli.
Ho scritto un piccolo programma per testare questa formula. Ecco l'output di una corsa.
Questo script genera da 0 a 2 articoli ogni giorno e simula il loro punteggio man mano che il tempo procede.
Quando viene creato un articolo, sceglie un numero casuale ( M
) tra 100 e 1000, che rappresenta la sua popolarità. Ogni "giorno", lo script aggiunge un numero casuale di visualizzazioni tra 0 e M
a ciascun articolo.
Le visualizzazioni effettive visualizzate nell'output ( V
) sono il risultato di questa formula:
view_count = ( 10 * log10( view_count ) ) ^ 2
L'ho usato per assicurarmi che il numero di visualizzazioni non continuasse a crescere per sempre. Invece, la sua crescita rallenterà col passare del tempo, come potrebbe nella vita reale.
I valori A
e S
nell'output rappresentano rispettivamente l'età in giorni dell'articolo e il suo punteggio, in base alla formula mostrata sopra.
Questa formula causa alcuni comportamenti interessanti: se guardi il gioco Tomb Raider: Anniversary , si genera con un grande M
, il che significa che sarà molto popolare. Arriva in cima al primo giorno, scende nei prossimi 2 giorni e poi torna in cima per 3 giorni di fila a causa della quantità di visualizzazioni che ottiene.
Questo sembra essere il comportamento che sto cercando, ma non sono sicuro che funzionerà nella pratica, o anche se questo è l'approccio giusto.
Puoi trovare la fonte del mio prototipo approssimativo qui se desideri eseguirlo da solo.
Ecco la domanda:
Come puoi inventare e testare gli algoritmi di ranking in modo che soddisfino le condizioni del problema, utilizzando le variabili disponibili?
Domanda secondaria: Il mio algoritmo di classificazione è appropriato e funzionerebbe nella situazione che ho descritto?
EDIT: dai link nella risposta maythesource.com , ho appena realizzato che c'è anche il problema del gioco dei punteggi. Considerare solo le visite uniche in qualche modo impedirebbe il gioco, oppure è una debole contromisura?