1. ภาพรวม
BigQuery ML (BQML) ช่วยให้ผู้ใช้สร้างและเรียกใช้โมเดลแมชชีนเลิร์นนิงใน BigQuery โดยใช้การค้นหา SQL ได้ เป้าหมายคือการทำให้แมชชีนเลิร์นนิงเป็นที่เข้าถึงได้ในวงกว้างโดยการช่วยให้ผู้ปฏิบัติงาน SQL สร้างโมเดลโดยใช้เครื่องมือที่มีอยู่ และเพิ่มความเร็วในการพัฒนาด้วยการลดความจำเป็นในการย้ายข้อมูล
สิ่งที่คุณจะสร้าง
คุณจะใช้ชุดข้อมูล Analytics 360 ตัวอย่างเพื่อสร้างโมเดลที่คาดการณ์ว่าผู้เข้าชมจะทำธุรกรรมหรือไม่
สิ่งที่คุณจะได้เรียนรู้
วิธีสร้าง ประเมิน และใช้โมเดลแมชชีนเลิร์นนิงใน BigQuery
สิ่งที่คุณต้องมี
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- ความรู้พื้นฐานเกี่ยวกับ SQL หรือ BigQuery
- เอกสารประกอบ BQML
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน 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 จะสร้างงานการค้นหาที่จะทำงานแบบไม่พร้อมกัน คุณจึงสามารถปิดหรือรีเฟรชหน้าต่าง UI ของ BigQuery ได้ เป็นต้น
[ไม่บังคับ] ข้อมูลโมเดลและสถิติการฝึก
หากสนใจ คุณสามารถดูข้อมูลเกี่ยวกับโมเดลได้โดยคลิก 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 ได้ที่เอกสารประกอบ