arrow_back

BigQuery ML を使用した需要予測の構築

参加 ログイン
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

BigQuery ML を使用した需要予測の構築

Lab 1時間 universal_currency_alt クレジット: 1 show_chart 入門
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP852

Google Cloud セルフペース ラボ

概要

BigQuery は、Google が低価格で提供する NoOps のフルマネージド分析データベースです。テラバイト単位の大規模なデータをクエリすることが可能で、インフラストラクチャを所有して管理したりデータベース管理者を配置したりする必要はありません。

BigQuery の機能である BigQuery ML(BQML)を使用すれば、最小限のコーディングで ML モデルの作成、トレーニング、評価、予測が可能になります。詳しくは、こちらの BigQuery ML の動画をご覧ください。

このラボでは BQML を使用して、複数の商品の需要を予測する時系列モデルを構築する方法を学びます。NYC Citi Bike Trips という一般公開データセットを使用して、過去のデータから次の 30 日間の需要を予測する方法について学習します。自転車を小売の販売商品、自転車ステーションを店舗だと考えてください。

こちらの動画を視聴して、需要予測のサンプル ユースケースを確認してください。

目標

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

  • BigQuery を使用して一般公開データセットを見つける。
  • 一般公開データセット NYC Citi Bike Trips に対してクエリを実行して探索する。
  • バッチ予測に使用するトレーニングと評価のデータセットを作成する。
  • BQML で予測(時系列)モデルを作成する。
  • 機械学習モデルの性能を評価する。

環境を設定する

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

BigQuery コンソールを開く

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

[Cloud コンソールの BigQuery へようこそ] メッセージ ボックスが開きます。このメッセージ ボックスには、クイックスタート ガイドとリリースノートへのリンクが表示されます。

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

BigQuery コンソールが開きます。

タスク 1. NYC Citi Bike Trips データセットの探索

ニューヨーク市の自転車の移動に関する一般公開データセットを使用します。 このデータセットには Google Cloud コンソール内の Marketplace でアクセスできます。 BigQuery なら、[エクスプローラ] インターフェースから一般公開データセットに直接アクセスできて簡単です。

  1. [追加] を選択します。

[+ データを追加] ボタンの周囲に緑色の四角形が表示されている、BigQuery の [エクスプローラ] ページ

  1. [その他のソース] にある [公開データセット] を選択します。

  2. 「bikes」で検索して、NYC Citi Bike Trips タイルをクリックします。

「bikes」という単語の検索結果が表示されているデータセット ページ

  1. [データセットを表示] ボタンをクリックして、BigQuery でデータセットを開きます。

[データセットを表示] ボタンが表示されている NYC Citi Bike Trips のポップアップ

問題: ニューヨーク市で自転車を借りられる場所をいくつか挙げてください。

次は、この問題に答えられるようにクエリを実行します。

  1. エディタタブをクリックして、次の SQL コードをクエリエディタに追加します。
SELECT bikeid, starttime, start_station_name, end_station_name, FROM `bigquery-public-data.new_york_citibike.citibike_trips` WHERE starttime is not null LIMIT 5
  1. [実行] をクリックします。
  2. 次のようなテーブル構造が表示されます。
bikeid starttime start_station_name end_station_name
1 18447 2013-09-16T19:22:43 9 Ave & W 22 St W 27 St & 7 Ave
2 22598 2015-12-30T13:02:38 E 10 St & 5 Ave W 11 St & 6 Ave
3 28833 2017-09-02T16:27:37 Washington Pl & Broadway Lexington Ave & E 29 St
4 21338 2017-11-15T06:57:09 Hudson St & Reade St Centre St & Chambers St
5 19888 2013-11-07T15:12:07 W 42 St & 8 Ave W 56 St & 6 Ave

これは、ニューヨーク市で自転車を借りられるステーションの場所を示すリストです。これで、NYC Citi Bike Trips データセットに対してクエリを実行する方法がわかりました。

完了したタスクをテストする

BigQuery はデータを通じて問題の答えを得るのに適したツールです。 クエリ構文を学習することで、データを通じて分析情報を取得できるようになります。

今実行したクエリについて考えてみましょう。

別のタイプのクエリを試してみます。データセットをフィルタして、より詳細な情報を表示させた方がよいユースケースもあるかもしれません。

次の例では、BigQuery を使用して期間を指定しています。

  1. 前のクエリを次のように置き換えます。
SELECT EXTRACT (DATE FROM TIMESTAMP(starttime)) AS start_date, start_station_id, COUNT(*) as total_trips FROM `bigquery-public-data.new_york_citibike.citibike_trips` WHERE starttime BETWEEN DATE('2016-01-01') AND DATE('2017-01-01') GROUP BY start_station_id, start_date LIMIT 5 注: 上記のクエリで登場した新しいキーワード:
  • GROUP BY: 同じ値を持つデータをグループ化する
    1. [実行] をクリックします。

    次のような結果が返されます。

    start_date start_station_id total_trips
    1 2016-01-27 3119 15
    2 2016-04-07 3140 83
    3 2016-08-15 254 109
    4 2016-05-10 116 217
    5 2016-07-07 268 151
    注: データは元の状態から変換されています。データを変換するスキルがあると、自分が所有していないデータセットを利用する際に便利です。

  • start_date: タイムスタンプの日付部分
  • total_trip: 行の数
  • これで、クエリ結果を期間でフィルタする方法がわかりました。

    完了したタスクをテストする

    クエリを作成するにはデータを操作するコマンドの学習が必要です。 2 つ目のクエリでは、日付とステーション名で自転車の利用をグループ化できます。

    [進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 NYC Citi Bike Trips データセットの探索

    タスク 2. クリーンアップしたトレーニング データ

    2 つ目のクエリでは、日付と出発ステーションが同じ行を 1 つにまとめ、その日の自転車の利用数を得ました。このデータはテーブルまたはビューとして保存できます。

    次のセクションでは、トレーニング データで次の構造を作ります。

    種類 名前
    データセット bqmlforecast
    テーブル training_data

    データセットを作成する

    1. 「Qwiklabs」で始まるプロジェクトの横にある「アクションを表示」アイコンをクリックし、[データセットを作成] ボタンを表示します。
    2. [データセットを作成] を選択します。
    3. データセット名として「bqmlforecast」と入力します。
    4. [テーブルの有効期限を有効にする] ボックスをオンにして、[デフォルトのテーブル最長存続期間] に 1 日と入力します。
    5. [データセットを作成] ボタンを選択します。

    これで、自分のデータをホストするデータセットを用意できました。

    テーブルを作成する

    この時点では作成済みのデータはありません。クエリを実行して結果をテーブルに保存し、この状況を修正します。

    1. [クエリを新規作成] ボタンをクリックします。
    2. 次のクエリを実行してデータを生成します。
    SELECT DATE(starttime) AS trip_date, start_station_id, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york_citibike.citibike_trips` WHERE starttime BETWEEN DATE('2014-01-01') AND ('2016-01-01') AND start_station_id IN (521,435,497,293,519) GROUP BY start_station_id, trip_date 注: IN 句では、トレーニング データを減らすために、モデルに含めるステーションを 5 つだけ選択しています。すべてを含んだモデルをトレーニングするには、このラボよりも多くの時間が必要になります。このクエリはモデルをトレーニングする際の基礎として使用できます。
    1. [結果を保存] を選択します。
    2. プルダウン メニューで [BigQuery テーブル] を選択します。
    3. [データセット] には [bqmlforecast] を選択します。
    4. [テーブル] には「training_data」という名前を追加します。
    5. [エクスポート] をクリックします。

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

    タスク 3. モデルのトレーニング

    次のクエリでは、トレーニング データを使用して ML モデルを作成します。 作成したモデルを使用すると、需要予測を実行できるようになります。

    注: 下のクエリでは、時系列の予測に ARIMA アルゴリズムを使用しています。 利用可能な他のアルゴリズムについては、BigQuery ML のドキュメントをご覧ください。
    1. 次のクエリをエディタに入力します。
    CREATE OR REPLACE MODEL bqmlforecast.bike_model OPTIONS( MODEL_TYPE='ARIMA', TIME_SERIES_TIMESTAMP_COL='trip_date', TIME_SERIES_DATA_COL='num_trips', TIME_SERIES_ID_COL='start_station_id', HOLIDAY_REGION='US' ) AS SELECT trip_date, start_station_id, num_trips FROM bqmlforecast.training_data
    1. [実行] をクリックしてトレーニングを開始します。
    2. BigQuery によるモデルのトレーニングが開始されます。トレーニングの完了には約 2 分かかります。待っている間に、ここで行われている処理の内容について確認しておきましょう。

    BigQuery ML で時系列モデルをトレーニングする場合、複数のモデル / コンポーネントがモデル作成パイプラインで使用されます。ARIMA は、BigQuery ML で利用可能なコア アルゴリズムの一つです。

    以下、使用されるコンポーネントをおおむね実行される順序で列挙します。

    • 事前加工: 入力時系列に対する自動クリーニング調整。欠損値、タイムスタンプの重複、異常値の急増などを調整します。また、時系列履歴の急激なレベル変更にも対応します。
    • 祝日効果: BigQuery ML で時系列モデルを作成する場合は、祝日効果を加味することもできます。デフォルトでは、祝日効果のモデリングは無効になっています。ただし、このデータは米国のデータであり、最小限である 1 年分の日次データがあるため、任意の HOLIDAY_REGION を指定することもできます。祝日効果を有効にすると、祝日に見られる異常な増大と減少が異常として処理されなくなります。利用できる地域の一覧については、ドキュメントの HOLIDAY_REGION をご覧ください。
    • 季節変動と長期変動の分解: LOgical regrESSion(Loess STL)アルゴリズムによる季節変動と長期変動の分解を使用します。二重指数平滑(ETS)アルゴリズムを使用した季節性の推定。
    • トレンド モデリング: ARIMA モデルと auto.ARIMA アルゴリズムを使用して、ハイパーパラメータを自動調整します。auto.ARIMA では、p、d、q、ドリフトなど、多くの候補モデルが並行してトレーニング、評価されます。赤池情報量規準(AIC)が最も低いモデルが最適なモデルになります。

    時系列モデルをトレーニングして 1 つの商品の需要を予測することも、複数の商品の需要を同時に予測することもできます(予測する商品が何千点、何百万点もある場合には非常に便利です)。

    複数の商品の需要を同時に予測する場合は、複数のパイプラインが並行して実行されます。

    この例では、1 つのモデル作成文で複数のステーションについてモデルをトレーニングしているため、TIME_SERIES_ID_COL というパラメータを start_station として指定する必要があります。

    [モデルの詳細] セクションと [トレーニング オプション] セクションが表示されている、bike_model の [詳細] タブページ

    1 つのアイテムの需要のみを予測する場合は、TIME_SERIES_ID_COL を指定する必要はありません。

    モデルのトレーニングが正常に完了したら、緑色のチェックマークが表示されます。これで、完成したモデルを使用して予測を実行できます。

    モデルのトレーニングにまだ時間がかかっている場合は、こちらの YouTube 動画をご覧ください。別のデータセットを使用して、このラボと同様の需要予測ソリューションを構築してデプロイする方法を説明しています。このラボは一定の時間内に完了する必要があるので、必ず戻ってきてください。

    1. トレーニング ジョブが完了したら、結果タブの [モデルに移動] をクリックします。

    今実行したクエリについて考えてみましょう。

    [進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 モデルのトレーニング

    タスク 4. 時系列モデルの評価

    こちらの動画を見て、BigQuery ML における時系列モデルの仕組みを理解してください。

    作成したモデルにはクエリを実行できます。前のクエリをベースにして、新しいモデルが利用できるようになりました。ML.EVALUATE 関数を使用すると、作成されたすべてのモデルの評価指標(モデルごとに 1 行)を確認できます。

    • 先ほど作成した時系列モデルに対してクエリを実行します。
    SELECT * FROM ML.EVALUATE(MODEL bqmlforecast.bike_model)

    上のクエリを実行すると、下の画像のような結果が表示されます。

    クエリ結果の表

    トレーニング データに含まれているステーションごとに 1 つ、合計 5 つのトレーニングされたモデルがあります。

    • 最初の 4 列(non_seasonal_{p,d,q}has_drift)は、ARIMA モデルの定義です。
    • その後の 3 つの指標(log_likelihoodAICvariance)は、ARIMA モデルの適合プロセスに関連するものです。

    適合プロセスでは、時系列ごとに auto.ARIMA アルゴリズムが使用され、最適な ARIMA モデルが決定されます。 これらの指標のうち、通常は AIC を最もよく使用します。AIC は、時系列モデルがデータにどれだけ適合するかを評価するための指標で、複雑すぎるモデルにはペナルティを与えます。

    最後に、5 つのステーションで検出された seasonal_periods が WEEKLY と YEARLY で定義されています。

    別の質問も試してみましょう。

    [進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 時系列モデルの評価

    タスク 5. モデルを使用した予測の実行

    期間に設定された以降の n 個の値を予測する ML.FORECAST を使用して、予測を行います。

    また、予測値が予測区間内に収まる割合である confidence_level を変更することもできます。

    下のコードでは予測期間が「30」となっています。トレーニング データは日次データだったので、これは次の 30 日間の予測を行うことを意味します。

    1. 次のコードを実行し、トレーニング済みモデルを使用して次の 30 日間の予測を行います。
    DECLARE HORIZON STRING DEFAULT "30"; #予測する値の数 DECLARE CONFIDENCE_LEVEL STRING DEFAULT "0.90"; EXECUTE IMMEDIATE format(""" SELECT * FROM ML.FORECAST(MODEL bqmlforecast.bike_model, STRUCT(%s AS horizon, %s AS confidence_level) ) """, HORIZON, CONFIDENCE_LEVEL)
    1. 次のように表示されたら、2 番目の [結果を表示] をクリックします。

    2 件のジョブが表示されている [すべての結果] ページ

    次のような結果が表示されます。

    すべてのクエリ結果を示す結果の表

    注: 期間が 30 に設定されていたため、start_station_id ごとに 30 日分の予測が結果に含まれています。 各予測値には、confidence_level が与えられた場合の prediction_interval上限下限も表示されます。

    SQL スクリプトでは、期間と confidence_level の入力をパラメータ化できるよう、DECLAREEXECUTE IMMEDIATE を使用しています。

    HORIZON 変数と CONFIDENCE_LEVEL 変数を使用すると、後で値をより簡単に調整できるため、コードの可読性と保守性を向上させることができます。

    この構文の動作について詳しくは、クエリ構文のリファレンスをご覧ください。

    今実行したクエリについて考えてみましょう。

    上で説明したクエリのほかに、BigQuery ML ではクエリのスケジューリングもサポートされています。スケジュールされたクエリについて詳しくは、スケジュールされたクエリを使用したモデルの再トレーニングのスケジューリングと自動化についての動画をご覧ください。

    [進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 モデルを使用した予測の実行

    タスク 6. 探索できるその他のデータセット

    お疲れさまでした

    需要予測を実行するための ML モデルを BigQuery で構築できました。

    クエストを完了する

    このセルフペース ラボは、「Applying BQML's Classification, Regression, and Demand forecasting for Retail Applications」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められてバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。クエストに登録すると、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。

    次のステップと詳細情報

    このテーマについてデベロッパー アドボケイト Polong Lin が説明しています。詳しくは以下をご覧ください。

    需要予測の別のユースケースを紹介します。

    このラボで使用したツールの詳細は以下で確認できます。

    Google Cloud トレーニングと認定資格

    Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

    マニュアルの最終更新日: 2023 年 10 月 3 日

    ラボの最終テスト日: 2023 年 10 月 5 日

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