Dự báo chuỗi thời gian đa biến python lstm

Dự báo chuỗi thời gian được coi là con ngựa đen trong lĩnh vực khoa học dữ liệu. Đây là yếu tố quan trọng nhất quyết định liệu những thay đổi trong một yếu tố sẽ gây ra sự tăng hay giảm trong môi trường hệ thống. Dự báo chuỗi thời gian đa biến là một vấn đề học máy quan trọng trong đó dữ liệu liên quan đến sự kết hợp của mẫu dài hạn và ngắn hạn, có thể ghi và loại bỏ có chọn lọc thông tin liên quan khỏi dữ liệu. Các phương pháp truyền thống có thể thất bại trong quá trình này do thời gian trễ và biến mất độ dốc. Trong nghiên cứu này, chúng tôi đã áp dụng mô hình Mạng nơ-ron-LSTM để chuyển đổi dữ liệu chuỗi thời gian Đa biến thành định dạng ngày giờ và sử dụng hai lớp LSTM để phân tích tuần tự dữ liệu đa chiều. Chúng tôi đã xác thực mạng thần kinh của mình bằng cách sử dụng dữ liệu lịch sử giá cổ phiếu đa thuộc tính để dự đoán. Chúng tôi đã sử dụng thư viện học sâu Keras và TensorFlow trong môi trường Python và chạy dữ liệu của mình thông qua mô hình LSTM để dự đoán giá mở cửa của 90 ngày tới trong tương lai

Dự báo chuỗi thời gian đóng một vai trò quan trọng trong việc đưa ra quyết định trong hầu hết các ngành. Ví dụ: dự báo số lượng công-te-nơ cần mua cho một công ty vận chuyển có thể tiết kiệm hàng triệu USD cho doanh nghiệp. Tương tự như vậy, dự báo nhu cầu đối với một loại sản phẩm cụ thể đóng một vai trò rất quan trọng trong việc định giá và do đó mang lại lợi nhuận cho một công ty thương mại điện tử

Trong hầu hết các trường hợp, doanh nghiệp hoặc nhóm vận hành là những người biết các yếu tố ảnh hưởng đến cung hoặc cầu. Việc chỉ đưa ra dự báo dựa trên các mẫu lịch sử có thể không phải lúc nào cũng mang lại kết quả mong muốn hoặc có thể không tính đến triển vọng trong tương lai. Có nhiều khả năng những sai lầm trong quá khứ có thể được lặp lại trong các dự báo trong tương lai. Luôn luôn tốt khi xem xét các yếu tố có hiệu lực và cung cấp cho nhóm khả năng chơi xung quanh và hiểu tác động của chúng đối với các dự đoán

Đây là lúc dự báo chuỗi thời gian đa biến xuất hiện. Hãy cho chúng tôi hiểu dự báo đa biến bằng cách sử dụng các hình ảnh bên dưới

Hình 1. Dự báo chuỗi thời gian đa biến với dữ liệu độ trễ [độ trễ=5 bước]

Hình 1 mô tả dự báo chuỗi thời gian đa biến của biến phụ thuộc Y tại thời điểm t với độ trễ=5. Ô màu đỏ là giá trị được dự báo tại thời điểm t, giá trị này phụ thuộc vào giá trị trong các ô màu vàng [t-5 đến t]. Đây là những biến độc lập ảnh hưởng đến dự đoán của Y tại t

Chúng ta có thể coi chuỗi thời gian đa biến là bài toán hồi quy với các biến độc lập là đặc điểm của độ trễ trước đó [đến t-1] cùng với các giá trị độc lập của thời gian t. Với phương pháp này, có nhiều quyền kiểm soát dự báo hơn là chỉ các dấu thời gian trước đó

Dưới đây là chuỗi thời gian Đa biến cũng xem xét các giá trị khách hàng tiềm năng

Hình 2. Chuỗi thời gian đa biến với các tính năng chính và trễ

Từ hình trên, chúng ta có thể thấy rằng, cùng với các tính năng trễ, các bước thời gian lead=2 [t+2] cũng được xem xét để đưa ra dự báo. Điều này cho phép chúng tôi kiểm soát nhiều hơn các yếu tố ảnh hưởng đến dự báo. Trong nhiều trường hợp, chúng tôi biết rằng một số yếu tố trong tương lai cũng ảnh hưởng đến dự đoán thời gian hiện tại của chúng tôi. Với những cách tiếp cận này, nhóm ra quyết định thực sự có thể mô phỏng dự báo dựa trên các giá trị đầu vào khác nhau của các tính năng độc lập

Triển khai mô hình Dự báo bằng LSTM

Bây giờ chúng ta hãy xem cách triển khai chuỗi thời gian đa biến với cả tính năng dẫn đầu và độ trễ

  1. Chuẩn bị dữ liệu sẵn sàng với các yếu tố dẫn đầu và tụt hậu

Sự khác biệt chính giữa việc sử dụng LSTM cho tác vụ hồi quy đối với chuỗi thời gian là, trong dữ liệu dấu thời gian dẫn đầu và độ trễ của chuỗi thời gian cần được xem xét. Hãy xác định một chức năng chỉ có thể thực hiện điều này dựa trên thông số đầu và độ trễ làm tham số

# convert series to supervised learning
def series_to_supervised[data, n_lag=1, n_lead=1, dropnan=True]:
n_vars = 1 if type[data] is list else data.shape[1]
df = DataFrame[data]
cols, names = list[], list[]
# input sequence [t-n, … t-1]
for i in range[n_lag, 0, -1]:
cols.append[df.shift[i]]
names += [[‘var%d[t-%d]’ % [j+1, i]] for j in range[n_vars]]
# forecast sequence [t, t+1, … t+n]
for i in range[0, n_lead]:
cols.append[df.shift[-i]]
if i == 0:
names += [[‘var%d[t]’ % [j+1]] for j in range[n_vars]]
else:
names += [[‘var%d[t+%d]’ % [j+1, i]] for j in range[n_vars]]
# put it all together
agg = concat[cols, axis=1]
agg.columns = names
# drop rows with NaN values
if dropnan:
agg.dropna[inplace=True]
return agg

Các chức năng trên chuyển đổi dữ liệu thành chuỗi thời gian với các bước n_lag và n_lead tùy chỉnh. Đầu ra của hàm này chứa dữ liệu về độ trễ và các bước dẫn đầu dưới dạng các cột có dấu thời gian [t-n] hoặc [tn]

reframed = series_to_supervised[values, n_lag, [n_lead+1]]#removing the future [t+n] dependent variable [Y]if n_lead>0:
reframed= reframed.drop[reframed.iloc[:,[i for i in range[df_no.shape[1]*[n_lag+1],reframed.shape[1],df_no.shape[1]]]],axis=1]

Đoạn mã trên giúp loại bỏ tương lai Y [tại t+n] trong khi đào tạo các mô hình. Khi chúng tôi loại bỏ Y trong tương lai và chúng tôi có dữ liệu được điều chỉnh lại, nó đơn giản như đào tạo LSTM cho một vấn đề hồi quy

# splitting reframed to X and Y considering the first column to be out target featureX=reframed.drop[['var1[t]'],axis=1]
Y=reframed['var1[t]']
X_values=X.values
Y_values=Y.values
#n_preduct being the test lengthtrain_X,train_Y = X_values[:[X_values.shape[0]-n_predict],:],Y_values[:[X_values.shape[0]-n_predict]]
test_X,test_Y = X_values[[X_values.shape[0]-n_predict]:,:],Y_values[[X_values.shape[0]-n_predict]:]
#reshaping train and test to feed to LSTM
train_X = train_X.reshape[[train_X.shape[0], 1, train_X.shape[1]]]
test_X = test_X.reshape[[test_X.shape[0], 1, test_X.shape[1]]]

Tạo một mô hình LSTM đơn giản

opt = Adam[lr=0.001, beta_1=0.9, beta_2=0.999, decay=0.01]
model = Sequential[]
model.add[LSTM[100,return_sequences=True, input_shape=[train_X.shape[1], train_X.shape[2]]]]
model.add[Dropout[0.25]]
model.add[LSTM[units=50,return_sequences=True]]
model.add[Dropout[0.20]]
model.add[LSTM[units=10,return_sequences=False]]
model.add[Dense[units=1, activation='linear']]
model.compile[loss='mae', optimizer=opt]

Khi mô hình đã sẵn sàng, chúng ta có thể huấn luyện mô hình trên dữ liệu huấn luyện và kiểm tra mô hình đó trong bài kiểm tra. Mã bên dưới hiển thị một số điểm kiểm tra đào tạo có thể được sử dụng để giúp đào tạo một mô hình tốt

#adding few model check points
es = EarlyStopping[monitor='val_loss', min_delta=1e-10, patience=10, verbose=1]
rlr = ReduceLROnPlateau[monitor='val_loss', factor=0.01, patience=10, verbose=1]
mcp = ModelCheckpoint[filepath="/test.h5", monitor='val_loss', verbose=1, save_best_only=True, save_weights_only=False]
tb = TensorBoard['logs']
history = model.fit[train_X, train_Y, epochs=50, batch_size=10,callbacks=[mcp,rlr],validation_data=[test_X, test_Y], verbose=2, shuffle=False]

Sau khi mô hình được đào tạo, chúng tôi có thể nhận dự đoán cho dữ liệu thử nghiệm của mình

yhat = model.predict[test_X]

Tóm lược

Trong bài viết này, chúng ta đã biết chuỗi thời gian đa biến là gì và cách sử dụng cả dữ liệu dẫn đầu và độ trễ để đưa ra dự đoán. Một số điểm cần lưu ý khi sử dụng phương pháp này là

LSTM có thể được sử dụng để dự báo đa biến không?

Như thường được biết, LSTM [Mạng bộ nhớ ngắn hạn dài] rất phù hợp để xử lý dữ liệu tuần tự. Một ví dụ như vậy là dữ liệu chuỗi thời gian đa biến. Tại đây, LSTM có thể lập mô hình phân phối có điều kiện cho các vấn đề dự báo phức tạp .

LSTM đơn biến hay đa biến?

Trong cách tiếp cận đầu tiên, giá đóng cửa của hai công ty được chọn được áp dụng trực tiếp trên mô hình LSTM đơn biến. Đối với cách tiếp cận thứ hai, các giá trị của chỉ báo kỹ thuật được tính từ giá đóng cửa và sau đó được áp dụng chung cho Mô hình LSTM đa biến . Hành vi thị trường ngắn hạn cho những ngày sắp tới được đánh giá.

LSTM có tốt cho dự báo chuỗi thời gian không?

Khi sử dụng LSTM, các mô hình dự báo chuỗi thời gian có thể dự đoán các giá trị trong tương lai dựa trên dữ liệu tuần tự trước đó . Điều này cung cấp độ chính xác cao hơn cho các nhà dự báo nhu cầu, dẫn đến việc ra quyết định tốt hơn cho doanh nghiệp.

LSTM đa biến hoạt động như thế nào?

Mạng này bao gồm một lớp đầu vào để chấp nhận chuỗi dữ liệu, một lớp LSTM [triển khai lớp nhiều-một] để xử lý chuỗi và một lớp dày đặc có chức năng kích hoạt ReLU để dự đoán giá trị tiếp theo của tính năng đích

Chủ Đề