arrow_back

Google 머신러닝을 사용한 브라켓톨로지

가입 로그인
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Google 머신러닝을 사용한 브라켓톨로지

Lab 1시간 15분 universal_currency_alt 크레딧 5개 show_chart 중급
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP461

Google Cloud 사용자 주도형 실습

개요

이 실습에서는 BigQuery, 머신러닝(ML), NCAA 남자부 농구 데이터세트를 사용하여 NCAA 남자부 농구 토너먼트 경기의 승자를 예측해 봅니다.

이 실습에서는 SQL을 사용하여 분류 및 예측을 위한 ML 모델을 생성할 수 있는 BigQuery 머신러닝(BQML)을 활용합니다.

실습할 내용

이 실습에서는 다음 작업을 수행하는 방법을 학습합니다.

  • BigQuery를 사용하여 공개 NCAA 데이터세트에 액세스하기
  • NCAA 데이터세트를 탐색하며 이용 가능한 데이터의 스키마와 범위에 익숙해지기
  • 기존 데이터를 준비하여 특성 및 라벨로 변환하기
  • 데이터세트를 학습 및 평가 하위 집합으로 분할하기
  • BQML을 사용하여 NCAA 토너먼트 데이터세트에 기반을 둔 모델 빌드하기
  • 새로 만든 모델을 사용하여 NCAA 토너먼트 승자 예측하기

기본 요건

이 실습은 기초 레벨 실습입니다. SQL 및 언어 키워드를 사용해 본 경험이 있어야 시작할 수 있습니다. BigQuery에 익숙하면 더욱 좋습니다. 이 영역에서 좀 더 빠르게 진행하고 싶다면 이 실습을 시도하기 전에 다음과 같은 실습 중 하나 이상을 수행하시기 바랍니다.

준비가 되었다면 아래로 스크롤하여 실습에서 사용하게 될 서비스에 대한 정보와 실습 환경을 적절하게 설정하는 방법을 자세히 알아보세요.

BigQuery

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

NCAA 농구 경기/팀/선수에 관한 데이터세트가 새롭게 제공되었습니다. 2009년까지의 경기 데이터에서는 플레이 바이 플레이 기록 및 박스 스코어 기록이 제공되며, 최종 스코어는 1996년까지 기록되어 있습니다. 1894~5 시즌까지의 승패 데이터가 추가로 제공되는 팀도 있습니다.

머신러닝

Google Cloud는 데이터 애널리스트와 데이터 과학자에게 폭넓은 머신러닝 옵션을 제공합니다. 인기 있는 옵션은 다음과 같습니다.

  • Machine Learning API: Cloud Vision처럼 사전 학습된 API로 일반적인 ML 작업에 적합합니다.
  • AutoML: 코딩 없이 맞춤형 ML 모델을 만들 수 있습니다.
  • BigQuery ML: SQL 지식이 있다면 BigQuery에 이미 존재하는 데이터를 활용하여 빠르게 ML 모델을 빌드할 수 있습니다.
  • AI Platform: 맞춤형 ML 모델을 빌드하고 Google 인프라를 통해 실제 프로덕션 환경에 배치할 수 있습니다.

이 실습에서는 BigQuery ML을 사용하여 프로토타입을 제작하고, 학습을 진행하고, 평가를 마친 후 NCAA 농구 토너먼트에서 두 팀을 선정해 '승자'와 '패자'를 예측해봅니다.

설정 및 요구사항

Qwiklabs 설정

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

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

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

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

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간---실습을 시작하고 나면 일시중지할 수 없습니다.
참고: 계정에 추가 요금이 발생하지 않도록 하려면 개인용 Google Cloud 계정이나 프로젝트가 이미 있어도 이 실습에서는 사용하지 마세요.

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

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 팝업이 열립니다. 왼쪽에 있는 연결 세부정보 패널이 이 실습에서 사용해야 하는 임시 사용자 인증 정보로 채워집니다.

    사용자 인증 정보

  2. 사용자 이름을 복사한 다음 Google 콘솔 열기를 클릭합니다. 실습에서 리소스가 실행되며 계정 선택 페이지를 표시하는 다른 탭이 열립니다.

    팁: 두 탭은 각각 별도의 창에 나란히 여세요.

  3. 계정 선택 페이지에서 다른 계정 사용을 클릭합니다.

    계정 선택

  4. 로그인 페이지가 열립니다. 연결 세부정보 패널에서 복사한 사용자 이름을 붙여넣습니다. 그런 다음 비밀번호를 복사하여 붙여넣습니다.

    중요: 연결 세부정보 패널에 표시된 사용자 인증 정보를 사용해야 합니다. 본인의 Qwiklabs 사용자 인증 정보를 사용하지 마세요. 개인용 GCP 계정이 있어도 이 실습에서 사용하지 마세요(요금 청구 방지).

  5. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

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

잠시 후 GCP Console이 이 탭에서 열립니다.

BigQuery 콘솔 열기

Google Cloud Console에서 탐색 메뉴를 열고 BigQuery를 선택합니다.

bq-console.gif

완료를 클릭하면 베타 UI로 이동합니다. 자신의 Qwiklabs GCP 프로젝트 ID가 왼쪽 리소스 메뉴에 다음과 같은 형태로 표시되는지 확인하세요.

project.png

프로젝트 옆에 있는 드롭다운 화살표를 클릭해도 데이터베이스나 테이블이 표시되지 않을 것입니다. 이는 아직 추가한 프로젝트가 없기 때문입니다.

다행히 BigQuery에는 가용 공개 데이터세트가 다양하게 마련되어 있어 이를 활용해 작업할 수 있습니다. 이제 NCAA 데이터세트에 대해 알아보고 이 데이터세트를 BigQuery에 추가하는 방법을 살펴보겠습니다.

NCAA 3월의 광란

NCAA(National Collegiate Athletic Association, 전미 대학 체육 협회)는 미국에서 매년 남자부와 여자부, 이렇게 두 종류의 중요한 대학 농구 토너먼트를 개최합니다. 3월에 열리는 NCAA 남자부 농구 토너먼트에는 68개 팀이 참가해 싱글 엘리미네이션(single-elimination) 방식으로 맞대결을 펼치며, 단 한 팀만이 '3월의 광란' 최종 우승자의 타이틀을 거머쥡니다.

NCAA에서는 남자부/여자부 농구 경기 및 선수의 시즌 및 파이널 토너먼트 통계가 포함된 공개 데이터세트를 제공합니다. 2009년까지의 경기 데이터에서는 플레이 바이 플레이 기록 및 박스 스코어 기록이 제공되며, 최종 스코어는 1996년까지 기록되어 있습니다. 1894~5 시즌까지의 승패 데이터가 추가로 제공되는 팀도 있습니다.

이 데이터세트에 대한 더 자세한 정보나 활용 방법을 알아보려면 Google Cloud 마케팅 광고 캠페인에서 실시간 인사이트 예측에 관한 내용을 확인하세요. 올해 토너먼트에 대한 최신 정보는 G.co/marchmadness에서 보실 수 있습니다.

BigQuery에서 NCAA 공개 데이터세트 찾기

이 단계에서는 BigQuery 콘솔에 접속한 상태여야 합니다. 왼쪽 메뉴에서 리소스 탭을 찾아 + 데이터 추가 버튼을 클릭하고 공개 데이터세트 살펴보기를 선택합니다.

검색창에 'NCAA Basketball'을 입력하고 Enter를 칩니다. 하나의 검색 결과가 나타나면 데이터세트 보기를 클릭합니다.

dataset.png

이렇게 하면 데이터세트가 로드된 BigQuery 탭이 새로 열립니다. 이 탭에서 작업을 계속해도 되고, 이 탭을 닫은 다음 다른 탭에서 본인의 BigQuery 콘솔을 새로 고쳐 공개 데이터세트를 불러와도 됩니다.

ncaa_basketball 데이터세트 옆의 화살표를 클릭하면 이 데이터세트의 테이블이 표시됩니다.

tables.png

데이터세트에 테이블 10개가 표시될 것입니다. mbb_historical_tournament_games를 클릭한 다음 미리보기를 클릭하면 데이터의 샘플 행을 볼 수 있습니다. 세부정보를 클릭하면 테이블에 대한 메타데이터를 확인할 수 있습니다. 페이지가 다음과 비슷하게 표시됩니다.

details.png

쿼리를 작성하여 이용 가능한 시즌 및 경기 확인하기

이제 간단한 SQL 쿼리를 작성하여 얼마나 많은 시즌과 경기를 mbb_historical_tournament_games 테이블에서 탐색할 수 있는지 측정해 보겠습니다.

테이블 세부정보 섹션 위에서 쿼리 편집기를 찾습니다. 다음을 복사하여 해당 필드에 붙여넣습니다.

SELECT
  season,
  COUNT(*) as games_per_tournament
  FROM
 `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games`
 GROUP BY season
 ORDER BY season # default is Ascending (low to high)

실행을 클릭합니다. 잠시 후 다음과 비슷한 결과가 표시됩니다.

query-one.png

출력된 결과까지 스크롤하여 시즌의 수와 시즌당 진행된 경기의 수를 적어놓습니다. 이 정보는 다음 질문에 답하는 데 사용됩니다. 또한 페이지 나누기 화살표 근처 오른쪽 하단을 보면 몇 개의 행이 반환되었는지도 쉽게 파악할 수 있습니다.

내 진행 상황 확인을 클릭하여 목표를 확인하세요.

쿼리를 작성하여 이용 가능한 시즌 및 경기 확인하기

배운 내용 테스트하기

다음은 지금껏 다룬 개념에 대한 이해를 돕기 위한 객관식 문제입니다. 최선을 다해 풀어보세요.

머신러닝의 특성 및 라벨 이해하기

이 실습의 최종 목표는 과거에 진행되었던 경기 이력 정보를 사용하여 주어진 남자부 농구 토너먼트 대진의 승자를 예측하는 것입니다. 머신러닝에서 데이터의 각 열은 결과(토너먼트 경기에서는 승 또는 패)를 결정하는 데 도움을 주며 이를 특성이라고 지칭합니다.

예측하고자 하는 데이터의 열은 라벨이라고 합니다. 머신러닝 모델은 특성 간의 상관관계를 '학습'하여 라벨의 결과를 예측합니다.

이 과거 데이터세트에서 특성이 될 수 있는 항목은 다음과 같습니다.

  • 시즌
  • 팀 이름
  • 상대 팀 이름
  • 팀 시드(순위)
  • 상대 팀 시드

미래 경기에 대해 예측하고자 하는 라벨은 팀의 승패 여부인 경기의 결과입니다.

배운 내용 테스트하기

다음은 지금껏 다룬 개념에 대한 이해를 돕기 위한 객관식 문제입니다. 최선을 다해 풀어보세요.

라벨이 지정된 머신러닝 데이터세트 만들기

머신러닝 모델을 빌드하려면 많은 양의 고품질 학습 데이터가 필요합니다. 다행히도 NCAA 데이터세트는 탄탄해서 이를 바탕으로 효과적인 모델을 빌드하는 데 손색이 없습니다. BigQuery 콘솔로 돌아가겠습니다. 실행했던 쿼리의 결과가 그대로 남아 있을 것입니다.

왼쪽 메뉴에서 테이블 이름을 클릭하여 mbb_historical_tournament_games 테이블을 엽니다. 로드가 완료되면 미리보기를 클릭합니다. 페이지가 다음과 비슷하게 표시됩니다.

mbb_historical_teams_games_table.png

배운 내용 테스트하기

다음은 지금껏 다룬 개념에 대한 이해를 돕기 위한 객관식 문제입니다. 최선을 다해 풀어보세요.

데이터세트를 살펴보면 데이터세트의 행 하나에 win_marketlose_market 열이 둘 다 있는 것을 발견할 수 있습니다. 단일 경기의 기록을 양 팀의 기록으로 쪼개면 각 행을 '승자'와 '패자'로 라벨을 지정할 수 있습니다.

다음 쿼리를 복사해 쿼리 편집기에 붙여넣은 다음 실행을 클릭합니다.

# create a row for the winning team
SELECT
  # features
  season, # ex: 2015 season has March 2016 tournament games
  round, # sweet 16
  days_from_epoch, # how old is the game
  game_date,
  day, # Friday

  'win' AS label, # our label

  win_seed AS seed, # ranking
  win_market AS market,
  win_name AS name,
  win_alias AS alias,
  win_school_ncaa AS school_ncaa,
  # win_pts AS points,

  lose_seed AS opponent_seed, # ranking
  lose_market AS opponent_market,
  lose_name AS opponent_name,
  lose_alias AS opponent_alias,
  lose_school_ncaa AS opponent_school_ncaa
  # lose_pts AS opponent_points

FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games`

UNION ALL

# create a separate row for the losing team
SELECT
# features
  season,
  round,
  days_from_epoch,
  game_date,
  day,

  'loss' AS label, # our label

  lose_seed AS seed, # ranking
  lose_market AS market,
  lose_name AS name,
  lose_alias AS alias,
  lose_school_ncaa AS school_ncaa,
  # lose_pts AS points,

  win_seed AS opponent_seed, # ranking
  win_market AS opponent_market,
  win_name AS opponent_name,
  win_alias AS opponent_alias,
  win_school_ncaa AS opponent_school_ncaa
  # win_pts AS opponent_points

FROM
`bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games`

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

mbb_historical_teams_games_output.png

내 진행 상황 확인을 클릭하여 목표를 확인하세요.

라벨이 지정된 머신러닝 데이터세트 만들기

결과에서 어떤 특성이 사용 가능한지 알게 되었다면 데이터세트에 대한 이해를 돕는 다음 문제를 풀어보세요.

파트 1: 머신러닝 모델을 만들어 시드와 팀 이름을 기반으로 승자 예측하기

데이터 탐색을 마쳤으니 이제 머신러닝 모델을 학습시킬 시간입니다. 아래 질문에 답변하며 이 섹션을 정리하세요.

모델 유형 선택하기

이 문제를 해결하기 위해서 분류 모델을 빌드해보겠습니다. 승 또는 패, 이렇게 클래스가 2개 있는 경우는 이진 분류 모델이라고도 부릅니다. 팀은 경기에서 승리하거나 패배하게 됩니다.

원한다면 이번 실습을 마치고 예상 모델을 사용하여 팀이 획득하는 총 점수를 예상해볼 수도 있겠지만, 이번 실습에서 중점적으로 다룰 내용은 아닙니다.

현재 예측이 진행되는지 아니면 분류가 진행되는지 쉽게 알 수 있는 방법은 예측하고 있는 데이터의 라벨 유형(열)을 살펴보는 것입니다.

  • 라벨 유형이 숫자 열(예: 판매량 또는 경기에서의 득점)이라면 예측을 수행합니다.
  • 라벨 유형이 문자열 값이면 분류를 수행합니다(이 행은 클래스 내의 행일 수도, 다른 클래스 내의 행일 수도 있음).
  • 3개 이상의 클래스가 있는 경우(예: 승/무/패), 다중 클래스 분류를 수행합니다.

여기서 다루는 분류 모델은 로지스틱 회귀라고 하는, 널리 사용되는 통계 모델을 사용하여 머신러닝을 수행합니다. 각각의 가능한 개별 라벨 값의 확률을 생성하는 모델이 필요하며, 이번 실습의 경우 이 값은 '승리' 또는 '패배'입니다. 로지스틱 회귀는 이러한 목적을 달성하기 위한 출발점으로 삼기에 좋은 모델 유형입니다. 다행인 점은 모델 학습이 진행되는 동안 ML 모델이 수학적 계산과 최적화를 모두 수행한다는 것입니다. 이런 게 바로 컴퓨터의 진정한 장점이죠!

BigQuery ML을 사용하여 머신러닝 모델 만들기

BigQuery에서 분류 모델을 만들려면 SQL 문 CREATE MODEL을 작성하고 몇 가지 옵션만 제공하면 됩니다.

하지만 먼저 프로젝트 내에 모델을 저장할 공간을 확보해야 합니다.

왼쪽 메뉴 리소스 목록에서 Qwiklabs 프로젝트를 선택합니다.

bq-project.png

오른쪽에서 데이터세트 만들기를 클릭합니다. 메뉴가 열리면 데이터세트 ID를 bracketology로 설정하고 데이터세트 만들기를 클릭합니다.

create-dataset.png

이제 쿼리 편집기에서 다음 명령을 실행해봅니다.

CREATE OR REPLACE MODEL
  `bracketology.ncaa_model`
OPTIONS
  ( model_type='logistic_reg') AS

# create a row for the winning team
SELECT
  # features
  season,

  'win' AS label, # our label

  win_seed AS seed, # ranking
  win_school_ncaa AS school_ncaa,

  lose_seed AS opponent_seed, # ranking
  lose_school_ncaa AS opponent_school_ncaa

FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games`
WHERE season <= 2017

UNION ALL

# create a separate row for the losing team
SELECT
# features
  season,

  'loss' AS label, # our label
  lose_seed AS seed, # ranking
  lose_school_ncaa AS school_ncaa,

  win_seed AS opponent_seed, # ranking
  win_school_ncaa AS opponent_school_ncaa

FROM
`bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games`

# now we split our dataset with a WHERE clause so we can train on a subset of data and then evaluate and test the model's performance against a reserved subset so the model doesn't memorize or overfit to the training data.

# tournament season information from 1985 - 2017
# here we'll train on 1985 - 2017 and predict for 2018
WHERE season <= 2017

이 코드를 살펴보면 SQL 단 몇 줄만으로 모델을 만든 것을 알 수 있습니다. 여기서 가장 중요한 옵션은 분류 작업의 모델 유형으로 logistic_reg를 선택하는 것입니다.

모델 학습에는 3~5분이 소요됩니다. 작업이 완료되면 다음과 같이 출력됩니다.

bqml-output.png

콘솔 오른쪽에 있는 모델로 이동 버튼을 클릭합니다.

내 진행 상황 확인을 클릭하여 목표를 확인하세요.

기계 학습 모델 만들기

모델 학습 세부정보 보기

모델 세부정보에서 아래로 스크롤하여 학습 옵션 섹션으로 이동하면 모델이 학습하기 위해 실제로 수행했던 반복 내용을 볼 수 있습니다. 머신러닝을 사용해 본 경험이 있다면 OPTIONS 문에서 값을 정의하여 이런 초매개변수(모델 실행 전 설정되는 옵션)를 모두 맞춤설정할 수 있습니다. 머신러닝을 처음 사용해 본다고 하더라도 설정되지 않은 모든 옵션에 대해서는 BigQuery ML이 기본값을 알아서 설정하므로 별다른 작업을 하지 않아도 됩니다.

자세히 알아보려면 BigQuery ML 모델 옵션 목록을 참조하세요.

모델 학습 통계 보기

머신러닝 모델은 알려진 특성과 알려지지 않은 라벨 간의 상관관계를 '학습'합니다. '순위 시드' 또는 '학교 이름' 등의 일부 특성이 경기가 진행된 요일 등 다른 데이터 열(특성)보다 승/패를 결정하는 데 더 큰 영향을 미친다는 것은 누구나 직관적으로 추측할 수 있습니다. 머신러닝 모델은 이러한 직관 없이 학습 프로세스를 시작하고 각 특성의 가중치를 일반화하여 무작위로 부여합니다.

학습 프로세스를 거치면서 모델은 각 특성에 가장 알맞은 가중치를 부여하는 경로를 최적화합니다. 학습을 실행할 때마다 모델은 학습 데이터 손실평가 데이터 손실을 최소화하기 위해 노력합니다. 평가에 대한 최종 손실이 학습에 대한 최종 손실에 비해 현저히 높다면 모델이 일반화 가능한 관계를 학습하는 대신 트레이닝 데이터를 과하게 학습 또는 기억하고 있는 것입니다.

모델 통계 또는 학습 탭을 클릭하면 모델이 수행한 학습의 횟수를 조회할 수 있습니다. 각 실행 명령마다 모델은 약 20초 동안 학습을 3회 반복합니다. 조회 결과는 다양할 것입니다.

model-stats.png

모델이 특성의 어떤 부분을 학습했는지 확인하기

학습을 마치면 가중치를 조사하여 어떤 특성이 모델에 가장 중요했는지 볼 수 있습니다. 쿼리 편집기에서 다음 명령을 실행하세요.

SELECT
  category,
  weight
FROM
  UNNEST((
    SELECT
      category_weights
    FROM
      ML.WEIGHTS(MODEL `bracketology.ncaa_model`)
    WHERE
      processed_input = 'seed')) # try other features like 'school_ncaa'
      ORDER BY weight DESC

다음과 유사한 결과가 출력됩니다.

model-feature-output.png

보시다시피, 팀의 시드 숫자가 매우 낮거나(1,2,3) 매우 높으면(14,15,16) 모델이 승패를 판단할 때 높은 가중치(최대 1.0)를 부여합니다. 시드 숫자가 낮은 팀은 토너먼트에서 좋은 성적을 낼 것이라고 예상하므로 이는 직관적으로 타당합니다.

"IF 시드가 1이면 THEN 팀에 80% 높은 승률을 적용한다"와 같이 SQL에 하드코딩된 IF THEN 문을 잔뜩 만들지 않았다는 점이 머신러닝의 강력한 힘입니다. 머신러닝은 하드코딩된 규칙과 논리에서 탈피해 스스로 관계를 학습합니다. 자세한 내용은 BQML 구문 가중치 문서를 확인하세요.

모델 성능 평가하기

모델의 성능을 평가하려면 학습된 모델에 ML.EVALUATE를 실행하기만 하면 됩니다. 쿼리 편집기에서 다음 명령을 실행하세요.

SELECT
  *
FROM
  ML.EVALUATE(MODEL   `bracketology.ncaa_model`)

다음과 비슷한 결과가 표시됩니다.

ml-evaluate-output.png

값을 보면 정확도가 약 69%입니다. 50%보다 높은 확률이지만 개선의 여지가 있습니다.

참고: 분류 모델의 경우, 출력에서 신경 써야 하는 측정항목이 모델 정확성만 있는 것은 아닙니다. 로지스틱 회귀를 수행했기 때문에 다음 모든 측정항목에 대한 모델 성능(1.0에 근접할수록 높은 성능)을 평가할 수 있습니다. Precision : 분류 모델의 측정항목입니다. 정밀도는 모델이 포지티브 클래스를 정확히 예측한 빈도를 나타냅니다. Recall : 분류 모델의 측정항목으로, "가능한 모든 양성 라벨 중에서 모델이 올바르게 식별한 것은 몇 개입니까?"와 같은 질문에 대한 답변을 제공합니다. Accuracy : 정확성이란 분류 모델의 예측이 얼마나 정확한지 의미하는 비율입니다. f1_score : 모델의 정확성을 나타내는 척도입니다. f1 점수는 정밀도와 재현율의 조화 평균입니다. f1 점수의 가장 좋은 값은 1입니다. 가장 나쁜 값은 0입니다. log_loss : 로지스틱 회귀에 사용되는 손실 함수입니다. 모델 예측과 올바른 라벨 간의 차이 정도를 나타내는 척도입니다. roc_auc : ROC 곡선 아래 영역입니다. 분류자가 무작위로 선택한 양성 예시가 실제로 양성일 가능성이 무작위로 선택한 음성 예시가 양성일 가능성보다 높다고 신뢰할 확률입니다.

예측 실행

2017 시즌까지의 과거 데이터(현재 보유한 모든 데이터)를 가지고 모델을 학습시켰으니 이제 2018 시즌 결과를 예측해보겠습니다. 데이터 사이언스 팀에서 2018 토너먼트 대진표를 별도의 테이블로 제공했는데, 이것은 원본 데이터세트에는 없는 내용입니다.

예측을 실행하는 것은 매우 간단합니다. 학습된 모델에서 ML.PREDICT를 호출하고 예측하고자 하는 데이터세트에 전달하면 됩니다.

쿼리 편집기에서 다음 명령을 실행하세요.

CREATE OR REPLACE TABLE `bracketology.predictions` AS (

SELECT * FROM ML.PREDICT(MODEL `bracketology.ncaa_model`,

# predicting for 2018 tournament games (2017 season)
(SELECT * FROM `data-to-insights.ncaa.2018_tournament_results`)
)
)

잠시 후 다음과 비슷한 결과가 표시됩니다.

ml-predict-output.png

내 진행 상황 확인을 클릭하여 목표를 확인하세요.

모델 성능 평가 및 테이블 생성

이제 원본 데이터세트와 함께 다음 3개의 열이 새로 추가된 것을 볼 수 있습니다.

  • 예측된 라벨
  • 예측된 라벨 옵션
  • 예측된 라벨 확률

2018년 '3월의 광란' 토너먼트 결과가 나와 있으니 예측 결과를 토대로 모델이 얼마나 잘 예측했는지 알아보도록 하겠습니다. (팁: 2019년 토너먼트를 예측하려면 2019년 시드 및 팀 이름이 있는 데이터세트를 넘기면 됩니다. 아직 경기가 진행되지 않았으므로 당연히 라벨 열은 비어 있습니다. 그러니 한번 예측해 보세요!)

우리가 만든 모델이 2018 NCAA 토너먼트 결과를 얼마나 정확하게 맞혔을까요?

쿼리 편집기에서 다음 명령을 실행하세요.

SELECT * FROM `bracketology.predictions`
WHERE predicted_label <> label

다음과 비슷한 결과가 표시됩니다.

ml-predict-output-two.png

예측 134개(3월 토너먼트 경기 67개) 중에서 38개 결과가 틀렸습니다. 2018 토너먼트 대진에서는 전체적으로 70%의 적중률을 보였습니다.

모델의 예측에는 한계가 있습니다.

3월의 광란 토너먼트에는 모델이 예측하기 무척 힘들고 아슬아슬한 승리나 놀라운 이변으로 이어지는 다른 요소나 특성이 너무나도 많습니다.

2017 토너먼트에서 모델의 예측 결과와 완전히 다른 가장 놀라운 이변을 찾아보겠습니다. 모델이 80% 이상의 신뢰도로 예측했는데 결과는 틀렸던 경기를 찾아볼 것입니다.

쿼리 편집기에서 다음 명령을 실행하세요.

SELECT
  model.label AS predicted_label,
  model.prob AS confidence,

  predictions.label AS correct_label,

  game_date,
  round,

  seed,
  school_ncaa,
  points,

  opponent_seed,
  opponent_school_ncaa,
  opponent_points

FROM `bracketology.predictions` AS predictions,
UNNEST(predicted_label_probs) AS model

WHERE model.prob > .8 AND predicted_label <> predictions.label

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

ml-predict-output-three.png

이 동영상에서 실제 결과를 확인해보세요!

UMBC의 Ryan Odom 감독도 경기 후에 "믿을 수 없다는 말밖에 할 말이 없네요."라고 했을 정도입니다.

요약

  • 경기 결과를 예측하는 머신러닝 모델을 만들어보았습니다.
  • 시드와 팀 이름을 주 특성으로 사용하여 경기력을 평가한 결과 69%의 정확성을 보였습니다.
  • 2018 토너먼트 결과를 예측해보았습니다.
  • 예측 결과를 분석하여 유용한 정보를 얻었습니다.

다음 도전과제는 시드와 팀 이름을 특성으로 사용하지 '않고' 더 나은 모델을 빌드하는 것입니다.

파트 2: 정교한 ML 모델 특성 사용하기

이번 실습 파트 2에서는 새로 제공되는 더욱 상세한 특성을 사용하여 두 번째 ML 모델을 빌드해보겠습니다.

BigQuery ML을 사용한 ML 모델 빌드에 익숙해졌으니 데이터 사이언스 팀에서 모델이 학습할 새로운 팀 측정항목을 만들어 포함시킨 새로운 플레이 바이 플레이 데이터세트를 제공해주었습니다. 예를 들면 다음과 같습니다.

  • 과거 플레이 바이 플레이 분석에 기반한 시간대별 득점 효율
  • 시간대별 볼 점유

정교한 특성을 사용하여 새로운 ML 데이터세트 만들기

쿼리 편집기에서 다음 명령을 실행하세요.

# create training dataset:
# create a row for the winning team
CREATE OR REPLACE TABLE `bracketology.training_new_features` AS
WITH outcomes AS (
SELECT
  # features
  season, # 1994

  'win' AS label, # our label

  win_seed AS seed, # ranking # this time without seed even
  win_school_ncaa AS school_ncaa,

  lose_seed AS opponent_seed, # ranking
  lose_school_ncaa AS opponent_school_ncaa

FROM `bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games` t
WHERE season >= 2014

UNION ALL

# create a separate row for the losing team
SELECT
# features
  season, # 1994

  'loss' AS label, # our label

  lose_seed AS seed, # ranking
  lose_school_ncaa AS school_ncaa,

  win_seed AS opponent_seed, # ranking
  win_school_ncaa AS opponent_school_ncaa

FROM
`bigquery-public-data.ncaa_basketball.mbb_historical_tournament_games` t
WHERE season >= 2014

UNION ALL

# add in 2018 tournament game results not part of the public dataset:
SELECT
  season,
  label,
  seed,
  school_ncaa,
  opponent_seed,
  opponent_school_ncaa
FROM
  `data-to-insights.ncaa.2018_tournament_results`

)

SELECT
o.season,
label,

# our team
  seed,
  school_ncaa,
  # new pace metrics (basketball possession)
  team.pace_rank,
  team.poss_40min,
  team.pace_rating,
  # new efficiency metrics (scoring over time)
  team.efficiency_rank,
  team.pts_100poss,
  team.efficiency_rating,

# opposing team
  opponent_seed,
  opponent_school_ncaa,
  # new pace metrics (basketball possession)
  opp.pace_rank AS opp_pace_rank,
  opp.poss_40min AS opp_poss_40min,
  opp.pace_rating AS opp_pace_rating,
  # new efficiency metrics (scoring over time)
  opp.efficiency_rank AS opp_efficiency_rank,
  opp.pts_100poss AS opp_pts_100poss,
  opp.efficiency_rating AS opp_efficiency_rating,

# a little feature engineering (take the difference in stats)

  # new pace metrics (basketball possession)
  opp.pace_rank - team.pace_rank AS pace_rank_diff,
  opp.poss_40min - team.poss_40min AS pace_stat_diff,
  opp.pace_rating - team.pace_rating AS pace_rating_diff,
  # new efficiency metrics (scoring over time)
  opp.efficiency_rank - team.efficiency_rank AS eff_rank_diff,
  opp.pts_100poss - team.pts_100poss AS eff_stat_diff,
  opp.efficiency_rating - team.efficiency_rating AS eff_rating_diff

FROM outcomes AS o
LEFT JOIN `data-to-insights.ncaa.feature_engineering` AS team
ON o.school_ncaa = team.team AND o.season = team.season
LEFT JOIN `data-to-insights.ncaa.feature_engineering` AS opp
ON o.opponent_school_ncaa = opp.team AND o.season = opp.season

잠시 후 다음과 비슷한 결과가 표시됩니다.

new-model-trainining-dataset-created.png

내 진행 상황 확인을 클릭하여 목표를 확인하세요.

정교한 ML 모델 특성 사용하기

새로운 특성 미리보기

콘솔 오른쪽에 있는 테이블로 이동 버튼을 클릭합니다. 그런 다음 미리보기 탭을 클릭합니다.

테이블이 다음과 비슷하게 표시됩니다.

training-new-features.png

출력 결과가 위 스크린샷과 똑같지 않더라도 괜찮습니다.

선택한 측정항목 해석하기

이제 예측을 수행하는 데 도움을 주는 몇 가지 중요한 라벨에 대해 배워보겠습니다.

opp_efficiency_rank

상대 팀의 효율성 순위: 모든 팀 중 상대 팀의 시간대별 득점 효율성(볼 점유 100당 득점)의 순위입니다. 순위 숫자가 낮을수록 좋습니다.

opp_pace_rank

상대 팀의 페이스 순위: 모든 팀 중 상대 팀의 볼 점유 (40분간 점유 횟수) 순위입니다. 순위 숫자가 낮을수록 좋습니다.

이제 팀의 득점력과 볼 점유력에 대한 유용한 정보가 담긴 특성으로 두 번째 모델을 학습시킬 수 있습니다.

모델이 '과거 기록을 토대로 강팀을 기억하는 경우'를 방지하기 위한 추가 조치로, 이번 차세대 모델에서는 팀 이름과 시드를 배제하고 측정항목에만 집중하겠습니다.

새로운 모델 학습시키기

쿼리 편집기에서 다음 명령을 실행하세요.

CREATE OR REPLACE MODEL
  `bracketology.ncaa_model_updated`
OPTIONS
  ( model_type='logistic_reg') AS

SELECT
  # this time, dont train the model on school name or seed
  season,
  label,

  # our pace
  poss_40min,
  pace_rank,
  pace_rating,

  # opponent pace
  opp_poss_40min,
  opp_pace_rank,
  opp_pace_rating,

  # difference in pace
  pace_rank_diff,
  pace_stat_diff,
  pace_rating_diff,


  # our efficiency
  pts_100poss,
  efficiency_rank,
  efficiency_rating,

  # opponent efficiency
  opp_pts_100poss,
  opp_efficiency_rank,
  opp_efficiency_rating,

  # difference in efficiency
  eff_rank_diff,
  eff_stat_diff,
  eff_rating_diff

FROM `bracketology.training_new_features`

# here we'll train on 2014 - 2017 and predict on 2018
WHERE season BETWEEN 2014 AND 2017 # between in SQL is inclusive of end points

잠시 후 다음과 유사한 결과가 출력됩니다.

new-model-trained.png

새로운 모델의 성능 평가하기

모델의 성능을 평가하려면 쿼리 편집기에서 다음 명령을 실행하세요.

SELECT
  *
FROM
  ML.EVALUATE(MODEL     `bracketology.ncaa_model_updated`)

다음과 비슷한 결과가 출력됩니다.

new-model-stats.png

그 결과 다른 특성으로 새로운 모델을 학습시킨 결과 정확성이 약 75%로 원래 모델보다 5% 정도 올랐습니다.

이번 실습은 머신러닝에서 고품질의 특성 데이터세트가 모델의 정확성에 얼마나 큰 차이를 만들 수 있는지 확실히 알게 된 시간이었습니다.

내 진행 상황 확인을 클릭하여 목표를 확인하세요.

새 모델 교육 및 평가

모델이 무엇을 학습했는지 알아보기

승/패 결과를 도출할 때 모델은 어떤 특성에 가장 가중치를 부여할까요? 쿼리 편집기에서 다음 명령을 실행하여 알아보세요.

SELECT
  *
FROM
  ML.WEIGHTS(MODEL     `bracketology.ncaa_model_updated`)
ORDER BY ABS(weight) DESC

다음과 비슷한 결과가 출력됩니다.

new-model-inspect-weights.png

(승/패에) 가장 크게 영향을 주는 특성이 목록 앞에 위치하도록 가중치 절대값을 기준으로 순서를 정했습니다.

결과에서 볼 수 있듯이 상위 3개 특성은 pace_stat_diff, eff_stat_diff, eff_rating_diff입니다. 조금 더 자세히 알아보도록 하겠습니다.

pace_stat_diff

실제 통계상 양 팀 간 (40분당 볼 점유)의 차이입니다. 모델에 따르면 경기 결과를 도출하는 데 가장 큰 영향을 미친 요소입니다.

eff_stat_diff

실제 통계상 양 팀 간 (볼 점유 100회당 순 득점)의 차이입니다.

eff_rating_diff

득점 효율성의 정규화된 평가에서 보이는 양 팀 간 차이입니다.

모델이 예측 시에 가중치를 높게 부여하지 않은 특성은 무엇일까요? 바로 '시즌'입니다. 위 가중치 순서 중 마지막입니다. 이 모델은 시즌(2013, 2014, 2015) 특성이 경기 결과 예측에 그다지 도움이 되지 않는다고 보고 있습니다. '2014년'이라는 요소가 어떤 팀에도 특별하게 작용하지 않았습니다.

팀이 얼마나 효율적으로 득점했는지보다도 팀의 페이스(얼마나 볼을 잘 지배했느냐 여부)에 모델이 더 높은 가치를 부여했다는 점이 무척 흥미롭습니다.

이제 예측해 보겠습니다!

쿼리 편집기에서 다음 명령을 실행하세요.

CREATE OR REPLACE TABLE `bracketology.ncaa_2018_predictions` AS

# let's add back our other data columns for context
SELECT
  *
FROM
  ML.PREDICT(MODEL     `bracketology.ncaa_model_updated`, (

SELECT
* # include all columns now (the model has already been trained)
FROM `bracketology.training_new_features`

WHERE season = 2018

))

다음과 비슷한 결과가 출력됩니다.

predictions-table-created.png

내 진행 상황 확인을 클릭하여 목표를 확인하세요.

쿼리를 실행하여 테이블 ncaa_2018_predictions 생성

예측 결과 분석:

정확한 경기 결과를 알고 있으므로 새로운 테스팅 데이터세트를 사용한 예측에서 모델이 어느 부분을 틀렸는지 알 수 있습니다. 쿼리 편집기에서 다음 명령을 실행하세요.

SELECT * FROM `bracketology.ncaa_2018_predictions`
WHERE predicted_label <> label

predictions-analysis.png

쿼리에서 반환된 기록 수에서 볼 수 있듯 모델은 2018 토너먼트 총 매치업 중에서 48개 매치업(24경기) 결과를 잘못 예측했으며 정확성은 64%입니다. 2018년은 이변이 가득한 해였나 봅니다. 어떤 이변이 발생했는지 알아보겠습니다.

2018년 3월에는 어떤 경기에 이변이 있었나요?

쿼리 편집기에서 다음 명령을 실행하세요.

SELECT
CONCAT(school_ncaa, " was predicted to ",IF(predicted_label="loss","lose","win")," ",CAST(ROUND(p.prob,2)*100 AS STRING), "% but ", IF(n.label="loss","lost","won")) AS narrative,
predicted_label, # what the model thought
n.label, # what actually happened
ROUND(p.prob,2) AS probability,
season,

# us
seed,
school_ncaa,
pace_rank,
efficiency_rank,

# them
opponent_seed,
opponent_school_ncaa,
opp_pace_rank,
opp_efficiency_rank

FROM `bracketology.ncaa_2018_predictions` AS n,
UNNEST(predicted_label_probs) AS p
WHERE
  predicted_label <> n.label # model got it wrong
  AND p.prob > .75  # by more than 75% confidence
ORDER BY prob DESC

다음과 같은 결과가 출력됩니다.

new-model-upsets.png

가장 큰 이변은 이전 모델에서도 찾았던 것과 동일한 경기인 UMBC 대 버지니아 대학(Virginia)의 경기입니다. 2018년은 전체적으로 이변이 가득한 해였습니다. 2019년도 이렇게 이변이 가득할까요?

모델 성능 비교하기

단순 모델(시드 비교)은 잘못 예측했는데 고급 모델은 정확히 예측한 경기가 있는지 알아볼까요? 쿼리 편집기에서 다음 명령을 실행하세요.

SELECT
CONCAT(opponent_school_ncaa, " (", opponent_seed, ") was ",CAST(ROUND(ROUND(p.prob,2)*100,2) AS STRING),"% predicted to upset ", school_ncaa, " (", seed, ") and did!") AS narrative,
predicted_label, # what the model thought
n.label, # what actually happened
ROUND(p.prob,2) AS probability,
season,

# us
seed,
school_ncaa,
pace_rank,
efficiency_rank,

# them
opponent_seed,
opponent_school_ncaa,
opp_pace_rank,
opp_efficiency_rank,

(CAST(opponent_seed AS INT64) - CAST(seed AS INT64)) AS seed_diff

FROM `bracketology.ncaa_2018_predictions` AS n,
UNNEST(predicted_label_probs) AS p
WHERE
  predicted_label = 'loss'
  AND predicted_label = n.label # model got it right
  AND p.prob >= .55  # by 55%+ confidence
  AND (CAST(opponent_seed AS INT64) - CAST(seed AS INT64)) > 2 # seed difference magnitude
ORDER BY (CAST(opponent_seed AS INT64) - CAST(seed AS INT64)) DESC

다음과 같은 결과가 출력됩니다.

new-model-was-right.png

모델 예측 결과 플로리다 주립대학(Florida St.)(시드 09)이 재비어 대학(Xavier)(시드 01)을 상대로 이변을 일으킬 것이라 했는데 예측이 맞았습니다!

페이스와 슈팅 효율성 등 보다 정교한 새 특성을 기반으로 한 새로운 모델은 이변을 정확하게 예측해냈습니다. 시드 순위에 따르면 다른 결과가 나와야 했었음에도 말이죠. YouTube에서 경기 하이라이트를 시청해 보세요.

2019 3월의 광란 예측하기

2019년 대회의 팀과 시드 순위를 알고 있으니 앞으로 벌어질 경기 결과를 예측해봅시다.

2019년 데이터 탐색하기

다음 쿼리를 실행하여 최상위 시드를 찾으세요.

SELECT * FROM `data-to-insights.ncaa.2019_tournament_seeds` WHERE seed = 1

다음과 같은 결과가 출력됩니다.

2019-top-seed.png

모든 가능한 경기의 행렬 만들기

토너먼트가 진행됨에 따라 어떤 팀이 서로 맞붙을지 모르는 상황이기 때문에 팀을 모든 팀과 맞붙여보겠습니다.

SQL에서 특정 팀을 한 테이블에서 모든 다른 팀과 맞붙게 하는 쉬운 방법은 바로 CROSS JOIN입니다.

아래 쿼리를 실행하여 토너먼트에서 가능한 팀 경기를 모두 불러오세요.

SELECT
  NULL AS label,
  team.school_ncaa AS team_school_ncaa,
  team.seed AS team_seed,
  opp.school_ncaa AS opp_school_ncaa,
  opp.seed AS opp_seed
FROM `data-to-insights.ncaa.2019_tournament_seeds` AS team
CROSS JOIN `data-to-insights.ncaa.2019_tournament_seeds` AS opp
# teams cannot play against themselves :)
WHERE team.school_ncaa <> opp.school_ncaa

2018 팀 통계(페이스, 효율성) 추가하기

CREATE OR REPLACE TABLE `bracketology.ncaa_2019_tournament` AS

WITH team_seeds_all_possible_games AS (
  SELECT
    NULL AS label,
    team.school_ncaa AS school_ncaa,
    team.seed AS seed,
    opp.school_ncaa AS opponent_school_ncaa,
    opp.seed AS opponent_seed
  FROM `data-to-insights.ncaa.2019_tournament_seeds` AS team
  CROSS JOIN `data-to-insights.ncaa.2019_tournament_seeds` AS opp
  # teams cannot play against themselves :)
  WHERE team.school_ncaa <> opp.school_ncaa
)

, add_in_2018_season_stats AS (
SELECT
  team_seeds_all_possible_games.*,
  # bring in features from the 2018 regular season for each team
  (SELECT AS STRUCT * FROM `data-to-insights.ncaa.feature_engineering` WHERE school_ncaa = team AND season = 2018) AS team,
  (SELECT AS STRUCT * FROM `data-to-insights.ncaa.feature_engineering` WHERE opponent_school_ncaa = team AND season = 2018) AS opp

FROM team_seeds_all_possible_games
)

# Preparing 2019 data for prediction
SELECT

  label,

  2019 AS season, # 2018-2019 tournament season

# our team
  seed,
  school_ncaa,
  # new pace metrics (basketball possession)
  team.pace_rank,
  team.poss_40min,
  team.pace_rating,
  # new efficiency metrics (scoring over time)
  team.efficiency_rank,
  team.pts_100poss,
  team.efficiency_rating,

# opposing team
  opponent_seed,
  opponent_school_ncaa,
  # new pace metrics (basketball possession)
  opp.pace_rank AS opp_pace_rank,
  opp.poss_40min AS opp_poss_40min,
  opp.pace_rating AS opp_pace_rating,
  # new efficiency metrics (scoring over time)
  opp.efficiency_rank AS opp_efficiency_rank,
  opp.pts_100poss AS opp_pts_100poss,
  opp.efficiency_rating AS opp_efficiency_rating,

# a little feature engineering (take the difference in stats)

  # new pace metrics (basketball possession)
  opp.pace_rank - team.pace_rank AS pace_rank_diff,
  opp.poss_40min - team.poss_40min AS pace_stat_diff,
  opp.pace_rating - team.pace_rating AS pace_rating_diff,
  # new efficiency metrics (scoring over time)
  opp.efficiency_rank - team.efficiency_rank AS eff_rank_diff,
  opp.pts_100poss - team.pts_100poss AS eff_stat_diff,
  opp.efficiency_rating - team.efficiency_rating AS eff_rating_diff

FROM add_in_2018_season_stats

예측 수행하기

CREATE OR REPLACE TABLE `bracketology.ncaa_2019_tournament_predictions` AS

SELECT
  *
FROM
  # let's predicted using the newer model
  ML.PREDICT(MODEL     `bracketology.ncaa_model_updated`, (

# let's predict on March 2019 tournament games:
SELECT * FROM `bracketology.ncaa_2019_tournament`
))

내 진행 상황 확인을 클릭하여 목표를 확인하세요.

쿼리를 실행하여 ncaa_2019_tournament 및 ncaa_2019_tournament_predictions 테이블 생성

예측 결과 가져오기

SELECT
  p.label AS prediction,
  ROUND(p.prob,3) AS confidence,
  school_ncaa,
  seed,
  opponent_school_ncaa,
  opponent_seed
FROM `bracketology.ncaa_2019_tournament_predictions`,
UNNEST(predicted_label_probs) AS p
WHERE p.prob >= .5
AND school_ncaa = 'Duke'
ORDER BY seed, opponent_seed

duke-predictions.png

여기서 모델 결과를 필터링하여 듀크 대학(Duke)의 가능한 경기 전체를 보겠습니다. 스크롤하여 듀크 대학(Duke) 대 노스다코타 주립대학(Dakota St.) 경기를 찾으세요.

정보: 2019년 3월 22일 듀크 대학(Duke)(1)이 노스다코타 주립대학(North Dakota St.)(16)을 상대로 승리할 확률이 88.5%입니다.

위에 있는 school_ncaa 필터를 변경하여 대진표에서 매치업 결과를 예측해보세요. 모델의 신뢰도를 적어 보면서 경기를 즐기시기 바랍니다!

축하합니다!

실습이 마무리되었습니다. 머신러닝을 사용하여 NCAA 남자부 농구 토너먼트 승리 팀을 예측해보았습니다.

MarchMadness02_125.png BigQueryBasicsforMachineLearning-125x135.png

퀘스트 완료

이 사용자 주도형 실습은 Qwiklabs NCAA® March Madness®: Google Cloud를 사용한 브라켓톨로지머신러닝용 BigQuery 퀘스트의 일부입니다. 퀘스트는 여러 실습을 하나의 교육 과정으로 구성한 것입니다. 퀘스트를 완료하면 배지를 얻고 수료를 인증할 수 있습니다. 배지를 공개하고 온라인 이력서 또는 소셜 미디어 계정에 연결할 수 있습니다. 이 실습을 이미 완료한 경우 이 퀘스트에 등록하여 즉시 수료 크레딧을 받으세요. Qwiklabs 퀘스트(http://google.qwiklabs.com/catalog)에서 이용 가능한 다른 퀘스트를 확인하세요.

다음 실습 참여하기

빅데이터 탐색에 대한 모든 것과 BigQuery 내부에서 얼마나 빨리 머신러닝 모델을 만들 수 있는지 즐거운 마음으로 배우셨길 바랍니다. 다음 실습도 해보세요.

다음 단계/자세히 알아보기

Google Cloud 교육 및 자격증

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

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

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