Skip to content
Home » [NEW] Time Series Forecasting คืออะไร? + สรุปหนังสือออนไลน์แจกฟรีที่แอดเรียน ละเอียดมาก | on time แปลว่า – NATAVIGUIDES

[NEW] Time Series Forecasting คืออะไร? + สรุปหนังสือออนไลน์แจกฟรีที่แอดเรียน ละเอียดมาก | on time แปลว่า – NATAVIGUIDES

on time แปลว่า: นี่คือโพสต์ที่เกี่ยวข้องกับหัวข้อนี้

เทอมสุดท้ายของชีวิตปอโทนี้ แอดได้โดดไปลงวิชาของคณะเศรษศาสตร์ที่เรียนจบแล้วประทับใจมาก ๆ ชื่อว่า Business Forecasting หรือ “การคาดการณ์ทางธุรกิจ” (อันนี้ Google แปลมาให้)

คำเตือน: บทความนี้ยาวมาก ๆๆๆๆๆ เหมือนมานั่งเรียนวิชานี้กับแอดเลย แนะนำให้ Bookmark หรือแปะลง Facebook เอาไว้ค่อย ๆ อ่านก็ได้ฮะ (เราเตือนคุณแล้ว)

วิชา Business Forecasting นี่จริง ๆ เค้าทำขึ้นมาเพื่อสอนนักเรียนด้านเศรษฐศาสตร์และบริหาร เพื่อที่จะได้สามารถดูกราฟแล้วสร้างโมเดลทำนายออกมาเองได้ แต่สำหรับคนที่สนใจด้าน Data Science (เช่นแอดมินเอง) แล้ว วิชานี้น่าสนใจมาก ๆ เพราะวิชานี้เจาะลึกข้อมูลประเภทที่เราไม่ได้เห็นกันบ่อย ๆ เวลาเรียน Machine Learning

นั่นก็คือ.. ข้อมูลประเภท Time Series นั่นเองครับ

Table of Contents

ข้อมูล Time Series คืออะไร แล้วทำไมคนเรียน Data Science ควรสนใจ

time-series-plot.png

ข้อมูล Time Series (ภาษาไทยเท่ ๆ ว่า “อนุกรมเวลา”) คือ ข้อมูลที่เปลี่ยนแปลงไปตามเวลา เช่น ค่าเงินบาทไทยเทียบกับสหรัฐอเมริกา, ราคาหุ้น, ยอดขายไอศกรีมรายวัน, จำนวนสินค้าที่ผลิตได้ในแต่ละเดือน ฯลฯ

ปกติแล้วถ้าเราเรียนวิชาที่เกี่ยวข้องกับ Machine Learning เราก็จะเรียนโมเดลทำนายผลประเภท Linear Regression, Decision Tree, Neural Network ซึ่งออกแบบมาให้ใช้กับข้อมูลทั่วไป เพราะฉะนั้นโมเดลพวกนี้จะไม่ได้รองรับฟีเจอร์พิเศษต่าง ๆ ของ Time Series

ความแตกต่างของข้อมูลแบบ Time Series กับข้อมูลทั่วไป คือ ข้อมูลพวกนี้มีฟีเจอร์ในส่วนที่เกี่ยวข้องกับ เวลา เช่น

  • Trend (เทรนด์)
  • Seasonality (ความแปรผันตามฤดูกาล)
  • Cycle (วัฏจักร)

ที่เราสามารถนำมาใส่ในโมเดล เพื่อให้ทำนายผลได้ออกมาแม่นยำมากขึ้นครับ

แอดมองว่าข้อมูลแบบ Time Series เป็นข้อมูลที่สำคัญและพบเห็นได้ทั่วไปไม่ว่าจะทำงานที่ไหน เพราะฉะนั้นคนที่เป็น Data Scientist ควรมีความรู้เอาไว้ไม่มากก็น้อยครับ

ตัวอย่าง: ทดลองใช้ Linear Regression กับข้อมูล Time Series

linear-regression-time-series

เรามาลองใช้ Linear Regression ในการโมเดล Time Series ในกราฟข้อมูลที่แสดงก่อนหน้านี้ครับ เราจะเห็นว่าข้อมูลชุดนี้มีลูกคลื่นที่เราเห็นเป็นระยะ ๆ ในกราฟ

คลื่นพวกนี้เกิดจากที่ยอดขายของยาสูงเป็นพิเศษในเดือนมกราคมทุกปี จึงทำให้กราฟของเรามีคลื่นนี้อยู่ทุกปี เราเรียกผลจากเดือนมกราคมนี้ว่า Seasonality ครับ

เพราะข้อมูลมี Seasonality ทำให้เราไม่สามารถขีดเส้นธรรมดาด้วย Linear Regression เพื่อทำนายผลได้ เราต้องคิดถึงผลของ Seasonality ด้วยครับ

ลองมาดูตัวอย่างการใช้ Regression ที่มีตัวแปรสำหรับ Seasonality กัน

linear-model-forecast-trend-seas.png

บางท่านอาจจะสงสัยว่าทำไมใช้ Regression แล้วผลลัพธ์ (เส้นสีน้ำเงิน) ถึงออกมาไม่เป็นเส้นตรง นั่นเพราะเค้ามีการใช้สิ่งที่เรียกว่า Dummy Variable หรือ ใส่ค่าใน Input เป็น 0 กับ 1 ครับ

เช่น เราเพิ่มตัวแปรชื่อ season2 เข้าไป ถ้าแถวของข้อมูลที่เราคำนวณอยู่เป็นของเดือนกุมภาพันธ์ ตัวแปร season2 = 1 แต่ถ้าไม่ใช่เดือนกุมภาพันธ์ ตัวแปร season2 = 0 ทำให้เราสามารถใส่ค่าเพิ่มใน Regression ได้เฉพาะสำหรับบางเดือนเท่านั้น

สำหรับใครที่อยากลองรันพลอตด้านบนใน R สามารถดาวน์โหลดแพ็กเกจ FPP2 ซึ่งเป็นแพ็กเกจที่แอดใช้เรียนวิชา Business Forecasting เพื่อนำโค้ดด้านล่างไปรันได้เลยครับ (วิชานี้อาจารย์ผู้สอนเป็นหนึ่งในทีมเขียน Package ครับ)

library(fpp2)

# View the data (this comes with fpp2 package)
a10

# Plot the time series data
autoplot(a10) +
  ggtitle("Antidiabetic drug sales") +
  ylab("$ million") +
  xlab("Year")

# Fit the linear model to the data with trend & season as predictors
fit = tslm(a10 ~ trend + season)
# Plot the linear model forecasts
autoplot( forecast(fit) )

ถ้าเริ่มสนใจเรื่องการสร้างโมเดลสำหรับข้อมูล Time Series กันแล้ว แอดมีหนังสือออนไลน์ดี ๆ มาแนะนำกันครับ เป็นหนังสือที่แอดใช้เรียนวิชา Business Forecasting เลย (อาจารย์ผู้สอนเป็นหนึ่งในผู้เขียนเช่นกัน ซึ่งมีหลายมหาวิทยาลัยที่ทำ Slide โดย Reference จากหนังสือเล่มนี้ น่าจะเพราะผู้เขียนอีกท่านเป็น Professor ด้าน Time Series อันดับต้น ๆ ในออสเตรเลียครับ)

แจกฟรี หนังสือออนไลน์สอน Time Series Forecasting

fpp2_book_cover.jpg

หนังสือ Forecasting: Principles and Practice เวอร์ชั่น 2 หรือ FPP2 สามารถอ่านบนออนไลน์ได้ฟรี หรือจะซื้อเป็นเล่มบน Amazon ก็ได้ครับ ซึ่งอาจารย์ผู้สอนเค้าบอกเองเลยว่าไม่แนะนำให้ซื้อเป็นเล่ม เพราะเนื้อหาบนออนไลน์มีการอัพเดทใหม่ตลอดครับ

เนื้อหาในหนังสือเล่มนี้ค่อนข้างอ่านง่าย เพราะเค้าไม่ลงลึกในส่วนของสูตรต่าง ๆ มากนัก เน้นเขียนให้คนที่มีพื้นฐานสถิติ หรือคณิตศาสตร์มัธยมปลาย ก็สามารถอ่านเข้าใจได้ แต่ส่วนไหนที่ต้องใช้ความรู้เพิ่มเติมเค้าจะมีเขียนกำกับไว้ครับ (เช่น การทำ Matrix Formulation เวลาใช้โมเดล Linear Regression)

วิชาที่แอดเรียนอยู่นี่เค้าสอนทั้งปริญญาตรี และปริญญาโทในห้องเรียนเดียวกันเลยครับ ใช้เนื้อหาเดียวกันหมด สิ่งที่แตกต่างกันก็แค่ว่าของปริญญาโทจะมีส่งการบ้านที่เป็นงานกลุ่มด้วย เพราะฉะนั้นคนที่เรียนปริญญาตรีอยู่ก็อ่านหนังสือเล่มนี้รู้เรื่องแน่นอน

แต่ว่าถ้าให้เปิดไปอ่านเองแบบอ่านเรียงจากบทแรกจนบทสุดท้าย อาจจะงงและเลิกอ่านกันไปก่อนครับ เพราะฉะนั้นเลยจะมาสรุปตามเนื้อหาที่แอดเรียนในวิชานี้ให้ จะได้ไปศึกษากันง่าย ๆ

สรุปหัวข้อที่ต้องอ่านเรียงตามลำดับ สำหรับหนังสือ Forecasting: Principles and Practice

อันนี้คือหัวข้อที่แอดเรียน เรียงตามลำดับที่สอนในวิชา Business Forecasting จริงเลยครับ ถ้าเรียนจบหมดนี่จะเข้าใจเรื่องต่าง ๆ ดังนี้ครับ:

  • พื้นฐานเกี่ยวกับการทำนายผลข้อมูล Time Series
  • วิธีพลอตกราฟต่าง ๆ ที่สำคัญสำหรับข้อมูล Time Series
  • วิธีการทำนายพื้นฐาน: Naive, Seasonal Naive, Drift, Average
  • วิธีการแปลงข้อมูลด้วย BoxCox Transformation
  • วิธีวิเคราะห์ Residuals
  • วิธีการทำ Decomposition แบบต่าง ๆ: Classical, X-11, SEATS, STL
  • โมเดล Time Series ที่คนนิยมใช้กัน: ETS, ARIMA
  • โมเดล Time Series ด้วย Linear Regression
  • Regression ขั้นสูง ด้วย ARMA Error

บทที่ 1: Getting Started

บทนี้จะปูพื้นฐานเกี่ยวกับการ Forecast (ทำนายผล) ว่านำไปใช้ทำอะไร และมีขั้นตอนอย่างไร ซึ่งมีประโยชน์มากสำหรับความเข้าใจภาพกว้างว่าการ Forecast มีประโยชน์กับธุรกิจอย่างไร

(หนังสือเล่มนี้เนื้อหาค่อนข้าง Practical มากครับ อ่านจบแล้วแอดคิดว่านำไปใช้ประโยชน์ได้ไม่ยากเลย)

บทที่ 2: Time Series Graphics

บทนี้จะเริ่มเข้าเรื่องการทำ Forecast พูดถึงกราฟประเภทต่าง ๆ ที่เราจำเป็นต้องใช้ รวมไปถึงประโยชน์ของมัน พลอตที่ใช้บ่อยเวลาทำโมเดลก็คือ Time Series Plot, Seasonal Plot, Seasonal Subseries Plot, Autocorrelation (ACF) Plot ครับ

มาลองดูสัก 1 ตัวอย่างของพลอตที่สำคัญ ๆ กัน

timeseries-subseriesplot.png

พลอตนี้มีชื่อว่า Seasonal Subseries Plot ครับ ซึ่งอันนี้เป็นข้อมูลเดียวกับพลอตตัวอย่างอื่น ๆ ที่เราใช้ด้านบนเลย พลอตนี้มีประโยชน์มากในการดูเรื่องของ Seasonality ครับ

วิธีอ่าน Seasonal Subseries Plot คือ:

  • เส้นสีดำ = ความเปลี่ยนแปลงของยอดขายในแต่ละเดือนของทุกปี เช่น เดือนมกราคมของทุกปียอดขายสูงขึ้นเรื่อย ๆ (คอลัมน์ Jan เส้นสีดำ)
  • เส้นสีน้ำเงิน = ค่าเฉลี่ย (Mean) ของแต่ละเดือน ซึ่งเห็นได้ชัดเจนเลยว่าเดือนมกราคมมียอดขายเฉลี่ยสูงกว่าเดือนอื่น ๆ (คอลัมน์ Jan เส้นสีน้ำเงิน)

บทที่ 3: The forecaster’s toolbox

บทนี้ยาวหน่อย เพราะครอบคลุมพื้นฐานของการทำ Forecast ครบมากครับ

ช่วงแรก เค้าจะแนะนำวิธีทำนายแบบง่าย ๆ ได้แก่ Average, Naive, Seasonal Naive, Drift ซึ่งวิธีเหล่านี้เรียบง่ายแต่มีประโยชน์มาก เราสามารถใช้เพื่อเปรียบเทียบผลลัพธ์กับวิธีที่ซับซ้อนอื่น ๆ ได้ครับ

มาลองดูตัวอย่างหนึ่งในวิธีทำนายแบบง่าย ๆ ที่ชื่อว่า Naive หรืออีกชื่อคือ Random Walk ครับ

naive-method-forecast.png

วิธีทำนายแบบ Naive ก็ตรง ๆ โง่ ๆ ตามชื่อของมันเลยครับ (Naive แปลว่า ซื่อ ๆ ไร้เดียงสา) ก็คือ “ค่าในอนาคต = ค่าสุดท้ายในอดีต” เลยทำให้ผลทำนายออกมาเป็นเส้นตรงจากค่าสุดท้ายใน Time Series เลยครับ

ช่วงที่สอง เค้าพูดถึงเรื่องการ Transform ข้อมูล เพราะข้อมูลที่ Variance ไม่ Stable จะทำให้ต้องใช้วิธีทำนายที่ซับซ้อนในการทำผล เราสามารถแปลงข้อมูลด้วย Log หรือ BoxCox Transformation (เป็นได้ทั้ง Log และ Power Transformation ในฟังก์ชั่นเดียว)

ลองดูตัวอย่างข้อมูลชุดเดิมกับข้างบน ๆ (ยอดขายยา) ที่ทำ Transformation แล้วครับ

boxcox-transformation.png

เวลาคิดถึง Variance คิดง่าย ๆ ว่า คือ ความสูงของคลื่น Seasonality ครับ ถ้าย้อนกลับไปดูจะเห็นว่าข้อมูลของเรามีคลื่นที่เริ่มจากความสูงเล็ก ๆ และค่อย ๆ เพิ่มขึ้น พอเราใช้ BoxCox Transformation แล้วคลื่นออกมาสูงเท่ากันหมด ทำให้เราสามารถใช้โมเดลที่ Simple ขึ้นในการทำนายได้

สำหรับคนที่อยากลองพลอตนี้ สามารถนำโค้ดด้านล่างไปรันใน R ได้เช่นเคยครับ (อย่าลืมเรียก library(fpp2) ก่อน)

# Find the parameter for BoxCox transformation
(best_lambda = BoxCox.lambda(a10))
# Apply BoxCox transformation
BoxCox(a10, lambda=best_lambda)
# Plot the transformed data
autoplot( a10_transformed )

ช่วงที่สาม ก็สำคัญไม่แพ้ช่วงก่อนหน้านี้ครับ นั่นคือ การวิเคราะห์ความผิดพลาดของโมเดลทำนาย หรือ Residuals นั่นเอง

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

วิธีหนึ่งที่เช็คได้ง่าย ๆ ว่ามีข้อมูลอะไรที่โมเดลของเรายังขาดอยู่มั้ย คือ การใช้ Ljung-Box Test ที่จะบอกได้ว่าค่า Residuals ของเรามี Correlation อะไรกันมั้ย ถ้ามี แปลว่าในข้อมูลยังมี Pattern บางอย่างที่เรายังจับไม่ได้

ลองมาดูตัวอย่างของการทำ Residual Analysis กันครับ

checkresiduals-1.png

ช่วงที่สี่ เป็นเรื่องของการวัดความแม่นยำของผลทำนายครับ ซึ่งเป็นเรื่องสำคัญมาก ๆ และใครที่เรียน Machine Learning มาแล้วอาจจะเจอกับคอนเซปต์ที่เหมือนกันเลยครับ นั่นคือ การแบ่งข้อมูลเป็น Training & Test Set เพื่อวัดผล รวมถึง Cross Validation (แต่การทำ Cross Validation สำหรับ Time Series จะแตกต่างกับข้อมูลทั่วไปเล็กน้อยครับ เพราะ Time Series มีเรื่องของเวลามาเกี่ยวด้วย)

สำหรับค่าที่ใช้ในการวัดความแม่นยำ ก็จะเป็นค่าเช่น MAE (Mean Absolute Error), RMSE (Root Mean Squared Error) ซึ่งคนที่เรียนด้าน Data Science มาก่อนต้องรู้จักกันอยู่แล้วแน่นอน ซึ่งสิ่งที่น่าสนใจในเรื่องนี้ คือ เค้าแบ่งค่าที่เป็น Scale Dependent (MAE, RMSE) และ Scale Independent (MAPE, MASE) โดยกลุ่มหลังสามารถนำไปใช้เปรียบเทียบกับข้อมูลต่างชุดกันได้ แต่กลุ่มแรกทำไม่ได้

ช่วงสุดท้าย ก็จะพูดถึงการคำนวณค่า Prediction Interval ซึ่งก็คือ ระยะของค่าทำนายผล ซึ่งจะบอกได้ว่าค่าที่เราทำนายสามารถสูงหรือต่ำกว่าค่ากลางได้ขนาดไหน ลองดูตัวอย่างในพลอตด้านล่างครับ

googforecasts2-1.png

เราจะเห็นว่าผลทำนายที่เป็นเส้นสีน้ำเงิน มีพื้นที่สีน้ำเงินและสีฟ้าครอบอยู่ นั่นก็คือส่วนของ Prediction Interval นั่นเองครับ โดยเส้นสีน้ำเงินที่เราเห็น ความจริงมันก็คือค่าเฉลี่ย (Median) ของ Prediction Interval นั่นเอง เราเรียกค่านี้ว่า Point Forecast

บทที่ 6: Time series decomposition

(เข้าใจถูกแล้วนะครับ ว่าเราข้ามบทที่ 4-5 มาบทที่ 6 เลย)

ในบทนี้ เราจะมารู้จักกับวิธีต่าง ๆ ในการแยก Time Series ออกเป็นส่วนต่าง ๆ นั่นก็คือ Trend-Cycle (หรือ Trend เฉย ๆ), Seasonality, และ Remainder (ส่วนที่เหลือจาก Trend + Seasonality)

See also  เรียนภาษาอังกฤษขณะนอนหลับ ||| คำและวลีภาษาอังกฤษที่สำคัญที่สุด ||| 8 ชั่วโมง | 100-1000ภาษาอังกฤษ

การแยก Time Series ออก ทำให้เราสามารถวิเคราะห์ Time Series ได้ง่ายขึ้น เพราะในหลาย ๆ ครั้งเราต้องการทำนายเฉพาะส่วน หรือต้องการวิเคราะห์เฉพาะส่วนของ Time Series ครับ

elecequip-stl-decomposition.png

ตัวอย่างที่เห็นได้บ่อย ๆ คือ เราต้องการวิเคราะห์ข้อมูลที่ไม่มี Seasonality เราก็สามารถแยก Time Series ออกมาเฉพาะส่วน Trend + Remainder ออกมาวิเคราะห์ ซึ่งเราเรียกข้อมูลชุดนี้ว่า Seasonally Adjusted Data ครับ

ในบทนี้จะแนะนำวิธีการทำ Decomposition แบบต่าง ๆ ที่พัฒนาขึ้นมาเรื่อย ๆ ตั้งแต่ Classical Decomposition, X11 / X-12 / X-13, SEATS, จนมาจบที่ STL ซึ่งพัฒนามาให้ยืดหยุ่นกว่าวิธีอื่น ๆ สามารถใช้กับข้อมูลที่มี Seasonality ระยะเท่าไหนก็ได้ (วิธีเก่า ๆ จะใช้ได้กับ Seasonality แบบรายเดือน กับราย Quarter เท่านั้น)

เราสามารถใช้วิธี Decomposition เข้ามาช่วยทำนายผลได้ด้วย วิธีการทำนายผล คือ:

  1. แยกข้อมูลส่วนที่เป็น Seasonally Adjusted Data แล้วทำนายด้วยวิธีที่เราเลือก (ใช้วิธีทำนายที่เหมาะกับข้อมูล Non-seasonal เช่น Naive, Drift, ETS จากบทที่ 7, ARIMA จากบทที่ 8 etc. ได้ทั้งหมดครับ)
  2. แยกข้อมูลส่วนที่เป็น Seasonality มาทำนายด้วย Seasonal Naive = ดึงค่า Seasonal จากค่าล่าสุด
  3. หลังจากนั้นนำผลทำนายสองส่วนมารวมกัน ส่วน Prediction Interval ใช้ของ Seasonally Adjusted Data เท่านั้นครับ

ผลลัพธ์เวลาเราทำนายด้วย Decomposition จะออกมาหน้าตาแบบนี้ครับ

decomposition-forecast.png

บทที่ 7: Exponential Smoothing

ETS เป็นหนึ่งในโมเดลที่ได้รับความนิยมมากเป็นอันดับต้น ๆ พอ ๆ กับโมเดล ARIMA ที่เราจะเรียนในบทถัดไปครับ โดย ETS เน้นการทำนายโดยดูจาก Trend และ Seasonality ของข้อมูล

หัวใจหลักของโมเดล ETS คือ แต่ละโมเดล ETS จะแบ่งเป็น 3 ส่วน เขียนออกมาเป็น ETS(_, _, _)

3 ส่วนใน ETS ประกอบไปด้วย E (Error) + T (Trend) + S (Seasonality) ซึ่งบังเอิญว่า “ETS” ตรงกับชื่อโมเดล “ExponenTial Smoothing” พอดีครับ ถือเป็นการตั้งชื่อที่จำได้ง่ายมาก

วิธีการเลือกโมเดล ETS ให้เหมาะกับข้อมูล เราต้องดูแต่ละส่วนของข้อมูล เพื่อเลือกโมเดลที่เหมาะสมครับ:

  • ส่วนของ Error อาจารย์บอกว่าให้ดูจาก Trend หรือ Seasonality ว่ามีส่วนไหนเป็น Multiplicative มั้ย
  • มี Trend มั้ย ถ้ามี เทรนด์ของเราเป็น Additive / Additive Damped / หรือ Multiplicative (อันหลังวิชานี้ไม่ได้สอน)
  • มี Seasonality มั้ย ถ้ามี Seasonality ของเราเป็น Additive (Variance เท่าเดิมตลอด) หรือเป็น Multiplicative (Variance ขึ้นหรือลงตามเวลา)

ซึ่งค่าที่แตกต่างกันของโมเดลพวกนี้ก็มีชื่อเรียกพิเศษของมันด้วยครับ เช่น ETS(,N,N) = Simple Exponential Smoothing, ETS(,A,N) = Holt’s Linear Method, ETS(_,A,A) = Additive Holt-Winters’ Method จะเห็นว่าชื่อเหล่านี้ตั้งชื่อตาม Researcher ที่ค้นพบวิธีเหล่านี้นั่นเอง

ลองมาดูตัวอย่างการทำนายผลด้วยโมเดล ETS กันครับ

ets-mam-forecast.png

สำหรับโมเดลในตัวอย่างนี้ เรากำหนดให้มี Trend (T = Additive) และมี Seasonality (M = Multiplicative) ซึ่งเห็นว่าผลการทำนายออกมาแล้วโมเดลแสดงถึงเทรนด์ที่เพิ่มขึ้น รวมถึง Seasonality ที่เพิ่มสูงขึ้นได้ด้วยครับ เรียกได้ว่าดึงส่วนสำคัญของข้อมูลออกมาได้ทั้งหมด

บทที่ 8: ARIMA Models

หลังจากที่รู้จักกับ ETS กันไปแล้ว มารู้จักกับ ARIMA ซึ่งเป็นโมเดลชื่อดังอีกตัวกันบ้างครับ ความแตกต่างของ ARIMA กับ ETS ก็คือ ARIMA ทำนายผลโดยดูจาก Autocorrelation ในข้อมูลครับ

ก่อนจะเข้าใจโมเดล ARIMA เราต้องเข้าใจสิ่งที่เรียกว่า Non-Stationary Data VS Stationary Data ก่อนครับ อธิบายแบบเข้าใจง่าย ๆ ข้อมูลที่ Stationary คือ “ถ้าเราสุ่มข้อมูลออกมา 2 ครั้งจากบน Time Series จะต้องได้กราฟหน้าตาเหมือนกัน”

เพราะฉะนั้นข้อมูลที่มี Trend หรือ Seasonality ถ้าเราสุ่มข้อมูลออกมา 2 ครั้งจะได้กราฟไม่เหมือนกันแน่นอน ถือเป็น Non-Stationary Data ครับ ซึ่ง ARIMA จะทำงานได้ไม่ดีกับข้อมูลประเภทนี้ ส่วนข้อมูลแบบ Stationary Data ก็อย่างเช่น White Noise (หน้าตาเหมือนข้อมูลสุ่มมั่วๆ) ครับ

แต่ข้อมูลส่วนใหญ่ในโลกนี้เป็น Non-Stationary ครับ เพราะฉะนั้นเลยมีวิธีที่เรียกว่า Differencing หรือการหาความแตกต่างระหว่างค่าปัจจุบันกับค่าก่อนหน้า ซึ่งจะทำให้เราได้ข้อมูลที่เป็น Stationary ออกมาครับ (บางครั้งก็ต้องทำการ Difference หลายครั้ง หรือ Difference โดยเทียบกับค่าจาก Season ที่แล้ว เรียกว่า seasonal diff)

ลองมาดูตัวอย่างของการทำ Differencing กัน

drugsale-scale-diff.png

จะเห็นว่าพอ diff แล้วจะได้ข้อมูลที่ดูหน้าตาเหมือนมั่ว ๆ ออกมา พร้อมใช้กับโมเดล ARIMA แล้วครับ

สิ่งที่เราต้องรู้เกี่ยวกับ ARIMA คือ ARIMA มาจากโมเดล AR (AutoRegressive) ที่รวมร่างกับ (Integrated) โมเดล MA (Moving Average) นั่นเอง

สำหรับโมเดล ARIMA ที่ใช้กับข้อมูลที่ไม่มี Seasonality จะถูกเขียนในรูปของ ARIMA(p,d,q):

  • p = order ของโมเดล AR(p)
  • d = จำนวนการ diff ทั้งหมด ไม่นับ seasonal diff
  • q = order ของโมเดล MA(q)

สำหรับวิธีการเลือก Parameter ของโมเดลนี้ เราสามารถให้คำสั่ง auto.arima เลือกให้ หรือใช้วิธี ดูจาก ACF/PACF Plot ก็ได้ครับ โดยหลังจากเลือกโมเดลเริ่มต้นแล้ว เราต้องลองปรับค่า p กับ q ประมาณ +-2 ดูด้วย แล้วเทียบจากค่า AICc หรือ RMSE เพื่อดูว่าโมเดลไหนดีที่สุด

สิ่งที่ควรรู้ก็คือ ใน ARIMA ค่าของ p กับ q เป็นตัวเลข เพราะฉะนั้นมันสามารถเป็นเลขไหนก็ได้ที่ไม่ใช่เลขติดลบ ต่างกับ ETS ที่มีกำหนดแน่นอนว่าส่วนนี้เป็นได้เฉพาะค่านี้กับค่านี้เท่านั้น หมายความว่าถ้าเราใช้คำสั่ง auto.arima มันจะไม่ได้เสิร์จจากทุกความเป็นไปได้ ทำให้การเลือกเองด้วย ACF/PACF Plot หลาย ๆ ครั้งได้ผลดีกว่าครับ

อีกเวอร์ชั่นหนึ่งของ ARIMA คือ การนำไปใช้กับข้อมูลที่มี Seasonality เราจะมี Parameter หน้าตาเหมือนเดิมเพิ่มมาอีก 3 ตัว คือ ARIMA(p,d,q)(P,D,Q)m:

  • P = order ของโมเดล AR(P) สำหรับส่วน Seasonality
  • D = จำนวนการ seasonal diff ทั้งหมด
  • Q = order ของโมเดล MA(q) สำหรับส่วน Seasonality
  • m = frequency ของข้อมูล เช่น ข้อมูลราย Quarter จะ m = 4, ข้อมูลรายเดือนจะ m = 12

มาลองดูตัวอย่างการทำนายผลด้วย Seasonal ARIMA กันครับ

arima-forecast.png

เรื่องสุดท้ายที่เราต้องรู้ คือ การนำโมเดล ETS กับ ARIMA มาเปรียบเทียบกัน เพราะว่าเป็นโมเดลที่มี Parameter ไม่เหมือนกัน เราไม่สามารถมาเปรียบเทียบค่า AICc กันได้โดยตรง (รวมถึงโมเดล ARIMA ที่มีค่า diff ต่างกัน เราก็ไม่สามารถเทียบค่า AICc ได้โดยตรงเช่นกันครับ)

วิธีในการเปรียบเทียบว่าโมเดล ETS หรือ ARIMA เหมาะกับข้อมูลเรามากกว่า คือ คำนวณ Error จาก Train-Test Set หรือ Time Series Cross Validation ซึ่งโมเดลไหนมี Error น้อยกว่าก็เลือกใช้โมเดลนั้นได้เลยครับ

บทที่ 5: Time Series Regression Model

หลังจากที่ไปตะลุยกับโมเดลเทพ ๆ อย่าง ETS และ ARIMA แล้ว เราก็ย้อนกลับมาบทที่ 5 เพื่อเรียน Regression Model กันครับ ซึ่งในต้นบทความแอดได้ขายของไปแล้ว Regression Model กับ Time Series มันทำอะไรได้มากกว่าที่คิด

ข้อดีของ Regression Model เทียบกับโมเดลอื่น ๆ คือ สามารถอ่านเข้าใจได้ง่าย เราสามารถดูค่า Parameter แล้วเขียนออกมาเป็นสมการ Regression ได้เลย หรือศัพท์ที่ใช้ในนี้ คือ มี Explanatory Power สูงมาก

แน่นอนว่าด้วยความที่มันอธิบายได้ง่าย ก็มาพร้อมกับข้อจำกัดว่าความแม่นยำในการทำนายอาจจะต่ำกว่าโมเดลประเภทอื่นที่อธิบายได้ยาก

ตามที่แอดสปอยไปก่อนหน้านี้ คือ เราสามารถใช้เทคนิคต่าง ๆ มาเพื่อพัฒนา Regression Model ให้ทำนาย Time Series เก่งขึ้นได้ เช่น:

  • ใช้ Dummy Variable เพื่อแบ่ง Seasonality จะมีคอลัมน์เพิ่มขึ้น 1 คอลัมน์สำหรับแต่ละ seasonality – 1
  • ถ้า Seasonality เยอะมาก (เช่น m = 52 สำหรับข้อมูล weekly) การเพิ่มอีก 51 คอลัมน์ก็ไม่ใช่ไอเดียที่ดี (เดี๋ยว Overfitting) เราก็เพิ่ม Fourier Term เพื่อใช้แทน Seasonality ได้
  • นับจำนวนวันที่เปิดทำการในแต่ละเดือน ข้อมูลอันนี้สำคัญมากเวลาต้องการคำนวณยอดขายรายวัน เช่น เดือนมกราคมมีวันเปิดทำการ 28 วัน เดือนกุมภาพันธ์เปิดทำการ 25 วัน ฯลฯ
  • ข้อมูลที่ดีเลย์ (Lag) เหมาะมากเวลาเราลงโฆษณาไปเมื่อสามเดือนก่อน ซึ่งอาจจะต้องใช้เวลากว่าผลการลงโฆษณาจะส่งผลต่อยอดขาย

ตัวอย่างการใช้ Trend และ Dummy Variable (Seasonality) ใน Regression

regression-dummy-variables.png

Regression Model จะให้โมเดลออกมาเป็นเส้นตรงเท่านั้น หลายคนอาจจะสงสัยว่าแล้วถ้าข้อมูลไม่ได้เป็นเส้นตรงจะทำอย่างไร ในบทนี้ก็มีการแนะนำเรื่อง Nonlinear regression ที่อธิบายเทคนิคต่าง ๆ ที่เราสามารถใช้ได้ครับ

  • เราสามารถแปลงข้อมูลด้วยการใส่ log ได้ โดยสิ่งสำคัญที่ห้ามลืม คือ ถ้าเราใส่ log ที่ตัวแปรต้น เราต้องใส่ log ที่ตัวแปรตามทั้งหมดด้วย
  • สำหรับกรณีที่ Trend ของ Time Series เปลี่ยนแปลงไปมาหลายค่า แทนที่เราจะขีดเทรนด์เป็นเส้นตรงจากต้นจนจบ เราก็ตัดเส้นออกเป็นส่วน ๆ ซึ่งเทคนิคนี้เรียกว่า Piecewise linear regression
  • ถ้าเราอยากให้เส้นเทรนด์เข้ากับโมเดลมากขึ้น เราสามารถทำให้เส้น Piecewise กลายเป็นโค้งได้ เทคนิคนี้เรียกว่า Exponential / Spline แต่เทคนิคนี้ค่อนข้างอันตราย เพราะปลายสุดของผลทำนายอาจจะโค้งขึ้นหรือลงจนค่าสูงหรือต่ำเกินกว่าจริงไปมากในอนาคต ควรใช้ต่อเมื่อเราอยากโมเดลเท่านั้น ไม่ได้ต้องการ Forecast

ลองมาดูตัวอย่างเทคนิค Piecewise แบบต่าง ๆ กันก่อนครับ

nonlinear-regression.png

วิธีหนึ่งที่แก้ปัญหา Spline วิ่งทะลุจอได้ คือ ใช้ Natural Cubic Smoothing Splines ซึ่งเป็นการตั้ง Spline แบบให้โค้งได้ทุกจุดนั่นเองครับ

regression-splinef.png

บทที่ 9: Dynamic Regression Models

(สังเกตว่าเมื่อกี้เราอยู่บทที่ 5 แล้วมาบทที่ 9 เลย เพราะเราเรียนบทที่ 6 7 8 กันไปแล้วไงครับ)

ขอขอบคุณทุกท่านที่อ่านมาจนถึงจุดนี้นะครับ อันนี้เป็นบทสุดท้ายที่เรียนในวิชานี้แล้วครับ พูดถึงการนำ Regression ในบทที่ 5 มารวมร่างกับ ARIMA ในบทที่ 8

โมเดล ARIMA และ ETS ใช้ประโยชน์จากค่าในอดีต แต่ไม่ได้ใช้ประโยชน์จากข้อมูลเกี่ยวข้อง เช่น จำนวนวันเปิดทำการ, การเปลี่ยนแปลงของกฏหมาย, การเปลี่ยนแปลงในตลาดโดยรวม ฯลฯ แต่ในทางกลับกัน โมเดล Regression ใช้ประโยชน์จากข้อมูลที่เกี่ยวข้อง แต่ไม่ได้ใช้ประโยชน์จากค่าในอดีตได้ดีเท่า ARIMA / ETS

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

วิธีการรวมร่างของเค้าก็ง่ายมากครับ นั่นคือ เค้าเพิ่ม Error Term ที่เป็น ARIMA Model เข้ามาใน Regression เท่านั้นเองครับ

ตัวอย่างการทำนายผลด้วย Dynamic Regression Model เป็นดังนี้ครับ

regression-arma-error.png

สรุปวิชา Business Forecasting เรียนแล้วได้อะไรบ้าง

สำหรับคนทั่วไป เรียนแล้วจะได้เทคนิคการทำนายผลข้อมูล Time Series โดยใช้ภาษา R รันแบบง่าย ๆ เพราะหนังสือออนไลน์เล่มนี้เน้นเนื้อหา Practical ทุกบทจะอธิบายทฤษฎีไม่เยอะ แต่มี Reference ให้คนที่สนใจไปอ่านต่อได้ แล้วแทบทุกบทมีโค้ด R ให้เอาไปรันได้ผลตามหนังสือเป๊ะ

สำหรับคนที่มาจากสาย Data Science / Machine Learning จะพบกับโมเดลแปลกใหม่อย่าง ETS, ARIMA ที่ไม่เคยเห็นในข้อมูลรูปแบบอื่นนอกจาก Time Series รวมถึงการนำ Regression มาใช้แบบซับซ้อนมากขึ้น

เวลาเรียน Data Science หลาย ๆ ที่ชอบสอน Regression แบบผ่าน ๆ แล้วข้ามไปพวก Random Forest / Neural Network เลย แต่ไม่ได้ลงลึกว่า Regression จริง ๆ แล้วมัน Powerful ขนาดไหน

(สำหรับท่านที่สนใจหาหนังสือ Time Series ภาษาไทยอ่าน ลองดูเล่มนี้นะครับ การวิเคราะห์อนุกรมเวลาสำหรับเศรษฐศาสตร์และธุรกิจ ที่ศูนย์หนังสือจุฬาฯ ครับ)

หวังว่าบทความนี้จะเป็นประโยชน์ต่อทุกท่านไม่มากก็น้อยครับ หากเห็นว่ามีประโยชน์รบกวนแชร์บทความนี้ต่อให้เพื่อน ๆ และคอมเม้นท์ทิ้งไว้หน่อยว่าชอบ / ไม่ชอบบทความนี้อย่างไรบ้างนะครับ 🙂 แอดจะได้นำไปปรับปรุงบทความต่อ ๆ ไปในอนาคตครับผม

[NEW] Time Series Forecasting คืออะไร? + สรุปหนังสือออนไลน์แจกฟรีที่แอดเรียน ละเอียดมาก | on time แปลว่า – NATAVIGUIDES

เทอมสุดท้ายของชีวิตปอโทนี้ แอดได้โดดไปลงวิชาของคณะเศรษศาสตร์ที่เรียนจบแล้วประทับใจมาก ๆ ชื่อว่า Business Forecasting หรือ “การคาดการณ์ทางธุรกิจ” (อันนี้ Google แปลมาให้)

คำเตือน: บทความนี้ยาวมาก ๆๆๆๆๆ เหมือนมานั่งเรียนวิชานี้กับแอดเลย แนะนำให้ Bookmark หรือแปะลง Facebook เอาไว้ค่อย ๆ อ่านก็ได้ฮะ (เราเตือนคุณแล้ว)

วิชา Business Forecasting นี่จริง ๆ เค้าทำขึ้นมาเพื่อสอนนักเรียนด้านเศรษฐศาสตร์และบริหาร เพื่อที่จะได้สามารถดูกราฟแล้วสร้างโมเดลทำนายออกมาเองได้ แต่สำหรับคนที่สนใจด้าน Data Science (เช่นแอดมินเอง) แล้ว วิชานี้น่าสนใจมาก ๆ เพราะวิชานี้เจาะลึกข้อมูลประเภทที่เราไม่ได้เห็นกันบ่อย ๆ เวลาเรียน Machine Learning

นั่นก็คือ.. ข้อมูลประเภท Time Series นั่นเองครับ

ข้อมูล Time Series คืออะไร แล้วทำไมคนเรียน Data Science ควรสนใจ

time-series-plot.png

ข้อมูล Time Series (ภาษาไทยเท่ ๆ ว่า “อนุกรมเวลา”) คือ ข้อมูลที่เปลี่ยนแปลงไปตามเวลา เช่น ค่าเงินบาทไทยเทียบกับสหรัฐอเมริกา, ราคาหุ้น, ยอดขายไอศกรีมรายวัน, จำนวนสินค้าที่ผลิตได้ในแต่ละเดือน ฯลฯ

ปกติแล้วถ้าเราเรียนวิชาที่เกี่ยวข้องกับ Machine Learning เราก็จะเรียนโมเดลทำนายผลประเภท Linear Regression, Decision Tree, Neural Network ซึ่งออกแบบมาให้ใช้กับข้อมูลทั่วไป เพราะฉะนั้นโมเดลพวกนี้จะไม่ได้รองรับฟีเจอร์พิเศษต่าง ๆ ของ Time Series

ความแตกต่างของข้อมูลแบบ Time Series กับข้อมูลทั่วไป คือ ข้อมูลพวกนี้มีฟีเจอร์ในส่วนที่เกี่ยวข้องกับ เวลา เช่น

  • Trend (เทรนด์)
  • Seasonality (ความแปรผันตามฤดูกาล)
  • Cycle (วัฏจักร)

ที่เราสามารถนำมาใส่ในโมเดล เพื่อให้ทำนายผลได้ออกมาแม่นยำมากขึ้นครับ

แอดมองว่าข้อมูลแบบ Time Series เป็นข้อมูลที่สำคัญและพบเห็นได้ทั่วไปไม่ว่าจะทำงานที่ไหน เพราะฉะนั้นคนที่เป็น Data Scientist ควรมีความรู้เอาไว้ไม่มากก็น้อยครับ

ตัวอย่าง: ทดลองใช้ Linear Regression กับข้อมูล Time Series

linear-regression-time-series

เรามาลองใช้ Linear Regression ในการโมเดล Time Series ในกราฟข้อมูลที่แสดงก่อนหน้านี้ครับ เราจะเห็นว่าข้อมูลชุดนี้มีลูกคลื่นที่เราเห็นเป็นระยะ ๆ ในกราฟ

คลื่นพวกนี้เกิดจากที่ยอดขายของยาสูงเป็นพิเศษในเดือนมกราคมทุกปี จึงทำให้กราฟของเรามีคลื่นนี้อยู่ทุกปี เราเรียกผลจากเดือนมกราคมนี้ว่า Seasonality ครับ

เพราะข้อมูลมี Seasonality ทำให้เราไม่สามารถขีดเส้นธรรมดาด้วย Linear Regression เพื่อทำนายผลได้ เราต้องคิดถึงผลของ Seasonality ด้วยครับ

ลองมาดูตัวอย่างการใช้ Regression ที่มีตัวแปรสำหรับ Seasonality กัน

See also  Learn English Tenses: PAST PERFECT | past per

linear-model-forecast-trend-seas.png

บางท่านอาจจะสงสัยว่าทำไมใช้ Regression แล้วผลลัพธ์ (เส้นสีน้ำเงิน) ถึงออกมาไม่เป็นเส้นตรง นั่นเพราะเค้ามีการใช้สิ่งที่เรียกว่า Dummy Variable หรือ ใส่ค่าใน Input เป็น 0 กับ 1 ครับ

เช่น เราเพิ่มตัวแปรชื่อ season2 เข้าไป ถ้าแถวของข้อมูลที่เราคำนวณอยู่เป็นของเดือนกุมภาพันธ์ ตัวแปร season2 = 1 แต่ถ้าไม่ใช่เดือนกุมภาพันธ์ ตัวแปร season2 = 0 ทำให้เราสามารถใส่ค่าเพิ่มใน Regression ได้เฉพาะสำหรับบางเดือนเท่านั้น

สำหรับใครที่อยากลองรันพลอตด้านบนใน R สามารถดาวน์โหลดแพ็กเกจ FPP2 ซึ่งเป็นแพ็กเกจที่แอดใช้เรียนวิชา Business Forecasting เพื่อนำโค้ดด้านล่างไปรันได้เลยครับ (วิชานี้อาจารย์ผู้สอนเป็นหนึ่งในทีมเขียน Package ครับ)

library(fpp2)

# View the data (this comes with fpp2 package)
a10

# Plot the time series data
autoplot(a10) +
  ggtitle("Antidiabetic drug sales") +
  ylab("$ million") +
  xlab("Year")

# Fit the linear model to the data with trend & season as predictors
fit = tslm(a10 ~ trend + season)
# Plot the linear model forecasts
autoplot( forecast(fit) )

ถ้าเริ่มสนใจเรื่องการสร้างโมเดลสำหรับข้อมูล Time Series กันแล้ว แอดมีหนังสือออนไลน์ดี ๆ มาแนะนำกันครับ เป็นหนังสือที่แอดใช้เรียนวิชา Business Forecasting เลย (อาจารย์ผู้สอนเป็นหนึ่งในผู้เขียนเช่นกัน ซึ่งมีหลายมหาวิทยาลัยที่ทำ Slide โดย Reference จากหนังสือเล่มนี้ น่าจะเพราะผู้เขียนอีกท่านเป็น Professor ด้าน Time Series อันดับต้น ๆ ในออสเตรเลียครับ)

แจกฟรี หนังสือออนไลน์สอน Time Series Forecasting

fpp2_book_cover.jpg

หนังสือ Forecasting: Principles and Practice เวอร์ชั่น 2 หรือ FPP2 สามารถอ่านบนออนไลน์ได้ฟรี หรือจะซื้อเป็นเล่มบน Amazon ก็ได้ครับ ซึ่งอาจารย์ผู้สอนเค้าบอกเองเลยว่าไม่แนะนำให้ซื้อเป็นเล่ม เพราะเนื้อหาบนออนไลน์มีการอัพเดทใหม่ตลอดครับ

เนื้อหาในหนังสือเล่มนี้ค่อนข้างอ่านง่าย เพราะเค้าไม่ลงลึกในส่วนของสูตรต่าง ๆ มากนัก เน้นเขียนให้คนที่มีพื้นฐานสถิติ หรือคณิตศาสตร์มัธยมปลาย ก็สามารถอ่านเข้าใจได้ แต่ส่วนไหนที่ต้องใช้ความรู้เพิ่มเติมเค้าจะมีเขียนกำกับไว้ครับ (เช่น การทำ Matrix Formulation เวลาใช้โมเดล Linear Regression)

วิชาที่แอดเรียนอยู่นี่เค้าสอนทั้งปริญญาตรี และปริญญาโทในห้องเรียนเดียวกันเลยครับ ใช้เนื้อหาเดียวกันหมด สิ่งที่แตกต่างกันก็แค่ว่าของปริญญาโทจะมีส่งการบ้านที่เป็นงานกลุ่มด้วย เพราะฉะนั้นคนที่เรียนปริญญาตรีอยู่ก็อ่านหนังสือเล่มนี้รู้เรื่องแน่นอน

แต่ว่าถ้าให้เปิดไปอ่านเองแบบอ่านเรียงจากบทแรกจนบทสุดท้าย อาจจะงงและเลิกอ่านกันไปก่อนครับ เพราะฉะนั้นเลยจะมาสรุปตามเนื้อหาที่แอดเรียนในวิชานี้ให้ จะได้ไปศึกษากันง่าย ๆ

สรุปหัวข้อที่ต้องอ่านเรียงตามลำดับ สำหรับหนังสือ Forecasting: Principles and Practice

อันนี้คือหัวข้อที่แอดเรียน เรียงตามลำดับที่สอนในวิชา Business Forecasting จริงเลยครับ ถ้าเรียนจบหมดนี่จะเข้าใจเรื่องต่าง ๆ ดังนี้ครับ:

  • พื้นฐานเกี่ยวกับการทำนายผลข้อมูล Time Series
  • วิธีพลอตกราฟต่าง ๆ ที่สำคัญสำหรับข้อมูล Time Series
  • วิธีการทำนายพื้นฐาน: Naive, Seasonal Naive, Drift, Average
  • วิธีการแปลงข้อมูลด้วย BoxCox Transformation
  • วิธีวิเคราะห์ Residuals
  • วิธีการทำ Decomposition แบบต่าง ๆ: Classical, X-11, SEATS, STL
  • โมเดล Time Series ที่คนนิยมใช้กัน: ETS, ARIMA
  • โมเดล Time Series ด้วย Linear Regression
  • Regression ขั้นสูง ด้วย ARMA Error

บทที่ 1: Getting Started

บทนี้จะปูพื้นฐานเกี่ยวกับการ Forecast (ทำนายผล) ว่านำไปใช้ทำอะไร และมีขั้นตอนอย่างไร ซึ่งมีประโยชน์มากสำหรับความเข้าใจภาพกว้างว่าการ Forecast มีประโยชน์กับธุรกิจอย่างไร

(หนังสือเล่มนี้เนื้อหาค่อนข้าง Practical มากครับ อ่านจบแล้วแอดคิดว่านำไปใช้ประโยชน์ได้ไม่ยากเลย)

บทที่ 2: Time Series Graphics

บทนี้จะเริ่มเข้าเรื่องการทำ Forecast พูดถึงกราฟประเภทต่าง ๆ ที่เราจำเป็นต้องใช้ รวมไปถึงประโยชน์ของมัน พลอตที่ใช้บ่อยเวลาทำโมเดลก็คือ Time Series Plot, Seasonal Plot, Seasonal Subseries Plot, Autocorrelation (ACF) Plot ครับ

มาลองดูสัก 1 ตัวอย่างของพลอตที่สำคัญ ๆ กัน

timeseries-subseriesplot.png

พลอตนี้มีชื่อว่า Seasonal Subseries Plot ครับ ซึ่งอันนี้เป็นข้อมูลเดียวกับพลอตตัวอย่างอื่น ๆ ที่เราใช้ด้านบนเลย พลอตนี้มีประโยชน์มากในการดูเรื่องของ Seasonality ครับ

วิธีอ่าน Seasonal Subseries Plot คือ:

  • เส้นสีดำ = ความเปลี่ยนแปลงของยอดขายในแต่ละเดือนของทุกปี เช่น เดือนมกราคมของทุกปียอดขายสูงขึ้นเรื่อย ๆ (คอลัมน์ Jan เส้นสีดำ)
  • เส้นสีน้ำเงิน = ค่าเฉลี่ย (Mean) ของแต่ละเดือน ซึ่งเห็นได้ชัดเจนเลยว่าเดือนมกราคมมียอดขายเฉลี่ยสูงกว่าเดือนอื่น ๆ (คอลัมน์ Jan เส้นสีน้ำเงิน)

บทที่ 3: The forecaster’s toolbox

บทนี้ยาวหน่อย เพราะครอบคลุมพื้นฐานของการทำ Forecast ครบมากครับ

ช่วงแรก เค้าจะแนะนำวิธีทำนายแบบง่าย ๆ ได้แก่ Average, Naive, Seasonal Naive, Drift ซึ่งวิธีเหล่านี้เรียบง่ายแต่มีประโยชน์มาก เราสามารถใช้เพื่อเปรียบเทียบผลลัพธ์กับวิธีที่ซับซ้อนอื่น ๆ ได้ครับ

มาลองดูตัวอย่างหนึ่งในวิธีทำนายแบบง่าย ๆ ที่ชื่อว่า Naive หรืออีกชื่อคือ Random Walk ครับ

naive-method-forecast.png

วิธีทำนายแบบ Naive ก็ตรง ๆ โง่ ๆ ตามชื่อของมันเลยครับ (Naive แปลว่า ซื่อ ๆ ไร้เดียงสา) ก็คือ “ค่าในอนาคต = ค่าสุดท้ายในอดีต” เลยทำให้ผลทำนายออกมาเป็นเส้นตรงจากค่าสุดท้ายใน Time Series เลยครับ

ช่วงที่สอง เค้าพูดถึงเรื่องการ Transform ข้อมูล เพราะข้อมูลที่ Variance ไม่ Stable จะทำให้ต้องใช้วิธีทำนายที่ซับซ้อนในการทำผล เราสามารถแปลงข้อมูลด้วย Log หรือ BoxCox Transformation (เป็นได้ทั้ง Log และ Power Transformation ในฟังก์ชั่นเดียว)

ลองดูตัวอย่างข้อมูลชุดเดิมกับข้างบน ๆ (ยอดขายยา) ที่ทำ Transformation แล้วครับ

boxcox-transformation.png

เวลาคิดถึง Variance คิดง่าย ๆ ว่า คือ ความสูงของคลื่น Seasonality ครับ ถ้าย้อนกลับไปดูจะเห็นว่าข้อมูลของเรามีคลื่นที่เริ่มจากความสูงเล็ก ๆ และค่อย ๆ เพิ่มขึ้น พอเราใช้ BoxCox Transformation แล้วคลื่นออกมาสูงเท่ากันหมด ทำให้เราสามารถใช้โมเดลที่ Simple ขึ้นในการทำนายได้

สำหรับคนที่อยากลองพลอตนี้ สามารถนำโค้ดด้านล่างไปรันใน R ได้เช่นเคยครับ (อย่าลืมเรียก library(fpp2) ก่อน)

# Find the parameter for BoxCox transformation
(best_lambda = BoxCox.lambda(a10))
# Apply BoxCox transformation
BoxCox(a10, lambda=best_lambda)
# Plot the transformed data
autoplot( a10_transformed )

ช่วงที่สาม ก็สำคัญไม่แพ้ช่วงก่อนหน้านี้ครับ นั่นคือ การวิเคราะห์ความผิดพลาดของโมเดลทำนาย หรือ Residuals นั่นเอง

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

วิธีหนึ่งที่เช็คได้ง่าย ๆ ว่ามีข้อมูลอะไรที่โมเดลของเรายังขาดอยู่มั้ย คือ การใช้ Ljung-Box Test ที่จะบอกได้ว่าค่า Residuals ของเรามี Correlation อะไรกันมั้ย ถ้ามี แปลว่าในข้อมูลยังมี Pattern บางอย่างที่เรายังจับไม่ได้

ลองมาดูตัวอย่างของการทำ Residual Analysis กันครับ

checkresiduals-1.png

ช่วงที่สี่ เป็นเรื่องของการวัดความแม่นยำของผลทำนายครับ ซึ่งเป็นเรื่องสำคัญมาก ๆ และใครที่เรียน Machine Learning มาแล้วอาจจะเจอกับคอนเซปต์ที่เหมือนกันเลยครับ นั่นคือ การแบ่งข้อมูลเป็น Training & Test Set เพื่อวัดผล รวมถึง Cross Validation (แต่การทำ Cross Validation สำหรับ Time Series จะแตกต่างกับข้อมูลทั่วไปเล็กน้อยครับ เพราะ Time Series มีเรื่องของเวลามาเกี่ยวด้วย)

สำหรับค่าที่ใช้ในการวัดความแม่นยำ ก็จะเป็นค่าเช่น MAE (Mean Absolute Error), RMSE (Root Mean Squared Error) ซึ่งคนที่เรียนด้าน Data Science มาก่อนต้องรู้จักกันอยู่แล้วแน่นอน ซึ่งสิ่งที่น่าสนใจในเรื่องนี้ คือ เค้าแบ่งค่าที่เป็น Scale Dependent (MAE, RMSE) และ Scale Independent (MAPE, MASE) โดยกลุ่มหลังสามารถนำไปใช้เปรียบเทียบกับข้อมูลต่างชุดกันได้ แต่กลุ่มแรกทำไม่ได้

ช่วงสุดท้าย ก็จะพูดถึงการคำนวณค่า Prediction Interval ซึ่งก็คือ ระยะของค่าทำนายผล ซึ่งจะบอกได้ว่าค่าที่เราทำนายสามารถสูงหรือต่ำกว่าค่ากลางได้ขนาดไหน ลองดูตัวอย่างในพลอตด้านล่างครับ

googforecasts2-1.png

เราจะเห็นว่าผลทำนายที่เป็นเส้นสีน้ำเงิน มีพื้นที่สีน้ำเงินและสีฟ้าครอบอยู่ นั่นก็คือส่วนของ Prediction Interval นั่นเองครับ โดยเส้นสีน้ำเงินที่เราเห็น ความจริงมันก็คือค่าเฉลี่ย (Median) ของ Prediction Interval นั่นเอง เราเรียกค่านี้ว่า Point Forecast

บทที่ 6: Time series decomposition

(เข้าใจถูกแล้วนะครับ ว่าเราข้ามบทที่ 4-5 มาบทที่ 6 เลย)

ในบทนี้ เราจะมารู้จักกับวิธีต่าง ๆ ในการแยก Time Series ออกเป็นส่วนต่าง ๆ นั่นก็คือ Trend-Cycle (หรือ Trend เฉย ๆ), Seasonality, และ Remainder (ส่วนที่เหลือจาก Trend + Seasonality)

การแยก Time Series ออก ทำให้เราสามารถวิเคราะห์ Time Series ได้ง่ายขึ้น เพราะในหลาย ๆ ครั้งเราต้องการทำนายเฉพาะส่วน หรือต้องการวิเคราะห์เฉพาะส่วนของ Time Series ครับ

elecequip-stl-decomposition.png

ตัวอย่างที่เห็นได้บ่อย ๆ คือ เราต้องการวิเคราะห์ข้อมูลที่ไม่มี Seasonality เราก็สามารถแยก Time Series ออกมาเฉพาะส่วน Trend + Remainder ออกมาวิเคราะห์ ซึ่งเราเรียกข้อมูลชุดนี้ว่า Seasonally Adjusted Data ครับ

ในบทนี้จะแนะนำวิธีการทำ Decomposition แบบต่าง ๆ ที่พัฒนาขึ้นมาเรื่อย ๆ ตั้งแต่ Classical Decomposition, X11 / X-12 / X-13, SEATS, จนมาจบที่ STL ซึ่งพัฒนามาให้ยืดหยุ่นกว่าวิธีอื่น ๆ สามารถใช้กับข้อมูลที่มี Seasonality ระยะเท่าไหนก็ได้ (วิธีเก่า ๆ จะใช้ได้กับ Seasonality แบบรายเดือน กับราย Quarter เท่านั้น)

เราสามารถใช้วิธี Decomposition เข้ามาช่วยทำนายผลได้ด้วย วิธีการทำนายผล คือ:

  1. แยกข้อมูลส่วนที่เป็น Seasonally Adjusted Data แล้วทำนายด้วยวิธีที่เราเลือก (ใช้วิธีทำนายที่เหมาะกับข้อมูล Non-seasonal เช่น Naive, Drift, ETS จากบทที่ 7, ARIMA จากบทที่ 8 etc. ได้ทั้งหมดครับ)
  2. แยกข้อมูลส่วนที่เป็น Seasonality มาทำนายด้วย Seasonal Naive = ดึงค่า Seasonal จากค่าล่าสุด
  3. หลังจากนั้นนำผลทำนายสองส่วนมารวมกัน ส่วน Prediction Interval ใช้ของ Seasonally Adjusted Data เท่านั้นครับ

ผลลัพธ์เวลาเราทำนายด้วย Decomposition จะออกมาหน้าตาแบบนี้ครับ

decomposition-forecast.png

บทที่ 7: Exponential Smoothing

ETS เป็นหนึ่งในโมเดลที่ได้รับความนิยมมากเป็นอันดับต้น ๆ พอ ๆ กับโมเดล ARIMA ที่เราจะเรียนในบทถัดไปครับ โดย ETS เน้นการทำนายโดยดูจาก Trend และ Seasonality ของข้อมูล

หัวใจหลักของโมเดล ETS คือ แต่ละโมเดล ETS จะแบ่งเป็น 3 ส่วน เขียนออกมาเป็น ETS(_, _, _)

3 ส่วนใน ETS ประกอบไปด้วย E (Error) + T (Trend) + S (Seasonality) ซึ่งบังเอิญว่า “ETS” ตรงกับชื่อโมเดล “ExponenTial Smoothing” พอดีครับ ถือเป็นการตั้งชื่อที่จำได้ง่ายมาก

วิธีการเลือกโมเดล ETS ให้เหมาะกับข้อมูล เราต้องดูแต่ละส่วนของข้อมูล เพื่อเลือกโมเดลที่เหมาะสมครับ:

  • ส่วนของ Error อาจารย์บอกว่าให้ดูจาก Trend หรือ Seasonality ว่ามีส่วนไหนเป็น Multiplicative มั้ย
  • มี Trend มั้ย ถ้ามี เทรนด์ของเราเป็น Additive / Additive Damped / หรือ Multiplicative (อันหลังวิชานี้ไม่ได้สอน)
  • มี Seasonality มั้ย ถ้ามี Seasonality ของเราเป็น Additive (Variance เท่าเดิมตลอด) หรือเป็น Multiplicative (Variance ขึ้นหรือลงตามเวลา)

ซึ่งค่าที่แตกต่างกันของโมเดลพวกนี้ก็มีชื่อเรียกพิเศษของมันด้วยครับ เช่น ETS(,N,N) = Simple Exponential Smoothing, ETS(,A,N) = Holt’s Linear Method, ETS(_,A,A) = Additive Holt-Winters’ Method จะเห็นว่าชื่อเหล่านี้ตั้งชื่อตาม Researcher ที่ค้นพบวิธีเหล่านี้นั่นเอง

ลองมาดูตัวอย่างการทำนายผลด้วยโมเดล ETS กันครับ

ets-mam-forecast.png

สำหรับโมเดลในตัวอย่างนี้ เรากำหนดให้มี Trend (T = Additive) และมี Seasonality (M = Multiplicative) ซึ่งเห็นว่าผลการทำนายออกมาแล้วโมเดลแสดงถึงเทรนด์ที่เพิ่มขึ้น รวมถึง Seasonality ที่เพิ่มสูงขึ้นได้ด้วยครับ เรียกได้ว่าดึงส่วนสำคัญของข้อมูลออกมาได้ทั้งหมด

บทที่ 8: ARIMA Models

หลังจากที่รู้จักกับ ETS กันไปแล้ว มารู้จักกับ ARIMA ซึ่งเป็นโมเดลชื่อดังอีกตัวกันบ้างครับ ความแตกต่างของ ARIMA กับ ETS ก็คือ ARIMA ทำนายผลโดยดูจาก Autocorrelation ในข้อมูลครับ

ก่อนจะเข้าใจโมเดล ARIMA เราต้องเข้าใจสิ่งที่เรียกว่า Non-Stationary Data VS Stationary Data ก่อนครับ อธิบายแบบเข้าใจง่าย ๆ ข้อมูลที่ Stationary คือ “ถ้าเราสุ่มข้อมูลออกมา 2 ครั้งจากบน Time Series จะต้องได้กราฟหน้าตาเหมือนกัน”

เพราะฉะนั้นข้อมูลที่มี Trend หรือ Seasonality ถ้าเราสุ่มข้อมูลออกมา 2 ครั้งจะได้กราฟไม่เหมือนกันแน่นอน ถือเป็น Non-Stationary Data ครับ ซึ่ง ARIMA จะทำงานได้ไม่ดีกับข้อมูลประเภทนี้ ส่วนข้อมูลแบบ Stationary Data ก็อย่างเช่น White Noise (หน้าตาเหมือนข้อมูลสุ่มมั่วๆ) ครับ

แต่ข้อมูลส่วนใหญ่ในโลกนี้เป็น Non-Stationary ครับ เพราะฉะนั้นเลยมีวิธีที่เรียกว่า Differencing หรือการหาความแตกต่างระหว่างค่าปัจจุบันกับค่าก่อนหน้า ซึ่งจะทำให้เราได้ข้อมูลที่เป็น Stationary ออกมาครับ (บางครั้งก็ต้องทำการ Difference หลายครั้ง หรือ Difference โดยเทียบกับค่าจาก Season ที่แล้ว เรียกว่า seasonal diff)

ลองมาดูตัวอย่างของการทำ Differencing กัน

drugsale-scale-diff.png

จะเห็นว่าพอ diff แล้วจะได้ข้อมูลที่ดูหน้าตาเหมือนมั่ว ๆ ออกมา พร้อมใช้กับโมเดล ARIMA แล้วครับ

สิ่งที่เราต้องรู้เกี่ยวกับ ARIMA คือ ARIMA มาจากโมเดล AR (AutoRegressive) ที่รวมร่างกับ (Integrated) โมเดล MA (Moving Average) นั่นเอง

สำหรับโมเดล ARIMA ที่ใช้กับข้อมูลที่ไม่มี Seasonality จะถูกเขียนในรูปของ ARIMA(p,d,q):

  • p = order ของโมเดล AR(p)
  • d = จำนวนการ diff ทั้งหมด ไม่นับ seasonal diff
  • q = order ของโมเดล MA(q)

สำหรับวิธีการเลือก Parameter ของโมเดลนี้ เราสามารถให้คำสั่ง auto.arima เลือกให้ หรือใช้วิธี ดูจาก ACF/PACF Plot ก็ได้ครับ โดยหลังจากเลือกโมเดลเริ่มต้นแล้ว เราต้องลองปรับค่า p กับ q ประมาณ +-2 ดูด้วย แล้วเทียบจากค่า AICc หรือ RMSE เพื่อดูว่าโมเดลไหนดีที่สุด

สิ่งที่ควรรู้ก็คือ ใน ARIMA ค่าของ p กับ q เป็นตัวเลข เพราะฉะนั้นมันสามารถเป็นเลขไหนก็ได้ที่ไม่ใช่เลขติดลบ ต่างกับ ETS ที่มีกำหนดแน่นอนว่าส่วนนี้เป็นได้เฉพาะค่านี้กับค่านี้เท่านั้น หมายความว่าถ้าเราใช้คำสั่ง auto.arima มันจะไม่ได้เสิร์จจากทุกความเป็นไปได้ ทำให้การเลือกเองด้วย ACF/PACF Plot หลาย ๆ ครั้งได้ผลดีกว่าครับ

See also  แรงม้าคืออะไร | Car of Know | know how คือ

อีกเวอร์ชั่นหนึ่งของ ARIMA คือ การนำไปใช้กับข้อมูลที่มี Seasonality เราจะมี Parameter หน้าตาเหมือนเดิมเพิ่มมาอีก 3 ตัว คือ ARIMA(p,d,q)(P,D,Q)m:

  • P = order ของโมเดล AR(P) สำหรับส่วน Seasonality
  • D = จำนวนการ seasonal diff ทั้งหมด
  • Q = order ของโมเดล MA(q) สำหรับส่วน Seasonality
  • m = frequency ของข้อมูล เช่น ข้อมูลราย Quarter จะ m = 4, ข้อมูลรายเดือนจะ m = 12

มาลองดูตัวอย่างการทำนายผลด้วย Seasonal ARIMA กันครับ

arima-forecast.png

เรื่องสุดท้ายที่เราต้องรู้ คือ การนำโมเดล ETS กับ ARIMA มาเปรียบเทียบกัน เพราะว่าเป็นโมเดลที่มี Parameter ไม่เหมือนกัน เราไม่สามารถมาเปรียบเทียบค่า AICc กันได้โดยตรง (รวมถึงโมเดล ARIMA ที่มีค่า diff ต่างกัน เราก็ไม่สามารถเทียบค่า AICc ได้โดยตรงเช่นกันครับ)

วิธีในการเปรียบเทียบว่าโมเดล ETS หรือ ARIMA เหมาะกับข้อมูลเรามากกว่า คือ คำนวณ Error จาก Train-Test Set หรือ Time Series Cross Validation ซึ่งโมเดลไหนมี Error น้อยกว่าก็เลือกใช้โมเดลนั้นได้เลยครับ

บทที่ 5: Time Series Regression Model

หลังจากที่ไปตะลุยกับโมเดลเทพ ๆ อย่าง ETS และ ARIMA แล้ว เราก็ย้อนกลับมาบทที่ 5 เพื่อเรียน Regression Model กันครับ ซึ่งในต้นบทความแอดได้ขายของไปแล้ว Regression Model กับ Time Series มันทำอะไรได้มากกว่าที่คิด

ข้อดีของ Regression Model เทียบกับโมเดลอื่น ๆ คือ สามารถอ่านเข้าใจได้ง่าย เราสามารถดูค่า Parameter แล้วเขียนออกมาเป็นสมการ Regression ได้เลย หรือศัพท์ที่ใช้ในนี้ คือ มี Explanatory Power สูงมาก

แน่นอนว่าด้วยความที่มันอธิบายได้ง่าย ก็มาพร้อมกับข้อจำกัดว่าความแม่นยำในการทำนายอาจจะต่ำกว่าโมเดลประเภทอื่นที่อธิบายได้ยาก

ตามที่แอดสปอยไปก่อนหน้านี้ คือ เราสามารถใช้เทคนิคต่าง ๆ มาเพื่อพัฒนา Regression Model ให้ทำนาย Time Series เก่งขึ้นได้ เช่น:

  • ใช้ Dummy Variable เพื่อแบ่ง Seasonality จะมีคอลัมน์เพิ่มขึ้น 1 คอลัมน์สำหรับแต่ละ seasonality – 1
  • ถ้า Seasonality เยอะมาก (เช่น m = 52 สำหรับข้อมูล weekly) การเพิ่มอีก 51 คอลัมน์ก็ไม่ใช่ไอเดียที่ดี (เดี๋ยว Overfitting) เราก็เพิ่ม Fourier Term เพื่อใช้แทน Seasonality ได้
  • นับจำนวนวันที่เปิดทำการในแต่ละเดือน ข้อมูลอันนี้สำคัญมากเวลาต้องการคำนวณยอดขายรายวัน เช่น เดือนมกราคมมีวันเปิดทำการ 28 วัน เดือนกุมภาพันธ์เปิดทำการ 25 วัน ฯลฯ
  • ข้อมูลที่ดีเลย์ (Lag) เหมาะมากเวลาเราลงโฆษณาไปเมื่อสามเดือนก่อน ซึ่งอาจจะต้องใช้เวลากว่าผลการลงโฆษณาจะส่งผลต่อยอดขาย

ตัวอย่างการใช้ Trend และ Dummy Variable (Seasonality) ใน Regression

regression-dummy-variables.png

Regression Model จะให้โมเดลออกมาเป็นเส้นตรงเท่านั้น หลายคนอาจจะสงสัยว่าแล้วถ้าข้อมูลไม่ได้เป็นเส้นตรงจะทำอย่างไร ในบทนี้ก็มีการแนะนำเรื่อง Nonlinear regression ที่อธิบายเทคนิคต่าง ๆ ที่เราสามารถใช้ได้ครับ

  • เราสามารถแปลงข้อมูลด้วยการใส่ log ได้ โดยสิ่งสำคัญที่ห้ามลืม คือ ถ้าเราใส่ log ที่ตัวแปรต้น เราต้องใส่ log ที่ตัวแปรตามทั้งหมดด้วย
  • สำหรับกรณีที่ Trend ของ Time Series เปลี่ยนแปลงไปมาหลายค่า แทนที่เราจะขีดเทรนด์เป็นเส้นตรงจากต้นจนจบ เราก็ตัดเส้นออกเป็นส่วน ๆ ซึ่งเทคนิคนี้เรียกว่า Piecewise linear regression
  • ถ้าเราอยากให้เส้นเทรนด์เข้ากับโมเดลมากขึ้น เราสามารถทำให้เส้น Piecewise กลายเป็นโค้งได้ เทคนิคนี้เรียกว่า Exponential / Spline แต่เทคนิคนี้ค่อนข้างอันตราย เพราะปลายสุดของผลทำนายอาจจะโค้งขึ้นหรือลงจนค่าสูงหรือต่ำเกินกว่าจริงไปมากในอนาคต ควรใช้ต่อเมื่อเราอยากโมเดลเท่านั้น ไม่ได้ต้องการ Forecast

ลองมาดูตัวอย่างเทคนิค Piecewise แบบต่าง ๆ กันก่อนครับ

nonlinear-regression.png

วิธีหนึ่งที่แก้ปัญหา Spline วิ่งทะลุจอได้ คือ ใช้ Natural Cubic Smoothing Splines ซึ่งเป็นการตั้ง Spline แบบให้โค้งได้ทุกจุดนั่นเองครับ

regression-splinef.png

บทที่ 9: Dynamic Regression Models

(สังเกตว่าเมื่อกี้เราอยู่บทที่ 5 แล้วมาบทที่ 9 เลย เพราะเราเรียนบทที่ 6 7 8 กันไปแล้วไงครับ)

ขอขอบคุณทุกท่านที่อ่านมาจนถึงจุดนี้นะครับ อันนี้เป็นบทสุดท้ายที่เรียนในวิชานี้แล้วครับ พูดถึงการนำ Regression ในบทที่ 5 มารวมร่างกับ ARIMA ในบทที่ 8

โมเดล ARIMA และ ETS ใช้ประโยชน์จากค่าในอดีต แต่ไม่ได้ใช้ประโยชน์จากข้อมูลเกี่ยวข้อง เช่น จำนวนวันเปิดทำการ, การเปลี่ยนแปลงของกฏหมาย, การเปลี่ยนแปลงในตลาดโดยรวม ฯลฯ แต่ในทางกลับกัน โมเดล Regression ใช้ประโยชน์จากข้อมูลที่เกี่ยวข้อง แต่ไม่ได้ใช้ประโยชน์จากค่าในอดีตได้ดีเท่า ARIMA / ETS

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

วิธีการรวมร่างของเค้าก็ง่ายมากครับ นั่นคือ เค้าเพิ่ม Error Term ที่เป็น ARIMA Model เข้ามาใน Regression เท่านั้นเองครับ

ตัวอย่างการทำนายผลด้วย Dynamic Regression Model เป็นดังนี้ครับ

regression-arma-error.png

สรุปวิชา Business Forecasting เรียนแล้วได้อะไรบ้าง

สำหรับคนทั่วไป เรียนแล้วจะได้เทคนิคการทำนายผลข้อมูล Time Series โดยใช้ภาษา R รันแบบง่าย ๆ เพราะหนังสือออนไลน์เล่มนี้เน้นเนื้อหา Practical ทุกบทจะอธิบายทฤษฎีไม่เยอะ แต่มี Reference ให้คนที่สนใจไปอ่านต่อได้ แล้วแทบทุกบทมีโค้ด R ให้เอาไปรันได้ผลตามหนังสือเป๊ะ

สำหรับคนที่มาจากสาย Data Science / Machine Learning จะพบกับโมเดลแปลกใหม่อย่าง ETS, ARIMA ที่ไม่เคยเห็นในข้อมูลรูปแบบอื่นนอกจาก Time Series รวมถึงการนำ Regression มาใช้แบบซับซ้อนมากขึ้น

เวลาเรียน Data Science หลาย ๆ ที่ชอบสอน Regression แบบผ่าน ๆ แล้วข้ามไปพวก Random Forest / Neural Network เลย แต่ไม่ได้ลงลึกว่า Regression จริง ๆ แล้วมัน Powerful ขนาดไหน

(สำหรับท่านที่สนใจหาหนังสือ Time Series ภาษาไทยอ่าน ลองดูเล่มนี้นะครับ การวิเคราะห์อนุกรมเวลาสำหรับเศรษฐศาสตร์และธุรกิจ ที่ศูนย์หนังสือจุฬาฯ ครับ)

หวังว่าบทความนี้จะเป็นประโยชน์ต่อทุกท่านไม่มากก็น้อยครับ หากเห็นว่ามีประโยชน์รบกวนแชร์บทความนี้ต่อให้เพื่อน ๆ และคอมเม้นท์ทิ้งไว้หน่อยว่าชอบ / ไม่ชอบบทความนี้อย่างไรบ้างนะครับ 🙂 แอดจะได้นำไปปรับปรุงบทความต่อ ๆ ไปในอนาคตครับผม


◦ Lyrics/Vietsub ◦ Ariana Grande x 珊瑚海 ‘One Last Time’ | #jangwh (Tiktok-ver) ‘Youth Of May FMV’


Film 🎞: Youth Of May 2021
💚 Có nhiều bạn hỏi tên phim quá mà mình không
có thời gian trả lời được nên mình viết dưới đây mong
các bạn có thể thấy được ạ! Các bạn thông cảm cho sơ suất này của J nhé!
Cám ơn các bạn rất nhiều ạ! 💚
Song: One Last Time
Artist: Ariana Grande x 珊瑚海 °Remix Tiktokver
Video Editor: jangwh​​​​​​​
Timer: jangwh​​​​​​​
Designer: jangwh​​​​​​​
Typesetter \u0026 Encoder: jangwh​​​​​​​
Translator: jangwh​​​​​​​
Effect: by jangwh​​​​​​​

🎵 Mp3: https://drive.google.com/file/d/16zYuxLir5ZkkxtVjzZA2phJnrL5xYY/view
🌸 Software used: Adobe Photoshop, Adobe Premiere Pro
🌸 Please do not reupload without permission!

นอกจากการดูบทความนี้แล้ว คุณยังสามารถดูข้อมูลที่เป็นประโยชน์อื่นๆ อีกมากมายที่เราให้ไว้ที่นี่: ดูความรู้เพิ่มเติมที่นี่

◦ Lyrics/Vietsub ◦ Ariana Grande x 珊瑚海 'One Last Time' | #jangwh (Tiktok-ver) 'Youth Of May FMV'

AM กับ PM ใช้ต่างกันยังไง และใช้ตอนไหน? – English Tips EP.1


หลายคนอาจจะงงว่า AM กับ PM คืออะไร? ใช้ยังไง? และต้องใช้ตอนไหน? หลายคนรู้แล้วแต่ก็ยังสับสนอยู่ว่าตอนไหนใช้ AM ตอนไหนใช้ PM English Tips ตอนแรกวันนี้จะมาไขข้อสงสัย และมีเทคนิคทำความเข้าใจวิธีใช้แบบง่ายๆ มาให้ทุกคนได้ใช้อย่างถูกต้องกัน รับรองว่าจำง่าย ใช้ได้ และไม่ลืมแน่นอน
EnglishTips
อยากฝึกพูดภาษาอังกฤษตัวต่อตัว หรือเรียนภาษาอังกฤษออนไลน์แบบบุฟเฟ่ต์
สมัครได้เลย ​https://www.unfoxenglish.com/
สอบถามแอดไลน์ ​https://lin.ee/5uEdKb7h
ติดตามช่อง YouTube ส่วนตัว
ช่องยูทูปของแล็คต้า https://www.youtube.com/lactawarakorn
ช่องยูทูปของเบล https://www.youtube.com/bellvittawut
ติดตามช่องทางอื่นๆ และพูดคุยกันได้ที่
ชุมชนคนรักภาษาอังกฤษ https://www.unfoxenglish.com
FB: https://www.facebook.com/unfoxenglish
Twitter: https://www.twitter.com/unfoxenglish
Lacta’s IG: https://www.instagram.com/lactawarakorn
Bell’s IG: https://www.instagram.com/toshiroz
ติดต่องาน
Email: [email protected]
Line: http://nav.cx/oOH1Q6T

AM กับ PM ใช้ต่างกันยังไง และใช้ตอนไหน? - English Tips EP.1

On time กับ In time แปลว่าอะไรและใช้ต่างกันอย่างไร | เรียนภาษาอังกฤษง่ายๆ


สอนภาษาอังกฤษ
On time กับ In time คืออะไรและต่างกันอย่างไร?
on time หมายถึง ตรงเวลา
in time หมายถึง ทันเวลา

On time กับ In time แปลว่าอะไรและใช้ต่างกันอย่างไร | เรียนภาษาอังกฤษง่ายๆ

【抖音】NewTrend Douyin \” Cánh Bướm \” Trào lưu cực hot trên nền nhạc《 Once Upon A Time 》💯 Douyin 2021 ❤


【抖音】NewTrend Douyin \” Cánh Bướm \” Trào lưu cực hot trên nền nhạc《 Once Upon A Time 》💯 Douyin 2020 ❤

✅ Slow motion
✅ Slow motion douyin
✅ Tik tok trung quốc trào lưu mới nhất
✅ Tik tok trung quốc
✅ Tik Tok
✅ Nhạc tik tok các tháng

💸 Paypal: [email protected]
• Slow motion đỉnh cao Douyin China trong tuần 🤩🤩🤩
🔴 Những khoảnh khắc DIỆU KỲ Tik Tok VN + TQ
🔴 Tổng hợp những clip hài hước, vui nhộn.
🔴 Cập nhật những trào lưu mới nhất.
🔴 Tik tok thời trang trung quốc
❤️ Bắp Cải Official luôn luôn cập những video mới và hot nhất trên tik tok Trung quốc Việt nam để đem đến cho các bạn những trào lưu xu hướng mới nhất đồng thời cũng là nơi giúp các bạn thư giãn thoải mái và có những giấy phút bổ ích ❤️
Update video :11:00 \u0026 17:00 hàng ngày
✅ Link Subscribe : https://bit.ly/32Labjv
✅Link Fanpage :https://bit.ly/36rJH9g
=====================================
🛑 Bắp Cải Official kênh cập nhập Trào lưu \u0026 Xu hướng Tik Tok hàng đầu Việt Nam
©️ Âm thanh hình ảnh trong video thuộc : 抖音 (Douyin)
✓ Hãy like và đăng ký kênh để cập nhật những video mới nhất !
✓ Và nhớ Để lại comment góp ý nhé!
✓ Cả nhà bật 1080p lên để xem rõ nét nhé !!!
✓ Chúc các bạn xem vui vẻ ❤
● Tag :OnceUponATime Moonessa tiktok
☎ Gmail liên hệ với mình :[email protected]

【抖音】NewTrend Douyin \

วลี ภาษาอังกฤษ ที่มีคำว่า Time l On time, In time, Take your time, Run out of time, Waste time etc.


ในคลิปนี้มีนมี 9 วลี ที่มีคำว่า Time มาฝากกันค่ะ
On time, In time, Take your time, Run out of time, Waste time แปลว่าอะไร ใช้อย่างไร

วลี ภาษาอังกฤษ ที่มีคำว่า Time l On time, In time, Take your time, Run out of time, Waste time  etc.

นอกจากการดูบทความนี้แล้ว คุณยังสามารถดูข้อมูลที่เป็นประโยชน์อื่นๆ อีกมากมายที่เราให้ไว้ที่นี่: ดูวิธีอื่นๆLEARN FOREIGN LANGUAGE

ขอบคุณมากสำหรับการดูหัวข้อโพสต์ on time แปลว่า

Leave a Reply

Your email address will not be published. Required fields are marked *