Облачная платформа 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.