Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Data Mining in RTB
Data Mining in RTB
Loading in …3
×

Check these out next

1 of 61 Ad
Advertisement

More Related Content

Viewers also liked (15)

Similar to Обработка данных в RTB: быстро, дешево и на 98% точно (20)

Advertisement

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

  1. 1. Обработка данных в RTB: быстро, дешево и на 98% точно
  2. 2. Павел Калайдин @facultyofwonder
  3. 3. данных очень много памяти разумно мало хотим все знать за один проход время обработки - константно
  4. 4. max, min, mean
  5. 5. Как посчитать медиану?
  6. 6. Случайная выборка?
  7. 7. reservoir sampling? возможно
  8. 8. Вероятностные алгоритмы
  9. 9. сойдет приблизительный ответ хотим знать распределение ошибки
  10. 10. frugal <- function(stream) { m <- 0 for (val in stream) { if (val > m) m <- m + 1 else if (val < m) m <- m - 1 } return(m) }
  11. 11. def frugal(stream): m = 0 for val in stream: if val > m: m += 1 elif val < m: m -= 1 return m
  12. 12. Ограничение по памяти - 1 int! def frugal(stream): m = 0 for val in stream: if val > m: m += 1 elif val < m: m -= 1 return m Реально работает
  13. 13. Персентили?
  14. 14. def frugal_1u(stream, m=0, q=0.5): for val in stream: Демо: bit.ly/frugalsketch r = np.random.random() if val > m and r > 1 - q: m += 1 elif val < m and r > q: m -= 1 return m
  15. 15. Потоковый + вероятностный = скетч
  16. 16. Что мы хотим? Знать число уникальных пользователей aka мощность множества или кардинальное число
  17. 17. Что мы хотим? Знать число уникальных пользователей по сайтам, интересам, временным интервалам
  18. 18. Когда мы это хотим? Прямо сейчас
  19. 19. Данные: 1010 элементов, 109 уникальных int32 40Гб
  20. 20. Решение в лоб: хеш-таблица
  21. 21. Хеш-таблица: 4Гб
  22. 22. HyperLogLog: 1.5кб, 2% ошибка
  23. 23. Все начинается с алгоритма LogLog
  24. 24. Представьте, что сегодня утром я бросал монетку и записал, какое максимальное число раз подряд выпала решка
  25. 25. 2 раза 100 раз
  26. 26. В каком случае я бросал дольше?
  27. 27. Нас интересуют паттерны в хешах входных значений (число 0 = решек в начале)
  28. 28. Хешируем, не семплируем!* * нужна хорошая хеш-функция
  29. 29. Ждем: 0xxxxxx хешей - ~50% 1xxxxxx хешей - ~50% 00xxxxx хешей - ~25% и т.д.
  30. 30. оценка - 2R, где R - максимальное число лидирующих нулей
  31. 31. Я могу провести несколько экспериментов с подбрасыванием монетки и записать результаты на листок бумаги
  32. 32. И взять среднее число
  33. 33. Этот способ называется - стохастическое усреднение
  34. 34. Напомню, текущая оценка - 2R, где R - максимальное число лидирующих нулей
  35. 35. Будем использовать M корзин, в каждой из которой будем запоминать свой R
  36. 36. где ɑ - нормирующая константа
  37. 37. Это и есть LogLog алгоритм
  38. 38. LogLog SuperLogLog
  39. 39. LogLog SuperLogLog HyperLogLog среднее гармоническое, а не арифметическое + некоторые поправки
  40. 40. Число корзин и длина хеша - определяют ошибку
  41. 41. LogLog SuperLogLog HyperLogLog HyperLogLog++ Google, 2013 32 -> 64bit + поправки для маленьких мощностей bit.ly/HLLGoogle
  42. 42. LogLog SuperLogLog HyperLogLog HyperLogLog++ Discrete Max-Count Facebook, 2014 bit.ly/DiscreteMaxCount
  43. 43. Large scale?
  44. 44. Объединение без потери точности!
  45. 45. У нас есть два HLL-скетча, возьмем максимальное значение из каждой корзины
  46. 46. Voila! Результирующий скетч не потерял в точности
  47. 47. Код: bit.ly/hyperloglog
  48. 48. Временное окно bit.ly/SlidingHLL
  49. 49. Проверка на вхождение - старый добрый фильтр Блума
  50. 50. i h 1 h 2 h k 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0
  51. 51. Сколько раз мы встречали человека в интернете за эту неделю?
  52. 52. Ответ - Count-Min скетч bit.ly/CountMinSketch
  53. 53. w i +1 +1 +1 h1 h4 hd d Оценка - возьмем минимум из d значений.
  54. 54. хешируем, не семплируем даем приблизительный ответ экономим память обрабатываем по мере поступления этот слайд - “скетч” всего доклада
  55. 55. Много разных скетчей для разных задач: персентили, частоты, коэффициент Жаккара (похожесть множеств)
  56. 56. Это развивающаяся область: stay tuned!
  57. 57. Еще по теме: Блог Neustar Research: bit.ly/NRsketches Обзор скетчей: bit.ly/SketchesOverview Лекции по потоковым алгоритмам: bit.ly/streaming-lectures
  58. 58. Спасибо за внимание и happy sketching! Знаете, как посчитать экономнее и точнее? pavel@rutarget.ru
  59. 59. Бонус: HyperLogLog на SQL: bit.ly/HLLinSQL

×