1. ภาพรวม
ในห้องทดลองนี้ คุณจะได้เรียนรู้วิธีสร้างโมเดลการคาดการณ์อนุกรมเวลาด้วย TensorFlow แล้วเรียนรู้วิธีทำให้โมเดลเหล่านี้ใช้งานได้ด้วย Vertex AI
สิ่งที่ได้เรียนรู้
โดยคุณจะได้เรียนรู้วิธีต่อไปนี้
- เปลี่ยนรูปแบบข้อมูลเพื่อให้นำไปใช้ในโมเดล ML ได้
- แสดงภาพและสำรวจข้อมูล
- ใช้ BigQuery ML เพื่อสร้างโมเดลการคาดการณ์อนุกรมเวลา
- สร้างโมเดลการคาดการณ์อนุกรมเวลาด้วย TensorFlow โดยใช้สถาปัตยกรรม LSTM และ CNN
2. ข้อมูลเบื้องต้นเกี่ยวกับการคาดการณ์อนุกรมเวลา
จุดประสงค์ของ Codelab นี้คือวิธีใช้เทคนิคการคาดการณ์อนุกรมเวลาโดยใช้ Google Cloud Platform คู่มือนี้ไม่ใช่หลักสูตรการคาดการณ์แบบอนุกรมเวลาโดยทั่วไป แต่การทัวร์ชมแนวคิดสั้นๆ อาจเป็นประโยชน์สำหรับผู้ใช้ของเรา
ข้อมูลอนุกรมเวลา
อย่างแรก อนุกรมเวลาคืออะไร เป็นชุดข้อมูลที่มีข้อมูลที่ได้รับการบันทึกในช่วงเวลาที่สม่ำเสมอ ชุดข้อมูลอนุกรมเวลามีทั้งเวลาและตัวแปรอย่างน้อย 1 ตัวที่ขึ้นอยู่กับเวลา
ส่วนประกอบ
อนุกรมเวลาสามารถแบ่งย่อยออกเป็นส่วนประกอบต่างๆ ได้ ดังนี้
- แนวโน้ม: เลื่อนขึ้นหรือลงในรูปแบบที่คาดการณ์ได้อย่างสมเหตุสมผล
- เทศกาล: เกิดซ้ำในช่วงเวลาที่เจาะจง เช่น วัน สัปดาห์ เดือน ฤดูกาล ฯลฯ
- แบบสุ่ม: ความผันผวนคงเหลือ
ฤดูกาลอาจมีหลายขั้น ตัวอย่างเช่น ศูนย์ให้บริการทางโทรศัพท์อาจเห็นรูปแบบของปริมาณการโทรในวันใดวันหนึ่งของสัปดาห์และในเดือนที่ระบุ ส่วนที่เหลืออาจอธิบายได้ด้วยตัวแปรอื่นนอกจากเวลา
ที่ตั้งตรง
เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดในการคาดการณ์ ข้อมูลอนุกรมเวลาควรทำให้เป็นแบบคงที่ โดยสมบัติทางสถิติ เช่น ค่าเฉลี่ยและความแปรปรวนจะคงที่เมื่อเวลาผ่านไป เทคนิคต่างๆ เช่น ความแตกต่างและการลดทอนอาจนำมาใช้กับข้อมูลดิบเพื่อให้เนื้อหามีความอยู่กับที่มากขึ้น
ตัวอย่างเช่น พล็อตด้านล่างของความเข้มข้นของ CO2 แสดงรูปแบบรายปีที่ซ้ำกันและมีแนวโน้มเพิ่มขึ้น ( แหล่งที่มา)
หลังจากนำแนวโน้มเชิงเส้นออกแล้ว ข้อมูลจะเหมาะสำหรับการคาดการณ์มากกว่าเนื่องจากมีค่าเฉลี่ยคงที่ในปัจจุบัน
การใช้ข้อมูลอนุกรมเวลาสำหรับแมชชีนเลิร์นนิง
หากต้องการใช้ข้อมูลอนุกรมเวลาในโจทย์แมชชีนเลิร์นนิง จะต้องเปลี่ยนรูปแบบข้อมูลดังกล่าวเพื่อให้ใช้ค่าก่อนหน้าในการคาดการณ์ค่าในอนาคตได้ ตารางนี้แสดงตัวอย่างวิธีการสร้างตัวแปรที่ล่าช้าเพื่อช่วยคาดการณ์เป้าหมาย
เราได้พูดถึงหลักพื้นฐานบางส่วนไปแล้ว เรามาเริ่มสำรวจข้อมูลและการคาดการณ์กันเลยดีกว่า
3. ตั้งค่าสภาพแวดล้อมสมุดบันทึก
เราได้นำเสนอข้อมูลอย่างคร่าวๆ ไปแล้ว ต่อไปเรามาสร้างสภาพแวดล้อมการพัฒนาโมเดลกัน
ขั้นตอนที่ 1: เปิดใช้ API
เครื่องมือเชื่อมต่อ BigQuery ใช้ BigQuery Storage API ค้นหา BigQuery Storage API ในคอนโซล และเปิดใช้ API หากปิดใช้อยู่ในปัจจุบัน
ขั้นตอนที่ 2: สร้างสมุดบันทึก Vertex AI Workbench
ไปที่ส่วน Vertex AI Workbench ของ Cloud Console แล้วคลิกสมุดบันทึกใหม่ จากนั้นเลือกสมุดบันทึก TensorFlow Enterprise 2.x ล่าสุดที่ไม่มี GPU ดังนี้
ใช้ตัวเลือกเริ่มต้นแล้วคลิกสร้าง เมื่อสร้างอินสแตนซ์แล้ว ให้เลือก Open JupyterLab:
จากนั้นสร้างสมุดบันทึก Python 3 จาก JupyterLab โดยใช้คำสั่งต่อไปนี้
ขั้นตอนที่ 3: ดาวน์โหลดสื่อการเรียนการสอนของชั้นเรียนสำหรับห้องทดลอง
สร้างหน้าต่างเทอร์มินัลใหม่จากอินเทอร์เฟซ JupyterLab: ไฟล์ -> ใหม่ -> เทอร์มินัล
จากนั้นโคลนเนื้อหาต้นฉบับด้วยคำสั่งนี้
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
ล้างเซลล์ทั้งหมดในสมุดบันทึก (แก้ไข > ล้างเอาต์พุตทั้งหมด) เปลี่ยนการตั้งค่าภูมิภาค โปรเจ็กต์ และที่เก็บข้อมูลในเซลล์ใดเซลล์หนึ่ง แล้วเรียกใช้เซลล์ทีละรายการ
ขั้นตอนที่ 3
ในส่วนนี้ คุณได้นำเข้าข้อมูลและแสดงภาพมิติข้อมูลต่างๆ ของข้อมูล เมื่อมีภาพข้อมูลที่ชัดเจนขึ้น คุณก็พร้อมที่จะไปยังการสร้างแบบจำลองแมชชีนเลิร์นนิงโดยใช้ข้อมูลนี้
5. สร้างโมเดลด้วยการคาดการณ์อนุกรมเวลาของ BigQuery
ในส่วนนี้ คุณจะได้ทำสิ่งต่อไปนี้
- นำเข้าข้อมูลอินพุตอนุกรมเวลาลงในตาราง BigQuery
- สร้างโมเดลอนุกรมเวลาโดยใช้ไวยากรณ์ BQML
- ดูวิธีประเมินพารามิเตอร์โมเดลและความแม่นยำ
- คาดการณ์โดยใช้โมเดลของคุณ
ขั้นตอนที่ 1
เราจะสร้างตาราง BigQuery ด้วยข้อมูลดิบจาก CSV ที่เราเพิ่งสำรวจไป เริ่มต้นด้วยการดาวน์โหลดไฟล์ CSV จากสภาพแวดล้อมของสมุดบันทึก
จากไดเรกทอรี training-data-analyst/courses/ai-for-time-series/notebooks/data
ให้คลิกขวาที่ cta_ridership.csv
และดาวน์โหลดไปยังสภาพแวดล้อมในเครื่องของคุณ
ขั้นตอนที่ 2
ต่อไปเราจะอัปโหลดข้อมูลนี้ลงในตาราง BigQuery
ไปที่ BigQuery ในคอนโซล (โดยการค้นหาหรือใช้ลิงก์นี้) ดังนี้
คุณจะเพิ่มตารางลงในชุดข้อมูลใหม่หรือชุดข้อมูลที่มีอยู่ก็ได้ ซึ่งจะจัดกลุ่มตารางที่เกี่ยวข้องกัน ในกรณีที่ยังไม่ได้สร้างชุดข้อมูล คุณสามารถคลิกโปรเจ็กต์ที่มุมล่างซ้าย แล้วเลือกสร้างชุดข้อมูลที่มุมล่างขวา
เลือกชื่อที่ต้องการ เช่น demo
ยอมรับค่าเริ่มต้น และดำเนินการต่อ
เมื่อเลือกชุดข้อมูลแล้ว ให้เลือกสร้างตารางที่มุมขวาล่างเพื่อสร้างตารางใหม่
สําหรับตัวเลือกการสร้างตาราง ให้เลือกตัวเลือกต่อไปนี้
- สร้างตารางจากอัปโหลด
- เลือกไฟล์ cta_ridership.csv
- ชื่อตาราง: cta_ridership
- สคีมา: เลือกช่องนี้เพื่อตรวจหาสคีมาและพารามิเตอร์อินพุตโดยอัตโนมัติ
ขั้นตอนที่ 3
ตอนนี้ได้เวลาสร้างโมเดลของเราแล้ว BigQuery ML มีไวยากรณ์ที่ตรงไปตรงมาซึ่งคล้ายกับ SQL ซึ่งช่วยให้คุณสร้างประเภทโมเดลที่หลากหลายได้
วาง/พิมพ์คำค้นหานี้ในตัวแก้ไขคำค้นหา และแทนที่การสาธิตด้วยชื่อชุดข้อมูลในทั้ง 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`
ลองมาดูองค์ประกอบสำคัญของไวยากรณ์เพื่อทำความเข้าใจกัน:
| คำสั่งนี้จะสร้างโมเดล คำสั่งนี้มีรูปแบบที่หลากหลาย เช่น |
| ในส่วนนี้ เราจะกำหนดตัวเลือกโมเดล โดยตัวเลือกแรกคือประเภทโมเดล การเลือก ARIMA จะสร้างโมเดลการคาดการณ์อนุกรมเวลา |
| คอลัมน์ที่มีข้อมูลวันที่/เวลา |
| คอลัมน์ข้อมูล |
| พารามิเตอร์ที่ไม่บังคับนี้ช่วยให้เรารวมวันหยุดไว้ในโมเดลได้ เนื่องจากการสำรวจข้อมูลของเราในขั้นตอนก่อนหน้าแสดงให้เห็นว่าจำนวนผู้โดยสารลดลงในช่วงวันหยุด และข้อมูลมาจากชิคาโก อิลลินอยส์ สหรัฐอเมริกา เราจึงได้รวมวันหยุดของสหรัฐอเมริกาไว้ในโมเดลนี้ |
| ส่วนนี้จะเลือกอินพุตที่เราจะใช้ในการฝึกโมเดล |
คุณเพิ่มตัวเลือกอื่นๆ ในการค้นหาได้ เช่น การกำหนดคอลัมน์หากคุณมีอนุกรมเวลาหลายรายการ หรือการเลือกว่าจะค้นหาพารามิเตอร์โมเดล ARIMA โดยอัตโนมัติหรือไม่ ดูรายละเอียดเพิ่มเติมได้ในการอ้างอิงไวยากรณ์สร้างโมเดลสำหรับโมเดลอนุกรมเวลา
ขั้นตอนที่ 4
มาดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลของเรากัน หลังจากการฝึกเสร็จสมบูรณ์ ให้เรียกใช้การค้นหาอื่น แล้วแทนที่ การสาธิต อีกครั้งหากจำเป็น
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
มาตีความผลลัพธ์กัน คุณจะเห็นรูปแบบตัวเลือกในแต่ละแถว พร้อมพารามิเตอร์และสถิติการประเมิน ระบบจะแสดงผลผลลัพธ์ตามลำดับจากน้อยไปมากของ AIC หรือเกณฑ์ข้อมูลของ Akaike ซึ่งระบุตัวบ่งชี้คุณภาพของโมเดลแบบสัมพัทธ์ ดังนั้นโมเดลในแถวแรกมี AIC ต่ำสุดและถือว่าเป็นโมเดลที่ดีที่สุด
คุณจะเห็นพารามิเตอร์ p, d และ q ของโมเดล ARIMA รวมถึงฤดูกาลที่ค้นพบในโมเดล ในกรณีนี้ รูปแบบระดับบนสุดจะมีทั้งฤดูกาลแบบรายสัปดาห์และรายปี
ขั้นตอนที่ 5
ตอนนี้เราพร้อมคาดการณ์ด้วยฟังก์ชัน ML.FORECAST
แล้ว
วาง/พิมพ์ข้อมูลต่อไปนี้ (แทน demo หากจำเป็น)
SELECT * FROM ML.FORECAST(MODEL `demo.cta_ridership_model`, STRUCT(7 AS horizon))
ข้อความค้นหานี้คาดการณ์โดยใช้โมเดลของเราใน 7 วันที่ผ่านมา เราจะเห็นแถวทั้ง 7 แถวที่แสดงด้านล่างนี้ การคาดการณ์ยังมีช่วงความเชื่อมั่น โดยมีค่าเริ่มต้นเป็น 0.95 แต่สามารถกำหนดค่าได้ในการค้นหา
ทำได้ดีมาก: เราได้สร้างโมเดลอนุกรมเวลาด้วยการค้นหา BQML เพียงไม่กี่รายการ
6. สร้างโมเดลการคาดการณ์ที่กำหนดเอง
ในส่วนนี้ คุณจะได้ทำสิ่งต่อไปนี้
- นําค่าผิดปกติออกจากข้อมูล
- ทำการคาดการณ์แบบหลายขั้นตอน
- รวมฟีเจอร์เพิ่มเติมในรูปแบบอนุกรมเวลา
- เรียนรู้เกี่ยวกับสถาปัตยกรรมโครงข่ายระบบประสาทเทียมสำหรับการคาดการณ์อนุกรมเวลา: LSTM และ CNN
- ดูข้อมูลเกี่ยวกับโมเดลทางสถิติ รวมถึง Holt-Winters Exponential Smoothing
- รวมโมเดล
ขั้นตอนที่ 1
ใน Vertex AI Workbench ให้ไปที่ training-data-analyst/courses/ai-for-time-series/notebooks
และเปิด 02-model.ipynb
ขั้นตอนที่ 2
ล้างเซลล์ทั้งหมดในสมุดบันทึก (แก้ไข > ล้างเอาต์พุตทั้งหมด) เปลี่ยนการตั้งค่าภูมิภาค โปรเจ็กต์ และที่เก็บข้อมูลในเซลล์ใดเซลล์หนึ่ง แล้วเรียกใช้เซลล์ทีละรายการ
ขั้นตอนที่ 3
ในสมุดบันทึก คุณได้สำรวจสถาปัตยกรรมโมเดลหลายอย่าง ได้แก่ LSTM, CNN และโมเดลทางสถิติ สำหรับแต่ละโมเดล คุณจะเห็นประสิทธิภาพของโมเดลเทียบกับข้อมูลทดสอบ ดังนี้
7. ฝึกและคาดการณ์ในระบบคลาวด์
ในส่วนนี้ คุณจะได้ทำสิ่งต่อไปนี้
- เตรียมข้อมูลและโมเดลสำหรับการฝึกในระบบคลาวด์
- ฝึกโมเดลและตรวจสอบความคืบหน้าของงานด้วยการฝึก AI Platform
- คาดการณ์โดยใช้โมเดลด้วยการคาดการณ์ของ AI Platform
ขั้นตอนที่ 1
ใน Vertex AI Workbench ให้ไปที่ training-data-analyst/courses/ai-for-time-series/notebooks
และเปิด 03-cloud-training.ipynb
ขั้นตอนที่ 2
ล้างเซลล์ทั้งหมดในสมุดบันทึก (แก้ไข > ล้างเอาต์พุตทั้งหมด) เปลี่ยนการตั้งค่าภูมิภาค โปรเจ็กต์ และที่เก็บข้อมูลในเซลล์ใดเซลล์หนึ่ง แล้วเรียกใช้เซลล์ทีละรายการ
ขั้นตอนที่ 3
ในส่วนก่อนหน้านี้ เราได้ฝึกโมเดลและคาดการณ์โดยใช้โมเดลภายในสมุดบันทึก Workbench ในส่วนนี้ เราสาธิตวิธีใช้ Python SDK สำหรับ Vertex AI จากสมุดบันทึกของคุณเพื่อใช้บริการ Vertex AI สำหรับการฝึกและการติดตั้งใช้งาน
8. ความท้าทาย
ในส่วนนี้ คุณจะได้ลองใช้แนวคิดที่ได้เรียนรู้กับชุดข้อมูลใหม่
เราไม่ได้ให้คำแนะนำโดยละเอียด แต่เป็นเพียงคำแนะนำบางประการ (หากคุณต้องการ)
เป้าหมายคือการคาดการณ์คำขอบริการ 311 รายการจากนครนิวยอร์ก คำขอที่ไม่ฉุกเฉินเหล่านี้รวมถึงการร้องเรียนเรื่องเสียงรบกวน ปัญหาเรื่องไฟถนน ฯลฯ
ขั้นตอนที่ 1
มาเริ่มต้นด้วยการทำความเข้าใจชุดข้อมูล
ขั้นแรก ให้เข้าถึงชุดข้อมูลคำขอบริการ 311 ของนครนิวยอร์ก
เพื่อทำความรู้จักข้อมูลให้ดียิ่งขึ้น ให้ลองใช้การค้นหาตัวอย่าง 2 รายการที่แสดงในคำอธิบายชุดข้อมูล
- จำนวนคำขอ 311 รายการที่เกี่ยวข้องกับรถไอศกรีมคืออะไร
- วันใดได้รับคำขอที่เกี่ยวข้องกับบุคคลอื่นมากที่สุด 311 รายการ
ใน BigQuery UI ให้เลือกสร้างคำค้นหาเพื่อดูวิธีเข้าถึงชุดข้อมูล โปรดทราบว่าคำสั่ง Select กำลังค้นหาจาก bigquery-public-data.new_york_311.311_service_requests
ขั้นตอนที่ 2
เราพร้อมเริ่มต้นใช้งานแล้ว ในส่วนนี้ ให้ทำการแก้ไขในสมุดบันทึกสำรวจและแสดงภาพเพื่อทำงานกับข้อมูลนี้
คำแนะนำ
- ทำซ้ำสมุดบันทึก
01-explore.ipynb
และเริ่มทำงานจากสมุดบันทึกดังกล่าว - ลองใช้คำค้นหานี้เพื่อสำรวจข้อมูล
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 ไม่มีฟีเจอร์เพิ่มเติม
- ลองเปลี่ยนชื่อไฟล์ที่จะส่งออกข้อมูลสำหรับห้องทดลองถัดไป
- ส่งออกข้อมูลโดยใช้:
df.to_csv(YOUR-EXPORT-FILENAME, index=False)
ขั้นตอนที่ 3
เรามาสร้างโมเดลอนุกรมเวลาที่มีข้อมูลรายเดือนกัน
คำแนะนำ
- ทำซ้ำสมุดบันทึก
02-model.ipynb
และเริ่มทำงานจากสมุดบันทึกดังกล่าว - อัปเดตพารามิเตอร์ชุดข้อมูลดังนี้
- อัปเดตพารามิเตอร์
target_col
และts_col
ให้ตรงกับชุดข้อมูลใหม่ - อัปเดตพารามิเตอร์โมเดลโดยทำดังนี้
- ความถี่ถึงรายเดือน (รหัสสำหรับการเริ่มต้นเดือนคือ "MS")
- ขั้นตอนการป้อนข้อมูล: 12 (กรอบเวลามองย้อนกลับคือ 12 เดือน)
- ขั้นตอนเอาต์พุต: 3 (คาดการณ์ 3 เดือนนับจากนี้)
- ซีซัน: 12 (ฤดูกาลคือ 12 เดือน)
- เปลี่ยนชื่อไฟล์อินพุตหากคุณเปลี่ยนชื่อในสมุดบันทึกก่อนหน้า
- หากคุณเรียกใช้การค้นหาในช่วงกลางเดือน ยอดรวมรายเดือนของเดือนถัดไปจะน้อยกว่าที่คาดไว้มาก ดังนั้น ตามวัตถุประสงค์ของห้องทดลองนี้ เราจะนำเดือนสุดท้ายออกจากชุดข้อมูลโดยใช้
df = df[:-1]
- ดูเหมือนว่าข้อมูลจะไม่ผิดปกติอย่างชัดเจน ดังนั้นโปรดข้ามหรือแสดงความคิดเห็นเซลล์เหล่านั้น
- ปรับหน่วย LSTM และตัวกรอง CNN และขนาดเคอร์เนลสำหรับรูปแบบใหม่นี้
9. ล้างข้อมูล
หากต้องการใช้สมุดบันทึกนี้ต่อไป ขอแนะนำให้ปิดสมุดบันทึกเมื่อไม่ได้ใช้งาน จาก Workbench UI ใน Cloud Console ให้เลือกสมุดบันทึก แล้วเลือกหยุด
หากต้องการลบทรัพยากรทั้งหมดที่สร้างไว้ในห้องทดลองนี้ เพียงลบสมุดบันทึก Workbench แทนการหยุดการทำงาน
ใช้เมนูการนำทางใน Cloud Console เพื่อเรียกดูพื้นที่เก็บข้อมูล และลบที่เก็บข้อมูลทั้ง 2 รายการที่คุณสร้างขึ้นเพื่อจัดเก็บเนื้อหาโมเดล (คำเตือน: ดำเนินการนี้ต่อเมื่อคุณสร้างที่เก็บข้อมูลใหม่สำหรับห้องทดลองนี้เท่านั้น)