Which customers actually care about Q4?
A US IKEA-style transaction dataset, segmented three ways, then modeled with tier × quarter interactions to answer one question: whose spending really moves with the season — and whose doesn’t?
Aggregate seasonality is a blur.
Furniture and household retailers usually plan promotions and inventory against one national seasonal curve. That curve is an average, and the average is exactly where the signal disappears — loyal repeat buyers who truly shift spending across the year get mixed in with occasional buyers who don’t.
I wanted to see what happened if you refused to blur it. If seasonality is really a customer property, not a store property, then the same Q4 promotional calendar shouldn’t be pointed at every segment. The question was whether the data would actually support that intuition, or quietly disagree with it.
Cut the dataset down until it could answer one question cleanly.
I started with a 302K-record global retail dataset and filtered down to 5,200 US-specific observations. Keeping the geography clean matters: seasonal behavior in the US is not the same shape as it is in EU or APAC markets, and I didn’t want a country dummy variable doing the heavy lifting for a customer-behavior story.
From there I cleaned field types, resolved missing values, and engineered a customer-tier variable from spend cadence and lifetime value — New, Regular, Premium. Exploratory analysis showed tier and quarter each had their own story; the real question was whether the interaction between them mattered.
A regression with tier × quarter interactions.
I fit a multivariate linear regression with a full tier × quarter interaction term. The purpose of the interaction wasn’t statistical novelty — it was to isolate the seasonal effect inside each segment instead of averaging it into a single national curve.
Ran the base OLS in statsmodels for readable coefficients and significance tests, cross-validated with scikit-learn to sanity-check the fit, and used Matplotlib for the segment-by-quarter visuals that made the pattern legible to a non-technical reader. Everything lives in a Jupyter notebook designed so a teammate could reproduce it in an afternoon.
The interaction term did all the work.
Premium members spend ~35% more in Q4 than in Q1. New members show essentially no seasonality — their spending sits flat across all four quarters. They buy what they need when they need it, not because it’s November.
That contrast is the entire recommendation. Don’t stock the store once for the country and don’t point one promotional calendar at every segment. Move to segment-specific inventory targets for seasonally-sensitive tiers, and reserve the deepest promotional windows for the customers who actually respond to them.
Projected impact of the segment-aware stocking rule: ~12% reduction in overstock costs during off-peak months, driven almost entirely by not over-provisioning for New-tier customers who were never going to buy more in December.
Why segment matters.
The number I’m proudest of isn’t 35%. It’s that once the data was split by tier, the pattern was obvious — and until it was split, the same pattern was invisible. That’s the methodological lesson I took out of this coursework: seasonality is a customer property, not a store property. If you plan against an aggregate curve, you’re planning against a blur.
The business lesson is simpler. You spend money against the pattern you can actually see. A defendable recommendation isn’t “Q4 is big” — it’s “Q4 is big for these customers, for this reason, and here’s the dollar figure it would save you.”
Bring this lens to your team.
I’m interviewing for full-time Data Science, Analytics, and Product Analytics roles starting August 2026. If your retail, growth, or CRM team is stocking, pricing, or promoting against a blended curve — this is exactly the kind of work I do.