คอร์ส
สมมติว่ากำลังพยากรณ์ความต้องการไฟฟ้ารายเดือน โมเดล ARIMA ที่สร้างไว้จับอัตสหสัมพันธ์และแนวโน้มของอนุกรมได้ดี วันหนึ่งเกิดคลื่นความร้อน การพยากรณ์พลาดไป 15% อนุกรมไม่ได้เปลี่ยน แต่อากาศต่างหากที่เปลี่ยน นี่แหละคือสถานการณ์ที่ ARIMAX ถูกออกแบบมารองรับ: การพยากรณ์อนุกรมเวลาที่ปัจจัยภายนอกมีอิทธิพลต่อความผันแปรพอๆ กับประวัติของอนุกรมเอง
บทความนี้จะอธิบายว่า ARIMAX คืออะไร แตกต่างจาก ARIMA และ SARIMAX อย่างไร และเมื่อใดควรใช้ตัวใดเหนือกว่าอีกตัวหนึ่ง จากนั้นจะพาไปทำใน Python แบบครบขั้นตอน ตั้งแต่เตรียมข้อมูล ฟิตโมเดล ตรวจวินิจฉัย และประเมินการพยากรณ์ เพื่อให้สามารถนำไปใช้ได้จริง
ARIMAX คืออะไร?
ARIMAX ย่อมาจาก AutoRegressive Integrated Moving Average with eXogenous variables เป็นโมเดล ARIMA ที่รับตัวแปรภายนอกเข้ามาด้วย กล่าวคือ ตัวทำนายที่อยู่นอกเหนือจากอนุกรมเป้าหมายเอง ตัวอย่างเช่น งบโฆษณา อุณหภูมิ ธงโปรโมชัน อัตราดอกเบี้ย
สัญลักษณ์ทั่วไปคือ ARIMAX(p, d, q) โดยมีรีเกรสเซอร์ภายนอกหนึ่งตัวหรือมากกว่า พารามิเตอร์ p, d และ q มีความหมายเดียวกับใน ARIMA: ลำดับอัตถอยหลัง ระดับของการดิฟเฟอเรนซ์ และลำดับค่าเฉลี่ยเคลื่อนที่ ตัวอักษร "X" หมายถึงสามารถใส่คอลัมน์เพิ่มเติมที่เชื่อว่ามีอิทธิพลต่อเป้าหมายได้ อีกประเด็นหนึ่งที่ควรกล่าวไว้ล่วงหน้า: ซอฟต์แวร์บางตัวนิยาม ARIMAX เป็นโมเดลรีเกรสชันที่มีข้อผิดพลาดแบบ ARIMA แทนที่จะถือว่าตัวแปรภายนอกเข้าสู่สมการในฐานะ AR โดยตรง ความแตกต่างทางคณิตศาสตร์มีความละเอียดอ่อน แต่ส่งผลต่อการตีความค่าสัมประสิทธิ์ เดี๋ยวจะย้อนมาดูอีกครั้งเมื่อพิจารณาผลลัพธ์จาก statsmodels
ARIMAX ทำงานอย่างไร
ARIMAX ผสานสองสิ่งเข้าด้วยกัน: ความทรงจำของอนุกรมเอง และพลังอธิบายของตัวแปรภายนอก
องค์ประกอบ AR, I และ MA
องค์ประกอบ AR (autoregressive) ใช้ค่าล่าช้าของอนุกรมเป้าหมายเพื่อทำนายค่าปัจจุบัน หากยอดขายเดือนก่อนสูง นั่นก็มีนัยสำคัญ
องค์ประกอบ I (integrated) จะดิฟเฟอเรนซ์อนุกรมเพื่อลบแนวโน้มหรือรากเอกพันธ์ ทำให้อนุกรมอยู่ในสภาวะนิ่ง
องค์ประกอบ MA (moving average) ใช้ข้อผิดพลาดจากการพยากรณ์ในอดีตเพื่อแก้ไขความคลาดเคลื่อนเชิงระบบที่โมเดลทำซ้ำๆ
เมื่อรวมกัน ทั้งสามองค์ประกอบนี้จะจัดการสิ่งที่ขับเคลื่อนอนุกรมเวลาทั่วไปได้มาก: แนวโน้ม วัฏจักร และอัตสหสัมพันธ์ในเศษเหลือ
บทบาทของตัวแปรภายนอก
ตัวแปรภายนอกให้ข้อมูลที่ประวัติของอนุกรมเองให้ไม่ได้ หากพยากรณ์ยอดขาย ยอดขายในอดีตบอกแบบแผนตามปกติได้ แต่การลดราคา หรือคู่แข่งรายใหม่เข้าสู่ตลาดคือข้อมูลใหม่ โมเดลจะประมาณค่าสัมประสิทธิ์ให้กับตัวทำนายภายนอกแต่ละตัว พร้อมกับคำนึงถึงอัตสหสัมพันธ์ในข้อผิดพลาดไปพร้อมกัน
ข้อสรุปเชิงปฏิบัติ: หากอนุกรมเป้าหมายอธิบายได้ดีด้วยค่าที่ผ่านมาเอง และไม่มีตัวทำนายภายนอกที่เชื่อถือได้ ARIMA ธรรมดาก็มักเพียงพอ แต่เมื่อรู้ว่ามีปัจจัยภายนอกเข้ามาเกี่ยวข้อง และสามารถมีค่าของตัวทำนายเหล่านั้นในอนาคตตอนพยากรณ์ได้ ARIMAX มักให้ผลพยากรณ์ที่แม่นยำกว่า
ARIMA vs. ARIMAX vs. SARIMAX
SARIMAX ต่อยอดจาก SARIMA โดยเพิ่มตัวแปรภายนอก ในทางปฏิบัติ การใช้งาน ARIMAX ใน Python ส่วนใหญ่อาศัย SARIMAX() ของ statsmodels โดยตั้ง seasonal order เป็นศูนย์
นี่ไม่ใช่ทางลัด แต่เป็นแนวทางมาตรฐาน SARIMAX เป็นตัวเลือกแรกที่ดีเมื่ออนุกรมมีรูปแบบฤดูกาลชัดเจน หรือเมื่อจำเป็นต้องใช้รีเกรสเซอร์ภายนอก เพราะจัดการทั้งสองอย่างได้อย่างเป็นระบบ ข้อควรระวัง: คำว่า "ARIMAX" และ "SARIMAX" ไม่สามารถใช้แทนกันได้ในทุกไลบรารี บางแพ็กเกจ SARIMAX ที่ไม่มีเทอมฤดูกาลจะเหมือนกับ ARIMAX ทุกประการ ในบางแพ็กเกจจะแตกต่างกันในวิธีที่ตัวแปรภายนอกเข้าสู่ไลก์ลิฮูด ตรวจสอบเอกสารของเครื่องมือที่ใช้งาน
เมื่อใดควรใช้ ARIMAX
โดยมากขึ้นอยู่กับสิ่งเดียว: มีตัวทำนายภายนอกที่น่าจะมีอิทธิพลต่อเป้าหมายหรือไม่ และจะมีค่าของตัวทำนายเหล่านั้นในอนาคตตอนต้องพยากรณ์หรือไม่
สถานการณ์ที่ ARIMAX ช่วยเพิ่มคุณค่า
ตัวอย่างที่เหมาะสม ได้แก่ พยากรณ์ยอดขายร่วมกับธงโปรโมชันหรือการเปลี่ยนราคา ความต้องการพลังงานร่วมกับอุณหภูมิ ทราฟฟิกเว็บไซต์ร่วมกับงบแคมเปญ และดัชนีเศรษฐกิจกับข้อมูลอัตราดอกเบี้ย ในแต่ละกรณี ตัวแปรภายนอกให้ข้อมูลที่อนุกรมสร้างขึ้นเองไม่ได้
ARIMA ธรรมดาอาจเพียงพอเมื่อไม่มีตัวทำนายภายนอก หรือไม่เชื่อถือได้ หรือไม่ช่วยปรับปรุงความแม่นยำ out-of-sample การเพิ่มตัวทำนายที่มีแต่สัญญาณรบกวนไม่ช่วยอะไร จำนวนอินพุตที่มากขึ้นไม่ได้รับประกันการพยากรณ์ที่ดีขึ้น ประเมินตัวทำนายที่เสนอทุกตัวบนข้อมูลที่กันไว้ก่อนเสมอก่อนตัดสินใจใช้
ข้อสังเกตเกี่ยวกับเหตุและผล
ความสัมพันธ์ระหว่างตัวทำนายกับเป้าหมายไม่ได้ยืนยันเชิงเหตุและผล ARIMAX เป็นกรอบการพยากรณ์ จึงประมาณความสัมพันธ์ หากงบโฆษณาสัมพันธ์กับยอดขายเพราะทั้งคู่เพิ่มขึ้นในเดือนธันวาคม โมเดลอาจจับได้ แต่มันไม่ได้บอกว่างบโฆษณาเป็นสาเหตุของการเพิ่มขึ้น ความแตกต่างนี้สำคัญหากใช้การพยากรณ์เพื่อสนับสนุนการตัดสินใจ ไม่ใช่แค่คาดการณ์ผลลัพธ์ ควรระบุให้ชัดเจนเมื่อนำเสนอผล
วิธีสร้างโมเดล ARIMAX ใน Python
ต่อไปคือการลงมือทำ
จะใช้ตัวอย่างที่ทำซ้ำได้: ยอดขายไอศกรีมรายเดือน (หน่วยที่ขาย) พร้อมอุณหภูมิ (°C) และธงโปรโมชันเป็นตัวแปรภายนอก ชุดข้อมูลครอบคลุม 48 เดือน แบ่ง 36 เดือนสำหรับฝึก และ 12 เดือนสำหรับประเมินผล
เตรียมข้อมูล
เริ่มจากโหลดหรือสร้าง DataFrame ที่มีดัชนีวันที่รายเดือนสม่ำเสมอ ระบุตัวแปรเป้าหมายและคอลัมน์ตัวแปรภายนอก แล้วจัดแนวทุกอย่างตามวันที่ จัดการค่าที่ขาดหายก่อนการแบ่งชุดข้อมูล ห้ามทำการอิมพิวต์ข้ามขอบเขต train/test เพราะจะทำให้เกิดการรั่วไหลของข้อมูล
กฎสำคัญที่ควรจำตั้งแต่แรก: ค่าตัวแปรภายนอกที่ใส่ตอนฝึกคือแบบเดียวกับที่ต้องมีในอนาคตตอนพยากรณ์ หากไม่มีพยากรณ์อุณหภูมิในอนาคต ก็ใช้ตัวแปรอุณหภูมิเป็นตัวทำนายไม่ได้ นี่ไม่ใช่เชิงอรรถเล็กน้อย แต่ตัดตัวเลือกออกไปได้มากเลยทีเดียว
import pandas as pd
import numpy as np
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.stattools import adfuller
from sklearn.metrics import mean_absolute_error
# Construct a sample monthly dataset
np.random.seed(42)
dates = pd.date_range(start="2020-01", periods=48, freq="MS")
temperature = 15 + 10 * np.sin(np.linspace(0, 4 * np.pi, 48)) + np.random.normal(0, 1, 48)
promotion = np.where((np.arange(48) % 6 == 0), 1, 0)
sales = (
500
+ 8 * temperature
+ 150 * promotion
+ np.cumsum(np.random.normal(0, 10, 48))
)
df = pd.DataFrame({"sales": sales, "temperature": temperature, "promotion": promotion}, index=dates)
# Train/test split
train = df.iloc[:36]
test = df.iloc[36:]
โดยทั่วไปไม่จำเป็นต้องสเกลสำหรับการประมาณค่าใน statsmodels แต่ช่วยให้เสถียรเชิงตัวเลขเมื่อสเกลของตัวทำนายต่างกันมาก การจะสเกลหรือไม่เป็นดุลยพินิจ
ตรวจสอบอนุกรมและตัวทำนาย
ก่อนเลือกพารามิเตอร์ของโมเดล ให้ตรวจสอบอนุกรมเป้าหมายด้วยสายตาและทดสอบสภาวะนิ่ง การทดสอบ Augmented Dickey-Fuller (ADF) เป็นมาตรฐาน ค่า p ต่ำกว่า 0.05 บ่งชี้ว่าอนุกรมอยู่นิ่งและอาจไม่ต้องดิฟเฟอเรนซ์ (d=0) หากอนุกรมมีแนวโน้มชัดเจน มักจะตั้ง d=1 แบบทดสอบเป็นเพียงข้อมูลหนึ่งส่วน ความรู้โดเมนและการพิจารณาด้วยสายตาก็สำคัญเช่นกัน
ตรวจสอบตัวทำนายด้วย: จัดแนวกับเป้าหมายถูกต้องหรือไม่ มีโอกาสที่ตัวทำนายถูกวัดหลังวันที่พยากรณ์หรือไม่ ธงโปรโมชันที่ตั้งค่าก่อนเริ่มเดือนใช้ได้ รายได้ของเดือนนั้นใช้ไม่ได้
เลือกพารามิเตอร์ผู้สมัครและฟิตโมเดล
กราฟ ACF และ PACF ช่วยบอกค่าผู้สมัครของ p และ q ได้ สไปค์เด่นที่แลก 1 ใน PACF พร้อม ACF ที่ค่อยๆ ลดลง มักบ่งชี้ AR(1) ในทางกลับกันบ่งชี้ MA(1) เปรียบเทียบผู้สมัครจำนวนน้อยโดยใช้ AIC หรือ BIC บนชุดฝึก และเก็บชุดทดสอบไว้สำหรับการประเมินขั้นสุดท้ายเท่านั้น
# Fit ARIMAX(1,1,1) via SARIMAX with no seasonal order
exog_train = train[["temperature", "promotion"]]
exog_test = test[["temperature", "promotion"]]
model = SARIMAX(
train["sales"],
exog=exog_train,
order=(1, 1, 1),
seasonal_order=(0, 0, 0, 0),
trend="n"
)
result = model.fit(disp=False)
print(result.summary())
เอาต์พุต summary() จะแสดงค่าสัมประสิทธิ์ ARIMA ควบคู่กับค่าสัมประสิทธิ์ของตัวแปรภายนอก ค่าสัมประสิทธิ์อุณหภูมิจะบอกว่าการเพิ่มขึ้นหนึ่งองศาเชื่อมโยงกับการเปลี่ยนแปลงระดับยอดขายเท่าใด หลังจากองค์ประกอบอัตถอยหลังได้คำนึงถึงแรงเฉื่อยของอนุกรมแล้ว ประเด็นที่ควรรู้: statsmodels ใช้นิยามแบบรีเกรสชันที่มีข้อผิดพลาด ARIMA หมายความว่าการดิฟเฟอเรนซ์ (d=1) ถูกใช้กับกระบวนการความคลาดเคลื่อน ไม่ใช่กับสมการรีเกรสชันโดยตรง ค่าสัมประสิทธิ์จึงแทนผลกระทบต่อระดับของยอดขายโดยไม่ขึ้นกับ d ในกรอบ ARIMAX แบบ transfer-function (ที่บางแพ็กเกจใช้) หาก d=1 ค่าสัมประสิทธิ์จะสะท้อนผลต่อการเปลี่ยนแปลง (difference) มากกว่าระดับ ความต่างนี้มักทำให้สับสน จึงควรตรวจเอกสารของเครื่องมือที่ใช้
ตรวจเศษเหลือและประเมินการพยากรณ์
เศษเหลือควรมีลักษณะเป็นสัญญาณสุ่มขาว ตรวจกราฟ ACF ของเศษเหลือว่ามีอัตสหสัมพันธ์หลงเหลือหรือไม่ สไปค์ที่มีนัยสำคัญหมายความว่าโมเดลยังตกหล่นโครงสร้างบางอย่าง หากเห็นรูปแบบที่แลกฤดูกาล ให้เปลี่ยนไปใช้ SARIMAX พร้อม seasonal order
# Generate out-of-sample predictions
predictions = result.forecast(steps=12, exog=exog_test)
# Evaluate
mae = mean_absolute_error(test["sales"], predictions)
# Naive baseline: forecast each period using the previous period's actual value
naive_forecast = np.concatenate([[train["sales"].iloc[-1]], test["sales"].values[:-1]])
naive_mae = mean_absolute_error(test["sales"], naive_forecast)
print(f"ARIMAX MAE: {mae:.1f}")
print(f"Naive MAE: {naive_mae:.1f}")
เปรียบเทียบ MAE ของ ARIMAX กับเส้นฐานแบบง่าย (ใช้ค่าของงวดก่อนหน้าเป็นค่าพยากรณ์) หาก ARIMAX ไม่ชนะโมเดลง่ายบนชุดทดสอบ นั่นคือข้อค้นพบที่มีนัยสำคัญ ความซับซ้อนไม่มีเหตุผลรองรับ เคยเห็นเหตุการณ์แบบนี้บ่อยกว่าที่คิด โดยเฉพาะเมื่อผู้ทำนายภายนอกมีสัญญาณรบกวนมากกว่าที่เห็นในชุดฝึก
พยากรณ์ค่าในอนาคต
การพยากรณ์เลยช่วงฝึกทำเหมือนกับการประเมิน out-of-sample: ส่งค่าตัวแปรภายนกควบคู่กับการเรียก forecast() สำหรับธงโปรโมชัน มักทำได้ง่ายเพราะทราบปฏิทินโปรโมชันล่วงหน้า สำหรับอุณหภูมิ มักใช้พยากรณ์อากาศหรือค่าเฉลี่ยฤดูกาลในอดีต
จำให้ชัด: ช่วงความเชื่อมั่นที่ statsmodels คืนมาเป็นเงื่อนไขตามค่าตัวทำนายที่ส่งเข้าไป ไม่ได้รวมความไม่แน่นอนของตัวทำนายเหล่านั้น หากพยากรณ์อุณหภูมิไม่แน่นอน ความไม่แน่นอนของการพยากรณ์จริงก็จะกว้างกว่าที่ช่วงดังกล่าวบอกไว้ ควรสื่อสารจุดนี้เมื่อเสนอผลต่อผู้ที่อาจนำไปใช้ตัดสินใจ
ความท้าทายและข้อจำกัดที่พบบ่อย
ตัวอย่างข้างต้นคือเส้นทางสวยงาม ต่อไปนี้คือจุดที่มักสะดุด
- อาจไม่ทราบค่าตัวทำนายในอนาคต: นี่คืออุปสรรคเชิงปฏิบัติที่พบบ่อยที่สุด หากไม่สามารถได้ค่าตัวแปรภายนอกในอนาคตอย่างเชื่อถือ ก็ใช้มันไม่ได้ การพยากรณ์ความต้องการพลังงานด้วยอุณหภูมิของวันพรุ่งนี้ต้องใช้อุณหภูมิที่คาดการณ์ ไม่ใช่ของเมื่อวาน
- ตัวทำนายอาจทำให้ข้อมูลรั่วไหล: ตัวแปรที่วัดหลังวันที่พยากรณ์สามารถทำให้การประเมินในชุดฝึกดูดีกว่าความเป็นจริง ระวังว่าไทม์สแตมป์ของตัวทำนายสอดคล้องกับอะไรแน่
- ความสัมพันธ์อาจเปลี่ยนไป: ค่าสัมประสิทธิ์ที่ประมาณจากข้อมูลในอดีตอาจไม่คงอยู่ต่อไป ความยืดหยุ่นราคาที่เสถียรสองปีอาจเปลี่ยนหลังช็อกทางตลาด และปี 2024 กับ 2025 ก็มีเหตุการณ์มากพอให้เรื่องนี้ไม่ใช่ทฤษฎี ควรประมาณค่าโมเดลใหม่เป็นระยะ
- ตัวทำนายที่สัมพันธ์กันสูงทำให้การตีความยาก: อินพุตที่มีสหสัมพันธ์สูงกันมากทำให้ค่าประมาณสัมประสิทธิ์รายตัวไม่นิ่ง เรื่องนี้อาจไม่กระทบความแม่นยำของการพยากรณ์เสมอไป แต่ทำให้บอกได้ยากว่าตัวทำนายใดทำงานอยู่
- อินพุตมากขึ้นไม่ได้แปลว่าพยากรณ์ดีขึ้น: ประเมินตัวทำนายที่เสนอทุกตัวเทียบกับเส้นฐานบนข้อมูลที่กันไว้ บางฟีเจอร์ที่ดูมีข้อมูลในชุดฝึกกลับเพิ่มสัญญาณรบกวนในชุดทดสอบ
- ฤดูกาลต้องมีเทอมฤดูกาล: หากอนุกรมมีรูปแบบฤดูกาลสม่ำเสมอ เช่น ยอดขายรายเดือนที่พุ่งในเดือนธันวาคม ควรใช้ SARIMAX พร้อม seasonal order เพียง ARIMAX อย่างเดียวไม่พอ
- ยังคงไม่ได้พิสูจน์เหตุและผล: ขอย้ำ: ARIMAX เป็นกรอบการพยากรณ์ ไม่ใช่วิธีหาเหตุและผล อย่าใช้เครื่องหมายของค่าสัมประสิทธิ์ไปอ้างเหตุและผลโดยไม่มีการวิเคราะห์เพิ่มเติม
สรุป
ARIMAX เหมาะสมเมื่อมีปัจจัยภายนอกที่มีอิทธิพลต่อเป้าหมายจริงๆ และสามารถส่งค่าของมันในอนาคตตอนพยากรณ์ได้ เป็นการขยายจาก ARIMA อย่างเป็นธรรมชาติ ไม่ใช่ตัวแทน หากอนุกรมมีพฤติกรรมดีและไม่มีตัวทำนายที่เชื่อถือได้ ARIMA ธรรมดามักเป็นจุดเริ่มต้นที่ดีกว่า การเพิ่มตัวแปรดูเหมือนความก้าวหน้า แต่บางครั้งก็ไม่ใช่
เวิร์กโฟลว์สรุปได้เป็นสี่อย่างที่ต้องทำให้ดี:
- จัดแนวตัวทำนายให้ถูกต้อง,
- ตรวจการรั่วไหลก่อนประเมิน,
- ยืนยันผลบนข้อมูลที่กันไว้จริงๆ และ
- เปรียบเทียบกับเส้นฐานง่ายๆ เสมอ
โมเดล ARIMAX ที่ชนะเส้นฐานแบบง่ายเพียงเล็กน้อย ไม่ได้ดีกว่าเส้นฐานแบบง่าย มันแค่แพงกว่า
หากต้องการลงลึกพื้นฐานของอนุกรมเวลา คอร์ส Time Series Analysis in Python ของเราครอบคลุม ARIMA สภาวะนิ่ง และการวินิจฉัยอย่างละเอียด สำหรับฝั่ง statsmodels คอร์ส Introduction to Regression with statsmodels in Python จะช่วยสร้างสัญชาตญาณทางสถิติที่จำเป็นเมื่ออ่านสรุปโมเดลและตรวจเศษเหลือ
Vinod Chugani เริ่มอาชีพในโตเกียวในฐานะหัวหน้าฝ่ายขายกองทุนเฮดจ์ฟันด์ที่อายุน้อยที่สุดของ JPMorgan และต่อมาได้สร้างสถิติยอดขายส่วนบุคคลที่ Lehman Brothers, จากนั้นได้สร้างธุรกิจจัดจำหน่ายอุปกรณ์อิเล็กทรอนิกส์ใน 30 ประเทศ จนมีรายได้เกิน 100 ล้านดอลลาร์สิงคโปร์ ก่อนจะหันมาโฟกัสด้านข้อมูล เขาจบเศรษฐศาสตร์จาก Duke และเป็นศิษย์เก่าของ NYC Data Science Academy โดยเป็นหนึ่งในผู้ได้รับทุน 3 คนจากผู้สมัครกว่า 100 คน สำหรับคอร์ส Building AI Applications ของ Hugo Bowne-Anderson บน Maven ปัจจุบัน เขาเขียนบทความให้กับ DataCamp, KDnuggets, Machine Learning Mastery และ Statology ครอบคลุมหัวข้อตั้งแต่สถิติไปจนถึงเอเจนติก AI และเป็นที่ปรึกษาให้มืออาชีพด้านข้อมูลที่ NYC Data Science Academy โดยมีประสบการณ์การให้คำปรึกษาแบบตัวต่อตัวมากกว่า 1,000 ครั้ง
FAQs
ความแตกต่างระหว่าง ARIMAX กับ ARIMA คืออะไร?
ARIMA พยากรณ์อนุกรมเป้าหมายโดยใช้เพียงค่าที่ผ่านมาและข้อผิดพลาดจากการพยากรณ์ในอดีต ARIMAX ต่อขยายด้วยการใส่ตัวแปรภายนอก—อินพุตอย่างอุณหภูมิ โปรโมชัน หรืออัตราดอกเบี้ย—ที่เชื่อว่ามีอิทธิพลต่อเป้าหมาย หากปัจจัยภายนอกเหล่านั้นขับเคลื่อนความผันแปรในอนุกรมจริง และสามารถส่งค่าของมันในอนาคตได้ ARIMAX มักให้ผลพยากรณ์ดีกว่า ARIMA เพียงอย่างเดียว
ARIMAX แตกต่างจาก SARIMAX อย่างไร?
ARIMAX จัดการตัวแปรภายนอกแต่ไม่มีเทอมฤดูกาล SARIMAX เพิ่ม AR ฤดูกาล การดิฟเฟอเรนซ์ และ MA แบบฤดูกาลบนฐานของ ARIMAX จึงเหมาะเมื่ออนุกรมมีโครงสร้างฤดูกาลซ้ำๆ ใน statsmodels ของ Python โดยทั่วไป ARIMAX ถูกใช้งานผ่าน SARIMAX() โดยตั้ง seasonal order เป็น (0, 0, 0, 0) ซึ่งในสภาพนั้นทั้งสองก็เป็นโมเดลเดียวกันเชิงฟังก์ชัน
ต้องส่งค่าตัวแปรภายนอกในอนาคตเพื่อพยากรณ์ด้วย ARIMAX หรือไม่?
จำเป็น—นี่คือข้อจำกัดเชิงปฏิบัติที่สำคัญที่สุดอย่างหนึ่ง เมื่อพยากรณ์เลยช่วงฝึก ต้องส่งค่าของตัวแปรภายนอกทุกตัวในทุกก้าวเวลาในอนาคต สำหรับธงโปรโมชันหรืออินดิเคเตอร์วันหยุด มักทำได้ง่าย สำหรับตัวแปรอย่างอุณหภูมิหรือราคาสินค้าโภคภัณฑ์ ต้องใช้ค่าที่พยากรณ์หรือสมมติฐานที่สมเหตุสมผล ซึ่งเพิ่มความไม่แน่นอนเข้ามา
จะเลือก p, d และ q สำหรับโมเดล ARIMAX อย่างไร?
เริ่มจากกราฟ ACF และ PACF ของอนุกรมเป้าหมายที่ผ่านการดิฟเฟอเรนซ์แล้ว สไปค์เด่นที่แลก 1 ใน PACF และ ACF ที่ลดลงมักบ่งชี้ AR(1) ลวดลายกลับกันบ่งชี้ MA(1) ใช้ความรู้โดเมนและ ADF เพื่อกำหนด d จากนั้นเปรียบเทียบชุดผู้สมัคร (p, d, q) จำนวนน้อยด้วย AIC หรือ BIC บนชุดฝึก หลีกเลี่ยงการใช้ชุดทดสอบในขั้นตอนคัดเลือก—ควรเก็บไว้สำหรับประเมินผลสุดท้ายเท่านั้น
ค่าสัมประสิทธิ์ของตัวแปรภายนอกในโมเดล ARIMAX หมายความว่าอย่างไร?
ค่าสัมประสิทธิ์แทนการเปลี่ยนแปลงโดยประมาณในระดับของอนุกรมเป้าหมายที่สัมพันธ์กับการเพิ่มของตัวทำนายนั้น 1 หน่วย หลังจากคำนึงถึงโครงสร้างอัตถอยหลังแล้ว ใน statsmodels ข้อนี้ยังคงจริงแม้ d=1 เพราะการดิฟเฟอเรนซ์ถูกใช้กับกระบวนการข้อผิดพลาด ไม่ใช่สมการรีเกรสชัน (เป็นนิยามรีเกรสชันที่มีข้อผิดพลาดแบบ ARIMA) บางแพ็กเกจใช้กรอบ transfer-function ซึ่งหาก d=1 ค่าสัมประสิทธิ์จะสะท้อนผลต่อการเปลี่ยนแปลงแทนระดับ ดังนั้นควรตรวจเอกสารของเครื่องมือ นอกจากนี้การตีความอาจยากขึ้นเมื่อสเกลของตัวทำนายต่างกันหรือมีสหสัมพันธ์กัน จึงควรมาตรฐานอินพุตเมื่อต้องการเปรียบเทียบค่าสัมประสิทธิ์
จะตรวจพบและจัดการมัลติโคลลิเนียร์ริตีในตัวแปรภายนอกได้อย่างไร?
คำนวณค่า Variance Inflation Factor (VIF) ให้กับตัวทำนายแต่ละตัวก่อนฟิต ค่าเกิน 10 บ่งชี้ปัญหาสหสัมพันธ์สูง หากพบ ลองตัดตัวทำนายที่มีเหตุผลทางทฤษฎีน้อยที่สุดออก หรือรวมตัวแปรที่สัมพันธ์กันเข้าด้วยกันเป็นตัวเดียว สหสัมพันธ์สูงอาจไม่ทำให้ความแม่นยำการพยากรณ์แย่ลงเสมอไป แต่ทำให้ค่าสัมประสิทธิ์รายตัวไม่น่าเชื่อถือและตีความยาก
ควรประเมินอย่างไรว่า ARIMAX เพิ่มคุณค่าจริงหรือไม่?
เปรียบเทียบกับเส้นฐานง่ายเสมอ—การพยากรณ์แบบง่าย (ใช้ค่าของงวดก่อนหน้า) เป็นจุดเริ่มที่ดี หาก ARIMAX ไม่ชนะบนชุดทดสอบที่กันไว้ ความซับซ้อนของโมเดลก็ไม่คุ้มค่า MAE และ RMSE เป็นเมตริกที่เหมาะทั้งคู่ โดย MAE อธิบายกับผู้มีส่วนได้ส่วนเสียได้ง่ายกว่า ทำการเปรียบเทียบบนชุดทดสอบที่ไม่ได้ใช้ในขั้นตอนเลือกพารามิเตอร์
ควรใช้ SARIMAX แทน ARIMAX เมื่อใด?
ใช้ SARIMAX เมื่ออนุกรมมีรูปแบบฤดูกาลสม่ำเสมอ—ยอดขายรายเดือนที่พุ่งเดือนธันวาคม ทราฟฟิกเว็บรายสัปดาห์ที่พุ่งวันจันทร์ เป็นต้น SARIMAX เพิ่มส่วนประกอบ AR ดิฟเฟอเรนซ์ และ MA แบบฤดูกาลซึ่ง ARIMAX ไม่มี และเนื่องจาก statsmodels ของ Python ใช้ ARIMAX ผ่าน SARIMAX() อยู่แล้ว คำถามเชิงปฏิบัติคือจะตั้ง seasonal order เป็นค่าที่ไม่เป็นศูนย์หรือไม่ หากหลังฟิต ARIMAX แล้วเศษเหลือยังมีอัตสหสัมพันธ์ที่แลกฤดูกาล นั่นเป็นสัญญาณให้เพิ่มเทอมฤดูกาล
