Il tuo approccio sembra abbastanza ragionevole (si chiama K-neighbor neighbor o KNN), anche se non sono sicuro che tu stia usando la giusta metrica di distanza (distanza di hamming finora in questo giorno). Il tuo metodo è abbastanza sensibile alla struttura precisa di un giorno e probabilmente impiegherà molto tempo per adattarsi a cose come le vacanze, pur essendo ipersensibile nelle prime diverse ore di un giorno.
Un'alterazione del metodo che proverò è quella di guardare le 24 ore precedenti anziché "fino ad oggi" o utilizzare entrambi i metodi e calcolare la media dei risultati. Ad esempio, il precedente metodo di 24 ore si riprendeva abbastanza rapidamente in una vacanza, ma il metodo così lontano potrebbe perdere una vacanza se l'utente non ha mai avuto un giorno di ferie il mercoledì o qualcosa del genere. Questo è un concetto simile a questo gioco rock paper scissors, che guarda i tuoi ultimi quattro lanci per prevedere quello successivo.
Un'altra modifica che considererei è quella di giocare con i pesi nel calcolo della distanza di hamming. Ad esempio, pesate la corrispondenza di ogni bit per lambda^(-n)
, dove lambda
è un parametro che è possibile regolare (iniziare con qualcosa come 1.1) e n
indica il numero di ore nel passato rappresentato dal bit.
Qualsiasi di vari algoritmi di classificazione, come SVM, regressione logistica, foreste casuali, ecc. Dovrebbe funzionare anche abbastanza bene. Caratteristiche da aggiungere al vettore di feature:
- giorno della settimana
- ora
- occupazione media quest'ora
- occupazione media oggi
- occupazione media questo (giorno, ora)
- passato occupazione N-grammi (cioè il vettore bit delle precedenti N ore) per vari valori di N
- è una vacanza?
- ore dal sorgere del sole
Infine, per un nuovo utente, sarà probabilmente un po 'per ottenere i dati di allenamento abbastanza, così si potrebbe desiderare di avere due modelli: un modello globale in base a tutti gli utenti e un modello utente individuale. È quindi possibile pesare le uscite dei due modelli, con il peso sul modello utente in aumento
Personalmente userò semplicemente la modalità per trovare lo stato di occupazione più frequente nella cronologia per ogni intervallo di mezz'ora. Se vuoi utilizzare solo gli stati più recenti, prendi solo le loro modalità. Lo offro solo per segnalare che devi decidere quale approccio adottare per la previsione, quindi implementarlo. L'uso di misure complicate come le distanze di Hamming non rende le previsioni migliori se non si ha un solido supporto teorico (o pratico) all'idea che usare la distanza di Hamming sia l'approccio giusto. Lo stesso argomento vale per il mio suggerimento di usare la modalità. –
Fondamentalmente quello che sto facendo qui è prendere il blocco più frequente, ma io uso la distanza di hamming per scegliere i giorni più adatti dai giorni precedenti sulla base dei dati del giorno corrente. Quindi confronto l'inizio della giornata con gli inizi dei giorni precedenti. Quindi c'è un po 'di giustificazione per la distanza di Hamming. Quello che sto cercando di fare è più come creare una giornata tipo o così, questo è ciò che intendo per catturare la tendenza. –
ulteriori informazioni potrebbero essere utili, ad esempio, la natura dell'occupazione o se le stagioni/alcuni mesi dell'anno potrebbero avere modelli prevedibili. –