Облачная платформа Google
Как спрогнозировать продолжительность поездки с помощью BigQuery ML
Используйте GCP для реализации проектов регрессии машинного обучения
В этом руководстве будет рассмотрена лабораторная работа в Google Cloud Qwiklab: Создание моделей машинного обучения с помощью BigQuery ML: лаборатория испытаний.
Мы будем использовать реальный набор данных, опубликованный в Google Cloud Public Dataset: austin_bikeshare, чтобы помочь выбрать новые модели велосипедов для общедоступных систем проката велосипедов. Эта лаборатория направлена на прогнозирование средней продолжительности поездки для различных схем велосипеда. Две схемы представлены с использованием различных предположений о выбранных функциях. Вы сравните, какой из них лучше.
Шаг 1. Создайте набор данных для хранения моделей машинного обучения
После входа в Google Cloud Platform с использованием назначенных учетных данных откройте BigQuery и создайте набор данных в своем проекте.
Шаг 2. Создайте модель машинного обучения BigQuery для прогнозирования
Мы включим название начальной станции, час начала поездки, день недели поездки и адрес начальной станции в первую модель и будем использовать данные за 2018 год только для обучения первой модели.
Обучение Model1:
# Create a Linear regression model CREATE or REPLACE MODEL austin_bikeshare.bikeshare_model OPTIONS (model_type='linear_reg', labels=['duration_minutes']) AS # Data preprocessing and feature selection SELECT start_station_name, EXTRACT(HOUR FROM start_time) AS hourofstart, EXTRACT(DAYOFWEEK FROM start_time) AS day_of_week, address AS location, duration_minutes FROM `bigquery-public-data.austin_bikeshare.bikeshare_trips` AS trips # Join to get the address of the start station JOIN `bigquery-public-data.austin_bikeshare.bikeshare_stations` AS stations ON trips.start_station_name=stations.name WHERE EXTRACT(YEAR FROM start_time) = 2018 AND duration_minutes > 0
Шаг 3. Создайте вторую модель машинного обучения
Функции второй модели относительно проще. Мы включим название начальной станции, час начала поездки и тип подписчика велопроката во вторую модель и будем использовать данные за 2018 год только для обучения этой модели.
Тренировка модели 2:
# Create a Linear regression model CREATE or REPLACE MODEL austin_bikeshare.bikeshare_model2 OPTIONS (model_type='linear_reg', labels=['duration_minutes']) AS # Data preprocessing and feature selection SELECT start_station_name, subscriber_type, EXTRACT(HOUR FROM start_time) AS hourofstart, duration_minutes FROM `bigquery-public-data.austin_bikeshare.bikeshare_trips` WHERE EXTRACT(YEAR FROM start_time) = 2018 AND duration_minutes > 0
Шаг 4. Оцените две модели машинного обучения
Для оценки используются как средняя абсолютная ошибка, так и среднеквадратическая ошибка.
Оценка Model1:
# Choose evaluation metrics SELECT SQRT(mean_squared_error) AS rmse, mean_absolute_error AS mae FROM ML.EVALUATE(MODEL austin_bikeshare.bikeshare_model, ( # Prepare the testing dataset with the same features as the training set using for 2019 SELECT start_station_name, EXTRACT(HOUR FROM start_time) AS hourofstart, EXTRACT(DAYOFWEEK FROM start_time) AS day_of_week, address AS location, duration_minutes FROM `bigquery-public-data.austin_bikeshare.bikeshare_trips` AS trips JOIN `bigquery-public-data.austin_bikeshare.bikeshare_stations` AS stations ON trips.start_station_name=stations.name WHERE EXTRACT(YEAR FROM start_time) = 2019))
Оценка Model2:
# Choose evaluation metrics SELECT SQRT(mean_squared_error) AS rmse, mean_absolute_error AS mae FROM ML.EVALUATE(MODEL austin_bikeshare.bikeshare_model2, ( # Prepare the testing dataset with the same features as the training set using for 2019 SELECT start_station_name, subscriber_type, EXTRACT(HOUR FROM start_time) AS hourofstart, duration_minutes # No need to join anther table since all the features needed are in one table FROM `bigquery-public-data.austin_bikeshare.bikeshare_trips` WHERE EXTRACT(YEAR FROM start_time) = 2019))
Из сравнения видно, что первая модель более точна.
Шаг 5. Используйте вторую модель, чтобы спрогнозировать среднюю продолжительность поездки.
Мы собираемся использовать вторую модель для прогнозирования средней продолжительности поездки с самой загруженной станции проката велосипедов в 2019 году, где тип подписчика - Single Trip
.
#Create a table containing predicted trip duration for single trip subscribers at the busiet bike sharing station in 2019 WITH predicted AS (SELECT * FROM ml.PREDICT(MODEL `austin_bikeshare.bikeshare_model2`, ( # Find the busiest bike sharing station in 2019 WITH params AS ( SELECT COUNT(*) AS counts, start_station_name AS start, FROM `bigquery-public-data.austin_bikeshare.bikeshare_trips` WHERE EXTRACT(YEAR FROM start_time) = 2019 GROUP BY start_station_name ORDER BY counts DESC LIMIT 1 ) # Prepare the features for the model SELECT start_station_name, subscriber_type, EXTRACT(HOUR FROM start_time) AS hourofstart, duration_minutes FROM `bigquery-public-data.austin_bikeshare.bikeshare_trips`, params WHERE start_station_name = params.start AND subscriber_type = 'Single Trip' ))) # Get the average of the predicted duration. SELECT AVG(predicted_duration_minutes) AS predicted_average_trip_duration, start_station_name, subscriber_type FROM predicted GROUP BY start_station_name, subscriber_type
Если приведенный выше сценарий не прошел систему подсчета очков, вы можете разделить его на два: один для поиска самой загруженной станции велосипедного проката, другой для прогнозирования с использованием названия станции следующим образом:
# Find the busiest station SELECT COUNT(*) AS counts, start_station_name, FROM `bigquery-public-data.austin_bikeshare.bikeshare_trips` WHERE EXTRACT(YEAR FROM start_time) = 2019 GROUP BY start_station_name ORDER BY counts DESC
# Predict SELECT AVG(predicted_duration_minutes) AS predicted_average_trip_duration FROM ML.predict(MODEL `austin_bikeshare.bikeshare_model2`, ( SELECT start_station_name, EXTRACT(HOUR FROM start_time) AS hourofstart, subscriber_type, duration_minutes FROM `bigquery-public-data.austin_bikeshare.bikeshare_trips` WHERE EXTRACT(YEAR FROM start_time) = 2019 AND subscriber_type = 'Single Trip' AND start_station_name = '21st & Speedway @PCL'))
Поздравляю!
Вы прошли испытательную лабораторию и получили значок Создание моделей машинного обучения с помощью BigQuery ML от Google Cloud, если прошли предыдущие лабораторные работы с пошаговыми инструкциями.
Надеюсь, вам понравится это путешествие. Добро пожаловать, чтобы оставить комментарий и связаться со мной в Linkedin.