Подключение моделей машинного обучения
Managed Service for ClickHouse позволяет анализировать данные с помощью моделей машинного обучения CatBoost без использования дополнительных инструментов. Чтобы применить модель, подключите ее к кластеру и вызовите в SQL-запросе с помощью встроенной функции modelEvaluate()
. В результате выполнения такого запроса вы получите предсказания модели для каждой строки входных данных. Подробнее о машинном обучении в ClickHouse читайте в документации.
Перед подключением модели
Managed Service for ClickHouse работает только с моделями, которые загружены в Object Storage и к которым предоставлен публичный доступ на чтение:
-
Загрузите файл обученной модели в Object Storage.
-
Настройте публичный доступ на чтение к файлу модели.
-
Получите публичную ссылку на модель.
Подключить модель
-
Выберите кластер:
- Перейдите на страницу каталога и выберите сервис Managed Service for ClickHouse.
- Нажмите на имя нужного кластера и выберите вкладку Машинное обучение на панели слева.
- Нажмите на кнопку Добавить модель.
-
Настройте параметры модели:
- Тип — тип модели. Поддерживаются только модели CatBoost:
ML_MODEL_TYPE_CATBOOST
. - Имя — имя модели. Имя модели — один из аргументов функции
modelEvaluate()
, которая нужна для вызова модели в ClickHouse. - URL — адрес модели в Object Storage.
- Тип — тип модели. Поддерживаются только модели CatBoost:
-
Нажмите кнопку Добавить и дождитесь окончания добавления модели.
Применить модель
Чтобы применить модель к данным, которые хранятся в кластере ClickHouse:
-
Подключитесь к кластеру с помощью клиента ClickHouse CLI или перейдите на вкладку SQL в консоли управления кластером.
-
Выполните SQL-запрос вида:
SELECT modelEvaluate('<имя модели>', <имя столбца 1>, <имя столбца 2>, ... <имя столбца N>) FROM <имя таблицы>
В качестве аргументов функции modelEvaluate()
укажите имя модели и имена столбцов, содержащих входные данные. В результате выполнения запроса вы получите столбец с предсказаниями модели для каждой строки исходной таблицы.
Пример
Если у вас еще нет подходящего набора данных и модели для его обработки, вы можете протестировать машинное обучение в Managed Service for ClickHouse на этом примере. Для него мы подготовили файл с данными и обучили модель для их анализа. Вы сможете загрузить данные в ClickHouse и посмотреть на предсказания модели для разных строк таблицы.
Примечание
Для этого примера мы будем использовать открытые данные из Amazon Employee Access Challenge. Модель обучена предсказывать значение столбца ACTION
. Те же данные и модель используются в примерах в документации ClickHouse и на GitHub.
Чтобы загрузить данные в ClickHouse и протестировать модель:
- Установите ClickHouse CLI и настройте подключение к кластеру как описано в документации.
- Скачайте файл с данными для анализа:
$ wget https://storage.yandexcloud.net/managed-clickhouse/train.csv
- Создайте таблицу для данных:
$ clickhouse-client --host <FQDN хоста> \ --database <имя базы данных> --secure \ --user <имя пользователя БД> \ --password <пароль пользователя БД> \ --port 9440 \ -q 'CREATE TABLE ml_test_table (date Date MATERIALIZED today(), ACTION UInt8, RESOURCE UInt32, MGR_ID UInt32, ROLE_ROLLUP_1 UInt32, ROLE_ROLLUP_2 UInt32, ROLE_DEPTNAME UInt32, ROLE_TITLE UInt32, ROLE_FAMILY_DESC UInt32, ROLE_FAMILY UInt32, ROLE_CODE UInt32) ENGINE = MergeTree() PARTITION BY date ORDER BY date'
- Загрузите данные в таблицу:
$ clickhouse-client --host <FQDN хоста> \ --database <имя базы данных> --secure \ --user <имя пользователя БД> \ --password <пароль пользователя БД> \ --port 9440 \ -q 'INSERT INTO ml_test_table FORMAT CSVWithNames' \ < train.csv
- В консоли управления подключите тестовую модель:
- Тип —
ML_MODEL_TYPE_CATBOOST
. - Имя —
ml_test
. - URL —
https://storage.yandexcloud.net/managed-clickhouse/catboost_model.bin
.
- Протестируйте модель:
- Подключитесь к кластеру с помощью клиента ClickHouse CLI или перейдите на вкладку SQL в консоли управления кластером.
- Проверьте работу модели с помощью запросов:
- Предсказания значения столбца
ACTION
для первых 10 строк таблицы:SELECT modelEvaluate('ml_test', RESOURCE, MGR_ID, ROLE_ROLLUP_1, ROLE_ROLLUP_2, ROLE_DEPTNAME, ROLE_TITLE, ROLE_FAMILY_DESC, ROLE_FAMILY, ROLE_CODE) > 0 AS prediction, ACTION AS target FROM ml_test_table LIMIT 10
- Предсказанная вероятность для первых 10 строк таблицы:
SELECT modelEvaluate('ml_test', RESOURCE, MGR_ID, ROLE_ROLLUP_1, ROLE_ROLLUP_2, ROLE_DEPTNAME, ROLE_TITLE, ROLE_FAMILY_DESC, ROLE_FAMILY, ROLE_CODE) AS prediction, 1. / (1 + exp(-prediction)) AS probability, ACTION AS target FROM ml_test_table LIMIT 10
- Предсказания значения столбца