Усовершенствованные алгоритмы поворота баннера - PullRequest
11 голосов
/ 03 августа 2009

Я собираюсь скоро запустить скрипт поворота баннера, и я немного озадачен тем, как именно его разработать. Предположим, клиент запрашивает

"10000 показов в ближайшие 10 дней за 10 000 долларов".

Другой клиент запрашивает

"1000 показов за 100 долларов".

И третий просит

"1000 кликов или 10000 показов за 5000 долларов США."

Как точно определить, какой баннер показывать при запросе страницы? Как мне взвесить одно против другого? Ясно, что первый запрос довольно важен, так как я должен предоставить определенное количество показов за определенный промежуток времени.

Второй клиент уже не так важен, так как им нет дела до временного окна, им просто нужно немного времени для лица.

И последний клиент хочет ограничить показы / клики n или m, что несколько усложняет задачу.

Я уже довольно уверен, что мне нужно отвлечь некоторый вес от этих сценариев, чтобы определить, кто привлекает наибольшее внимание. У меня вопрос, какой тип алгоритма мог бы справиться с этим, и, во-вторых, как я могу подавать баннеры по весу, не всегда обслуживая самый важный баннер с каждым запросом?

Ответы [ 4 ]

8 голосов
/ 03 августа 2009

Трудность возникает из-за нехватки времени больше всего на свете. Я бы разделил приоритет любого, кто не указал ограничение по времени, на 365 (год), а затем использовал бы время как часть весового коэффициента. Итак:

Client 1 priority: 10000/10 = 1000 
Client 2 priority: 1000/365 ~ 3 
Client 3 priority: 10000/365 ~30

Это должно дать вам довольно приличный показатель приоритета. Теперь вы не можете смешивать и сопоставлять показы и клики, не так ли? Они либо идут по маршруту показа, либо по маршруту клика. Поскольку вы не можете контролировать клики, но вы можете контролировать показы (по крайней мере, больше, чем клики), я бы взвесил их в соответствии с показами.

6 голосов
/ 03 августа 2009

Используйте генератор случайных чисел, чтобы выбрать, какое объявление показывать, и присвойте ему приоритет с каждым объявлением. Установите весовой коэффициент выше для клиентов, которые хотят больше показов или имеют крайний срок. Вы можете увеличить весовой коэффициент, если время почти истекло.

Как только клиент достигнет запрошенных показов, уменьшите вес до 0, чтобы его объявление не показывалось.

Вес по умолчанию может быть 1 или около того, клиентам разрешено доплачивать, чтобы повысить приоритет (не сообщая им механики - выставьте счет как «премиальное» размещение и т. Д.).


Редактировать: весовые данные

Вы можете сделать это простым или сложным, как вам нравится, но базовая версия будет включать следующие термины:

  • вес равен 0, если объявление достигло купленных показов / кликов
  • базовый вес (1,0, вероятно)
  • умножьте вес на впечатления_ оставшиеся / ВСЕГО показов для всех клиентов
  • добавить небольшую константу, если оставшихся показов / кликов мало - гарантирует, что они получат несколько последних, необходимых для завершения аккаунта
  • для конечных клиентов: добавить термин для (оставшихся показов / приобретенных показов) / (оставшегося времени / общего времени)

Клиенты крайнего срока должны быть ограничены на 90% всех отображений страниц или что-то в этом роде, чтобы они не побеждали других. Последний термин задает «срочность» для клиентов с установленным сроком - при достижении срока он уходит в бесконечность, поэтому для предотвращения проблем с этим нужно поставить условие на оставшееся время.

4 голосов
/ 11 октября 2013

Microsoft Commerce Server содержит алгоритм NOD (см. http://msdn.microsoft.com/en-us/library/ms960081%28v=cs.70%29.aspx и http://msdn.microsoft.com/en-us/library/ee825423%28v=cs.10%29.aspx)

Я использовал производные версии этой формулы на 3 разных рекламных серверах, которые оказались хорошими для моих условий.

Базовая формула, касающаяся вашей ситуации, использует переменную с именем NOD, сокращенно «Потребность в доставке». В любой момент времени «базовая» формула NOD баннера:

NOD = (Оставшиеся события / Всего запрошенных событий) * (Общее время выполнения / Оставшееся время выполнения)

Обратите внимание, что "События" - это общий термин, который может представлять показы, клики, конверсии и т. Д. В зависимости от вашей системы.

Уравнение гласит, что все баннеры начинаются с начального значения 1,0 до их жизни, потому что (e / e) * (t / t) = 1.0

Значение NOD выше 1 означает, что вы отстаете от графика, а значение NOD от 0 до 1 обычно означает, что вы показали баннер «слишком быстро». Значения между 0,9 и 1,2, как правило, находятся в приемлемом диапазоне (это не технический диапазон, а скорее деловой опыт).

Пока отношения обслуживания соответствуют коэффициентам продолжительности, значения остаются в пределах 1,0.

Для определенного рекламного места алгоритм проверяет NOD всех доступных баннеров, которые можно разместить в этом рекламном месте. Предположим, у вас есть 3 баннера, доступных в слоте, со значениями NOD 0,6, 1,35 и 1,05, что в сумме составляет 3,0. Тогда относительные вероятности показа каждого баннера становятся равными 20%, 45% и 35% в порядке [0,6 / (0,6 + 1,35 + 1,05)] = 20%

.

Алгоритм использует взвешенное распределение вероятностей, что означает, что даже баннер с наименьшим значением NOD может отображаться. Хотя базовая формула использует этот подход, бизнес-решения, как правило, всегда вынуждают меня внедрять алгоритмы, предпочитающие значения срочного NOD больше, чем исходная формула. Итак, я взял базовые NODы и умножил их на себя. В том же примере вероятности становятся 11%, 55,5% и 33,5% в порядке.

Для вашего состояния вы можете немного изменить формулу, чтобы удовлетворить ваши потребности. Прежде всего, чтобы иметь возможность сравнивать доход, который вы будете получать за показ баннера, вы должны преобразовать все типы показа (показы, клики, действия и т. Д.) В общее значение eCPM. Тогда вы можете использовать эту eCPM в качестве множителя для исходного уравнения.

Расчет эффективной цены за тысячу показов (эффективной цены за тысячу показов) может быть сложным для еще не опубликованных кампаний, в этом случае вам следует использовать исторические данные.

Позвольте мне объяснить эту часть немного подробнее: пытаясь сравнить вероятный доход, который вы получите, «показав» один баннер, вам не нужно сравнивать бюджеты на основе показов. Для бюджетов, основанных на кликах, вы должны использовать историческое значение CTR, чтобы угадать, «сколько показов нужно выполнить моей системе, чтобы получить Х кликов». В более продвинутом алгоритме может использоваться «сколько показов, необходимых моей системе, чтобы получить кампанию в категории X и в инвентаре».

Тогда ваше окончательное уравнение становится:

NOD = eCPM * (Оставшиеся события / Всего запрошенных событий) * (Всего Время выполнения / оставшееся время выполнения)

Вы всегда можете рассмотреть возможность использования eCPM для сравнения результатов. Как и мой способ изменения первоначальной формулы в пользу более срочных кампаний, вы можете предпочесть «более оплачиваемые» кампании.

3 голосов
/ 03 августа 2009

Мне очень нравится подход AlbertoPL, основанный на времени, но он не учитывает клики. Легко продемонстрировать патологические случаи, когда клики актуальны:

  • Клиент А предлагает 1000 долларов за 1 клик или 10000 показов
  • Клиент B предлагает 1000 долларов за 5000 кликов или 10000 показов.

Любой разумный человек будет отдавать предпочтение парню в 1 клик. Расчет на самом деле довольно тривиален: предположим, что ваш клик составляет 100 показов за клик.

  • Клиенту A требуется 10 000 показов или 1 клик, поэтому нам требуется минимум 100 показов для получения оплаты. При стоимости 1000 долларов за 100 показов вы можете рассчитывать, что ваш клиент готов заплатить 10 долларов за показ.

  • Клиент B хочет 10000 показов или 5000 кликов. Для 5000 кликов требуется 500 000 показов, мы точно достигнем отметки в 10 000 показов, поэтому мы предполагаем, что клиент действительно предлагает заплатить 1000 долларов за 10000 показов или 0,10 доллара за показ.

Мы максимизируем доход за счет максимизации нашего $$$$$ / показа, поэтому клиент A имеет приоритет. Давайте использовать цифры, представленные в ОП:

Клиент 1:

  • 10 000 показов в следующие 10 дней за 10 000 долларов США
  • = минимум 10000 показов * 1 доллар / показ / 10 дней
  • = 1000 долларов в день

Клиент 2:

  • 1000 показов за 100 долларов
  • = минимум 1000 показов * $ 0,01 / показ / 365 дней
  • = 0,27 долл. США в день.

Клиент 3:

  • 1000 кликов или 10000 показов за 5000 долларов
  • = мин. (100 000 показов для получения 1000 кликов, 10 000 показов) = 10 000 показов за 5000 $
  • = минимум 10000 показов * $ 0,5 / показ / 365
  • = $ 13,7 / день.

Клиенты имеют приоритет в зависимости от того, сколько они платят в день.

...