Advertising

When Ads Get Stuck

3 min

“Dig lots of small holes often instead of one very deep one.”


If I were to summarize this entire article into one sentence, that would be it.

I had a client once with a few SKUs in the home decor sector. We went through a slight price increase on the website and the one campaign in the account dipped in performance.

CPAs rose because CPMs rose, reach went down, frequency went up. The whole deal. The previous media buyer on the account (who, mind you, was a DIRECTOR of paid social, and a very good buyer too!) tried switching creatives and turning ads on and off, but nothing worked. No matter what tweaks he made inside the campaign, the metrics kept hovering at the same mediocre performance level.

He came to me, just to have a new set of eyes on it, and I suggested a very stupid thing: what if you just turn the campaign off, duplicate it, and launch the copy?”

Well, he was at his wits' end, so we tried! CPA was terrible on day 1, but by day 7, it was 23% lower than where the campaign had been stuck. But hold on, how is that even possible? Why would the exact same campaign, with the same ads and the same settings, just re-launched, reverse the inefficiency of delivery??

Fast forward some time. I was running TikTok GMV Max ads for a client in the accessories sector. The client sold mainly two products: enamel pins and woven blankets. They had some ancillary products too like stickers and flags, but with an extremely low volume of sales. One product stood out: a pin. A great one, honestly! It took most of the budget and scaled that account significantly over the first month, with great gross revenue volume at high efficiency.

One day, that product went out of stock. Spend plummeted, efficiency plummeted, gross revenue plummeted. The algorithm had to pivot. It started delivering the budget to one specific product, a set of stickers, which was incredibly inefficient, and the volume was low. Yet, most of the delivery got stuck there. 

It stayed stuck for 2 weeks. I then remembered what happened to the Meta client and I tried the same thing. I told myself “just turn it off, duplicate it with the exact same settings, and see what happens.” Well, a different pin now became the priority for the algorithm. Volume went back up (not to previous levels when the amazing pin was in stock, but significantly up), spend went up, efficiency went up.

Hold on… if there was more volume and efficiency available with that other pin, why was the algorithm just stuck delivering to the stickers instead?

You may have encountered similar scenarios yourself, but perhaps never used the oldest trick in the book of “just turn it off and turn it back on” (just slightly modified, as we are not turning on the same campaign per se). There is a reason why the “trick” worked in these scenarios.

In machine learning there is something called sub-optimal convergence, which is what happens when an optimization algorithm gets stuck in a local optimum.

Uh-oh, nerd alert!

Okay, let’s bring it back to Earth for a second. Machine learning algorithms are stochastic, meaning they involve a degree of randomness. When you launch a campaign, the algorithm tosses a coin, if you will, to pick the first few hundred (or so) people to show your ad to.

If those first few people happen to buy Product A, the algorithm receives a positive signal for Product A. It then thinks, "Product A is the winner! I am so efficient, yay, I am doing exactly what I was told to do!" and begins looking for more people exactly like those first buyers. That’s what the algorithm is designed to do.

It’s like if you put a treat in front of a dog. The dog is going to take the quickest and easier path they can to get to the treat (even if it means smashing through glass). The algorithm is a dog (I wonder which breed, probably Shih-Tzu..). It drills down so deep into the Product A audience that it never even tries to find the audience for Product B, even if Product B actually has a higher potential ceiling. It has become dependent on that initial random path.

In optimization theory, a local optimum is a point that looks like the best result relative to everything immediately around it but it isn't the global optimum (which is the actual best possible result). The algorithm has found a valley of decent sales for Product A. To find the mountain of sales for Product B, it would have to stop spending on what is currently working and climb back up into an area of higher costs to explore and most algorithms are designed to avoid that climb, so they stay stuck in the smaller valley.

Meta’s algorithm in particular (which is an optimization algorithm) is constantly balancing two modes:

  • Exploration: Trying new audiences/products to see what works.
  • Exploitation: Doubling down on what is already working.

Once an ad set exits the learning phase, it shifts heavily into exploitation mode. It stops exploring other products in your campaign because it’s trying to be efficient. When you duplicate a campaign, you end up creating a different campaign ID (essentially resetting the campaign: “just turn it off and back on!”) and forcing the contents of the campaigns (creatives, settings) back into the exploration phase, giving it a chance to roll the dice again and find a better product/audience fit.There is also a reason related to the competitive nature of ad delivery on why algorithms get stuck on local optima. An optimization algorithm getting stuck on local optima is a natural phenomenon.Assuming the optimization was not executed in a competitive live environment, that would still happen. That should be enough in itself to make you understand why a restart is at times needed. However, if you need even more convincing, add to that the fact that the optimization algorithm Meta Ads runs works in a live environment, where competitiveness happens a lot. Everyone is bound to the same algorithm, so the algorithm can’t really “afford” to try to explore, or it would be extremely inefficient (inefficient in terms of compute too, keep that in mind!). There is great research on this too (e.g., the paper “How Does Competition Affect Exploration vs. Exploitation? A Tale of Two Recommendation Algorithms”), but essentially, when multiple advertisers target overlapping demographics, the auction density increases. Since the algorithms are constrained by the necessity to win real-time bids efficiently they can’t afford the opportunity cost of exploring unproven audience subsets. They get stuck on, you guessed it, local optima! It’s safer for an algorithm to stay there with mediocre performance than taking a risk. Taking a risk is not efficient! But it might be effective, and that’s the whole point. The possibility of being more effective is always a worthy trade off when the alternative is to stagnate in mediocre performance. Let’s dig a little deeper to drive it home! If you run Meta Ads, you know about the dreaded "Learning Phase." Whether you hate it or not, it is an unavoidable computational reality! Any changes made during the phase are deeply destructive because they continuously reset the learning phase (forcing the algorithm to re-evaluate its immediate local environment), so the algorithm is repeatedly forced to pay the financial penalty of exploration without ever aggregating enough cohesive data to transition into a stable exploitation phase which then, in turn, traps it in a state of perpetual inefficiency. Here is why I always suggest duplication rather than edits within the campaign. Duplicating a campaign isolates the learning phase’s instability and improves the odds of finding a better global optimum.This brings me to a critical limitation in highly automated campaign structures like Meta's Advantage+ or TikTok Smart+. I’ll touch on these briefly but definitely worth noting. The problem of these campaigns is that because the system manages the explore/exploit cycle on its own, when they inevitably converge on a local optimum, the only real way to force it out of that rut is a full reset, which is, you guessed again, duplicating the campaign itself!So, next time you have a campaign where performance is stuck, no matter what you do to it, try to duplicate it and turn off the old one! You are tossing the coin again, which is better than not tossing it at all!

1 Here (and in this article in general) when I refer to metrics like CPA, I mean them in a relativistic way, meaning if I see that ad A has a lower CPA than ad B, that is "true" (one ad is more efficient at delivering than the other), but none of that tells me whether the ads are generating any incremental revenue for the business. One ad is better than the other relative to the system in which they are getting measured (ads manager).

We think you'll also like...

When Ads Get Stuck

“Dig lots of small holes often instead of one very deep one.”‍ If I were to summarize this entire article into one sentence, that would be it.I had a client once with a few SKUs in the home decor sector. We went through a slight price increase on the website and the one campaign in the account dipped in performance.

The Birthday Paradox: Why Your Ad Tests Are Lying to You

You’re running creative tests. Launching new audiences. Tracking attribution across platforms. But there’s a quiet saboteur in your data: The Birthday Paradox.

How Elumynt Turned Around a $50M Business’ Declining YoY Customer Growth in 1 Month

OK, the title is a little ridiculous. We actually debated changing the timeframe just so that it didn’t sound way too sensational, but we decided not to because it wouldn’t be honest. So hold your skepticism, or don’t, but at least read the article until the end.