intermediate
ai-ops
rebalancing
operations

Rebalance Recommendations

Read the ranked card grid on /dashboard/operations/rebalance — how lift is calculated, when to Accept, Snooze, or Dismiss, and how acknowledgements feed the model.

Levy Fleets TeamMay 18, 20267 min read

Rebalance Recommendations

The rebalance recommender lives at Dashboard > Operations > Rebalance. It turns the demand forecast into a ranked list of "move N vehicles from hex A to hex B by T" suggestions, each with a dollar lift estimate.

This page is only available when the subaccount has ai_ops_tier set to pro or enterprise.

Card anatomy

Each card represents one recommended move:

+----------------------------------------------+
|  Move 3 ES400B from hex 89283082c1bffff      |
|  to hex 8928308347bffff by 16:00             |
|                                              |
|  Projected lift: $42.50                      |
|  Confidence: 78%                             |
|  Distance: 1.2 mi                            |
|                                              |
|  [ Accept ]  [ Snooze ]  [ Dismiss ]         |
+----------------------------------------------+
FieldMeaning
Vehicle modelThe vehicle model the rec targets (e.g. ES400B). If a hex has mixed models, the rec picks the model in oversupply.
Source hexWhere vehicles are now (oversupplied).
Destination hexWhere vehicles should go (undersupplied).
Recommended countHow many to move.
By TDeadline — the rec expires four hours after generation.
Projected liftNet dollars of expected incremental revenue.
ConfidenceHow tight the forecast CI is on this pair (0-100%).
DistanceStraight-line miles between hex centers.

How projected lift is calculated

The recommender uses closed-form math on top of forecasts, not a separate model. For each candidate pair:

projected_lift_usd =
    (destination_gain - source_loss) * avg_fare
  - distance_miles * tech_cost_per_mile_usd
  • destination_gain — additional rides on the destination hex if you add n vehicles.
  • source_loss — rides we'd lose on the source hex by removing those n.
  • avg_fare — rolling 30-day average fare for the subaccount.
  • tech_cost_per_mile_usd — subaccount setting (default 0.50). Tunable; see Feature flags and tiers.

If the math goes negative (the move would cost more than it earns), the rec is never generated.

How candidates are picked

Once an hour, the recommender:

  1. Pulls the 4-hour-horizon forecast for every hex.
  2. Compares forecast to current supply (vehicles with availability_status='available' and battery above rebalance_battery_floor).
  3. Picks under-supplied hexes ordered by gap.
  4. For each, finds the nearest over-supplied hex with capacity to give up vehicles.
  5. Scores, then writes the top-N as rebalance_recommendations with status open.

The cron also tombstones expired recommendations (status='expired') — it doesn't delete them, so you can measure historical acknowledgement rate.

Acting on a card

Each card has three buttons:

  • Accept — marks the rec accepted and assigns the move to the default technician queue. If you're on the Enterprise tier, the next route-solver run will incorporate accepted recs as stops.
  • Snooze — marks the rec snoozed and bumps its expiry by +2 hours. Use this when a move is good but you can't act on it right now.
  • Dismiss — marks the rec dismissed with the current timestamp. The rec stays in the database for the model to learn from, but disappears from the active queue.

Every acknowledgement (accepted, dismissed, snoozed) feeds back into the training data for the next nightly model retrain. The more honest you are with Dismiss, the better the model gets at picking moves you'll actually accept.

Sorting and filtering

The page sorts by projected lift (descending) by default. You can re-sort by:

  • Vehicle count
  • Distance (shortest first — useful when a tech is already nearby)
  • Confidence

The status filter defaults to open. Switch to accepted, dismissed, snoozed, or expired to see history.

Top-3 widget

For a faster pass, the operations dashboard at /dashboard/operations shows a RebalanceTop3Widget with the three highest-lift open recommendations. Each card links to the full recommender page.

If you don't see the widget on your dashboard, the component is exported but may need to be wired into the page. Email support if you'd like it added.

Deduplication

The recommender refuses to create a new open rec for the same (source_h3, destination_h3) pair if one is already open. This prevents flooding the queue when a hex has been chronically under-supplied for hours.

What dismissing teaches the model

Dismissals are signal. A pattern of dismissing a particular destination hex tells the model that lift estimates in that direction are unreliable — maybe there's a permit issue, a closed street, or a no-park zone the recommender doesn't know about. The nightly retrain weights features like recent acknowledgement rate per destination, so your team's dismissals do tune the system.