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

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

การกำหนดค่าและข้อจำกัด

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

หลังจากกำหนดพารามิเตอร์และข้อจำกัดที่จำเป็นทั้งหมดแล้ว ในบทความนี้ เราจะดูที่ Simple Moving Average (SMA), Weighted Moving Average (WMA) และ Exponential Moving Average (EMA)

ค่าเฉลี่ยเคลื่อนที่อย่างง่าย (SMA)

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

ที่ไหน:

  • n คือจำนวนงวดที่ใช้ในการคำนวณค่าเฉลี่ย
  • Σ แสดงถึงผลรวมของข้อมูลที่ป้อน x_i ตามจำนวนงวดที่ระบุ
  • x คืออินพุตของข้อมูลในช่วงเวลา i

ตอนนี้ เรามาดูการใช้งาน SMA ในภาษาการเขียนโปรแกรม Python กันสั้นๆ กัน

def SMA(J, n):
    T = len(J)
    J_avg = [0] * n
    SMA = []
    
    for t in range(1, T):
        J_avg.pop(0)
        J_avg.append(J[t])
        SMA.append(sum(J_avg) / n)
    
    return SMA

# Example usage
J = [100, 105, 103, 110, 115, ...]
n = 11
SMA_values = SMA(J, n)

ค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนัก (WMA)

Weighted Moving Average (WMA) เป็นเครื่องมือวิเคราะห์ทางเทคนิคที่ใช้กันทั่วไป ซึ่งจะคำนวณราคาเฉลี่ยของตราสารทางการเงินในช่วงเวลาที่กำหนดในอดีต WMA กำหนดน้ำหนักให้กับจุดราคาแต่ละจุดในการคำนวณ โดยราคาล่าสุดจะให้น้ำหนักมากที่สุด มักใช้เพื่อระบุแนวโน้มและสร้างสัญญาณซื้อหรือขาย คล้ายกับ Simple Moving Average (SMA) และ Exponential Moving Average (EMA) สูตรการคำนวณ WMA ถูกกำหนดเป็น:

ที่ไหน:

  • w1 ที่จะ wn คือน้ำหนักที่กำหนดให้กับจุดข้อมูล n จุดในหน้าต่าง โดยปกติแล้ว น้ำหนักจะถูกเลือกเพื่อให้จุดข้อมูลล่าสุดมีน้ำหนักที่สูงกว่า
  • x คืออินพุตของข้อมูลในช่วงเวลา i

หลังจากกำหนดสูตรสำหรับการคำนวณ WMA แล้ว ตอนนี้เราสามารถเจาะลึกถึงการนำ WMA ไปใช้ในภาษาการเขียนโปรแกรม Python ได้แล้ว

T = 50
J = [100, 105, 103, 110, 115, ...]
n = 11
w = [1, 2, 3, 4, 5, ..., 11]
sum_weights = sum(w)
values = list()

for t in range(1, T):
    WMA = 0
    for i in range(n):
        WMA += J[t-i] * w[i]
    WMA /= sum_weights
    values.append(WMA)

ค่าเฉลี่ยเคลื่อนที่แบบเอ็กซ์โปเนนเชียล (EMA)

Exponential Moving Average (EMA) เป็นค่าเฉลี่ยเคลื่อนที่ประเภทหนึ่งที่ให้น้ำหนักกับจุดข้อมูลล่าสุดมากกว่า และให้น้ำหนักน้อยลงกับจุดข้อมูลเก่า การคำนวณ EMA ขึ้นอยู่กับการสลายแบบเอ็กซ์โปเนนเชียลของน้ำหนักที่กำหนดให้กับจุดข้อมูล โดยจุดข้อมูลล่าสุดจะมีน้ำหนักสูงสุด สูตรทางคณิตศาสตร์สำหรับ EMA คือ:

ที่ไหน:

  • t คือจุดเวลา
  • Xt คือจุดข้อมูลปัจจุบัน
  • อัลฟา (α) คือปัจจัยการปรับให้เรียบ (ค่าระหว่าง 0 ถึง 1)
  • EMA(t-1) คือค่าก่อนหน้าของ EMA,
  • และ EMA(t) คือมูลค่าปัจจุบันที่กำลังคำนวณ

ปัจจัยการปรับให้เรียบจะกำหนดน้ำหนักที่กำหนดให้กับจุดข้อมูลปัจจุบันในการคำนวณ EMA ค่าอัลฟาที่มากกว่าจะให้น้ำหนักแก่จุดข้อมูลปัจจุบันมากขึ้น และค่าอัลฟ่าที่น้อยกว่าจะให้น้ำหนักกับค่าก่อนหน้าของ EMA มากขึ้น โดยทั่วไปค่าของ α จะถูกตั้งค่าไว้ระหว่าง 0.8 ถึง 0.98 โดยจะใช้ค่าที่มากกว่าเพื่อให้ได้ผลลัพธ์ที่ตอบสนองมากขึ้น และใช้ค่าที่น้อยกว่าเพื่อให้มีความเรียบเนียนมากขึ้น EMA มีข้อดีหลายประการเหนือค่าเฉลี่ยเคลื่อนที่แบบธรรมดา (SMA) และค่าเฉลี่ยเคลื่อนที่แบบถ่วงน้ำหนัก (WMA) EMA ตอบสนองต่อการเปลี่ยนแปลงข้อมูลได้เร็วกว่าและได้รับผลกระทบจากความล่าช้าและความอ่อนไหวต่อค่าผิดปกติที่มีอยู่ใน SMA และ WMA น้อยลง อย่างไรก็ตาม การคำนวณ EMA นั้นซับซ้อนกว่า SMA และ WMA และการเลือกปัจจัยการปรับให้เรียบอาจมีผลกระทบอย่างมีนัยสำคัญต่อผลลัพธ์ที่ได้รับ หลังจากทฤษฎีที่จำเป็นทั้งหมดแล้ว เราจะมาดูการนำ EMA ไปใช้ในภาษาการเขียนโปรแกรม Python

def exponential_moving_average(values, alpha):
    ema = [values[0]]
    for i in range(1, len(values)):
        ema.append(alpha * values[i] + (1 - alpha) * ema[i-1])
    return ema

ค่าเฉลี่ยเคลื่อนที่และอัลกอริธึมการปรับให้เหมาะสมในการเรียนรู้ของเครื่อง

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

ความท้าทายประการหนึ่งในการเพิ่มประสิทธิภาพคือการค้นหาอัตราการเรียนรู้ที่เหมาะสม ซึ่งจะกำหนดขนาดของขั้นตอนที่ดำเนินการในการวนซ้ำแต่ละครั้ง วิธีแก้ปัญหาทั่วไปสำหรับความท้าทายนี้คือการใช้ค่าเฉลี่ยเคลื่อนที่เพื่อกำหนดเวลาอัตราการเรียนรู้

วิธีค่าเฉลี่ยเคลื่อนที่เกี่ยวข้องกับการคำนวณค่าเฉลี่ยเคลื่อนที่แบบถ่วงน้ำหนักแบบเอ็กซ์โปเนนเชียลของฟังก์ชันวัตถุประสงค์ในช่วงเวลาหนึ่ง ให้ J(t) เป็นฟังก์ชันวัตถุประสงค์ ณ เวลาวนซ้ำ t และให้ J_avg(t) เป็นค่าเฉลี่ยเคลื่อนที่ ณ เวลาวนซ้ำ t ค่าเฉลี่ยเคลื่อนที่ได้รับการอัปเดตในแต่ละรอบโดยใช้สมการต่อไปนี้:

J_avg(t+1) = beta * J_avg(t) + (1 - beta) * J(t+1)

ที่ไหน:

  • เบต้าเป็นพารามิเตอร์ที่กำหนดน้ำหนักที่กำหนดให้กับค่าเฉลี่ยก่อนหน้า หากเบต้าเข้าใกล้ 1 ค่าเฉลี่ยเคลื่อนที่จะเปลี่ยนแปลงช้ามาก ทำให้มีน้ำหนักกับอดีตมากขึ้น หากค่าเบต้าใกล้กับ 0 ค่าเฉลี่ยเคลื่อนที่จะเปลี่ยนแปลงอย่างรวดเร็ว ทำให้ให้น้ำหนักกับการวนซ้ำในปัจจุบันมากขึ้น การเลือกเบต้าจะส่งผลต่อพฤติกรรมของค่าเฉลี่ยเคลื่อนที่และกระบวนการปรับให้เหมาะสม

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

learning_rate = alpha / sqrt(J_avg(t))

ที่ไหน:

  • อัลฟ่าเป็นปัจจัยคงที่ที่กำหนดอัตราการเรียนรู้เริ่มต้น

หลังจากกำหนดพารามิเตอร์ที่จำเป็นทั้งหมดแล้ว เราก็พร้อมที่จะใช้ตัวอย่างของอัลกอริธึมค่าเฉลี่ยเคลื่อนที่ในภาษาการเขียนโปรแกรม Python

import numpy as np

def moving_average_schedule(x_0, gradient, J, T, alpha, beta):
    J_avg = J(x_0)
    x = x_0
    for t in range(T):
        learning_rate = alpha / np.sqrt(J_avg)
        x = x - learning_rate * gradient(x)
        J_avg = beta * J_avg + (1 - beta) * J(x)
    return x

ในตัวอย่างนี้ x_0 คือพารามิเตอร์การหาค่าเหมาะที่สุดเริ่มต้น การไล่ระดับสี(x) คือฟังก์ชันที่ส่งคืนการไล่ระดับสีของฟังก์ชันวัตถุประสงค์ที่ x, J(x) เป็นฟังก์ชันที่ส่งคืนค่าของฟังก์ชันวัตถุประสงค์ที่ x, T คือจำนวนการวนซ้ำ alpha เป็นปัจจัยคงที่ที่กำหนดค่าเริ่มต้น >อัตราการเรียนรู้ และ เบต้า คือพารามิเตอร์ค่าเฉลี่ยเคลื่อนที่ ผลลัพธ์สุดท้าย x คือพารามิเตอร์ที่ปรับให้เหมาะสมหลังจากการวนซ้ำ T

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

หากคุณชอบบทความนี้อย่าลืมติดตามฉันเพื่อรับบทความใหม่ของฉัน

เนื้อหาเพิ่มเติมได้ที่ PlainEnglish.io ลงทะเบียนเพื่อรับ จดหมายข่าวรายสัปดาห์ฟรี ของเรา ติดตามเราบน Twitter, LinkedIn, YouTube และ Discord .

สนใจที่จะขยายขนาดการเริ่มต้นซอฟต์แวร์ของคุณหรือไม่ ลองดูที่ วงจร