Gli attributi derivati semplificano casi d’uso complicati per l’analisi di dati provenienti dal data lake che possono essere utilizzati con altri servizi Platform a valle o pubblicati nei dati del profilo cliente in tempo reale.
Questo caso d’uso di esempio illustra come creare attributi derivati basati su decile da utilizzare con i dati del profilo cliente in tempo reale. Utilizzando come esempio uno scenario di fidelizzazione di una compagnia aerea, questa guida ti spiega come creare un set di dati che utilizza decili per categoria per segmentare e creare tipi di pubblico in base agli attributi classificati.
Sono illustrati i seguenti concetti chiave:
Questa guida richiede una buona conoscenza di esecuzione di query in Query Service e i seguenti componenti di Adobe Experience Platform:
L’esempio fornito in questo documento utilizza i decili per creare attributi derivati per la classificazione dei dati da uno schema di fedeltà per compagnie aeree. Gli attributi derivati consentono di massimizzare l’utilità dei dati identificando un pubblico in base alla "n" % superiore per una categoria selezionata.
Per definire la classificazione dei decili in base a una dimensione particolare e a una metrica corrispondente, è necessario progettare uno schema per consentire il bucket decile.
Questa guida utilizza un set di dati sulla fedeltà delle compagnie aeree per dimostrare come utilizzare Query Service per creare decili in base alle miglia percorse in vari periodi di lookback.
Query Service consente di creare un set di dati contenente decili per categoria, che possono quindi essere segmentati per creare tipi di pubblico in base alla classificazione degli attributi. I concetti visualizzati negli esempi seguenti possono essere applicati per creare altri set di dati a bucket decile, purché sia definita una categoria e sia disponibile una metrica.
L’esempio di dati sulla fedeltà delle compagnie aeree utilizza un Classe XDM ExperienceEvents. Ogni evento è una registrazione di una transazione commerciale per chilometraggio, accreditata o addebitata, e lo stato di fedeltà di appartenenza di "Flyer", "Frequent", "Silver" o "Gold". Il campo dell’identità primaria è membershipNumber
.
Il set di dati iniziale sulla fedeltà della compagnia aerea per questo esempio è "Dati sulla fedeltà della compagnia aerea" e ha il seguente schema. L’identità primaria dello schema è _profilefoundationreportingstg.membershipNumber
.
Dati di esempio
Nella tabella seguente vengono visualizzati i dati di esempio contenuti nel _profilefoundationreportingstg
oggetto utilizzato per questo esempio. Fornisce il contesto per l'utilizzo di bucket decile per creare attributi derivati complessi.
Per brevità, l’ID tenant _profilefoundationreportingstg
è stato omesso dall’inizio dello spazio dei nomi nei titoli delle colonne e nelle successive menzioni in tutto il documento.
.membershipNumber |
.emailAddress.address |
.transactionDate |
.transactionType |
.transactionDetails |
.mileage |
.loyaltyStatus |
---|---|---|---|---|---|---|
C435678623 | sfeldmark1vr@studiopress.com | 2022-01-01 | STATUS_MILES | Nuovo membro | 5000 | VOLANTINO |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-01 | AWARD_MILES | JFK-FRA | 7500 | ARGENTO |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-01 | STATUS_MILES | JFK-FRA | 7500 | ARGENTO |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-10 | AWARD_MILES | FRA-JFK | 5000 | ARGENTO |
A123487284 | rritson1zn@sciencedaily.com | 2022-01-07 | STATUS_MILES | Nuova carta di credito | 10000 | VOLANTINO |
Nei dati sulla fedeltà delle compagnie aeree riportati sopra, la .mileage
il valore contiene il numero di miglia percorse da un membro per ogni singolo volo effettuato. Questi dati vengono utilizzati per creare decili per il numero di miglia percorse durante i lookback a vita e per una varietà di periodi di lookback. A questo scopo, viene creato un set di dati che contiene decili in un tipo di dati mappa per ogni periodo di lookback e un decile appropriato per ogni periodo di lookback assegnato in membershipNumber
.
Crea uno "Schema del decile per la fedeltà della compagnia aerea" per creare un set di dati decile utilizzando Query Service.
I dati acquisiti in Experience Platform per l’utilizzo da parte di Real-Time Customer Profile devono essere conformi a uno schema Experience Data Model (XDM) abilitato per il profilo. Per abilitare uno schema per il profilo, è necessario implementare la classe XDM Individual Profile o XDM ExperienceEvent.
Abilita lo schema per l’utilizzo in Real-Time Customer Profile utilizzando lo Schema Registry API (API del registro degli schemi). o Interfaccia utente dell’Editor di schema. Le istruzioni dettagliate su come abilitare uno schema per il profilo sono disponibili nella rispettiva documentazione.
Quindi, crea un tipo di dati da riutilizzare per tutti i gruppi di campi correlati al decile. La creazione del gruppo di campi decile è un passaggio unico per sandbox. Può essere riutilizzato anche per tutti gli schemi relativi al decile.
A qualsiasi schema creato per l'utilizzo con decili deve essere assegnata un'identità primaria. È possibile definire un campo di identità nell’interfaccia utente degli schemi di Adobe Experience Platform, o tramite API del registro dello schema.
Query Service consente inoltre di impostare un’identità o un’identità primaria per i campi di set di dati dello schema ad hoc direttamente tramite SQL. Consulta la documentazione su impostazione di un’identità secondaria e primaria in identità di schema ad hoc per ulteriori informazioni.
L’esempio seguente illustra la query SQL per calcolare un decile in un periodo di lookback.
È possibile creare un modello utilizzando l’Editor query nell’interfaccia utente o tramite API servizio query.
CREATE TABLE AS airline_loyality_decile
{ WITH summed_miles_1 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 0))
GROUP BY 1,2
),
summed_miles_3 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 1))
GROUP BY 1,2
),
summed_miles_6 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 4))
GROUP BY 1,2
),
rankings_1 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_1
),
rankings_3 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_3
),
rankings_6 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_6
),
map_1 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
FROM rankings_1
GROUP BY membershipNumber
),
map_3 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth3
FROM rankings_3
GROUP BY membershipNumber
),
map_6 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth6
FROM rankings_6
GROUP BY membershipNumber
),
all_memberships AS (
SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
)
SELECT STRUCT(
all_memberships.membershipNumber AS membershipNumber,
STRUCT(
map_1.decileMonth1 AS decileMonth1,
map_3.decileMonth3 AS decileMonth3,
map_6.decileMonth6 AS decileMonth6
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM all_memberships
LEFT JOIN map_1 ON (all_memberships.membershipNumber = map_1.membershipNumber)
LEFT JOIN map_3 ON (all_memberships.membershipNumber = map_3.membershipNumber)
LEFT JOIN map_6 ON (all_memberships.membershipNumber = map_6.membershipNumber)
}
Le sezioni della query di esempio vengono esaminate più dettagliatamente di seguito.
Il tipo di dati decile contiene un bucket per i lookback a 1, 3, 6, 9, 12 e durata. La query utilizza periodi di lookback di 1, 3 e 6 mesi, pertanto ogni sezione conterrà alcune query "ripetute" per creare tabelle temporanee per ogni periodo di lookback.
Se i dati di origine non dispongono di una colonna che può essere utilizzata per determinare un periodo di lookback, tutte le classificazioni delle classi decile verranno eseguite in decileMonthAll
.
Utilizza espressioni di tabella comuni (CTE, Common Table Expression) per aggregare il chilometraggio prima di creare periodi fissi. Questo fornisce i chilometri totali per un periodo di lookback specifico. I CTE esistono temporaneamente e sono utilizzabili solo nell’ambito della query più grande.
summed_miles_1 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 0))
GROUP BY 1,2
)
Il blocco viene ripetuto due volte nel modello (summed_miles_3
e summed_miles_6
) con una modifica nel calcolo della data al fine di generare i dati per gli altri periodi di lookback.
È importante notare le colonne di identità, dimensione e metrica per la query (membershipNumber
, loyaltyStatus
e totalMiles
rispettivamente).
I decili consentono di eseguire il bucket categoriale. Per creare il numero di classificazione, NTILE
viene utilizzata con un parametro di 10
in una FINESTRA raggruppata per loyaltyStatus
campo. Questo si traduce in una classificazione da 1 a 10. Imposta il ORDER BY
clausola del WINDOW
a DESC
per garantire che un valore di classificazione di 1
viene assegnato al più grande all’interno della dimensione.
rankings_1 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_1
)
Con più periodi di lookback, devi creare in anticipo le mappe del decile bucket utilizzando MAP_FROM_ARRAYS
e COLLECT_LIST
funzioni. Nello snippet di esempio: MAP_FROM_ARRAYS
crea una mappa con una coppia di chiavi (loyaltyStatus
) e valori (decileBucket
). COLLECT_LIST
restituisce un array con tutti i valori nella colonna specificata.
map_1 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
FROM rankings_1
GROUP BY membershipNumber
)
L’aggregazione della mappa non è necessaria se la classificazione decile è richiesta solo per un periodo di vita.
L’elenco delle identità univoche (membershipNumber
) è necessario per creare un elenco univoco di tutte le appartenenze.
all_memberships AS (
SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
)
Se la classificazione decile è necessaria solo per un periodo di durata, questo passaggio può essere omesso e l’aggregazione può essere eseguita da membershipNumber
possono essere eseguite nel passaggio finale.
Il passaggio finale consiste nell’unire tutti i dati temporanei in un modulo identico alla struttura dei decili nel gruppo di campi.
SELECT STRUCT(
all_memberships.membershipNumber AS membershipNumber,
STRUCT(
map_1.decileMonth1 AS decileMonth1,
map_3.decileMonth3 AS decileMonth3,
map_6.decileMonth6 AS decileMonth6
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM all_memberships
LEFT JOIN map_1 ON (all_memberships.membershipNumber = map_1.membershipNumber)
LEFT JOIN map_3 ON (all_memberships.membershipNumber = map_3.membershipNumber)
LEFT JOIN map_6 ON (all_memberships.membershipNumber = map_6.membershipNumber)
Se sono disponibili solo i dati relativi al ciclo di vita, la query verrà visualizzata come segue:
SELECT STRUCT(
rankings.membershipNumber AS membershipNumber,
STRUCT(
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonthAll
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM rankings
GROUP BY rankings.membershipNumber
Nei risultati della query viene garantita una correlazione tra il numero di classificazione e il percentile a causa dell’utilizzo di decili. Ogni classificazione equivale al 10%, pertanto l’identificazione di un pubblico in base al 30% più numeroso deve mirare solo ai livelli 1, 2 e 3.
Esegui la query per popolare il set di dati decile. Puoi anche salvare la query come modello e pianificarla per l’esecuzione a una cadenza. Quando viene salvata come modello, la query può anche essere aggiornata per utilizzare il pattern di creazione e inserimento che fa riferimento al table_exists
comando. Ulteriori informazioni su come utilizzare il table_exists
Il comando si trova nel Guida alla sintassi SQL.
Il caso di utilizzo di esempio fornito sopra evidenzia i passaggi per rendere disponibili gli attributi decile in Real-Time Customer Profile. Questo consente al servizio di segmentazione, tramite un’interfaccia utente o un’API RESTful, di generare tipi di pubblico in base a questi decile bucket. Consulta la Panoramica del servizio di segmentazione per informazioni su come creare, valutare e accedere ai segmenti.