At its heart, a targeting engine must make a decision about what ad to send to a website visitor. This can be done at random, by looking at surrounding content, or by looking at history. Most “site ads” are chosen randomly from a short list that’s manually administered by the site owner. The ad rotation allows for the site to stay fresh – users seeing the same ad too frequently will subconsciously learn to ignore them – while still delivering the target number of impressions agreed upon by the site owner and their customers. The goal is to have customers with relevant ads and place them to achieve the greatest click-through rate. It’s an optimization problem that’s run by hand.
If, however, the ad network spans a great number of websites, choosing at random won’t bring the greatest revenue or click-through rate. Optimizing a large network can’t be done cost effectively by hand. Systems like Google’s AdSense or Yahoo! Ads will scrape the content of a website and through keyword searches determine which ads are most relevant and will therefore garner the greatest click-through rate. The market shows us that this is an effective approach, but it’s not solving the same optimization problem that the single site owner does by hand.
So here’s the goal: Build a system that looks at the history of all ad campaigns on all sites and selects an ad with the greatest likelihood of being clicked on. Now the content of the site becomes unimportant. When a user clicks on an ad we can view that as a success and train our targeting engine accordingly. In machine learning terms, this is a feed forward classifier (more on this another time).