ลองใช้ Exponential smoothing model หาผู้ติดเชื้อ COVID-19 ในอีก 10 วันข้างหน้า

Sasiwut Chaiyadecha
3 min readApr 3, 2020

--

เขียนวันที่ 2 April 2020

ยังอยู่ในเรื่องของ COVID-19 วนไปวนมาและมันก็ดูเหมือนจะรุนแรงขึ้นเรื่อย ๆ ซะด้วยสิ วันนี้เลยจะมาลองทำ Model หาจำนวนผู้ติดเชื้อ COVID-19 ของไทย ในอีก 10 วันต่อจากนี้

จริง ๆ มีวิธีการหลากหลายมากในการทำ Model ทำนายผลออกมาสักค่านึง เดี๋ยววันหลังจะลองทำ Model หลาย ๆ แบบมาเทียบผลกัน แต่วันนี้มาลองใช้วิธี Exponential smoothing กันก่อน วิธีการดึงข้อมูลเคยทำให้ดูแล้ว ใน Blog ตอน ใช้ Python ดึงข้อมูล API ของ Corona-virus (COVID-19) แต่ว่าอย่าลืมเปลี่ยน API เป็น v2 นะ

โค้ดต่อจาก Blog ตอนนั้นได้เลย พอได้ข้อมูลมาแล้วก็เลือกเอาเฉพาะประเทศไทย เพื่อให้รันโมเดล ใช้ .loc[] เลือกออกมาได้เลย

Code

เริ่มจาก Import packages ทั้งหลายที่จำเป็นในการใช้ทำโมเดลในครั้งนี้ จากนั้นก็สร้าง list ว่างเอาไว้เพื่อเก็บข้อมูลจาก loop ที่กำลังจะเขียนต่อไป

เริ่มทำเพิ่มขึ้นครั้งละ 10 วัน เพื่อทำนายผลในอีก 10 วันข้างหน้า

อันนี้คือ Assumption ของโมเดล ดังนั้นเลยจำเป็นต้องเลือกข้อมูลเพิ่มขึ้นทีละ 10 วัน โดยเริ่มจากวันแรกที่มีข้อมูล คือ 22/01/2020 บวกไปอีก 10 วัน สามารถใช้ timedelta(day = x) ในการหา x วันข้างหน้าได้

คำถามต่อไปคือ เราจะต้องหาทั้งหมดกี่วัน? ง่าย ๆ คือนับข้อมูลทั้งหมด แล้วหารด้วย 10 เราก็จะได้จำนวนที่เราต้องทั้งหมด ในกรณีที่หารไม่ลงตัว ผมเลยใช้ math.ceil() ในการ always roundup ตัวเลข จากนั้นก็ใช้มันเป็น parameter ใน for loop

ที่เหลือก็จะเป็นการ .fit() model แล้ว ซึ่งสามารถเขียนตามได้เลย ที่อยากให้สนใจ คือ option ต่าง ๆ ในตัว Package เช่น trend=’add’, seasonal=’add’, seasonal_periods=10 ซึ่งพวกนี้สามารถปรับให้ effect ในโมเดลเบาหรือแรงได้เช่นกัน แต่วันนี้ไม่ได้เพิ่ม effect อะไรให้โมเดล แค่สั่งให้มันใส่ตัว trend และ seasonal เข้าไปด้วยเท่านั้น จากนั้นก็เป็นการจัดข้อมูลให้อยู่ในรูปของ Dataframe เท่านั้นเอง

มาดูค่าที่ได้จากโมเดลกันบ้าง

ทำนาย COVID-19 ในอีก 10 วันข้างหน้าในประเทศไทย

การทดลอง .fit() model รอบแรกจะเห็นว่าเส้นสีเขียว ยังเป็น Trend เดียวกับข้อมูลจริงอยู่ น่าจะมาจากจำนวนเคสของไทยยังไม่เยอะ และ Trend ของข้อมูลยังง่ายอยู่

ทำนาย COVID-19 ในอีก 10 วันข้างหน้าในประเทศไทย

การทดลองรอบที่ 2 ค่าจริงกับค่า Forecast เริ่มห่างจากันแล้ว เนื่องจากผู้ติดเชื้อในไทยยังไม่ได้เพิ่มขึ้นมาก ณ ช่วงเวลานั้น

ทำนาย COVID-19 ในอีก 10 วันข้างหน้าในประเทศไทย

การทดลองรอบที่ 3 ค่า Forecast กำลังจะกลับลงมาให้เป็นไปตามข้อมูลจริง แต่ว่า ณ เวลานั้นไทยกลับมีผู้ติดเชื้อเพิ่มมากขึ้น มันเลยมาเจอกันที่ตรงกลาง

ทำนาย COVID-19 ในอีก 10 วันข้างหน้าในประเทศไทย

การทดลองรอบที่ 4 ผู้ติดเชื้อไทยในไทย เพิ่มสูงมากแบบมาก ๆ เส้น Forecast ที่กำลังกลับลงมา Shift ตามไม่ทันเลย

ทำนาย COVID-19 ในอีก 10 วันข้างหน้าในประเทศไทย

การทดลองครั้งที่ 5 ผู้ติดเชื้อในไทยก็พุ่งอย่างก้าวกระโดด เส้น Forecast จับไม่ทันเลยจริง ๆ รูปนี้ไม่สวยเลย

ทำนาย COVID-19 ในอีก 10 วันข้างหน้าในประเทศไทย

การทดลองครั้งที่ 6 ผู้ติดเชื้อยังเพิ่มขึ้นอย่างต่อเนื่อง และเส้น Forecast เริ่มจะเห็น Trend ดังกล่าวแล้ว เลยกำลังเชิดหัวขึ้นเช่นกัน

ทำนาย COVID-19 ในอีก 10 วันข้างหน้าในประเทศไทย

การทดลองครั้งสุดท้าย ครั้งที่ 7 เพราะว่ามีข้อมูลถึงเท่านี้นะครับ จากโมเดลบอกว่าในอีก 10 ต่อจากนี้ (วันนี้วันที่ 02/04/2020) ประเทศไทยจะมีผู้ติดเชื้อสะสมทั้งหมด 2,056 คน ข้อมูลจำนวนผู้ติดเชื้อ ณ วันที่ 01/04/2020 คือ 1,771 ดังนั้นผู้ติดเชื้อในไทยในอีก 10 วันข้างหน้าจะเพิ่มขึ้นอีกราว ๆ 250 คน

ก็รอดูว่าจะใกล้เคียงไหม…

Reference

--

--

Sasiwut Chaiyadecha
Sasiwut Chaiyadecha

No responses yet