С помощью хорошо знакомого синтаксиса SQL на удивление быстро и просто предсказать будущее.

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

Научиться предсказывать дождь на следующий день - это простой и практичный способ изучить машинное обучение с помощью Google BigQuery. Итак, давайте узнаем, как мы можем этого добиться.

Из этой статьи вы узнаете:

  1. Почему BigQuery ML для машинного обучения?
  2. Как получить и разделить набор данных на обучающий набор и тестовый набор?
  3. Как обучить и оценить классификационную модель?
  4. Как предсказать дождь на следующий день?

Почему BigQuery ML для машинного обучения?

Представьте, что вы аналитик данных, который живет и дышит SQL, вы понимаете все тонкости того, какие данные хранятся в хранилище данных BigQuery. Возможно, вы недавно получили некоторые фундаментальные знания о машинном обучении, но ни в коем случае не являетесь заядлым экспертом в области машинного обучения, который может писать коды Python с закрытыми глазами.

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

Как вы должны добиться этого в короткие сроки, если вы мало знаете о сложных фреймворках машинного обучения, таких как TensorFlow или Keras? Как вы можете написать полное решение машинного обучения, не сходя с ума от программирования на Python или Java?

И именно здесь BigQuery ML действительно может проявить себя. Короче говоря, он позволяет создавать и обучать модели машинного обучения в BigQuery, используя стандартные запросы SQL. Такой подход предлагает 3 ключевых преимущества.

  • Вам не нужно тратить много времени, пытаясь понять, как экспортировать данные из хранилища данных BigQuery с помощью множества новых инструментов.
  • Вам не нужно искать кучу разрешений, если есть юридические ограничения или требования соответствия, которые строго регулируют, как должен происходить экспорт данных и их перемещение для анализа и машинного обучения (но, конечно, соблюдение прав доступа здесь по-прежнему применяются политики контроля и здравый смысл.)
  • Вам не нужно сводить с ума, чтобы создать решение машинного обучения с использованием Python / Java или присоединяться к длинному списку ожидания, чтобы иметь возможность побеспокоить кого-нибудь (или даже целую команду), чтобы помочь вам.

Так что же это значит для бизнеса? Это означает более простой и быстрый способ использовать машинное обучение для прогнозирования того, что может произойти в будущем, и того, как бизнес должен реагировать, чтобы эффективно использовать возможности или снижать риски.

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

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

Прежде, чем мы начнем

Наша цель и план игры

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

У нас есть набор данных Kaggle, содержащий 10-летние наблюдения за погодой в выбранных местах в Австралии в период с 2007 по 2017 год. Ниже приведен наш план игры о том, как преобразовать набор данных в модель классификации, которую мы можем использовать для прогнозирования дождя на следующий день. в 2021 году.

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

Начальная настройка

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

  1. Создайте проект на Google Cloud Platform
  2. Создайте набор данных в BigQuery
  3. Загрузите 2 нижеуказанных файла CSV с моего GitHub и загрузите их в Google Cloud Storage.
  • weatherAUS.csv: Можно скачать с Kaggle. Мы используем его для обучения и тестирования модели машинного обучения.
  • apr10_predict.csv: Можно загрузить с моего GitHub и содержит наблюдения за погодой на 10 апреля 2021 года. Мы используем его, чтобы предсказать, будет ли дождь 11 апреля.

Вставить и разделить набор данных

Загрузить набор данных

Шаг 1. Загрузите 2 файла CSV из облачного хранилища в BigQuery

Поскольку в наборе данных weatherAUS есть нулевые значения, записанные как строка «NA», я буду использовать команду bq load, чтобы напрямую импортировать строки «NA» как пустые с параметром null_marker. Вот как это сделать.

На консоли GCP нажмите кнопку «Активировать Cloud Shell» вверху страницы, чтобы подготовить компьютер с Google Cloud Shell. Дайте ему минуту или около того, чтобы он загрузился.

Чтобы загрузить набор данных weatherAUS, введите следующую команду , но не забудьте обновить URI облачного хранилища (который начинается с gs: // и заканчивается на .csv), поскольку ваш CSV-файл будет находиться в другом месте .

bq load --autodetect --null_marker="NA" --source_format=CSV rainprediction.weatherAUS gs://australia_rain_input/weatherAUS.csv

Когда вы увидите всплывающее окно с запросом на авторизацию Cloud Shell, нажмите Авторизовать.

Подождите, пока не увидите Текущее состояние: ГОТОВО, затем введите следующую команду, чтобы загрузить набор данных apr10_predict. Но не забудьте также обновить URI облачного хранилища.

bq load --autodetect --source_format=CSV rainprediction.apr10_predict gs://australia_rain_input/apr10_predict.csv

Увидев Текущий статус: ГОТОВО для этого задания загрузки, обновите страницу в браузере.

Еще раз проверьте, видите ли вы две новые таблицы с названиями weatherAUS и apr10_predict в недавно созданном наборе данных в BigQuery.

Шаг 2. Просмотрите данные, загруженные в BigQuery.

Быстрый предварительный просмотр таблицы weatherAUS показывает, что имеется 145 460 строк данных. Ярлык (то есть то, что мы пытаемся предсказать) - это RainTomorrow, а все остальные столбцы являются предикторами (то есть какие переменные мы можем использовать, чтобы предсказать, будет ли дождь на следующий день).

Не забудьте просмотреть схему, чтобы проверить тип данных. В BigQuery ML всегда стоит проверять правильность типа данных каждого столбца.

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

В нашем случае для числовых значений, таких как MinTemp, MaxTemp, Rainfall, Sunshine и т. Д., Тип STRING кажется немного странным. Просто имейте это в виду, поскольку мы исправим это в следующем разделе.

Разделите набор данных на обучающий и тестовый наборы

Затем мы разделим наш набор данных на обучающий набор и тестовый набор.

  • Обучающий набор: для обучения модели классификации, которая сопоставляет данные погодных наблюдений с установленной меткой (например, RainTomorrow).
  • Набор тестов: строго для оценки того, может ли модель машинного обучения делать прогнозы на основе свежих данных, которые ранее не рассматривались моделью.

Шаг 1. Создайте столбец поддельного уникального идентификатора и исправьте типы данных для числовых значений

Шаг 2. Разделите набор данных на основе столбца фиктивного уникального идентификатора (UUID)

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

Обучите и оцените модель классификации

Обучите модель машинного обучения с помощью CREATE MODEL

Обучите простую модель логистической регрессии

А теперь самое интересное! Давайте создадим модель логистической регрессии, которая представляет собой простейший тип модели для задач классификации. Барабан, всем!

После выполнения вышеуказанного оператора в BigQuery мы получим нашу самую первую модель классификации, которая сопоставляет наблюдения за погодой либо с Да, либо с Нет для RainTomorrow. Та-да!

Настройте модель логистической регрессии

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

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

Но что, если мы хотим настроить определенные параметры в соответствии с нашими потребностями? Давайте поэкспериментируем с настройкой нашей модели логистической регрессии, чтобы отразить 3 изменения.

  1. Произвольно выберите 20% обучающих данных, которые будут использоваться для оценки (в настоящее время BigQuery ML использует только 10 000 строк для оценки, поскольку наш набор данных содержит более 50 000 строк).
  2. Исправьте несбалансированный набор тренировочных данных (по умолчанию балансировка весов не предусмотрена).
  3. Примените регуляризацию L2, чтобы снизить сложность, тем самым управляя переобучением (параметр по умолчанию - без регуляризации L2).

Ой, подожди! Означает ли это, что мы можем настраивать все и вся? Неа. По крайней мере, пока, но не стесняйтесь заглядывать в документацию BigQuery, чтобы узнать, что нельзя настроить, и поэкспериментировать с тем, что можно.

Оценивайте модели классификации с помощью ML.EVALUATE

Пришло время использовать тестовый набор данных для проверки производительности нашей самой первой и простой модели логистической регрессии. Давайте посмотрим, насколько хорошо такая простая модель (без какой-либо тонкой настройки) может предсказать RainTomorrow с использованием свежих данных, которых раньше не было.

Запрос не может быть проще этого.

Поскольку ROC_AUC тестового набора (0,878) почти такой же, как ROC_AUC обучающего набора (0,880), наша модель не является переобученной. Точность 0,85 тоже выглядит достойно. Конечно, можно было бы сделать больше функций с помощью TRANSFORM clause, чтобы улучшить общий F1_score, но пока что давайте придерживаться того, что у нас есть.

Прогнозируйте дождь на следующий день с помощью модели классификации

В таблице apr10_predict я собрал ежедневные наблюдения за погодой в нескольких местах в Австралии 10 апреля 2021 года. Затем мы будем использовать нашу модель логистической регрессии, чтобы предсказать, пойдет ли дождь 11 апреля 2021 года.

Позвольте мне объяснить, что происходит на скриншоте выше.

  1. predicted_RainTomorrow показывает вероятность дождя 11 апреля, исходя из выбранного мной порогового значения 0,6. Пока вероятность «дождя» превышает 0,6, модель предсказывает «RainTomorrow» = Да на следующий день.
  2. Следующие два столбца predicted_RainTomorrow_probs.label и predicted_RainTomorrow_probs.prob показывают, как BigQuery пришел к предсказанию. В первой строке модель рассчитала, что вероятность «дождя» для Сиднея составляет 0,75, а вероятность «дождя» - только 0,25. Поскольку вероятность «дождя» ниже порогового значения 0,6, прогноз для дождя на следующий день будет «Нет».
  3. Последний столбец красного цвета - это то, что я добавил на снимок экрана, чтобы вы могли легко сравнить прогноз и фактический дождь 11 апреля. Это НЕ то, что модель даст вам при выполнении запроса.

Если вам все еще интересно, что означает порог в моделях классификации, ознакомьтесь с этим простым объяснением. Но что касается предсказаний, мы ошиблись только в отношении Дарвина. Я бы сказал, что это неплохо, учитывая, что мы тратим очень мало времени на написание простых запросов в Google BigQuery.

Когда время играет важную роль и ваши данные легко доступны в BigQuery, вот и все - BigQuery ML - это то, что вам нужно!

Заключение

Итак, у вас есть краткий обзор того, как обучать и оценивать модель классификации, а также предсказывать дождь на следующий день с помощью BigQuery ML! Может ли BigQuery ML заменить другие стандартные в отрасли инфраструктуры машинного обучения, такие как Tensorflow, Keras и т. Д.? Вероятно, не потому, что обеспечение работы машинного обучения в реальной жизни - это серия компромиссов между конкурирующими целями, такими как скорость, простота и точность.

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

Однако, как человек, который ценит возможность быстро проверить новую идею или создать достаточно хорошую базовую модель машинного обучения, я действительно вижу ценность BigQuery ML. Мне не нужно суетиться, пытаясь экспортировать данные из хранилища данных, поскольку я обучаю и развертываю модель машинного обучения прямо внутри BigQuery, самого хранилища данных. Кроме того, нет необходимости создавать полноценный конвейер машинного обучения с использованием Python или Java, потому что я могу использовать SQL для создания модели с несколькими строками кода. Что не любить?

Спасибо за чтение. Есть отзывы о том, что мне делать лучше, или просто хочу поболтать? Дайте мне знать в комментариях или найдите меня в LinkedIn. Всем удачной недели!

Первоначально опубликовано на http://thedigitalskye.com 12 апреля 2021 г.