Время прочтения: 4 мин.
В своей статье я хочу рассказать об облачном инструменте, который позволяет анализировать большие данные, применять к ним методы машинного обучения и экономить временные ресурсы на администрирование Базы Данных.
Довольно часто, в нашей работе возникает потребность в обработке и анализе большого массива внешних данных. С целью экономии времени на создание и развертывание полноценной Базы Данных, использование дополнительной среды разработки для построения моделей машинного обучения (например, PyCharm), я решил воспользоваться облачным инструментом для анализа данных от компании Google – BigQuery.
Аналитика данных включает в себя обработку данных и поиск инсайтов, которые можно использовать для принятия решения. Анализируемые данные хранятся в одном или нескольких форматах: текстовые файлы, электронные таблицы, базы данных и др.
Когда для работы с данными вы выбираете локальную Базу Данных (БД) возникает несколько вопросов:
- Выбор БД
- Загрузка и установка софта
- Настройка производительности
- Масштабирование при увеличении нагрузки
- Ограничение места для хранения данных
Все эти вопросы помогает решить Google BigQuery (GBQ) – быстрое, масштабируемое, экономичное хранилище данных, входящее в набор облачных услуг Google Cloud Platform (GCP). Также Google BigQuery дает возможность использовать методы машинного обучения непосредственно в консоли.
Работать с GBQ можно с помощью встроенного графического интерфейса, либо на любом языке программирования, который работает с REST API. Для запросов к БД используется SQL диалект (standard, legacy). Начать использование GBQ вы можете с использования публичных датасетов или загрузить собственные данные.
В данной статье в качестве примера я использовал публичный датасет Google Analytics 360. В нем содержатся данные о поведении пользователей Google Merchandise Store (просмотры страниц, транзакции и т.д.). Подробную информацию о наборе данных можно посмотреть здесь. Отправим запрос к таблице ga_sessions_, чтобы посмотреть сводную информацию по кол-ву пользователей, визитов, просмотров страниц, транзакций и доходу:
SELECT
COUNT(DISTINCT fullVisitorId) AS users,
SUM(totals.visits) AS visits,
SUM(totals.pageviews) AS pageviews,
SUM(totals.transactions) AS transactions,
SUM(totals.transactionRevenue)/1000000 AS revenue
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
_TABLE_SUFFIX BETWEEN '20170101'
AND '20170120'
AND totals.totalTransactionRevenue IS NOT NULL
Запрос вернет таблицу:
Теперь мы знаем, что в период с 01.01.2017 по 20.01.2017 сайт Google Merchandise Store посетили 429 пользователей. Они совершили 444 визита, 13043 просмотра страниц, оформили 455 заказов и принесли доход 64148,16 у.е.
Инструмент прост в использовании и не требует навыков Data Engineer. Достаточно владеть навыками Аналитика Данных, SQL.
Далее рассмотрим BigQuery ML – инструмент для создания моделей машинного обучения с использованием standard SQL.
BigQuery ML поддерживает следующие модели:
- Линейная Регрессия
- Бинарная Логистическая Регрессия
- Мультиклассовая Логистическая Регрессия
- Метод k-средних
- Boosted Tree
- Matrix Factorization
- Auto ML
- DNN
- Импорт моделей TensorFlow
Синтаксис запроса для создания модели выглядит следующим образом:
{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL}
model_name
[OPTIONS(model_option_list)]
[AS query_statement]
- model_name – имя вашей модели
- model_type может принимать значения — ‘LINEAR_REG’, ‘LOGISTIC_REG’, ‘KMEANS’, ‘BOOSTED_TREE_REGRESSOR’, ‘BOOSTED_TREE_CLASSIFIER’, ‘DNN_CLASSIFIER’, ‘DNN_REGRESSOR’
- model_options_list дополнительные параметры
- query_statement – запрос к таблице с исходными данными.
Полный список доступен здесь.
Рассмотрим пример с прогнозированием покупки на основе данных о поведении пользователей. В качестве модели будем использовать Логистическую Регрессию.
Для начала нужно создать и обучить модель:
CREATE MODEL `automated-rune-302513.bq_nta.test_model`
OPTIONS(model_type='logistic_reg') AS
SELECT
IF(totals.transactions IS NULL, 0, 1) AS label,
IFNULL(device.operatingSystem, "") AS os,
device.isMobile AS is_mobile,
IFNULL(geoNetwork.country, "") AS country,
IFNULL(totals.pageviews, 0) AS pageviews
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
_TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
В запросе SELECT есть столбец label – класс, который мы хотим предсказать.
После выполнения запроса модель доступна в нашем исходном датасете. Мы можем посмотреть дополнительные параметры модели (скорость обучения, длительность и так далее). Также можно посмотреть на тренировочную и тестовые выборки.
Когда наша модель обучена, мы можем c помощью процедуры ML.PREDICT сделать прогноз следующей покупки:
SELECT
*
FROM
ML.PREDICT(MODEL `automated-rune-302513.bq_nta.test_model`, (
SELECT
IFNULL(device.operatingSystem, "") AS os,
device.isMobile AS is_mobile,
IFNULL(totals.pageviews, 0) AS pageviews,
IFNULL(geoNetwork.country, "") AS country
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
_TABLE_SUFFIX BETWEEN '20170701' AND '20170730'))
ORDER BY predicted_label DESC
В итоге мы получим финальную таблицу с прогнозируемым значением выбранного признака:
Вот так, Google BigQuery позволяет Аналитику Данных сфокусироваться на обработке данных и сократить время на поиск решения. Предлагаю использовать данный инструмент в ситуациях, когда вы ограничены временными ресурсами на выполнение поставленной задачи и, если в вашей команде отсутствует Data Engineer.