Бигдата — как добывать золото из данных / Александр...

75
Бигдата - как добывать золото из данных Александр Сербул, ООО «1С-Битрикс»

Upload: ontico

Post on 07-Jan-2017

1.048 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Бигдата - как добывать золото из данныхАлександр Сербул,ООО «1С-Битрикс»

Page 2: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Карл, я открыл страшную тайну Bigdata и машинного обучения

Это очень интересно, пап!

Page 3: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Почти никто не понимает, как оно

работает!ПОЧТИ НИКТО!!!

Page 4: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

О ЧЕМ ПОГОВОРИМ•Для менеджеров, без математики!•Понятные алгоритмы и техники•Полезные для электронной торговли•В рамках Bigdata

Слайд 4

Page 5: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Page 6: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Если слушать внимательно, то мы сможем …• Разобраться в обширной

терминологии• Понять и простить алгоритмы и

их пользу для бизнеса• Оценить и организовать

эффективный процесс в компании

• В деталях понять, как мы сделали сервис «1С-Битрикс: BigData» и как хотим его развивать дальше

Page 7: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Page 8: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

… и отпустить

Page 9: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Кратко о себе• Люблю писать работающий,

лаконичный код к дедлайну• Java, Scala, Python, PHP, C, Bash• Люблю unix и интернет• Так и не научился ООП• Говорю много и быстро

Page 10: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Что происходит вокруг?• Шумиха вокруг «больших

данных»• Продукты и сервисы для

извлечения прибыли из Bigdata

• Очень высокий уровень вхождения

• Непонимание разных областей

Page 11: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Заголовок слайда• Текст слайда, рисунки. Старайтесь не захламлять

текст лишними данными, параметрами. Вот немного тезисов:

• Для демонстрации используются экраны с соотношением сторон 4x4!;

• Залы будут длинными (в среднем около 20 метров), поэтому текст должен быть заметным;

• Код на слайде – плохая идея, он плохо читается издалека;

• Не забывайте выделять ключевые моменты;• Предпочтительные форматы презентации –

Microsoft Power Point и PDF.Нас соблазняют, в

прямом смысле!

Page 12: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Amazon.com• Персональные, не

персональные

Page 13: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Amazon.com• Персональные, не

персональные

Page 14: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Как соблазнять?• Не персональные «крючки»:- Топ продаж (best sellers)- С этим Товаром покупают

(аксессуары)- С этим Товаром смотрят- Другие смотрят сейчас- Скидка на очень популярный товар

Небольшой набор товаров. Хвост. Спам – для некоторых.

Page 15: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Как продать из «хвоста»?

«Mining of Massive Datasets», 9.1.2: Leskovec, Rajaraman, Ullman (Stanford University)

Page 16: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Как соблазнять?• Персональные «крючки»:Рекомендуем именно вам в данный момент:- Купить, посмотреть- Люди, похожие на вас

(«близкие по духу»)- «Хорошая» скидка,

«хорошая» цена- Полезный контент- Релевантный поиск

Page 17: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Атака

Ктулху

на наш

мозг…

Page 18: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Учиться – просто некогда

Computer Science

Высшая математик

а

Теория вероятносте

й

Математическая статистика

Программная инженерия

Машинное обучение

Параллельные алгоритмы Обработка

«больших данных»

Линейная алгебра

Page 19: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Информация - «только для избранных»

• Wikipedia • Google…• http://www.machinelearning.ru

Page 20: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Уровень вхождения

Page 21: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Межрассовое скрещивание

Page 22: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Докажи-ка теорему Байеса!

Page 23: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Боевое карате• Окинава, XIX век• Доступность• Массовость• Сила – не нужна• Разумный уровень

вхождения• Эффективность против

самураев!

Page 24: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Исходные данные• Целое: -4, 23• Число с плавающей точкой: 1.34, 67.91• Одно из значений (полиномиальное):

«красный», «синий», «зеленый»• Биномиальный: да/нет, M/F• Даты• ГрафыВыбросы

Page 25: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Элементарная статистика

• Среднее, дисперсия• Линейная

корреляция• Mutual Information,

Maximal information coefficient (MIC)

Page 26: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Maximal information coefficient (MIC)

Page 27: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Профиль Покупателя• Все, что есть!• Пол• Возраст• Статус• URLы, пути• Обращения в саппорт• Счетчики• Средние за квартал, месяц, день

Page 28: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Профиль Покупателя

Page 29: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Профиль Покупателя• Выбираем модель• Feature engineering• Выбираем kernel• Подбираем параметры• Измеряем качество

Page 30: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Модели…

Page 31: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Модели…

«Machine Learning: A Probabilistic Perspective», Kevin P. Murphy, The MIT Press 2012

Page 32: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Отличия моделей• Генеративные: скорость обучения,

добавляем классы без переобучения, пропущенные значения = ОК

• Дискриминативные: feature preprocessing

• Параметрические – небольшой размер в памяти

• Непараметрические – коллаборативная фильтрация, k-NN,…

Page 33: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Сбор данных для анализа• Хиты на сайте (логи)• События, привязанные к

cookie (через «счетчик»)• Логи работы• Мультиканальность

Page 34: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Что собираем мы• Кука Пользователя• Хэш лицензии• Домен• ID товара• Название Товара• Категории Товара• ID рекомендации• ряд других

Событие

Просмотр товара

Добавление в корзину

Заказ Оплата Заказа

Page 35: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Технологии• Нагрузка на «счетчик» -

nginx/lua, NoSQL-решение, …• Amazon Kinesis, Apache Kafka

…• Много данных – нужен

кластер для обработки: hadoop+spark/amazon/…

• Реализация: дни

Page 36: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Как мы собираем данные

Page 37: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Как мы собираем данные

Page 38: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Полезные (готовые) инструменты• Rapidminer• SAS• SPSS• RStudio• Готовые блоки, серверные

редакции (hadoop), графики

Page 39: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Библиотеки• Spark MLlib (scala/java/python) –

много данных• scikit-learn.org (python) – «мало»

данных• R + Azure

Page 40: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Война систем хранения• SQL на MapReduce: Hive, Pig, Spark SQL• SQL на MPP (massive parallel

processing):Impala, Presto, Amazon RedShift, Vertica• NoSQL: Cassandra, Hbase, Amazon

DynamoDB• Классика: MySQL, MS SQL, Oracle, …

Page 41: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Собаки «нерезанные»

Page 42: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

СлономанияDoug Cutting• Yahoo!• Apache Lucene• Apache

Hadoop/MapReduce• Cloudera

Page 43: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Персонализация

Page 44: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Content-based рекомендации• Купил пластиковые окна –

теперь их предлагают на всех сайтах и смартфоне, в Windows 10 и во сне.

• Купил Toyota, ищу шины, предлагают шины к Toyota вверху списка

• Vector space model, tf/idf• word2vec

Page 45: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Content-based рекомендации

Page 46: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

word2vec, SVD/PCA• Сжимаем

размерность• «Склеиваем»

синонимы• Skip-gram• Continuous bag of

words (CBOW)• «Похож» на

матричную факторизацию

Page 47: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Content-based рекомендации – технологии• Поисковый «движок»: Sphinx,

Lucene (Solr)• «Обвязка» для данных• Хранение профиля Клиента• Реализация: неделька. Риски –

объем данных, языки.

Page 48: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Коллаборативная фильтрация

• Предложи Товары/Услуги, которые есть у твоих друзей (User-User)

• Предложи к твоим Товарам другие, связанные с ними Товары (Item-Item): «сухарики к пиву»

Page 49: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Коллаборативная фильтрация

Page 50: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

• User-User: поиск похожих «в лоб» (kNN), k-d tree, LSH

• Item-Item: Amazon, работает гораздо быстрее

• Item-Item «плюшки» - с этим Товаром покупают

• Mahout Taste (матрица в памяти)• Spark MLLib (ALS)

Коллаборативная фильтрация

Page 51: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Я обещал, что не будет математики?

Это была шутка

Page 52: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Хорошо помогает при умственных

нагрузках:

Page 53: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Сжатие Товаров• «Единый» каталог• Склеить дубликаты• Передать «смысл» между

Товарами• Улучшить качество

персональных рекомендаций• Семантическое сжатие

размерности, аналог матричной факторизации

• Скорость• Ранжирование результатов

Page 54: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

MinhashMin-wise independent permutations

locality sensitive hashing schemeСнижаем размерностьСовместима с LSH (следующий

слайд)Pr[ hmin(A) = hmin(B) ] = J(A,B)Размер сигнатуры: 50-500simhash

Page 55: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Text shinglingShingle – «черепица»Устойчивость к вариантам,

опечаткам

«Штаны красные махровые в полоску»{«штан», «таны», «аны », «ны к», «ы кра», «крас», …}«Красные полосатые штаны»

Page 56: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Векторизация описания ТовараТекст: «Штаны красные махровые в

полоску»Вектор «bag of words»: [0,0,0,1,0,…

0,1,0] – ~ 10000 -1000000 элементов (kernel hack)

Minhash-сигнатура после shingling:[1243,823,-324,12312,…] – 100-500

элементов, совместима с LSH

Page 57: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Locality-Sensitive Hashing (LSH)

Вероятностный метод снижения размерности

Использовали для minhashed-векторов

Banding:b – корзины, r – элементов в корзине.P{ “Векторы совпадут хотя-бы в одной корзине” }:

Page 58: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Кластеризация каталогаApache Spark2-3 часа, 8 spot-серверов10-20 млн. Товаров => 1 млн.

кластеровАдекватные по смыслу кластераПерсональные рекомендации - стали

в разы «лучше»DynamoDB – хранение кластроидов

Page 59: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Измерение качества персональных рекомендаций

Recall, precisionПредсказываем на

«старой» моделиСмотрим фактические

значения профиля – на текущей модели

Считаем recall

Page 60: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Цифры - краткоТысячи запросов в секунду к сервису~20 тысяч интернет-магазиновОщутимый рост конверсии – до 50-80%,

зависит от размера магазинаАктивное использование «С этим Товаром

покупают»!?1 сервер рекомендаций (70G ОЗУ) +

небольшой кластер SparkОбсчитываем событий: > 855 миллионовУникальных посетителей: > 332 миллиона

Page 61: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Куда развиватьсяПол, возраст, ценовая категория клиента –

машинное обучениеРазные виды товаров: возобновляемые, не

возобновляемыеЦена товараВнутренние циклы (готов покупать),

модели МарковаКлассификация групп лояльности,

кластерный анализРелевантный поиск

Page 62: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Хорошо помогает при умственных

нагрузках:

Page 63: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Кластерный анализ

Page 64: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Кластерный анализ•Когда измерений много•Если «повезет»•Четкая/нечеткая•Иерархическая•Графы•Данных много/мало•Интерпретация

Page 65: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Кластерный анализ•Сегментация клиентов, типов использования сервиса, …

•Кластеризация «общего» товарного каталога

•Кластеризация графа связей сайтов (пересечение аудитории)

• Маркетинг работает с целевыми группами, информация разбита на «смысловые облака».

Page 66: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Хорошо помогает при умственных

нагрузках:

Page 67: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Классификация

Page 68: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Классификация•Не путать с кластеризацией!

•Кластеризация – автоматическая и если повезет

•Классификация – учим компьютер сами и «везет» чаще

•Пример: фильтрация спама, которую доучиваем

Page 69: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Классификация•Удержание: найти клиентов, которые скоро уйдут (churn-rate)

•Найти клиентов, готовых стать платными

•Найти клиентов, которые готовы купить новую услугу

•Найти готовых уволиться•Определить у клиента – пол!

Page 70: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Измерение качества

•Confusion matrix•Recall/precision•Kappa•AUC > 0.5

Page 71: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Классификация в 1С-Битрикс• Несколько моделей• Logistic Regression/SVM• Annova kernel• Spark MLLib• Churn-rate, вероятные

платники• CLV (customer lifetime value)

Page 72: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Хорошо помогает при умственных

нагрузках:

Page 73: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

•Собираем данные (хиты, логи, анкетирование)

•Строим дерево решений•В Rapidminer – полчаса•В Spark MLlib – чуть больше.

А что влияет на конверсию в …?

Page 74: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

ИТОГИ• Инструменты - доступны• Алгоритмы –

монетизируются• 20-30% бигдаты содержат

ценную инфу• 30% моделей – работают,

хорошо

Page 75: Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)

Спасибо за внимание! Надеюсь все понятно и вопросов нет

Александр Сербул

@[email protected]