[go: up one dir, main page]

Skip to content

mkhasykov/for_rtb_pricing_function

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Модель оценивает вероятность конверсии бид реквеста в клик в случае показа. Вероятность используется при определении ставки "на лету" в качестве параметра ctr в одной из ставочных функций.

Данные автоматически парсятся из Я.Метрики, Амплитуды и Redash, далее собирается обучающая выборка.

Этапы обучения модели:

  1. Признаки бид реквестов хэшируются, что позволяет опустить отдельную обработку наблюдений, отсутствовавших в обучающей выборке, а также вносит дополнительный эффект регуляризации. Таким образом, каждому значению любого признака с помощью хэш-функции определяется индекс OHE-признака из диапазона [0, 2**d - 1], где d - параметр.
  2. На сформированных на предыдущем этапе признаках обучается логистическая регрессия, параметры которой подбираются через алгоритм ftrl-proximal (описание логики и параметров здесь).

Ниже описаны в соответствующих разделах способы запуска процесса обучения модели и применения результатов ее работы при определении ставки.

Обучение модели

Запуск из командной строки производится с помощью команды следующего вида:

    python main.py -f ./data -o output.json -n 7 -d 18 -alpha .1 -beta 1. -l1 5. -l2 5.

-f FOLDER — путь к папке, в которой хранится старая обучающая выборка;

-o OUTPUT — путь, куда необходимо записать результат;

-n NUM_EPOCH — количество эпох обучения, т.е. сколько раз алгоритм "увидит" ВСЮ обучающую выборку во время обучения (натуральное число, по умолчанию 5);

-d DIM_HASH — параметр, определяющий размерность пространства признаков как 2**d (натуральное число, по умолчанию 18. Т.к. размерность OHE-признаков должна быть достаточно большой, значения d меньше 15 отвергаются);

-alpha ALPHA — параметр $\alpha$ в алгоритме ftrl_proximal (неотрицательное действительное число, по умолчанию 0.1);

-beta BETA — параметр $\beta$ в алгоритме ftrl_proximal (неотрицательное действительное число, по умолчанию 1.0);

-l1 L1 — параметр $l1$-регуляризации (неотрицательное действительное число, по умолчанию 0.);

-l2 L2 — параметр $l2$-регуляризации (неотрицательное действительное число, по умолчанию 0.).

Формат данных обучающей выборки

Формат данных по бид реквестам со статистикой за месяц выглядит следующим образом:

ts device_id language_id country_id region_id site_id ssp_id variant_id os browser weekday hour click
2019-06-24 00:15:00 4 0 181 2293 7820808 9 253690 Android Chrome_Mobile 0 0 0
2019-06-24 00:15:00 2 0 122 757 8273606 1 252470 Windows Firefox 0 0 0
2019-06-24 00:15:00 2 0 181 0 8072928 14 252071 Windows Chrome 0 0 1
2019-06-24 00:15:00 2 0 181 2293 6935759 1 254136 Windows Firefox 0 0 0
2019-06-24 00:15:00 2 0 20 2563 6936550 1 254054 Windows Firefox 0 0 0

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

os, browser определяются из user_agent;

weekday - порядковый номер дня недели (0 - пнд, ..., 6 - вскр);

hour - час суток (0, ..., 23).

На выходе записывается файл в формате json со словарем {значение хэш-индекса значения признака: соответствующий коэффициент линейной логистической регрессии}.

Расчет ожидаемого ctr

Определение вероятности состоит из трех этапов. Для наглядности далее при описании каждого шага будут приводиться соответствующие результаты применения шага для бид реквеста bid_example с, например, такими значениями фичей:

device_id language_id country_id region_id site_id ssp_id variant_id os browser weekday hour
2 0 82 5084 8320901 1 254689 Windows Firefox 6 0

Шаг 1. Хэширование значений признаков бид реквеста.

Для хэширования используется 64-битная версия хэш-функции xxhash (реализация на различных языках программирования здесь).

Для каждого признака бида производится "склейка" названия признака и его значения, т.е. если, например, признак device_id имеет значение 2, то результатом будет являться строка "device_id_2". Для bid_example результатом будет:

device_id language_id country_id region_id site_id ssp_id variant_id os browser weekday hour
device_id_2 language_id_0 country_id_82 region_id_5084 site_id_8320901 ssp_id_1 variant_id_254689 os_Windows browser_Firefox weekday_6 hour_0

Затем "склееные" значения подаются на вход хэш-функции, и от результата рассчитывается остаток от деления на 2**d. Для bid_example получаем:

device_id language_id country_id region_id site_id ssp_id variant_id os browser weekday hour
167329 44659 13009 232542 150310 149569 14111 44923 184725 205066 245494

Шаг 2. Суммирование весов, определяемых по словарю по индексам, полученным на Шаге 1.

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

Пусть словарь, сформированный при обучении модели, выглядит следущим образом:

{'0': -0.31944, ...,

'13009': -0.01683, ...,

'14111': -0.02512, ...,

'44659': -0.0284, ...,

'44923': -0.01824, ...,

'149569': -0.03576, ...,

'150310': -0.03167, ...,

'167329': -0.04099, ...,

'184725': -0.00536, ...,

'205066': -0.04627, ...,

'232542': -0.02499, ...,

'245494': -0.00511, ...}.

Тогда для bid_example веса для каждого признака получатся следующими:

device_id language_id country_id region_id site_id ssp_id variant_id os browser weekday hour
-0.04099 -0.0284 -0.01683 -0.02499 -0.03167 -0.03576 -0.02512 -0.01824 -0.00536 -0.04627 -0.00511

а сумма весов :

$$х = -0.31944 - 0.04099 - 0.0284 - 0.01683 - 0.02499 - 0.03167 - 0.03576 - 0.02512 - 0.01824 - 0.00536 - 0.04627 - 0.00511;$$ $$x = -0.59818$$

Шаг 3. Применение логистической функции к сумме весов, полученных на Шаге 2.

Вероятность конверсии из суммы весов, полученной на предыдущем шаге, получается по формуле:

$$p = \frac{1}{1 + \exp{(-\max(\min(x, 35), -35))}}.$$

Для bid_example вероятность конверсии:

$$p = 0.3547594182897721.$$

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages