Problem
A single-screen outdoor summer cinema in Varna has hand-scheduled its nightly programme for nine seasons: which film, which night, from whatever was in rotation. Meticulous accounting records, no demand model - an experienced operator's gut. We wanted to know honestly whether data could match that judgment, and where it couldn't.
What we built
The weather gate
An outdoor venue's first question isn't which film - it's whether anyone comes at all. That was our first hypothesis, and nine seasons of the venue's own history confirmed it: 14% of scheduled nights sold zero tickets, roughly half of them whole-venue rain-outs. So the model is a two-stage gradient-boosting machine behind a weather gate: stage one predicts whether the night happens at all (calendar + evening weather, AUC 0.75), stage two predicts demand given that it does.
Base signals from the booking history
A verified dataset of 1,921 screenings across 277 films, rebuilt from nine years of accounting workbooks and cross-checked row by row. The venue's own data supplies the base features: each film's past draw, the showtime slot, position in the season. Validated the only honest way for a catalogue where 98% of films appear in a single season - train on past seasons, test on an unseen one, never a random split.
External signals we brought in
On top, the system ingests external factors we sourced ourselves, all point-in-time-safe: hourly Varna weather for the actual evening window, Google Trends momentum anchored to a stable local search term, Wikipedia pageviews in English and Bulgarian, US opening release width, and critic ratings.
Findings
Ranking power
The model captures 78–80% of the gap between random ordering and perfect-hindsight ordering - about 95% of the ceiling this data can mathematically support (the same film in the same slot still varies by ±21 tickets a night, irreducibly).
Versus the human
Measured against the operator directly: the model's #1 matched their actual pick on 31% of nights, its top-2 on 54%. The honest conclusion - the operator was already good.
What actually matters
Audience fit beats everything: family films draw twice what everything else does, dubbed family films three times. Critic ratings carried zero signal at this venue and were removed from the model.
The structural blind spot
Locally-beloved family titles look weak on every external API - IMDb 4.3, modest box office - and sell out anyway, because the audience driving them (children) leaves no trace on Wikipedia or Google Trends.
1,921
screenings verified row by row, nine seasons
78–80%
of the random-to-perfect-hindsight gap captured
2×
family films outdraw everything else - 3× when dubbed
Base signals, ranked
External signals, ranked
Use cases
Pre-season slate ranking, validated at Spearman 0.68 against realized season-long draw - with the discipline to abstain on films it has no signal for rather than guess. A second opinion on the nightly programme, not an autopilot. And the shape generalises: any repeated, structured decision with tabular inputs - staffing rosters, prep quantities, promotion timing - where a gradient booster trains in seconds and explains itself.