Panel Dynamic Logistic Regression

Customer Analytics Classification

Customers who bought last week are likelier to buy this week. Find out whether that is habit (buying makes them buy again) or loyalty (some customers were always going to buy), because the two call for opposite marketing.

👨‍🏫 Professor Mode: Guided Learning Experience

New to habit and loyalty? Professor Mode walks you through why repeat buying is not proof of habit, and how the three models pull the two apart.

QUICK START: Choose Your Path

OVERVIEW & LEARNING OBJECTIVES

A brand manager wants to mail 20,000 "first bottle free" coupons, about $70,000, because the loyalty-card data shows that a shopper who bought last week is far likelier to buy this week. A free trial that turns a shopper into a regular pays for itself many times over. One that goes to someone who was going to buy anyway is $3.50 handed away. This tool tells the two apart.

🎯 What You'll Learn
  • "Bought last week" has two explanations, and they need different marketing. Habit means trials pay back; loyalty means finding the right customers pays back.
  • A pooled model always leans toward habit. Stacking customers lets the loyal ones' streaks pose as habit.
  • Separating them needs each customer's own baseline. A column that records why customers differ (a segment) helps; when nothing records it, the random-effects model estimates it from each customer's history.
  • Crude fixes help only when they carry information. A customer's first week and their average driver levels pull the estimate back when offers were targeted, and barely at all when they were not.
  • Targeted offers look more powerful than they are. If the best customers get the most coupons, coupons and buying go together whether or not coupons work.
  • Forecast the same customers' next periods, and beat their own history. A customer's own purchase rate so far is a very hard forecast to beat.

The three models, each a logistic regression for customer \(i\) in period \(t\):

  • A, every customer alike: \( \text{logit}\,P(y_{it}) = \alpha + \phi\, y_{i,t-1} + \beta x_{it} \)
  • B, plus what the data records about each customer: A \( + \gamma_0 y_{i0} + \gamma \bar{x}_i \) (+ segment), where \(y_{i0}\) is the customer's first period and \(\bar{x}_i\) their average level of each driver
  • C, each customer gets their own baseline (random effects): B \( + u_i \), with \( u_i \sim N(0, \sigma^2) \)

\(\phi\) is the habit (state dependence). \(\sigma\) is how much customers differ beyond what the data records (loyalty). Only C can tell them apart when no column says why customers differ.

📘 Key concepts
  • Habit (state dependence): buying changes the customer, so a purchase today makes the next one likelier.
  • Loyalty (heterogeneity): customers differ, so last week's purchase mostly tells you which kind of customer this is.
  • Habit effect: how many percentage points last period's purchase adds to this period's chance, on the same scale for all three models.
  • Trial value: extra purchases that follow one induced purchase. Only real habit makes a trial echo.
  • Holdout: the last few periods are held back for every customer and forecast one at a time from the period before.
🧭 When to use it, and when not to

Use it when many customers' yes/no behaviour is recorded period after period: bought this week, ordered this month, opened the app, renewed.

  • One series, not many customers: use Dynamic Logistic Regression.
  • Time until customers leave for good: use Retention & Survival.
  • A number per customer per period (spend, units): not this tool; its outcome is yes/no.
  • Why not give every customer their own fixed term? With last period's outcome in the model, that approach is itself biased when each customer's history is short, so this tool does not offer it. (Analysts call this the Nickell problem.)

Step 1DATA SOURCE

Start with a case: each was generated from a known model (or, for Crave, comes from the CLV tool with its model known), so at the end you can check the three models against the truth. Or bring your own panel: one row per customer per period.

📚

Use a Case Study

Four cases: a free-trial campaign for a grocery cold brew, a food-delivery app's win-back credits, a pet shop's VIP coupon, and a bookshop whose readers may all be much alike.

📤

Upload Your Data

Drag & Drop raw data file (.csv, .tsv, .txt)

Long format: one row per customer per period, with a customer id, a period and a yes/no outcome, plus optional driver columns and a segment. CLV's activity panels load as they are. At least 100 customers; at most 100,000 rows.

No file uploaded.

INPUTS & SETTINGS

Step 2Tell the model who, when and what

Pick the column that says who each row is, the column that says when, and the yes/no outcome. Then pick the drivers: things that could change a customer's chance of a "yes" in a given period, such as a coupon. Then say in a word or two what a "yes" is, and whether it is good or bad news: the write-ups use your words.

Drivers

Tick a driver to include it. "Same period" means this period's value; "1 period earlier" means the customer's value in the period before.

Driver Same period 1 period earlier
Load data to see its columns.

Step 3Decide what the model may know about each customer

Model A treats every customer alike. Model B adds what the data records about each one. Model C also gives every customer their own baseline. Switch pieces off to see what each one does to the habit estimate.

Advanced

🤔 Try this:

  1. Load Thistledown Market and run with every box ticked. Note the habit effect under A, B and C.
  2. Untick Fit model C and run again. Read the "Start here" box: what can the page no longer tell you?
  3. Load Crave and run. Then untick The segment column and run again. Which model moved, and which did not?

Load a case or upload a panel to begin.