HomeData ScienceAI Studio

Demand Forecasting: 7 Days Ahead

2026-07-25In progress

A 7-day-ahead demand forecast done the way time series must be: walk-forward backtesting, baselines first, and strict control over what's known at forecast time.

time series forecasting backtesting scikit-learn

In progress: write-up coming

This write-up will be completed as the project is finished. The sections below show the problem and intended approach; results only get added once they’re real.

Problem

Standing at the end of today, how many bikes will be rented a week from now? It is the horizon an operations team needs for staffing and rebalancing, and a good test of whether you can forecast without quietly leaking the future into your features.

Data

UCI Bike Sharing (Public, Capital Bikeshare daily rentals, 2011 to 2012 (731 days))

Approach

Walk-forward backtesting on an expanding window (517 genuine out-of-sample forecasts), never a random split. Every feature is knowable at the forecast origin: lags at least a week old and rolling stats shifted by the horizon. I built two honestly-labelled feature sets, history-only and a version that adds the 7-day weather forecast an ops team really has, to measure exactly what weather information is worth.

Result

The best model beat the moving-average baseline by 27% (MAE), and the weather-forecast feed alone cut error about 17% over history-only features, the single biggest lever. WAPE (about 13%) is the headline metric; MAPE is reported but flagged, since it is distorted by the Oct 2012 Hurricane Sandy day of just 22 rentals.

Walk-forward forecast versus actual daily rentals, 2011 to 2012: the model tracks the strong seasonal swing far more closely than the naive week-ago baseline.
7-day-ahead forecast vs actual, out-of-sample

demo video

a short recorded walkthrough goes here once the project is complete

What I'd do differently

Only two annual cycles limit the seasonal estimates, and the weather model uses actual weather as a perfect-forecast proxy, so live accuracy would be a little lower. Prediction intervals for staffing buffers are the extension I am adding next.