Skip to main content
Millennial Business Academy

Business Analytics Project · Advanced · 4 to 6 hours

Scope and prepare a promo effectiveness study

The founder wants to double promo spend. Your job is to frame the question correctly first: attributed vs incremental revenue, ROAS traps, and the selection bias hiding in who uses codes.

The brief

Sigla Active sells athleisure across its website, Shopee, TikTok Shop, and Lazada. The founder is about to double the discount-code budget and asks you: 'Are the promos working?' You are the analyst scoping and preparing the study. The danger here is not dirty data, it is a dirty question. Attributed revenue is not the same as incremental revenue, a free-shipping code is not comparable to a percent-off code, and the people who use promos are not a random sample of buyers. You join orders to campaigns, prepare an honest table, and, most important, tell the founder what a clean answer would actually require before a single peso more is spent.

Your role

You are the analyst scoping the promo study. Deliverable: an analysis plan that defines the metric and its limits, a prepared orders-plus-campaigns table, and a clear statement of what a causal answer needs.

Attributed vs incremental revenue, and why the difference decides the budgetDefining ROAS and choosing its numerator and denominatorSpotting selection bias in who redeems promosComparing unlike promo mechanics (percent-off vs free shipping)Left-joining orders to campaigns while keeping the non-promo baselineSpecifying the holdout a causal claim requires

The datasets

720 orders (Jan to Jun 2026); promo_code is blank when no code was used

ba-promo-orders.csv · 720 rows

Columns: order_id, order_date, customer_id, channel, gross_amount, discount_amount, net_amount, promo_code, customer_type

Five discount campaigns with their spend and run dates

ba-promo-campaigns.csv · 5 rows

Columns: promo_code, campaign_name, start_date, end_date, spend

Setup

  • Download both files. Keep the raw copies and add a prep-log tab.
  • Write the decision the founder faces (spend more on promos or not) and the metric that would actually inform it.
  • List your assumptions about attribution before you compute anything.

Your tasks

Work through these in order, the way the engagement would actually run.

  1. 1State the real question: is the promo spend generating incremental revenue, not just attributed revenue.
  2. 2Left-join orders to campaigns on promo_code, keeping the non-promo orders as the baseline (blank code).
  3. 3Compute naive attributed ROAS per campaign (net revenue on that code divided by spend) and list them.
  4. 4Flag why the free-shipping code is not comparable to the percent-off codes on the same ROAS ruler.
  5. 5Compare the new-customer share of promo vs non-promo orders and name the selection bias it reveals.
  6. 6Compute the total discount given away and set it beside campaign spend as a second cost.
  7. 7Identify the campaign with the weakest return and the largest spend as the first thing to review.
  8. 8Write the causal-design note: specify the holdout or control group needed to measure true incremental lift.

Work like an AI-powered analyst

The modern analyst uses AI as a thinking partner, not a shortcut that skips the learning. Try these on this project.

  • Ask ChatGPT or Claude to explain the difference between attributed and incremental revenue using your exact numbers, then write the one sentence you would tell the founder.
  • Describe the free-shipping code to the AI and ask why its 13x attributed ROAS is misleading next to a percent-off code.
  • Have the AI design the simplest holdout experiment Sigla Active could run next quarter to actually measure promo lift.

Expected output

  • An analysis plan that defines ROAS, distinguishes attributed from incremental, and states the limits.
  • A prepared table joining orders to campaigns, with the non-promo baseline intact.
  • Attributed ROAS by campaign, plus the selection-bias and free-shipping caveats written out.
  • A causal-design note specifying the holdout needed before increasing spend.

Check your numbers

Your results should match these. If they do not, that is the real learning: find out why.

  • 330 of 720 orders used a promo code (45.8 percent); 390 did not.
  • Total net revenue is roughly 1.40 million pesos; promo orders account for about 602,000 pesos of it; total campaign spend is 136,000 pesos.
  • Promo orders are 68.2 percent new customers vs 39.5 percent for non-promo orders, a strong selection-bias signal.
  • Naive attributed ROAS: WELCOME10 7.27x, PAYDAY15 2.80x, FLASH20 1.82x, SHIPFREE 13.19x, LOYAL12 10.61x.
  • SHIPFREE gives no line discount (it is free shipping), so its 13.19x is the least comparable number in the set.
  • FLASH20 returns the least per peso (1.82x) while carrying the largest spend, so it is the first campaign to review.

Skills check

6 advanced questions on the judgement this project demands, not just its steps. Your score saves to your dashboard, and you can retry for a better one.

Finished it? Put it in your portfolio.

This is exactly the kind of output the bootcamp builds with you live, with mentor feedback and an AI badge and certificate of completion at the end.