Förutspå kundomsättning med SQL-baserad Logistisk regression
Genom att förutse kundbortfall kan företag behålla kunder, optimera resurser och öka lönsamheten genom att förbättra nöjdheten och lojaliteten med hjälp av åtgärdbara insikter.
Upptäck hur du använder SQL-baserad logistikregression för att förutsäga kundbortfall. Använd den här omfattande SQL-guiden för att omvandla rådata från e-handel till meningsfulla kundinsikter baserat på viktiga beteendemått (som inköpsfrekvens, genomsnittligt ordervärde och senaste köp). Dokumentet täcker hela processen, från dataförberedelse och funktionsframtagning till modellframtagning, utvärdering och förutsägelse.
Använd den här guiden för att skapa en kraftfull modell för att förutsäga förändringar som identifierar riskkunder, förfinar strategier för kundlojalitet och driver bättre affärsbeslut. Den innehåller stegvisa instruktioner, SQL-frågor och detaljerade förklaringar som hjälper dig att använda maskininlärningstekniker i din datamiljö.
Komma igång
Innan du skapar en omsättningsmodell är det viktigt att du utforskar viktiga kundfunktioner och datakrav. I följande avsnitt beskrivs viktiga kundattribut och obligatoriska datafält för korrekt modellutbildning.
Definiera kundfunktioner define-customer-features
Modellen analyserar köpvanor och trender för att kunna klassificera kurvor korrekt. Tabellen nedan visar de viktigaste funktionerna för kundbeteende som används i modellen:
total_purchasestotal_revenueavg_order_valuecustomer_lifetimedays_since_last_purchasepurchase_frequencyAntaganden och obligatoriska fält assumptions-required-fields
Modellen är beroende av nyckelfält i tabellen webevents som samlar in information om kundtransaktioner för att generera kundbortfallsprognoser. Datauppsättningen måste innehålla följande fält:
identityMap['ECID'][0].idproductListItems.priceTotal[0]productListItems.quantity[0]timestampcommerce.order.purchaseIDDatauppsättningen måste innehålla strukturerade historiska kundtransaktionsposter, där varje rad representerar en köphändelse. Varje händelse måste innehålla tidsstämplar i ett lämpligt datum- och tidsformat som är kompatibelt med SQL DATEDIFF-funktionen (till exempel YYY-MM-DD HHSS). Dessutom måste varje post innehålla ett giltigt Experience Cloud-id (ECID) i fältet identityMap för att unikt identifiera kunder.
Skapa en modell create-a-model
För att förutsäga kundbortfall måste ni skapa en SQL-baserad logistisk regressionsmodell som analyserar kundens inköpshistorik och beteendemått. Modellen klassificerar kunder som churned eller not churned genom att fastställa om de har gjort ett köp de senaste 90 dagarna.
Använd SQL för att skapa kurvförutsägelsemodellen sql-create-model
Den SQL-baserade modellen bearbetar webevents-data genom att samla nyckelmått och tilldela churn-etiketter baserat på en 90-dagars inaktivitetsregel. Denna metod skiljer aktiva kunder från riskkunder. SQL-frågan utför även funktionskonstruktion för att förbättra modellernas exakthet och förbättra bortfallsklassificeringen. Dessa insikter ger er möjlighet att implementera riktade strategier för kundlojalitet, minska bortfallet och maximera kundlivstidsvärdet.
DATEDIFF(CURRENT_DATE, MAX(timestamp)) > 90 i SQL-frågorna.Använd följande SQL-sats för att skapa modellen retention_model_logistic_reg med de angivna funktionerna och etiketterna:
CREATE MODEL retention_model_logistic_reg
TRANSFORM (
vector_assembler(array(total_purchases, total_revenue, avg_order_value, customer_lifetime, days_since_last_purchase, purchase_frequency)) features
-- Combines selected customer metrics into a feature vector for model training
)
OPTIONS (
MODEL_TYPE = 'logistic_reg', -- Specifies logistic regression as the model type
LABEL = 'churned' -- Defines the target label for churn classification
)
AS
WITH customer_features AS (
SELECT
identityMap['ECID'][0].id AS customer_id, -- Extract the unique customer ID from identityMap
AVG(COALESCE(productListItems.priceTotal[0], 0)) AS avg_order_value, -- Calculates the average order value, and handles null values with COALESCE
SUM(COALESCE(productListItems.priceTotal[0], 0)) AS total_revenue, -- The sum of all purchase values per customer
COUNT(COALESCE(productListItems.quantity[0], 0)) AS total_purchases, -- The total number of items purchased by the customer
DATEDIFF(MAX(timestamp), MIN(timestamp)) AS customer_lifetime, -- The days between first and last recorded purchase
DATEDIFF(CURRENT_DATE, MAX(timestamp)) AS days_since_last_purchase, -- The days since the last purchase event
COUNT(DISTINCT CONCAT(YEAR(timestamp), MONTH(timestamp))) AS purchase_frequency -- The count of unique months with purchases
FROM
webevents
WHERE EXISTS(productListItems, value -> value.priceTotal > 0) -- Filters transactions with valid total price
AND commerce.`order`.purchaseID <> '' -- Ensures the order has a valid purchase ID
GROUP BY customer_id
),
customer_labels AS (
SELECT
identityMap['ECID'][0].id AS customer_id, -- Extract the unique customer ID for labeling
CASE
WHEN DATEDIFF(CURRENT_DATE, MAX(timestamp)) > 90 THEN 1 -- Marks the customer as churned if no purchase occurred in the last 90 days
ELSE 0
END AS churned
FROM
webevents
WHERE EXISTS(productListItems, value -> value.priceTotal > 0)
AND commerce.`order`.purchaseID <> ''
GROUP BY customer_id
)
SELECT
f.customer_id,
f.total_purchases,
f.total_revenue,
f.avg_order_value,
f.customer_lifetime,
f.days_since_last_purchase,
f.purchase_frequency,
l.churned
FROM
customer_features f
JOIN
customer_labels l
ON f.customer_id = l.customer_id -- Join features with churn labels
ORDER BY RANDOM() -- Shuffles rows randomly for training
LIMIT 500000; -- Limit the dataset to 500,000 rows for model training
Modellutdata model-output
Utdatadatauppsättningen innehåller kundrelaterade mått och deras bortfallsstatus. Varje rad representerar en kund, deras funktionsvärden och deras bortfallsstatus. Ni kan använda dessa utdata för att analysera kundbeteenden, träna prediktiva modeller och utveckla målinriktade strategier för att behålla riskfyllda kunder. En exempeltabell visas nedan:
customer_id | total_purchases | total_revenue | avg_order_value | customer_lifetime | days_since_last_purchase | purchase_frequency | churned |
|--------------+-----------------+---------------+------------------+-------------------+--------------------------+--------------------+----------
100001 | 25 | 1250.00 | 50.00 | 540 | 20 | 10 | 0
100002 | 3 | 90.00 | 30.00 | 120 | 95 | 1 | 1
100003 | 60 | 7200.00 | 120.00 | 800 | 5 | 24 | 0
100004 | 15 | 750.00 | 50.00 | 365 | 60 | 8 | 0
100005 | 1 | 25.00 | 25.00 | 60 | 180 | 1 | 1
churnedAnvänd SQL för att utvärdera modellen model-evaluation
Utvärdera sedan modellen för omsättningsförutsägelse för att avgöra hur effektiv den är när det gäller att identifiera riskkunder. Utvärdera modellens prestanda med viktiga mätvärden som mäter precision och tillförlitlighet.
Använd funktionen retention_model_logistic_reg för att mäta noggrannheten hos modellen model_evaluate när det gäller att förutsäga kundbortfall. I följande SQL-exempel utvärderas modellen med en datauppsättning som är strukturerad som utbildningsdata:
SELECT *
FROM model_evaluate(retention_model_logistic_reg, 1,
WITH customer_features AS (
SELECT
identityMap['ECID'][0].id AS customer_id,
AVG(COALESCE(productListItems.priceTotal[0], 0)) AS avg_order_value,
SUM(COALESCE(productListItems.priceTotal[0], 0)) AS total_revenue,
COUNT(COALESCE(productListItems.quantity[0], 0)) AS total_purchases,
DATEDIFF(MAX(timestamp), MIN(timestamp)) AS customer_lifetime,
DATEDIFF(CURRENT_DATE, MAX(timestamp)) AS days_since_last_purchase,
COUNT(DISTINCT CONCAT(YEAR(timestamp), MONTH(timestamp))) AS purchase_frequency
FROM
webevents
WHERE EXISTS(productListItems, value -> value.priceTotal > 0)
AND commerce.`order`.purchaseID <> ''
GROUP BY customer_id
),
customer_labels AS (
SELECT
identityMap['ECID'][0].id AS customer_id,
CASE
WHEN DATEDIFF(CURRENT_DATE, MAX(timestamp)) > 90 THEN 1
ELSE 0
END AS churned
FROM
webevents
WHERE EXISTS(productListItems, value -> value.priceTotal > 0)
AND commerce.`order`.purchaseID <> ''
GROUP BY customer_id
)
SELECT
f.customer_id,
f.total_purchases,
f.total_revenue,
f.avg_order_value,
f.customer_lifetime,
f.days_since_last_purchase,
f.purchase_frequency,
l.churned
FROM
customer_features f
JOIN
customer_labels l
ON f.customer_id = l.customer_id); -- Joins customer features with churn labels
Utdata för modellutvärdering
Utvärderingsresultatet innehåller nyckeltal för prestanda, som AUC-ROC, precision, precision och återkallande. Dessa mätvärden ger insikter i modellens effektivitet som ni kan använda för att förfina strategier för kvarhållning och fatta datadrivna beslut.
auc_roc | accuracy | precision | recall
|---------+----------+-----------+--------
1 | 0.99998 | 1 | 1
auc_rocaccuracyprecisionrecallModellförutsägelse model-prediction
När modellen har utvärderats använder du model_predict för att tillämpa den på en ny datamängd och prognostisera kundomsättning. Ni kan använda dessa prognoser för att identifiera riskkunder och implementera riktade strategier för kundlojalitet.
Använd SQL för att generera bortfallsprognoser sql-model-predict
I SQL-frågan nedan används modellen retention_model_logistic_reg för att förutsäga kundbortfall med en datauppsättning som är strukturerad som utbildningsdata:
SELECT *
FROM model_predict(retention_model_logistic_reg, 1, -- Applies the trained model for churn prediction
WITH customer_features AS (
SELECT
identityMap['ECID'][0].id AS customer_id,
AVG(COALESCE(productListItems.priceTotal[0], 0)) AS avg_order_value,
SUM(COALESCE(productListItems.priceTotal[0], 0)) AS total_revenue,
COUNT(COALESCE(productListItems.quantity[0], 0)) AS total_purchases,
DATEDIFF(MAX(timestamp), MIN(timestamp)) AS customer_lifetime,
DATEDIFF(CURRENT_DATE, MAX(timestamp)) AS days_since_last_purchase,
COUNT(DISTINCT CONCAT(YEAR(timestamp), MONTH(timestamp))) AS purchase_frequency
FROM
webevents
WHERE EXISTS(productListItems, value -> value.priceTotal > 0) -- Ensures only valid purchase data is considered
AND commerce.`order`.purchaseID <> ''
GROUP BY customer_id
),
customer_labels AS (
SELECT
identityMap['ECID'][0].id AS customer_id,
CASE
WHEN DATEDIFF(CURRENT_DATE, MAX(timestamp)) > 90 THEN 1 -- Identify customers who have not purchased in the last 90 days
ELSE 0
END AS churned
FROM
webevents
WHERE EXISTS(productListItems, value -> value.priceTotal > 0)
AND commerce.`order`.purchaseID <> ''
GROUP BY customer_id
)
SELECT
f.customer_id,
f.total_purchases,
f.total_revenue,
f.avg_order_value,
f.customer_lifetime,
f.days_since_last_purchase,
f.purchase_frequency,
l.churned
FROM
customer_features f
JOIN
customer_labels l
ON f.customer_id = l.customer_id); -- Matches features with their churn labels for prediction
Utdata för modellförutsägelse prediction-output
Datauppsättningen för utdata innehåller viktiga kundfunktioner och deras förväntade bortfallsstatus, vilket anger om det är troligt att en kund kommer att försvinna. Använd dessa insikter för att implementera proaktiva strategier för kundlojalitet och minska bortfallet från kunderna.
total_purchases | total_revenue | avg_order_value | customer_lifetime | days_since_last_purchase | purchase_frequency | churned | prediction
|-----------------+---------------+-----------------+-------------------+--------------------------+--------------------+---------+------------
2 | 299 | 149.5 | 0 | 13 | 1 | 0 | 0
1 | 710 | 710.00 | 0 | 149 | 1 | 1 | 1
1 | 19.99 | 19.99 | 0 | 30 | 1 | 0 | 0
1 | 4528 | 4528.00 | 0 | 26 | 1 | 0 | 0
1 | 21.84 | 21.84 | 0 | 90 | 1 | 0 | 0
1 | 16.64 | 16.64 | 0 | 268 | 1 | 1 | 1
predictionNästa steg
Du har nu lärt dig att skapa, utvärdera och använda en SQL-baserad modell för att förutsäga kundbortfall. Med denna grund kan ni analysera kundbeteenden, identifiera riskkunder och implementera förebyggande strategier för att behålla kunderna. Om du vill förbättra och tillämpa din modell för bortfallsförutsägelse ytterligare ska du göra följande:
- Automatisera processen: Integrera modellen i en dataledning för kontinuerlig övervakning och realtidsinsikter. Utforska hur du verifierar och bearbetar datauppsättningar med SQL.
- Övervaka modellens prestanda: Utvärdera modellen kontinuerligt med nya data för att bibehålla noggrannheten och relevansen. Använd AI Assistant i Adobe Experience Platform-gränssnittet för att övervaka viktiga prestandaändringar och prognostisera målgruppstrender.