วิธีการคำนวณค่าเฉลี่ยเคลื่อนที่ใน python
ค่าเฉลี่ยเคลื่อนที่ เป็นเทคนิคที่สามารถใช้เพื่อทำให้ข้อมูลอนุกรมเวลาราบรื่นขึ้น เพื่อลด “สัญญาณรบกวน” ในข้อมูล และระบุรูปแบบและแนวโน้มได้ง่ายขึ้น
แนวคิดเบื้องหลังค่าเฉลี่ยเคลื่อนที่คือการใช้ค่าเฉลี่ยของช่วงก่อนหน้าจำนวนหนึ่งเพื่อให้ถึง “ค่าเฉลี่ยเคลื่อนที่” ในช่วงเวลาที่กำหนด
บทช่วยสอนนี้จะอธิบายวิธีคำนวณค่าเฉลี่ยเคลื่อนที่ใน Python
ตัวอย่าง: ค่าเฉลี่ยเคลื่อนที่ใน Python
สมมติว่าเรามีตารางต่อไปนี้ซึ่งแสดงยอดขายรวมของบริษัทหนึ่งในช่วง 10 ช่วงระยะเวลา:
x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]
วิธีที่ 1: ใช้ฟังก์ชัน cumsum()
วิธีหนึ่งในการคำนวณค่าเฉลี่ยเคลื่อนที่คือการใช้ฟังก์ชัน cumsum():
import numpy as np #define moving average function def moving_avg(x, n): cumsum = np.cumsum(np.insert(x, 0, 0)) return (cumsum[n:] - cumsum[:-n]) / float(n) #calculate moving average using previous 3 time periods n = 3 moving_avg(x, n): array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])
ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:
- ค่าเฉลี่ยเคลื่อนที่ของช่วงที่สามคือ 47 ซึ่งคำนวณจากค่าเฉลี่ยของสามช่วงแรก: (50+55+36)/3 = 47
- ค่าเฉลี่ยเคลื่อนที่สำหรับช่วงที่สี่คือ 46.67 ซึ่งคำนวณเป็นค่าเฉลี่ยของสามช่วงเวลาก่อนหน้า: (55+36+49)/3 = 46.67
และอื่นๆ
วิธีที่ 2: ใช้หมีแพนด้า
อีกวิธีหนึ่งในการคำนวณค่าเฉลี่ยเคลื่อนที่คือการเขียนฟังก์ชันแบบแพนด้า:
import pandas as pd #define array to use and number of previous periods to use in calculation x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104] n=3 #calculate moving average pd.Series(x).rolling(window=n).mean().iloc[n-1:].values array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])
วิธีการนี้ให้ผลลัพธ์เหมือนกับวิธีก่อนหน้าทุกประการ แต่มีแนวโน้มที่จะทำงานเร็วกว่าในอาร์เรย์ขนาดใหญ่
โปรดทราบว่าคุณยังสามารถระบุช่วงเวลาก่อนหน้าจำนวนเท่าใดก็ได้เพื่อใช้ในการคำนวณค่าเฉลี่ยเคลื่อนที่ ตัวอย่างเช่น คุณอาจต้องการใช้ n=5:
#use 5 previous periods to calculate moving average n=5 #calculate moving average pd.Series(x).rolling(window=n).mean().iloc[n-1:].values array([54.8, 59.8, 69., 79., 85.2, 89.2])
ยิ่งคุณใช้ระยะเวลาในการคำนวณค่าเฉลี่ยเคลื่อนที่มากเท่าไร เส้นค่าเฉลี่ยเคลื่อนที่ก็จะยิ่ง “เรียบขึ้น” มากขึ้นเท่านั้น