Time Series Forecasting Python Programming

Time Series Forecasting Python

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Time Series Forecasting Python: ทำนายอนาคตด้วยข้อมูล

Time Series Forecasting Python คืออะไร / ทำไมถึงสำคัญ

น้องๆ เคยสงสัยไหมว่าเค้าพยากรณ์อากาศล่วงหน้าได้ยังไง หรือหุ้นจะขึ้นจะลงตอนไหน? นั่นแหละคือ Time Series Forecasting! มันคือการใช้ข้อมูลที่เปลี่ยนแปลงตามเวลา (Time Series Data) มาวิเคราะห์เพื่อทำนายแนวโน้มในอนาคต

สมัยผมทำร้านเน็ต SiamCafe.net เมื่อนานมาแล้ว (ตั้งแต่ปี 1997 แน่ะ!) ผมก็เคยคิดนะว่าถ้าเราทำนายจำนวนลูกค้าที่จะเข้าร้านได้แม่นๆ เราจะได้เตรียมเครื่อง เตรียมพนักงานได้ถูก นี่แหละคือความสำคัญของ Time Series Forecasting มันช่วยให้เราวางแผนและตัดสินใจได้ดีขึ้นในทุกๆ ด้าน ไม่ว่าจะเป็นธุรกิจ การเงิน หรือแม้แต่การจัดการพลังงาน

ยกตัวอย่างง่ายๆ ถ้าเรามีข้อมูลยอดขายไอศกรีมรายเดือนย้อนหลัง เราก็สามารถใช้ Time Series Forecasting ทำนายยอดขายในเดือนหน้า หรือไตรมาสหน้าได้ แล้วเราก็จะสต็อกของได้พอดีไงล่ะ

พื้นฐานที่ต้องรู้

ก่อนจะเริ่มลงมือทำ Time Series Forecasting ด้วย Python เราต้องเข้าใจพื้นฐานกันก่อนนิดนึงนะ

Time Series Data คืออะไร

Time Series Data ก็คือข้อมูลที่ถูกเก็บรวบรวมตามลำดับเวลา เช่น ยอดขายรายวัน, ราคาน้ำมันรายสัปดาห์, หรืออุณหภูมิรายชั่วโมง ข้อมูลพวกนี้จะมี "timestamp" กำกับไว้เสมอ

Stationarity คืออะไร

Stationarity คือคุณสมบัติของ Time Series Data ที่ค่าเฉลี่ย (mean) และความแปรปรวน (variance) ไม่เปลี่ยนแปลงตามเวลา พูดง่ายๆ คือ กราฟมันไม่ขึ้นๆ ลงๆ แบบมีแนวโน้มชัดเจน หรือมี seasonality ที่ผันผวนเกินไป ถ้าข้อมูลไม่ stationary เราต้องทำให้มัน stationary ก่อน ถึงจะเอาไปทำนายได้แม่นยำ SiamCafe Blog มีบทความเรื่องนี้อยู่นะ ลองไปอ่านดู

Autocorrelation คืออะไร

Autocorrelation คือความสัมพันธ์ระหว่างข้อมูลใน Time Series เดียวกัน ณ เวลาที่ต่างกัน เช่น ยอดขายวันนี้อาจจะมีความสัมพันธ์กับยอดขายเมื่อวาน หรือเมื่อสัปดาห์ที่แล้ว การเข้าใจ Autocorrelation ช่วยให้เราเลือกรุ่น (model) ที่เหมาะสมได้

วิธีใช้งาน / เริ่มต้นยังไง

Python มี Library เจ๋งๆ สำหรับ Time Series Forecasting เยอะแยะเลย ที่นิยมใช้กันก็มีพวก:

ในการเริ่มต้น เราจะต้อง:

  1. ติดตั้ง Library: ใช้ pip install statsmodels scikit-learn prophet
  2. เตรียมข้อมูล: โหลดข้อมูล Time Series เข้ามาใน Pandas DataFrame
  3. สำรวจข้อมูล: Plot กราฟ ดูแนวโน้ม seasonality และ autocorrelation
  4. เลือก Model: เลือก model ที่เหมาะสมกับลักษณะข้อมูล
  5. Train Model: ป้อนข้อมูลเข้าไปให้ model เรียนรู้
  6. ทำนาย: ใช้ model ทำนายค่าในอนาคต
  7. ประเมินผล: วัดความแม่นยำของผลการทำนาย

ขั้นตอนปฏิบัติจริง

การเตรียมข้อมูลและสำรวจข้อมูล

สมมติว่าเรามีข้อมูลยอดขายรายเดือนอยู่ในไฟล์ CSV ชื่อ sales.csv เราสามารถใช้ Pandas อ่านไฟล์และแปลง column วันที่เป็น DatetimeIndex ได้:


import pandas as pd
import matplotlib.pyplot as plt

# อ่านไฟล์ CSV
df = pd.read_csv('sales.csv', index_col='Date', parse_dates=True)

# Plot กราฟ
plt.figure(figsize=(12, 6))
plt.plot(df['Sales'])
plt.title('Monthly Sales')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.show()

จากกราฟ เราจะเห็นแนวโน้ม (trend) และ seasonality ได้ชัดเจน

การ Train Model และทำนาย

เราจะใช้ ARIMA model จาก statsmodels ในการทำนาย:


from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error

# แบ่งข้อมูลเป็น train และ test
train_data = df[:-12]
test_data = df[-12:]

# สร้างและ Train ARIMA model
model = ARIMA(train_data['Sales'], order=(5, 1, 0))  # p, d, q
model_fit = model.fit()

# ทำนาย
predictions = model_fit.predict(start=len(train_data), end=len(df)-1)

# ประเมินผล
rmse = mean_squared_error(test_data['Sales'], predictions, squared=False)
print(f'RMSE: {rmse}')

# Plot ผลการทำนาย
plt.figure(figsize=(12, 6))
plt.plot(test_data['Sales'], label='Actual')
plt.plot(predictions, label='Predicted')
plt.title('Sales Prediction')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.legend()
plt.show()

โค้ดนี้จะแบ่งข้อมูลเป็นส่วน train (ใช้สำหรับ Train model) และส่วน test (ใช้สำหรับประเมินผล) แล้วสร้าง ARIMA model โดยกำหนด order (p, d, q) ซึ่งเป็น parameters ที่ต้องปรับแต่งให้เหมาะสมกับข้อมูลของเรา หลังจากนั้นก็จะทำนายค่าในอนาคต และประเมินผลโดยใช้ Root Mean Squared Error (RMSE) ยิ่ง RMSE ต่ำ แสดงว่า model แม่นยำ

การปรับแต่ง Model

การเลือก order (p, d, q) ที่เหมาะสมเป็นสิ่งสำคัญมาก เราสามารถใช้ Autocorrelation Function (ACF) และ Partial Autocorrelation Function (PACF) plot เพื่อช่วยในการตัดสินใจได้ หรือจะใช้ Grid Search เพื่อหาค่าที่ดีที่สุดก็ได้ SiamCafe Blog มีบทความเกี่ยวกับ ARIMA model โดยละเอียด ลองไปอ่านดูนะ

เปรียบเทียบกับทางเลือกอื่น

นอกจาก ARIMA แล้ว ยังมี model อื่นๆ ที่ใช้ได้กับ Time Series Forecasting อีกเยอะแยะ แต่ละ model ก็มีข้อดีข้อเสียแตกต่างกันไป

Model ข้อดี ข้อเสีย เหมาะกับข้อมูลแบบไหน
ARIMA มีความยืดหยุ่นสูง, ปรับแต่งได้เยอะ ต้องเข้าใจ autocorrelation, ปรับ parameters ยาก ข้อมูล stationary หรือสามารถทำให้ stationary ได้
Exponential Smoothing ใช้งานง่าย, เหมาะกับข้อมูลที่มี trend และ seasonality ปรับแต่งได้น้อยกว่า ARIMA ข้อมูลที่มี trend และ seasonality
Prophet จัดการ seasonality ได้ดี, ใช้งานง่าย ไม่เหมาะกับข้อมูลที่ไม่มี seasonality ข้อมูลที่มี seasonality ชัดเจน
Linear Regression ใช้งานง่าย, รวดเร็ว ความแม่นยำต่ำ, ไม่เหมาะกับข้อมูลที่ซับซ้อน ข้อมูลที่มีความสัมพันธ์เชิงเส้น
Random Forest จัดการข้อมูลที่ซับซ้อนได้ดี, ไม่ต้องปรับ parameters มาก อาจจะ Overfit, ตีความผลลัพธ์ยาก ข้อมูลที่ซับซ้อน และไม่เป็นเชิงเส้น

การเลือก model ที่ดีที่สุด ขึ้นอยู่กับลักษณะของข้อมูล และความต้องการของเรา ไม่มี model ไหนที่ดีที่สุดสำหรับทุกกรณี เราต้องลองหลายๆ model แล้วเปรียบเทียบผลลัพธ์ดู

Best Practices / เคล็ดลับจากประสบการณ์

น้องๆ หลายคนอาจจะคิดว่า Time Series Forecasting มันยาก เพราะสูตรเยอะ สถิติเพียบ แต่จริงๆ แล้วหัวใจสำคัญคือ "ข้อมูล" ครับ สมัยผมทำร้านเน็ต SiamCafe นี่แหละ ข้อมูลสำคัญสุดๆ ตั้งแต่จำนวนลูกค้าที่เข้าแต่ละวัน ช่วงเวลาที่คนเยอะที่สุด ไปจนถึงเกมที่เด็กๆ ฮิตเล่นกัน

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

3-4 เทคนิคที่ใช้ได้จริง

1. Data Cleaning is King: ข้อมูลดิบๆ ที่ได้มา มักจะไม่สวยงามเสมอไป ต้องทำความสะอาดก่อนเสมอครับ เช่น ลบค่าผิดปกติ (outliers), เติมค่าที่หายไป (missing values) หรือปรับ format ให้เป็นมาตรฐานเดียวกัน


import pandas as pd

# สมมติว่า df คือ DataFrame ที่มีข้อมูล Time Series
# เติมค่า missing values ด้วยค่าเฉลี่ย
df.fillna(df.mean(), inplace=True)

# ลบ outliers (ตัวอย่าง: ค่าที่เกิน 3 เท่าของ standard deviation)
df = df[df['ค่าที่ต้องการ'].abs() <= 3*df['ค่าที่ต้องการ'].std()]

2. Feature Engineering: สร้าง features ใหม่ๆ จากข้อมูลที่มีอยู่ เช่น สร้าง column 'day_of_week' จาก timestamp เพื่อดูว่าวันไหนคนเข้าร้านเยอะ หรือสร้าง 'rolling_average' เพื่อดูแนวโน้มระยะสั้น


# สร้าง column 'day_of_week'
df['day_of_week'] = df.index.dayofweek

# สร้าง rolling average (ค่าเฉลี่ยเคลื่อนที่)
df['rolling_average'] = df['ค่าที่ต้องการ'].rolling(window=7).mean()

3. เลือก Model ให้เหมาะกับข้อมูล: ไม่ใช่ทุก model จะเหมาะกับทุก dataset ลองหลายๆ model แล้วเปรียบเทียบผลลัพธ์ดูครับ ARIMA, Exponential Smoothing, Prophet หรือแม้แต่ Neural Networks ก็เป็นตัวเลือกที่น่าสนใจ

4. Backtesting is Crucial: อย่าเชื่อผลลัพธ์ที่ได้จากการ train อย่างเดียว ต้องทำ backtesting ด้วยครับ คือจำลองสถานการณ์ว่าถ้าเราใช้ model นี้ predict ในอดีต ผลลัพธ์จะเป็นยังไง ถ้า backtesting ไม่ดี แสดงว่า model ยังมีปัญหาอยู่

FAQ คำถามที่พบบ่อย

Model ไหนดีที่สุดสำหรับ Time Series Forecasting?

ไม่มี model ไหนที่ดีที่สุดสำหรับทุกกรณีครับ ขึ้นอยู่กับลักษณะของข้อมูล และสิ่งที่เราต้องการจะ predict ต้องลองหลายๆ model แล้วเปรียบเทียบผลลัพธ์ดู

ต้องมีข้อมูลเยอะแค่ไหนถึงจะทำ Time Series Forecasting ได้?

ยิ่งมีข้อมูลเยอะยิ่งดีครับ แต่โดยทั่วไปแล้วควรมีข้อมูลอย่างน้อย 30 จุดข้อมูลขึ้นไป ถึงจะเริ่มเห็นแนวโน้มและ pattern ได้

ทำไมผลลัพธ์ที่ได้จากการ predict ถึงไม่แม่นยำ?

มีหลายปัจจัยครับ เช่น ข้อมูลไม่สะอาด, เลือก model ไม่เหมาะสม, หรือมีเหตุการณ์ที่ไม่คาดฝันเกิดขึ้น (เช่น โควิด-19 ระบาด) ทำให้ pattern เปลี่ยนไป

ถ้าข้อมูลมี seasonality (เช่น คนเข้าร้านเยอะช่วงเย็น) ต้องทำยังไง?

ต้องใช้ model ที่สามารถจัดการกับ seasonality ได้ครับ เช่น Seasonal ARIMA (SARIMA) หรือ Prophet

Outliers มีผลต่อการ predict มากแค่ไหน?

Outliers มีผลมากครับ เพราะมันจะทำให้ model เรียนรู้ผิดพลาด ดังนั้นต้องจัดการกับ outliers ก่อนเสมอ

สรุป

Time Series Forecasting ไม่ได้ยากอย่างที่คิดครับ หัวใจสำคัญคือ "เข้าใจข้อมูล", "เลือก model ให้เหมาะสม", และ "backtesting อย่างละเอียด" อย่าท้อแท้ถ้าผลลัพธ์ไม่ดีตั้งแต่ครั้งแรก ลองผิดลองถูกไปเรื่อยๆ เดี๋ยวก็เก่งเองครับ

สำหรับใครที่สนใจเรื่องการลงทุน ลองดู iCafeForex ได้นะครับ

และอย่าลืมติดตามบทความอื่นๆ ได้ที่ SiamCafe Blog นะครับ