GoogleAnalytics360と機械学習で売上高予測モデルを構築 2/2

20190318-e

3-2:モデルの作成
次に、線形回帰モデルを作成する。以下のSQLを実行すればモデルの作成が始まる。

#standardSQL
# 01_bqml_testデータセット配下に、liner_reg_transactionモデルを作成
CREATE OR REPLACE MODEL `01_bqml_test.liner_reg_transaction`
OPTIONS
 (
  model_type='linear_reg'		# 線形回帰モデルを作成
  ,l2_reg=0.2			   	# 過学習防止ステータス
  ,max_iterations=50		   	# 訓練回数
  ,learn_rate_strategy='line_search'
  ,ls_init_learn_rate=0.1		# 学習率の指定
  ,early_stop=True			# 改善しなければ途中で学習を停止
  ,data_split_method='auto_split'
 )
AS
  # 説明変数と目的変数を取得。目的変数にはAS labelを指定。
  SELECT
  IFNULL(totals.totalTransactionRevenue, 0) AS label
  ,date
  ,visitNumber
  ,IFNULL(totals.bounces, 0) AS bouces  # 値が空であるなら0に置き換える
    ,IFNULL(totals.hits, 0) AS hits
  ,IFNULL(totals.newVisits, 0) AS newVisits
  ,IFNULL(totals.pageviews, 0) AS pageviews
  ,channelGrouping
  ,trafficSource.isTrueDirect
  ,trafficSource.source
  ,device.deviceCategory
  ,device.operatingSystem
  ,geoNetwork.continent
 FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
 WHERE
  _TABLE_SUFFIX BETWEEN '20160801' AND '20170701'

モデルの作成では説明変数の値を使用して、目的変数の値を予測する。また、BigQuery側で自動的に訓練データと検証データを分割するため、データを分ける前処理が不要となる。

その後、予測値と実際値の差を利用して、損失が最小限となるモデルを見つける。損失とは、精度の低い予測に対するペナルティで、予測の精度がどのくらい低いかを表す。

下記の図2において、Training Data Lossが訓練データの損失で、Evaluation Data Lossが検証データの損失を表す。

図2:損失の値
図2:損失の値

3-3:売上高の予測
作成を行った後は、未知の説明変数に対して、結果を予測する。

#standardSQL
SELECT
 fullVisitorId
 ,correct_transaction_revenue               	# 実際の売上高
 ,predicted_label AS predict_transaction_revenue	# 予測した売上高
FROM
 ML.PREDICT(MODEL `01_bqml_test.liner_reg_transaction`, (
  SELECT
    * 
  FROM (
   SELECT
        IFNULL(totals.totalTransactionRevenue, 0) AS correct_transaction_revenue
    ,fullVisitorId
        ,date
        ,visitNumber
        ,IFNULL(totals.bounces, 0) AS bouces
        ,IFNULL(totals.hits, 0) AS hits
        ,IFNULL(totals.newVisits, 0) AS newVisits
        ,IFNULL(totals.pageviews, 0) AS pageviews
        ,channelGrouping
        ,trafficSource.isTrueDirect
        ,trafficSource.source
        ,device.deviceCategory
        ,device.operatingSystem
        ,geoNetwork.continent
     	FROM
       	 `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
          _TABLE_SUFFIX BETWEEN '20170702' AND '20170801')))
      ORDER BY
        correct_transaction_revenue desc

以下に予測結果を抜粋している。結果の見方は以下の通りである。
 fullVisitorId:一意なユーザID
 correct_transaction_revenue:実際の売上高
 predict_transaction_revenue:モデルが予測した売上高

この実売上高と予測売上高の差が小さいほど、予測の精度が高いことを意味している。

図3:モデルで予測したユーザごとの売上高
図3:モデルで予測したユーザごとの売上高

4. 評価指標を改善するために

BigQueryMLでモデルを実際に作成した。しかし、実際の売上高と予測した売上高の差が大きくBigQueryMLが実運用に使えないと考えた方が大半だと思われる。

評価指標の改善には説明変数の再選択、データ量の増加等を行う必要がある。しかし、一番の問題はBigQueryに格納されたデータがモデル作成に適していないことだ。

モデルを作成するために、データを整形する「前処理」と「特徴エンジニアリング」を行うことが重要だ。モデル作成における時間はこの2つが大半を占める。

次回はデータを整形したうえで、再度BigQueryMLでモデルを作成していく。

参考文献
BigQuery公式ドキュメント(2019/3/10現在)
https://cloud.google.com/bigquery/docs/?hl=ja
BigQuery Exportのスキーマ(2019/3/10現在)
https://support.google.com/analytics/answer/3437719?hl=ja

邑川真也

執筆者 邑川真也

デジタルマーケティングの最適化を専門に行っています。
(デジタルマーケティング事業部 デジタルマーケティングコンサルタント)

お問い合わせ

当社のサービス・製品に関するご相談やご質問、お見積りのご依頼など、こちらからお問い合わせください。