100 likes | 192 Vues
Analyzing and comparing our OpenX-based solution with market solutions, including algorithms for planification, targeting channels, and ad selection processes to optimize revenue. Three tiers evolution for performance campaigns and delivering millions of ads daily. Implementation and optimization steps detailed.
E N D
our Architecture • Wewanted to analyse and compare our solution to otherMarket solutions • Wedecidedto use OpenX as base Adserver ! • Wewanted to perform mass testingwithat least 3 millions of delivery a day • That’swhywe made thisthree tiers evolution.
OpenX Server Front-End Cluster NOT INCLUDE IN OPEN SOURCE CODE Logrotate : Daily Openxrought logs imps & clicks Filer Reverse proxy New Daily planification Revenu Optimisation Back End Applications OpenX BDD OpenXAdmin
New ajsprocess • As wewanted to modifyeachday the planification and wewanted to base this planification on a differentmethodthan the currentajswemodifieditaccording to the followingalgorithm.
PerfomancecampaignwithOpenX2.8Planification Phase 0 : standard Campaign'C' withoutanyoptimisation Banner - nom - taille - nom Campaign - nom - prix, modèle - capping - zones Targeting Channels T Targeting Channel : - nom - (var/val) 1..* C B T
Our usagewith a segmentation by Targeting channel HH_JourContinuous PageIdSymbol var8 Symbol var9 Our Back End solutionSymbol var10 Symbol Phase 1: Targetingchannelinit Campaign'C' still not optimised Campaign - nom - prix, modèle - capping - zones Banner - nom - taille - nom Targeting Channels Ch_1 T C Ch_2 B Ch_n T Insert in Database
Our usagestep 2 1.1;1;80 1.2;1;60 1.3;1;20 1.4;1;50 1.5;1;6 … Phase 2: Planification Campaign'C' optimised Planif files from the day before C Banner - nom - taille - nom Campaign - nom - prix, modèle - capping - zones Targeting Channels Ch_1 T Ch_2 B (Priority=1) Ch_n Ch_i Ch_j T B (Priority=127) T Ch_k Ch_l
standard .ajs delivery process Ad Tag http://[URL_OpenxFront]]/www/delivery/ajs.php?zoneid=1&var8=1&var9=1&var10=1&u=id=7503090376|8=1|9=1|10=1| Use cached ZoneInfo^1& Zonelinkedadinfos^1 (allowable ads for this zone) If cache not created create cache for ZoneInfo^1 &Zonelinkedadinfos^1 Select the ad selection process:Pluginif zone connected to AdMarket, function _adSelectelsewhere this cached files will store ads in arrays xAds, lAds, eAds: 1. connected to zone 1 2. managed in different array xAds, etc.. according to priority value (-1 for exclusive, >0 && <1 for contract, 0 for remnant,..) Go throught Ads list according to the following order: 1. xAds(exclusives campaign : priority = -1 ) 2. Ads (contractual campaign) priority 10 … 11. Ads (contractual campaign) priority 1 12. lAds(remnant campaign: priority = 0 ) 13 eAds(ecpm priority based campaign: priority =-2) delete non eligible Ads according limitations (channels,..) • According to Ad category (xAds, Ads, lAds), recalculation of priority • if delivery based on priority: priority = priority x priority_factor • - if delivery based on eCPM): test eCPM, and non eligible ad priority set yo 0 Select the Ad
Restriction of current .ajs process Ad Tag http://[URL_OpenxFront]]/www/delivery/ajs.php?zoneid=1&var8=1&var9=1&var10=1&u=id=7503090376|8=1|9=1|10=1| first algorithm restriction: Cache size [ nb campaigns * nb formats ad * nb segments} Use cached ZoneInfo^1& Zonelinkedadinfos^1 (allowable ads for this zone) If cache not created create cache for ZoneInfo^1 &Zonelinkedadinfos^1 Select the ad selection process:Pluginif zone connected to AdMarket, function _adSelectelsewhere Go through Ads list according to the following order: 1. xAds(exclusive campaign : priority = -1 ) 2. Ads (contractual campaign) priority 10 … 11. Ads (contractual campaign) priority 1 12. lAds(remnant campaign: priority = 0 ) 13 eAds(ecpm priority based campaign: priority =-2) second algorithm restriction: we have to go through each ads and limitation before to define priority and select Ad delete non eligible Ads according limitations (channels,..) • According to Ad category (xAds, Ads, lAds), recalculation of priority • if delivery based on priority: priority = priority x priority_factor • - if delivery based on eCPM): test eCPM, and non eligible ad priority set yo 0 third algorithm restriction: Only contractual Ads use priority. And this priority needs to be dynamically recalculate each time. Select the Ad
New Delivery http://[URL_OpenxFront]]/www/delivery/ajs.php?zoneid=1&var8=1&var9=1&var10=1&u=id=7503090376|8=1|9=1|10=1| Use cached file according to Channel and channelIddefined in u parameter If cache not created or expired Generate Cache Channel This cached file will store in an array all the Channels witch content “segmentation” tag and will associate to a channelId the limitation description (Regexp on u parameter). Use cahced file ZoneInfo^1 &Zonelinkedadinfos^1^1 (eligible list of ads for zone 1 and channelId1) If cache not created or expired Generate cache(ZoneInfo^1, Zonelinkedadinfos^1^1) Select the ad selection process:Pluginif zone connected to AdMarket, function _adSelectelsewhere this cached file will store in the array pAds all Ads witch: 1. have been associated with zone 1 2. has a limitation on channelId1 3. has a banner with the pattern "____" Go through Ads list according to the following order: 1. pAds (campaigns from ZonelinkedINfos^1^1) 2. xAds (exclusives campaign : priority = -1 3. Ads contractual campaign) priority 10 … 12. lAds (remnant campaign: priority = 0 ) 13 eAds (ecpm priority based campaign: priority =-2) Recalculate Ads priority in pAds array according to the following formula: = (bannerWeight* campaignWeight)/ sum of all priorities Select Ad