arrow_back

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

로그인 가입
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스

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

실습 1시간 15분 universal_currency_alt 크레딧 5개 show_chart 중급
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
지식을 테스트하고 커뮤니티와 공유하기
done
700개 이상의 실무형 실습, 기술 배지, 과정에 액세스

GSP461

Google Cloud 사용자 주도형 실습

개요

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

BigQuery ML을 사용하면 데이터 분석가가 SQL 지식을 사용하여 데이터가 이미 BigQuery에 있는 위치에서 머신러닝 모델을 빠르게 구축할 수 있습니다.

BigQuery에는 NCAA 농구 경기, 팀, 선수에 대해 공개적으로 사용 가능한 데이터 세트가 있습니다. 2009년까지의 경기 데이터에서는 플레이 바이 플레이 기록 및 박스 스코어 기록이 제공되며, 최종 스코어는 1996년까지 기록되어 있습니다. 1894~5 시즌까지의 승패 데이터가 추가로 제공되는 팀도 있습니다.

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

실습할 내용

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

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

기본 요건

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

설정 및 요건

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

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

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

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

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

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

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

    • Google Cloud 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

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

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

    {{{user_0.username | "Username"}}}

    실습 세부정보 패널에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 세부정보 패널에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

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

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

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

참고: Google Cloud 제품 및 서비스 목록이 있는 메뉴를 보려면 왼쪽 상단의 탐색 메뉴를 클릭합니다. 탐색 메뉴 아이콘

BigQuery 콘솔 열기

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

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

  1. 완료를 클릭합니다.

BigQuery 콘솔이 열립니다.

작업 1. BigQuery 콘솔 열기

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

  2. 완료를 클릭하여 베타 UI로 이동합니다. 프로젝트 ID가 다음과 유사하게 탐색기 탭에 설정되어 있는지 확인합니다.

프로젝트가 선택된 탐색기 탭

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

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

작업 2. NCAA '3월의 광란'

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

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

작업 3. BigQuery에서 NCAA 공개 데이터 세트 찾기

  1. 이 단계에서는 BigQuery 콘솔에 접속한 상태여야 합니다. 탐색기 탭에서 + 추가 버튼을 클릭한 다음 공개 데이터 세트를 선택합니다.

  2. 검색창에서 NCAA 농구를 입력하고 Enter 키를 누릅니다. 하나의 검색 결과가 나타나면 데이터 세트 보기를 클릭합니다.

NCAA 농구 검색 결과가 표시되고 데이터 세트 보기 버튼이 강조 표시됩니다.

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

참고: `ncaa_basketball`이 보이지 않으면 + 추가 > 이름으로 프로젝트에 별표표시를 클릭합니다. 프로젝트 이름으로 bigquery-public-data를 입력한 다음 별표를 클릭합니다.
  1. bigquery-public-data > ncaa_basketball 데이터 세트를 확장하면 테이블이 표시됩니다.

ncaa_basketball 데이터 세트에 여러 테이블 표시

데이터 세트에 테이블 10개가 표시될 것입니다.

  1. mbb_historical_tournament_games를 클릭한 다음 미리보기를 클릭하면 데이터의 샘플 행을 볼 수 있습니다.

  2. 세부정보를 클릭하면 테이블에 대한 메타데이터를 확인할 수 있습니다.

페이지가 다음과 비슷하게 표시됩니다.

테이블 ID, 테이블 크기, 장기 스토리지 크기 등의 테이블 정보를 표시하는 세부정보 탭 페이지

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

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

  1. 테이블 세부정보 섹션 위에 있는 쿼리 편집기에서 다음을 복사하여 해당 필드에 붙여넣습니다.
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)
  1. 실행을 클릭합니다. 잠시 후 다음과 비슷한 결과가 표시됩니다.

토너먼트별 경기 테이블을 표시하는 쿼리 결과

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

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 쿼리를 작성하여 이용 가능한 시즌 및 경기 확인

배운 내용 테스트하기

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

작업 5. 머신러닝의 특성 및 라벨 이해

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

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

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

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

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

배운 내용 테스트하기

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

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

머신러닝 모델을 빌드하려면 많은 양의 고품질 학습 데이터가 필요합니다. 다행히도 NCAA 데이터 세트는 탄탄해서 이를 바탕으로 효과적인 모델을 빌드하는 데 손색이 없습니다.

  1. BigQuery 콘솔로 돌아가겠습니다. 실행했던 쿼리의 결과가 그대로 남아 있을 것입니다.

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

미리보기 탭 페이지의 mbb_historical_tournament_games 테이블

배운 내용 테스트하기

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

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

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

# 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`

다음과 같은 출력이 표시됩니다.

season, round, game_date와 같은 열 제목에 대해 여러 행의 데이터를 표시하는 쿼리 결과 탭 페이지

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 라벨이 지정된 머신러닝 데이터 세트 만들기

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

작업 7. 머신러닝 모델을 만들어 시드와 팀 이름을 기반으로 승자 예측

데이터 탐색을 마쳤으니 이제 머신러닝 모델을 학습시킬 시간입니다.

  • 아래 질문에 답변하며 이 섹션을 정리하세요.

모델 유형 선택하기

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

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

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

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

여기서 다루는 분류 모델은 로지스틱 회귀라고 하는, 널리 사용되는 통계 모델을 사용하여 머신러닝을 수행합니다.

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

참고: 머신러닝 모델은 여러 종류가 있으며 분류 작업 실행에 따른 복잡도는 각기 다릅니다. Google에서 일반적으로 사용되는 기술은 신경망을 이용한 딥 러닝입니다.

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

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

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

  1. 탐색기 탭에서 프로젝트 ID 옆에 있는 작업 보기 아이콘을 클릭하고 데이터 세트 만들기를 선택합니다.

데이터 세트 만들기 메뉴 옵션을 표시하는 탐색기 탭

  1. 그러면 데이터 세트 만들기 대화 상자가 열립니다. 데이터 세트 ID를 bracketology로 설정하고 데이터 세트 만들기를 클릭합니다.

데이터 세트 만들기 대화 상자

  1. 이제 쿼리 편집기에서 다음 명령어를 실행합니다.
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를 선택하는 것입니다.

참고: 가능한 모든 모델 옵션 및 설정의 목록을 보려면 BigQuery ML 문서 가이드를 참조하세요. 이 경우에는 이미 이름이 'label'인 필드가 있으므로 모델 옵션 'input_label_cols'를 사용하여 라벨 열을 지정하지 않아도 됩니다.

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

결과 메시지를 표시하는 쿼리 결과

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

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 머신러닝 모델 만들기

모델 학습 세부정보 보기

  • 모델 세부정보에서 아래로 스크롤하여 학습 옵션 섹션으로 이동하면 모델이 학습하기 위해 실제로 수행했던 반복 내용을 볼 수 있습니다.

머신러닝을 사용해 본 경험이 있다면 OPTIONS 문에서 값을 정의하여 이런 하이퍼파라미터(모델 실행 전 설정되는 옵션)를 모두 맞춤설정할 수 있습니다.

머신러닝을 처음 사용해 본다고 하더라도 설정되지 않은 모든 옵션에 대해서는 BigQuery ML이 기본값을 알아서 설정하므로 별다른 작업을 하지 않아도 됩니다.

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

모델 학습 통계 보기

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

머신러닝 모델은 이러한 직관 없이 학습 프로세스를 시작하고 각 특성의 가중치를 일반화하여 무작위로 부여합니다.

학습 프로세스를 거치면서 모델은 각 특성에 가장 알맞은 가중치를 부여하는 경로를 최적화합니다. 학습을 실행할 때마다 모델은 학습 데이터 손실평가 데이터 손실을 최소화하기 위해 노력합니다.

평가에 대한 최종 손실이 학습에 대한 최종 손실에 비해 현저히 높다면 모델이 일반화 가능한 관계를 학습하는 대신 과적합 상태이거나 학습 데이터를 기억하고 있는 것입니다.

학습 탭을 클릭하고 보기 옵션 아래에서 테이블을 선택하면 모델이 수행한 학습의 횟수를 조회할 수 있습니다.

각 실행 명령마다 모델은 약 20초 동안 학습을 3회 반복합니다. 조회 결과는 다양할 것입니다.

반복, 학습 데이터 손실, 평가 데이터 손실, 학습률, 완료 시간(초) 제목 아래에 4개의 데이터 행이 있는 모델 통계 테이블

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

학습을 마치면 가중치를 조사하여 어떤 특성이 모델에 가장 중요했는지 볼 수 있습니다.

  • 쿼리 편집기에서 다음 명령어를 실행합니다.
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

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

결과 테이블의 행, 범주, 가중치 열 제목 아래에 10행의 데이터를 표시하는 쿼리 결과 페이지

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

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

작업 8. 모델 성능 평가

모델의 성능을 평가하려면 학습된 모델에 ML.EVALUATE를 실행하기만 하면 됩니다.

  • 쿼리 편집기에서 다음 명령어를 실행합니다.
SELECT * FROM ML.EVALUATE(MODEL `bracketology.ncaa_model`)

다음과 비슷한 출력이 표시됩니다.

ml 평가 결과를 표시하는 쿼리 결과

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

참고: 분류 모델의 경우, 출력에서 신경 써야 하는 측정항목이 모델 정확성만 있는 것은 아닙니다.

로지스틱 회귀를 수행했기 때문에 다음 모든 측정항목에 대한 모델 성능(1.0에 근접할수록 높은 성능)을 평가할 수 있습니다.

  • 정밀도: 분류 모델의 측정항목입니다. 정밀도는 모델이 양성 클래스를 정확히 예측한 빈도를 나타냅니다.
  • 재현율: '가능한 모든 양성 라벨 중에서 정확하게 식별한 모델은 몇 개입니까'라는 질문에 답하는 분류 모델의 측정항목입니다.
  • 정확성: 정확도는 분류 모델이 바르게 되었다고 예측하는 비율입니다.
  • f1_score: 모델 정확성을 나타내는 척도입니다. f1 점수는 정밀도와 재현율의 조화 평균입니다. f1 점수의 가장 좋은 값은 1입니다. 최저 값은 0입니다.
  • log_loss: 로지스틱 회귀에 사용된 손실 함수입니다. 모델 예측과 올바른 라벨 간의 차이 정도를 나타내는 척도입니다.
  • roc_auc: ROC 곡선 아래 영역입니다. 분류자가 무작위로 선택한 양성 예시가 실제로 양성일 가능성이 무작위로 선택한 음성 예시가 양성일 가능성보다 높다고 신뢰할 확률입니다.
  • 작업 9. 예측 실행

    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`) ) )

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

    새 테이블이 만들어졌음을 확인하는 결과 메시지를 표시하는 쿼리 결과

    내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 모델 성능 평가 및 테이블 만들기

    참고: 예측 결과를 테이블에 저장하면 위에 있는 쿼리를 계속 재실행할 필요 없이 유용한 정보를 쿼리할 수 있습니다.

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

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

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

    작업 10. 모델의 2018 NCAA 토너먼트 결과 예측 적중률 확인

    • 쿼리 편집기에서 다음 명령어를 실행합니다.
    SELECT * FROM `bracketology.predictions` WHERE predicted_label <> label

    다음과 비슷한 출력이 표시됩니다.

    예측 출력을 표시하는 쿼리 결과 화면

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

    작업 11. 모델의 예측에는 한계가 있음

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

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

    1. 쿼리 편집기에서 다음 명령어를 실행합니다.
    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

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

    승리/패배 예측 출력을 표시하는 쿼리 결과 화면

    예측: 모델의 예측 결과 1번 시드 버지니아 대학(Virginia)이 16번 시드인 UMBC를 상대로 87%의 신뢰도로 승리를 거둔다고 합니다. 타당한 예측입니다.

    실제로 무슨 일이 일어났는지 확인하려면 '16번 시드 UMBC가 1번 시드 버지니아를 상대로 기적의 역전승을 거두었습니다.' 동영상을 살펴봅니다.

    UMBC의 라이언 오돔 감독도 경기 후에 "믿을 수 없다는 말밖에 할 말이 없네요."라고 했을 정도입니다. 자세한 내용은 2018 UMBC 대 버지니아 남자 농구 경기 기사를 참조하세요.

    요약

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

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

    작업 12. 숙련된 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

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

    테이블이 교체되었음을 확인하는 쿼리 결과 문

    내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 숙련된 ML 모델 기능 사용

    작업 13. 새로운 특성 미리보기

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

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

    training_new_features 테이블 미리보기

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

    작업 14. 선택한 측정항목 해석

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

    opp_efficiency_rank

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

    opp_pace_rank

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

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

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

    작업 15. 새로운 모델 학습시키기

    • 쿼리 편집기에서 다음 명령어를 실행합니다.
    CREATE OR REPLACE MODEL `bracketology.ncaa_model_updated` OPTIONS ( model_type='logistic_reg') AS SELECT # this time, don't 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

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

    새 모델이 생성되었음을 확인하는 쿼리 결과 문

    작업 16. 새로운 모델의 성능 평가

    • 모델의 성능을 평가하려면 쿼리 편집기에서 다음 명령어를 실행합니다.
    SELECT * FROM ML.EVALUATE(MODEL `bracketology.ncaa_model_updated`)

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

    새 모델 통계 테이블을 표시하는 쿼리 결과 탭 페이지

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

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

    내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 새 모델 학습 및 평가

    작업 17. 모델이 학습한 내용 확인

    • 승/패 결과를 도출할 때 모델은 어떤 특성에 가장 가중치를 부여할까요? 쿼리 편집기에서 다음 명령어를 실행합니다.
    SELECT * FROM ML.WEIGHTS(MODEL `bracketology.ncaa_model_updated`) ORDER BY ABS(weight) DESC

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

    새 모델 검사 가중치 테이블을 표시하는 쿼리 결과 탭 페이지

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

    결과에서 볼 수 있듯이 상위 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년'이라는 요소가 어떤 팀에도 특별하게 작용하지 않았습니다.

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

    작업 18. 예측

    • 쿼리 편집기에서 다음 명령어를 실행합니다.
    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 ))

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

    새 예측 테이블이 생성되었음을 확인하는 쿼리 결과 문

    내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. ncaa_2018_predictions 테이블을 만드는 쿼리 실행

    작업 19. 예측 결과 분석

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

    • 쿼리 편집기에서 다음 명령어를 실행합니다.
    SELECT * FROM `bracketology.ncaa_2018_predictions` WHERE predicted_label <> label

    예측 분석 테이블을 표시하는 쿼리 결과 탭 페이지

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

    작업 20. 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

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

    새 모델 이변 테이블을 표시하는 쿼리 결과 화면

    가장 큰 이변은 이전 모델에서도 찾았던 것과 동일한 경기인 UMBC 대 버지니아 대학(Virginia)의 경기입니다. 이번이 '가장 심한 광란의' 3월이었나요? 기사에서 이변이 가득한 해였던 2018년 전체에 대해 자세히 알아보세요. 2019년에도 이렇게 이변이 가득할까요?

    작업 21. 모델 성능 비교

    단순 모델(시드 비교)은 잘못 예측했는데 고급 모델은 정확히 예측한 경기가 있는지 알아볼까요?

    • 쿼리 편집기에서 다음 명령어를 실행합니다.
    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

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

    새 모델 테이블을 표시하는 쿼리 결과 화면

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

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

    작업 22. 2019년 '3월의 광란' 예측

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

    2019년 데이터 탐색하기

    • 다음 쿼리를 실행하여 최상위 시드를 찾으세요.
    SELECT * FROM `data-to-insights.ncaa.2019_tournament_seeds` WHERE seed = 1

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

    2019년 상위 시드 결과가 포함된 테이블을 표시하는 쿼리 결과 화면

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

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

    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)에 대한 예측이 포함된 테이블을 표시하는 쿼리 결과 화면

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

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

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

    수고하셨습니다

    BigQuery ML을 사용하여 NCAA 남자부 농구 토너먼트 승리 팀을 예측해 보았습니다.

    다음 단계/더 학습하기

    • 농구 측정항목 및 분석에 대해 더 자세히 알아보고 싶으신가요? Google Cloud NCAA 토너먼트 광고 및 예측을 담당한 팀의 추가 분석을 확인하세요.
    • 다음 실습을 확인하세요.

    Google Cloud 교육 및 자격증

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

    설명서 최종 업데이트: 2024년 3월 19일

    실습 최종 테스트: 2024년 3월 19일

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

    현재 이 콘텐츠를 이용할 수 없습니다

    이용할 수 있게 되면 이메일로 알려드리겠습니다.

    감사합니다

    이용할 수 있게 되면 이메일로 알려드리겠습니다.