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

1. ภาพรวม

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

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

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

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

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

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

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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

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

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

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