Budget recommendation — AI suggestions

getOptimalMixRecommendation. RULE-BASED (NOT AI). Returns platform, current_budget_pct, recommended_budget_pct, multiplier from historical ROAS+spend.

Written By Salvatore Sinigaglia

Last updated About 4 hours ago

getOptimalMixRecommendation. RULE-BASED (NOT AI). Returns platform, current_budget_pct, recommended_budget_pct, multiplier from historical ROAS+spend.

Budget recommendation — AI suggestions

The Budget recommendation block in Cross-Channel mode suggests how to reallocate spend across platforms. Backed by getOptimalMixRecommendation() in apps/backend/src/services/cross-channel-analytics.service.ts. Returns MixRecommendation[]. RULE-BASED logic (not machine learning): over a fixed 30-day window it shifts budget toward higher-ROAS platforms using clamp(sqrt(roas / averageRoas)), clamped to ±50% (MAX_BUDGET_SHIFT_PCT = 50). Guardrails require ≥14 days with spend, a meaningful daily spend, and positive ROAS. Use for weekly budget allocation; apply gradually (auction systems dislike abrupt changes).

Who is this for

Mediabuyers + admins making cross-platform budget allocation decisions. Especially valuable when running 3+ platforms simultaneously and rebalancing across weeks / months.

What the recommendation shows

For each selected platform:

FieldWhat
platformPlatform code (meta, google, tiktok, etc.)
spendCurrent spend (period) in target_currency
roasCurrent ROAS
current_budget_pctCurrent share of cross-platform spend
recommended_budget_pctSuggested share
recommendation_delta_pctDifference (recommended − current)
multiplierSuggested budget multiplier (e.g. 1.25 = +25%)
avgDailySpendCurrent avg daily spend

UI typically renders as a table or stacked bar comparison (current vs recommended).

How it works (the rule)

The logic is rule-based, not AI / ML:

  1. Over a fixed 30-day window (windowDays: 30, not the page date range), compute each platform's ROAS
  2. Compute the average ROAS across platforms
  3. Derive each platform's budget multiplier as clamp(sqrt(roas / averageRoas))
  4. Clamp the multiplier to ±50% (MAX_BUDGET_SHIFT_PCT = 50) to prevent disruptive reallocation
  5. Return current vs recommended split

Guardrails must pass first (otherwise no recommendation is returned): each platform needs ≥ 14 days with spend, at least a meaningful daily spend (~€100/day equivalent), and a positive average ROAS.

No machine learning. No external data feeds. Pure historical performance.

This is deliberate:

  • Transparent + auditable (you can verify the math)
  • Predictable (same input → same output)
  • No training-data drift risk
  • Marketers retain control (rule explains itself)

How to use the recommendation

Weekly cadence

Every Monday: review the recommendation. Compare with last week's actuals. Decide:

  • Accept fully: apply suggested multipliers to per-platform budget caps
  • Accept partially: shift partway toward recommendation (e.g. half the delta)
  • Reject: keep current allocation (e.g. you have a strategic reason ROAS-only doesn't capture)

Apply gradually

Don't shift +50% on a platform overnight. Auction systems (Meta, Google) react poorly to abrupt budget changes — bid prices spike, audience auctions destabilize.

Apply over 2-4 days in smaller deltas (e.g. +15% Monday, +15% Wednesday, +15% Friday for a +50% total).

Compare with intuition

If recommendation contradicts your intuition: investigate. The rule sees ROAS only. Maybe:

  • The high-ROAS platform is small-scale (won't sustain doubled budget at same ROAS)
  • The low-ROAS platform has strategic value (brand reach, new market test)
  • Postback lag is masking real performance (see an-114)

Decide with full context.

Pair with channel comparison

Recommendation is the "what should be". Channel comparison (an-108) is the "what is". Read together.

Constraints + caveats

Fixed 30-day window

The recommendation always computes ROAS over a fixed 30-day window (windowDays: 30), independent of the page's date-range picker. You can't shorten or lengthen the recommendation window from the UI. The guardrail requires at least 14 days with spend inside that window before a recommendation is produced.

Spend floor sensitivity

A platform with €100 spend and ROAS 5 may show "scale up" recommendation, but doubling to €200 won't necessarily preserve ROAS — diminishing returns kick in.

The rule doesn't model diminishing returns. You must.

Postback lag

ROAS within the last 24-72h is incomplete (Meta API delay, postback lag). Since the recommendation window is a fixed 30 days, the most recent 1-3 days are only a small slice, but be aware the freshest days are still settling.

Strategic dimensions not captured

ROAS-only logic doesn't see:

  • Brand reach value (TikTok awareness today → Meta conversions next quarter)
  • New-market testing (intentional low-ROAS spend on a new geo)
  • Audience cap (you can't infinitely scale Meta — eventually you exhaust the addressable audience)

These need human judgment on top of the recommendation.

What it's NOT

To be clear about scope:

  • ❌ NOT an AI / ML model — pure rule
  • ❌ NOT predictive (no forecasting)
  • ❌ NOT applied automatically (you decide whether to apply)
  • ❌ NOT considering competitive dynamics, seasonality, or external factors
  • ❌ NOT a substitute for Rules Engine (which acts on entity-level conditions; recommendation is allocation-level)

Connection to Rules Engine (PRD-17)

The recommendation tells you "shift more to Meta". The Rules Engine (rul-*) acts at the entity level (campaign / adset / ad). They're complementary:

  • Recommendation: strategic budget mix (cross-platform)
  • Rules Engine: tactical entity action (intra-platform)

Workflow: use recommendation weekly to set per-platform total budget caps; use Rules Engine continuously to optimize within each platform.

See rul-105 actions.

Constraints

  • Fixed 30-day ROAS window (windowDays: 30) — not driven by the page date range
  • ±50% multiplier clamp (MAX_BUDGET_SHIFT_PCT = 50)
  • Guardrails: ≥14 days with spend, meaningful daily spend, positive average ROAS — otherwise no recommendation
  • target_currency required (no native currency option)
  • Feature gating: ENABLE_CROSS_CHANNEL_ANALYTICS (route returns 404 when off)

Common mistakes

  • Applying recommendation in full overnight: auction shock; apply gradually over days
  • Treating it as AI prediction: it's rule-based on historical ROAS only
  • Ignoring spend column: small-spend platforms have noisy ROAS; rule may over-recommend
  • Skipping postback lag check: short windows give incomplete ROAS data
  • Reading recommendation without channel comparison: missing context

FAQ

Is Wevion's budget recommendation powered by AI?

No — despite the "AI suggestions" label, Wevion's Budget recommendation is rule-based, not machine learning. Backed by getOptimalMixRecommendation(), it shifts budget toward higher-ROAS platforms using historical patterns only. This is deliberate: the rule is transparent, auditable, and predictable, with no training-data drift and no external data feeds.

How does the budget recommendation rule work?

Over a fixed 30-day window, the rule computes each platform's ROAS and the average ROAS, then derives a budget multiplier of clamp(sqrt(roas / averageRoas)). It clamps that multiplier to ±50% (MAX_BUDGET_SHIFT_PCT = 50) to prevent disruptive reallocation, then returns the current versus recommended split. Guardrails (≥14 days with spend, meaningful daily spend, positive ROAS) must pass first.

Should I apply the budget recommendation all at once?

No — apply it gradually. Auction systems like Meta and Google react poorly to abrupt budget changes, causing bid spikes and destabilized audience auctions. Spread a large shift over 2-4 days in smaller deltas, for example +15% Monday, +15% Wednesday, and +15% Friday for a +50% total.

What date range does the budget recommendation use?

It uses a fixed 30-day window (windowDays: 30), not the page's date-range picker — you can't shorten or lengthen it from the UI. A guardrail requires at least 14 days with spend inside that window before a recommendation is produced. Since ROAS in the last 24-72 hours is still settling, treat the freshest days with some caution.

Does Wevion apply the budget recommendation automatically?

No. The Budget recommendation is never applied automatically — you decide whether to accept it fully, accept it partially, or reject it. It's also not predictive and doesn't model diminishing returns, competitive dynamics, or seasonality, so pair it with human judgment and the Channel comparison block.

FAQ

Is Wevion's budget recommendation powered by AI?

No — despite the "AI suggestions" label, Wevion's Budget recommendation is rule-based, not machine learning. Backed by getOptimalMixRecommendation(), it shifts budget toward higher-ROAS platforms using historical patterns only. This is deliberate: the rule is transparent, auditable, and predictable, with no training-data drift and no external data feeds.

How does the budget recommendation rule work?

Over a fixed 30-day window, the rule computes each platform's ROAS and the average ROAS, then derives a budget multiplier of clamp(sqrt(roas / averageRoas)). It clamps that multiplier to ±50% (MAXBUDGETSHIFT_PCT = 50) to prevent disruptive reallocation, then returns the current versus recommended split. Guardrails (≥14 days with spend, meaningful daily spend, positive ROAS) must pass first.

Should I apply the budget recommendation all at once?

No — apply it gradually. Auction systems like Meta and Google react poorly to abrupt budget changes, causing bid spikes and destabilized audience auctions. Spread a large shift over 2-4 days in smaller deltas, for example +15% Monday, +15% Wednesday, and +15% Friday for a +50% total.

What date range does the budget recommendation use?

It uses a fixed 30-day window (windowDays: 30), not the page's date-range picker — you can't shorten or lengthen it from the UI. A guardrail requires at least 14 days with spend inside that window before a recommendation is produced. Since ROAS in the last 24-72 hours is still settling, treat the freshest days with some caution.

Does Wevion apply the budget recommendation automatically?

No. The Budget recommendation is never applied automatically — you decide whether to accept it fully, accept it partially, or reject it. It's also not predictive and doesn't model diminishing returns, competitive dynamics, or seasonality, so pair it with human judgment and the Channel comparison block.

Steps

  1. Over a fixed 30-day window (windowDays: 30, not the page date range), compute each platform's ROAS
  2. Compute the average ROAS across platforms
  3. Derive each platform's budget multiplier as clamp(sqrt(roas / averageRoas))
  4. Clamp the multiplier to ±50% (MAXBUDGETSHIFT_PCT = 50) to prevent disruptive reallocation
  5. Return current vs recommended split

Last updated: 2026-05-17