Time Series Forecasting ด้วย Python วิธีเขียนโค้ดเพื่อทำนายข้อมูลอนุกรมเวลาบน Google Colab

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
opj
PHP Hero Member
PHP Hero Member
โพสต์: 195
ลงทะเบียนเมื่อ: 16/12/2024 9:05 am

Time Series Forecasting ด้วย Python วิธีเขียนโค้ดเพื่อทำนายข้อมูลอนุกรมเวลาบน Google Colab

โพสต์ที่ยังไม่ได้อ่าน โดย opj »

การพยากรณ์ข้อมูลอนุกรมเวลา(Time Series Forecasting) เป็น Machine Learning อย่างหนึ่งซึ่งเป็นกระบวนการที่ช่วยให้เราสามารถวิเคราะห์แนวโน้มของข้อมูลในอดีตและใช้เพื่อคาดการณ์ข้อมูลในอนาคตได้ หนึ่งในเทคนิคที่มีประสิทธิภาพในการจัดการข้อมูลอนุกรมเวลาที่ซับซ้อนคือการใช้ Long Short-Term Memory (LSTM) ซึ่งเป็นโครงข่ายประสาทเทียม (Neural Network) ที่ออกแบบมาเพื่อจัดการกับข้อมูลที่มีลำดับ (Sequential Data) โดยเฉพาะ เช่น ข้อมูลอนุกรมเวลา(Time Series Data)
ในบทความนี้ เราจะอธิบายขั้นตอนการใช้ LSTM สำหรับการพยากรณ์ข้อมูลอนุกรมเวลาด้วย Python พร้อมตัวอย่างการเขียนโค้ดอย่างละเอียด

ตัวอย่างข้อมูลที่ใช้
เราจะใช้ชุดข้อมูล Airline Passengers Dataset ซึ่งเป็นข้อมูลจำนวนผู้โดยสารรายเดือนของสายการบิน โดยสามารถดาวน์โหลดได้จาก Airline Passengers Dataset

หลังจากดาวน์โหลดชุดข้อมูลมาแล้วมาเริ่มขั้นตอนแรกกันเลย
  1. การโหลดและดูภาพรวมของข้อมูล

    โค้ด: เลือกทั้งหมด

    import pandas as pd
    import matplotlib.pyplot as plt
    
    # โหลดข้อมูล
    url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
    df = pd.read_csv(url, header=0, index_col=0, parse_dates=True)
    
    # ดูข้อมูลเบื้องต้น
    print(df.head())
    
    # พล็อตข้อมูล
    plt.figure(figsize=(10, 6))
    df.plot()
    plt.title("Monthly Airline Passengers")
    plt.xlabel("Date")
    plt.ylabel("Passengers")
    plt.show()
    ข้อมูลจะถูกแสดงเป็นกราฟเพื่อดูแนวโน้มของจำนวนผู้โดยสารรายเดือน ดังภาพ
    passengers.png
    passengers.png (38.84 KiB) Viewed 1253 times
  2. การเตรียมข้อมูล
    LSTM ต้องการข้อมูลที่อยู่ในรูปแบบของ sequences ดังนั้นเราจึงต้องทำการแปลงข้อมูลและปรับให้เหมาะสมสำหรับการนำไปใช้ในโมเดล
    • การ Normalize ข้อมูล
      เราจะปรับข้อมูลให้อยู่ในช่วง 0 ถึง 1 ด้วย MinMaxScaler

      โค้ด: เลือกทั้งหมด

      import numpy as np
      from sklearn.preprocessing import MinMaxScaler
      
      # Normalize ข้อมูล
      scaler = MinMaxScaler(feature_range=(0, 1))
      scaled_data = scaler.fit_transform(df.values)
    • การสร้าง Sequence Data
      เราจะแบ่งข้อมูลออกเป็น sequences โดยใช้ข้อมูลในอดีต (เช่น 12 เดือน) เพื่อพยากรณ์ค่าในอนาคต

      โค้ด: เลือกทั้งหมด

      # สร้าง sequence data
      def create_sequences(data, seq_length):
          X, y = [], []
          for i in range(len(data) - seq_length):
              X.append(data[i:i+seq_length])
              y.append(data[i+seq_length])
          return np.array(X), np.array(y)
      
      # กำหนดความยาวของ sequence
      seq_length = 12
      
      # แบ่งข้อมูลเป็น train/test
      train_size = int(len(scaled_data) * 0.8)
      train_data, test_data = scaled_data[:train_size], scaled_data[train_size:]
      
      # สร้างชุดข้อมูลสำหรับ train และ test
      X_train, y_train = create_sequences(train_data, seq_length)
      X_test, y_test = create_sequences(test_data, seq_length)
  3. การสร้างและเทรน LSTM Model
    • การสร้างโมเดล
      เราจะสร้างโมเดล LSTM ด้วย TensorFlow/Keras

      โค้ด: เลือกทั้งหมด

      from tensorflow.keras.models import Sequential
      from tensorflow.keras.layers import LSTM, Dense
      
      # สร้างโมเดล LSTM
      model = Sequential([
          LSTM(50, return_sequences=False, input_shape=(seq_length, 1)),
          Dense(1)
      ])
      
      # คอมไพล์โมเดล
      model.compile(optimizer='adam', loss='mean_squared_error')
      
      # ดูสรุปโมเดล
      model.summary()
    • การเทรนโมเดล

      โค้ด: เลือกทั้งหมด

      # เทรนโมเดล
      model.fit(X_train, y_train, epochs=20, batch_size=16, validation_data=(X_test, y_test))
  4. การทำนายผลและการประเมินโมเดล
    หลังจากเทรนโมเดลเสร็จ เราจะทำการทำนายผลสำหรับข้อมูลทดสอบ

    โค้ด: เลือกทั้งหมด

    # ทำนายผล
    from sklearn.metrics import mean_squared_error
    
    predictions = model.predict(X_test)
    predictions = scaler.inverse_transform(predictions)
    
    actual = scaler.inverse_transform(y_test.reshape(-1, 1))
    
    rmse = np.sqrt(mean_squared_error(actual, predictions))
    print(f"RMSE: {rmse}")
    
    ค่า RMSE แสดงถึงความคลาดเคลื่อนระหว่างค่าที่โมเดลพยากรณ์ได้กับค่าจริง โดยค่าที่ต่ำกว่าแสดงถึงความแม่นยำที่สูงขึ้น หากค่า RMSE สูง อาจแสดงว่ามีข้อผิดพลาดในโมเดลหรือข้อมูล เช่น การเลือกจำนวน sequence ที่ไม่เหมาะสม หรือโมเดลอาจต้องการการปรับพารามิเตอร์เพิ่มเติม
สรุป
ในบทความนี้ แสดงตัวอย่างการใช้ LSTM Model สำหรับการพยากรณ์ข้อมูลอนุกรมเวลา โดยเริ่มตั้งแต่การเตรียมข้อมูล การสร้าง sequences การสร้างโมเดล และการทำนายผล LSTM ซึ่งเป็นเครื่องมือที่นิยมใช้สำหรับการพยากรณ์ข้อมูลอนุกรมเวลา โดยเฉพาะเมื่อข้อมูลมีความซับซ้อนและไม่เชิงเส้น อย่างไรก็ตาม การเลือกค่าพารามิเตอร์ (เช่น ความยาวของ sequence และจำนวน layer) อาจต้องทดลองหลายครั้งเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
คุณสามารถนำไปประยุกต์ให้เข้ากับงานของคุณได้ เช่น การใช้งานด้านการแปลภาษา หรือการสร้างโมเดลสำหรับแก้ปัญหาต่าง ๆ

อ้างอิง
https://matthewmacfarquhar.medium.com/predicting-airline-passengers-using-lstm-and-tensorflow-ab86347cf318
https://medium.com/@sinart.t/long-short-term-memory-lstm-e6cb23b494c6
https://www.kaggle.com/code/tanyildizderya/airline-passenger-lstm
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 9