Luke Volm
2025-12-09
Customer information for a clothing store in New England
Includes sales, visit frequency, product mix, and promotion history
Goal: predict response to a direct-mail promotion to optimize targeting
| Variable | Meaning | Type |
|---|---|---|
| FRE | Number of purchase visits | Numeric |
| MON | Total net sales ($ spent) | Numeric ($) |
| STYLES | Number of individual items purchased | Numeric |
| PROMOS | Marketing promotions on file | Numeric |
| DAYS | Customer tenure (days in the system) | Numeric |
| PERCRET | Percent of products returned | Numeric (%) |
| HI | Product uniformity | Numeric |
| GMP | Gross margin percentage | Numeric |
| CLASSES | Number of different product classes purchased | Numeric |
| STORES | Number of stores shopped at | Numeric |
Exploratory Findings
Customer purchase & spending features are strongly right-skewed
Promotional history varies widely
Several purchase metrics move together → risk of multicollinearity
Model Implications
Use log transformations on skewed purchasing variables
Check redundancy among correlated predictors
Model choice: Logistic Regression for response prediction
Purchase & spending metrics move together (e.g., FRE, MON, STYLES)
More visits ⇒ more items ⇒ more total sales
Right-skewed distributions → transformations before modeling
| Original | Transformed | Transformation | Rationale |
|---|---|---|---|
| FRE | FRE_log | log1p(FRE) | Right-skewed visit counts |
| MON | MON_log | log1p(MON) | Right-skewed spending |
| STYLES | STYLES_log | log1p(STYLES) | Right-skewed item counts |
| CLASSES | CLASSES_log | log1p(CLASSES) | Right-skewed product mix |
| STORES | STORES_log | log1p(STORES) | Right-skewed store count |
| HI | HI_log | log1p(HI) | Right-skewed product uniformity |
| PERCRET | PERCRET_logit | qlogis(PERCRET / 100) | Bounded 0–100% proportion |
| Raw_Format | Cleaned_Level |
|---|---|
| ‘Yes’, 1 | yes |
| ‘No’, 0 | no |
70% of customers used to train the model
30% held out for testing (not touched during training)
Evaluates real predictive performance on unseen customers
All transformations were applied only to the training data
| Estimate | Std. Error | z value | Pr(>|z|) | Signif. | |
|---|---|---|---|---|---|
| (Intercept) | -3.19999933745048 | 0.967864801058703 | -3.30624621739539 | 0.000945549607610377 | *** |
| MON_log | -0.00653223554857481 | 0.257446225207256 | -0.0253732038343777 | 0.979757284467346 | |
| FRE_log | 1.42378098032587 | 0.244569857022652 | 5.82157178999372 | 5.82967546714758e-09 | *** |
| STYLES_log | 0.590069977353168 | 0.327111167077948 | 1.80388209495935 | 0.0712497924504306 | . |
| CLASSES_log | -0.415360661740594 | 0.382489599581305 | -1.08593975416658 | 0.277505647246113 | |
| STORES_log | 0.0390270676842855 | 0.2368921677216 | 0.164746129260596 | 0.869143807123073 | |
| HI_log | -0.215554924025072 | 0.221089101503031 | -0.974968564979748 | 0.329575853146838 | |
| PERCRET_logit | -0.0187766155360595 | 0.0281758433119881 | -0.666408289120152 | 0.505150165693981 | |
| PROMOS | -0.0374718694153468 | 0.0152067684992752 | -2.46415728740349 | 0.0137335829849217 | * |
| DAYS | -0.000874025954924173 | 0.000515180766016738 | -1.69654228685971 | 0.0897832289588001 | . |
| GMP | -0.667540973632493 | 0.561206841675275 | -1.18947404782129 | 0.234253177510772 |
## MON_log FRE_log STYLES_log CLASSES_log STORES_log
## 12.04 5.52 15.81 9.95 1.52
## HI_log PERCRET_logit PROMOS DAYS GMP
## 3.56 2.07 2.27 1.86 1.70
| Estimate | Std. Error | z value | Pr(>|z|) | Signif. | |
|---|---|---|---|---|---|
| (Intercept) | -4.57821184559361 | 0.249819684131899 | -18.326065303871 | 5.12676963464791e-75 | *** |
| FRE_log | 1.35109844283195 | 0.214594391078006 | 6.29605664921978 | 3.05312832628115e-10 | *** |
| STYLES_log | 0.4557129724829 | 0.168925771235963 | 2.69771136250335 | 0.00698179472782768 | ** |
| PROMOS | -0.0547471355208317 | 0.0130184330353159 | -4.20535523532791 | 2.60672397566313e-05 | *** |
## FRE_log STYLES_log PROMOS
## 4.29 4.29 1.66
| Model | Accuracy |
|---|---|
| Full Model | 0.8603 |
| Reduced Model | 0.8609 |
Reduced Logistic Regression Model
Reduced model slightly outperformed full model
Reduced model gets rid of redundant variables
Lower multicollinearity and easier to interpret
| Predictor | Odds_Ratio | Lower_95 | Upper_95 | |
|---|---|---|---|---|
| FRE_log | FRE_log | 3.86 | 2.55 | 5.92 |
| STYLES_log | STYLES_log | 1.58 | 1.13 | 2.20 |
| PROMOS | PROMOS | 0.95 | 0.92 | 0.97 |
FRE_log (purchase frequency)
- Higher shopping frequency strongly increases the odds of
responding
- Customers who shop more often are much more likely to engage with
promotions
STYLES_log (product variety)
- Buying a wider variety of items is associated with higher response
odds
- Variety shoppers seem more engaged with the brand overall
PROMOS (number of promotions on file) - - Odds ratio
< 1 → each additional promo slightly reduces response odds
- Suggests promotion fatigue
| no | yes | |
|---|---|---|
| no | 626 | 83 |
| yes | 43 | 34 |
Customer behavioral features can effectively predict promotion response
More frequent shoppers and those buying more styles are much more likely to respond
Customers with many promotions on file are less likely to respond → evidence of promotion fatigue
Reduced model:
Model is based on data from a single retailer → may not generalize to other regions or brands
Only uses a subset of available variables:
Future improvements: