ด้วยการช่วยเราระบุแนวโน้มที่ซ่อนอยู่และคาดการณ์ในอนาคต อนุกรมเวลาสามารถช่วยเราจัดการกับปัญหาต่างๆ เช่น การคาดการณ์ยอดขาย การจัดการสินค้าคงคลัง และการวิเคราะห์งบประมาณ ขณะนี้มีหลายวิธีในการสร้างแบบจำลองและคาดการณ์อนุกรมเวลา และตลอดหลักสูตรของซีรีส์นี้ ฉันจะพยายามพูดถึงวิธีเหล่านี้ให้มากที่สุดเท่าที่จะเป็นไปได้ เป้าหมายคือการพัฒนาความเข้าใจของตัวเองไปพร้อมกันและเข้าใจคณิตศาสตร์พื้นฐานได้ดีขึ้น
เป็นเรื่องปกติที่การรวบรวมข้อมูลในโลกแห่งความเป็นจริงส่วนใหญ่จะมีการสุ่มบางประเภทเป็นอย่างน้อย และเพื่อศึกษาคุณลักษณะพื้นฐาน (ฤดูกาล วัฏจักร ฯลฯ) เราจำเป็นต้องลดผลกระทบของมัน โชคดีที่เทคนิค การปรับให้เรียบ เช่น การหาค่าเฉลี่ย และ การปรับให้เรียบแบบเอ็กซ์โพเนนเชียล ช่วยให้เราสามารถบรรลุเป้าหมายดังกล่าวได้
สมมติว่าเรามีข้อมูลที่ผ่านมาเกี่ยวกับจำนวนสินค้าที่ขายได้บนเว็บไซต์ของเราในแต่ละวัน และเราต้องการใช้ข้อมูลดังกล่าวในการตัดสินใจทางธุรกิจ (ฉันหวังว่าข้อความคลุมเครือนี้จะซ่อนความไม่รู้ของฉันได้ดี)
ค่าเฉลี่ย
วิธีที่ง่ายที่สุดในการทำความเข้าใจข้อมูลนี้คือ ทำให้ราบรื่น เพื่อให้เราสามารถค้นหาจำนวนสินค้าโดยเฉลี่ยที่ขายได้ในแต่ละวัน บางทีเราอาจใช้มันเพื่อเติมเต็มสินค้าคงคลังของเราได้
เราแค่รวมค่าทั้งหมดแล้วหารด้วยจำนวนวัน
items_sold = [7,6,1,8,10,9,8,11]
ค่าเฉลี่ย = ผลรวม (รายการ) / len (รายการ)
ดูเหมือนว่าเราจะขายสินค้าได้ 7.5 รายการทุกวัน และถึงเวลาที่ต้องตัดสินใจโดยอาศัยข้อมูลเป็นครั้งแรกโดยสั่งซื้อสินค้า 750 รายการในอีก 10 วันข้างหน้า
ตอนนี้เรามาดูว่าเราทำได้ดีเพียงใดโดยการประเมินผลลัพธ์ของเราโดยใช้ ค่าคลาดเคลื่อนกำลังสองเฉลี่ย
- เดลต้าของค่าจริงเทียบกับค่าเฉลี่ย
- กำลังสองของความแตกต่างนี้
- ผลรวมของความแตกต่างนี้
- และสุดท้าย ค่าเฉลี่ยของผลรวมนี้
error = [(จริง — คาดการณ์ไว้)**2 สำหรับจริงใน item_sale]
[0.25, 2.25, 42.25, 0.25, 6.25, 2.25, 0.25, 12.25]
และเมื่อหาค่าเฉลี่ยผลรวมของข้อผิดพลาดเหล่านี้ เราจะได้:
8.25
นั่นคือข้อผิดพลาดของเรา
ตอนนี้เป็นการเริ่มต้นที่ดีแต่มีปัญหาชัดเจนมากกับการใช้ค่าเฉลี่ยเพียงอย่างเดียว สมมติว่ามีคนเห็น Jake Peralta และกัปตัน Holt สั่งซื้อสินค้าจากร้านค้าออนไลน์ของเรา และในเวลาไม่นาน เราก็กลายเป็นสถานที่ที่ฮิปที่สุดในเมือง อย่างไรก็ตาม ยอดขายของเราไม่ได้พุ่งสูงขึ้นแต่ก็เพิ่มขึ้นอย่างต่อเนื่อง
ทันใดนั้น ข้อมูลทางธุรกิจที่หลอกลวงเพียงเคล็ดลับเดียวของเราก็ล้มลง ค่าคลาดเคลื่อนกำลังสองเฉลี่ยของเราเพิ่มขึ้น และเราไม่รู้ว่าเหตุใดสินค้าจึงหมดสต็อก แม้ว่าเราจะสั่งซื้อ 170 ชิ้นภายใน 10 วันข้างหน้าก็ตาม
ปัญหาก็ชัดเจน; เทคนิคการหาค่าเฉลี่ยของเราให้น้ำหนักเท่ากันกับการสังเกตที่ผ่านมาทั้งหมด และดังนั้นจึงไม่ค่อยมีประสิทธิภาพเมื่อต้องรับมือกับแนวโน้ม
ค่าเฉลี่ยเคลื่อนที่เดี่ยว
Single Moving Average เป็นเทคนิคการหาค่าเฉลี่ย — ซึ่งแทนที่จะคำนึงถึงการสังเกตก่อนหน้านี้ทั้งหมด — จะใช้ค่าเฉลี่ยของรายการล่าสุดเท่านั้น หากขนาดของ หน้าต่างที่เคลื่อนไหว ของเราคือ 3 มันจะใช้ค่าเฉลี่ยของ 3 รายการสุดท้าย
ผลลัพธ์ที่เราได้รับน่าพอใจมากขึ้น และ MSE (Mean Squared Error) ของเราตกลงไปที่ 41จาก 139 เป็นไปตามที่คาดหวังเนื่องจากเทคนิคใหม่นี้สามารถลืมยุคก่อนรุ่งโรจน์อันมืดมนของเราได้
การสังเกตอย่างลึกซึ้งในที่นี้คือเหตุใดจึงไม่วางค่าเฉลี่ยของทั้งสามรายการไว้ตรงกลางของชุดค่าเฉลี่ย กล่าวคือ ควรบวกค่าเฉลี่ยแรกกับวันที่ 2 แทนที่จะเป็นวันที่ 3 ที่จริงแล้ว นี่จะเป็นแนวทางที่สมเหตุสมผลกว่าและ เรียกว่า ค่าเฉลี่ยเคลื่อนที่กึ่งกลาง
แต่แล้วเวลาที่ความยาวหน้าต่าง (M) ของเรา เท่ากัน ล่ะ? ตรงกลางของเซตจะเป็น 1.5,2.5,3.5….
วิธีแก้ไขคือใช้ค่าเฉลี่ยเคลื่อนที่กับค่าเฉลี่ยแล้วโดยมีขนาดหน้าต่าง M= 2
น่าเสียดายที่เทคนิคการหาค่าเฉลี่ยเหล่านี้ไม่เหมาะสำหรับการคาดการณ์เมื่อข้อมูลของเราแสดงแนวโน้มที่โดดเด่น ในกรณีนี้ วิธีที่มีประสิทธิภาพมากกว่าคือการใช้ค่าเฉลี่ยเคลื่อนที่สองเท่า นั่นคือรับการเคลื่อนไหวครั้งที่สองจากค่าเฉลี่ยเคลื่อนที่แรกโดยใช้ความยาวหน้าต่างเดียวกัน สิ่งนี้เรียกว่า ค่าเฉลี่ยเคลื่อนที่สองเท่าสำหรับกระบวนการแนวโน้มเชิงเส้น และช่วยให้เราสามารถคาดการณ์ในอนาคตได้
เทคนิคการปรับให้เรียบแบบเอ็กซ์โพเนนเชียล
ในชีวิตจริง วิธีหนึ่งที่จะหยุดยั้งได้อย่างแน่นอนคือการตกเป็นทาสของประวัติศาสตร์ และจำเป็นต้องได้รับการดูแลเป็นพิเศษเพื่อหลีกเลี่ยงเรื่องนั้น เราต้องการความระมัดระวังที่คล้ายกันเมื่อพูดถึงอนุกรมเวลาโดยที่เราให้ความสำคัญกับตัวอย่างล่าสุดมากกว่า วิธีหนึ่งที่ได้รับความนิยมคือการใช้ เทคนิคการปรับให้เรียบแบบเอ็กซ์โพเนนเชียล ที่นี่ เมื่อเราย้ายไปยังการสังเกตก่อนหน้า เราจะลดน้ำหนักที่มอบให้แบบทวีคูณโดยใช้พารามิเตอร์การปรับให้เรียบที่แตกต่างกัน
ในส่วนต่อไปนี้ เราจะพูดถึง เดี่ยว, สองเท่า และ การปรับให้เรียบแบบเอ็กซ์โพเนนเชียลแบบสามเท่า
การปรับให้เรียบแบบเอกซ์โพเนนเชียลเดี่ยว
ในการปรับให้เรียบประเภทนี้ เราจำเป็นต้องมีค่าที่ปรับให้เรียบ เวลาเป็นศูนย์ และอัตราการลดลง ค่าแรกนี้อาจเป็นค่าเริ่มต้นจริง หรืออาจเป็นค่าเฉลี่ยของสองสามค่าแรกๆ หรือผ่านวิธีอื่นก็ได้ สิ่งหนึ่งที่ต้องจำไว้ก็คือ ค่าของอัตราเอ็กซ์โพเนนเชียลที่น้อยลง ผลกระทบของค่าเริ่มต้นนี้ก็จะยิ่งมีความสำคัญมากขึ้นเท่านั้น
คณิตศาสตร์บางส่วน
นี่คือสิ่งที่ สมการพื้นฐานของการปรับให้เรียบแบบเอ็กซ์โปเนนเชียลดูเหมือนโกหก:
`St = a*yt_1 + (1- a)*St_1`
และอัตราที่น้ำหนักของการสังเกตก่อนหน้านี้ลดลงถูกกำหนดโดย ปัจจัยการปรับให้เรียบ(a)ซึ่งสามารถมีค่า ระหว่าง 1 และ 0
สมมติว่า aคือ .7 ซึ่งหมายความว่าค่า ณ เวลา tจะเท่ากับผลรวมของเปอร์เซ็นต์ของค่าจริง (a*yt_1) และค่าที่เรียบ ( (1- a)*St_1) ที่ t - 1
ตอนนี้ ถ้าเราขยาย St_1 เพิ่มเติม เราจะเห็น
St = a yt-1 + (1 — a) [ayt-2 + (1 — a)St-2]
ถ้าเราขยายมันต่อไป เราจะเห็นแบบนี้ว่า t = 4
a*[(1-a)⁰*y3 + (1-a)¹ *y2] + (1-a)³*S2
โดยที่ S2 คือค่าเริ่มต้นที่เราเริ่มต้นด้วย เราจะสังเกตได้ว่าน้ำหนักของตัวอย่างก่อนหน้านี้ลดลงแบบทวีคูณ (1-a)⁰, (1-a)¹, (1-a)²…..
แบบฟอร์มทั่วไปที่เราได้รับคือ:
ตัวอย่าง
สมมติว่าเรารวบรวมค่าต่อไปนี้ในช่วง 10 วัน
6.4, 5.6, 7.8, 8.8, 11, 11.6, 16.7, 15.3, 21.6, 22.4
ใช้ตัวอย่างการปรับให้เรียบแบบเอกซ์โปเนนเชียลขนาดเล็กของเรา
เราได้รับผลลัพธ์ดังต่อไปนี้
แม้ว่าวิธีนี้จะดีกว่าค่าเฉลี่ยที่เท่ากันมาก แต่เราสังเกตได้ว่าวิธีนี้แย่มากในการทำนายค่าในอนาคตในกรณีที่มีแนวโน้ม ดูว่าหลังจากวันที่ 10 กราฟจะราบเรียบอย่างไร
ตอนนี้เพื่อแก้ไขว่าเราอาจต้องอัปเกรดสมการพื้นฐานของเราเพื่อที่จะคำนึงถึงเดลต้าในค่าก่อนหน้าโดยใช้ เทคนิคการปรับให้เรียบแบบเอ็กซ์โปเนนเชียลสองเท่า
เทคนิคการปรับให้เรียบแบบเอ็กซ์โปเนนเชียลสองเท่า
ในเทคนิคนี้ เราใช้ค่าคงที่ γ อีกค่าหนึ่งพร้อมกับค่าคงที่แฟกเตอร์การปรับให้เรียบ α
เทคนิค Single Exponential Smoothing คืออะไร
St = a*yt_1 + (1 — a)*St_1
ตอนนี้กลายเป็น:
St = a*yt_1 + (1 — a)*(St_1 + bt_1)
โดยที่เราเพิ่มแนวโน้มก่อนหน้า — bt_1 — เข้ากับค่าที่ปรับให้เรียบของเรา
แต่เราจะค้นหาแนวโน้มในช่วงเวลาหนึ่งได้อย่างไร? แน่นอนว่าจะรวมส่วนต่างระหว่างค่าก่อนหน้าเพื่อดูความแตกต่างโดยเฉลี่ยในอดีตด้วย และเราเห็นสิ่งเดียวกันในสมการแนวโน้ม
b_t = γ*(St - St_1)+(1−γ)*bt_1
St — St_1 : ความแตกต่างระหว่างค่าที่ปรับให้เรียบในปัจจุบันและก่อนหน้า
bt_1 : เทรนด์ที่ t-1
ดูเหมือนว่าสิ่งนี้จะทำงานได้ดีกว่าในตัวอย่างสุดท้ายของเรา อย่างไรก็ตาม ก่อนที่เราจะดำเนินการต่อไป เราจำเป็นต้องค้นหาค่าเริ่มต้นของปัจจัยแนวโน้ม b แม้ว่าจะมีวิธีการที่มีประสิทธิภาพมากมายในการค้นหาจุดเริ่มต้นที่ดีที่สุด แต่เราสามารถใช้ผลต่างแรก หรือค่าเฉลี่ยของผลต่างในอดีตได้
ตัวอย่าง
การใช้เทคนิคนี้กับชุดข้อมูลก่อนหน้าของเราโดยใช้โค้ดต่อไปนี้:
เราได้รับผลลัพธ์ที่ดีกว่ามาก:
และค่าคลาดเคลื่อนกำลังสองเฉลี่ยของเราลดลงเหลือ 3.17จาก 8.88ที่เราได้รับจากการปรับให้เรียบแบบเอกซ์โปเนนเชียลเพียงครั้งเดียว
พยากรณ์
จนถึงตอนนี้เราได้มองหาวิธีที่จะทำให้ข้อมูลของเราราบรื่นขึ้นเพื่อให้ตีความได้ง่ายขึ้น แต่ถ้าเราอยากเห็นอนาคตล่ะ?
สำหรับการปรับให้เรียบแบบเอ็กซ์โพเนนเชียลแบบสองเท่า เราสามารถรวมค่าที่ปรับให้เรียบในปัจจุบันและค่าแนวโน้มเพื่อคาดการณ์ค่าถัดไปได้ โดยทั่วไป คุณสามารถค้นหาการพยากรณ์ได้โดยใช้:
การคาดการณ์ ณ เวลา t+M = Smoothed Value ณ เวลา t + M*Trend Factor ณ เวลา t
ในกรณีของ Single Exponential Smoothing การคาดการณ์ในอนาคตจะเป็นเส้นแนวนอนเนื่องจากจะให้การคาดการณ์ครั้งสุดท้ายสำหรับค่าในอนาคตทั้งหมด ดังที่แสดงไว้ก่อนหน้านี้ หมายความว่าไม่ใช่เทคนิคที่ดีเมื่อมีเทรนด์เข้ามาเกี่ยวข้อง
กราฟต่อไปนี้แสดงการเปรียบเทียบการคาดการณ์ในอนาคตสำหรับทั้งสองเทคนิค
ผู้ชนะค่อนข้างชัดเจนที่นี่
วู้ว!!!!
ตอนนี้ความอิ่มเอิบใจในช่วงแรกสิ้นสุดลงแล้ว เราตระหนักได้ว่าการคาดการณ์ของเราจะเพิ่มขึ้นอย่างมาก จะเกิดอะไรขึ้นถ้าเราไม่เพียงแต่มีเทรนด์เท่านั้น แต่ยังรวมถึงฤดูกาลด้วย
ข้อมูลอ้างอิง
Github Repo: https://github.com/Bazarovay/timeseries