60
Обработка данных в RTB: быстро, дешево и на 98% точно Павел Калайдин

Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

  • Upload
    ontico

  • View
    563

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Обработка данных в RTB:

быстро, дешево

и на 98% точно

Павел Калайдин

Page 2: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Павел Калайдин@facultyofwonder

Page 3: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

данных очень много

памяти разумно мало

хотим все знать за один проход

время обработки - константно

Page 4: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

max, min, mean

Page 5: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Как посчитать медиану?

Page 6: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Случайная выборка?

Page 7: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Reservoir sampling?

Возможно

Page 8: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Вероятностные алгоритмы?

Page 9: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Cойдет приблизительный ответ,

хотим знать распределение ошибки

Page 10: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

frugal <- function(stream) {

m <- 0

for (val in stream) {

if (val > m)

m = m + 1

else if (val < m)

m = m - 1

}

return(m)

}

Page 11: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

def frugal(stream):

m = 0

for val in stream:

if val > m:

m += 1

elif val < m:

m -= 1

return m

Page 12: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Ограничение по

памяти - 1 int!

def frugal(stream):

m = 0

for val in stream:

if val > m:

m += 1

elif val < m:

m -= 1

return m

Реально работает?

Page 13: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)
Page 14: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Персентили?

Page 15: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Демо: bit.ly/frugalsketch

def frugal_1u(stream, m=0, q=0.5):

for val in stream:

r = np.random.random()

if val > m and r > 1 - q:

m += 1

elif val < m and r > q:

m -= 1

return m

Page 16: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Потоковый + вероятностный = скетч

Page 17: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Что мы хотим?

Знать число уникальных

пользователейaka мощность множества или кардинальное число

Page 18: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Что мы хотим?

Знать число уникальных

пользователей

по сайтам, интересам,

временным интервалам

Page 19: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Когда мы это хотим?

Прямо сейчас

Page 20: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Данные:

1010 элементов,

109 уникальных int32

40Гб

Page 21: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Решение в лоб: хеш-таблица

Page 22: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Хеш-таблица:

4Гб

Page 23: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

HyperLogLog:

1.5кб, 2% ошибка

Page 24: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Все начинается с алгоритма LogLog

Page 25: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Представьте, что сегодня утром

я бросал монетку и записал,

какое максимальное число раз

подряд выпала решка

Page 26: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

2 раза

100 раз

Page 27: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

В каком случае я бросал дольше?

Page 28: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Нас интересуют паттерны

в хешах входных значений

(число 0 = решек в начале)

Page 29: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Хешируем, не семплируем!*

* нужна хорошая хеш-функция

Page 30: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Ждем:

0xxxxxx хешей - ~50%

1xxxxxx хешей - ~50%

00xxxxx хешей - ~25%

и т.д.

Page 31: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

оценка - 2R,

где R - максимальное число

лидирующих нулей

Page 32: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Я могу провести несколько

экспериментов с

подбрасыванием монетки и

записать результаты на листок

бумаги

Page 33: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

и взять среднее число

Page 34: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Этот способ называется -

стохастическое усреднение

Page 35: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Напомню, текущая оценка - 2R,

где R - максимальное число

лидирующих нулей

Page 36: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Будем использовать M корзин,

в каждой из которой будем

запоминать свой R

Page 37: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

где ɑ - нормирующая константа

Page 38: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Это и есть LogLog алгоритм

Page 39: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

LogLog

SuperLogLog

HyperLogLog

среднее гармоническое, а не арифметическое

+ некоторые поправки

Page 40: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Число корзин и длина хеша

определяют ошибку

Page 41: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

LogLog

SuperLogLog

HyperLogLog

HyperLogLog++Google, 2013

32 -> 64bit + поправки для маленьких мощностей

bit.ly/HLLGoogle

Page 42: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

LogLog

SuperLogLog

HyperLogLog

HyperLogLog++

Discrete Max-CountFacebook, 2014

bit.ly/DiscreteMaxCount

Page 43: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Large scale?

Page 44: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Объединение без потери точности!

Page 45: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

У нас есть два HLL-скетча,

возьмем максимальное значение

из каждой корзины

Page 46: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Voila! Результирующий скетч

не потерял в точности

Page 47: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Код:

bit.ly/hyperloglog

Page 48: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Временное окно

bit.ly/SlidingHLL

Page 49: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Проверка на вхождение –

старый добрый фильтр Блума

Page 50: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)
Page 51: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Cколько раз мы встречали

человека в интернете

за эту неделю?

Page 52: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Ответ - Count-Min скетч

bit.ly/CountMinSketch

Page 53: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

w

i

+1

+1

+1

h1

h4

hd

d

Оценка - возьмем минимум из d значений.

Page 54: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

хешируем, не семплируем

даем приблизительный ответ

экономим память

обрабатываем по мере

поступленияэтот слайд - “скетч” всего доклада

Page 55: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Много разных скетчей для

разных задач:персентили

частоты

коэффициент Жаккара

(похожесть множеств)

Page 56: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)
Page 57: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Это развивающаяся область:

stay tuned!

Page 58: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Еще по теме

Блог Neustar Research:

bit.ly/NRsketches

Обзор скетчей:

bit.ly/SketchesOverview

Лекции по потоковым алгоритмам:

bit.ly/streaming-lectures

Page 59: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Спасибо за внимание

и happy sketching!

Знаете, как посчитать

экономнее и точнее?

[email protected]

Page 60: Обработка данных в RTB - быстро, дешево и на 98% точно, Павел Калайдин (RuTarget)

Бонус

HyperLogLog на SQL:

bit.ly/HLLinSQL