Tactics ranked by predicted variance
Variance = plan − estimate. The model's status can differ from the reported one: ● marks a tactic the model flags differently. Select a row for its forecast.
| Tactic | Therapy area · category | Plan | Reported LBE | Predicted LBE | Predicted variance | Model status |
|---|
Why the model differs from the reported LBE
SHAP contributions to the year-end correction, from the reported LBE to the predicted LBE.
Forecast by as-of month
How the reported LBE and the model's prediction moved through the year, against the plan.
ML Ops lifecycle
The same loop the production notebooks ran, on invented data here.
- IngestFive years of tactical budget grids (monthly plan and latest best estimate) into one master grid.
- EngineerMonthly, quarterly, variance, shift and pace features per tactic and as-of month.
- BacktestWalk forward: train on earlier years, score the next year against its year-end truth.
- RegisterRetrain on all closed years and save a versioned model file with joblib.
- ScoreEach hourly sync predicts every tactic's year-end LBE from the current grid.
- SyncPredicted LBE, variance and status written to Asana and Smartsheet, with a pinned story.
- MonitorError by as-of month and SHAP drift reviewed; retrain each planning year.
Five years of budget data
Plan vs year-end spend per year ($M). 2026 shows the reported LBE to October.
Backtest error by as-of month
Feature importance
Top 12 of the model's features.
Predicted vs actual (backtest, as of June)
Each dot is a 2025 tactic, $K. On the line = perfect.
Model card
The notebook's production model reported a 2023 holdout R² of 0.95 and validation R² of 0.86 on real grids; the numbers here come from the synthetic run.
Task in the Asana budget project
What one sync writes to a tactic's task: custom fields and a pinned budget story. Fields that change glow.
Run SmartSync
The hourly job: read the grids, score every tactic, update the tasks whose status or prediction changed, then post a project status update.
Simulated: nothing leaves this page. The real job used the Asana and Smartsheet APIs with tokens kept out of the code.
Invented data generated and scored by tools/smartsync_model.py (scikit-learn RandomForestRegressor, SHAP). Tactic names, budgets and results are fictional.