ลองใช้ Package Prophet ของ facebook สร้างโมเดลทำนายผู้ติดเชื้อ COVID-19 ในไทย

Sasiwut Chaiyadecha
2 min readApr 4, 2020

--

ดูจากจำนวนผู้ติดเชื่อสะสมที่เพิ่มวันละเกือบร้อยหรือร้อยกว่าขนาดนี้ โมเดลเดิมที่ใช้ Exponential smoothing จับไม่ทันแน่ ๆ วันเลยลองมาทำโมเดลอันใหม่ เดี๋ยวมาดูผลกันว่ารันออกมาแล้วจะได้ค่าเท่าไหร่

Prophet ทำนายผล COVID-19 ในอีก 1 สัปดาห์ข้างหน้า

เขียนวันที่ 03/04/2020

Prophet ทำนายผล COVID-19 ในอีก 1 สัปดาห์ข้างหน้า

เนื่องจากตอนเดิมตอนที่แล้ว ทำโมเดลด้วย 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

Prophet ทำนายผล COVID-19 ในอีก 1 สัปดาห์ข้างหน้า
จำนวนยอดผู้ป่วยสะสมในประเทศไทยตั้งแต่วันที่ 03/04 – 09/04
ds            2020-04-09 00:00:00
yhat 2642
yhat_lower 2561
yhat_upper 2734

ผลจาก Model บอกว่าผู้ป่วยสะสม ณ วันที่ 09/04 จะมีทั้งหมด 2,642 คน โดยอยู่ในช่วงระหว่าง 2,561 ถึง 2,734 คน

Prophet ทำนายผล COVID-19 ในอีก 1 สัปดาห์ข้างหน้า
จำนวนยอดผู้ป่วยใหม่ในประเทศไทยตั้งแต่วันที่ 03/04–09/04
ds            2020-04-09 00:00:00
yhat 159
yhat_lower 127
yhat_upper 192

ผลจาก Model บอกว่าผู้ป่วยใหม่ ณ วันที่ 09/04 จะมีทั้งหมด 159 คน โดยอยู่ในช่วงระหว่าง 127 ถึง 192 คน

เดี๋ยวรอให้ถึงวันที่ 9 ก็รู้แล้วว่ามันแม่นหรือไม่…

--

--

Sasiwut Chaiyadecha
Sasiwut Chaiyadecha

No responses yet