はじめに

BigQuery MLのチュートリアルを進めるうえで困ったところや追加で調べたところを作業メモとして残します(必要に応じて本家のドキュメントにフィードバックは送っております)。

ステップ2のデータの確認の補足

https://cloud.google.com/bigquery-ml/docs/logistic-regression-prediction#run_the_query

データ確認のところで下記のクエリを投稿しています。

SELECT
  age,
  workclass,
  marital_status,
  education_num,
  occupation,
  hours_per_week,
  income_bracket
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`
LIMIT
  100;

ただそのQueryの結果の説明を読んでいるとeducationとfunctional_weightカラムの説明がでてきます。 Queryの中で上記2つのカラムを指定していないのでなんのことを指しているのかここだけではわからなかったので、 下記のクエリに修正して実行しました。

SELECT
  age,
  workclass,
  marital_status,
  education_num,
  occupation,
  hours_per_week,
  income_bracket,
  education,
  functional_weight
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`
LIMIT
  100;

Query修正後の結果

修正したQueryの実行結果は上記です。 こちらからeducationとeducation_numが同じことを示すだけで、別々の表現になっていることを指摘していましたが educationカラムで確かに同じであることが伺えます。 ただ、すべての行で同じかどうか念の為確認したいと思い、下記のSQLを動かして確認しました。

SELECT
  education,
  education_num,
  count(*)
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`
GROUP BY
  education,
  education_num
;

こちらから得られる結果を確認するとたしかにeducationとeducation_numの結果は1:1対応しており、 educationの1つの値がeducation_numに2回使われることがありませんでした。もちろん逆も同様でした。

ステップ3の学習データのtraining, evaluation, predictionの比率

https://cloud.google.com/bigquery-ml/docs/logistic-regression-prediction#run_the_query_2

ここでの説明が学習データとして80%使い、評価用10%、予測用10%として扱う記載ありますが、実際にどれほどの比率か確認したいと思います。

SELECT
  dataframe,
  COUNT(*) AS dataframe_num,
  COUNT(*) / MAX(a.total) AS ratio
FROM
  `census.input_view`,
  (
  SELECT
    COUNT(*) AS total
  FROM
    `census.input_view` ) a
GROUP BY
  dataframe
;

こちらが各比率を計算するために使ったSQLです。その結果が下記になります。

Query修正後の結果

おおまかにみると想定どおり8:1:1になっていることを確認できました。

まとめ

もっと効率的なQueryの書き方があるかもしれないです…。

続き

続きはこちらですの続きです。)

参考

https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-create