С помощью Google BigQuery ML теперь вы можете прогнозировать свои расходы в Google Cloud всего за несколько минут, не выходя из пользовательского интерфейса консоли BigQuery.

Вступление

Линейная регрессия, хотя и очень проста, может использоваться для эффективного создания точных прогнозов для различных реальных проблем. Благодаря своей простоте обучение линейной регрессии легко настраивается и выигрывает от быстрой сходимости.

В этом посте я объясню, как анализировать данные биллинга Google Cloud и построить простую модель прогнозирования для оценки ожидаемых общих ежемесячных расходов. Чтобы было интереснее, я буду использовать только Google BigQuery, тем самым сохраняя все платежные данные в экосистеме хранилища данных.

В этом упражнении я собираюсь использовать экспорт биллинга Google. Экспорт биллинга в BigQuery позволяет клиентам автоматически экспортировать данные о ежедневном использовании и расходах в течение дня в указанный вами набор данных BigQuery. Вы можете прочитать об экспорте биллинга Google здесь.

Примеры данных и кода доступны здесь: https://github.com/doitintl/BigQueryML-Examples

Необработанные данные

В таблице ниже перечислены счета за различные услуги, которые используются двумя имеющимися у нас учетными записями Google Cloud.

Желаемая модель

Цель состоит в том, чтобы оценить общий счет за текущий месяц на основе всех счетов, полученных до данного дня.

Модель позволит клиенту не только оценить общие расходы, но также будет обнаруживать аномалии и создавать предупреждения о перерасходах.

Предположения

Модель предполагает, что ежемесячный счет линейно зависит от 3 переменных:

Первая переменная представляет собой текущую тенденцию суточного потребления. Две другие переменные - это количество дней до конца месяца и текущий баланс. Вместе модель может использовать эти переменные для оценки оставшихся ежемесячных расходов.

Подготовка данных

Агрегирование данных с ежедневным разрешением

Поскольку для модели требуются данные с ежедневным разрешением, мы будем использовать BigQuery для агрегирования данных по дням.

Полученная схема выглядит так:

account_name - идентификатор аккаунта
день - дни, оставшиеся до конца месяца
month - месяц выставления счетов
год - расчетный год
daily_cost - общая стоимость всех услуг в течение расчетного дня
ежемесячная_ценка - метка, которая представляет собой сумму всех счетов, выставленных в текущем месяце, включая будущие счета.

Теперь, когда данные агрегированы с ежедневным разрешением, я сохраняю их как новую таблицу и использую для создания набора данных машинного обучения.

Расчет агрегирования окон

Следующий шаг - вычислить, сколько было выставлено счетов для каждой учетной записи с начала месяца до текущего дня. Для этого мы будем использовать агрегатную оконную функцию. Эта функция также позволит нам рассчитать средние дневные расходы за месяц до текущего дня.

Синтаксис агрегированной оконной функции можно найти здесь: [1]

analytic_function_name ( [ argument_list ] )
  OVER (
    [ PARTITION BY partition_expression_list ]
    [ ORDER BY expression [{ ASC | DESC }] [, ...] ]
    [ window_frame_clause ]
  )

Я использую функцию в нашей таблице billing_daily_monthly следующим образом:

График данных показывает, что ежемесячный счет складывается несколько линейно:

Приведенные выше результаты вселяют в нас уверенность в том, что линейная модель является подходящим выбором для решения проблемы расходов. Кроме того, градиент имеет небольшую вариацию между месяцами, что говорит о том, что выбранные характеристики являются достаточной статистикой по отношению к независимой переменной.

Очевидно, что большее количество функций и более сложные модели, вероятно, дадут более точные прогнозы - их можно построить с помощью других инструментов, таких как Google Cloud ML. Но пока похоже, что мы закончили подготовку данных.

(У-У-У!)

Подбор модели линейной регрессии с помощью BigQuery ML

Когда данные будут готовы, я могу использовать новый (по состоянию на август 2018 г.) инструмент BigQuery ML, чтобы подогнать к данным модель линейной регрессии.

Подобрать модель к нашему набору данных безумно просто!

Прогнозы и оценка модели

После сохранения модель можно использовать для прогнозов. Для этого я использую следующий запрос, который оценивает окончательные ежемесячные расходы и вычисляет относительную абсолютную ошибку прогнозов за день:

Результаты, показанные в следующей таблице, теперь можно сохранить и использовать для других компонентов системы, включая приложения для мониторинга и оповещения. Средняя относительная абсолютная ошибка модели составляет примерно 3,0%, что неплохо. (Обратите внимание, данные были созданы специально для этой демонстрации. С реальными данными я получил ошибку около 2,0%)

Хотите больше историй? Загляните в наш блог на Medium или подпишитесь на Gad в Twitter.

Благодарности:
Вадим Соловей - редактирование
amiel m - технический обзор

Ключевые слова: BigQueryML, учебник по BigQuery ML, пример BigQuery ML.