ブログ

Blog

絞り込んで表示する

2018.07.26 - 

BigQuery MLの線形回帰で電力需要予測やってみた

グルーヴノーツ コンサルタントの吉村です。
今朝(日本時間7月26日午前1時過ぎ)に発表されたBigQuery MLを試してみました。

BigQuery MLとはGoogleのDWHであるBigQuery上で線形回帰ロジスティック回帰を実現するものです。
もちろんBigQueryで動くのでモデルを作るところも並列で高速に処理されることが期待できます。

これまで線形回帰といえばR言語やPython、またはExcelの分析ツールアドイン(16項目制限有り)を使っていたかと思います。
これがBigQueryでやればクエリを書けばプログラミングはいらないしデータサイエンティストには便利ですよね。

さて実際に使ってみたいと思います。題材としてはもちろん電力需要で線形回帰でモデルを作って予測していきます。元ネタのデータはこの形です。

説明変数
・月(1〜12の整数が文字列として入っている)
・曜日(0〜6の整数が文字列として入っている)
・休日(0か1が文字列として入っている)
・天気(晴,曇,雨,雪が入っている)
・最低気温(少数を含む数値)
・最高気温(少数を含む数値)
・降水量(整数値)
・日中時間(整数値)
目的変数
・電力需要実績(整数値)

学習データ:2016/04/01〜2018/05/31
予測データ:2018/06/01〜2018/06/16

中身はこのような感じです。


モデル作成

次にこのデータを使ってモデルを作成します。モデルをクエリで作るって不思議な感じですね。
目的変数はlabelという項目名で抽出してあげないといけないみたいです。

# モデル作成
create model `kaiki_bqml.denryoku_model`
options(model_type='linear_reg') as
select
  month
 ,weekday
 ,holiday
 ,weather
 ,min_temp
 ,max_temp
 ,rainfall
 ,daytime
 ,power as label
from `kaiki_bqml.denryoku_data`
where key between cast('2016-04-01' as date) and cast('2018-03-31' as date)
;

モデルができたら右下のモデルに移動をクリックするとモデルの詳細情報が表示されました。

出来上がったモデルについて各種情報を見てみましょう。これらクエリを実行すると見れるようです。

# トレーニング情報
select * from ml.training_info(model `kaiki_bqml.denryoku_model`);

# 特徴の情報
select * from ml.feature_info(model `kaiki_bqml.denryoku_model`);

# 重みの情報
select * from ml.weights(model `kaiki_bqml.denryoku_model`);

重みは下の方も見てみましょう。

すごいですね。天気の日本語のカテゴリデータまでカテゴリごとの重みを算出しています。


予測

もちろん予測もクエリです。予測と同時に答えとの比較もしています。

# 予測と比較
with denryoku_predict as (
  select * from `kaiki_bqml.denryoku_data`
  where key between cast('2018-06-01' as date) and cast('2018-06-16' as date)
)
select
  predict.key as date
 ,predicted_power
 ,actual_power
 ,abs(predicted_power - actual_power) as error_power
from (
  select key,predicted_label as predicted_power
  from ml.predict(model `kaiki_bqml.denryoku_model`, table denryoku_predict)
) as predict
join (
  select key,power as actual_power from denryoku_predict
) as actual
on predict.key = actual.key
order by 1
;

結果が表示されました。この結果をそのままデータスタジオに出せるみたいです。これはいいですね。

クエリを書くだけで線形回帰のモデルを作って、予測もクエリでできるのはすごいですね。また冒頭でも書きましたが今回の数百件のデータではなく数万件ともっと多量のデータだったとしてもBigQueryなら楽にさばくだろうと考えるとBigQuery ML恐ろしいですね。さすがGoogleと言うところです。

せっかくのGoogleの新しい機能なのでMAGELLAN BLOCKSと連携して使えるように検討していこうと思います。

※「月は文字にキャストしたらカテゴリカル変数にしてくれんのかいな。」というご指摘をいただいたのでやってみたら普通にできたので修正いたしました。(2018/07/26)


※本ブログの内容や紹介するサービス・機能は、掲載時点の情報です。