Predictive campaign planning & decision support

Predictive Budget Spend System

A two-phase machine-learning system that learns from historical campaign outcomes, then gives users an immediate High, Medium, or Low budget-spend prediction while they configure a campaign.

Business problem

The challenge

Campaign teams had to choose budgets, time frames, audiences, network blocklists, and delivery settings before they knew whether those parameters were likely to spend the full budget. Poorly balanced configurations could limit delivery and leave revenue unrealized.

The opportunity was to turn historical spend behavior into practical, pre-launch guidance. The prediction needed to arrive inside the existing campaign workflow and translate a model score into language a user could act on immediately.

Technical solution

Our approach

The design separates offline learning from online inference: training can evolve independently while the product consumes a stable, explainable prediction contract.

  1. 01

    Build the historical dataset

    Combine past campaign configurations—budget, time frame, audience size, network blocklists, targeting, and delivery parameters—with the observed outcome of whether each campaign spent its full budget on time.

  2. 02

    Train and validate the model

    Use those labeled outcomes to identify delivery patterns, train the predictive model, evaluate its performance, and derive validated thresholds for High, Medium, and Low likelihood classifications.

  3. 03

    Serve predictions through an API

    Deploy the trained model behind a REST endpoint that accepts a current campaign configuration, applies the same feature preparation used in training, and returns a spend-likelihood score and classification.

  4. 04

    Put guidance in the workflow

    Request a prediction as campaign parameters change and display the result in the UI before launch, giving the user time to adjust the configuration while the decision is still reversible.

Results & impact

Prediction at the point of decision.

Instead of reviewing underdelivery after launch, the system gives campaign teams an actionable signal while configuration choices can still be improved.

40%

revenue increase

Predictive budget-spend guidance helped teams recognize and act on campaign configurations with stronger delivery potential.

3

clear classifications

High, Medium, and Low translate a raw model prediction into concise guidance that campaign users can understand.

Pre-launch

decision feedback

The prediction appears while a campaign is being configured, when budget, timing, audience, and delivery inputs can still be changed.

Visual assets

From historical outcomes to a live classification.

Model training and threshold validation

flowchart TD
  subgraph INPUTS["HISTORICAL CAMPAIGN INPUTS"]
    B["Budget amount"]
    T["Campaign time frame"]
    A["Audience size"]
    N["Network blocklists"]
    P["Targeting & delivery parameters"]
  end

  B --> J["Join configuration with outcome"]
  T --> J
  A --> J
  N --> J
  P --> J
  S["Label: full budget spent<br/>within time frame?"] --> J
  J --> Q["Clean, encode & prepare features"]
  Q --> R["Training dataset"]
  R --> M["Train predictive model"]
  M --> V["Validate on historical holdout data"]
  V --> TH["Derive High / Medium / Low thresholds"]
  TH --> G{"Meets performance criteria?"}
  G -->|"No"| Q
  G -->|"Yes"| D[("Deploy model + thresholds")]
01 The offline training pipeline connects each campaign configuration to its observed spend outcome, then validates both the model and the user-facing classification boundaries.

Two-phase system architecture

flowchart LR
  subgraph TRAIN["1 · TRAINING PHASE"]
    A["Historical campaign<br/>configurations"] --> B["Feature preparation"]
    O["Actual spend outcomes"] --> B
    B --> C["Train predictive model"]
    C --> D["Validate model &<br/>classification thresholds"]
    D --> E[("Versioned model")]
  end

  subgraph APP["2 · FULL-STACK PREDICTION PHASE"]
    U["Campaign UI"] -->|"Current configuration"| API["Prediction REST API"]
    API --> F["Apply feature preparation"]
    F --> M["Model inference"]
    E -.->|"Deploy"| M
    M --> K{"Classification"}
    K --> H["High"]
    K --> MD["Medium"]
    K --> L["Low"]
    H --> U
    MD --> U
    L --> U
  end
02 Historical outcomes produce a validated model; the full-stack application then uses that model for real-time campaign guidance.

Real-time classification request

sequenceDiagram
  actor User
  participant UI as Campaign UI
  participant API as Prediction REST API
  participant Prep as Feature Preparation
  participant Model as Predictive Model

  User->>UI: Configure budget, timing,<br/>audience and delivery settings
  UI->>API: POST current campaign configuration
  API->>Prep: Validate and transform inputs
  Prep->>Model: Send model-ready features
  Model-->>API: Return spend-likelihood score
  API->>API: Apply validated thresholds
  API-->>UI: Return High, Medium, or Low
  UI-->>User: Display pre-launch guidance
03 The online path keeps model complexity behind a REST API and returns a simple classification to the campaign-planning interface.

Tech stack

Built for production.

The portfolio visuals document the system at the architecture level because source code and product screenshots are not available. The work spans offline model training, threshold validation, model deployment, REST inference, and pre-launch UI feedback.

Historical campaign dataFeature engineeringSupervised machine learningPredictive classificationModel validationClassification thresholdsREST APIFull-stack application integrationCampaign configuration UI