วิธีการคำนวณค่าเฉลี่ยเคลื่อนที่ใน 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])

ยิ่งคุณใช้ระยะเวลาในการคำนวณค่าเฉลี่ยเคลื่อนที่มากเท่าไร เส้นค่าเฉลี่ยเคลื่อนที่ก็จะยิ่ง “เรียบขึ้น” มากขึ้นเท่านั้น

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *