lightweight_mmm icon indicating copy to clipboard operation
lightweight_mmm copied to clipboard

Why Pre and Post Budget Allocation do not change?

Open Gabrielj96 opened this issue 2 years ago • 7 comments

I ran a model with R2 = 0.72 but when I run the budget optmization the value pre and post is the same.

image image

Gabrielj96 avatar Sep 11 '23 14:09 Gabrielj96

It's difficult to say without more information, but your media spend is very concentrated towards one channel. By default the optimizer won't allocate more than 20% additional budget to a given channel and when your spend ratio is 1:100, adding (or subtracting) 20% to a smaller budget item shouldn't result in a significant change in suggested budget allocation.

JasonHSchwartz avatar Sep 12 '23 15:09 JasonHSchwartz

It's difficult to say without more information, but your media spend is very concentrated towards one channel. By default the optimizer won't allocate more than 20% additional budget to a given channel and when your spend ratio is 1:100, adding (or subtracting) 20% to a smaller budget item shouldn't result in a significant change in suggested budget allocation.

Even changing the lower and upper bounds the results still the same.

What additional information do you need?

Gabrielj96 avatar Sep 13 '23 16:09 Gabrielj96

ROI, Response Curves, Media Contributions, etc.

It looks like you're setting the price and budgets correctly.

But just a simple example to illustrate my point above. Imagine you had 1M budget and hold it steady an re-allocate the channel mix. In this example:
Channel A has $900,000 Channel B, C, D, E all have $25,000

Even if Channel A had the worst ROI, you could only theoretically reduce it's budget by $20,000. In this example the optimal solution would look like: $880,000 and 4 x $30,000. This particular example, is unrealistic because there are saturation effects (i.e. the response curves).

In your case, the optimizer is stopping after 1 iteration, which basically means that, with your current spend/channel mix/bounds, the initial solution is optimal.

JasonHSchwartz avatar Sep 13 '23 17:09 JasonHSchwartz

ROI, Response Curves, Media Contributions, etc.

It looks like you're setting the price and budgets correctly.

But just a simple example to illustrate my point above. Imagine you had 1M budget and hold it steady an re-allocate the channel mix. In this example: Channel A has $900,000 Channel B, C, D, E all have $25,000

Even if Channel A had the worst ROI, you could only theoretically reduce it's budget by $20,000. In this example the optimal solution would look like: $880,000 and 4 x $30,000. This particular example, is unrealistic because there are saturation effects (i.e. the response curves).

In your case, the optimizer is stopping after 1 iteration, which basically means that, with your current spend/channel mix/bounds, the initial solution is optimal.

I got you point and I agree. Follow some charts:

mean std median 5.0% 95.0% n_eff r_hat coef_media[0] 0.05 0.03 0.04 0.00 0.09 381.42 1.01 coef_media[1] 0.02 0.01 0.01 0.00 0.03 337.01 1.00 coef_media[2] 0.00 0.00 0.00 0.00 0.01 416.91 1.00 coef_media[3] 0.08 0.07 0.06 0.00 0.17 213.86 1.00 coef_media[4] 1.24 0.28 1.16 0.91 1.73 100.27 1.04 coef_media[5] 0.03 0.03 0.02 0.00 0.07 398.60 1.00 coef_media[6] 0.00 0.00 0.00 0.00 0.01 369.18 1.00 coef_trend[0] -0.01 0.01 -0.00 -0.03 0.01 180.88 1.00 expo_trend 0.65 0.13 0.61 0.50 0.84 230.84 1.00 gamma_seasonality[0,0] 0.08 0.02 0.08 0.04 0.11 214.78 1.01 gamma_seasonality[0,1] -0.09 0.02 -0.09 -0.12 -0.05 241.87 1.02 gamma_seasonality[1,0] 0.09 0.02 0.09 0.05 0.13 180.60 1.03 gamma_seasonality[1,1] 0.02 0.02 0.02 -0.01 0.05 375.56 1.00 gamma_seasonality[2,0] 0.04 0.02 0.04 0.02 0.07 361.22 1.00 gamma_seasonality[2,1] 0.01 0.02 0.01 -0.02 0.04 232.21 1.00 half_max_effective_concentration[0] 1.15 0.94 0.93 0.00 2.25 413.48 1.00 half_max_effective_concentration[1] 0.98 0.96 0.73 0.00 2.17 400.58 1.00 half_max_effective_concentration[2] 0.99 0.92 0.71 0.00 2.13 422.45 1.00 half_max_effective_concentration[3] 1.04 1.06 0.72 0.00 2.33 416.48 1.00 half_max_effective_concentration[4] 0.58 0.27 0.49 0.25 0.96 112.31 1.04 half_max_effective_concentration[5] 1.05 1.02 0.76 0.00 2.34 624.73 1.00 half_max_effective_concentration[6] 1.04 1.00 0.72 0.01 2.43 423.70 1.00 intercept[0] 0.10 0.07 0.09 0.00 0.21 281.51 1.01 lag_weight[0] 0.64 0.21 0.66 0.32 0.99 227.31 1.01 lag_weight[1] 0.71 0.22 0.75 0.39 1.00 141.37 1.01 lag_weight[2] 0.70 0.21 0.73 0.40 1.00 268.88 1.01 lag_weight[3] 0.77 0.21 0.84 0.47 1.00 257.15 1.00 lag_weight[4] 0.17 0.10 0.16 0.02 0.30 294.70 1.01 lag_weight[5] 0.71 0.22 0.75 0.39 1.00 352.26 1.01 lag_weight[6] 0.69 0.21 0.73 0.38 1.00 485.40 1.00 sigma[0] 0.09 0.01 0.09 0.08 0.10 299.70 1.00 slope[0] 1.25 0.99 0.98 0.03 2.62 371.33 1.00 slope[1] 0.87 0.91 0.58 0.00 2.10 298.21 1.00 slope[2] 0.92 0.99 0.62 0.00 2.15 483.06 1.01 slope[3] 0.79 0.96 0.44 0.00 1.93 186.79 1.01 slope[4] 2.08 1.02 1.88 0.78 3.50 149.14 1.02 slope[5] 0.89 0.89 0.62 0.00 2.12 561.82 1.00 slope[6] 0.95 0.91 0.69 0.00 2.09 549.00 1.00

Number of divergences: 1641

image image image image

So, what I think is, we need to realocate some budget because Google Search is getting in his limit. But the budget allocation don't suggest any reallocation.

What can I do?

Gabrielj96 avatar Sep 13 '23 20:09 Gabrielj96

@Gabrielj96 I ran into the same issue and I set bounds for each tactic individually, and I set the upper and lower bounds for the tactic that had the majority of the spend to 0.01 and 0.01, and reran the optimization and it iterated 13 times instead of 1 and optimized the lower channels.

cbSuccessAcademies avatar Sep 27 '23 13:09 cbSuccessAcademies

@Gabrielj96 I ran into the same issue and I set bounds for each tactic individually, and I set the upper and lower bounds for the tactic that had the majority of the spend to 0.01 and 0.01, and reran the optimization and it iterated 13 times instead of 1 and optimized the lower channels.

Thank you for the answer, I guess this tip can solve my problem.

What percentage did you set for the other tactics?

Can you show me an example of code, please?

Gabrielj96 avatar Sep 27 '23 14:09 Gabrielj96