arrow_back

BigQuery ML を使用した映画のレコメンデーション 2.5

ログイン 参加
700 以上のラボとコースにアクセス

BigQuery ML を使用した映画のレコメンデーション 2.5

ラボ 1時間 universal_currency_alt クレジット: 5 show_chart 上級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

BigQuery は、Google が提供する低コスト、NoOps のフルマネージド分析データベースです。BigQuery では、インフラストラクチャを所有して管理したりデータベース管理者を置いたりすることなく、テラバイト単位の大規模なデータでクエリを実行できます。また、SQL が採用されており、従量課金制というメリットもあります。そのため、ユーザーは有用な情報を得るためのデータの分析に専念することができます。

BigQuery の機能である BigQuery 機械学習(BigQuery ML)を使用すれば、最小限のコーディングで機械学習モデルの作成、トレーニング、評価、予測が可能になります。

協調フィルタリングは、ユーザーに合わせたおすすめの商品情報、または商品ごとのユーザー ターゲティング情報を生成する機能です。ユーザー ID、アイテム ID、ユーザーによる商品の評価の 3 つの列が含まれるテーブルが出発点となります。このテーブルはスパースにできます。つまり、ユーザーはすべての商品を評価する必要がありません。協調フィルタリングはこの評価だけに基づいて、類似するユーザーや商品を探し出したり、あるユーザーが未見の商品に与えると予想される評価を判断したりします。この判断に基づいて、最も高い評価が得られそうな商品をユーザーにすすめたり、最も高い評価を与えそうなユーザーに商品をターゲティングしたりできます。

レコメンデーション システムの具体的な動作を説明するために、MovieLens データセットを使用します。MovieLens は GroupLens から公開されている映画レビューのデータセットです。GroupLens はミネソタ大学コンピュータ サイエンス コンピュータ工学科の研究所で、アメリカ国立科学財団の資金支援により運営されています。

目標

このラボでは、次のタスクの実行方法について学びます。

  • MovieLens データを格納して読み込むための BigQuery データセットを作成する
  • MovieLens データセットを確認する
  • トレーニング済みモデルを使用して BigQuery でおすすめ情報を生成する
  • ユーザーに合わせた商品予測を個別または一括で作成する

環境を設定する

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

BigQuery コンソールを開く

  1. Google Cloud Console で、ナビゲーション メニュー > [BigQuery] を選択します。

[Cloud Console の BigQuery へようこそ] メッセージ ボックスが開きます。このメッセージ ボックスにはクイックスタート ガイドへのリンクと、UI の更新情報が表示されます。

  1. [完了] をクリックします。

タスク 1. MovieLens データを取得する

このタスクでは、コマンドラインを使用して、MovieLens データを格納するための BigQuery データセットを作成します。その後、MovieLens データを Cloud Storage バケットからデータセットに読み込みます。

Cloud Shell エディタを起動する

BigQuery データセットを作成し、MovieLens データを読み込むには、Cloud Shell を使用します。

  1. Google Cloud コンソールで、Cloud Shell をアクティブにするアイコン(Cloud Shell アイコン)をクリックします。
  2. プロンプトが表示されたら、[続行] をクリックします。

BigQuery データセットを作成して読み込む

  1. 次のコマンドを実行して、BigQuery データセットを movies という名前で作成します。
bq --location=US mk --dataset movies
  1. Cloud Shell で以下のコマンドを別々に実行します。
bq load --source_format=CSV \ --location=US \ --autodetect movies.movielens_ratings \ gs://dataeng-movielens/ratings.csv bq load --source_format=CSV \ --location=US \ --autodetect movies.movielens_movies_raw \ gs://dataeng-movielens/movies.csv

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 MovieLens データを取得する

タスク 2. データを表示

このタスクでは、クエリエディタを使用して MovieLens データセットを探索、確認します。

  1. BigQuery の SQL クエリで次のクエリを実行します。
SELECT COUNT(DISTINCT userId) numUsers, COUNT(DISTINCT movieId) numMovies, COUNT(*) totalRatings FROM movies.movielens_ratings

このデータセットには 13 万 8,000 人以上のユーザー、約 2 万 7,000 本の映画、2,000 万件を少し超える数の評価が含まれていることがわかります。

  1. 次のクエリを実行して、最初の数本の映画データをチェックします。
SELECT * FROM movies.movielens_movies_raw WHERE movieId < 5

[Row]、[movieID]、[title]、[genres] の列見出しの下に 4 行のデータを表示している出力結果表

  1. genres 列は書式設定済み文字列であることがわかります。genres を解析して配列に収め、movielens_movies というテーブルに配置します。
CREATE OR REPLACE TABLE movies.movielens_movies AS SELECT * REPLACE(SPLIT(genres, "|") AS genres) FROM movies.movielens_movies_raw

必要であれば、さらにクエリを実行してデータセットを整えます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 データを確認する

タスク 3. 協調フィルタリングを使用して作成されたトレーニング済みモデルを評価する

このタスクでは、行列分解を使用して生成されたトレーニング済みモデルの指標を確認します。

行列分解は協調フィルタリングの手法の一つで、ユーザー因子とアイテム因子という 2 つのベクターを使用します。ユーザー因子は user_id を低次元に表現したものであり、同じくアイテム因子は item_id を低次元に表現したものです。

データの行列分解を実行するために、一般的な BigQuery ML 構文を使用します。ただし、ここでは model_typematrix_factorization とし、協調フィルタリングの設定における各列の役割を指定する必要があります。

行列分解を映画評価データに適用するには、BigQuery ML クエリを実行してモデルを作成する必要があります。ただし、このモデルタイプの作成には最長 40 分かかります。また、Qwiklabs 環境で提供されるリソースとは異なる予約指向のリソースが含まれた Google Cloud プロジェクトが必要です。

このラボの残りの部分で使用するモデルは、Cloud トレーニング プロジェクトの cloud-training-demos BigQuery データセットで作成されています。

注: 以下のクエリはあくまで参照用です。実際のプロジェクトではこのクエリを実行しないでください

CREATE OR REPLACE MODEL movies.movie_recommender OPTIONS (model_type='matrix_factorization', user_col='userId', item_col='movieId', rating_col='rating', l2_reg=0.2, num_factors=16) AS SELECT userId, movieId, rating FROM movies.movielens_ratings
注: num_factors オプションと l2_reg オプションの数値は、このモデルのトレーニングを高速化するためにテストを繰り返して選ばれたものです。
  • トレーニング済みモデルの指標を表示するには、次のクエリを実行します。
SELECT * FROM ML.EVALUATE(MODEL `cloud-training-demos.movielens.recommender`)

タスク 4. おすすめ情報を生成する

このタスクでは、トレーニング済みモデルを使用しておすすめ情報を生成します。

userId が 903 のユーザーにおすすめできる最適なコメディ映画を探しましょう。

  1. 次のクエリを入力します。
SELECT * FROM ML.PREDICT(MODEL `cloud-training-demos.movielens.recommender`, ( SELECT movieId, title, 903 AS userId FROM `movies.movielens_movies`, UNNEST(genres) g WHERE g = 'Comedy' )) ORDER BY predicted_rating DESC LIMIT 5

このユーザーが過去に観て評価した映画のリストが表示されます。

  1. これらの映画を除外します。
SELECT * FROM ML.PREDICT(MODEL `cloud-training-demos.movielens.recommender`, ( WITH seen AS ( SELECT ARRAY_AGG(movieId) AS movies FROM movies.movielens_ratings WHERE userId = 903 ) SELECT movieId, title, 903 AS userId FROM movies.movielens_movies, UNNEST(genres) g, seen WHERE g = 'Comedy' AND movieId NOT IN UNNEST(seen.movies) )) ORDER BY predicted_rating DESC LIMIT 5

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 おすすめ情報を生成する

タスク 5. ユーザーのターゲティングを適用する

このタスクでは、特定のユーザーが高く評価しそうな映画を見つける方法を確認します。自社のある商品について、それを高く評価しそうなユーザーを見つけることが必要な場合があります。

movieId=96481 の映画には 1 件の評価しかありませんが、もっと多くのレビューを集めるために、この映画を高く評価しそうな 100 人のユーザーにクーポンを送ろうと考えています。

  • このようなユーザーを特定するには、次のクエリを実行します。
SELECT * FROM ML.PREDICT(MODEL `cloud-training-demos.movielens.recommender`, ( WITH allUsers AS ( SELECT DISTINCT userId FROM movies.movielens_ratings ) SELECT 96481 AS movieId, ( SELECT title FROM movies.movielens_movies WHERE movieId=96481) title, userId FROM allUsers )) ORDER BY predicted_rating DESC LIMIT 100

ターゲットにする 100 人のユーザーが出力されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ユーザーのターゲティングを適用する

タスク 6. ユーザーと映画の一括予測を実行する

このタスクでは、クエリを実行してユーザーと映画の一括予測を取得します。

すべてのユーザーと映画にこの予測を一括で実行できるでしょうか。前のクエリのようにユーザーや映画を指定して取得するのではなく、既成の便利な関数を使用して、トレーニング中に検出されたすべての movieIduserId に一括予測を実行します。

  • 次のクエリを入力してバッチ予測を取得します。
SELECT * FROM ML.RECOMMEND(MODEL `cloud-training-demos.movielens.recommender`) LIMIT 100000

LIMIT コマンドを使用しないと、デフォルトの設定では結果が多すぎて返されませんが、このモデルで予測可能なタイプは、出力から判断できます。

前のセクションで説明した方法で、ユーザーが過去に鑑賞して評価した映画を除外できます。鑑賞済みの映画をデフォルトで除外しないのには理由があります。たとえばレストランのおすすめで考えると、過去に高く評価したレストランがおすすめ情報に含まれることをユーザーが当然視するケースがあるからです。

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。