ในช่วงหนึ่งเดือนที่ผ่านมา ปัญหาที่ชาวกรุงเทพทุกคนต้องเจอคงหนีไม่พ้นคือ ปัญหาจากฝุ่นละอองขนาดเล็ก PM 2.5 ซึ่งเราน่าจะได้เคยเห็นการถกเถียงปัญหานี้ในแง่มุมต่าง ๆ มากันแล้ว ไม่ว่าจะเป็นต้นตอของปัญหาในกรุงเทพ, ปัจจัยภายนอกจากสภาพแวดล้อม เป็นต้น ซึ่งวันนี้ผมจะชวนมาลองดูว่า เราพอจะเล่นอะไรสนุก ๆ กับข้อมูลเรื่องนี้ได้บ้าง
วัตถุประสงค์ของ blog นี้คือต้องการให้เห็นว่าเราสามารถนำข้อมูลในชีวิตประจำวันต่าง ๆ มาวิเคราะห์และสร้างแบบจำลองง่าย ๆ ได้ และอยากดูว่าปัจจัยต่าง ๆ ที่เกี่ยวข้องกับปริมาณฝุ่นละออง PM 2.5 ตามที่มีพูดถึงใน Internet ไม่ว่าจะเป็นกระแสลม หรือความชื้นมีผลกับปริมาณฝุ่นละอองอย่างไร
เราสามารถหาข้อมูลคุณภาพอากาศในประเทศไทยได้จากเว็บไซต์ของกรมควบคุมมลพิษ โดยข้อมูลเหล่านี้เก็บมาจากสถานีวัดคุณภาพอากาศจุดต่างๆ ทั้งหมด 62 จุดและเรียกดูข้อมูลย้อนหลังได้สูงสุด 1 เดือน
ข้อมูลที่เราได้จากเว็บไซต์ของกรมควบคุมมลพิษข้างต้นประกอบด้วยความเร็วและทิศทางลม
โดยเราเลือกสถานีที่อยู่ในกรุงเทพฯ และ จังหวัดที่อยู่ในแนวตะวันออก — ตะวันตกของกรุงเทพฯ และใช้ข้อมูลในช่วง 18 ธันวาคม 2561 ถึง 17 มากราคม 2562 โดยมีการเก็บข้อมูลทุก 1 ชั่วโมง ทำให้เรามีข้อมูลของฝุ่นในแต่ละช่วงเวลาด้วย
ถึงแม้ 1 เดือนจะไม่ใช่เวลาที่ไม่ยาวมาก แต่สถานการณ์ฝุ่นในช่วงเวลาดังกล่าวมีการเปลี่ยนแปลงพอสมควร จึงน่าจะเพียงพอสำหรับการทดลองเล็กๆของเราได้ครับ
ถึงเราจะได้แหล่งข้อมูลที่ค่อนข้างครบถ้วนมาแล้ว แต่ด้วยความที่เว็บไซต์ของกรมควบคุมมลพิษไม่ได้เตรียม api ไว้ให้เรียกใช้ได้โดยตรง การนำข้อมูลมาใช้ท่ายากนิดนึง คือ เราต้องไปดึงตารางจากหน้าเว็บและมาแปลงเองด้วย BeatifulSoup และ Pandas ซึ่งเราจะได้ข้อมูลออกมาในรูปแบบตาราง จากนั้นเราก็จัดการ normalise data ที่เรามี เพราะตัวข้อมูลมีการกระจายตัวที่ค่อนข้างสูง ซึ่งอาจจะส่งผลกระทบกับ performance ของ model ได้
และเรามาดูกันว่าข้อมูลที่เราได้มีลักษณะอย่างไร
ในกราฟนี้เราได้ใส่ระดับผลกระทบต่อสุขภาพตาม AQI Scale ที่บอกความรุนแรงของผลกระทบต่อสุขภาพ ซึ่งดูคร่าว ๆ เกือบครึ่งหนึ่งของข้อมูลตกอยู่ในช่วงที่มีผลกระทบต่อสุขภาพ (เกินกว่า 150)
นอกจากนั้นในกราฟยังได้ระบุวันที่มีฝนตกด้วยเส้นสีแดง ซึ่งจะเห็นว่าวันที่มีฝนตกจะทำให้ค่า PM 2.5 ลดลงอย่างเห็นได้ชัด
นอกจากนั้นเรายังเห็นว่า ปริมาณฝุ่นละออง PM 2.5 มีการเปลี่ยนแปลงเป็นขึ้นลงตามช่วงเวลา ดังนั้นเวลาก็อาจจะเป็นปัจจัยหนึ่งที่ส่งผลกระทบกับปริมาณฝุ่นละอองด้วยเช่นกัน
เราพอจะตั้งสมมติฐานคร่าวๆได้ว่า สภาพแวดล้อมต่าง ๆ เช่น กระแสลม หรือ ปริมาณน้ำฝน รวมไปถึงเวลา ส่งผลกระทบกับปริมาณ PM2.5 ซึ่งเราจะนำสมมติฐานนี้ ไปใช้ในโมเดลของเราครับ
เราเลือกใช้ Gated Recurrent Units (GRUs) ซึ่งเป็น Recurrent Network รูปแบบหนึ่ง
เหตุผลที่เราเลือกใช้ GRUs ในการสร้าง model ปริมาณฝุ่นละออง PM2.5 เนื่องจากตัว GRUs สามารถนำเก็บข้อมูลในอดีตมาใช้ทำนายผลลัพธ์แบบเดียวกับใน Long-Short Term Memory Network (LSTMs) แต่ใน GRUs มีจำนวน model parameters น้อยกว่า และยังไม่มีข้อสรุป้ว่า GRUs หรือ LSTMs มีความแตกต่างกันในเรื่องประสิทธิภาพ[1] เราจึงเลือกใช้ GRUs ซึ่งน่าจะเหมาะสมกับสถานการณ์ที่ข้อมูลมีจำนวนไม่มากเช่นข้อมูล PM2.5 ของเรา
ด้วยโมเดลนี้ เราจะบอกว่า ปริมาณฝุ่น PM2.5 ในพื้นที่กรุงเทพฯ ขึ้นอยู่กับปัจจัยต่างๆ ได้แก่ ความเร็วและทิศทางของกระแสลม ปริมาณน้ำฝน ความชื้นสัมพัทธ์ และเวลาต่างๆของวัน ทีนี้เราก็เอาข้อมูลทั้งหมดใส่ไปใน GRUs ของเราเพื่อให้เรียนรู้ความสัมพันธ์ และให้ออกมาเป็นค่า PM2.5 ของหนึ่งชั่วโมงข้างหน้า หรือ เวลา t + 1
และข้างล่างคือผลลัพธ์ของการ train model ของเราครับ
หลังจากที่เรา train GRUs model เรามาลองดูว่า model ของเราทำนายค่า PM2.5 ออกมาเป็นอย่างไรกันครับ
จะเห็นว่าผลการทำนาย (สีฟ้า) ค่อนข้างสอดคล้องกับค่าจริง (สีส้ม) พอสมควร ซึ่งเรานำผลการทำนายที่ได้มาเทียบกับทั้งข้อมูลที่ใช้ train (โซนสีเขียว) และ test (โซนสีเหลือง) จะเห็นว่าค่าจากการทำนายและค่าจริงมีความใกล้เคียงกันครับ
ด้วยข้อมูลคุณภาพอากาศที่ได้จากกรมควบคุมมลพิษ และ ผลลัพท์จากการทำนายค่า PM2.5 เราพอจะสรุปได้คร่าวๆว่า ทั้งสภาพอากาศ และ ทิศทางลม ในช่วงเวลาต่างๆ ส่งผลกับปริมาณฝุ่นละออง PM2.5 พอสมควร และ เราสามารถนำข้อมูลนี้มาสร้างเป็นแบบจำลองง่ายๆด้วย Deep Learning Model และจากสมมติฐานแบบง่ายๆของเราว่า สภาพแวดล้อมส่งผลกับปริมาณฝุ่นละออง PM2.5 ในบริเวณนั้น สามารถนำมาสร้างโมเดลทำนายปริมาณฝุ่นละอองได้ เมื่อใช้ข้อมูลปริมาณน้ำฝน ความเร็วและทิศทางลม ความชื้นสัมพัทธ์ และช่วงเวลาของวัน และได้ผลลัพธ์ที่ใกล้เคียงกับข้อมูลจริงครับ
References [1] Chung, Junyoung; Gulcehre, Caglar; Cho, KyungHyun; Bengio, Yoshua (2014). “Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling”. arXiv:1412.3555 [cs.NE].
Drop us a line and we will get back to you