Home/Case studies/Media forecasting

Case study 01 / Major Czech media company

15% more accurate forecasting.
For a nine-figure media company.

An explainable forecasting system replaced a decades-old manual process at a nine-figure media business, improved accuracy, and kept human judgment exactly where it mattered.

Nine-figure annual revenueSole ML engineerProduction in two weeks

Client identity and exact commercial impact withheld under NDA.

The brief

A major media group relied on one expert and one black box.

Nine-figure USD revenue · Long-term audience forecasting

60 → 1

Hours of human effort per forecast cycle

+15%

Accuracy across every channel and age group

+52%

Accuracy on forecasts the system stood behind

T+2

Months ahead, aligned to inventory sales

The business problem

Protect nine figures.
Tighten every forecast.

Long-term viewership forecasts were built manually by one expert using twenty years of accumulated instinct. Each cycle consumed roughly sixty hours, took weeks to finish, and produced a number nobody else could properly explain or reproduce.

The forecast was not an internal planning curiosity. It sat behind the sales team's pitch. Advertisers bought promised views in specific timeslots. When reality came in below the promise, the client could ask for a partial refund or extended service. Every weak forecast created direct P&L exposure.

Underforecasting also left money on the table. A more reliable number meant inventory could be sold with greater confidence rather than hedged against. Accuracy protected downside and unlocked upside at the same time.

The forecast, made visible

Compare every line.
Surface every miss.

This representative August profile shows the shape the system had to understand. The manual forecast drifts around reality. The model stays close, and visibly asks for help when prime-time uncertainty exceeds its authority.

August forecast window / T+2 months

Representative weekday audience profile

0k250k500k750k1mPRIME TIME / HIGH VOLATILITY06:0008:0010:0012:0014:0016:0018:0020:0022:0000:00

Selected timeslot

21:00

902k forecast viewers

Model confidence

54% / Low

Human review required

Why the system decided this

Prime-time premiere with no direct historical match

Hover or focus any model point to inspect it

Illustrative values based on the production behavior. Client audience figures are anonymized.

The architecture

Split the day by pattern.
Improve each forecast.

The quality came from designing around the business, not from selecting the most fashionable algorithm.

01History + schedule + context

Signals grounded in the business

Historical audience behavior for the exact group and timeslot was combined with derived relationships, the future programming schedule, seasonality, and calendar effects. Summer audiences alone could run roughly 30 percent below winter.

02Fit the model to the data

A model for each part of the day

Midday behaves differently from prime time. Instead of forcing one model across incompatible patterns, the day was split into time blocks. XGBoost, LightGBM, or ExtraTrees was selected according to the shape of each block.

03Human in the loop

Confidence became a workflow

Known patterns moved through automatically. New shows, unusual holidays, and high-volatility slots were flagged with an explanation and routed to the experienced forecaster. The system automated certainty and escalated ambiguity.

04T+2 month forecast

The horizon matched the sale

Forecasts ran two months ahead and deliberately skipped the intervening month. Those nearer slots were already sold and managed by shorter-horizon models. The boundary followed how the business actually operated.

Human in the loop

Automate 98%.
Review the exceptions.

The expert did not disappear. Sixty hours of repetitive estimation became roughly one hour reviewing only the timeslots where experience could improve the result.

Forecast routingProduction logic

01 / Model

Forecast every slot

Generate the number, explanation, and confidence score.

02 / Gate

Check confidence

High: passLow: hold

03 / Human

Review exceptions

Approve or adjust the few slots that truly need judgment.

~98%

Routine forecast automated

~1 hr

Expert review per cycle

Under deadline pressure

Repair the data.
Ship in 14 days.

Two weeks before delivery, the existing evaluation was found to contain data leakage. The model had effectively seen test information during training, and the reported accuracy was not trustworthy. The work had to be rebuilt from the evaluation methodology up while processing millions of records and selecting the right model family for each time block.

Days 1–3Repair the truthRemove leakage, rebuild the evaluation, establish a valid baseline
Days 4–8Engineer the signalCreate historical, derived, schedule, seasonal, and calendar features
Days 9–12Fit by time blockEvaluate XGBoost, LightGBM, and ExtraTrees against each daily pattern
Days 13–14Ship the workflowAdd confidence routing, explanations, and the two-month production horizon

The outcome

Raise accuracy 52%.
Cut 60 hours to one.

Accuracy improved 15 percent across every channel and age group. On forecasts that cleared the confidence gate, accuracy improved by roughly 52 percent. The sales team received a stronger commercial foundation, while P&L exposure from missed promises became easier to control.

Downside protected

Fewer weak promises that could trigger refunds or make-goods.

Upside unlocked

Inventory could be sold against tighter, more credible audience numbers.

Expertise preserved

Twenty years of judgment became a review layer rather than a key-man dependency.

Map a forecasting workflow