بازگشت به بلاگ
۲۳ مرداد ۱۴۰۵Sergei Solod11 دقیقه مطالعه

آنچه از آزمایش فراوانی Popunder در برابر تعامل کاربران آموختم

فراوانی popunder را در یک وب‌اپلیکیشن واقعی افزایش دادم و تعامل تجمیعی را قبل و بعد از تغییر بررسی کردم. در نهایت تأخیر اولیه ۴۵ ثانیه و حداقل فاصله چهار دقیقه‌ای را نگه داشتم، اما درس مهم‌تر این بود که ثبات ظاهری میانگین تعامل را باید با احتیاط تفسیر کرد.

popunderمحدودیت فراوانیدرآمدزایی وبتعامل کاربرتحلیل وب

انتظار داشتم رابطه فراوانی popunder و تجربه کاربر خیلی روشن باشد: تبلیغ کمتر برای حفظ تجربه کاربری، یا تبلیغ بیشتر برای افزایش درآمد تا جایی که تعامل افت کند. در محیط واقعی، نتیجه به این سادگی نبود.

بعد از افزایش فراوانی در یکی از وب‌اپلیکیشن‌های در حال کارم، انتظار داشتم در داده‌های تعامل یک شکست واضح ببینم. اما شاخص تجمیعی تقریباً در همان دامنه نوسان روزانه قبلی ادامه پیدا کرد. بعضی روزها بهتر و بعضی بدتر بود، ولی افت پایدار و مشخصی که هم‌زمان با سیاست جدید آغاز شده باشد مشاهده نکردم.

در نهایت این تنظیم را نگه داشتم:

تأخیر اولیه: ۴۵ ثانیه
حداقل فاصله پس از یک popunder موفق: ۴ دقیقه

همچنین پنجره‌ای برای محدودیت فراوانی نگه داشتم که در همان بازه چهار دقیقه‌ای بیش از یک رویداد موفق را مجاز نمی‌کرد:

const policy = {
  initialDelaySeconds: 45,
  cooldownSeconds: 240,
  windowSeconds: 240,
  maxEventsPerWindow: 1,
};

این فقط شبه‌کد توضیحی است و به هیچ ارائه‌دهنده تبلیغ، SDK، برنامه یا معماری استقرار خاصی وابسته نیست. بخش مهم‌تر، سیاست پشت این پیاده‌سازی است.

در واقع با دو تصمیم جداگانه درباره فراوانی روبه‌رو هستیم

ابتدا مسئله را این‌طور می‌دیدم: بین دو popunder چند دقیقه فاصله باشد؟ بعد متوجه شدم این انتزاع درستی نیست. دست‌کم دو تصمیم وجود دارد: تأخیر پیش از اولین فرصت تبلیغاتی و حداقل فاصله پیش از فرصت‌های بعدی.

این دو لحظه شرایط یکسانی ندارند. بازدیدکننده تازه هنوز نمی‌داند محصول برایش ارزش دارد یا نه؛ کاربری که درگیر شده تا حد زیادی این تصمیم را گرفته است. به همین دلیل، اولین وقفه را شایسته محافظت بیشتری نسبت به وقفه‌های بعدی دانستم.

چرا در ثانیه‌های اول کمتر تهاجمی درآمدزایی کردم

کوتاه‌تر کردن تأخیر اولیه باعث می‌شود کاربران بیشتری زودتر واجد شرایط تبلیغ شوند و فرصت‌های بالقوه بیشتری ایجاد شود. از نظر مکانیکی درست است، اما زمان وقوع درآمدزایی را نادیده می‌گیرد.

اگر تبلیغ تقریباً بلافاصله پس از ورود نمایش داده شود، جزئی از قضاوت اولیه کاربر درباره سایت خواهد شد. اگر کاربر پیش از آن زمانی بدون وقفه برای شناخت و استفاده از محصول داشته باشد، همان سازوکار تبلیغاتی در زمینه‌ای متفاوت رخ می‌دهد.

قبلاً تأخیر کوتاه‌تری داشتم، اما آن را به ۴۵ ثانیه افزایش دادم. این زمان هنوز نسبتاً کوتاه است و هدفم یک تنظیم محافظه‌کارانه نبود. فقط شروع بازدید را از اولین فرصت درآمدزایی جدا می‌کرد. به‌مرور آن ۴۵ ثانیه را نه موجودی تبلیغاتی از دست‌رفته، بلکه زمانی برای اثبات ارزش محصول دیدم.

۴۵ ثانیه یک آستانه است، نه زمان‌بندی قطعی

پایان تأخیر فقط کاربر را واجد شرایط می‌کند؛ لزوماً در 00:45 تبلیغی ظاهر نمی‌شود. رویداد واقعی همچنان به یک تعامل مناسب کاربر وابسته است. ممکن است کاربر در 00:45 واجد شرایط شود و popunder اول در 01:03 و پس از اقدام مناسب بعدی رخ دهد.

همین موضوع درباره فاصله چهار دقیقه‌ای نیز صادق است. معنایش این است که رویداد بعدی پیش از گذشت چهار دقیقه از رویداد موفق قبلی واجد شرایط نمی‌شود، نه اینکه هر چهار دقیقه تبلیغی به‌طور خودکار باز شود. بنابراین این زمان‌ها حداقل فاصله‌اند و فاصله واقعی می‌تواند بیشتر باشد.

فاصله تکرار از تأخیر اولیه مهم‌تر شد

وقتی از تأخیر اول رضایت پیدا کردم، ریتم تکرار متغیر مهم‌تر شد. فاصله طولانی فشار تبلیغاتی را کم می‌کند، اما ممکن است بسیاری از کاربران فعال هرگز به فرصت دوم نرسند.

دو شرط را هم‌زمان می‌خواستم: کاربری که به استفاده ادامه می‌دهد شانس واقعی برای یک رویداد درآمدزایی دیگر داشته باشد و در عین حال بین رویدادها بخش‌های معناداری از استفاده بدون وقفه باقی بماند.

فاصله چهار دقیقه را نگه داشتم. با تأخیر اولیه ۴۵ ثانیه، اولین نقاط نظری واجد شرایط شدن تقریباً 00:45، 04:45، 08:45 و 12:45 هستند. رویدادهای واقعی ممکن است دیرتر رخ دهند، چون همچنان تعامل مناسب لازم است.

چرا چهار دقیقه با صرفاً بیشینه‌کردن نمایش‌ها فرق داشت

کوتاه‌کردن فاصله، فرصت‌های نظری بیشتری ایجاد می‌کند. اگر تنها معیار تعداد فرصت تبلیغاتی برای هر کاربر باشد، فاصله کمتر واضحاً بهتر است. اما محصول فقط تا زمانی ارزش تبلیغاتی دارد که برای کاربر هم ارزشمند باشد.

درآمدزایی بیشتر
-
آسیب رفتاری
=
ارزش خالص

چهار دقیقه یک بخش معنادار از استفاده عادی ایجاد می‌کرد که در آن popunder دیگری غیرممکن بود. این تضمین برای من مهم‌تر از عبارت «هر چهار دقیقه یکی» بود.

پس از یک رویداد درآمدزایی، کاربر چند دقیقه دارد که وقوع رویداد بعدی در آن غیرممکن است.

انتظار افت واضح تعامل را داشتم

پیش از استقرار، فرض اصلی من این بود که افزایش فراوانی تبلیغ در تحلیل‌ها یک افت واضح قبل و بعد ایجاد می‌کند. اگر چنین چیزی می‌دیدم، دلیل محکمی برای کاهش شدت سیاست داشتم.

اما تعامل تجمیعی مانند قبل نوسان داشت. نه یک سطح پایه پایین‌تر جدید دیدم و نه دوره‌ای که پس از تغییر فراوانی، شاخص به‌طور پایدار ضعیف‌تر بماند. اثری که انتظار داشتم آن‌قدر بزرگ باشد که به‌وضوح دیده شود، ظاهر نشد.

واقعاً چه ادعایی می‌توانم مطرح کنم

نمی‌توانم بگویم تبلیغات هیچ اثری نداشت، کاربران ناراحت نشدند، ماندگاری کاملاً بدون تغییر بود یا این تنظیم در همه‌جا بهینه است. یک میانگین تجمیعی چنین چیزهایی را ثابت نمی‌کند.

قوی‌ترین ادعایی که مشاهدات من پشتیبانی می‌کند محدودتر است:

پس از افزایش فراوانی، افت پایدار و روشنی در تعامل تجمیعی فراتر از نوسان طبیعی قبلی مشاهده نکردم.

این بیان جا را برای اثرهای کوچک‌تر، تفاوت بین گروه‌های کاربری و رفتارهایی که یک میانگین پنهان می‌کند باز می‌گذارد. آزمایش من بررسی قابل‌قبول بودن تنظیم برای ادامه استفاده بود، نه اثبات یک نقطه بهینه جهانی.

یک میانگین پایدار می‌تواند رفتارهای کاملاً متفاوتی را پنهان کند

میانگین تقریباً ثابت ممکن است نتیجه واقعیت‌های مختلف باشد. شاید تقریباً همه یکسان رفتار کنند؛ شاید بعضی زودتر خارج شوند و گروه دیگری بیشتر بماند؛ شاید گروه کوچکی واکنش منفی نشان دهد ولی برای جابه‌جایی میانگین کافی نباشد؛ یا اثر منفی واقعی از نوسان عادی روزانه کوچک‌تر باشد.

به همین دلیل، ثبات شاخص تجمیعی را نشانه‌ای برای پایش می‌دانم، نه مدرک نبود اثر.

تعامل با مدت واقعی بازدید یکی نیست

همچنین معیار engagement را معادل دقیق میانگین طول نشست در نظر نگرفتم. تعامل فعال بر اساس تعریف سامانه تحلیلی سنجیده می‌شود و لزوماً برابر زمانی نیست که تب مرورگر باز مانده است. کاربران تمرکز را تغییر می‌دهند، بعداً برمی‌گردند یا طوری جابه‌جا می‌شوند که مدل ساده «زمان حضور در سایت» را گمراه‌کننده می‌کند.

بنابراین فاصله تبلیغ را از فرمولی مثل «میانگین تعامل X است، پس popunder بعدی باید قبل از X بیاید» استخراج نکردم. از شاخص جهت‌دار استفاده کردم: آیا محصول پس از تغییر به‌طور محسوسی ضعیف‌تر به نظر می‌رسد؟ در سطح تجمیعی مورد پایش من، پاسخ منفی بود.

Cooldown و پنجره فراوانی مرتبط‌اند، اما یکسان نیستند

در پیاده‌سازی هم فاصله ۲۴۰ ثانیه‌ای و هم پنجره ۲۴۰ ثانیه‌ای با حداکثر یک رویداد موفق وجود داشت. تا حد زیادی هم‌پوشان‌اند، اما دو محدودیت کمی متفاوت را بیان می‌کنند.

Cooldown می‌گوید تا زمان کافی از رویداد قبلی نگذشته، رویداد بعدی مجاز نیست. پنجره می‌گوید در بازه تعریف‌شده بیش از یک رویداد موفق مجاز نیست. هر دو را نگه داشتم تا حتی اگر یک integration یکی از مکانیزم‌ها را متفاوت تفسیر کرد، قاعده اصلی روشن باقی بماند.

دو popunder موفق هرگز نباید با فاصله کمتر از چهار دقیقه رخ دهند.

یک رویداد در هر پنجره به معنی یک رویداد در کل بازدید نیست

مقداری مانند maxEventsPerWindow = 1 لزوماً به معنای یک تبلیغ در کل مدت حضور کاربر نیست. دامنه آن همان پنجره پیکربندی‌شده است و پس از پایان پنجره، پنجره دیگری می‌تواند آغاز شود. همچنین 1 به معنای یک اقدام کاربر نیست، بلکه یک رویداد موفق درآمدزایی در آن بازه است.

اکنون هنگام بررسی منطق فراوانی سه سؤال می‌پرسم: شمارنده چه چیزی را می‌شمارد؟ چه چیزی آن را reset می‌کند؟ پنجره reset چقدر طول می‌کشد؟ بدون این پاسخ‌ها، عدد خامی مثل 1 تقریباً معنایی ندارد.

سیاست را از پیاده‌سازی مخصوص ارائه‌دهنده جدا کردم

می‌توان رفتار قابل استفاده مجدد را بدون افشای اسکریپت‌ها، شناسه‌ها یا نام پارامترهای خاص ارائه‌دهنده توضیح داد:

function isEligible(state, now) {
  if (!state.hasShownFirstEvent) {
    return now - state.arrivalTime >= 45_000;
  }

  return now - state.lastEventTime >= 240_000;
}

این شبه‌کد توضیحی است، نه کد واقعی تولید. ارائه‌دهندگان، SDKها و معماری استقرار تغییر می‌کنند؛ سیاست ماندگارتر است: آغاز بازدید را محافظت کن، پس از شروع استفاده واقعی درآمدزایی را مجاز کن، فاصله سخت اعمال کن و فقط بعد از آن تکرار کن.

موفقیت build و درستی رفتار یک چیز نیستند

Typechecker، linter و build تولیدی می‌توانند ویژگی‌های فنی زیادی را بررسی کنند، اما ثابت نمی‌کنند زمان‌بندی تبلیغ در مرورگر درست عمل می‌کند. این قابلیت به اعتبارسنجی رفتاری نیز نیاز دارد.

1. مرورگر را در حالت پاک باز کنید.
2. پیش از پایان تأخیر اولیه تعامل کنید: popunder نباید رخ دهد.
3. از تأخیر اولیه عبور کنید.
4. یک تعامل واجد شرایط انجام دهید: popunder اول ممکن است رخ دهد.
5. پیش از پایان cooldown تعامل کنید: popunder دوم نباید رخ دهد.
6. تا پایان cooldown صبر کنید.
7. دوباره تعامل کنید: اکنون popunder دیگری ممکن است رخ دهد.

Build موفق و آزمون رفتاری موفق به دو سؤال متفاوت پاسخ می‌دهند و هر دو مهم‌اند.

تجربه تبلیغاتی ترکیبی از هر جایگاه جداگانه مهم‌تر است

دو سامانه تبلیغاتی مستقل ممکن است جداگانه منطقی به نظر برسند، اما در مجموع تجربه‌ای تهاجمی بسازند. دو فرمت با محدودیت چهار دقیقه‌ای می‌توانند طوری در هم بیفتند که کاربر تقریباً در 00:45، 02:45، 04:45 و 06:45 با وقفه روبه‌رو شود.

از اینجا به قاعده بهتری رسیدم:

محدودیت فراوانی باید در سطح تجربه کاربر سنجیده شود، نه در سطح هر اسکریپت تبلیغاتی.

کاربر مجموع وقفه‌ها را تجربه می‌کند، نه فایل پیکربندی تولیدکننده هرکدام را. ممیزی محیط واقعی باید بپرسد یک کاربر در یک بازه مشخص واقعاً با چند رویداد تبلیغاتی مزاحم روبه‌رو می‌شود.

تعداد خام impression هدف اشتباهی برای بهینه‌سازی است

ایجاد فرصت بیشتر با کوتاه‌کردن cooldown ساده است. سؤال سخت‌تر این است که چه مقدار درآمدزایی اضافی می‌توان بدون کاهش ارزش اقتصادی کل کاربر به دست آورد.

پیکربندی‌ای که در هر بازدید تبلیغ کمتری نشان می‌دهد ممکن است در طول زمان درآمد بیشتری ایجاد کند، اگر بازگشت کاربران را بهتر حفظ کند. به همین دلیل درآمد هر کاربر در طول زمان برایم مهم‌تر از impression در هر بازدید است. دومی آسان‌تر بیشینه می‌شود؛ اولی مسئله واقعی کسب‌وکار است.

آزمایش قوی‌تر باید فراتر از یک نمودار تجمیعی باشد

مشاهده من در محیط واقعی کافی بود تا بفهمم پیامد فاجعه‌باری که می‌ترسیدم آشکارا رخ نداده است. اما برای اثبات همه اثرهای بعدی کافی نبود.

آزمایش بهتر باید درآمد تبلیغاتی به ازای کاربر یکتا، درآمد هر بازدید، رویداد تبلیغاتی هر کاربر، تعامل فعال، تعامل‌های معنادار داخل محصول، نرخ کاربران بازگشتی، retention در طول زمان و ارزش بلندمدت کاربر را مقایسه کند.

هر دو سوی مسئله باید اندازه‌گیری شوند. اگر فقط خروجی تبلیغ را ببینم، تقریباً ناگزیر نتیجه می‌گیرم تبلیغ بیشتر بهتر است. اگر فقط تعامل را ببینم، ممکن است افزایش درآمدی را که هزینه رفتاری ناچیزی دارد از دست بدهم.

چرا سیاست را ساده نگه داشتم

دلیلی برای افزودن استثناهای بیشتر پیدا نکردم. منطق نهایی ساده ماند: ۴۵ ثانیه صبر، درآمدزایی در تعامل واجد شرایط بعدی، چهار دقیقه فاصله سخت، سپس امکان درآمدزایی در تعامل واجد شرایط بعدی.

تعداد کمی invariant قوی، از سیاستی با استثناهای مبهم زیاد آسان‌تر فهمیده، آزمایش و اشکال‌زدایی می‌شود.

عدم تقارن سیاست عمدی است

کاربر تازه و کاربر درگیر عمداً یکسان رفتار نمی‌شوند. بازدیدکننده تازه محافظت بیشتری می‌گیرد؛ کسی که به تعامل ادامه می‌دهد در طول زمان فرصت درآمدزایی بیشتری ایجاد می‌کند.

در نتیجه فشار تبلیغ با تعامل اثبات‌شده رشد می‌کند، نه اینکه از همان ابتدا در بیشترین شدت اعمال شود. این تغییر مفهومی یکی از مفیدترین نتایج آزمایش بود.

چه نتیجه‌ای از این مطالعه نمی‌گیرم

نمی‌گویم ۴۵ ثانیه برای همه درست است، چهار دقیقه فاصله بهینه است، popunder پرتکرار هرگز به تعامل آسیب نمی‌زند یا ثبات میانگین یعنی کاربران بی‌تأثیر مانده‌اند. همچنین یک workload واقعی را به همه محصولات وب تعمیم نمی‌دهم.

محصول‌های مختلف کاربران، انتظارات، منابع جذب، الگوهای استفاده و اقتصاد متفاوت دارند. ارزش نتیجه در مشخص بودن آن است، نه در ادعای یک قانون عمومی.

بخشی که نظر مرا تغییر داد

پیش از آزمایش، رابطه فشار تبلیغ و تعامل را تقریباً مکانیکی می‌دیدم: اگر یکی را به اندازه کافی زیاد کنیم، دیگری باید آشکارا افت کند. در محیط واقعی، رفتار مرتب‌تر از این نبود.

فراوانی را به سطحی رساندم که نسبتاً بالا می‌دانستم. کاربران به تعامل ادامه دادند و تعامل تجمیعی در دامنه معمول روزانه باقی ماند. این به معنای صفر بودن هزینه نیست. فقط یعنی هزینه آن‌قدر بزرگ نبود که در شاخص مورد مشاهده من، سیگنال آشکاری که انتظار داشتم ایجاد کند.

تفاوت «بدون اثر» با «بدون اثر آشکار در این اندازه‌گیری» مهم است. سیستم‌های واقعی به‌ندرت داستان‌های علّی تمیزی که می‌خواهیم به ما می‌دهند.

قاعده من اکنون

دیگر نمی‌پرسم از نظر فنی هر چند وقت یک‌بار می‌توانم popunder بعدی را نمایش دهم. می‌پرسم کاربر تازه قبل از شروع درآمدزایی چقدر تجربه بدون وقفه لازم دارد، کاربر درگیر پیش از رویداد بعدی چقدر استفاده بدون وقفه باید داشته باشد و آیا تبلیغ بیشتر ارزش کل کاربر را افزایش می‌دهد یا فقط شمارنده impression را.

برای این برنامه، پاسخ نهایی این بود:

۴۵ ثانیه تا اولین واجد شرایط شدن
حداقل ۴ دقیقه بین رویدادهای موفق

این اعداد فقط یک پیاده‌سازی‌اند. قاعده‌ای که دوباره استفاده می‌کنم عمومی‌تر است:

آغاز مسیر کاربر را محافظت کنید، تعامل اثبات‌شده را بیشتر از کنجکاوی اولیه monetization کنید و نتیجه را با ارزش کاربر بسنجید نه با حجم خام تبلیغ.