BigQuery MLの時系列データで休日効果を使ってみる

2021.09.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のkobayashiです。

以前のエントリにてBigQuery MLで時系列データを扱いましたがARIMAモデルを作成する際にholiday effects(休日効果) が週周期でも使える様になっていたのでこのオプションを試してみました。

以前の記事

モデルの作成

holiday effectsを使うのは非常に簡単でCREATE MODEL文のオプションにHOLIDAY_REGION ='国or地域コード'を追加するだけです。 ただholiday effectsオプションのドキュメント にも記載がありますが使うためには2点注意点があります。

  • 入力する時系列データがdailyweekly
  • 入力する時系列データが1年より長いデータ

前回は一般公開データセットのGoogleAnalyticsのデータを使いましたがこのデータについては、seasonal_periodsがweeklyで片方の条件を満たしていましたがデータ数がちょうど1年分しかなかったためholiday effectsを使ったモデルを作成できませんでした。したがって今回は新しい時系列データとして、一般公開データセットの「COVID-19 Open Data」を使います。

COVID-19 Open Data – マーケットプレイス – Google Cloud Platform

COVID-19 Open Dataの日本のデータでARIMAモデル作成するために以下のデータを元データとして使用します。

SELECT date
     , cumulative_confirmed - lag(cumulative_confirmed) over (partition by country_code order by date) new_confirmed
FROM ` bigquery- public - data.covid19_open_data.covid19_open_data `
where country_code = 'JP'
  and subregion1_code is null
order by date desc
;

holiday effectsを使わないモデルの作成

この時系列データを元にARIMAモデルを作成するのですが、holiday effectsオプションを使った場合と使わない場合を比較したいため、まずはholiday effectsオプションを使わないモデルを作成します。

CREATE
OR
REPLACE
MODEL data_set.covid19_arima_model
OPTIONS
 (model_type = 'ARIMA_PLUS',
  time_series_timestamp_col = 'date',
  time_series_data_col = 'new_confirmed',
  auto_arima = TRUE,
  data_frequency = 'AUTO_FREQUENCY',
  decompose_time_series = TRUE
) AS
SELECT date
     , cumulative_confirmed - lag(cumulative_confirmed) over (partition by country_code order by date) new_confirmed
FROM ` bigquery- public - data.covid19_open_data.covid19_open_data `
where country_code = 'JP'
  and subregion1_code is null
order by date desc
;

1分ほどでモデルが作成されるので作成されたモデルの評価指数を見てみると以下の様になります。

休日効果ありの項目がFalseになっています。

holiday effectsを使ったモデルの作成

次にholiday effectsを使っ他モデルを作成します。日本のデータを使っていますのでholiday effectsを使わないクエリにHOLIDAY_REGION ='JP'を追加するだけです。

CREATE
OR
REPLACE
MODEL data_set.covid19_arima_model_holiday
OPTIONS
 (model_type = 'ARIMA_PLUS',
  time_series_timestamp_col = 'date',
  time_series_data_col = 'new_confirmed',
  auto_arima = TRUE,
  data_frequency = 'AUTO_FREQUENCY',
  decompose_time_series = TRUE,
  HOLIDAY_REGION='JP'
) AS
SELECT date
     , cumulative_confirmed - lag(cumulative_confirmed) over (partition by country_code order by date) new_confirmed
FROM ` bigquery- public - data.covid19_open_data.covid19_open_data `
where country_code = 'JP'
  and subregion1_code is null
order by date desc
;

こちらも先程と同様に作成されたモデルの評価指標を確認してみます。

こちらの場合は休日効果ありの項目がTrueになりholiday effectsが効いていることがわかります。また尤度、AIC、バリアンスの3つの評価指標がholiday effectsを使っていない場合と比較して改善していることがわかります。

まとめ

BigQuery MLで時系列データのARIMAモデルを作成する際にholiday effectsを使ってその効果を見てみました。HOLIDAY_REGIONのオプションが使える時系列データの場合には積極的に試してみたいと思います。

最後まで読んで頂いてありがとうございました。