Budget Allocation in PYMC Marketing Mix Modeling

Hi,

I’m currently working on building a Marketing Mix Model (MMM) using the pymc-marketing package (version 0.8). After successfully building the model, I’m now focusing on optimizing budget allocation across various media channels.

Based on some research, I’ve made adjustments to include a max() function for optimized budget allocation. In the allocate_budget_to_maximize_response() function, I set the budget per unit (e.g., for a total budget of 50 over 10 weeks, I used 5 as the budget). However, when running the allocation, I’m noticing that one channel (Google) receives the maximum budget allocation, while the other channels are assigned minimal amounts.

Here’s an outline of the approach:

  • Total Budget: 206,250 (2475000 for 12 weeks)
  • Channels: [Google_Spend, Bing_Spend, ASA_Spend, Facebook_Spend, TikTok_Spend, Taboola_Spend]
  • Initial Budget Split: Divided equally across all channels
  • Budget Bounds: Set between a minimum of 1,000 and the total budget for each channel.

Despite these settings, the budget allocation is heavily skewed towards one channel. Could someone help clarify how the minimum and maximum bounds work and suggest how to achieve a more balanced allocation across channels?

Thanks in advance!

Are you setting each channel bounds as (1_000, 206_250)? If so, that might be the issue assuming the mROAS for Google_Spend is relatively higher compared to other channels.

Try to set your upper bounds based on historical spend share per channel + some percentage to provide some flexibility to the allocator or use the saturation point per channel.

@Alfredo_Delgado - Thank you for your response. I’ve also tried setting the upper bound based on historical spend, but regardless of any adjustments, the Google spend consistently hits the maximum limit I set.