1 Executive Summary

This report investigates how promotional campaigns and coupon strategies drive customer purchases at Regork.
The analysis identifies which campaign types and brand categories (National vs. Private) perform best across different household income levels.

Through transactional and redemption data, we estimate: - The redemption intensity per income group,
- The revenue uplift from redeemed vs. unredeemed baskets, and
- The efficiency of marketing investment across brand types.

The results provide clear guidance on where marketing resources are over- or under-allocated, highlighting high-performing customer segments to prioritize.

Key takeaways (auto-filled once code runs):
- The report computes redemption and revenue lift by campaign and segment, quantifies under/over-investment vs. redemption & revenue share, and highlights National vs. Private Brand differences along household income.

2 Data & Packages

The dataset is sourced from the completejourney package, which simulates consumer purchase behavior, campaign participation, and coupon redemption patterns.
It includes multiple linked tables:

Dataset Description
transactions All customer-level purchase transactions
products Product hierarchy and brand details
demographics Customer household attributes (income, age, marital status)
coupons Coupons distributed under different campaigns
redemptions Coupons that were actually redeemed
campaigns Marketing campaign metadata

These datasets are cleaned, standardized, and merged into a single analytical view to evaluate campaign impact and efficiency.

##  Columns in redemptions:
## [1] "household_id"    "coupon_upc"      "campaign_id"     "redemption_date"
## 
##  Columns in coupons:
## [1] "coupon_upc"  "product_id"  "campaign_id"
## 
##  Sample coupon_upc values:
## [1] "51380041013" "51380041313" "53377610033" "51380041013" "54300016033"
## [1] "10000085207" "10000085207" "10000085207" "10000085207" "10000085207"
## 
##  redeemed data preview:
## # A tibble: 6 × 14
##   household_id.x coupon_upc  campaign_id.x redemption_date product_id
##   <chr>          <chr>       <chr>         <date>          <chr>     
## 1 1029           51380041013 26            2017-01-01      12781564  
## 2 1029           51380041013 26            2017-01-01      12781828  
## 3 1029           51380041013 26            2017-01-01      12781829  
## 4 1029           51380041013 26            2017-01-01      12782182  
## 5 1029           51380041013 26            2017-01-01      12783359  
## 6 1029           51380041013 26            2017-01-01      12798506  
## # ℹ 9 more variables: campaign_id.y <chr>, campaign_id <chr>,
## #   household_id.y <chr>, start_date <date>, end_date <date>,
## #   campaign_type <ord>, brand <fct>, department <chr>, product_category <chr>
## 🧭 campaign_id type in transactions_ctx: character
## 🧭 campaign_id type in campaigns_full: character
##  Unique campaign_ids in campaigns_full: 27
## campaigns_full now has 27 unique campaign IDs.
##  Joining transactions_ctx with cleaned campaigns_full by 'campaign_id'...
##  Join completed successfully. Result now has 24 columns.
## Renamed household_id.x → household_id
## Redemption join completed successfully.
## 
##  transactions_ctx created successfully!
##  Dimensions:  3185643 x 27
##  Preview of first rows:
##    household_id store_id   basket_id product_id quantity sales_value
## 1           900      330 31198570044    1095275        1        0.50
## 2           900      330 31198570047    9878513        1        0.99
## 3          1228      406 31198655051    1041453        1        1.43
## 4           906      319 31198705046    1020156        1        1.50
## 5           906      319 31198705046    1020156        1        1.50
## 6           906      319 31198705046    1020156        1        1.50
## 7           906      319 31198705046    1020156        1        1.50
## 8           906      319 31198705046    1020156        1        1.50
## 9           906      319 31198705046    1020156        1        1.50
## 10          906      319 31198705046    1053875        2        2.78
##    retail_disc coupon_disc coupon_match_disc week transaction_timestamp
## 1         0.00           0                 0    1   2017-01-01 06:53:26
## 2         0.10           0                 0    1   2017-01-01 07:10:28
## 3         0.15           0                 0    1   2017-01-01 07:26:30
## 4         0.29           0                 0    1   2017-01-01 07:30:27
## 5         0.29           0                 0    1   2017-01-01 07:30:27
## 6         0.29           0                 0    1   2017-01-01 07:30:27
## 7         0.29           0                 0    1   2017-01-01 07:30:27
## 8         0.29           0                 0    1   2017-01-01 07:30:27
## 9         0.29           0                 0    1   2017-01-01 07:30:27
## 10        0.80           0                 0    1   2017-01-01 07:30:27
##    transaction_date    brand department         product_category    income
## 1        2017-01-01 National     PASTRY                    ROLLS    35-49K
## 2        2017-01-01  Private    GROCERY   FACIAL TISS/DNR NAPKIN    35-49K
## 3        2017-01-01  Private    GROCERY               BAG SNACKS  100-124K
## 4        2017-01-01 National    GROCERY REFRGRATD DOUGH PRODUCTS Under 15K
## 5        2017-01-01 National    GROCERY REFRGRATD DOUGH PRODUCTS Under 15K
## 6        2017-01-01 National    GROCERY REFRGRATD DOUGH PRODUCTS Under 15K
## 7        2017-01-01 National    GROCERY REFRGRATD DOUGH PRODUCTS Under 15K
## 8        2017-01-01 National    GROCERY REFRGRATD DOUGH PRODUCTS Under 15K
## 9        2017-01-01 National    GROCERY REFRGRATD DOUGH PRODUCTS Under 15K
## 10       2017-01-01 National    GROCERY   SEAFOOD - SHELF STABLE Under 15K
##    marital_status   age  coupon_upc campaign_id household_id.y campaign_type
## 1         Married 35-44        <NA>        <NA>           <NA>          <NA>
## 2         Married 35-44 10000089113          13              1        Type A
## 3       Unmarried 45-54 51111075545          27           1001        Type A
## 4         Married 55-64 10000085426          13              1        Type A
## 5         Married 55-64 10000085476          18              1        Type A
## 6         Married 55-64 57680000024          25            105        Type B
## 7         Married 55-64 57680000025          12              1        Type B
## 8         Married 55-64 57680000025           8              1        Type A
## 9         Married 55-64 57680000050          18              1        Type A
## 10        Married 55-64        <NA>        <NA>           <NA>          <NA>
##    start_date   end_date redemption_date redeemed_flag is_campaign_window
## 1        <NA>       <NA>            <NA>         FALSE              FALSE
## 2  2017-08-08 2017-09-24            <NA>         FALSE              FALSE
## 3  2017-02-08 2017-03-26            <NA>         FALSE              FALSE
## 4  2017-08-08 2017-09-24            <NA>         FALSE              FALSE
## 5  2017-10-30 2017-12-24            <NA>         FALSE              FALSE
## 6  2016-12-06 2017-02-05            <NA>         FALSE               TRUE
## 7  2017-07-12 2017-08-13            <NA>         FALSE              FALSE
## 8  2017-05-08 2017-06-25            <NA>         FALSE              FALSE
## 9  2017-10-30 2017-12-24            <NA>         FALSE              FALSE
## 10       <NA>       <NA>            <NA>         FALSE              FALSE
## $n_transactions
## [1] 3185643
## 
## $n_coupon_rows
## [1] 116204
## 
## $n_redemptions
## [1] 2102
## 
## $pct_txn_in_campaign_window
## [1] 0.1100905
## Renamed household_id.x → household_id
## redeem_by_seg created successfully.
## rate_seg successfully created!
Redemptions per 1,000 Campaign-Window Transactions
income_bucket brand redemptions txn_in_window redemptions_per_1k_txn
150-174K National 97097 0 97,097,000.00
150-174K Private 11514 0 11,514,000.00
50-74K NA 168 0 168,000.00
NA NA 143 0 143,000.00
Other/Unknown NA 74 0 74,000.00
35-49K NA 73 0 73,000.00
75-99K NA 42 0 42,000.00
Under 15K NA 41 0 41,000.00
150-174K NA 36 0 36,000.00
25-34K NA 17 0 17,000.00
50-74K National 604534 36116 16,738.68
75-99K National 224073 18337 12,219.72
35-49K National 240376 27787 8,650.66
Other/Unknown National 250147 30490 8,204.23
Under 15K National 81214 10505 7,730.99
25-34K National 97664 12661 7,713.77
50-74K Private 87830 13184 6,661.86
75-99K Private 31679 6529 4,852.04
25-34K Private 19376 5340 3,628.46
35-49K Private 40318 11212 3,595.97
Other/Unknown Private 35018 9784 3,579.11
NA National 371077 106156 3,495.58
Under 15K Private 12403 4601 2,695.72
NA Private 60461 43361 1,394.36
15-24K National 0 10135 0.00
15-24K Private 0 4494 0.00

Key Performance Indicators
Transactions in Campaign Window 350,709
Total Revenue (Campaign Window) $1,063,061
Coupon Redemptions 2,265,375
Redemption Rate (Txn w/ Coupon) 4.0%

## uplift_df created successfully!

Investment Balance by Brand
brand coupon_supply supply_share redemptions redemption_share revenue revenue_share over_invested_vs_redemption over_invested_vs_revenue
National 100807 86.8% 1966182 86.8% 830737.5 78.2% −0.0% 8.6%
Private 15381 13.2% 298599 13.2% 232225.0 21.8% 0.1% −8.6%
NA 16 0.0% 594 0.0% 0.0 0.0% −0.0% 0.0%
## **Highest redemption intensity:** 150-174K households on National
## (~97097000 per 1k transactions)
## 
## **Strongest basket uplift:** 25-34K on Private,
## +$0.63 per basket when redeemed
## 
## **Most under-invested vs. demand:** National
## (coupon supply share trails redemption & revenue share)

Recommendation: Focus coupon allocation on income–brand segments with the highest redemption intensity and strongest uplift. Scale winning campaign types and trim over-invested categories. ```

The following visualizations show how coupon and campaign activity contribute to revenue growth, brand performance, and marketing investment efficiency.


2.1 1. Revenue Lift per Basket


2.2 2. Total Campaign Revenue by Brand


2.3 3. Investment Efficiency: Coupon Supply vs. Results

3 Merge uplift (lift_avg_basket) with redemption intensity (per 1k txn)

3.1 4. Summarize by Redemption Intensity and Brand

3.2 4.2 Interpretation

Interpretation:

This line chart shows how National and Private brands perform across redemption intensity levels.
Both maintain positive basket lift, but Private brands achieve higher uplift in moderate ranges (2K–10K).
This suggests that Private Brand campaigns are more efficient at converting redemptions into incremental value.
Meanwhile, National Brands sustain steady lift, reflecting broad market engagement and consistent performance.

4 5. Campaign Performance Deep Dive

4.1 5.1 Top Product Categories by Campaign Revenue

  • Campaign Performance Deep Dive:
    Beyond brand-level insights, we examine which product categories drive the most campaign-window revenue,
    providing actionable input for category management and promotional design.

Observation:
Categories such as Beverages, Dairy, and Snacks dominate campaign revenues, indicating strong responsiveness to promotional pricing in everyday consumables.


4.2 5.2 Investment Efficiency: Coupon Supply vs. Results


4.3 5.3 Campaign Effectiveness: Redemption Efficiency & Revenue Contribution


4.4 5.4 Interpretation

Interpretation:

This visualization captures both campaign efficiency and brand contribution in one frame:

  • Private brands lead in moderate to high redemption efficiency bands (2K–15K),
    suggesting more optimized coupon targeting and stronger value per redemption.

  • National brands dominate lower redemption bands, implying broader reach but lower per-redemption efficiency.

  • The donut chart confirms that while both brands contribute significantly to revenue,
    Private brands generate a higher proportion of total campaign uplift,
    reflecting better campaign ROI within efficient redemption ranges.

4.5 Strategic Recommendations

Based on the analysis:

  • Refocus investments toward Private Brand campaigns within mid-income segments, where both redemption and uplift are highest.
  • Rebalance coupon allocation to reduce National Brand oversupply.
  • Expand successful campaign formats (short-duration, high-targeting) to drive incremental sales efficiently.

Future analysis could integrate seasonality or digital engagement metrics to refine predictive targeting for the next marketing cycle.