1. ภาพรวม
BigQuery ML (BQML) ช่วยให้ผู้ใช้สร้างและเรียกใช้โมเดลแมชชีนเลิร์นนิงใน BigQuery ได้โดยใช้การค้นหา SQL เป้าหมายคือการทำให้แมชชีนเลิร์นนิงมีความเสมอภาคโดยให้ผู้ปฏิบัติงาน SQL สามารถสร้างโมเดลโดยใช้เครื่องมือที่มีอยู่และเพิ่มความเร็วในการพัฒนาโดยไม่จำเป็นต้องมีการเคลื่อนย้ายข้อมูล
สิ่งที่คุณจะสร้าง
ใช้ตัวอย่างชุดข้อมูล Analytics 360 ในการสร้างรูปแบบที่คาดการณ์ว่าผู้เข้าชมจะทำธุรกรรมหรือไม่
สิ่งที่คุณจะได้เรียนรู้
วิธีสร้าง ประเมิน และใช้รูปแบบแมชชีนเลิร์นนิงใน BigQuery
สิ่งที่ต้องมี
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- ความรู้พื้นฐานเกี่ยวกับ SQL หรือ BigQuery
- เอกสารประกอบของ BQML
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID
ในภายหลัง
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เปิดคอนโซล BigQuery
ใน Google Developer Console ให้คลิกไอคอนเมนูที่ด้านบนซ้ายของหน้าจอ
เลื่อนลงไปด้านล่างสุดแล้วคลิก BigQuery
ซึ่งจะเปิดคอนโซล BigQuery ในแท็บเบราว์เซอร์ใหม่ ซึ่งมีลักษณะดังนี้
แต่ที่นี่ไม่มีอะไรเลย! โชคดีที่มีชุดข้อมูลสาธารณะจำนวนมากใน BigQuery ให้คุณได้สำรวจ
3. สร้างชุดข้อมูล
หากต้องการสร้างชุดข้อมูล ให้คลิกลูกศรข้างชื่อโปรเจ็กต์ แล้วเลือกสร้างชุดข้อมูลใหม่
ต่อไปให้ตั้งชื่อชุดข้อมูลว่า bqml_codelab แล้วคลิกตกลง
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" จะสร้างงานการค้นหาที่จะเรียกใช้แบบไม่พร้อมกันเพื่อให้คุณปิดหรือรีเฟรชหน้าต่าง BigQuery UI ได้
[ไม่บังคับ] ข้อมูลรุ่นและ สถิติการฝึกอบรม
หากสนใจ คุณสามารถดูข้อมูลเกี่ยวกับโมเดลได้โดยคลิก sample_model ใต้ชุดข้อมูล bqml_codelab ใน UI ในส่วนรายละเอียด คุณควรพบข้อมูลพื้นฐานของโมเดลและตัวเลือกการฝึกที่ใช้ในการสร้างโมเดล ในส่วนสถิติการฝึกอบรม คุณจะเห็นตารางที่คล้ายกับตารางนี้
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
คุณจะเห็นตารางที่คล้ายกับตารางนี้
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 อันดับแรกเท่านั้น คุณจะเห็นตารางที่คล้ายกับตารางนี้
คาดการณ์การซื้อต่อผู้ใช้
มาดูอีกตัวอย่างหนึ่งกัน ครั้งนี้เราพยายามคาดการณ์จำนวนธุรกรรมของผู้เข้าชมแต่ละราย จัดเรียงผลลัพธ์และเลือกผู้เข้าชม 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;
คุณจะเห็นตารางที่คล้ายกับตารางนี้
7. ยินดีด้วย
ใช้ Codelab นี้เสร็จแล้ว หากกำลังมองหาชาเลนจ์ ลองสร้างโมเดลการถดถอยเชิงเส้นด้วย BQML
หัวข้อที่ครอบคลุม
- สร้างโมเดลการถดถอยแบบโลจิสติกแบบไบนารี
- ประเมินโมเดล
- ใช้โมเดลเพื่อทำการคาดการณ์
ขั้นตอนถัดไป
- โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับ BQML ในเอกสารประกอบ