Work sample / Principal Analyst, Finance / Platform Services

Two peaks, and only one of them has a fix

Inventory regionalization for heavy and bulky. The South peaks in May, the North peaks on Black Friday, and the buildings do not move. What I built, what it delivered, and what I got wrong.

All figures indexed. Planned program savings = 100.0. No confidential dollar value, item identifier, vendor or facility name appears anywhere in this document. Every ratio, seasonal curve and variance driver is at true magnitude. Structure and logic are the point.
Scenario
00

What I found

Answer first
Net benefiti
—
of plan, indexed
Cost per shipmenti
—
reduction vs before
Promise speedi
—
days faster
Inventory carriedi
—
to hold service flat
Network peaki
—
of an average month

The problem. Heavy and bulky inventory sat on a largely national footprint. Freight on oversize scales with shipping zone, so serving the whole country from a handful of buildings meant long zones, high cost per shipment and a slow promise. The question was how many units of each item to hold in each region.

What I built. A placement model at item, region and month grain across several thousand heavy and bulky items. It set the regional stocking targets, and those targets were encoded into the automated fulfillment and transportation systems. The output stopped being a recommendation and became a system input.

What it delivered. The program was funded on a nine figure transportation savings case. Realization landed at — of plan. The weighted average shipping zone moved from — to —, cost per shipment fell —, and the customer promise got — days faster. We delivered — of the freight savings the case was funded on. Net of what the recommendation itself cost, the programme returned —.

The gap is the interesting part. Not the twenty points, but what put them there. Two of the six drivers are costs the recommendation itself created: the extra buffer inventory needed once one national demand pool becomes eight regional ones, and the units that cannot be placed because the target building is full at peak. I modelled both. I underestimated both, the first by about three times and the second by nearly nine.

One of them has a fix that costs nothing. Clearing winter inventory out of the buildings before April absorbs most of the spring overflow. There is no equivalent for Christmas, because in November nothing is sitting idle. Sections 01 and 02 work through why.

The thing I assumed and should have checked

I expected regionalization to inherit a pooling benefit, because regional peaks land in different months and I assumed they would smooth each other out. They do land in different months, so that half was right. It just does not help, because buildings do not move. Each one still has to cover its own peak whenever that peak happens to arrive. The hunch on its own was harmless. What made it expensive is that I turned it into an input, and set it far too high.

01

The seasonal problem

Try the category toggles

There are two peaks and they are almost the same size. The spring build runs April to June and is — of network cube: lawn and garden, patio furniture, grills, pools, air conditioning. The Black Friday to Christmas peak is — of cube: televisions, furniture, mattresses, fitness equipment. Snow removal and space heating are only —, and they peak alongside Q4 rather than against it.

The two peaks split the country. Southern regions peak in May because lawn, pools and air conditioning all over-index there. Northern regions peak in November, because their spring is milder and their Christmas is not. That is real diversification, and it is useless to us, because a building in the Northeast cannot lend its April slack to Arizona.

The fix, and why there is only one

For the spring peak: stop storing winter through summer. Snow removal and space heating sit dormant from March to August, and their cube is space we are already paying for. Drawing that inventory down before April and refusing to rebuild it until September frees enough room to absorb roughly — of the spring overflow at no capital cost at all. That is the counter-seasonal pairing lever on the rail, and it is the cheapest thing in this analysis.

For the Q4 peak there is no equivalent, because nothing is dormant in November. Snow removal and space heating are at their own peak alongside televisions, furniture, mattresses and fitness. There is no assortment left to trade against, so the Christmas overflow can only be answered with capacity or with a decision to eat the longer zone.

That leaves three options for Q4. Pre-position into the peak from September and carry two extra months of holding cost. Take short-term overflow space at a premium for eight weeks. Or accept the longer zone and let the tail ship from the next region out. We took the third in year one, which is why cube collision sits in the bridge rather than in the capital plan. Right call for one season, wrong one to repeat.

Use the toggles to take one peak away at a time. Neither group alone breaks the buildings. Together they leave no month to recover in.

Cube demand by region and month

Indexed to each region's own average month. Shaded cells exceed building capacity.
Read this first

Network demand curve

All selected categories, by month
Read this first

Where the overflow lands

Units displaced to a neighbouring region because the local building is full

Overflow is not lost demand. In the month a region peaks, the model wants to place more cube there than the building holds. The excess gets stocked in a neighbouring region instead. The customer still gets the unit, it just starts its journey — zones further away, which costs about 55% more in freight and adds roughly a day to the promise.

Two things cause it together. Buildings are sized near an average month, currently —, because oversize storage is expensive and nobody builds for a peak they see twice a year. And demand is not flat: when several groups peak in the same region in the same month, the excess has nowhere local to go. Neither fact alone would matter. Together they set the ceiling on how much of the placement plan can be executed.

Read this first
02

Which products, and where

Pick a region

The recommendation is not one number. It is a stocking target for every product group in every region in every month, and each one comes out of three factors multiplied together: how much cube that group takes in the network, how far above or below its own average it runs in that month, and how much that region over or under indexes on it.

Pick a region below and the first chart shows what actually fills it in its worst month, group by group, stacked until the building is full. The bars past the dashed line are the excess. Compare Southwest against Northeast and the same overflow turns out to have two completely different causes.

What fills the building

Peak month, indexed to the region's own average month
Read this first

Regional index by product group

1.00 is the region's fair share. Above means it over-indexes.
Read this first

That chart is the whole derivation. Cube share, times seasonal index, times regional index, summed across groups and set against what the building holds. Nothing else goes into it.

—

03

What it cost, driver by driver

Price, volume, mix

Transportation spend is shipments times rate times zone mix. Regionalization moves mix and nothing else. It does not touch the rate card and it does not change how many units ship, only how far each one travels. The savings decompose cleanly, and so does the miss.

The bridge below runs in two halves and they are worth keeping apart. The first three bars are variance on the freight savings we promised, and they land on what we actually delivered. The last three are not freight at all: they are the inventory the recommendation forced us to carry, the units it could not place, and the speed it bought us. Freight savings and program benefit are two different numbers. Running them together is how a program gets called a miss when the freight math worked fine.

Where the miles went

Share of shipments by distance band, before and after
Read this first

Plan to actual

Indexed savings, planned = 100
Read this first

The two I under-sized

Breaking the pool costs inventory, and I knew that. Splitting one national demand pool into — regional pools raises safety stock by roughly the square root of the location count, because each region needs its own buffer against its own noisier demand. That was in the original case. What was wrong was the number I fed it. The theoretical bound is — times. Regional demand is correlated rather than independent, so the real penalty comes in at — times. Total inventory rises —, and carrying it costs — points of the savings.

Sizing that buffer on annual variability would have understated it further still. Stockouts happen in the peak, not in an average month, and demand is noisier in the peak.

Buildings fill on volume, and I knew that too. When the peak arrives, part of the plan cannot be executed because the target building is already full. Those units ship from the next region out at roughly 55 percent higher freight. At current capacity that is — of the network, split roughly — between the spring build and Christmas. Drawing snow removal and space heating down before April frees real cube and takes the total to —. It does nothing for the Q4 peak, because in November those same categories are peaking too. There is no dormant assortment to trade against at Christmas, which is the half of the problem that needs capacity rather than planning.

How badly I sized them. Hit My original model on the rail to see the case as it went out. Same eight regions, same structure, same month grain, same two cost lines. But it carried a regional demand correlation of 0.80 and gave buildings 1.45 times headroom, so the inventory penalty came in at — points instead of —, and the capacity shortfall at — instead of —. The programme looked like it would return —. The model was never the problem. Three inputs were too generous, and I underestimated both costs as a result.

04

How many regions is the right answer

The actual decision

This is what the model existed to answer, and it is a tradeoff rather than something to maximise. More regions means shorter zones and cheaper freight, though with diminishing returns. It also means more demand pools to buffer, more sites hitting capacity in the same weeks, and more fixed cost to run. So the net has a shape, and it has a top.

Net benefit against region count

Index-dollars. Freight saved, less inventory carried, less overflow.
Read this first

—

Why eight, when my own model pointed higher

Worth answering directly, because under the assumptions I originally carried the curve peaks at — regions rather than eight. I proposed eight anyway, for two reasons. The difference was — of the modelled benefit, which is well inside what a model built on estimated inputs can resolve. And adding a stocking region is not a rounding decision. It means splitting the same inventory across more sites, with the receiving, replenishment and coordination that comes with it, and you do not take that on for a difference that thin.

When the inputs were later measured, the optimum moved to eight. I would like to claim that as foresight. It was really just a rule I try to follow: when an optimum is flat, take the cheaper end, because the flatness is the model telling you it cannot see the difference. The part I find interesting is that the rule protected me from an error I did not yet know I had made.

Drag the correlation lever and the shape moves noticeably. That is the assumption worth arguing about, not the region count. If regional demand were fully independent, the inventory penalty would be much steeper and a tighter footprint would win. The correlation we measured is what makes eight defensible.

05

What changed, and what gets watched

Impact

The regional stocking targets went into the automated placement logic in the fulfillment and transportation systems. Because the targets are seasonal they get re-evaluated monthly rather than annually, so placement now moves ahead of demand rather than chasing it.

These came out of the work and are still watched.

Transportation Finance · Weekly
Weighted average shipping zone
The leading indicator of outbound cost. It moves before the cost does, which makes it actionable rather than a post mortem.
Inventory Placement · Daily
Regional in-stock against placement plan
Catches placement drift while there is still time to correct it, rather than at month end.
Fulfillment Ops · Monthly
Peak month cube utilization by building
The constraint that capped realization. It is now forecast ahead of the season instead of discovered during it.
Inventory Placement · Quarterly
Counter-seasonal assortment balance
Keeps each building's category mix spread across the calendar so the spring peak has somewhere to go.
Supply Chain Finance · Monthly
Inventory turns, regional against national
Keeps the pooling penalty visible so it cannot quietly grow past what the freight savings pay for.
Customer Experience · Weekly
Promise days and two day eligibility
The customer facing benefit, tracked beside the cost benefit so neither gets optimized alone.
06

What I got wrong

Five things

Five things, and the order matters, because the first one is what let the rest happen.

  • I assumed regional peaks would offset each otherGoing in I thought regionalization would inherit a pooling benefit, because different regions peak in different months. They do. It just does not help, because a building in New Jersey cannot lend its April slack to Phoenix. On its own that would have been a harmless wrong hunch. What made it expensive is that I carried it into the model as an input, setting regional demand correlation at 0.80, which is roughly what monthly demand correlates at, when the figure buffer stock needs is 0.35.
  • I modelled both constraints and then picked the friendliest number for eachThe original case had the right structure. It ran at month grain, it carried the safety stock penalty, it carried a capacity limit. But I set the correlation at 0.80 when the series that matters measures 0.35, gave buildings 1.45 times average headroom when they hold 1.15, and assumed counter-seasonal pairing would absorb 80% of overflow when it manages 42%. Three judgement calls sitting in the model as though they were facts. They made the inventory penalty look like a third of its real size and the capacity shortfall a fraction of it. Click My original model on the rail and the result moves by — points without a single formula changing.
  • I sorted product groups by how seasonal they lookedEveryone knows Black Friday is enormous, and spring is when heavy and bulky actually sells, so this is not about missing a season. It is narrower. Furniture and mattresses peak at roughly 1.8 times an average month where lawn and garden hits 2.4, so I read them as steady and treated them as ballast. They are 39% of the cube in the network. Their unexciting spike moves more volume than lawn and garden's dramatic one, and furniture on its own is half the Northeast's November peak while never appearing on anybody's list of seasonal categories. I should have been ranking on cube times amplitude. I was ranking on amplitude.
  • I gave the business one number instead of a rangeThe case went out as a point estimate. Had I put a range around it, with correlation and building headroom named as the two inputs most likely to be wrong, the result would have landed inside that range rather than reading as a shortfall. The economics would have been identical. How it read to the people who funded it would not have been.
  • One thing I would do exactly the same wayHolding two regions out of the first wave as a control. It felt slow at the time and there was pressure to skip it. But with seasonality this strong, a plain before-and-after would have handed the programme credit for demand that was arriving anyway, and I would have had nothing to say when someone pushed on the speed number.

The pattern underneath all of it

Every one of these is the same mistake wearing different clothes, and the correlation is the clearest example. 0.86 is a real number, correctly computed, from the monthly demand of every region against every other. It is just not the series buffer stock covers. Buffer stock covers forecast error, and seasonality is forecastable, so most of what made that 0.86 so high should never have been inside the number at all. Building headroom, pairing and which groups count as seasonal were the same shape of error: careful arithmetic pointed at the wrong thing. All four are worked through on the placement tab of the workbook, so the math is there to check rather than asserted here. What I do now is name the series before I name the number.

How long it took

The first usable version took about three weeks and was deliberately rough. One region, one category, just enough to see whether the zone math held before anyone spent real time on it. Full population and the placement writeback took roughly a quarter after that, and the monthly refresh runs on its own now. I would sequence it the same way again, because the three week version is what earned the room to build the rest.