ลองใช้ Package Prophet ของ facebook สร้างโมเดลทำนายผู้ติดเชื้อ COVID-19 ในไทย
ดูจากจำนวนผู้ติดเชื่อสะสมที่เพิ่มวันละเกือบร้อยหรือร้อยกว่าขนาดนี้ โมเดลเดิมที่ใช้ Exponential smoothing จับไม่ทันแน่ ๆ วันเลยลองมาทำโมเดลอันใหม่ เดี๋ยวมาดูผลกันว่ารันออกมาแล้วจะได้ค่าเท่าไหร่
เขียนวันที่ 03/04/2020
เนื่องจากตอนเดิมตอนที่แล้ว ทำโมเดลด้วย Exponential smoothing แล้วรู้สึกว่ามันยากจัง เลยลองหา Package ตัวใหม่เกี่ยวกับการ Forecast ซึ่งก็รู้จักกับ Prophet
ซึ่งมันน่าสนใจที่ facebook เป็นผู้พัฒนา ใครอยากอ่านเพิ่มเติมตามลิงค์ข้างล่างได้
กลับมาเข้าเรื่องดีกว่า วันนี้ก็ยังอยู่การหาผู้ติดเชื้อในประเทศไทยบ้านเรานี่แหละ ดูว่าอีก 1 สัปดาห์ข้างหน้านี้ ยอดผู้ติดเชื้อจะเป็นเท่าไหร่ ยังเหมือนเดินใช้ข้อมูลชุดเดียวกันจากตอนที่แล้ว วิธีการดึงก็ย้ำให้อีกทีว่าอยู่ที่นี่จ้า
พร้อมแล้วก็มาเริ่มสร้างโมเดลกันเลย ก่อนอื่นต้องติดตั้ง Prophet
ก่อน ใช้ pip install
ก็ได้ ไฟล์ค่อนข้างใหญ่อาจจะใช้เวลาซักนิดนึง
Install
pip install fbprophet
ถ้าใครเจอปัญหาเหมือนผมที่ติดตั้งผ่าน pip install
ไม่ได้ อาจต้องใช้ conda
แทนนะครับ ซึ่งผมก็ได้ทำคำแนะนำจาก Stackover มาอีกที ทำตามนี้ได้เลยจ้า https://stackoverflow.com/questions/53178281/installing-fbprophet-python-on-windows-10
conda install -c conda-forge fbprophet
หลังจากที่ติดตั้ง Prophet
ได้แล้วก็มาเริ่มทำโมเดลกันเลย ยังใช้ข้อมูลชุดเดิม แค่อัพเดตวันที่นิดหน่อย ตามวันและเวลาที่รันตัว API นะครับ เริ่มโค้ดเลยดีกว่า
Code
คำนวณแค่ 2 รอบ ไม่เขียน loop ละกันนะ
Prophet(interval_width = x)
กำหนดค่าเพียงเท่านี้ก็สามารถ .fit()
โมเดลออกมาได้เลย เนื่องจากว่าค่า Default ของ Package ทำไว้ดีมากอยู่แล้ว มีที่น่าแปลกใจอยู่นิดนึงคือ ทำไมต้องเปลี่ยนชื่อ Fields ให้เป็น ‘ds’
กับ ‘y’
ด้วยนะ แต่คงเป็นค่าใน Package เค้าแหละ
จากนั้นเราก็แค่ .make_future_dataframe(periods = x)
จะทำนายล่วงหน้าไปกี่วันก็ใส่จำนวนเข้าไปได้เลย แต่ถ้าเปิด Dataframe
ออกมาแล้วยังไม่มีค่าอะไร ยังไม่ต้องตกใจ เนื่องจากเราต้องดึงค่าออกมาจาก .predict()
ก่อน
ครั้งนี้เราจะทำนายค่าออกมาเป็นช่วงข้อมูล ดังนั้นเลยดึง lower
และ upper
ออกมาด้วย จากนั้นก็ทำ Visualization ง่าย ๆ .plot()
โมเดลรอบนี้ทำการคำนวณหาจำนวนผู้ป่วยสะสมและผู้ป่วยใหม่รายวัน แล้วเราก็มาดูผลลัพธ์ในอีก 1 สัปดาห์ต่อจากนี้กันครับ
Results
ds 2020-04-09 00:00:00
yhat 2642
yhat_lower 2561
yhat_upper 2734
ผลจาก Model บอกว่าผู้ป่วยสะสม ณ วันที่ 09/04 จะมีทั้งหมด 2,642 คน โดยอยู่ในช่วงระหว่าง 2,561 ถึง 2,734 คน
ds 2020-04-09 00:00:00
yhat 159
yhat_lower 127
yhat_upper 192
ผลจาก Model บอกว่าผู้ป่วยใหม่ ณ วันที่ 09/04 จะมีทั้งหมด 159 คน โดยอยู่ในช่วงระหว่าง 127 ถึง 192 คน
เดี๋ยวรอให้ถึงวันที่ 9 ก็รู้แล้วว่ามันแม่นหรือไม่…