การคาดการณ์อนุกรมเวลาด้วย Vertex AI และ BigQuery ML

1. ภาพรวม

ในแล็บนี้ คุณจะได้เรียนรู้วิธีสร้างโมเดลการคาดการณ์อนุกรมเวลาด้วย TensorFlow จากนั้นจึงเรียนรู้วิธีติดตั้งใช้งานโมเดลเหล่านี้ด้วย Vertex AI

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

โดยคุณจะได้เรียนรู้วิธีต่อไปนี้

  • เปลี่ยนรูปแบบข้อมูลเพื่อให้ใช้ในโมเดล ML ได้
  • แสดงภาพและสํารวจข้อมูล
  • ใช้ BigQuery ML เพื่อสร้างโมเดลการคาดการณ์อนุกรมเวลา
  • สร้างโมเดลการคาดการณ์อนุกรมเวลาด้วย TensorFlow โดยใช้สถาปัตยกรรม LSTM และ CNN

2. ข้อมูลเบื้องต้นเกี่ยวกับการคาดการณ์อนุกรมเวลา

Codelab นี้มุ่งเน้นที่วิธีใช้เทคนิคการพยากรณ์อนุกรมเวลาโดยใช้ Google Cloud Platform หลักสูตรนี้ไม่ใช่หลักสูตรการพยากรณ์อนุกรมเวลาทั่วไป แต่การทบทวนแนวคิดสั้นๆ อาจเป็นประโยชน์ต่อผู้ใช้

ข้อมูลอนุกรมเวลา

ก่อนอื่น มาทำความเข้าใจกันก่อนว่าอนุกรมเวลาคืออะไร ซึ่งเป็นชุดข้อมูลที่มีข้อมูลที่บันทึกในช่วงเวลาปกติ ชุดข้อมูลอนุกรมเวลามีทั้งเวลาและตัวแปรอย่างน้อย 1 รายการที่ขึ้นอยู่กับเวลา

85af6a1ff05c69f2.png

คอมโพเนนต์

อนุกรมเวลาสามารถแยกย่อยออกเป็นคอมโพเนนต์ต่างๆ ได้ดังนี้

  • เทรนด์: เคลื่อนที่ขึ้นหรือลงในรูปแบบที่คาดการณ์ได้อย่างสมเหตุสมผล
  • ตามฤดูกาล: เกิดซ้ำในช่วงเวลาที่เฉพาะเจาะจง เช่น วัน สัปดาห์ เดือน ฤดูกาล ฯลฯ
  • สุ่ม: ความผันผวนที่เหลือ

ความผันผวนตามฤดูกาลอาจมีหลายชั้น ตัวอย่างเช่น คอลเซ็นเตอร์อาจเห็นรูปแบบปริมาณการโทรในบางวันของสัปดาห์และในบางเดือน ส่วนที่เหลืออาจอธิบายได้ด้วยตัวแปรอื่นๆ นอกเหนือจากเวลา

6e8d45bbbbc388ec.png

ความคงที่

เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดในการคาดการณ์ ข้อมูลอนุกรมเวลาควรคงที่ โดยที่ลักษณะทางสถิติ เช่น ค่าเฉลี่ยและความแปรปรวน จะคงที่เมื่อเวลาผ่านไป คุณสามารถใช้เทคนิคต่างๆ เช่น การหาผลต่างและการกำจัดแนวโน้มกับข้อมูลดิบเพื่อให้ข้อมูลมีความคงที่มากขึ้น

ตัวอย่างเช่น พล็อตด้านล่างของความเข้มข้นของ CO2 แสดงรูปแบบรายปีที่ซ้ำกันโดยมีแนวโน้มเพิ่มขึ้น ( แหล่งที่มา)

ab82857e2e7d0b89.png

หลังจากนำแนวโน้มเชิงเส้นออกแล้ว ข้อมูลจะเหมาะกับการคาดการณ์มากขึ้น เนื่องจากตอนนี้มีค่าเฉลี่ยคงที่

c936381ab1095528.png

การใช้ข้อมูลอนุกรมเวลาสำหรับแมชชีนเลิร์นนิง

หากต้องการใช้ข้อมูลอนุกรมเวลาในปัญหาแมชชีนเลิร์นนิง คุณต้องแปลงข้อมูลเพื่อให้ใช้ค่าก่อนหน้าในการคาดการณ์ค่าในอนาคตได้ ตารางนี้แสดงตัวอย่างวิธีสร้างตัวแปรที่ล้าหลังเพื่อช่วยคาดการณ์เป้าหมาย

d667a941dbd470f5.png

ตอนนี้เราได้พูดถึงข้อมูลพื้นฐานไปบ้างแล้ว มาเริ่มสำรวจข้อมูลและคาดการณ์กันเลย

3. ตั้งค่าสภาพแวดล้อม Notebook

ตอนนี้เราได้พูดถึงข้อมูลเบื้องต้นไปแล้ว มาตั้งค่าสภาพแวดล้อมการพัฒนาโมเดลกัน

ขั้นตอนที่ 1: เปิดใช้ API

เครื่องมือเชื่อมต่อ BigQuery ใช้ BigQuery Storage API ค้นหา BigQuery Storage API ในคอนโซล แล้วเปิดใช้ API หากปิดใช้อยู่

9895a2fd3cdf8f8c.png

ขั้นตอนที่ 2: สร้าง Notebook ของ Vertex AI Workbench

ไปที่ส่วน Vertex AI Workbench ของ Cloud Console แล้วคลิกสมุดบันทึกใหม่ จากนั้นเลือกประเภทสมุดบันทึก TensorFlow Enterprise 2.x ล่าสุดที่ไม่มี GPU ดังนี้

4e7b73eabf2bc061.png

ใช้ตัวเลือกเริ่มต้น แล้วคลิกสร้าง เมื่อสร้างอินสแตนซ์แล้ว ให้เลือกเปิด JupyterLab

18c9f3c462aafaee.png

จากนั้นสร้างสมุดบันทึก Python 3 จาก JupyterLab โดยทำดังนี้

58523671a252b95a.png

ขั้นตอนที่ 3: ดาวน์โหลดสื่อการเรียนรู้ในแล็บ

สร้างหน้าต่างเทอร์มินัลใหม่จากอินเทอร์เฟซ JupyterLab โดยไปที่ File -> New -> Terminal

จากนั้นให้โคลนเนื้อหาต้นฉบับด้วยคำสั่งนี้

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. สำรวจและแสดงภาพข้อมูล

ในส่วนนี้ คุณจะได้ทำสิ่งต่อไปนี้

  • สร้างคําค้นหาที่จัดกลุ่มข้อมูลเป็นอนุกรมเวลา
  • ป้อนค่าที่ขาดหายไป
  • แสดงภาพข้อมูล
  • แยกอนุกรมเวลาออกเป็นองค์ประกอบแนวโน้มและองค์ประกอบตามฤดูกาล

ขั้นตอนที่ 1

ใน Vertex AI Workbench ให้ไปที่ training-data-analyst/courses/ai-for-time-series/notebooks แล้วเปิด 01-explore.ipynb

ขั้นตอนที่ 2

ล้างเซลล์ทั้งหมดใน Notebook (แก้ไข > ล้างเอาต์พุตทั้งหมด) เปลี่ยนการตั้งค่าภูมิภาค โปรเจ็กต์ และที่เก็บข้อมูลในเซลล์ 2-3 เซลล์แรก จากนั้นเรียกใช้เซลล์ทีละเซลล์

ขั้นตอนที่ 3

ในส่วนนี้ คุณได้นําเข้าข้อมูลและแสดงภาพมิติข้อมูลต่างๆ ของข้อมูลดังกล่าว ตอนนี้คุณเห็นภาพข้อมูลชัดเจนขึ้นแล้ว คุณก็พร้อมที่จะดำเนินการสร้างโมเดลแมชชีนเลิร์นนิงโดยใช้ข้อมูลนี้

55839e7bc0427915.png

5. สร้างโมเดลด้วยการคาดการณ์อนุกรมเวลาของ BigQuery

ในส่วนนี้ คุณจะได้ทำสิ่งต่อไปนี้

  • นำเข้าข้อมูลอินพุตอนุกรมเวลาไปยังตาราง BigQuery
  • สร้างโมเดลอนุกรมเวลาโดยใช้ไวยากรณ์ BQML
  • ดูวิธีประเมินพารามิเตอร์และความแม่นยำของโมเดล
  • คาดการณ์โดยใช้โมเดล

ขั้นตอนที่ 1

เราจะสร้างตาราง BigQuery ด้วยข้อมูลดิบจาก CSV ที่เราเพิ่งสำรวจ มาเริ่มกันด้วยการดาวน์โหลด CSV จากสภาพแวดล้อมของ Notebook

จากไดเรกทอรี training-data-analyst/courses/ai-for-time-series/notebooks/data ให้คลิกขวาที่ cta_ridership.csv แล้วดาวน์โหลดลงในสภาพแวดล้อมในเครื่อง

ขั้นตอนที่ 2

จากนั้นเราจะอัปโหลดข้อมูลนี้ลงในตาราง BigQuery

ไปที่ BigQuery ในคอนโซล (โดยค้นหาหรือใช้ลิงก์นี้)

649e7ab1c44b75e8.png

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

281b97020cd52f29.png

เลือกชื่อที่ต้องการ เช่น demo ยอมรับค่าเริ่มต้น แล้วดำเนินการต่อ

เมื่อเลือกชุดข้อมูลดังกล่าวแล้ว ให้เลือกสร้างตารางที่มุมขวาล่างเพื่อสร้างตารางใหม่

ad47810d44cfb289.png

สำหรับตัวเลือกการสร้างตาราง ให้เลือกตัวเลือกต่อไปนี้

  • สร้างตารางจาก: อัปโหลด
  • เลือกไฟล์: cta_ridership.csv
  • ชื่อตาราง: cta_ridership
  • สคีมา: เลือกช่องเพื่อตรวจหาสคีมาและพารามิเตอร์อินพุตโดยอัตโนมัติ

213e4177e9e79544.png

ขั้นตอนที่ 3

ตอนนี้ก็ถึงเวลาสร้างโมเดลแล้ว BigQuery ML มีไวยากรณ์ที่ตรงไปตรงมาคล้ายกับ SQL ซึ่งช่วยให้คุณสร้างโมเดลได้หลากหลายประเภท

ในเครื่องมือแก้ไขคำค้นหา ให้วาง/พิมพ์คำค้นหานี้ โดยแทนที่ demo ด้วยชื่อชุดข้อมูลของคุณในทั้ง 2 ตำแหน่ง หากจำเป็น

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

มาดูองค์ประกอบสำคัญของไวยากรณ์เพื่อทำความเข้าใจกัน

CREATE OR REPLACE MODEL
demo.cta_ridership_model

คำสั่งนี้จะสร้างโมเดล คำสั่งนี้มีรูปแบบอื่นๆ เช่น CREATE MODEL แต่เราเลือกที่จะแทนที่โมเดลที่มีอยู่ด้วยชื่อเดียวกันนี้

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

ในที่นี้ เราจะกำหนดตัวเลือกโมเดล โดยตัวเลือกแรกคือประเภทโมเดล การเลือก ARIMA จะสร้างโมเดลการคาดการณ์อนุกรมเวลา

TIME_SERIES_TIMESTAMP_COL=‘service_date'

คอลัมน์ที่มีข้อมูลวันที่/เวลา

TIME_SERIES_DATA_COL=‘total_rides'

คอลัมน์ข้อมูล

HOLIDAY_REGION=‘us'

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

AS SELECT ... FROM ...

ส่วนนี้จะเลือกข้อมูลอินพุตที่เราจะใช้ฝึกโมเดล

คุณเพิ่มตัวเลือกอื่นๆ อีกมากมายลงในคำค้นหาได้ เช่น การกำหนดคอลัมน์หากมีอนุกรมเวลาหลายรายการ หรือการเลือกว่าจะค้นหาพารามิเตอร์ของโมเดล ARIMA โดยอัตโนมัติหรือไม่ ดูรายละเอียดเพิ่มเติมได้ในข้อมูลอ้างอิงไวยากรณ์ของคำสั่ง CREATE MODEL สำหรับโมเดลอนุกรมเวลา

ขั้นตอนที่ 4

มาดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลของเรากัน หลังจากฝึกโมเดลเสร็จแล้ว ให้เรียกใช้การค้นหาอีกครั้ง โดยแทนที่ demo หากจำเป็น

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

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

คุณจะดูพารามิเตอร์ p, d และ q ของโมเดล ARIMA รวมถึงฤดูกาลที่พบในโมเดลได้ ในกรณีนี้ โมเดลยอดนิยมจะรวมทั้งแนวโน้มตามฤดูกาลรายสัปดาห์และรายปี

5b5b1e129c70a340.png

ขั้นตอนที่ 5

ตอนนี้เราพร้อมที่จะคาดการณ์ด้วยฟังก์ชัน ML.FORECAST แล้ว

วาง/พิมพ์ข้อความต่อไปนี้ (แทนที่ demo หากจำเป็น)

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

การค้นหานี้จะคาดการณ์ในอีก 7 วันข้างหน้าโดยใช้โมเดลของเรา เราจะเห็นแถว 7 แถวที่ส่งกลับมาด้านล่าง การคาดการณ์ยังมีช่วงความเชื่อมั่นด้วย โดยค่าเริ่มต้นคือ 0.95 แต่กำหนดค่าได้ในคำค้นหา

b8a7f22657dc2d27.png

ยอดเยี่ยม เราได้สร้างโมเดลอนุกรมเวลาด้วยคำค้นหา BQML เพียงไม่กี่รายการ

6. สร้างโมเดลการคาดการณ์ที่กำหนดเอง

ในส่วนนี้ คุณจะได้ทำสิ่งต่อไปนี้

  • นำค่าผิดปกติออกจากข้อมูล
  • ทำการคาดการณ์หลายขั้นตอน
  • รวมฟีเจอร์เพิ่มเติมในโมเดลอนุกรมเวลา
  • ดูข้อมูลเกี่ยวกับสถาปัตยกรรมโครงข่ายประสาทเทียมสำหรับการคาดการณ์อนุกรมเวลา: LSTM และ CNN
  • ดูข้อมูลเกี่ยวกับโมเดลทางสถิติ รวมถึงการปรับค่าเรียบแบบเอ็กซ์โปเนนเชียลของ Holt-Winters
  • โมเดล Ensemble

ขั้นตอนที่ 1

ใน Vertex AI Workbench ให้ไปที่ training-data-analyst/courses/ai-for-time-series/notebooks แล้วเปิด 02-model.ipynb

ขั้นตอนที่ 2

ล้างเซลล์ทั้งหมดใน Notebook (แก้ไข > ล้างเอาต์พุตทั้งหมด) เปลี่ยนการตั้งค่าภูมิภาค โปรเจ็กต์ และที่เก็บข้อมูลในเซลล์ 2-3 เซลล์แรก จากนั้นเรียกใช้เซลล์ทีละเซลล์

ขั้นตอนที่ 3

ใน Notebook คุณได้สำรวจสถาปัตยกรรมโมเดลหลายแบบแล้ว ได้แก่ LSTM, CNN และโมเดลทางสถิติ สำหรับแต่ละโมเดล คุณจะดูประสิทธิภาพของโมเดลเทียบกับข้อมูลทดสอบได้ดังนี้

a528df58f4e6d372.png

7. ฝึกและคาดการณ์ในระบบคลาวด์

ในส่วนนี้ คุณจะได้ทำสิ่งต่อไปนี้

  • เตรียมข้อมูลและโมเดลสำหรับการฝึกในระบบคลาวด์
  • ฝึกโมเดลและตรวจสอบความคืบหน้าของงานด้วย AI Platform Training
  • คาดการณ์โดยใช้โมเดลด้วยการคาดการณ์ของ AI Platform

ขั้นตอนที่ 1

ใน Vertex AI Workbench ให้ไปที่ training-data-analyst/courses/ai-for-time-series/notebooks แล้วเปิด 03-cloud-training.ipynb

ขั้นตอนที่ 2

ล้างเซลล์ทั้งหมดใน Notebook (แก้ไข > ล้างเอาต์พุตทั้งหมด) เปลี่ยนการตั้งค่าภูมิภาค โปรเจ็กต์ และที่เก็บข้อมูลในเซลล์ 2-3 เซลล์แรก จากนั้นเรียกใช้เซลล์ทีละเซลล์

ขั้นตอนที่ 3

ในส่วนก่อนหน้า เราได้ฝึกโมเดลและคาดการณ์ด้วยโมเดลนั้นทั้งหมดภายใน Notebook ของ Workbench ในส่วนนี้ เราได้สาธิตวิธีใช้ Python SDK สำหรับ Vertex AI จาก Notebook เพื่อใช้บริการ Vertex AI สำหรับการฝึกและการติดตั้งใช้งาน

a3f6b5dc895a24fb.png

8. ความท้าทาย

ในส่วนนี้ คุณจะได้ลองนำแนวคิดที่ได้เรียนรู้ไปใช้กับชุดข้อมูลใหม่

เราจะไม่ให้วิธีการแบบละเอียด แต่จะให้คำแนะนำบางอย่าง (หากคุณต้องการ)

เป้าหมายคือการคาดการณ์คำขอบริการ 311 จากเมืองนิวยอร์ก คำขอที่ไม่ใช่กรณีฉุกเฉินเหล่านี้รวมถึงการร้องเรียนเรื่องเสียงดัง ปัญหาไฟถนน ฯลฯ

ขั้นตอนที่ 1

มาเริ่มด้วยการทำความเข้าใจชุดข้อมูลกัน

ก่อนอื่น ให้เข้าถึงชุดข้อมูลคำขอบริการ 311 ของนครนิวยอร์ก

หากต้องการทำความเข้าใจข้อมูลให้ดียิ่งขึ้น ให้ลองใช้การค้นหาตัวอย่าง 2-3 รายการที่ระบุไว้ในคำอธิบายชุดข้อมูล

  • มีคำขอ 311 ที่เกี่ยวข้องกับรถขายไอศกรีมกี่รายการ
  • วันใดที่มีคำขอ 311 ที่เกี่ยวข้องกับปาร์ตี้มากที่สุด

ใน UI ของ BigQuery ให้เลือกสร้างการค้นหาเพื่อดูวิธีเข้าถึงชุดข้อมูล โปรดทราบว่าคำสั่ง SELECT กำลังค้นหาจาก bigquery-public-data.new_york_311.311_service_requests

ขั้นตอนที่ 2

เราพร้อมที่จะเริ่มต้นแล้ว ในส่วนนี้ ให้แก้ไขสมุดบันทึก สำรวจและแสดงภาพเพื่อทำงานกับข้อมูลนี้

คำใบ้

  • ทำสำเนา01-explore.ipynb Notebook แล้วเริ่มทำงานจากสำเนา
  • หากต้องการสำรวจข้อมูล ให้ลองใช้การค้นหานี้
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • หากต้องการดูจำนวนเหตุการณ์ตามเดือน ให้ใช้การค้นหานี้
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • อัปเดตตัวแปรคอลัมน์ในส่วนค่าคงที่ ในคำค้นหาด้านบน คอลัมน์เป้าหมายคือ y และคอลัมน์วันที่คือ ds ไม่มีฟีเจอร์เพิ่มเติม
  • ลองเปลี่ยนชื่อไฟล์ที่คุณส่งออกข้อมูลสำหรับ Lab ถัดไป
  • ส่งออกข้อมูลโดยใช้ df.to_csv(YOUR-EXPORT-FILENAME, index=False)

ขั้นตอนที่ 3

ตอนนี้มาสร้างโมเดลอนุกรมเวลาด้วยข้อมูลรายเดือนกัน

เคล็ดลับ:

  • ทำสำเนา02-model.ipynb Notebook แล้วเริ่มทำงานจากสำเนา
  • อัปเดตพารามิเตอร์ชุดข้อมูล
  • อัปเดตพารามิเตอร์ target_col และ ts_col ให้ตรงกับชุดข้อมูลใหม่
  • อัปเดตพารามิเตอร์ของโมเดล
  • ความถี่เป็นรายเดือน (รหัสสำหรับการเริ่มต้นเดือนคือ "MS")
  • ขั้นตอนการป้อนข้อมูล: 12 (กรอบเวลามองย้อนกลับคือ 12 เดือน)
  • ขั้นตอนเอาต์พุต: 3 (คาดการณ์ล่วงหน้า 3 เดือน)
  • ฤดูกาล: 12 (ช่วงฤดูกาลคือ 12 เดือน)
  • เปลี่ยนชื่อไฟล์อินพุตหากคุณเปลี่ยนชื่อในสมุดบันทึกก่อนหน้า
  • หากคุณเรียกใช้คําค้นหาในช่วงกลางเดือน ยอดรวมรายเดือนของเดือนสุดท้ายจะต่ำกว่าที่คาดไว้มาก ดังนั้น เพื่อวัตถุประสงค์ของแล็บนี้ เราจะนำเดือนสุดท้ายออกจากชุดข้อมูลโดยใช้ df = df[:-1]
  • ดูเหมือนว่าข้อมูลจะไม่มีค่าผิดปกติที่ชัดเจน ดังนั้นให้ข้ามหรือแสดงความคิดเห็นในเซลล์เหล่านั้น
  • ปรับหน่วย LSTM และตัวกรอง CNN รวมถึงขนาดเคอร์เนลสำหรับโมเดลใหม่นี้

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

หากต้องการใช้ Notebook นี้ต่อไป ขอแนะนำให้ปิดเมื่อไม่ได้ใช้งาน จาก UI ของ Workbench ใน Cloud Console ให้เลือก Notebook แล้วเลือกหยุด

57213ef2edad9257.png

หากต้องการลบทรัพยากรทั้งหมดที่คุณสร้างขึ้นใน Lab นี้ ให้ลบ Notebook ของ Workbench แทนการหยุด

ใช้เมนูการนำทางใน Cloud Console เพื่อไปที่ Storage แล้วลบทั้ง 2 Bucket ที่คุณสร้างขึ้นเพื่อจัดเก็บชิ้นงานโมเดล (คำเตือน: ให้ทำขั้นตอนนี้เฉพาะในกรณีที่คุณสร้าง Bucket ใหม่สำหรับ Lab นี้เท่านั้น)