Очевидно, баннерная реклама раздражает пользователей. Но насколько сильно? Возможно, она настолько всех бесит, что доход от рекламы не стоит потерь в трафике. А возможно, и нет. Если коротко — даже единственный небольшой баннер снижает трафик примерно на 10%. Подробный анализ — под катом. Эта статья - сильно сокращённый перевод оригинального текста. Я не добавлял ничего от себя, но удалил подробности статистического анализа, большую часть обзора литературы (это были в основном пересказы статей, на которые ссылается автор) и результаты опроса на тему того, почему люди не пользуются адблоком (в зависимости от формулировки вопроса 23-71% отвечают, что не знают, что это такое; некоторые не могут его поставить, потому что не разбираются в компах или потому что админ на работе не разрешает). Что мне особенно нравится в gwern.net, особенно по сравнению с остальным Интернетом, — так это скорость загрузки и отрисовки страницы. Поэтому в моих прежних A/B-тестах я в основном проверял всякие изменения в CSS, не влияющие на скорость работы. А что на неё влияет? Как выяснилось, тормозят преимущественно Google AdSense (над заголовком раньше висел баннер средних размеров) и комментарии Disqus. Комментарии я удалять не хочу. Заменить Disqus тоже особо не на что: хоть мне и не нравится тот объём некешируемого JS, который он подтягивает, я не знаю другой системы для комментов с нормальным антиспамом и сравнимым числом пользователей. К тому же он нормально работал пять с лишним лет, так что не вижу большой необходимости что-то менять.   А вот AdSense — другое дело. Я им пользуюсь только потому, что он приносит мне немного денег (~30$ в месяц, ~360$ в год; могло бы быть больше, но примерно 60% моих читателей пользуются AdBlock). Так что поэкспериментировать с рекламой будет довольно интересно: это и один из самых тяжеловесных элементов страницы, и повод поиграться с теорией принятия решений (посчитать пороги и EVSI), и приложение для Байесовского анализа временных серий в JAGS/Stan, и вообще проверка того, насколько A/B-тесты хороши для таких серьёзных вопросов.   Прежде всего, доход от рекламы довольно невелик — значительно меньше, чем мне приносит Patreon. Если я теряю, скажем, 10% трафика и влияния из-за лагов или раздражающего баннера, то тридцать баксов в месяц явно того не стоят. Классические A/B-тесты с разделением пользователей на подгруппы часто критикуют за то, что они не позволяют увидеть лес за деревьями и дают абсолютно точный ответ на бесполезный вопрос. Да, изменение увеличивает рассматриваемые метрики типа времени на странице или числа кликов, но не причиняет ли оно сайту или сообществу вред, заметный только в макромасштабе? Не получится ли так, что ущерб от каждого конкретного изменения будет копеечным или вообще статистически незначимым, но все вместе они превратят сайт не пойми во что? Поэтому в качестве метрики я буду использовать общий суточный трафик. Он описывает скорее привлекательность сайта в целом, чем качество конкретной страницы, и зависит в том числе и от того, сколько ссылок на мой сайт было выложено в данный день в социальных сетях. Известно, что для A/B-тестирования в контексте социальных сетей нельзя просто показать половине пользователей одну версию страницы, a второй половине — другую. Поскольку люди в социальных сетях взаимодействуют друг с другом, их активность не является независимой и не подлежит простому статистическому анализу типа t-тестов. Надо сперва выделять крупные группы пользователей (например, связные подграфы), которые будут приблизительно независимыми друг от друга, и гонять тесты уже на них. Поскольку я не могу выделять такие группы среди посетителей сайта, остаётся менять версии каждый день (или неделю) и смотреть, как это повлияет на трафик. Менять страницы вручную, конечно, не хочется. Даже не столько потому, что это мартышкин труд — кеширование может привести к тому, что исследуемые группы пользователей перемешаются. Так что временной A/B-тест делается вот как: перед вызовом AdSense JS надо вставить какое-нибудь условие типа “если номер дня в году (1-366) mod 2 равно нулю, то не показывать рекламу”, а через несколько месяцев вытащить трафик за каждый день из Google Analytics. Так как логика тестирования находится на клиенте, кеширование ни на что не влияет. Использование JS тоже не проблема, так как люди с отключенным JavaScript в любом случае не видят рекламу. Ну и поскольку распространение ссылок в социальных сетях — дело достаточно медленное, то нужно менять сайт не раз в сутки, а раз в пару дней. Всё просто: я скопипастил откуда-то код для получения номера дня, сгенерировал 366 нулей и единиц (группами по два) и показываю рекламу, если для дня с соответствующим номером в моём массиве единица: Этот код прост, статичен и не страдает от проблем с кешами, но один подводный камень я всё-таки пропустил. Судя по отчёту AdSense, число показов рекламы растёт и падает по расписанию, но не падает до нуля. Это вообще-то странно: код A/B-теста исполняется до рекламного кода, а браузеры с отключенным JS в любом случае не видят рекламу. Как так получилось, что код AdSense исполнился, а мой код нет? В конце концов до меня дошло: реклама показывается в зависимости от даты, да, но от чьей даты? От той, которая стоит на компьютере пользователя. В один и тот же момент браузер с одной стороны линии перемены дат смотрит в список, видит там единицу и показывает рекламу, а браузер с другой стороны — видит ноль и не показывает. По-хорошему надо было бы переписать тест с учётом часовых поясов, но к тому времени, как я разобрался, было уже поздно перезапускать эксперимент. К тому же на основании отчёта AdSense можно посчитать процент некорректно учтённых просмотров и сделать поправку. Теория принятия решений позволяет оценить стоимость эксперимента и результаты, при которых мне нужно будет удалить (или оставить) баннеры. Цена самого эксперимента считается довольно просто: каждый день без рекламы обходится мне в 1$, её нет в 50% дней, так что эксперимент длиной в 200 дней будет стоить ~100$. В качестве общего дохода можно принять дисконтированную стоимость рекламы. Если считать, что доход с трафика не будет сильно меняться, и принять коэффициент дисконтирования в 5%, она составляет 360/log(1.05)=7378$. Вроде бы немало. С другой стороны, реклама может причинять значительный ущерб трафику. ~40% посетителей видят рекламу; если она отпугнёт хотя бы 5% тех, кто её увидел, то при посещаемости в 635123 человека (за 2016 год) это означает потерю 635123⋅0.40⋅0.05=12702 посетителей, что эквивалентно примерно неделе трафика. Это, конечно, неприятно, но насколько неприятно? Доллары надо сравнивать с долларами, а не с моими эмоциями. Если бы у меня был коммерческий сайт, то я бы использовал средний доход с одного посетителя (через вероятность продажи или количество показанной рекламы) и умножил его на объём потерянного трафика. Вот только в отсутствие рекламы прямой доход с одного посетителя буквально равен нулю. Остаётся только перевести эмоции в деньги: готов ли я пожертвовать 1 неделей трафика ради 360$? Или, что то же самое, соглашусь ли я на предложение удалить свой сайт за >$18720 в год? Может, удалю, может, нет. Или, что то же самое, готов ли я платить 0.02$ за одно посещение? Я не могу позволить себе выбрасывать сотни тысяч долларов на трафик, но пара центов за читателя звучит разумно. Перечисленные цифры не кажутся мне ни слишком большой, ни слишком маленькой ценой за трафик, так что я буду пользоваться ими. Если вдруг окажется, что мои потери от рекламы близки к выбранным пороговым значениям, то я всегда могу вернуться и оценить свои предпочтения с большей точностью (спойлер: это не понадобилось). Общий доход выглядит вот так: t — это уменьшение трафика в процентах. Так что долгосрочный эффект при разных t составит: 1% = +$4775; 5% = +$2171; 10% = -$3035; 20% = -$13449 и т.д. Получается, проблема сводится к простому вопросу: теряю ли я больше 2.8% трафика за счёт рекламы? Если да, то я её удалю; если нет — то 360 баксов в год всё-таки не лишние. Очевидно, что реклама снижает трафик, но насколько сильно? К сожалению, до начала первого эксперимента в 2017 году мне не удалось найти хороших статей по поводу влияния рекламы на общий трафик. На доход или per-page engagement да, а вот на трафик — увы. Такие исследования проводились (см. таблицу ниже), но они либо вышли после моей работы, либо я их просто не нашёл. Есть немного литературы насчёт “избегания рекламы”, по большей части основанной на опросах пользователей и экономических моделях. Основные результаты такие: люди утверждают, что им сильно не нравится реклама в интернете и на ТВ; они не любят персонализацию, но персонализированная реклама их раздражает несколько меньше, чем обычная; заметная часть пользователей активно избегает рекламы на ТВ (5%-23% в зависимости от метода оценки); реклама особенно сильно раздражает людей, когда они ищут что-то конкретное; в рабочем контексте (Amazon Mechanical Turk) люди готовы терпеть немного рекламы и не требовать повышенной оплаты (Goldstein et al 2013⁠/ Goldstein et al 2014). Эти результаты подтверждают, что часть пользователей иногда готова прилагать некоторое количество усилий, чтобы не смотреть на рекламу (о том же свидетельствует высокое количество пользователей адблока), но они ничего не говорят о том, побуждает ли реклама уйти с данного сайта или телеканала на какой-нибудь другой, где рекламы не будет. Исследователи фокусируются на чём угодно, кроме идеи убрать рекламу вовсе; её присутствие принимается как данность (Abernethy 1991⁠, Bayles 2000⁠, Edwards et al 2002⁠, Brajnik & Gabrielli 2008 и Wilbur 2016⁠, Michelon et al 2020). Это отмечается и в исследовании от Google за 2015 год “Focusing on the Long-term: It’s Good for Users and Business”⁠: “Самая простая и очевидная идея — оптимизировать то, какую именно рекламу показывать, на основании краткосрочной доходности. Но этот подход может навредить в долгосрочной перспективе, если окажется, что мы пожертвовали комфортом пользователя. Поскольку у нас нет методов оценки долгосрочного эффекта, остаётся только использовать метрики довольства пользователей и считать их косвенным показателем долгосрочной успешности”. По итогам исследования они решили снизить рекламную нагрузку в мобильном интерфейсе поиска на 50%, и активность пользователей действительно увеличилась. В целом, негативные последствия рекламы не должны быть особенно велики. Во-первых, в противном случае адблок стоял бы вообще у всех пользователей. Если людям лень потратить полчаса на то, чтоб избавиться от почти всей рекламы на годы вперёд — то не так уж она и плоха. Это касается и меня самого: любые манипуляции с рекламой на моём сайте коснутся только тех 40% посетителей, у которых нет адблока. Во-вторых, сайты сильно различаются по качеству дизайна, и даже безумно успешные проекты могут быть полным шлаком с точки зрения UI/UX (Amazon тому пример). Возможно, пользователям вообще плевать на то, как сайт выглядит и удобен ли он в использовании. A/B-тестирование любых правок на сайте обычно показывает изменения в единицы процентов — не в десятки процентов и уж тем более не в разы (см.“What works in e-commerce—a meta-analysis of 6700 online experiments”⁠, Brown & Jones 2017; “p-Hacking and False Discovery in A/B Testing”⁠, Berman et al 2018). В-третьих, рекламные системы хорошо оптимизированы: AdSense подгружает рекламу асинхронно и не тормозит рендеринг страницы (а лаги точно отпугивают пользователей куда сильней, чем плохой дизайн). Google вкладывает миллиарды долларов в то, чтобы подбирать для пользователя максимально подходящую и, соответственно, минимально раздражающую рекламу. Баннеры не влияют на SEO и ранжирование в PageRank и его аналогах. Есть масса исследований про то, как оптимизировать доставку рекламы. Так что если реклама плоха — то она плоха в принципе, а не потому что сделана криво. Ну и наконец, если реклама — такое уж большое зло с точки зрения владельца сайта, то как так вышло, что никто про это не пишет? Можно ожидать, что в таком случае все бы давно уже знали, что рекламу надо ставить, только если вам очень сильно нужны деньги. Ещё несколько работ вышло уже после того, как я закончил эксперимент (или я нашёл статьи, которые мне раньше не попадались). Результаты в таблице ниже. Авторы и платформа Дата Метод Объект исследования Тип рекламы n (млн чел) Эффект Что измеряли Huang et al. 2018, Pandora  Июнь 2014 - февраль 2016   Рандомизированное исследование   Мобильное приложение   Вставки в аудио   34 7.5%   Общее время прослушивания Miroglio et al. 2018, Mozilla   Февраль - апрель 2017   Анализ корреляции   Десктопный браузер   Все типы   0.358   28%   Общее время в интернете   Yan et al. 2019, LinkedIn   Март - июнь 2018   Рандомизированное исследование   Мобильное приложение   Рекламные посты в ленте   102   12%   Общий уровень взаимодействия с лентой   McCoy et al. 2007   2004?   Рандомизированное исследование   Десктопный браузер   Баннеры и всплывающие окна   0,000536   11%   Готовность посетить сайт ещё раз (результаты опроса)   Hohnhold et al. 2015, Google   2013-2014   Рандомизированное исследование   Поиск гугла (десктопная и мобильная версия)   Текстовая реклама в результатах поиска   500?   50-70% (?) Общее число поисковых запросов   Google   2007?   Рандомизированное исследование   ? Реклама AdSense   >>1?   ~5%?   Общий трафик   Schiller et al. 2017, PageFai   Июль 2013 - июнь 2016   Анализ корреляции   Веб-сайты   Все типы   <535?   <19%   Общий трафик (место в рейтинге Alexa)   Yan et al. 2020, анонимная газета   Июнь - сентябрь 2015   Анализ корреляции   Зарегистрированные пользователи сайта   Баннеры   0.08   20%   Общий трафик   Aral&Dhillon 2020, New York Times   Июнь 2013 - январь 2014   Анализ корреляции   Все посетители страницы   Тривиально обходимый пэйволл   29.7   9.9%   Просмотры статей Исследования в разных областях жизни (Интернет в целом, новости, музыка, рабочие сайты), на разных платформах (мобильные и десктопные), с разными метриками и разными типами рекламы дают примерно одинаковые результаты. Всё, что измеряется, становится на 10-15% хуже при появлении рекламы. Посмотрим, так ли это для gwern.net. Для начала взглянем на общий трафик до начала тестов в логарифмических координатах: На практике это означает, что нельзя просто посчитать t-тест и на этом закончить: дни с рекламой и без не являются независимыми друг от друга. Существуют специализированные методы для исследования таких временных серий, но даже с ними мне понадобятся данные за несколько месяцев. (Прим. пер.: Напоминаю, что подробности выбора метода, сам анализ и код на R представлены в оригинале. Здесь я привожу только результаты.) Посмотрим на сырые данные. Вот общий дневной трафик: Поэтому я провёл байесовский анализ в Stan с использованием временной серии ARIMA(4,0,1). Эффект рекламы анализировался как множитель трафика; в качестве априорной модели принят слабый отрицательный эффект. Апостериорные оценки того, каким бы был трафик в дни с рекламой, если бы рекламы не было, сохранялись для дальнейшего анализа. В результатах мы наблюдаем немаленький (и достоверный!) вред: в среднем трафик падает на 14.5% (95% доверительный интервал от -0.16 до -0.13, p-значение согласно тесту перестановок 0.01). Если использовать упомянутые выше апостериорные оценки и посчитать средние — то трафик падает на 9.8%. Как ни считай, получается явно больше выбранного порога в 2.8%, так что 11 сентября 2017 года я остановил эксперимент и навсегда удалил баннеры с gwern.net. Результаты меня удивили. Я, конечно, ожидал, что реклама снижает трафик, но не на десять же процентов! Точность оценки довольно велика, так что это почти наверняка не какой-то выброс в данных (если уж на то пошло, я собрал их даже больше, чем было необходимо). Больших пиков или провалов трафика в исследуемый период не было. Это почти наверняка не артефакт математической модели: во-первых, даже самые грубые методы дают тот же результат (хотя и с низкой достоверностью); во-вторых, разница видна на графике невооружённым глазом. В-третьих, я долго ковырялся в своей модели в Stan (должен признаться, я им до того почти не пользовался) и мне не удалось ни найти багов, ни изменить модель так, чтобы она перестала показывать тот же результат. Так что по крайней мере для моего сайта реклама действительно снижает трафик на ~10%. Верно ли это для других сайтов? Gwern.net — штука довольно узкоспециализированная. Он предназначен для показа лонгридов на технические темы безо всякого динамического контента; дизайн очень минималистичный и оптимизирован под быструю загрузку и рендеринг; целевая аудитория — англоговорящие айтишники и учёные, преимущественно американцы. Вполне возможно, что для всех остальных эффект рекламы будет ниже. Если, например, сайт и так тормозной, то время загрузки рекламы будет незаметно на фоне его собственных лагов. Если на странице и так есть куча кричащих элементов — то реклама будет одним из многих источников раздражения, а не единственным. Возможно, чья-то аудитория более терпима к рекламе или получает более релевантные баннеры, чем моя. В конце концов, у меня есть Patreon, так что реклама не является единственным источником дохода. Не могу говорить наверняка — результаты могут отличаться от одного сайта к другому и вам лучше провести тестирование самим. С другой стороны, остальные исследования (см. табл.) показывают очень похожие результаты. Если потери порядка 10% (даже больше, потому что моя аудитория использует адблок чаще среднего) есть и на всех остальных сайтах, то из этого следуют интересные выводы. С точки зрения пользователей реклама создаёт чистые издержки; с точки зрения владельцев сайтов — она может приносить больше вреда, чем пользы. Мягко говоря, маловероятно, что каждый сайт на свете содержит ровно столько рекламы, сколько необходимо для максимальной эффективности. Но даже если им и стоило бы убрать рекламу, полностью или частично, они могут никогда об этом не узнать. Стандартное A/B-тестирование с разделением пользователей на подгруппы может не показать достоверного результата, потому что в данных много шума, или потому что реклама влияет скорее на популярность сайта в целом, чем на метрики данной конкретной страницы, или потому что вместо подобающего анализа временных серий используются простые статистические тесты. Изменение в 10% трафика — это явно не копейки, но при этом трафик может меняться куда сильнее из-за внешних причин, так что даже такие драматические изменения остаются незамеченными. Биоинформатик