การเริ่มต้นใช้งาน BigQuery ML

1. ภาพรวม

BigQuery ML (BQML) ช่วยให้ผู้ใช้สร้างและเรียกใช้โมเดลแมชชีนเลิร์นนิงใน BigQuery ได้โดยใช้การค้นหา SQL เป้าหมายคือการทำให้แมชชีนเลิร์นนิงเป็นเรื่องง่ายสำหรับทุกคนโดยการช่วยให้ผู้ปฏิบัติงาน SQL สร้างโมเดลโดยใช้เครื่องมือที่มีอยู่ และเพิ่มความเร็วในการพัฒนาด้วยการลดความจำเป็นในการย้ายข้อมูล

สิ่งที่คุณจะสร้าง

คุณจะใช้ชุดข้อมูล Analytics 360 ตัวอย่างเพื่อสร้างโมเดลที่คาดการณ์ว่าผู้เข้าชมจะทำธุรกรรมหรือไม่

สิ่งที่คุณจะได้เรียนรู้

วิธีสร้าง ประเมิน และใช้โมเดลแมชชีนเลิร์นนิงใน BigQuery

สิ่งที่คุณต้องมี

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้

  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เปิดคอนโซล BigQuery

ใน Google Developer Console ให้คลิกไอคอนเมนูที่ด้านซ้ายบนของหน้าจอ

select-bq_0.png

เลื่อนลงไปที่ด้านล่างของเมนู แล้วคลิก BigQuery:

select-bq.png

ซึ่งจะเป็นการเปิดคอนโซล BigQuery ในแท็บเบราว์เซอร์ใหม่ที่มีลักษณะดังนี้

8b0218390329e8cf.png

แต่ไม่มีอะไรในนี้ โชคดีที่ BigQuery มีชุดข้อมูลสาธารณะมากมายให้คุณสำรวจ

3. สร้างชุดข้อมูล

หากต้องการสร้างชุดข้อมูล ให้คลิกลูกศรข้างชื่อโปรเจ็กต์ แล้วเลือกสร้างชุดข้อมูลใหม่

4f51bf57291a59db.png

จากนั้นตั้งชื่อชุดข้อมูลเป็น bqml_codelab แล้วคลิกตกลง

63e32478a5652fbc.png

4. สร้างโมเดล

การถดถอยแบบโลจิสติกสําหรับ Analytics 360

ตอนนี้เรามาดูงานของเรากัน วิธีสร้างโมเดลเพื่อคาดการณ์ว่าผู้เข้าชมจะทำธุรกรรมหรือไม่

#standardSQL
CREATE OR REPLACE MODEL `bqml_codelab.sample_model` 
OPTIONS(model_type='logistic_reg') AS
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20160801' AND '20170631'
LIMIT 100000;

ในที่นี้ เราใช้ระบบปฏิบัติการของอุปกรณ์ของผู้เข้าชม ไม่ว่าจะเป็นอุปกรณ์เคลื่อนที่ ประเทศของผู้เข้าชม และจำนวนการดูหน้าเว็บเป็นเกณฑ์ในการพิจารณาว่ามีการทำธุรกรรมหรือไม่

ในกรณีนี้ "codelab" คือชื่อชุดข้อมูล และ "sample_model" คือชื่อโมเดลของเรา ประเภทโมเดลที่ระบุคือการถดถอยแบบโลจิสติกแบบไบนารี ในกรณีนี้ label คือสิ่งที่เราพยายามปรับให้เข้ากัน โปรดทราบว่าหากคุณสนใจเพียง 1 คอลัมน์ นี่คืออีกวิธีหนึ่งในการตั้งค่า input_label_cols นอกจากนี้ เรายังจำกัดข้อมูลฝึกฝนให้เป็นข้อมูลที่รวบรวมตั้งแต่วันที่ 1 สิงหาคม 2016 ถึง 31 มิถุนายน 2017 เราทำเช่นนี้เพื่อบันทึกข้อมูลของเดือนที่ผ่านมาสำหรับการ "คาดการณ์" นอกจากนี้ เราจะจำกัดจุดข้อมูลไว้ที่ 100,000 รายการเพื่อประหยัดเวลา คุณนำบรรทัดสุดท้ายออกได้หากไม่รีบร้อน

การเรียกใช้คำสั่ง CREATE MODEL จะสร้างงานการค้นหาที่จะทำงานแบบไม่พร้อมกัน คุณจึงสามารถปิดหรือรีเฟรชหน้าต่าง UI ของ BigQuery ได้ เป็นต้น

[ไม่บังคับ] ข้อมูลโมเดลและสถิติการฝึก

หากสนใจ คุณสามารถดูข้อมูลเกี่ยวกับโมเดลได้โดยคลิก sample_model ในชุดข้อมูล bqml_codelab ใน UI ในส่วนรายละเอียด คุณควรเห็นข้อมูลโมเดลพื้นฐานและตัวเลือกการฝึกบางอย่างที่ใช้ในการสร้างโมเดล ในส่วนสถิติการฝึก คุณควรเห็นตารางที่คล้ายกับตารางนี้

b8bd9548a0d89165.png

5. ประเมินโมเดล

ประเมินโมเดลของเรา

#standardSQL
SELECT
  *
FROM
  ml.EVALUATE(MODEL `bqml_codelab.sample_model`, (
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));

หากใช้กับโมเดลการถดถอยเชิงเส้น คำค้นหาข้างต้นจะแสดงผลคอลัมน์ต่อไปนี้ mean_absolute_error, mean_squared_error, mean_squared_log_error, median_absolute_error, r2_score, explained_variance หากใช้กับโมเดลการถดถอยแบบโลจิสติก คำค้นหาข้างต้นจะแสดงผลคอลัมน์ต่อไปนี้ precision, recall, accuracy, f1_score, log_loss, roc_auc โปรดดูคําศัพท์แมชชีนเลิร์นนิงหรือค้นหาใน Google เพื่อทําความเข้าใจวิธีคํานวณเมตริกแต่ละรายการและความหมายของเมตริกเหล่านั้น

กล่าวคือ คุณจะเห็นว่าส่วน SELECT และ FROM ของคำค้นหาเหมือนกับที่ใช้ในระหว่างการฝึก ส่วน WHERE แสดงการเปลี่ยนแปลงกรอบเวลา และส่วน FROM แสดงว่าเรากำลังเรียกใช้ ml.EVALUATE คุณควรเห็นตารางที่คล้ายกับตารางนี้

1c7779f6028730cc.png

6. ใช้โมเดล

คาดการณ์การซื้อต่อประเทศ

ในที่นี้ เราจะพยายามคาดการณ์จํานวนธุรกรรมที่ผู้เข้าชมแต่ละประเทศทํา จัดเรียงผลลัพธ์ และเลือก 10 ประเทศแรกตามการซื้อ

#standardSQL
SELECT
  country,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY country
ORDER BY total_predicted_purchases DESC
LIMIT 10;

โปรดสังเกตว่าการค้นหานี้คล้ายกับการค้นหาการประเมินที่เราสาธิตในส่วนก่อนหน้ามาก เราใช้ ml.PREDICT แทน ml.EVALUATE ในที่นี้ และครอบส่วน BQML ของการค้นหาด้วยคำสั่ง SQL มาตรฐาน กล่าวคือ เราสนใจประเทศและยอดรวมการซื้อของแต่ละประเทศ ดังนั้นเราจึงSELECT GROUP BY และORDER BY ใช้ LIMIT ที่นี่เพื่อให้เราได้รับเฉพาะผลการค้นหา 10 อันดับแรก คุณควรเห็นตารางที่คล้ายกับตารางนี้

e639f7a409741dcb.png

คาดการณ์การซื้อต่อผู้ใช้

นี่คืออีกตัวอย่างหนึ่ง คราวนี้เราจะลองคาดการณ์จํานวนธุรกรรมที่ผู้เข้าชมแต่ละรายทํา จัดเรียงผลลัพธ์ และเลือกผู้เข้าชม 10 อันดับแรกตามธุรกรรม

#standardSQL
SELECT
  fullVisitorId,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country,
  fullVisitorId
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY fullVisitorId
ORDER BY total_predicted_purchases DESC
LIMIT 10;

คุณควรเห็นตารางที่คล้ายกับตารางนี้

2be1d8fa96e10178.png

7. ยินดีด้วย

คุณทำ Codelab นี้เสร็จแล้ว หากกำลังมองหาความท้าทาย ลองสร้างโมเดลการถดถอยเชิงเส้นด้วย BQML

สิ่งที่เราได้พูดถึง

  • สร้างโมเดลการถดถอยแบบโลจิสติกแบบไบนารี
  • ประเมินโมเดล
  • ใช้โมเดลเพื่อทำการคาดการณ์

ขั้นตอนถัดไป