วิธีแบ่งชุดข้อมูลสำหรับการทำนายอนุกรมเวลา


22

ฉันมีข้อมูลการขายในอดีตจากร้านเบเกอรี่ (ทุกวันมากกว่า 3 ปี) ตอนนี้ฉันต้องการสร้างแบบจำลองเพื่อทำนายยอดขายในอนาคต (โดยใช้คุณสมบัติเช่นวันทำงานตัวแปรสภาพอากาศ ฯลฯ )

ฉันจะแยกชุดข้อมูลเพื่อปรับและประเมินโมเดลได้อย่างไร

  1. มันจำเป็นต้องเป็นรถไฟตามลำดับเวลา / การตรวจสอบ / แยกทดสอบหรือไม่?
  2. จากนั้นฉันจะทำการปรับพารามิเตอร์ไฮเปอร์พารามิเตอร์กับชุดรถไฟและการตรวจสอบความถูกต้องหรือไม่?
  3. การตรวจสอบข้าม (ซ้อนกัน) เป็นกลยุทธ์ที่ไม่ดีสำหรับปัญหาอนุกรมเวลาหรือไม่


แก้ไข

นี่คือลิงค์ที่ฉันเจอหลังจากติดตาม URL ที่แนะนำโดย @ ene100:

  • Rob Hyndman อธิบาย "ต้นกำเนิดการพยากรณ์แบบหมุน" ในทางทฤษฎีและในทางปฏิบัติ (พร้อมรหัส R)
  • คำศัพท์อื่น ๆ สำหรับต้นกำเนิดการคาดการณ์แบบหมุนคือ "การเพิ่มประสิทธิภาพการเดินไปข้างหน้า" ( ที่นี่หรือที่นี่ ), "ขอบฟ้าที่กลิ้ง" หรือ "ต้นกำเนิดที่กำลังเคลื่อนที่"
  • ดูเหมือนว่าเทคนิคเหล่านี้จะไม่ถูกรวมเข้ากับ scikit เรียนรู้ในอนาคตอันใกล้เพราะ "ความต้องการและความหมายของเทคนิคเหล่านี้ไม่ชัดเจน" (ระบุไว้ที่นี่ )

และนี่คือข้อเสนอแนะอื่นสำหรับการตรวจสอบความถูกต้องข้ามอนุกรมเวลา

คำตอบ:


8

ลิงค์นี้จากบล็อกของ Rob Hyndman มีข้อมูลบางอย่างที่อาจเป็นประโยชน์: http://robjhyndman.com/hyndsight/crossvalidation/

จากประสบการณ์ของฉันการแบ่งข้อมูลออกเป็นชุดตามลำดับเวลา (ปี 1 ปี 2 ฯลฯ ) และการตรวจสอบความเสถียรของพารามิเตอร์เมื่อเวลาผ่านไปมีประโยชน์อย่างมากในการสร้างสิ่งที่มีประสิทธิภาพ นอกจากนี้หากข้อมูลของคุณเป็นไปตามฤดูกาลหรือมีอีกวิธีที่ชัดเจนในการแบ่งออกเป็นกลุ่ม (เช่นภูมิภาคทางภูมิศาสตร์) จากนั้นการตรวจสอบความมั่นคงของพารามิเตอร์ในกลุ่มย่อยเหล่านั้นยังสามารถช่วยในการพิจารณาว่าแบบจำลองนั้นแข็งแกร่งเพียงใด โมเดลแยกต่างหากสำหรับหมวดหมู่ข้อมูลที่แยกต่างหาก

ฉันคิดว่าการทดสอบทางสถิติมีประโยชน์ แต่ผลลัพธ์สุดท้ายควรผ่าน "การทดสอบกลิ่น"


3

1) เทคนิคการพูดคุณไม่จำเป็นต้องทดสอบตัวอย่างถ้าคุณใช้ AIC และเกณฑ์ที่คล้ายกันเพราะช่วยหลีกเลี่ยงการ overfitting

3) ฉันไม่เห็นว่าคุณสามารถทำ CV มาตรฐานเพราะมันหมายถึงการฝึกอบรมรูปแบบอนุกรมเวลาที่มีค่าที่ขาดหายไปบางส่วน ให้ลองใช้หน้าต่างกลิ้งแทนเพื่อฝึกอบรมและคาดการณ์การตอบสนองที่จุดใดจุดหนึ่งที่ติดตามหน้าต่าง


3
AIC ในอนุกรมเวลามักขึ้นอยู่กับข้อผิดพลาดล่วงหน้าหนึ่งช่วงเวลา มันไม่ได้บอกอะไรมากมายเกี่ยวกับประสิทธิภาพการพยากรณ์ล่วงหน้าในระยะเวลา n ดังนั้นมันไม่เพียงพออย่างแน่นอน
Aksakal

คุณสามารถให้การอ้างอิงได้หรือไม่?
James

1

ฉันมักจะเข้าถึงปัญหาจากมุมมองแบบเบย์ ในกรณีนี้ฉันจะพิจารณาใช้overimputationเป็นกลยุทธ์ ซึ่งหมายความว่าการตั้งค่าโอกาสสำหรับข้อมูลของคุณ แต่ไม่รวมผลลัพธ์บางส่วนของคุณ รักษาค่าเหล่านั้นเป็นค่าที่หายไปและจำลองแบบผลลัพธ์ที่หายไปโดยใช้ตัวแปรร่วม จากนั้นหมุนข้อมูลที่ถูกตัดออก คุณสามารถทำเช่นนี้ภายในของขั้นตอน CV 10 เท่า

เมื่อนำมาใช้ในโปรแกรมการสุ่มตัวอย่างหมายความว่าในแต่ละขั้นตอนคุณจะดึงค่าตัวเลือกของค่าข้อมูลที่คุณเว้นไว้ (ข้างพารามิเตอร์ของคุณ) และประเมินความน่าจะเป็นกับรูปแบบที่คุณเสนอ หลังจากบรรลุความคงที่คุณจะได้รับค่าตัวอย่างจริงจากแบบจำลองของคุณซึ่งคุณสามารถใช้ในการประเมินข้อผิดพลาดในการทำนาย: ตัวอย่างเหล่านี้ตอบคำถามว่า "แบบจำลองของฉันจะมีลักษณะอย่างไร โปรดทราบว่าการคาดการณ์เหล่านี้จะสืบทอดความไม่แน่นอนจากความไม่แน่นอนที่มีอยู่ในการประมาณค่าสัมประสิทธิ์ดังนั้นเมื่อคุณรวบรวมค่าที่คาดการณ์ไว้ทั้งหมดสำหรับเช่น 1 มีนาคม 2010 ด้วยกันคุณจะมีการกระจายการคาดการณ์สำหรับวันนั้น

ความจริงที่ว่าค่าเหล่านี้มีการสุ่มตัวอย่างหมายความว่าคุณยังคงสามารถใช้ข้อผิดพลาดที่ขึ้นอยู่กับการมีชุดข้อมูลที่สมบูรณ์พร้อมใช้งาน (เช่นค่าเฉลี่ยเคลื่อนที่) เนื่องจากคุณมีค่าผลลัพธ์ตัวอย่างที่มีอยู่ในทุกขั้นตอน


1

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

Yเสื้อ=(เสื้อ)+εเสื้อ(เสื้อ)Ys<เสื้อ


เสียงที่มีแนวโน้ม ตัวห้อย "s" ใน y_s <= t คืออะไร
tobip

เสื้อYss<เสื้อ

ฉันเดาว่ายอดขายเบเกอรี่ของฉันค่อนข้างขึ้นอยู่กับปัจจัยภายนอก ฉันไม่คิดว่ามันเป็นโมเดลอนุกรมเวลาแบบไดนามิกที่เข้มงวดอย่างเช่นราคาหุ้น ในข้อมูลของฉันค่าเฉลี่ยความคลาดเคลื่อนที่มี CV แบบ 5 เท่าปกตินั้นมีขนาดใหญ่กว่า CV แบบอนุกรมเวลาเพียง 5 เท่าซึ่งจะรักษาลำดับการพับตามลำดับที่อธิบายไว้ที่นี่ (เช่น 30.7 กับ 33.8 สำหรับ ExtraTreesRegressor) . ไม่แน่ใจว่านี่เป็นวิธีที่ถูกต้องในการทดสอบเชิงประจักษ์สำหรับโมเดลไดนามิกหรือไม่?
tobip

สิ่งที่คล้ายกับ ARIMA จะเป็นรูปแบบไดนามิก ยอดขายมักจะคงอยู่เช่นยอดขายของวันนี้เป็นเหมือนเมื่อวาน
Aksakal

0

คำเตือน: วิธีการอธิบายที่นี่ไม่ได้ขึ้นอยู่กับการอ่านครอกที่ละเอียด มันเป็นความพยายามที่ดีที่สุดของฉันในการปรับวิธี K-fold CV สำหรับการวิเคราะห์ไทม์แวร์หลายตัวแปรที่มีความยาวหน้าต่างอินพุทที่ค่อนข้างสั้น ระยะเวลาการรวบรวมข้อมูล

ชุดแรกของการสังเกตจะถูกเปลี่ยนเป็นชุดของหน้าต่างประวัติการสังเกตที่มีความยาว window_length และมีขั้นตอนที่ 1 ระหว่าง windows (ไม่มีก้าว) จากนั้นหลักการคือการแบ่งชุดข้อมูลหน้าต่างใน "เศษ" ยาวกว่า window_length หลายครั้ง (แต่มากกว่าจำนวนรุ่นอินสแตนซ์) และแจกเศษ (เช่นการเล่นไพ่) เป็นข้อมูลการตรวจสอบเพื่อแยกอินสแตนซ์รุ่น เพื่อให้แบบจำลองแยกออกจากกันอย่างชัดเจนยิ่งขึ้นหน้าต่างกักกันของ window_length ที่จุดเริ่มต้นของแต่ละชิ้นจะถูกจัดให้อยู่นอกการฝึกอบรมทั้งหมด

แบบจำลองได้รับการฝึกฝนบนเศษทั้งหมดยกเว้นของตัวเองและการตรวจสอบจะทำบนเศษของตนเอง การตรวจสอบความถูกต้องของคอลเลคชั่น / ชุดของโมเดลทำได้โดยการรวมข้อผิดพลาดในการตรวจสอบความถูกต้องกับเศษทั้งหมดซึ่งชิ้นส่วนแต่ละชิ้นได้รับการจัดการโดยรุ่นย่อยที่สอดคล้องกัน การทดสอบข้อมูลที่มองไม่เห็นสามารถทำได้โดยใช้ค่าเฉลี่ย (หรือชุดค่าผสมที่เหมาะสมอื่น ๆ ) ของผลลัพธ์ของรุ่นที่ผ่านการฝึกอบรมทั้งหมด

วิธีนี้มีวัตถุประสงค์เพื่อลดการพึ่งพาระบบ (และแหล่งข้อมูล) เหมือนกันตลอดระยะเวลาการรวบรวมข้อมูลทั้งหมด นอกจากนี้ยังมีวัตถุประสงค์เพื่อให้ทุกส่วนที่หยาบของข้อมูลมีอิทธิพลต่อแบบจำลองเดียวกัน โปรดทราบว่าการไม่อนุญาตให้หน้าต่างกักกันเป็นอันตรายต่อการฝึกอบรมเป็นจุดที่ความยาวเศษไม่สอดคล้องกับช่วงเวลาที่ (คาดว่าจะปรากฏ) ในข้อมูลเช่น (โดยทั่วไป) รายวันรายสัปดาห์และรอบปี

ชุดรูปแบบอาจจัดการกับข้อมูลใหม่อย่างสมบูรณ์แบบ (ฉันยังไม่รู้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.