В своей книге (Data Science on the Google Cloud Platform) я рассмотрю проблему прогнозирования задержки полета и покажу, как ее решить, используя различные инструменты, включая Spark Mlib и TensorFlow. Теперь, когда было объявлено о BigQuery ML, я подумал, что покажу, как прогнозировать задержки рейсов с помощью BQ ML.
Не заблуждайтесь - вам все равно нужно собирать данные, исследовать их, очищать и обогащать. По сути, все, что я делаю в главах 1–9. В главе 10 я использовал TensorFlow. В этой статье я буду использовать BQML.
Создать модель регрессии
Вот запрос BigQuery для создания модели:
#standardsql CREATE OR REPLACE MODEL flights.arrdelay OPTIONS (model_type='linear_reg', input_label_cols=['arr_delay']) AS SELECT arr_delay, carrier, origin, dest, dep_delay, taxi_out, distance FROM `cloud-training-demos.flights.tzcorr` WHERE arr_delay IS NOT NULL
Обратите внимание, что:
- Он начинается с CREATE MODEL, при этом имя модели выглядит так же, как имя таблицы. Примечание. «Полеты» - это имя набора данных, в котором будет храниться полученная модель, поэтому перед выполнением запроса вам необходимо создать пустой набор данных.
- Параметры определяют алгоритм - в данном случае алгоритм линейной регрессии с меткой arr_delay.
- По сути, я использую переменные-предикторы и метки в SELECT
Примерно через 10 минут модель обучается, и результаты оценки заполняются для каждой итерации:
Потери здесь являются среднеквадратичной ошибкой, поэтому модель сходится на итерации №6 со среднеквадратичным значением около sqrt (97) = 10 минут.
Прогнозирование с использованием модели
Цель обучения модели - предсказывать с ее помощью. Вы можете делать прогнозы модели с помощью оператора SQL:
#standardsql SELECT * FROM ML.PREDICT(MODEL flights.arrdelay, ( SELECT carrier, origin, dest, dep_delay, taxi_out, distance, arr_delay AS actual_arr_delay FROM `cloud-training-demos.flights.tzcorr` WHERE arr_delay IS NOT NULL LIMIT 10))
Это приводит к:
Как видите, поскольку мы обучили модель предсказывать переменную с именем «arr_delay», ML.PREDICT создает столбец результатов с именем predicted_arr_delay. В данном случае я беру 10 строк из исходной таблицы и прогнозирую задержку прибытия для этих рейсов.
Создать модель классификации
В книге я на самом деле не пытаюсь предсказать задержку прибытия как таковую. Вместо этого я предсказываю вероятность того, что рейс задержится более чем на 15 минут. Это проблема классификации, и вы можете сделать это, немного изменив обучающий запрос:
#standardsql CREATE OR REPLACE MODEL flights.ontime OPTIONS (model_type='logistic_reg', input_label_cols=['on_time']) AS SELECT IF(arr_delay < 15, 1, 0) AS on_time, carrier, origin, dest, dep_delay, taxi_out, distance FROM `cloud-training-demos.flights.tzcorr` WHERE arr_delay IS NOT NULL
Вот результаты оценки:
и пример прогнозов:
Оценка модели
Можно оценить модель на независимом наборе данных. У меня нет под рукой, поэтому я просто покажу вам, как выполнить оценку на том же наборе данных, на котором была обучена модель:
#standardsql SELECT * FROM ML.EVALUATE(MODEL flights.ontime, ( SELECT IF(arr_delay < 15, 1, 0) AS on_time, carrier, origin, dest, dep_delay, taxi_out, distance FROM `cloud-training-demos.flights.tzcorr` WHERE arr_delay IS NOT NULL ))
Результат:
BQML действительно прост и действительно эффективен. Наслаждаться!