Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [algoritmo?] Calcolare il gradimento di una canzone

    Avendo a disposizione il numero di volte in cui una canzone è stata ascoltata fino alla fine (chiamiamolo "play") ed il numero di volte che la si è interrotta ("skip"), mi trovo a dover modificare il valore di gradimento della canzone stessa, costituito da un indice tra 0 e 1, di cui il valore iniziale (neutro) è 0.5

    Ora, ogni volta che una canzone termina (perchè finita o skippata) devo alzare o abbassare il rating: in che modo posso ottenere il valore da aggiungere/togliere?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Dovresti aggiungere alcune ipotesi, tipo:

    E' influente l'istante eventuale dello "skipping"? Mi spiego, se skippi dopo 2 secondi (la canzone ti fa schifo totale), oppure skippi a due secondi dalla fine (la canzone ti piace me devi andare al bagno, fuori con la ragazza/il ragazzo o simili) è la stessa cosa?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Sembrerà banale, però lo scrivo lo stesso

    gradimento = (play-skip)/play

    oppure (questa è una inutile complicazione)

    DeltaGradimento = 1-skip/play- VecchioGradimento

  4. #4
    Originariamente inviato da ibykos
    Sembrerà banale, però lo scrivo lo stesso

    gradimento = (play-skip)/play

    oppure (questa è una inutile complicazione)

    DeltaGradimento = 1-skip/play- VecchioGradimento
    Così però c'è l'eventualità di una divisione per 0 o di un numero negativo, mentre a me serve tra 0 e 1

    Inoltre ho dimenticato di specificare una cosa, l'auto-rating deve influire su un valore che può anche essere impostato dall'utente, quindi non posso ricalcolarlo tutte le volte

    Per quanto riguarda il tempo di skip invece temo di non poterlo intercettare

  5. #5
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Se usi solo la prima formula [gradimento = (play - skip / play)]
    ti basta imporre condizione che play non sia 0.

    codice:
    if ( play != 0)
        gradimento = (play - skip ) /play ;
    else
        gradimento = 0.5;
    play - skip è una quantità sempre positiva (puoi chiudere una canzone un nuemro di volte pari al massimo al numero di ovlte che l'hai aperta) compresa tra 0 (sempre chiusa prima del termine) e play (mai chiusa prima del termine), da cui risulta che la quantità gradimento = (play - skip) /play è una quantità strettamente compresa tra 0 e 1.

  6. #6
    Play in realtà sarebbe solo il numero di volte in cui è terminata, ma per questo non c'è problema.

    C'è un problema invece nel caso di una canzone sempre skippata, perchè il gradimento deve sempre essere diminuito e mai reimpostato di netto.

    play / (play + skip) può funzionare come formula generica? Resta poi da calcolare la variazione da applicare, appunto perchè devo tenere conto anche del valore impostato dall'utente

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    non c'è nessun modo per calcolare il tasso di aumento, perchè per restare sotto l'uno dovresti sapere e priori quante volte verrà suonata la canzone e "normalizzare" rispetto a quel valore.
    Puoi però ricalcolarlo ogni volta che una canzone viene suonata o skippata.
    Supponiamo che 0.6 sia rating iniziale dell'utente(0.5 se non lo definisce). In play abbiamo il numero di volte ascoltata e in skip il numero di volta che l'ha stoppata. Possiamo fare una specie di sistema a votazioni e ad ogni aggiornamento fare una media; mi spiego meglio:
    Il primo voto sarà 0.6; se l'utente skippa la canzone il voto è zero, se la finisce il voto è uno. In tutto il numero di voti saranno play+skip+1. Per ricalcolare il nuovo rating dopo uno skip o un play basta fare:

    (rating_iniziale+play)/(play+skip+1)

    questo valore sarà sempre tra 0 e 1.

    Questo sistema, comunque, di inizializzare il rating a 0.5 non mi piace affatto, perchè se lui non l'ha mai ascoltata non vuol dire che gli piace a metà, ma che non gli piace. Secondo me dovresti fare che il rating_iniziale è 0 e se lui vuole la inizializza a 1(oppure potresti anche fare che la inizializzi dopo il primo ascolto, 0 se skippa 1 se la completa). Questo è anche più logico dal punto di vista matematico perchè se la skippa sempre, utilizzando la formula di sopra, nel secondo caso il rating finale sarà 0 mentre nel caso precedente sarà sempre positivo. Stessa cosa, se gli piace la inizializza a 1 e se la sente sempre tutta il rating finale resterà a 1.

    Se non è questo l'effetto che vuoi ottenere, e cioè che anche se la skippa sempre vuoi che il voto si abbassi gradualmente, usa il primo sistema.

    Ciao

  8. #8
    Originariamente inviato da FelixR
    non c'è nessun modo per calcolare il tasso di aumento, perchè per restare sotto l'uno dovresti sapere e priori quante volte verrà suonata la canzone e "normalizzare" rispetto a quel valore.
    Puoi però ricalcolarlo ogni volta che una canzone viene suonata o skippata.
    Supponiamo che 0.6 sia rating iniziale dell'utente(0.5 se non lo definisce). In play abbiamo il numero di volte ascoltata e in skip il numero di volta che l'ha stoppata. Possiamo fare una specie di sistema a votazioni e ad ogni aggiornamento fare una media; mi spiego meglio:
    Il primo voto sarà 0.6; se l'utente skippa la canzone il voto è zero, se la finisce il voto è uno. In tutto il numero di voti saranno play+skip+1. Per ricalcolare il nuovo rating dopo uno skip o un play basta fare:

    (rating_iniziale+play)/(play+skip+1)

    questo valore sarà sempre tra 0 e 1.

    Questo sistema, comunque, di inizializzare il rating a 0.5 non mi piace affatto, perchè se lui non l'ha mai ascoltata non vuol dire che gli piace a metà, ma che non gli piace. Secondo me dovresti fare che il rating_iniziale è 0 e se lui vuole la inizializza a 1(oppure potresti anche fare che la inizializzi dopo il primo ascolto, 0 se skippa 1 se la completa). Questo è anche più logico dal punto di vista matematico perchè se la skippa sempre, utilizzando la formula di sopra, nel secondo caso il rating finale sarà 0 mentre nel caso precedente sarà sempre positivo. Stessa cosa, se gli piace la inizializza a 1 e se la sente sempre tutta il rating finale resterà a 1.

    Se non è questo l'effetto che vuoi ottenere, e cioè che anche se la skippa sempre vuoi che il voto si abbassi gradualmente, usa il primo sistema.

    Ciao
    Concordo!
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  9. #9
    Originariamente inviato da FelixR
    non c'è nessun modo per calcolare il tasso di aumento, perchè per restare sotto l'uno dovresti sapere e priori quante volte verrà suonata la canzone e "normalizzare" rispetto a quel valore.
    Puoi però ricalcolarlo ogni volta che una canzone viene suonata o skippata.
    Supponiamo che 0.6 sia rating iniziale dell'utente(0.5 se non lo definisce). In play abbiamo il numero di volte ascoltata e in skip il numero di volta che l'ha stoppata. Possiamo fare una specie di sistema a votazioni e ad ogni aggiornamento fare una media; mi spiego meglio:
    Il primo voto sarà 0.6; se l'utente skippa la canzone il voto è zero, se la finisce il voto è uno. In tutto il numero di voti saranno play+skip+1. Per ricalcolare il nuovo rating dopo uno skip o un play basta fare:

    (rating_iniziale+play)/(play+skip+1)

    questo valore sarà sempre tra 0 e 1.

    Questo sistema, comunque, di inizializzare il rating a 0.5 non mi piace affatto, perchè se lui non l'ha mai ascoltata non vuol dire che gli piace a metà, ma che non gli piace. Secondo me dovresti fare che il rating_iniziale è 0 e se lui vuole la inizializza a 1(oppure potresti anche fare che la inizializzi dopo il primo ascolto, 0 se skippa 1 se la completa). Questo è anche più logico dal punto di vista matematico perchè se la skippa sempre, utilizzando la formula di sopra, nel secondo caso il rating finale sarà 0 mentre nel caso precedente sarà sempre positivo. Stessa cosa, se gli piace la inizializza a 1 e se la sente sempre tutta il rating finale resterà a 1.

    Se non è questo l'effetto che vuoi ottenere, e cioè che anche se la skippa sempre vuoi che il voto si abbassi gradualmente, usa il primo sistema.

    Ciao
    Grazie

    Il fatto è che non posso agire sul rating iniziale perchè quello che sto sviluppando è soltanto un plugin esterno per quodlibet, che quando inserisce in libreria una canzone la mette automaticamente a 0.5. Il concetto è questo, secondo me: 0.5=neutro, >0.5 buono, <0.5 scarso

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora

    (*) gradimento = 0.5 + 0.5*(play-skip)/(play+skip) se play+skip != 0
    gradimento = 0.5, altrimenti.

    (*) Ossia semplificato: gradimento = 0.5 * 2*play/(play+skip)

    Dove con play intendo ascoltato per intero (e quindi, play+skip è il numero di volte in cui il file è stato aperto, indipendentemente dal fatto che l'ascolto sia giunto al termine o meno)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.