Quale algoritmo posso usare per trovare correlazioni tra eventi?


12

Sono nuovo di apprendimento automatico, quindi sto cercando di trovare un po 'di letteratura, ma non sono nemmeno sicuro di cosa per Google. I miei dati sono nel seguente formato:

User A performs Action P
User B performs Action Q
User C performs Action R
...
User C performs Action X
User A performs Action Y
User B performs Action Z
...

Laddove ogni Azione abbia determinate caratteristiche (data, ora, cliente, ecc.). Ci sono circa 300 utenti e abbiamo circa 20.000 azioni.

Domanda :

Voglio scoprire se c'è qualche causalità / correlazione tra le azioni dell'utente. Ad esempio, "ogni volta che l'utente E esegue l'azione T, 2 giorni dopo l'utente G esegue l'azione V". Ma nel mezzo, potrebbero esserci molti altri utenti che eseguono molte altre azioni ed è possibile che non sia stata trovata alcuna correlazione. È anche possibile che alcuni utenti siano correlati, ma altri siano completamente indipendenti. È qualcosa che l'apprendimento automatico potrebbe trovare per me? Esiste un algoritmo o una serie di algoritmi specifici che potrebbero aiutarmi?

Ho letto dell'Analisi delle associazioni e dell'algoritmo Apriori ma non credo che questo mi darà ciò di cui ho bisogno, in quanto sembra richiedere set di dati noti e ben delimitati come input, mentre ho solo un lungo flusso di utenti apparentemente casuali Azioni. Qualche suggerimento su cosa guardare sarebbe molto apprezzato!


1
Hai provato a mettere l'evento su un grafico diretto , un vertice rappresenta un tipo di azione, ad es . C'è un vantaggio se un utente ha fatto un'azione prima di . può essere facilmente ponderato con il numero di utenti che hanno eseguito tale sequenza. Puoi anche fare un grafico per utente. ( i , j ) i jG=(V,E)P(i,j)ij
0x90,

Risposte:


1

Penso che devi fare un po 'di preparazione dei dati prima di utilizzare qualsiasi algoritmo per trovare set di elementi frequenti e regole di associazione.

Vedi la tabella delle transazioni in questo articolo: analisi del paniere di mercato

Nel tuo caso devi impostare (e perfezionare) un intervallo di tempo massimo tra l'interazione che si prevede sia correlata, quindi puoi scegliere un utente frequente e per ogni transazione che ha effettuato (o un campione), dovrai allegare un record singolo 2 giorni di altre transazioni utente. Gli attributi dovrebbero essere booleani come

UserA,transactionP |UserB,transaction Z| UserB, transaction F | [...]

È davvero utile, grazie! Quindi esegui l'algoritmo una volta per ciascun utente, chiedendogli se un altro utente è correlato a quell'utente, oppure è possibile eseguirlo solo una volta e chiedo "mostrami insiemi di utenti correlati"?
Matt,

Seguendo il mio approccio potresti solo testare uno "schema" avviato da una coppia utente + sessione. Quali utenti e azioni devono essere scelti dipende dalla tua conoscenza di possibili correlazioni.
cesko80,

Tre suggerimenti. 1. Restringi la tua richiesta. Per non essere irrispettosi, ma non esiste una procedura statistica unica e mirabilmente completa che possa dirti tutte le associazioni significative tra le molte, molte possibili inerenti ai tuoi dati. 2. Leggi sull'analisi delle serie storiche. 3. Leggi i metodi per distinguere la causalità dalla mera correlazione. Sfortunatamente, non ho alcuna soluzione rapida da offrire!
rolando2,

1

Un modo di esplorare i tuoi dati è quello di creare una tabella delle azioni precedenti x l'azione successiva. Quindi, per ogni evento, trova l'azione successiva dello stesso utente. Allo stesso modo è possibile tabulare il ritardo X dell'azione precedente fino all'azione successiva.

Quindi potresti esplorare se l'azione precedente influenza quella successiva. In caso contrario, i tuoi utenti sono "apolidi".

Un'altra possibile semplificazione è ignorare gli userid e chiedere se la frequenza di ogni azione è la stessa nel tempo o varia; e se varia se è ciclico o mostra una tendenza.

Le risposte a queste domande potrebbero mostrare che i tuoi dati hanno una struttura ridotta. In alternativa, potrebbero sollevare alcune nuove ipotesi da testare.


1

Questa è una domanda interessante L'approccio migliore è esaminare l'intero set di dati e creare una tabella di frequenza. Ad esempio: l'utente A sta eseguendo l'azione P e Y l'utente B sta eseguendo l'azione Q e Z, l'utente C sta eseguendo l'azione R e X Quindi, allo stesso modo, ci sono più utenti che eseguono più azioni. Quindi, ci sono diversi approcci per gestire questo set di dati 1) Algoritmo del cluster per raggruppare elementi simili in diversi bucket 2) Analisi del paniere di mercato per identificare gli utenti rispetto alla mappatura delle azioni e alla frequenza

Senza passare attraverso l'intero set di dati non è consigliabile prescrivere alcun algoritmo particolare per questo tipo di domande.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.