Обработка данных в rtb: быстро, дешево и на 98% точно
DESCRIPTION
Доклад на Highload++2014TRANSCRIPT
![Page 1: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/1.jpg)
Обработка данных в RTB: быстро, дешево и на 98% точно
![Page 2: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/2.jpg)
Павел Калайдин @facultyofwonder
![Page 3: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/3.jpg)
данных очень многопамяти разумно мало
хотим все знать за один проходвремя обработки - константно
![Page 4: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/4.jpg)
max, min, mean
![Page 5: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/5.jpg)
Как посчитать медиану?
![Page 6: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/6.jpg)
Случайная выборка?
![Page 7: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/7.jpg)
reservoir sampling?возможно
![Page 8: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/8.jpg)
Вероятностные алгоритмы
![Page 9: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/9.jpg)
сойдет приблизительный ответхотим знать распределение ошибки
![Page 10: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/10.jpg)
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% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/11.jpg)
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% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/12.jpg)
Ограничение по памяти - 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% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/13.jpg)
![Page 14: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/14.jpg)
Персентили?
![Page 15: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/15.jpg)
Демо: 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% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/16.jpg)
Потоковый + вероятностный = скетч
![Page 17: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/17.jpg)
Что мы хотим?Знать число уникальных
пользователейaka мощность множества или кардинальное число
![Page 18: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/18.jpg)
Что мы хотим?Знать число уникальных
пользователейпо сайтам, интересам, временным
интервалам
![Page 19: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/19.jpg)
Когда мы это хотим?Прямо сейчас
![Page 20: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/20.jpg)
Данные:1010 элементов,
109 уникальных int3240Гб
![Page 21: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/21.jpg)
Решение в лоб: хеш-таблица
![Page 22: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/22.jpg)
Хеш-таблица:4Гб
![Page 23: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/23.jpg)
HyperLogLog:1.5кб, 2% ошибка
![Page 24: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/24.jpg)
Все начинается с алгоритма LogLog
![Page 25: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/25.jpg)
Представьте, что сегодня утром я бросал монетку и записал, какое максимальное число раз подряд
выпала решка
![Page 26: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/26.jpg)
2 раза100 раз
![Page 27: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/27.jpg)
В каком случае я бросал дольше?
![Page 28: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/28.jpg)
Нас интересуют паттерны в хешах входных значений
(число 0 = решек в начале)
![Page 29: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/29.jpg)
Хешируем, не семплируем!*
* нужна хорошая хеш-функция
![Page 30: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/30.jpg)
Ждем:0xxxxxx хешей - ~50%1xxxxxx хешей - ~50%00xxxxx хешей - ~25%
и т.д.
![Page 31: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/31.jpg)
оценка - 2R, где R - максимальное число
лидирующих нулей
![Page 32: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/32.jpg)
Я могу провести несколько экспериментов с подбрасыванием монетки и записать результаты на
листок бумаги
![Page 33: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/33.jpg)
И взять среднее число
![Page 34: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/34.jpg)
Этот способ называется - стохастическое усреднение
![Page 35: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/35.jpg)
Напомню, текущая оценка - 2R, где R - максимальное число
лидирующих нулей
![Page 36: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/36.jpg)
Будем использовать M корзин, в каждой из которой будем запоминать
свой R
![Page 37: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/37.jpg)
где ɑ - нормирующая константа
![Page 38: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/38.jpg)
Это и есть LogLog алгоритм
![Page 39: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/39.jpg)
LogLog
SuperLogLog
![Page 40: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/40.jpg)
LogLogSuperLogLog
HyperLogLogсреднее гармоническое, а не арифметическое
+ некоторые поправки
![Page 41: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/41.jpg)
Число корзин и длина хеша - определяют ошибку
![Page 42: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/42.jpg)
LogLogSuperLogLogHyperLogLog
HyperLogLog++Google, 2013
32 -> 64bit + поправки для маленьких мощностей
bit.ly/HLLGoogle
![Page 43: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/43.jpg)
LogLogSuperLogLogHyperLogLog
HyperLogLog++
Discrete Max-CountFacebook, 2014
bit.ly/DiscreteMaxCount
![Page 44: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/44.jpg)
Large scale?
![Page 45: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/45.jpg)
Объединение без потери точности!
![Page 46: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/46.jpg)
У нас есть два HLL-скетча, возьмем максимальное значение из каждой
корзины
![Page 47: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/47.jpg)
Voila! Результирующий скетч не потерял в точности
![Page 50: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/50.jpg)
Проверка на вхождение - старый добрый фильтр Блума
![Page 51: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/51.jpg)
ih1
h2
hk
1 1 10 0 0 0 0 0 0 0 0 0 0 0 0
![Page 52: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/52.jpg)
Сколько раз мы встречали человека в интернете за эту неделю?
![Page 53: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/53.jpg)
Ответ - Count-Min скетчbit.ly/CountMinSketch
![Page 54: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/54.jpg)
w
i
+1
+1
+1
h1
h4
hd
d
Оценка - возьмем минимум из d значений.
![Page 55: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/55.jpg)
хешируем, не семплируемдаем приблизительный ответ
экономим памятьобрабатываем по мере поступления
этот слайд - “скетч” всего доклада
![Page 56: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/56.jpg)
Много разных скетчей для разных задач:
персентили,частоты,
коэффициент Жаккара (похожесть множеств)
![Page 57: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/57.jpg)
![Page 58: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/58.jpg)
Это развивающаяся область: stay tuned!
![Page 59: Обработка данных в RTB: быстро, дешево и на 98% точно](https://reader036.vdocuments.mx/reader036/viewer/2022081800/55831b5cd8b42a6e768b49a3/html5/thumbnails/59.jpg)
Еще по теме:
Блог Neustar Research:bit.ly/NRsketchesОбзор скетчей:bit.ly/SketchesOverviewЛекции по потоковым алгоритмам:bit.ly/streaming-lectures