Алгоритмы расширенного баннера-поворота

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

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

Другой клиент просит

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

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

"1000 кликов или 10 000 показов за 5000 долларов."

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

Второй клиент не так важен, поскольку они не заботятся о временном окне, они просто хотят какое-то время.

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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


Изменить: весовые детали

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

  • вес равен 0, если объявление достигло приобретенных показов/кликов
  • базовое взвешивание (возможно, 1.0)
  • умножить вес на показы_remaining/TOTAL показов, оставшихся для всех клиентов
  • добавьте небольшую константу, если оставшиеся показы/клики невелики - гарантирует, что они получат последние несколько, необходимые для завершения учетной записи.
  • для конечных клиентов: добавьте термин для (оставшиеся показы/купленные показы)/(время/общее время)

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

Ответ 3

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)

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

В базовой формуле, касающейся вашей ситуации, используется переменная NOD, краткая для "Need of Delivery". В любой момент времени базовая формула NOD баннера:

NOD = (оставшиеся события/ожидаемые события) * (Total Runtime/ Оставшееся время выполнения)

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

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

Значение NOD более высокого уровня означает, что вы находитесь за расписанием, а 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% в порядке.

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

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

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

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

NOD = eCPM * (оставшиеся события/ожидаемые события) * (Всего Runtime/Remaining Runtime)

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

Ответ 4

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

  • Клиент A предлагает 1000 долларов США за 1 клик или 10 000 показов
  • Клиент B предлагает 1000 долларов за 5000 кликов или 10 000 показов.

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

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

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

Мы максимизируем доход, максимизируя наши $$$$$/impression, поэтому клиент A имеет приоритет. Позвольте использовать цифры, представленные в OP:

Клиент 1:

  • 10 000 показов в ближайшие 10 дней за 10 000 долларов США.
  • = минимум 10 000 показов * $1/показ/10 дней
  • = $1000/день

Клиент 2:

  • 1000 показов за $100 долларов.
  • = минимум 1000 показов * $.01/impression/365 дней
  • = $0.27/день.

Клиент 3:

  • 1000 кликов или 10 000 показов за $5000
  • = min (100 000 показов, чтобы получить 1000 кликов, 10 000 показов) = 10 000 показов за 5000 долларов.
  • = минимум 10 000 показов * $0.5/показ/365
  • = $13.7/день.

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