सुरक्षित ऑडियंस की फ़्रीक्वेंसी कैपिंग

फ़्रीक्वेंसी कैपिंग, विज्ञापन दिखाने का एक तरीका है. इससे किसी तय समयावधि में, किसी उपयोगकर्ता को किसी कैटगरी के विज्ञापनों की संख्या सीमित की जाती है. फ़्रीक्वेंसी कैपिंग से, विज्ञापन इंप्रेशन को नया और दिलचस्प बनाए रखने के साथ-साथ असली उपयोगकर्ता के अनुभव को बेहतर बनाया जा सकता है. साथ ही, इससे विज्ञापन देने वाले लोगों या कंपनियों को विज्ञापन पर होने वाले खर्च को मैनेज करने में मदद मिलती है.

इस प्रस्ताव में बताया गया है कि Android पर Protected Audience का इस्तेमाल करके, फ़्रीक्वेंसी कैपिंग की सुविधा को सटीक और निजता बनाए रखने वाले तरीके से कैसे लागू किया जा सकता है.

Protected Audience, फ़्रीक्वेंसी कैपिंग को लागू करने के लिए दो सुविधाओं को जोड़ता है: विज्ञापन से जुड़े इवेंट के लिए, डिवाइस पर काउंटर का स्टोरेज और फ़िल्टर की रणनीतियों के पहले से तय किए गए सेट के हिसाब से विज्ञापनों को फ़िल्टर करने की सुविधा. फ़्रीक्वेंसी कैपिंग की मदद से, विज्ञापन देने वाले किसी तय समयावधि के लिए, हिस्टोग्राम वैल्यू के योग पर काउंटर थ्रेशोल्ड दिखा सकते हैं.

डिवाइस प्रोफ़ाइल, विज्ञापन टेक्नोलॉजी, और काउंटर की के हर कॉम्बिनेशन के लिए, काउंटर यूनीक होते हैं. हर विज्ञापन में काउंटर बटन का एक सेट होना चाहिए, ताकि विज्ञापन के लिए व्यू या इंप्रेशन रजिस्टर होने पर उसका इस्तेमाल किया जा सके. हर कुंजी के लिए, Protected Audience काउंटर का एक सेट सेव करता है. साथ ही, हर काउंटर किसी तय समयावधि में होने वाले विज्ञापन से जुड़े सभी इवेंट की गिनती करता है. जब कोई इंप्रेशन या व्यू होता है, तो डिवाइस पर मौजूद काउंटर की संख्या बढ़ जाती है. साथ ही, काउंटर का डेटा डिवाइस पर सेव हो जाता है. इसके सेव रहने का सटीक समय बाद में बताया जाएगा.

सुरक्षित ऑडियंस के विज्ञापन चुनने के वर्कफ़्लो में, विज्ञापन फ़िल्टर करने के लॉजिक का ऐक्सेस, काउंटर, रीमार्केटिंग विज्ञापनों, और कॉन्टेक्स्ट के हिसाब से विज्ञापनों के पास होता है. इससे, सुरक्षित ऑडियंस की फ़्रीक्वेंसी कैपिंग, विज्ञापन के सभी तरह के अनुरोधों के साथ काम कर सकती है.

ध्यान दें: विज्ञापन फ़िल्टर करने की सुविधा, सिर्फ़ Android पर निजता सैंडबॉक्स में उपलब्ध है. Chrome पर Protected Audience लागू करने की सुविधा, कॉन्टेक्स्ट के हिसाब से टारगेट किए गए ऐसे विज्ञापनों को फ़िल्टर करने के लिए कोई तरीका लागू नहीं करती है जो Protected Audience में शामिल नहीं हैं. इस प्रस्ताव में सिर्फ़ खरीदार के लिए सहायता शामिल है. अगर मांग होगी, तो हम बाद में सेल-साइड के लिए सहायता जोड़ेंगे.

सुरक्षित ऑडियंस की फ़्रीक्वेंसी कैपिंग की सुविधा, कई तरह की ज़रूरी शर्तों के साथ काम करती है. जैसे:

  • रीयल-टाइम फ़िल्टरिंग. इसमें डिवाइस पर मौजूद काउंटर अपडेट होने पर, सर्वर साइड में कम से कम देरी होती है.
  • अलग-अलग विज्ञापनों, कैंपेन या किसी भी अन्य ग्रुपिंग के साथ-साथ, कुंजियों की सुविधाजनक हैरारकी.
  • AdID पर निर्भर किए बिना, फ़्रीक्वेंसी कैपिंग के अन्य तरीकों के साथ काम करना.
  • यह किसी डिवाइस की उपयोगकर्ता प्रोफ़ाइल पर मौजूद सभी ऐप्लिकेशन पर काम करता है.
  • सटीक और पूरे काउंटर.
  • व्यू या इंप्रेशन जैसे विज्ञापन इवेंट की कस्टम डेफ़िनिशन के लिए सहायता.
  • रीमार्केटिंग और कॉन्टेक्स्ट के हिसाब से विज्ञापन दिखाने की सुविधा, दोनों के लिए एक ही फ़ंक्शन.

फ़्रीक्वेंसी कैपिंग सेट अप करने के लिए, यह तरीका अपनाएं:

पहला चरण: विज्ञापनों में फ़्रीक्वेंसी कैपिंग की जानकारी जोड़ना

कॉन्टेक्स्ट और रीमार्केटिंग विज्ञापन, ad_counter_keys फ़ील्ड का इस्तेमाल करके व्यू या इंप्रेशन के मामले में अपडेट करने के लिए, काम के हिस्टोग्राम काउंटर दिखाते हैं. इस फ़ील्ड में, मनमुताबिक पूर्णांक की सूची होती है. यह फ़ील्ड, metadata फ़ील्ड में शामिल नहीं है, जिसे Protected Audience से पार्स नहीं किया जाता.

नीचे दिए गए उदाहरण में, AdSelectionConfig में adsData फ़ील्ड के लिए डेटा फ़ॉर्मैट दिखाया गया है. रीमार्केटिंग के लिए, किसी कस्टम ऑडियंस के विज्ञापनों की सूची का फ़ॉर्मैट, यहां दिए गए उदाहरण में दिखाए गए ads फ़ील्ड के कॉन्टेंट से मेल खाता है:

'adsData': [
  {
    "buyer": "ads.example.com",
    "ads": [
      {
        'render_url': 'exampleUrl',
        'metadata': {...},   /* metadata are opaque to Protected Audience are
                                required to be in valid JSON format */
        'ad_counter_keys': [1234, 5678]
      }]
  }]
}

दूसरा चरण: व्यू या इंप्रेशन रजिस्टर करना

विज्ञापन टेक्नोलॉजी विशेषज्ञ, updateAdCounterHistogram तरीके का इस्तेमाल करके, उन इवेंट की घटनाओं को रजिस्टर कर सकते हैं जिनका इस्तेमाल फ़्रीक्वेंसी कैपिंग के लिए किया जाता है. किसी एक इवेंट पर, विजेता विज्ञापन के eventType में बताए गए कीवर्ड के लिए, किसी तरीके को बार-बार लागू किया जा सकता है.

void updateAdCounterHistogram(@EventType eventType, long adSelectionId)

इनपुट:

  • eventType: इससे पता चलता है कि किसी इवेंट को व्यू, इंप्रेशन, क्लिक या विज्ञापन चुनने की प्रोसेस में जीत के तौर पर गिना गया है या नहीं.
  • adSelectionId: AdSelectionOutcome ऑब्जेक्ट में मौजूद आईडी वैल्यू, जो selectAds कॉल से वापस आती हैं.

updateAdCounterHistogram कॉल, CustomAudience से फ़ेच किए गए रीमार्केटिंग विज्ञापनों या selectAds के लिए AdSelectionConfig पैरामीटर में शामिल कॉन्टेक्स्ट विज्ञापनों के हिस्से के तौर पर तय की गई कुंजियों के सेट के लिए, हिस्टोग्राम को अपडेट करता है.

अगर आपने यह मान लिया है कि पहले चरण में मौजूद विज्ञापन, AdSelection में विजेता है और उसकी id वैल्यू 9999 है, तो updateAdCounterHistogram(FrequencyCapFilters.AD_EVENT_TYPE_VIEW, adSelectionId: 999) को कॉल करने पर, इन तीन मुख्य बटन के लिए काउंटर की संख्या बढ़ जाती है:

  • {'ads.example.com', 1234, VIEW}
  • {'ads.example.com', 5678, VIEW}

विज्ञापन टेक्नोलॉजी का नाम, खरीदार फ़ील्ड से लिया जाता है. यह नाम, कॉन्टेक्स्ट के हिसाब से दिखाए जाने वाले विज्ञापनों या कस्टम ऑडियंस से लिया जाता है. यह इस बात पर निर्भर करता है कि विज्ञापन कहां से आते हैं.

Android के लिए Protected Audience, selectAds एपीआई कॉल से दिखाए गए विज्ञापनों के लिए, इवेंट टाइप FrequencyCapFilters.AD_EVENT_TYPE_WIN के लिए पहले बताए गए सभी काउंटर को अपने-आप बढ़ा देता है. यह काम करने के लिहाज़ से, Chrome के Protected Audience लागू करने के लिए, generateBid में browser_signals में prev_wins आर्ग्युमेंट जोड़ने के बराबर है.

तीसरा चरण: फ़िल्टर की मदद से फ़्रीक्वेंसी कैप फ़िल्टरिंग लागू करना

बेहतर परफ़ॉर्मेंस के लिए, फ़्रीक्वेंसी कैप फ़िल्टर करने वाला फ़ंक्शन AdServices के अंदर लागू किया जाता है. Protected Audience, AdsData ऑब्जेक्ट में मौजूद फ़िल्टर फ़ील्ड को पढ़कर यह समझता है कि किसी मैसेज को फ़िल्टर करना है या नहीं. फ़िल्टर की सूची, frequency_cap में दी गई है. कुंजी, event_type, और interval_in_seconds की वैल्यू का इस्तेमाल, उन इवेंट का हिस्टोग्राम पाने के लिए किया जाता है जिनका इस्तेमाल, फ़िल्टर करने और Protected Audience के लिए किया जाता है.

फ़िल्टर करने की जानकारी, कस्टम ऑडियंस से मिले रीमार्केटिंग विज्ञापनों के लिए और AdSelectionConfig ऑब्जेक्ट के हिस्से के तौर पर, कॉन्टेक्स्ट के हिसाब से विज्ञापनों के लिए दी जा सकती है.

फ़्रीक्वेंसी कैप फ़िल्टर वाले संदर्भ के हिसाब से विज्ञापनों के लिए, AdSelectionConfig ऑब्जेक्ट में विज्ञापन फ़ील्ड का इस्तेमाल करके विज्ञापन दिखाए जाते हैं. विज्ञापनों को फ़िल्टर किया जाता है और selectAds कॉल के नतीजे के तौर पर, सबसे ज़्यादा बिड वाला विज्ञापन दिखाया जाता है.

फ़्रीक्वेंसी कैप फ़िल्टर वाले रीमार्केटिंग विज्ञापनों के लिए, खरीदार के दिए गए generateBid() JavaScript फ़ंक्शन को शुरू करने से पहले, विज्ञापनों को फ़िल्टर किया जाता है.

यहां दिए गए उदाहरण में, फ़्रीक्वेंसी कैप फ़िल्टरिंग वाला मैसेज दिखाया गया है:

{
  'render_url': 'url',
  'metadata': {...},   /* metadata are opaque to Protected Audience and assumed
                        to be in valid JSON format */

  'ad_counter_keys': [1234, 5678],

  "filters": {
    "frequency_cap": {
      "view": [
        {
          "ad_counter_key": 1234
          "max_count": 10,
          "interval_in_seconds": 86400
        },
        {
          "ad_counter_key": 5678
          "max_count": 10,
          "interval_in_seconds": 86400
        },
      ],
      "win": [
        {
          "ad_counter_key": 1234
          "max_count": 5,
          "interval_in_seconds": 604800
        },
        {
          "ad_counter_key": 5678
          "max_count": 5,
          "interval_in_seconds": 345600
        },
      ]
    },

  // This field is only required in contextual ads and is used in
  // reportImpression calls to fetch the reportWin function.
  'reportingJS': "https://ads.example.com?reportWin.js"
}

चौथा चरण: विज्ञापनों की परफ़ॉर्मेंस की रिपोर्ट देखना

विज्ञापन चुनने की प्रोसेस पूरी होने के बाद, यह AdSelectionOutcome ऑब्जेक्ट दिखाता है. इसमें renderUri और adSelectionId शामिल होते हैं. यह selectAds कॉल के लिए, संख्या वाला आइडेंटिफ़ायर होता है. इस आईडी का इस्तेमाल, इवेंट-लेवल की रिपोर्टिंग की सुविधा देने वाले reportImpression API को शुरू करने के लिए किया जा सकता है. बीटा 1 वर्शन में, यह तरीका रीमार्केटिंग विज्ञापनों के लिए रिपोर्टिंग के साथ काम करता है. साथ ही, इसे बाद में रिलीज़ होने वाले वर्शन में, कॉन्टेक्स्ट के हिसाब से विज्ञापनों के लिए रिपोर्टिंग के साथ काम करने के लिए बढ़ाया जाएगा. संदर्भ के हिसाब से विज्ञापन दिखाने के लिए, खरीदार को यह बताना होगा कि reportImpression कॉल के दौरान reportWin फ़ंक्शन को कहां से वापस लाया जा सकता है. इसके लिए, विज्ञापन स्ट्रक्चर में reportingJS नाम के अतिरिक्त फ़ील्ड का इस्तेमाल करना होगा, जैसा कि पिछले उदाहरण में दिखाया गया है.

विज्ञापन के लिए संभावित उम्मीदवारों को चुनने के सबसे सही तरीके

Protected Audience, फ़्रीक्वेंसी कैपिंग को लागू करने की प्रोसेस को सर्वर से डिवाइस पर ले जाती है. Privacy Sandbox की मदद से, जीतने वाली बिड की शिकायत की जाती है. हालांकि, डेवलपर को यह नहीं पता चलता कि विज्ञापन क्यों नहीं दिखाया गया. ऐसा हो सकता है कि बिड नहीं मिलने या फ़्रीक्वेंसी कैपिंग की वजह से, विज्ञापन न दिखें. कुछ विज्ञापनों के न दिखाए जाने की वजहों के बारे में पूरी जानकारी न होने पर, बिडिंग सिस्टम को ज़्यादा काम करना पड़ता है, ताकि सबसे सही विज्ञापन दिखाए जा सकें. इन सबसे सही तरीकों की मदद से, Protected Audience की मदद से विज्ञापन दिखाने के सबसे सही तरीके का पता चलेगा.

ज़रूरत के मुताबिक रीमार्केटिंग विज्ञापन भेजना

रीमार्केटिंग विज्ञापनों को हर उपयोगकर्ता के हिसाब से ऑप्टिमाइज़ नहीं किया जा सकता. अगर किसी उपयोगकर्ता को कस्टम ऑडियंस से बहुत ज़्यादा विज्ञापन दिखते हैं और विज्ञापन की सीमाएं कम होती हैं, तो सभी विज्ञापन फ़िल्टर हो सकते हैं. रीमार्केटिंग विज्ञापनों को समय-समय पर रीफ़्रेश किया जाता है. इसलिए, रीमार्केटिंग विज्ञापन दिखाए जाते रहें, यह पक्का करने के लिए ज़रूरत के मुताबिक विज्ञापन इन्वेंट्री को फ़्रीक्वेंसी कैपिंग से पास करना चाहिए. इसे विज्ञापन के साइज़ की सीमाओं के साथ संतुलित करना ज़रूरी है. इन सीमाओं को joinCustomAudience कॉल के दौरान और कस्टम ऑडियंस के रोज़ के अपडेट के दौरान तय किया जा सकता है. खरीदारों को इस बात का ध्यान रखना चाहिए कि बिडिंग के दौरान, रिस्पॉन्स में देरी हो सकती है. इन समस्याओं के असर को कम करने के लिए, generateBid को कॉल करने से पहले फ़्रीक्वेंसी कैप फ़िल्टरिंग की जाती है.

सर्वर पर संदर्भ के हिसाब से काउंटर रखना

सर्वर साइड के अनुमान की मदद से, डेवलपर को यह अनुमान लगाया जा सकता है कि फ़्रीक्वेंसी कैपिंग कब चालू हो सकती है. इन अनुमानों से पता चल सकता है कि किसी विज्ञापन ने फ़्रीक्वेंसी कैप थ्रेशोल्ड को हिट कर लिया है. इसलिए, उसे ज़्यादा विज्ञापन कैंडिडेट के साथ भेजा जाना चाहिए या पूरी तरह से हटा दिया जाना चाहिए.

संदर्भ के हिसाब से जवाब देने की सुविधा के लिए, एक से ज़्यादा विज्ञापन दिखाने के लिए

आपको सुरक्षित ऑडियंस की नीलामी से पहले, संदर्भ के हिसाब से जवाब के साथ कई विज्ञापन कैंडिडेट भेजने चाहिए. इससे यह पक्का होता है कि अगर कई विज्ञापन फ़िल्टर किए जाते हैं, तो भी अन्य विज्ञापन दिखाए जाते हैं. विज्ञापन के लिए चुने गए विकल्पों को प्राथमिकता दी जा सकती है, ताकि कुछ विज्ञापन बैकअप के तौर पर दिखाए जा सकें.

विज्ञापन दिखाने की प्रोसेस में समय की सीमा होती है. इसलिए, विज्ञापन के लिए ऐसे विकल्प चुने जाने चाहिए जिनकी नीलामी में जीतने की संभावना हो और जिन्हें फ़िल्टर न किया गया हो.

सीमाएं

सुरक्षित ऑडियंस की फ़्रीक्वेंसी कैपिंग की ये सीमाएं हैं:

  1. सुरक्षित ऑडियंस की फ़्रीक्वेंसी कैपिंग, डिवाइस की उपयोगकर्ता प्रोफ़ाइल के लेवल पर काम करती है. इसमें दूसरे डिवाइसों और अन्य प्रोफ़ाइलों पर कोई शेयर किया गया काउंटर नहीं होता. अगर ज़रूरी हो, तो दूसरे डिवाइसों से दिखाए जाने वाले विज्ञापनों की संख्या में होने वाली बढ़ोतरी को मैन्युअल तरीके से शामिल करना होगा.
  2. डिवाइस काउंटर, डिवाइस पर सेव और ऐक्सेस किए जाते हैं. सर्वर साइड के काउंटर को अलग से मैनेज करना होगा.
  3. फ़्रीक्वेंसी कैपिंग और उससे जुड़ी विज्ञापन फ़िल्टरिंग की प्रोसेस, डिवाइस पर की जाती है. इसलिए, विज्ञापन टेक्नोलॉजी प्लैटफ़ॉर्म के पास इन प्रोसेस पर सीधा कंट्रोल नहीं होता. डिवाइस की फ़्रीक्वेंसी कैपिंग थ्रेशोल्ड को बायपास करने के लिए, विज्ञापन टेक्नोलॉजी प्लैटफ़ॉर्म, अलग-अलग फ़िल्टर के साथ कई संभावित विज्ञापन भेज सकते हैं.
  4. रिकॉर्ड की गई फ़्रीक्वेंसी के आधार पर बिड घटाना या बढ़ाना काम नहीं करता. generateBid फ़ंक्शन, फ़्रीक्वेंसी काउंटर नहीं देख सकते.