พัฒนาการของวิธีที่ใช้สำหรับ Time series forecasting

DSE4G10
4 min readSep 19, 2021

--

จากอดีตถึงปัจจุบัน มีนักคิด, นักคณิตศาสตร์ที่ร่วมกันพัฒนาแนวคิดและวิธีการสำหรับ Time series forecasting มากมาย แต่ในที่นี้ เราจะขอยกตัวอย่าง 7 ตัวอย่าง (อ้างอิงกับบทเรียนที่เราเรียนมา) โดยเรียงลำดับตั้งแต่ วิธีการแรกเริ่มอย่างง่าย จนถึงวิธีการในปัจจุบันที่มีความซับซ้อนแต่แม่นยำมากขึ้น

วิธีที่ 1 : เริ่มด้วย Naive Approach

วิธีนี้เป็นวิธีอย่างง่ายที่เหมาะสำหรับข้อมูลที่มีความนิ่ง (stable) ค่อนข้างมาก โดยวิธีนี้ถ้าเราต้องการทำนายราคาหุ้นในวันต่อไป เราก็แค่เอาราคาของวันสุดท้ายมาและพิจารณาว่าราคาในวันต่อไปจะมีค่าเท่ากับค่าสุดท้ายนี้ (ง่ายไปมั้ย????)

วิธีที่ 2: Simple Average method

จากกราฟ จะเห็นว่าราคาของหุ้นกำลังเปลี่ยนแปลงทั้งเพิ่มขึ้นและลดลงอย่างสุ่ม ด้วยค่าแตกต่างเพียงเล็กน้อย โดยค่าเฉลี่ยมีค่าคงที่ในช่วงเวลาที่ผ่านมา ด้วยเหตุนี้เราจึงสามารถทำนายราคาหุ้นในวันถัดไปจะเท่ากับค่าเฉลี่ยของราคาย้อนหลังทั้งหมด

วิธีที่ 3: Moving Average method

จากกราฟ ราคาหุ้นเพิ่มขึ้นอย่างมากในบางช่วงเวลาที่ผ่านมา แต่ตอนนี้ราคานิ่งแล้ว ซึ่งถ้าราคาหุ้นมีการเปลี่ยนแปลงทั้งเพิ่มขึ้นและลดลงอย่างรุนแรงในบางช่วงเวลา เราจะพบว่าถ้าเราเลือกใช้วิธี Simple Average ที่ใช้ค่าเฉลี่ยราคาที่ผ่านมาทั้งหมด มันจะมีความคลาดเคลื่อนสูง

เพื่อจะได้ปรับปรุงให้มีประสิทธิภาพมากขึ้น เราจึงเลือกใช้ค่าเฉลี่ยสำหรับค่าย้อนหลังบางค่านับจากค่าสุดท้าย (ไม่ได้คิดด้วยค่าทั้งหมดอีกแล้ว แต่จะกำหนดจำนวนค่าที่คำนวณชัดเจน) เบื้องหลังวิธีนี้ เราเชื่อว่าค่าใกล้เคียงค่าล่าสุดจะมีผลต่อการทำนายมากกว่า เราเรียกวิธีนี้ว่า Moving Average โดยการคำนวณค่าเฉลี่ยจะต้องกำหนดว่าจะพิจารณาค่าย้อนหลังจำนวนกี่ค่า (ในสมการด้านล่าง คือ ค่า p)

วิธีที่ 4: Weighted moving average method

วิธีนี้เป็นการพัฒนามาจากวิธี Moving Average โดย ในวิธีเก่า เราจะให้น้ำหนักที่เท่ากันกับค่าทุกค่าที่พิจารณา แต่วิธี Weighed moving average นี้จะกำหนดให้ค่าย้อนหลังที่พิจารณามีน้ำหนักที่ต่างกัน โดยปกติค่าที่ใหม่กว่า จะมีค่าน้ำหนักที่มากกว่า ดังสมการ

วิธีที่ 5: Simple Exponential Smoothing method

วิธีนี้จะคล้ายๆกับ Weighted moving average โดยวิธีนี้ยังเน้นสมมติฐานที่ว่า ค่ายิ่งใกล้ค่าล่าสุด ยิ่งมีน้ำหนักมาก แต่มีวิธีการทำให้ค่า weighted นี้มีความสัมพันธ์กันมากขึ้นผ่านตัวแปรใหม่ที่เรียกว่า smoothing parameter ที่มีค่า 0≤ α ≤1

โดยการที่เราเอาค่า 1−α คูณไปเรื่อยๆ ทำให้ค่าลดลงอย่างรวดเร็วและเป็นสัดส่วน เราจึงเรียกวิธีนี้ว่า Exponential

วิธีที่ 6: Holt’s Linear Trend method

ตอนนี้เราได้เรียนรู้วิธีการหลายวิธีที่จะทำนายแล้ว แต่เรายังพบว่าวิธีเหล่านี้ยังทำนายได้ไม่ดีกับข้อมูลที่มีความผันผวนสูง

จากกราฟ ถ้าเราใช้วิธีก่อนหน้านี้ จะพบว่ามันไม่ได้พิจารณาค่า trend เลย ทั้งที่ trend เป็นรูปแบบทั่วไปของราคาที่เราสามารถสังเกตุได้ ยกตัวอย่างเช่น ถ้าเรามีข้อมูลเป็น trend เพิ่มขึ้นอย่างคงที่ [10, 20, 30, 40, 50] -> ถ้าใช้ Simple Exponential Smoothing method โดยใช้ smoothing parameter = 0.5 จะเห็นว่าค่าที่ทำนายได้ประมาณ 40 (มีค่าความคลาดเคลื่อนสูง) ทั้งที่ถ้าเราดูง่ายๆ ตาม trend ก็สามารถบอกได้ว่าเป็น 60

เพราะฉะนั้นเราต้องการวิธีการที่สามารถจับ trend ได้อย่างแม่นยำโดยปราศจากสมมติฐานใดๆ โดยวิธีการที่พิจารณา trend ในการทำนาย เรียกว่า “Holt’s Linear Trend”

แต่ละชุดข้อมูลประเภท Time series ประกอบด้วย Trend, Seasonal, Cycling และ Irregular. ถ้าข้อมูลชุดใดมี trend จะสามารถใช้ Holt’s Linear Trend ในการทำนายได้ ดังรูปด้านล่าง ที่มีค่า trend เพิ่มขึ้น

Holt เสนอ simple exponential smoothing ในการทำนายข้อมูลที่มี trend ไม่มีอะไรที่นอกเหนือไปจากการใช้ exponential smoothing ไปคำนวณกับทั้งค่าเฉลี่ยและ ค่า trend โดยจะมี 3 สมการ: สมการแรกสำหรับ level, สมการต่อมาสำหรับ trend และสุดท้ายคือการรวม level และ trend เพื่อทำนายราคาหุ้น

วิธีที่ 7: Holt-Winters Method

แม้ว่าวิธีการ Holt’s Linear Trend จะมีความยอดเยี่ยมในการจับ trend และคำนวณอ้างอิงตาม trend ได้แม่นยำ แต่ถ้าชุดข้อมูลที่เข้ามาเป็น Seasonal เช่น จำนวนผู้เข้าพักในโรงแรมริมทะเล จะเห็นได้ว่า Warm seasons จะมีผู้เข้าพักมากกว่า Cold seasons ในแต่ละปี วิธีการก่อนหน้านี้จะไม่พิจารณาค่า Seasonal เหล่านี้

ดังนั้น เราต้องการวิธีการที่พิจารณาทั้ง trend และ seasonal ในการทำนายราคาอนาคต โดยวิธีนี้เรียกว่า Holt’s Winter method ไอเดียคือการนำ exponential smoothing ไปประยุกต์ใช้องค์ประกอบแบบ seasonal เพิ่มเติมไปจาก level และ trend โดย Holt-Winters method จะมีทั้งหมด 4 สมการ ดังรูปด้านล่าง

โดยค่า smoothing parameters มีค่าในช่วงดังนี้ 0 ≤ α ≤ 1, 0 ≤ β ≤ 1 and 0 ≤ γ ≤ 1 และ s = ความยาวของช่วง seasonal cycle

สมการ level แสดง weighted average ระหว่างค่าที่อยู่ในช่วง season และนอก season

สมการ trend ให้หลักการคิดเหมือน Holt’s linear method

สมการ seasonal แสดง weighted average ระหว่าง seasonal index ปัจจุบัน และ seasonal index ของซีซั่นเดียวกันในปีที่แล้ว เช่น หน้าร้อนปีนี้ กับ หน้าร้อนปีก่อนหน้า

ด้วยวิธีนี้เราจะสามารถทำนายราคาหุ้น หรือ จำนวนผู้เข้าพัก ที่มีองค์ประกอบของ trend และ seasonal ได้แม่นยำมากขึ้น

วิธีที่ 8: ARIMA

อีกหนึ่งโมเดลที่ใช้สำหรับทำนายข้อมูลแบบ Time series ที่เป็นที่นิยมอย่างมากในหมู่ Data scientists คือ ARIMA ซึ่งย่อมาจาก Autoregressive Integrated Moving average

ในขณะที่ exponential smoothing models ขึ้นอยู่กับองค์ประกอบของ trend และ seasonal ในชุดข้อมูล, ARIMA model มีตั้งใจที่จะอธิบายความสัมพันธ์กันในข้อมูลระหว่างกัน ซึ่งหลักการของมันคือ พยายามกำจัด “Noise” ออกจาก Time series เพื่อที่จะลด Error ให้ได้มากที่สุด วิธีการที่ใช้ในการกำจัด Noise ที่ว่ามาก็คือที่มาของชื่อโมเดล ARIMA นั่นเอง

  • AR = Auto Regressive
  • I =Integrated
  • MA = Moving Average

ขั้นแรกคือ Integrated คือ ทำให้ข้อมูลเป็น stationary กล่าวคือ ข้อมูลที่มีค่า Mean และ Variance คงที่เมื่อเวลาผ่านไป ดังนั้นข้อมูลทุกประเภทที่มี Trend หรือ Seasonal effect หรือทั้งสองอย่างรวมกัน (Trend + Seasonal) จะไม่ถือว่าเป็น Stationary และยังไม่สามารถนำข้อมูลมาใช้ใน Model ได้ ต้องมีการปรับข้อมูลในเบื้องต้นก่อน

สามารถศึกษาเพิ่มเติมได้จาก

https://lengyi.medium.com/arima-model-%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-2-%E0%B8%AB%E0%B8%B2-integrated-d-%E0%B9%81%E0%B8%A5%E0%B8%B0-stationary-analysis-38df96394207

ขั้นต่อมาที่เราต้องทำการหาก็คือ Auto Regressive (AR) นั่นเอง ซึ่งเจ้า AR คือ “lag time” ของตัวมันเอง ดังนั้นแปลความหมายอย่างง่ายก็คือ ค่า ณ วันนี้มีความสัมพันธ์กับค่าที่เกิดขึ้นมาแล้วจากอดีต ณ ช่วงเวลาใดเวลาหนึ่ง

การหาค่า AR หรือ p ที่เหมาะสมกับ ARIMA Model สามารถใช้ Partial Autocorrelation Function หรือเรียกสั้น ๆ ว่า PACF โดยหลักการทำงานของมันคือ การหาค่า Correlation ของข้อมูลและ lag time ของตัวมันเอง แต่คำว่า Partial มันคือส่วนนึงเท่าในการคำนวณเท่านั้น หมายความว่า Analysis นี้ ไม่นำค่าที่คำนวณไปแล้วมารวมอยู่ด้วย ใน Python มี Packages ง่าย ๆ ที่ใช้การหาค่า PACF รวมไปถึง Plot ออกมากได้อย่างสวยงาม

สามารถศึกษาเพิ่มเติมได้จาก

ARIMA Model ตอนที่ 3: หา AR (p) ด้วย Partial Autocorrelation Function
ใช้ Partial Autocorrelation Function หาค่า p สำหรับ ARIMA Modellengyi.medium.com

ขั้นตอนสุดท้ายที่เราต้องหาคือก็ Moving Average (MA) นั่นเองอธิบายก่อน MA คือ “lag time” เหมือนกัน แต่แทนที่จะเป็น lag time ของตัวมันเอง MA จะพิจารณา lag time ของ Error แทนเท่านั้นเอง

การค่าหา MA ที่เหมาะสมสามารถหาได้จาก Autocorrelation Function (ไม่มี Partial แล้วนะ) โดยย่อมาเป็น ACF ซึ่งหลักการจะซับซ้อนน้อยกว่า PACF นิดหน่อยคือ มันหาค่า Correlation ระหว่างข้อมูล และ lag time ของตัวมันเอง แบบตรงไปตรงมาเลย ซึ่ง Python ก็มี Packages เตรียมไว้ให้หมดแล้ว

Reference :

https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/

--

--