Применение моделей CatBoost в ClickHouse
Что такое ClickHouse?
Почему column-oriented?
Почему column-oriented?
Особенности ClickHouse
Предсказание вероятности покупки
Предсказание вероятности покупки
Рабочий процесс
Сбор данных
Вычисление признаков
Вычисление признаков
Обучение моделей
Внедрение обученной модели
Способ 1: Используем код из обучения
Способ 1: Используем код из обучения
Способ 2: препарируем модель
Способ 2: препарируем модель
Способ 2: препарируем модель
Способ 2: препарируем модель
Способ 2: препарируем модель
Способ 2: препарируем модель
Способ 2: препарируем модель
Способ 3: встраиваем применение в базу
Способ 3: встраиваем применение в базу
Способ 3: встраиваем применение в базу
Способ 3: встраиваем применение в базу
Интеграция ClickHouse и CatBoost
Модели CatBoost в ClickHouse
Модели CatBoost в ClickHouse
Модели CatBoost в ClickHouse
Чтение из CatBoost Pool
Чтение из CatBoost Pool
Чтение из CatBoost Pool
Чтение из CatBoost Pool
Использование обученной модели
Использование обученной модели
Использование обученной модели
Итоги
1.05M
Category: programmingprogramming

Модели CatBoost в ClickHouse

1.

2. Применение моделей CatBoost в ClickHouse

ClickHouse
Применение моделей
CatBoost в ClickHouse
Николай Кочетов

3. Что такое ClickHouse?

▌ ClickHouse - distributed analytical column-oriented DBMS
3

4. Почему column-oriented?

Так работают row-oriented системы:
4

5. Почему column-oriented?

Так работают column-oriented системы:
5

6. Особенности ClickHouse







c o lum n-o rie nte d
линейная масштабируемость
отказоустойчивость
загрузка данных в реальном времени
онлайн (s ub-s e c o nd) запросы
поддержка диалекта SQL + расширения
(массивы, вложенные структуры данных, do m ain-s pe c ific функции,
сэмплирование)
6

7. Предсказание вероятности покупки

8. Предсказание вероятности покупки

▌ Задача
Узнать больше информации про пользователей
▌ Цель
По поведению пользователей в прошлом, предсказывать их поведение
в будущем. Например, ответить на вопрос — с какой вероятностью
пользователь совершит заказ.
8

9. Рабочий процесс

Сбор данных
Обучение модели
Produc tion proc e s s
Вычисление
признаков
Построение выборки
и оценка качества
Предсказание
вероятности покупки
9

10. Сбор данных

Используем данные Яндекс.Метрики из Logs API
Сырые данные по хитам и визитам



Предыдущие покупки
Состояние корзины
Посещения страниц с описанием товара
▌ Загружаем
данные в ClickHouse
10

11. Вычисление признаков

Можем использовать более 60 характеристик
▌ Характеристики
пользователя:
Устройство, браузер, регион
▌ Поведение:
Источники трафика, доход,
был ли последний визит отказом и т.д.
11

12. Вычисление признаков




Храним данные в C lic kH o us e в неагрегированном виде
Можем получить (почти) любые признаки
Например, средняя длительность сессии:
SELECT
avg(Duration) as avg_duration
FROM visits_all SAMPLE 1/10 OFFSET 2/10
WHERE StartDate BETWEEN '{start_date}' AND '{end_date}'
GROUP BY FirstPartyCookie
12

13. Обучение моделей

Собрали выборку и обучили несколько различных моделей:





SVM
Lo gis tic Re gre s s io n
Rando m Fo re s t
XGB o o s t
C atB o o s t
13

14. Внедрение обученной модели

В результате обучения получили модель и набор скриптов.
Как с этим жить?
14

15. Способ 1: Используем код из обучения

Наводим порядок в куче скриптов:
1. Выгружаем данные раз в неделю (каждый понедельник)
2. Применяем модель также, как и тестировали
3. Загружаем вероятность покупки в таблицу C lic kH o us e
15

16. Способ 1: Используем код из обучения

▌ Преимущества


Просто, быстро, эффективно. Часть кода уже написана.
Полезно. Пригодится при переобучении.
▌ Недостатки


Загрузка и выгрузка данных. Может тормозить.
Заранее готовим ответы.
Сложно получить ответ для произвольного периода.
16

17. Способ 2: препарируем модель

▌ План



Смотрим, как устроена модель
Переносим процесс применения в хранилище данных
Избавляемся от загрузки и выгрузки данных
▌ Чего



работ
сможем добиться?
Избавимся от перекладывания данных
Будем работать с произвольным множеством данных
Применение модели — запрос в базу
17

18. Способ 2: препарируем модель

▌ Какие
алгоритмы можем перенести в СУБД?
18

19. Способ 2: препарируем модель

▌ Линейные
классификаторы
Тривиально
SELECT ((feature1 * w1) + ... + (featureN * wN)) > threshold
FROM table
▌ Логистическая
регрессия
Результаты на тестовой выборке


ROC AUC : 0.917
0.44 s e c . 441497 ro ws /s e c . 63.16 MiB /s e c .
19

20. Способ 2: препарируем модель

▌ Дерево
принятия решений
Вкладываем дерево в цепочку вызовов условных функций
SELECT
if(petal_width <= 0.8,
'setosa',
if(petal_width <= 1.75,
'versicolor',
'virginica'))
FROM iris
20

21. Способ 2: препарируем модель

▌ Лес,
бустинг — набор деревьев
SELECT arrayReduce('avg',[if(...), ..., if(...)])
▌ Random
Forest, 100 деревьев глубины 3
Результаты на тестовой выборке


ROC AUC : 0.917
(0.923 для глубины 6)
2.54 s e c . 59450 ro ws /s e c . 1.59 MiB /s e c .
21

22. Способ 2: препарируем модель

Небольшой лес из 100 деревьев
22

23. Способ 2: препарируем модель

▌ Недостатки





Сложность преобразования модели в запрос
Ограниченная применимость
Не для всех алгоритмов машинного обучения
Ограничения со стороны СУБД
Проблемы с производительностью
23

24. Способ 3: встраиваем применение в базу




Используем библиотеку машинного обучения внутри базы
Перекладываем на базу работу по преобразованию данных
Применяем модель как вызов встроенной функции
SELECT modelEvaluate('iris', sepal_width, petal_width)
FROM iris
24

25. Способ 3: встраиваем применение в базу

▌ Преимущества
Те же, что и у предыдущего способа, но



Нет неоправданных проблем с производительностью
Основная работа — на базе данных
Оптимизация работы внутри библиотеки машинного обучения
▌ Недостатки


База должна поддерживать работу с конкретным алгоритмом
Различия в версиях и форматах хранения
25

26. Способ 3: встраиваем применение в базу

▌ CatBoost,
100 деревьев глубины 6
Результаты на тестовой выборке


ROC AUC : 0.932
3.96 s e c . 19467 ro ws /s e c . 2.78 MiB /s e c .
▌ XGBoost
Результаты на тестовой выборке

1000 деревьев глубины 3 — ROC AUC : 0.929
26

27. Способ 3: встраиваем применение в базу

Результаты
Алгоритм
ROC AUC
Время
Скорость
Логистическая регрессия
0.917
0.44 s e c .
63.16 MiB /s e c .
Лес, 100 дер. глубины 3
0.917
2.54 s e c .
1.59 MiB /s e c .
Лес, 100 дер. глубины 6
0.924
XGB o o s t, 1000 дер. глубины 3
0.929
C atB o o s t, 100 дер. глубины 6
0.932
3.96 s e c .
2.78 MiB /s e c .
27

28. Интеграция ClickHouse и CatBoost

Интеграция C lic kH o us e и
C atB o o s t

29. Модели CatBoost в ClickHouse

1. Описываем конфигурацию модели
<models>
<model>
<!-- Тип модели. Сейчас только catboost. -->
<type>catboost</type>
<!-- Имя модели. Для modelEvaluate(). -->
<name>purchase_model</name>
<!-- Путь к обученной модели. -->
<path>clickhouse/models/model.cbm</path>
<!-- Период обновления. 0 — не обновляем. -->
<lifetime>0</lifetime>
</model>
</model>
29

30. Модели CatBoost в ClickHouse

1. Описываем конфигурацию модели
2. В c o nfig.xm l добавляем путь к конфигурации и путь к C atB o o s t
<!-- catboost/catboost/libs/model_interface репозитория CatBoost -->
<!-- Сборка: ../../../ya make -r -->
<catboost_dynamic_library_path>
/path/to/libcatboostmodel.so
</catboost_dynamic_library_path>
<!-- Используем '*' для маски поиска -->
<models_config>
clickhouse/models/model*.xml
</models_config>
30

31. Модели CatBoost в ClickHouse

1. Описываем конфигурацию модели
2. В c o nfig.xm l добавляем путь к конфигурации и путь к C atB o o s t
3. Используем функцию
modelEvaluate('model_name', feature1, ..., featureN)
SELECT
modelEvaluate('purchase_model', ...) AS prediction
FROM table
Сначала перечисляем числовые признаки, затем категориальные.
31

32. Чтение из CatBoost Pool

▌ Формат
входных данных для обучения CatBoost —
CatBoost Pool
1. Описание столбцов — TSV файл вида
column_id
data_type
feature_id (optional)
Пример для двух признаков и Targe t
0
Categ
is_yabrowser
1
Num
viewed_products
2
Target
2. Описание датасета — TSV файл с данными
32

33. Чтение из CatBoost Pool

Чтобы быстро протестировать работу обученной модели в C lic kH o us e ,
добавлена возможность читать данные сразу из пула C atB o o s t.
▌ Табличная
функция catBoostPool.
Параметры — пути к файлам с описанием столбцов и датасета.
catBoostPool('/path/to/column/description', '/path/to/dataset/description')
Создает временную таблицу с движком File ('TSV').
Файлы должны находиться в директории данных сервера.
33

34. Чтение из CatBoost Pool

Описание столбцов пула C atB o o s t:
0
Categ
is_yabrowser
1
Num
viewed_products
2
Target
Описание столбцов в c atB o o s tPo o l
DESCRIBE TABLE catBoostPool('test.cd', 'test.csv')
┌─name────────────┬─type────┬─default_type─┬──────────┐
│ Num0
│ Float64 │


│ Categ0
│ String │


│ Target
│ Float64 │


│ is_yabrowser
│ String │ ALIAS
│ Categ0

│ viewed_products │ Float64 │ ALIAS
│ Num0

└─────────────────┴─────────┴──────────────┴──────────┘
34

35. Чтение из CatBoost Pool

Описание столбцов пула C atB o o s t:
0
Categ
is_yabrowser
1
Num
viewed_products
2
Target
Описание столбцов в c atB o o s tPo o l
DESCRIBE TABLE
(
SELECT *
FROM catBoostPool('test.cd', 'test.csv')
)
┌─name───┬─type────┬─default_type─┬─default_expression─┐
│ Num0
│ Float64 │


│ Categ0 │ String │


└────────┴─────────┴──────────────┴────────────────────┘
35

36. Использование обученной модели

▌ Предсказываем
вероятность покупки
SELECT
modelEvaluate('purchase_model', *) AS prediction,
1. / (1. + exp(-prediction)) AS probability
FROM catBoostPool('test.cd', 'test.csv')
36

37. Использование обученной модели

▌ Считаем
Logloss
SELECT
ошибку на тестовой выборке по метрике
-avg((Target * log(prob)) +
((1. - Target) * log(1. - prob))) AS logloss
FROM
(
SELECT
modelEvaluate('purchase_model', *) AS pred,
1. / (1. + exp(-pred)) AS prob,
Target
FROM catBoostPool('test.cd', 'test.csv')
)
┌─────────────logloss─┐
│ 0.03719106223177089 │
└─────────────────────┘
37

38. Использование обученной модели

38

39. Итоги

▌ Интеграция


Применение обученных моделей
Чтение данных из пула
▌ Дальнейшие


ClickHouse и CatBoost
планы
Другие форматы моделей
Встроенное обучение моделей — ?
39

40.

Спасибо!
Николай Кочетов
Разработчик C lic kH o us e
nik-ko c he to v@yande x-te am .ru
+7 965 124 03 64
English     Русский Rules