Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Send More Riders

peteowlett
February 02, 2016

Send More Riders

Predictive scheduling for an on demand delivery fleet

peteowlett

February 02, 2016
Tweet

More Decks by peteowlett

Other Decks in Technology

Transcript

  1. •Restaurants take longer than expected to make food •Items get

    missed - we have to go back and get them •Drivers become unavailable (flat tyre etc) •Customers hard to find It gets harder …
  2. Exam question How many drivers should we schedule for the

    next two weeks in each part of London over 15 minute blocks?
  3. Statsmodels supports this out of the box Forecasting Daily Volume

    # Decompose the raw time series decomposition = sm.tsa.seasonal_decompose(data.values, freq=7) # Extract individual components all_trend = decomposition.trend all_seasonal = decomposition.seasonal all_resid = decomposition.resid
  4. •Vary the training range •Train on np.log(series) and transform back

    Signal in the noise? Looks Seasonal Looks Seasonal Random Noise
  5. Forecast each component Forecasting Daily Volume # Forecast Trend lm_lin

    = LinearRegression().fit(dates, trend_vals) forecast_trend = lm_lin.predict(forecast_window) # Forecast Seasonal seasonal_pattern = np.tile(base_seasonal_pattern, math.ceil(days_to_forecast / 7.0)) forecast_seasonal = seasonal_pattern[0: days_to_forecast]
  6. Where • O is orders • D is demand •

    E is efficiency • z is zone • d is date • w is weekday • t is time of day Converting Daily Orders to Driver Hours
  7. Zero to One Scale - neat trick Estimating Demand Curves

    scaled_series = df_mean_curves.order_volume / df_mean_curves.groupby(['zone', ‘day_of_week’])\ .transform(np.sum).order_volume
  8. 1. While not as powerful as R, Statsmodels does give

    you core time series tools 2. Seasonal decomposition is very meaningful to human beings 3. By using all python, we were able to ship quickly Stuff we learned