How Uber Optimizes the Timing of Push Notifications using ML and Linear Programming

Introduction
Uber has experienced quick growth in volume for marketing push notifications, which were introduced in March 2020. However, many of these notifications had conflicting messaging and lacked personalization for users. As a result, Uber needed a comprehensive approach to optimize the timing and content of push notifications.
Problem Statement
The problem statement is to determine the best schedule with which to send pushes currently buffered for a user, considering push expiration time, push send window, frequency cap, minimum time difference between push notifications, and other constraints.
Planning Over a Time Horizon
The system considers potential combinations of pushes and delivery times over a fixed time horizon and picks the schedule that maximizes some objective. To simplify, the problem is formulated as an assignment problem, where the schedule that maximizes the sum of scores from its assignments is determined using linear program formulation and machine learning models.
Scoring Assignments
The value of a push-time pair is determined with an XGBoost model trained on historical data to predict the conversion probability. The model uses time, push, and user features.
Components
The Persistor stores pushes onto non-volatile storage, while the Schedule Generator fetches all buffered pushes for a user and determines the optimal schedule for them. The Scheduler delivers scheduled pushes, and the Push Delivery component sends the push to downstreams responsible for device delivery.
Future Work
Uber plans to expand the models to take multiple objectives into account and optimize the timing and content of other notification types. Additionally, more volume on Uber Eats comes from email than push.