arrow_back

BigQuery ML 예측 모델을 사용하여 택시 요금 예측하기

가입 로그인

BigQuery ML 예측 모델을 사용하여 택시 요금 예측하기

1시간 크레딧 1개

GSP021

Google Cloud 사용자 주도형 실습

개요

BigQuery는 Google의 완전 관리형, NoOps(무인 운영), 저비용 분석 데이터베이스입니다. BigQuery를 사용하면 관리할 인프라나 데이터베이스 관리자가 없어도 테라바이트 단위의 데이터를 쿼리할 수 있습니다. BigQuery는 SQL을 사용하므로 종량제 모델의 장점을 활용할 수 있습니다. BigQuery는 데이터를 분석하여 의미 있고 유용한 정보를 찾는 데 집중할 수 있게 해줍니다.

BigQuery 머신러닝 BQML은 데이터 분석가가 최소한의 코딩으로 기계 학습 모델을 생성, 교육, 평가 및 예측할 수 있는 곳입니다.

이 실습에서는 BigQuery 공개 데이터 세트에서 사용할 수 있는 수백만 개의 뉴욕시 노란색 택시 여행을 탐색합니다. 그런 다음 BigQuery 내에서 머신러닝 모델을 만들어 모델 입력에 따라 택시 요금을 예측합니다. 마지막으로 모델의 성능을 평가하고 예측을 수행합니다.

목표

이 실습에서는 다음 작업을 수행하는 방법에 대해 알아봅니다.

  • BigQuery를 사용하여 공개 데이터세트 찾기

  • 공용 택시 데이터세트 쿼리 및 탐색

  • 일괄 예측에 사용할 학습 및 평가 데이터세트 만들기

  • BQML에서 예측(선형 회귀) 모델 만들기

  • 머신러닝 모델의 성능 평가

준비물

  • Google Cloud Platform 프로젝트

  • Google Chrome, Mozilla Firefox 등의 브라우저

환경 설정

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머에는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지 표시됩니다.

Qwiklabs 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 직접 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

필요한 사항

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저(Chrome 브라우저 권장)
  • 실습을 끝까지 진행할 시간

참고: 이미 개인용 Google Cloud 계정이나 프로젝트가 있어도 이 실습에서는 사용하지 마세요.

참고: Chrome OS 기기를 사용하는 경우 시크릿 창을 열어 이 실습을 실행하세요.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 팝업이 열립니다. 왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 패널이 있습니다.

    • Google 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google 콘솔 열기를 클릭합니다. 실습에서 리소스가 가동된 후 로그인 페이지가 표시된 다른 탭이 열립니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 실습 세부정보 패널에서 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다. 다음을 클릭합니다.

  4. 실습 세부정보 패널에서 비밀번호를 복사하여 시작 대화상자에 붙여넣습니다. 다음을 클릭합니다.

    중요: 왼쪽 패널에 표시된 사용자 인증 정보를 사용해야 합니다. Google Cloud Skills Boost 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  5. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의합니다.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
    • 무료 평가판을 신청하지 않습니다.

잠시 후 Cloud 콘솔이 이 탭에서 열립니다.

참고: 왼쪽 상단에 있는 탐색 메뉴를 클릭하면 Google Cloud 제품 및 서비스 목록이 있는 메뉴를 볼 수 있습니다. 탐색 메뉴 아이콘

BigQuery 콘솔 열기

  1. Google Cloud 콘솔에서 탐색 메뉴 > BigQuery를 선택합니다.

Cloud 콘솔의 BigQuery에 오신 것을 환영합니다라는 메시지 상자가 열립니다. 이 메시지 상자에서는 빠른 시작 가이드 및 출시 노트로 연결되는 링크가 제공됩니다.

  1. 완료를 클릭합니다.

BigQuery 콘솔이 열립니다.

뉴욕 택시 데이터 살펴보기

질문: 2015년 옐로캡 택시의 월별 운행 횟수는 모두 몇 번일까요?

쿼리 작성 버튼을 클릭하고 다음을 새 쿼리 필드에 추가합니다.

#standardSQL
SELECT
  TIMESTAMP_TRUNC(pickup_datetime,
    MONTH) month,
  COUNT(*) trips
FROM
  `bigquery-public-data.new_york.tlc_yellow_trips_2015`
GROUP BY
  1
ORDER BY
  1

그런 다음 쿼리 실행을 클릭합니다.

그러면 다음과 같은 결과가 표시됩니다.

BQML_taxi_mo_trips

완료된 작업 테스트하기

진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 작업을 올바르게 완료하면 평가 점수가 부여됩니다.

2015년의 옐로캡 운행 횟수를 월별로 계산하기

질문: 2015년 옐로캡 택시의 평균 속도는 얼마인가요?

이전 쿼리를 다음으로 대체한 다음 쿼리를 실행합니다.

#standardSQL
SELECT
  EXTRACT(HOUR
  FROM
    pickup_datetime) hour,
  ROUND(AVG(trip_distance / TIMESTAMP_DIFF(dropoff_datetime,
        pickup_datetime,
        SECOND))*3600, 1) speed
FROM
  `bigquery-public-data.new_york.tlc_yellow_trips_2015`
WHERE
  trip_distance > 0
  AND fare_amount/trip_distance BETWEEN 2
  AND 10
  AND dropoff_datetime > pickup_datetime
GROUP BY
  1
ORDER BY
  1

그러면 다음과 같은 결과가 표시됩니다.

BQML_taxi_hr_speed

낮 동안 평균 속도는 약 11~12MPH이지만, 오전 5시 평균 속도는 거의 두 배인 21MPH를 기록했습니다. 직관적으로 바로 이해하실 수 있겠지만, 이는 새벽 5시에 도로의 교통량이 적을 가능성이 높기 때문입니다.

완료된 작업 테스트하기

진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 작업을 올바르게 완료하면 평가 점수가 부여됩니다.

2015년 옐로캡 택시 평균 운행 속도 계산하기

목표 파악하기

이제 BigQuery에서 머신러닝 모델을 만들어 주어진 과거 운행 데이터세트와 운행 데이터를 바탕으로 뉴욕 옐로캡 택시 운행 요금을 예측하게 됩니다. 운행 전에 요금을 예측하는 작업은 승객과 택시 회사 모두 운행을 계획하는 데 매우 유용합니다.

특성 선택 및 학습 데이터세트 만들기

뉴욕 옐로캡 데이터세트는 시에서 제공하는 공개 데이터세트이며, 사용자가 탐색할 수 있도록 BigQuery에 로드되었습니다. 여기에서 전체 필드 목록을 둘러본 다음 데이터세트를 미리 보고, 머신러닝 모델이 과거 택시 운행 데이터와 운행 요금 간의 관계를 이해하는 데 도움이 되는 유용한 특성을 찾습니다.

팀에서 아래 필드가 요금 예측 모델에 적합한 입력인지에 대한 테스트 여부를 결정합니다.

  • 통행 요금
  • 요금
  • 시간
  • 승차 주소
  • 하차 주소
  • 승객 수

다음으로 쿼리를 대체합니다.

#standardSQL
WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    pickup_longitude AS pickuplon,
    pickup_latitude AS pickuplat,
    dropoff_longitude AS dropofflon,
    dropoff_latitude AS dropofflat,
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
  WHERE
    trip_distance > 0 AND fare_amount > 0
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.TRAIN
  )
  SELECT *
  FROM taxitrips

쿼리에 대해 몇 가지 참고할 사항이 있습니다.

  1. 쿼리의 주요 부분은 쿼리 하단(SELECT * from taxitrips)에 있습니다.
  2. taxitrips는 학습 기능과 라벨이 포함된 SELECT를 사용하여 뉴욕 데이터세트의 대량 추출을 수행합니다.
  3. WHERE는 학습시키고 싶지 않은 데이터를 제거합니다.
  4. 또한 WHERE에는 데이터의 1/1000만 가져오기 위한 샘플링 절이 포함되어 있습니다.
  5. BigQuery에서는 독립적인 EVAL 세트를 빠르게 만들 수 있도록 TRAIN이라는 변수를 정의합니다.

그런 다음 쿼리를 실행합니다.

샘플 결과는 다음과 같습니다.

3784193f53252195

여기에서 라벨은 무엇인가요(정답)?

total_fare가 우리가 예측하게 될 라벨입니다. tolls_amountfare_amount를 바탕으로 이 필드가 생성됩니다. 모델의 일부인 고객 팁은 임의 항목이므로 무시할 수 있습니다.

완료된 작업 테스트하기

진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 작업을 올바르게 완료하면 평가 점수가 부여됩니다.

필드가 요금 예측 모델에 적합한 입력인지 테스트하기

모델을 저장할 BigQuery 데이터세트 만들기

다음으로 ML 모델을 저장할 새 BigQuery 데이터세트를 만듭니다.

  1. 리소스 패널에서 프로젝트 이름을 선택합니다.

  2. 데이터세트 만들기를 선택합니다.

  3. 데이터세트 만들기 대화상자에서 다음을 수행합니다.

  • 데이터세트 IDtaxi를 입력합니다.

  • 다른 값은 기본값을 유지합니다.

  1. 데이터세트 만들기를 클릭합니다.

완료된 작업 테스트하기

진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 작업을 올바르게 완료하면 평가 점수가 부여됩니다.

모델을 저장할 BigQuery 데이터세트 만들기

BQML 모델 유형 선택 및 옵션 지정하기

최초 특성을 선택했으므로 이제 BigQuery에서 첫 번째 ML 모델을 만들 수 있습니다.

다음과 같은 몇 가지 모델 유형 중에서 선택할 수 있습니다.

모델

모델 유형

라벨 데이터 유형

예측

linear_reg

숫자 값(보통 정수 또는 부동 소수점)

과거 매출 데이터를 바탕으로 내년 매출 수치를 예측합니다.

이진 분류

logistic_reg

이진 분류를 위한 0 또는 1

컨텍스트를 바탕으로 이메일을 일반 또는 스팸으로 분류합니다.

다중 클래스 분류

logistic_reg

입력이 '낮은 값', '중간 값', '높은 값' 중 무엇인지와 같이, 가능한 여러 값을 예측하는 데 이러한 모델을 사용할 수 있습니다. 라벨은 최대 50개의 고유값을 가질 수 있습니다.

이메일을 스팸, 일반 우선순위 또는 중요도 높음으로 분류합니다.

다음 쿼리를 입력하여 모델을 만들고 모델 옵션을 지정합니다. 이때 -- paste the previous training dataset query here 부분을 이전에 만든 학습 데이터세트 쿼리로 대체합니다(#standardSQL 행 생략).

#standardSQL
CREATE or REPLACE MODEL taxi.taxifare_model
OPTIONS
  (model_type='linear_reg', labels=['total_fare']) AS
-- paste the previous training dataset query here

그런 다음 쿼리 실행을 클릭하여 모델을 학습시킵니다.

모델이 학습을 마칠 때까지 기다립니다(5~10분).

모델이 학습된 후 "이 명령문은 qwiklabs-gcp-03-xxxxxxxx:taxi.taxifare_model이라는 새 모델을 생성합니다."라는 메시지가 표시됩니다. 이는 모델이 성공적으로 학습되었음을 나타냅니다.

택시 데이터세트 내에 taxifare_model이 표시되어 있는지 확인합니다.

이제 입력되지 않은 새 평가 데이터를 기반으로 모델 성능을 평가하게 됩니다.

완료된 작업 테스트하기

진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 작업을 올바르게 완료하면 평가 점수가 부여됩니다.

택시 요금 모델 만들기

분류 모델 성능 평가하기

성능 기준 선택하기

선형 회귀 모델의 경우 RMSE(평균 제곱근 오차)와 같은 손실 측정항목을 사용하는 것이 좋으며, RMSE가 가장 낮아질 때까지 계속해서 모델을 학습시키고 개선해야 합니다.

BQML에서 mean_squared_error는 학습시킨 ML 모델을 평가할 때 쿼리 가능한 필드입니다. SQRT()를 추가하여 RMSE를 가져옵니다.

이제 학습이 완료되었으므로, ML.EVALUATE를 사용하여 이 쿼리에서 모델 성능이 어떻게 나타나는지 평가할 수 있습니다.

#standardSQL
SELECT
  SQRT(mean_squared_error) AS rmse
FROM
  ML.EVALUATE(MODEL taxi.taxifare_model,
  (
  WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    pickup_longitude AS pickuplon,
    pickup_latitude AS pickuplat,
    dropoff_longitude AS dropofflon,
    dropoff_latitude AS dropofflat,
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
  WHERE
    trip_distance > 0 AND fare_amount > 0
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.EVAL
  )
  SELECT *
  FROM taxitrips
  ))

이제 params.EVAL 필터를 사용하여 다양한 택시 운행 세트를 기반으로 모델을 평가합니다.

모델이 실행된 후 모델 결과를 검토합니다(모델 RMSE 값은 약간 다를 수 있음).

RMSE

1

9.477056435999074

모델을 평가하면 $9.47의 RMSE가 반환됩니다. 모델을 활용하는 데 이러한 손실 측정항목이 적절한지 파악하는 것은 전적으로 모델 학습이 시작되기 전에 설정되는 벤치마크 기준에 달려 있습니다. 벤치마킹에서 허용 가능한 모델 성능 및 정확도의 최소 수준을 정합니다.

완료된 작업 테스트하기

진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 작업을 올바르게 완료하면 평가 점수가 부여됩니다.

분류 모델 성능 평가하기

학습 손실과 평가 손실 비교하기

데이터에 대한 모델의 과적합 여부를 확인하는 것이 좋습니다. 모델에 과적합이 발생하면 입력되지 않은 새 데이터에 대한 성능이 저하됩니다. ML.TRAINING_INFO를 사용하여 학습 손실을 평가 손실과 비교할 수 있습니다.

SELECT * FROM ML.TRAINING_INFO(model `taxi.taxifare_model`);

이렇게 하면 모델 학습의 각 반복 실행에서 얻은 모든 정보가 선택됩니다. 여기에는 학습 반복 횟수, 학습 손실 및 평가 손실이 포함됩니다. 학습 손실과 평가 손실을 비교하기 위해 손실 곡선의 차이를 시각적으로 살펴보겠습니다. explore-in-data-studio을(를) 클릭합니다. 그러면 쿼리의 데이터가 입력 소스로 연결된 데이터 스튜디오가 열립니다.

데이터 스튜디오에서 콤보 차트 아이콘을 클릭합니다.

data-studio-charts

측정기준에서 반복 위로 드래그합니다. 측정항목에서 losseval_loss 위로 드래그합니다. 그러면 막대 그래프 위에 선 차트가 겹쳐진 차트가 표시됩니다.

BQML 손실

학습 손실이 평가 손실과 거의 동일하면 모델에 과적합이 발생하지 않은 것이므로 좋은 상태인 것입니다. 이제 예측으로 넘어가 보겠습니다.

택시 요금 예측하기

이제 새 모델을 사용하여 예측을 수행하기 위한 쿼리를 작성하게 됩니다.

#standardSQL
SELECT
*
FROM
  ml.PREDICT(MODEL `taxi.taxifare_model`,
   (
 WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    pickup_longitude AS pickuplon,
    pickup_latitude AS pickuplat,
    dropoff_longitude AS dropofflon,
    dropoff_latitude AS dropofflat,
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
  WHERE
    trip_distance > 0 AND fare_amount > 0
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.EVAL
  )
  SELECT *
  FROM taxitrips
));

그러면 택시 요금에 대한 모델의 예측과 함께 실제 요금, 운행과 관련된 기타 특성이 표시됩니다.

완료된 작업 테스트하기

진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 작업을 올바르게 완료하면 평가 점수가 부여됩니다.

택시 요금 예측하기

아래와 비슷한 결과가 나와야 합니다.

taxi-predict

추가 정보

팁: 기존 모델에 새 데이터를 다시 학습시켜 학습 시간을 단축하고 싶은 경우에는 모델 옵션에 warm_start = true를 추가하세요. 특성 열은 변경할 수 없다는 점에 유의하세요. 특성 열을 변경하려면 새 모델이 필요합니다.

살펴볼 다른 데이터세트

시카고 택시 운행 요금 예측과 같은 다른 데이터세트에 대한 모델링을 살펴보고 싶은 경우, 아래 링크를 사용하여 bigquery-public-data 프로젝트를 가져올 수 있습니다.

배운 내용 테스트하기

아래에는 이 실습에서 배운 내용을 복습하기 위한 객관식 테스트가 나와 있습니다. 최선을 다해 풀어보세요.

축하합니다

BigQuery에서 뉴욕 옐로캡 택시 요금을 예측하기 위한 ML 모델이 정상적으로 생성되었습니다.

304e2d6238466ca2

퀘스트 완료하기

이 사용자 주도형 실습은 Qwiklabs 퀘스트, 데이터 엔지니어링데이터 분석용 BigQuery의 일환으로 진행됩니다. 퀘스트는 여러 실습을 하나의 교육 과정으로 구성한 것입니다. 이 퀘스트를 완료하면 위의 배지를 얻고 수료를 인증할 수 있습니다. 배지를 공개하고 온라인 이력서 또는 소셜 미디어 계정에 연결할 수 있습니다. 이 실습을 이미 완료한 경우 이 퀘스트에 등록하여 즉시 수료 크레딧을 받으세요. 다른 Qwiklabs 퀘스트도 확인해보세요.

다음 실습 참여하기

Google Cloud Dataprep 작업하기 실습이나 다음 중 하나에 참여하여 퀘스트를 계속 진행하세요.

  • BiqQuery에 대해 자세히 알아보려면 BigQuery 문서를 참조하세요.
  • 머신 러닝에 대해 자세히 알아보려면 AI Platform 문서를 참조하세요.

Google Cloud 교육 및 인증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2021년 8월 31일
실습 최종 테스트: 2021년 8월 31일

Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.