การคาดการณ์การจัดประเภทภาพยนตร์ด้วย BQML โดยใช้ SQL

1. บทนำ

ในโค้ดแล็บนี้ เราจะสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วยโมเดล BigQuery ML ที่กําหนดเองโดยใช้เฉพาะ SQL และทำให้โมเดลใช้งานได้ใน VertexAI คุณจะได้เรียนรู้:

  1. วิธีสร้างชุดข้อมูล BigQuery โดยใช้ Cloud Shell และโหลดข้อมูลจากไฟล์
  2. วิธีใช้ BigQuery ML สําหรับการเรียนรู้แบบควบคุมเพื่อสร้างโมเดลการคาดการณ์การถดถอยหลายคลาสสําหรับการคาดการณ์คะแนนภาพยนตร์โดยไม่ต้องเขียนโค้ดมากนัก แต่ใช้การค้นหา SQL เท่านั้น

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

คุณจะต้องสร้าง

  • ชุดข้อมูล BigQuery ที่มีคอมโพเนนต์ตารางและโมเดล
  • โมเดล BigQuery ML สำหรับการคาดการณ์การจัดประเภทภาพยนตร์โดยใช้การค้นหา SQL
  • ติดตั้งใช้งานโมเดลใน Vertex AI Model Registry

ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน

2. สร้างโปรเจ็กต์

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์หรือไม่
  3. ไปที่ BigQuery เพื่อเปิดใช้ API นอกจากนี้ คุณยังเปิดเว็บ UI ของ BigQuery ได้โดยตรงโดยป้อน URL ต่อไปนี้ในเบราว์เซอร์ https://console.cloud.google.com/bigquery

3. เปิดใช้งาน Cloud Shell

  1. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud โดยโหลด bq ไว้ล่วงหน้า จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell ที่มุมขวาบน 6757b2fb50ddcc2d.png
  2. เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรจะเห็นการรับรองความถูกต้องและโปรเจ็กต์ที่ตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว เรียกใช้คําสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์
gcloud auth list
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project
  1. หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คําสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <PROJECT_ID>

โปรดดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ

4. การเตรียมข้อมูลการฝึก

นี่เป็นขั้นตอนสําคัญในโปรเจ็กต์ ผลิตภัณฑ์ และแอปที่เกี่ยวข้องกับข้อมูลทั้งหมด ซึ่งต้องใช้ความเชี่ยวชาญด้านโดเมนอย่างมากนอกเหนือจากเทคโนโลยีเพื่อเตรียมชุดข้อมูลที่เหมาะที่สุดและทําให้พร้อมสําหรับโปรเจ็กต์ ML เราจะใช้ไฟล์ data ที่เตรียมไว้แล้วเพื่อวัตถุประสงค์ของโค้ดแล็บนี้

5. การสร้างและโหลดชุดข้อมูล

ชุดข้อมูล BigQuery คือคอลเล็กชันตาราง ตารางทั้งหมดในชุดข้อมูลจะจัดเก็บไว้ในตำแหน่งข้อมูลเดียวกัน นอกจากนี้ คุณยังแนบการควบคุมการเข้าถึงที่กำหนดเองเพื่อจำกัดการเข้าถึงชุดข้อมูลและตารางของชุดข้อมูลได้ด้วย

  1. ใน Cloud Shell ให้ใช้คําสั่ง bq mk เพื่อสร้างชุดข้อมูลชื่อ "movies"
bq mk --location=<<LOCATION>> movies

ตั้งค่าตำแหน่งเป็นภูมิภาค (asia-south1)

  1. ตรวจสอบว่าคุณมีไฟล์ข้อมูล (.csv) พร้อมแล้ว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อโคลนที่เก็บและไปยังโปรเจ็กต์
git clone <<repository link>>

cd movie-score
  1. ใช้คําสั่ง bq load เพื่อโหลดไฟล์ CSV ลงในตาราง BigQuery (โปรดทราบว่าคุณอัปโหลดจาก UI ของ BigQuery โดยตรงได้ด้วย)
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string

คําอธิบายตัวเลือก: –source_format=CSV - ใช้รูปแบบข้อมูล CSV เมื่อแยกวิเคราะห์ไฟล์ข้อมูล –skip_leading_rows=1 - ข้ามบรรทัดแรกในไฟล์ CSV เนื่องจากเป็นแถวส่วนหัว Movies.movies - อาร์กิวเมนต์ตำแหน่งแรก - กําหนดตารางที่ควรโหลดข้อมูล ./movies.csv ซึ่งเป็นอาร์กิวเมนต์ตำแหน่งที่ 2 จะกำหนดไฟล์ที่จะโหลด นอกจากไฟล์ในเครื่องแล้ว คำสั่ง bq load ยังโหลดไฟล์จาก Cloud Storage ด้วย URI gs://my_bucket/path/to/file ได้อีกด้วย สคีมา ซึ่งสามารถกําหนดได้ในไฟล์สคีมา JSON หรือเป็นรายการที่คั่นด้วยคอมมา (เราใช้รายการที่คั่นด้วยคอมมา) ไชโย! ตอนนี้ข้อมูล CSV ของเราโหลดอยู่ในตาราง movies.movies แล้ว

  1. ค้นหาด้วยวิธีใดวิธีหนึ่งต่อไปนี้

เราโต้ตอบกับ BigQuery ได้ 3 วิธี เราจะลองใช้ 2 วิธี ได้แก่ a. UI เว็บของ BigQuery ข. คำสั่ง bq c API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

ฉันใช้เวิร์กสเปซ SQL ของเว็บ BigQuery เพื่อเรียกใช้การค้นหา พื้นที่ทํางาน SQL จะมีลักษณะดังนี้

109a0b2c7155e9b3.png

การใช้คําสั่ง bq

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. การคาดคะเนการจัดประเภทภาพยนตร์ในระดับ 1 ถึง 10

BigQuery ML รองรับการเรียนรู้แบบควบคุมด้วยโมเดลประเภทการถดถอยเชิงเส้นโลจิสติก คุณสามารถใช้ประเภทโมเดลการถดถอยเชิงเส้นโลจิสติกแบบไบนารีเพื่อคาดการณ์ว่าค่าจะอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งใน 2 หมวดหมู่ หรือจะใช้ประเภทโมเดลการถดถอยแบบหลายคลาสเพื่อคาดการณ์ว่าค่าจะอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งในหลายหมวดหมู่ก็ได้ ปัญหาเหล่านี้เรียกว่าปัญหาการจัดประเภท เนื่องจากพยายามจัดประเภทข้อมูลออกเป็น 2 หมวดหมู่ขึ้นไป

หมายเหตุสั้นๆ เกี่ยวกับการเลือกโมเดล: นี่เป็นการเลือกโมเดลแบบทดลองที่เลือกไว้ที่นี่ โดยอิงตามการประเมินผลลัพธ์ที่ฉันได้ดำเนินการกับโมเดล 2-3 รายการในตอนแรก และสุดท้ายก็เลือกใช้ LOGISTIC REG เพื่อให้การดำเนินการง่ายขึ้นและได้ผลลัพธ์ใกล้เคียงกับคะแนนภาพยนตร์จริงจากฐานข้อมูลหลายแห่ง โปรดทราบว่าตัวอย่างนี้เป็นเพียงตัวอย่างการใช้งานรูปแบบเท่านั้น และไม่จำเป็นต้องเป็นรูปแบบที่แนะนําสําหรับ Use Case นี้ อีกวิธีในการใช้งานคือคาดการณ์ผลลัพธ์ของภาพยนตร์เป็น "ดี" / "ไม่ดี" โดยใช้โมเดลการถดถอยเชิงโลจิสติกนี้แทนการคาดการณ์คะแนน

เลือกข้อมูลการฝึก

เราได้แยกข้อมูลภาพยนตร์ (ใน CSV) เป็น 3 หมวดหมู่ในตารางโดยใช้ฟิลด์ "data_cat" ที่มีค่าอย่างใดอย่างหนึ่งต่อไปนี้ TRAIN, TEST และ PREDICT การแยกชุดข้อมูลเพื่อวัตถุประสงค์ในการทดสอบและการฝึกเป็นสิ่งสำคัญของโมเดล หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการแยกชุดข้อมูล โปรดดูเอกสารประกอบ

สร้างโมเดลการถดถอยเชิงเส้นโลจิสติก

เราสามารถใช้คำสั่ง CREATE MODEL ที่มีตัวเลือก "LOGISTIC_REG" เพื่อสร้างและฝึกโมเดลการถดถอยเชิงเส้นโลจิสติก

เรียกใช้การค้นหาด้านล่างในพื้นที่ทํางาน SQL ของเว็บ UI ของ BigQuery

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

รายละเอียดการค้นหา:

  1. คำสั่ง CREATE MODEL จะฝึกโมเดลโดยใช้ข้อมูลการฝึกในคำสั่ง SELECT
  2. คำสั่ง OPTIONS จะระบุประเภทโมเดลและตัวเลือกการฝึก ในที่นี้ ตัวเลือก LOGISTIC_REG จะระบุประเภทโมเดลการถดถอยแบบโลจิสติก คุณไม่จำเป็นต้องระบุโมเดลการถดถอยเชิงเส้นโลจิสติกแบบไบนารีเทียบกับโมเดลการถดถอยเชิงเส้นโลจิสติกแบบหลายคลาส เนื่องจาก BigQuery ML สามารถระบุได้ว่าควรฝึกโมเดลใดโดยพิจารณาจากจํานวนค่าที่ไม่ซ้ำกันในคอลัมน์ป้ายกํากับ
  3. data_split_method=‘NO_SPLIT' จะบังคับให้ BQML ฝึกข้อมูลตามเงื่อนไขการค้นหา (data_cat = ‘TRAIN') และโปรดทราบว่าควรใช้ "AUTO_SPLIT" ในตัวเลือกนี้เพื่อให้เฟรมเวิร์ก (หรือบริการในกรณีนี้) สุ่มการแบ่งพาร์ติชันของชุดทดสอบ/ชุดฝึก
  4. ตัวเลือก input_label_cols จะระบุคอลัมน์ในคำสั่ง SELECT ที่จะใช้เป็นคอลัมน์ป้ายกำกับ ในที่นี้ คอลัมน์ป้ายกํากับคือคะแนน ดังนั้นโมเดลจะเรียนรู้ว่าคะแนน 10 ค่าใดมีแนวโน้มมากที่สุดโดยอิงตามค่าอื่นๆ ที่มีในแต่ละแถว
  5. ตัวเลือก "auto_class_weights=TRUE" จะปรับสมดุลป้ายกำกับชั้นเรียนในข้อมูลการฝึก โดยค่าเริ่มต้น ข้อมูลการฝึกจะไม่มีน้ำหนัก หากป้ายกำกับในข้อมูลการฝึกไม่สมดุล โมเดลอาจเรียนรู้ที่จะคาดการณ์ป้ายกำกับคลาสที่ได้รับความนิยมสูงสุดมากกว่า
  6. คำสั่ง SELECT จะค้นหาตารางที่เราโหลดด้วยข้อมูล CSV คำสั่ง WHERE จะกรองแถวในตารางอินพุตเพื่อให้ระบบเลือกเฉพาะชุดข้อมูล TRAIN ในขั้นตอนนี้

เมื่อสร้างแล้ว ข้อมูลต่อไปนี้จะปรากฏในส่วนสคีมาของ Workspace SQL ของ BigQuery

ป้ายกำกับ

93efd0c1a7883690.png

ฟีเจอร์

8c539338df1a9652.png

ประเมินโมเดลการถดถอยเชิงโลจิสติก

หลังจากสร้างโมเดลแล้ว ให้ประเมินประสิทธิภาพของโมเดลโดยใช้ฟังก์ชัน ML.EVALUATE ฟังก์ชัน ML.EVALUATE จะประเมินค่าที่คาดการณ์เทียบกับข้อมูลจริง คําค้นหาเพื่อประเมินรูปแบบมีดังนี้

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘TEST'
    )
  )

ฟังก์ชัน ML.EVALUATE จะใช้โมเดลที่ฝึกในขั้นตอนก่อนหน้าและข้อมูลการประเมินที่แสดงผลโดยคําค้นหาย่อย SELECT ฟังก์ชันจะแสดงผลสถิติแถวเดียวเกี่ยวกับรูปแบบ

b54b0ebd6514a498.png

เนื่องจากคุณทำการถดถอยเชิงเส้นโลจิสติก ผลลัพธ์จึงมีเมตริกที่คุณเห็นในภาพหน้าจอด้านบน ได้แก่ ความแม่นยำ การเรียกคืน ความถูกต้อง คะแนน F1, log_loss, roc_auc ซึ่งสําคัญอย่างยิ่งในการประเมินประสิทธิภาพของโมเดล นอกจากนี้ คุณยังเรียกใช้ ML.EVALUATE โดยไม่ต้องระบุข้อมูลอินพุตได้ด้วย ML.EVALUATE จะดึงข้อมูลเมตริกการประเมินที่ได้จากการฝึก ซึ่งใช้ชุดข้อมูลการประเมินที่จองไว้โดยอัตโนมัติ

เมตริกหลักโดยย่อ

ความแม่นยำ - ข้อมูลระบุตัวตนที่ถูกต้องจริงมีสัดส่วนเท่าใด ความแม่นยำ = ผลบวกจริง / (ผลบวกจริง + ผลบวกลวง) ความแม่นยำ - ผลบวกจริงตามสัดส่วนใดที่ระบบระบุได้อย่างถูกต้อง การเรียกคืน = ผลบวกลวง / (ผลบวกลวง + ผลลบลวง) ความแม่นยำ - เมตริกสําหรับประเมินโมเดลการจัดประเภท ซึ่งเป็นเศษส่วนของการคาดการณ์ที่โมเดลของเราทําถูกจริง ความแม่นยำ = จํานวนการคาดการณ์ที่ถูกต้อง / จํานวนการคาดการณ์ทั้งหมด

คาดการณ์การจัดประเภทภาพยนตร์โดยใช้ ML.PREDICT

การค้นหาต่อไปนี้จะคาดคะเนคะแนนของภาพยนตร์แต่ละเรื่องในส่วน "คาดคะเน" ของชุดข้อมูล

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

ด้านล่างนี้คือตัวอย่างผลลัพธ์

1efb91967acc1f0c.png

ผลลัพธ์ของโมเดลจะแสดงคะแนนที่คาดการณ์ไว้ของภาพยนตร์ตั้งแต่ 1 ถึง 10 (การจัดประเภท) คุณอาจสงสัยว่าทำไมจึงมีแถวการคาดการณ์หลายแถวสำหรับภาพยนตร์แต่ละเรื่อง นั่นเป็นเพราะโมเดลแสดงผลป้ายกำกับที่คาดการณ์ได้และโอกาสที่แต่ละป้ายกำกับจะปรากฏตามลําดับจากมากไปน้อย

วิเคราะห์ผลลัพธ์ที่คาดการณ์และโมเดล

นอกจากนี้ คุณยังทําการวิเคราะห์ 2 ขั้นตอนที่ยอดเยี่ยมซึ่งเป็นส่วนหนึ่งของผลการคาดการณ์ได้ ดังนี้

  1. หากต้องการทําความเข้าใจสาเหตุที่โมเดลสร้างผลการคาดการณ์เหล่านี้ ให้ใช้ฟังก์ชัน ML.EXPLAIN_PREDICT
  2. หากต้องการทราบว่าฟีเจอร์ใดสำคัญที่สุดในการกำหนดกลุ่มรายได้โดยทั่วไป ให้ใช้ฟังก์ชัน ML.GLOBAL_EXPLAIN

คุณสามารถอ่านขั้นตอนเหล่านี้โดยละเอียดได้ในเอกสารประกอบ

7. คาดการณ์การจัดประเภทภาพยนตร์โดยใช้ BigQuery AutoML

AutoML เหมาะสําหรับกรณีที่คุณต้องการให้บริการ BigQuery สร้างโมเดลให้คุณและไม่ต้องกังวลจนกว่าระบบจะสร้างผลลัพธ์ของโมเดล ความสามารถของ AutoML มีอยู่ใน BQML โดยตรง (model_type=AUTOML_CLASSIFIER หรือ AUTOML_REGRESSOR) และเรียกใช้ได้ง่ายขึ้นมากหากข้อมูลอยู่ใน BigQuery อยู่แล้ว

CREATE OR REPLACE MODEL movies.auto_movies
       OPTIONS(model_type='AUTOML_CLASSIFIER',
               input_label_cols=['score'],
               budget_hours=1.0)
AS 
SELECT
  * EXCEPT(id, data_cat)
FROM
  movies.movies_score;

เมื่อสร้างโมเดลแล้ว คุณจะทําตามขั้นตอนเพื่อประเมิน คาดการณ์ และ EXPLAIN_PREDICT ได้ ตามที่เราได้พูดถึงในโมเดล BQML ที่กําหนดเอง อ่านข้อมูลเพิ่มเติมเกี่ยวกับ BigQuery AutoML ในเอกสารประกอบ

8. ติดตั้งใช้งานโมเดล BQML ใน Vertex AI Model Registry ในคลิกเดียว

ตอนนี้คุณดูโมเดล ML ทั้งหมดภายใน Vertex AI Model Registry ได้แล้ว ซึ่งจะช่วยให้องค์กรจัดการและติดตั้งใช้งานโมเดลได้ง่ายขึ้น ซึ่งรวมถึงโมเดลที่สร้างด้วย BigQuery ML, AutoML และโมเดลที่ฝึกตามที่กำหนดเอง โดยดำเนินการดังนี้

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
   model_registry='vertex_ai',
  vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

ใส่ตัวเลือก model_registry="vertex_ai" ในการค้นหา CREATE MODEL เพื่อให้ BigQuery ML เลือกโมเดลที่ต้องการลงทะเบียนไปยังรีจิสทรีโมเดล Vertex AI อย่างชัดเจน อ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบล็อกนี้

9. สรุป

ในเวลาไม่ถึง 30 นาที เราได้ดำเนินการต่อไปนี้

  1. ตั้งค่า BigQuery เป็นฐานข้อมูลสําหรับโปรเจ็กต์ข้อมูลวิเคราะห์
  2. สร้างโมเดลการคาดการณ์ที่กําหนดเองโดยใช้เฉพาะ SQL ของข้อมูล BigQuery และไม่มีคําสั่งอื่นๆ
  3. สร้างโมเดล BQ AutoML โดยใช้การค้นหา SQL เท่านั้น
  4. ติดตั้งใช้งานโมเดล BQML ใน Vertex AI Model Registry แล้ว

10. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิก "ลบ"
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิก "ปิด" เพื่อลบโปรเจ็กต์

11. ขอแสดงความยินดี

ยินดีด้วย คุณสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วย BQML ที่กําหนดเองและ AutoML รวมถึงติดตั้งใช้งานโมเดลในรีจิสทรีโมเดล Vertex AI เรียบร้อยแล้ว และทั้งหมดนี้ทําได้โดยใช้ SQL เท่านั้น