Reading show floor traffic patterns from door scans and zone counts
Show floor traffic patterns are the repeating within-day shape of your zone counts, the level each day sits at, and whatever is left over. Splitting an hourly or half-hourly count series into those three parts, using a seasonal-trend decomposition, lets the profile drive staffing and the residual drive investigation.
Somebody in the debrief puts up a chart of hourly counts for hall two across three days and says the floor was quiet on day three. Everyone nods, because the line is lower. Then the exhibitor manager asks whether it was quiet all day or quiet after lunch, and whether the 11:00 rush still happened, and the room discovers that nobody can tell from the chart.
Show floor traffic patterns are three different things stacked on top of each other in one line. There is the shape the floor takes every day, the level a particular day sits at, and whatever is left when you remove both. Separating them is a twenty-minute job on data you already hold, and each of the three parts answers a different operational question.
The three things an hourly count is made of
Bucket your zone counts into equal bins. Half an hour is a good default for a hall that opens at 10:00 and closes at 18:00, giving sixteen bins a day.
The first component is the within-day profile, which is the seasonal part of the series with a period of sixteen. It is why the 11:00 bin is always busy and the 13:00 bin never is. The profile is remarkably stable across editions of the same show, because it is driven by things that do not change: the opening time, the conference programme, when lunch is served, when people start leaving for flights.
The second component is the level, which is a slow-moving trend across the three days. It absorbs day-of-show effects, weather, a rail strike, a competing event in the same city.
The third is the residual. It is what the first two cannot explain, and it is the only part that should ever surprise you.
Cleveland, Cleveland, McRae and Terpenning published the standard tool for this split in the Journal of Official Statistics in 1990, under the name STL, for seasonal-trend decomposition using loess. It fits the seasonal component with a local regression across the same bin in successive cycles, fits the trend with a local regression across time, and iterates until both settle. Hyndman and Athanasopoulos, in the third edition of Forecasting: Principles and Practice from 2021, set out the two parameters that matter, the seasonal window and the trend window, and note that smaller values let the components change faster.
Why does the daily profile matter more than the daily total?
Because you cannot staff a total. Everything an operations lead schedules happens at a time of day.
A hall total of 18,400 zone counts on day two tells you the day was busy. The profile tells you that 1,725 of them arrived in the 11:00 half hour and 471 in the 17:30 half hour, which is a ratio of 3.7 to 1 across the same day and the same floor. Stewards, cleaners, catering and shuttle buses are all sized against the peak, and the peak lives in the profile.
The profile is also the thing you can carry forward. A day total from last edition is a weak predictor of this edition's day total, because the level moves with registration, marketing and the calendar. The shape moves much less. If you have two prior editions of the same show, average their profiles and you have a defensible staffing curve for this one before a single person walks in.
Working hall two through
Hall two, three days, sixteen half-hour bins a day, so forty-eight observations. Day two totals 18,400 counts, which is a mean of 1,150 per bin. Day three totals 11,400, which is a mean of 712.5, call it 713.
Day three against day two is 11,400 divided by 18,400, which is 0.620. So day three ran 38.0 per cent below day two, and that single number is the day effect.
Now the profile, expressed as multiplicative factors that average to 1.00 across the sixteen bins. The fitted factors for the busy bins are 1.50 at 11:00 and 1.36 at 14:30, with a trough of 0.67 at 13:00 and a tail of 0.41 at 17:30. That is the double peak people describe informally as the mid-morning rush and the after-lunch return, now written as two numbers.
Apply the profile to each day's level. Day two at 11:00 expects 1,150 times 1.50, which is 1,725. Day three at 11:00 expects 713 times 1.50, which is 1,070. Both days had their 11:00 peak. Day three's was 38 per cent smaller because the whole day was 38 per cent smaller, and nothing about the shape changed.
Now the residual. Day three at 14:30 came in at 1,240 against a fitted 713 times 1.36, which is 970. The ratio is 1,240 over 970, or 1.28, so that bin ran 28 per cent above where the profile put it. With a residual standard deviation of 67 counts on this series, an excess of 270 is about four standard deviations, which is not noise.
That is the finding. Day three ran low all day and then produced one bin substantially busier than the profile allows, and the reason turned out to be a hall closure next door pushing people through the connecting aisle for twenty minutes.
Additive or multiplicative, and why the choice is forced on you
The arithmetic above used multiplicative factors, and that was a decision rather than a convention.
An additive decomposition says the 11:00 peak adds a fixed number of people to whatever the day's level is. If the profile added 575 counts at 11:00, then day three at a level of 713 would expect 1,288, which is more than 80 per cent above its own mean. Quiet days on a show floor usually keep the same shape at a lower level, so the peak behaves like a multiplier on the day.
Hyndman and Athanasopoulos point out that STL fits additive components only, and that a multiplicative decomposition is obtained by taking logarithms first. The practical recipe is three lines: take the natural log of every bin count, run STL with a period of sixteen, then exponentiate the seasonal component to recover factors. The log of 0.620 is minus 0.478, and that is the day-three effect in the transformed series.
There is one trap in taking logs, which is that a bin with a count of zero has no logarithm. Halls produce zero bins at the ends of the day and during closures. Either drop the closed bins from the series before decomposing, which is the honest option, or add one to every count, which is convenient and quietly distorts the low end. Dropping is better, because a closed hall is a different state rather than a very quiet one.
What should the residual actually be used for?
Investigation, and nothing else. It is tempting to feed residuals straight into an alerting rule, and the result is usually a channel nobody reads by day two.
The residual answers one question well: which fifteen or thirty minutes of the show were genuinely unlike the rest, once the shape of the day and the level of the day have been taken out. On a three-day show with forty-eight bins that is normally between one and four bins, and each of them has a story attached that somebody in the show office remembers. Writing those stories down against the bins is how a hall's profile improves for next edition.
Two of the most common stories are worth naming, because they are data faults rather than crowd behaviour. A sensor that drops out for twenty minutes produces a large negative residual with a sharp start and a sharp end, and a sensor that double-counts after a reboot produces a positive one. Neither has anything to do with attendees. Checking the residual against the sensor health log before checking it against the programme saves an embarrassing slide.
Where this stops
The decomposition needs enough cycles to estimate a seasonal component, and a three-day show gives you three. That is thin. STL will return a profile from three cycles, and it will be dominated by whichever day was least unusual. A four-day show is meaningfully better than a three-day show here, and a two-day show is not really a candidate for this method at all. With two days, average the two profiles by hand and stop pretending it is a model.
The zone counts also have to mean the same thing across the series. If a sensor was moved on the morning of day two, or a zone polygon was redrawn, the level shift lands in the trend component and gets read as a quiet afternoon. Freeze zone definitions before the doors open and log any change with a timestamp.
The deeper limit is that a decomposition describes what happened, and it will not tell you why the profile has the shape it has. That question needs the individual journeys underneath the counts, which is reducing each attendee's route to an ordered list of zones in C13, and it needs to be read against how crowded each zone was at the time, which is density over the walkable area in C11. The hall-level count these zone series should reconcile to is occupancy built from entries and exits, and it belongs to C14. All three sit under the same attendee analytics reporting, and they will disagree by a few per cent, which is normal and worth stating rather than hiding.
Start with one hall and one edition. Export the zone counts in half-hour bins, take logs, run STL with the period set to the number of open bins in a day, and plot the three components underneath each other. Then show the seasonal panel to the person who writes the steward rota and ask whether it matches what they saw. If they say yes, you have a staffing curve. If they say no, you have found either a sensor problem or a zone definition problem, and either is worth an afternoon.
Questions people ask about show floor traffic patterns
- How do you find the daily traffic profile for a hall?
- Bucket zone counts into equal bins, half an hour works well, then decompose the series with a seasonal period equal to the number of bins in an open day. The seasonal component is the profile. With sixteen half-hour bins in an eight-hour open day, the period is sixteen and the profile has sixteen factors.
- Should show floor traffic be decomposed additively or multiplicatively?
- Multiplicatively in almost every case, because a quieter day usually has the same shape at a lower level rather than the same absolute peaks. STL fits additive components directly, so take logs of the counts first, decompose, and exponentiate the seasonal component to get factors you can multiply.
- What counts as an unusual hour on the show floor?
- An hour whose count differs from the profile by more than about three times the residual standard deviation of the series. If half-hour residuals have a standard deviation of 67 counts, a bin sitting 270 above its fitted value is worth a question. Anything smaller is normal variation and should not generate an alert.
Related reading
- Turning aisle traffic density into a number your operations team can act on
- Analysing attendee movement paths as ordered sequences of zones
- Calculating peak show floor occupancy from entry and exit scans