階層型時系列予測
このチュートリアルでは、階層型時系列を生成する方法について説明します。このチュートリアルでは、同じデータに対して 2 つの時系列モデルを作成します。1 つは階層型予測を使用するモデル、もう 1 つは使用しないモデルです。これにより、モデルから返された結果を比較できます。
このチュートリアルでは、iowa_liquor.sales.sales
データを使用してモデルをトレーニングします。このデータセットでは、アイオワ州の一般公開の酒類販売データが使用され、さまざまな店舗で扱われている 100 万点を超える酒類商品に関する情報が含まれています。
このチュートリアルに進む前に、複数の時系列予測を行う方法について理解しておく必要があります。このトピックの概要については、Google アナリティクス データから複数の時系列を予測するのチュートリアルをご覧ください。
必要な権限
- データセットを作成するには、
bigquery.datasets.create
IAM 権限が必要です。 接続リソースを作成するには、次の権限が必要です。
bigquery.connections.create
bigquery.connections.get
モデルを作成するには、次の権限が必要です。
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
推論を実行するには、次の権限が必要です。
bigquery.models.getData
bigquery.jobs.create
BigQuery における IAM ロールと権限の詳細については、IAM の概要をご覧ください。
目標
このチュートリアルでは、次のものを使用します。
CREATE MODEL
ステートメント: 時系列モデルと階層型時系列モデルを作成します。ML.FORECAST
関数: 1 日の販売数の合計を予測します。
費用
このチュートリアルでは、Google Cloud の課金対象となる次のコンポーネントを使用します。
- BigQuery
- BigQuery ML
BigQuery の費用の詳細については、BigQuery の料金ページをご覧ください。
BigQuery ML の費用の詳細については、BigQuery ML の料金をご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery API.
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
(アクションを表示)> [データセットを作成] をクリックします。
[データセットの作成] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。
一般公開データセットは
US
マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
階層的な調整
多くの場合、時系列予測は、関心のあるさまざまな項目に基づいて分割または集計できます。これらは階層型時系列と呼ばれます。たとえば、州ごとの総人口を示す国勢調査データは、都市別や郵便番号別に分類できます。逆に、国や大陸ごとにデータを集計することもできます。
階層型予測を生成して調整するために使用できる手法はいくつかあります。次の例は、アイオワ州の酒類販売の階層構造を単純化したものです。
最下層には店舗レベルが示され、その後に郵便番号、市区町村、郡、州が続きます。階層型予測の目標は、各レベルのすべての予測を調整することです。たとえば、前の図では、クライブとデモインの予測を合計するとポーク郡の予測になります。同様に、ポーク郡、リン郡、スコット郡の予測は、アイオワ州の予測に加算されます。
レベルごとに調整された予測を生成するために使用できる一般的な手法がいくつかあります。その一つがボトムアップ アプローチです。この方法では、予測は階層の最下位で生成された後、他のレベルに合計されます。前の例では、各店舗の予測値を使用して、他のレベル(最初に郵便番号、次に市区町村など)の予測モデルを作成します。
時系列モデルを作成する
まず、アイオワ州の酒類販売データを使用して時系列モデルを作成します。
次の GoogleSQL クエリは、2015 年にポーク、リン、スコットの各郡で販売されたボトルの 1 日あたりの合計数を予測するモデルを作成します。CREATE MODEL
ステートメントで bqml_tutorial.liquor_forecast
というモデルを作成してトレーニングします。
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'], HOLIDAY_REGION = 'US') AS SELECT store_number, zip_code, city, county, date, SUM(bottles_sold) AS total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31') AND county IN ('POLK', 'LINN', 'SCOTT') GROUP BY store_number, date, city, zip_code, county;
OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
句で ARIMA ベースの時系列モデルを作成しています。デフォルトは auto_arima=TRUE
であるため、auto.ARIMA
アルゴリズムによって ARIMA_PLUS
モデルのハイパーパラメータが自動的に調整されます。アルゴリズムが多数の候補モデルを学習し、Akaike information criterion(AIC)が最も低い最適なモデルを選択します。holiday_region
オプションを US
に設定すると、時系列に米国の休日パターンがある場合に、米国の休日の時点をより正確にモデリングできます。
CREATE MODEL
クエリを実行してモデルを作成し、トレーニングします。
Google Cloud コンソールで、[BigQuery でクエリを実行] ボタンをクリックします。
クエリエディタに次の GoogleSQL クエリを入力します。
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'], HOLIDAY_REGION = 'US') AS SELECT store_number, zip_code, city, county, date, SUM(bottles_sold) AS total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31') AND county IN ('POLK', 'LINN', 'SCOTT') GROUP BY store_number, date, city, zip_code, county;
[実行] をクリックします。
クエリが完了するまでに約 37 秒かかります。完了後、モデル(
liquor_forecast
)が [エクスプローラ] ペインに表示されます。このクエリではCREATE MODEL
ステートメントを使用してモデルを作成するため、クエリの結果はありません。
時系列モデルの結果を調べる
モデルを作成したら、ML.FORECAST
関数を使用して予測結果を確認できます。
モデル liquor_forecast
に対して ML.FORECAST
関数を実行するには、FROM
句で関数を指定します。
デフォルトでは、このクエリはデータ内の一意の時系列の予測を返します。一意の時系列は、store_number
、zip_code
、city
、county
の各列で識別されます。
ML.FORECAST クエリを実行する手順は次のとおりです。
Google Cloud コンソールで、[BigQuery でクエリを実行] ボタンをクリックします。
クエリエディタに次の GoogleSQL クエリを入力します。
#standardSQL SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.liquor_forecast`, STRUCT(20 AS horizon, 0.8 AS confidence_level)) ORDER BY store_number, county, city, zip_code, forecast_timestamp
[実行] をクリックします。
クエリの実行には 5 秒ほどかかります。クエリの実行後、出力に次の結果が表示されます。
最初の時系列の予測がどのように表示されているのか見てみましょう(store_number=2190, zip_code=50314, city=DES MOINES, county=POLK)。他の行を見ると、他のグループの予測が表示されています。
通常、予測は一意の時系列ごとに生成されます。特定の郡に対する予測など、集計レベルの予測を生成するには、階層型予測を生成する必要があります。
階層予測を使用して時系列モデルを作成する
アイオワ州の酒類販売データを使用して、階層型の時系列予測を作成します。
次の GoogleSQL クエリでは、ポーク、リン、スコットの各郡で 2015 年に販売されたボトルの日次合計販売数の階層予測を生成するモデルを作成します。CREATE MODEL
ステートメントで bqml_tutorial.liquor_forecast_hierarchical
というモデルを作成してトレーニングします。
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_hierarchical` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'], HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'], HOLIDAY_REGION = 'US') AS SELECT store_number, zip_code, city, county, date, SUM(bottles_sold) AS total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31') AND county IN ('POLK', 'LINN', 'SCOTT') GROUP BY store_number, date, city, zip_code, county;
HIERARCHICAL_TIME_SERIES_COLS
パラメータは、一連の列に基づいて階層予測を作成することを示します。これらの列はそれぞれ統合され、集計されます。たとえば、前述のクエリでは、store_number
が統合され、county
、city
、zip_code
の予測が表示されます。zip_code
と store_number
の両方が統合され、county
と city
の予測が表示されます。列の順序で階層構造を定義するため、これは重要になります。
CREATE MODEL
クエリを実行してモデルを作成し、トレーニングします。
Google Cloud コンソールで、[BigQuery でクエリを実行] ボタンをクリックします。
クエリエディタに次の GoogleSQL クエリを入力します。
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_hierarchical` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'zip_code', 'city', 'county'], HIERARCHICAL_TIME_SERIES_COLS = ['zip_code', 'store_number'], HOLIDAY_REGION = 'US') AS SELECT store_number, zip_code, city, county, date, SUM(bottles_sold) AS total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE('2015-01-01') AND DATE('2015-12-31') AND county IN ('POLK', 'LINN', 'SCOTT') GROUP BY store_number, date, city, zip_code, county;
[実行] をクリックします。
クエリが完了するまでに約 45 秒かかります。完了後、モデル(
bqml_tutorial.liquor_forecast_hierarchical
)が [エクスプローラ] ペインに表示されます。このクエリではCREATE MODEL
ステートメントを使用してモデルを作成するため、クエリの結果はありません。
階層型時系列モデルの結果を調べる
Google Cloud コンソールで、[BigQuery でクエリを実行] ボタンをクリックします。
クエリエディタに次の GoogleSQL クエリを入力します。
#standardSQL SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.liquor_forecast_hierarchical`, STRUCT(30 AS horizon, 0.8 AS confidence_level)) WHERE city = 'LECLAIRE' ORDER BY county, city, zip_code, store_number, forecast_timestamp
[実行] をクリックします。
クエリの実行には 5 秒ほどかかります。クエリの実行後、出力に次の結果が表示されます。
ルクレア市の予測がどのように集計されて表示されているのか見てみましょう(store_number=NULL, zip_code=NULL, city=LECLAIRE, county=SCOTT)。残りの行を見ると、他のサブグループの予測が表示されています。次の図では、郵便番号 52753(store_number=NULL, zip_code=52753, city=LECLAIRE, county=SCOTT)の予測が集計されています。
データセットを削除する
プロジェクトを削除すると、プロジェクト内のデータセットとテーブルがすべて削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したデータセットを削除できます。
必要に応じて、Google Cloud コンソールで [BigQuery] ページを開きます。
ナビゲーションで、作成した bqml_tutorial データセットをクリックします。
ウィンドウの右側にある [データセットを削除] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。
[データセットの削除] ダイアログ ボックスでデータセットの名前(
bqml_tutorial
)を入力し、[削除] をクリックして確定します。
プロジェクトの削除
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
次のステップ
- 1 つのクエリでニューヨーク市のシティバイクの利用データから複数の時系列を予測する方法を学習する。
- ARIMA_PLUS を高速化して 100 万時系列を数時間で予測する方法を学習する。
- 機械学習集中講座で機械学習について学習する。
- BigQuery ML の概要で BigQuery ML の概要を確認する。
- Google Cloud コンソールの使用で、Google Cloud コンソールの詳細を確認する。