Creazione di modelli di attribuzione con la tabella dei percorsi

Le tabelle *_paths forniscono informazioni sulle interazioni degli utenti con i contenuti multimediali che gestisci utilizzando Display & Video 360 e Campaign Manager 360. Queste interazioni, note anche come touchpoint, vengono unite in percorsi di eventi, indicando il tragitto seguito da un gruppo di utenti nella canalizzazione di conversione. Le tabelle *_paths utilizzano gli stessi dati di cui puoi disporre tramite Data Transfer, ma forniti in percorsi preassemblati. I percorsi di eventi sono disponibili sia per gli utenti che effettuano conversioni sia per quelli che non ne effettuano e possono includere più conversioni.

Proprio come con tutti i dati utente in Ads Data Hub, anche i dati delle tabelle *_paths sono soggetti ai requisiti di aggregazione.

Dettagli tecnici

Ogni riga paths contiene un singolo percorso del cliente in una finestra di 30 giorni. Questi dati vengono aggiornati quotidianamente per coprire gli ultimi 30 giorni. I percorsi di eventi vengono assemblati utilizzando i cookie e, di conseguenza, sono limitati a un singolo dispositivo. In alcune situazioni, ad esempio quando gli utenti hanno disattivato la personalizzazione degli annunci, gli ID utente verranno impostati su 0. Normalmente questi utenti saranno ancora separati da righe, quindi due percorsi di conversione distinti associati a un ID utente pari a 0 avranno righe distinte. Tuttavia, per determinati tipi di analisi, come il raggruppamento per user_id = 0, più percorsi di conversione verranno uniti in uno unico, creando possibili discrepanze nei dati. Scopri di più sugli ID utente pari a zero

Ogni riga della colonna *_paths.events contiene un array di struct, in cui ogni struct è un singolo evento nel percorso dell'utente. Gli struct che compongono il percorso vengono ordinati per timestamp (il primo evento dell'array è il meno recente).

Query di esempio

Le seguenti query misurano l'impatto dei posizionamenti sulle conversioni di un determinato segmento utenti. Le query attribuiscono il merito utilizzando tre diversi modelli di attribuzione:

  • Primo touchpoint (tutto il merito va al primo touchpoint).
  • Ultimo touchpoint (tutto il merito va all'ultimo touchpoint).
  • Lineare (il merito viene diviso equamente tra i touchpoint).

Dati di esempio

Riga user_id *_paths.events.event_time *_paths.events.event_type *_paths.events.placement_id
1 1 1563384139 FLOODLIGHT null
1563384129 CLICK 11
1563384119 VIEW 22
2 2 1563384139 FLOODLIGHT null
1563384129 VIEW 11
1563384119 FLOODLIGHT null
1563384109 VIEW 11

Query di esempio

/* Substitute *_paths for the specific paths table that you want to query. */
SELECT
 
(
 
SELECT
    attributed_event_metadata
.placement_id
 
FROM (
   
SELECT
     
AS STRUCT attributed_event.placement_id,
      ROW_NUMBER
() OVER(ORDER BY attributed_event.event_time ASC) AS rank
   
FROM
      UNNEST
(t.*_paths.events) AS attributed_event
   
WHERE
      attributed_event
.event_type != "FLOODLIGHT"
     
AND attributed_event.event_time < conversion_event.event_time
     
AND attributed_event.event_time > (
     
SELECT
        IFNULL
( (
         
SELECT
            MAX
(prev_conversion_event.event_time) AS event_time
         
FROM
            UNNEST
(t.*_paths.events) AS prev_conversion_event
         
WHERE
            prev_conversion_event
.event_type = "FLOODLIGHT"
           
AND prev_conversion_event.event_time < conversion_event.event_time),
         
0)) ) AS attributed_event_metadata
 
WHERE
    attributed_event_metadata
.rank = 1) AS placement_id,
  COUNT
(*) AS credit
FROM
  adh
.*_paths AS t,
  UNNEST
(*_paths.events) AS conversion_event
WHERE
  conversion_event
.event_type = "FLOODLIGHT"
GROUP BY
  placement_id
HAVING
  placement_id
IS NOT NULL
ORDER BY
  credit
DESC
/* Substitute *_paths for the specific paths table that you want to query. */
SELECT
 
(
 
SELECT
    attributed_event_metadata
.placement_id
 
FROM (
   
SELECT
     
AS STRUCT attributed_event.placement_id,
      ROW_NUMBER
() OVER(ORDER BY attributed_event.event_time DESC) AS rank
   
FROM
      UNNEST
(t.*_paths.events) AS attributed_event
   
WHERE
      attributed_event
.event_type != "FLOODLIGHT"
     
AND attributed_event.event_time < conversion_event.event_time
     
AND attributed_event.event_time > (
     
SELECT
        IFNULL
( (
         
SELECT
            MAX
(prev_conversion_event.event_time) AS event_time
         
FROM
            UNNEST
(t.*_paths.events) AS prev_conversion_event
         
WHERE
            prev_conversion_event
.event_type = "FLOODLIGHT"
           
AND prev_conversion_event.event_time < conversion_event.event_time),
         
0)) ) AS attributed_event_metadata
 
WHERE
    attributed_event_metadata
.rank = 1) AS placement_id,
  COUNT
(*) AS credit
FROM
  adh
.*_paths AS t,
  UNNEST
(*_paths.events) AS conversion_event
WHERE
  conversion_event
.event_type = "FLOODLIGHT"
GROUP BY
  placement_id
HAVING
  placement_id
IS NOT NULL
ORDER BY
  credit
DESC
/* Substitute *_paths for the specific paths table that you want to query. */
SELECT
  attributed_event_metadata
.placement_id AS placement_id,
 
/* Give equal credit to all attributed events */
  SUM
(SAFE_DIVIDE(1, ARRAY_LENGTH(attributed_events_metadata)))
FROM (
 
SELECT
    ARRAY
(
   
SELECT
     
AS STRUCT attributed_event.placement_id,
      ROW_NUMBER
() OVER(ORDER BY attributed_event.event_time DESC) AS rank
   
FROM
      UNNEST
(t.*_paths.events) AS attributed_event
   
WHERE
      attributed_event
.event_type!="FLOODLIGHT"
     
AND attributed_event.event_time < conversion_event.event_time
     
AND attributed_event.event_time > (
     
SELECT
        MAX
(prev_conversion_event.event_time) AS event_time
     
FROM
        UNNEST
(t.*_paths.events) AS prev_conversion_event
     
WHERE
        prev_conversion_event
.event_type="FLOODLIGHT"
       
AND prev_conversion_event.event_time < conversion_event.event_time)) AS attributed_events_metadata
 
FROM
    adh
.*_paths AS t,
    UNNEST
(*_paths.events) AS conversion_event
 
WHERE
    conversion_event
.event_type="FLOODLIGHT" ),
  UNNEST
(attributed_events_metadata) AS attributed_event_metadata
GROUP BY
 
1
HAVING
  placement_id
IS NOT NULL
ORDER BY
 
2 DESC

Risultati

Se eseguissi la query sui dati di esempio, otterresti i seguenti risultati:

riga placement_id merito
1 11 2
2 22 1
riga placement_id merito
1 11 3
riga placement_id merito
1 11 2,5
2 22 0,5