Dự đoán xu thế chỉ số chứng khoán với mô hình RNN

21 12 0
Dự đoán xu thế chỉ số chứng khoán với mô hình RNN

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Dự đoán xu thế chỉ số chứng khoán với mô hình RNN Dự đoán xu thế chỉ số chứng khoán với mô hình RNN Dự đoán xu thế chỉ số chứng khoán với mô hình RNN Dự đoán xu thế chỉ số chứng khoán với mô hình RNN Dự đoán xu thế chỉ số chứng khoán với mô hình RNN

ĐẠI HỌC BÁCH KHOA HÀ NỘI Viện Công nghệ thông tin truyền thơng Dự đốn xu số chứng khốn với mơ hình RNN Mơn: Kĩ thuật lập trình Giảng viên hướng dẫn : PGS.TS Huỳnh Quyết Thắng Sinh viên thực hiện: Họ tên Nguyễn Hùng Cường Nguyễn Tuấn Hưng Nguyễn Tiến Tài MSSV 20164820 20164837 20162031 Lớp KSTN_CNTT_K61 KSTN_CNTT_K61 KSTN_CNTT_K61 Mục lục Chương : Các khái niệm 1.1 Chỉ số chứng khoán VN-Index 1.2 Mô hình chuỗi thời gian 1.3 Mô hình RNN 1.4 Mơ hình LSTM RNN 1.4.1 Ý tưởng cốt lõi LSTM 1.4.2 Bên LSTM 10 CHƯƠNG 2: Chạy chỉnh sửa chương trình 13 2.1 Kết chạy thử nghiệm chương trình 13 2.2 Chạy chỉnh sửa code chương trình 14 2.2.1 Mơ tả chương trình 14 2.2.2 Dữ liệu đầu vào chương trình 14 2.2.3 Chương trình số thành phần 14 2.2.4 Kết chạy chương trình 19 2.3.Đánh giá chương trình so sánh với chương trình nhóm làm 20 Page Chương : Các khái niệm 1.1 Chỉ số chứng khốn VN-Index Ở Việt Nam có ba sàn giao dịch sàn HOSE TP Hồ Chí Minh hai sàn HNX, Upcom Hà Nội Chỉ số chứng khoán Việt Nam VN-Index số thể xu hướng biến động giá tất cổ phiếu niêm yết giao dịch sàn HOSE Ở đây, giá số VN-Index hiểu giá đóng cửa số VN-Index sau ngày giao dịch TTCK Việt Nam Đây giá tham chiếu (hay giá mở cửa) cho số VN-Index ngày giao dịch Dưới công thức tính số VN-Index: VN  Index  CMV *100 BMV Trong CMV tổng giá trị thị trường cổ phiếu niêm yết tại, BMV tổng giá trị cổ phiếu niêm yết sở tính thời điểm gốc ngày 28/07/2000, ngày thị trường chứng khốn thức vào hoạt động Giá trị vốn hóa thị trường sở tính cơng thức số điều chỉnh trường hợp niêm yết mới, hủy niêm yết trường hợp có thay đổi vốn niêm yết Gọi M số lượng công ty niêm yết sàn HOSE; pit, qit tương ứng giá số lượng cổ phiếu niêm yết công ty thứ i sàn HOSE thời điểm tại; pio, qio tương ứng giá số lượng cổ phiếu niêm yết công ty thứ i sàn HOSE thời điểm sở Cơng thức tính CMV BMV sau: M CMV   pit * qi t i1 M BMV   pio * qi o i1 Page 1.2 Mơ hình chuỗi thời gian Chuỗi thời gian chuỗi điểm liệu, đo theo khoảnh khắc thời gian liền theo tần suất thời gian thống Một ví dụ cho chuỗi thời gian giá đóng cửa số VN-Index qua ngày giao dịch Gọi Yt chuỗi thời gian đầu vào Chuỗi thời gian phân tích thành bốn thành phần: Thành phần xu (gọi Tt): Xu mang tính chất dài hạn, thể mẫu hình tăng hay giảm giá trị chuỗi thời gian Kỹ thuật để xác định giá trị thành phần xu vị trí k chuỗi thời gian lấy trung bình giá trị điểm liên tiếp chuỗi thời gian xung quanh lân cận điểm cho độ dài khoảng chu kỳ, xem giá trị xu chuỗi thời gian điểm Trong trường hợp chu kỳ lẻ có dạng (2C+1), cơng thức tính giá trị thành phần xu sau: Tk  C *  Yi k 2C  i C Trong công thức k vị trí điểm xét chuỗi thời gian Tk giá trị thành phần xu điểm k Yi+k giá trị chuỗi thời gian đầu vào điểm (i+k) Ví dụ với chu kỳ năm ngày, giá trị thành phần xu điểm k = 10 tính theo cơng thức triển khai sau: Y  Y9  Y10  Y11  Y12 T10  *  Yi k  i 2 Thành phần thời vụ (gọi St): Tính thời vụ thể tuần hoàn liệu chuỗi thời gian khoảng thời gian xác định Thành phần thể ảnh hưởng mùa vụ tuần, tháng, quý, năm lên giá trị chuỗi liệu Thành phần chu kỳ (gọi Ct): Thành phần đặc trưng hệ số biến đổi mùa, thể tăng giảm lặp lại giá trị chuỗi thời gian theo giai đoạn không cố định Khoảng thời gian chu kỳ thường lớn nhiều so với khoảng thời gian mùa vụ chuỗi thời gian Thành phần ngẫu nhiên (gọi Rt): Là thành phần lại sau loại bỏ ba thành phần từ chuỗi thời gian ban đầu Thành phần ngẫu nhiên có tính dừng Tính dừng thể hàm tự tương quan (ACF) điểm với điểm khứ nhỏ, thường nằm Page khoảng  1.96 N với N kích thước chuỗi thời gian Giá trị 1.96 thể khoảng tin cậy 95% phân phối Gauss chuẩn kỳ vọng phương sai Có hai cách để tổng hợp thành phần chuỗi thời gian để thu chuỗi ban đầu Một phương pháp cộng, thực cách lấy tổng thành phần (Yt = Tt + St + Ct + Rt) Hai phương pháp nhân, thực cách lấy tích thành phần (Yt = Tt * St * Ct * Rt) Trên thực tế thư viện hỗ trợ phân tách chuỗi thời gian thường không phân biệt thành phần Tt Ct, gọi chung thành phần xu Trong luận văn tác giả lựa chọn phương pháp cộng thực phân tách chuỗi thời gian đầu vào 1.3 Mơ hình RNN Ý tưởng RNN (Recurrent Neural Network) sử dụng chuỗi thông tin Trong mạng nơ-ron truyền thống tất đầu vào đầu độc lập với Tức chúng không liên kết thành chuỗi với Nhưng mơ hình khơng phù hợp nhiều tốn Ví dụ, muốn đốn từ xuất câu ta cần biết từ trước xuất nhỉ? RNN gọi hồi quy (Recurrent) lẽ chúng thực tác vụ cho tất phần tử chuỗi với đầu phụ thuộc vào phép tính trước Nói cách khác, RNN có khả nhớ thơng tin tính tốn trước Trên lý thuyết, RNN sử dụng thông tin văn dài, nhiên thực tế nhớ vài bước trước (ta bàn cụ thể vấn đề sau) mà Về mạng RNN có dạng sau: Page A recurrent neural network and the unfolding in time of the computation involved in its forward computation Source: Nature Mơ hình mô tả phép triển khai nội dung RNN Triển khai hiểu đơn giản ta vẽ mạng nơ-ron chuỗi Ví dụ ta có câu gồm chữ “Đẹp trai gái theo”, mạng nơ-ron triển khai gồm tầng nơ-ron tương ứng với chữ tầng Lúc việc tính tốn bên RNN thực sau: • xt đầu vào bước t Ví dụ x1 vec-tơ one-hot tương ứng với từ thứ câu (trai) • st trạng thái ẩn bước t Nó nhớ mạng st tính tốn dựa trạng thái ẩn phía trước đầu vào bước đó: st=f(Uxt+Wst−1) Hàm f thường hàm phi tuyến tính hàm tanh, ReLU Để làm phép toán cho phần tử ẩn ta cần khởi tạo thêm s−1, thường giá trị khởi tạo gắn • ot đầu bước t Ví dụ, ta muốn dự đốn từ xuất câu ot vec-tơ xác xuất từ danh sách từ vựng ta : ot=softmax(Vst) • Một điểm bật RNN ý tưởng kết nối thơng tin phía trước để dự đốn cho Việc tương tự ta sử dụng cảnh trước phim để hiểu cảnh thời Nếu mà RNN làm việc chúng hữu dụng, nhiên liệu chúng làm khơng? Câu trả lời cịn tùy • Đôi lúc ta cần xem lại thông tin vừa có thơi đủ để biết tình Ví dụ, ta có câu: “các đám may bầu trời” ta cần đọc tới “các đám may bầu” đủ biết chữ “trời” Trong tình này, khoảng cách tới thơng tin có cần để dự đốn nhỏ, nên RNN hồn tồn học Page Nhưng nhiều tình ta buộc phải sử dụng nhiều ngữ cảnh để suy luận Ví dụ, dự đoán chữ cuối đoạn: “I grew up in France… I speak fluent French.” Rõ ràng thơng tin gần (”I speak fluent”) có phép ta biết đằng sau tên ngơn ngữ đó, cịn khơng thể biết tiếng Muốn biết tiếng gì, ta cần phải có thêm ngữ cảnh “I grew up in France” suy luận Rõ ràng khoảng cách thơng tin lúc xa Thật không may với khoảng cách lớn dần RNN bắt đầu khơng thể nhớ học Tuy nhiên, cám ơn LSTM khơng vấp phải vấn đề Chúng em chọn mơ hình cho tập 1.4 Mơ hình LSTM RNN Mạng nhớ dài-ngắn (Long Short Term Memory networks), thường gọi LSTM - dạng đặc biệt RNN, có khả học phụ thuộc xa LSTM giới thiệu Hochreiter & Schmidhuber (1997), sau cải tiến phổ biến nhiều người ngành Chúng hoạt động hiệu nhiều toán khác nên dần trở nên phổ biến Page LSTM thiết kế để tránh vấn đề phụ thuộc xa (long-term dependency) Việc nhớ thông tin suốt thời gian dài đặc tính mặc định chúng, ta khơng cần phải huấn luyện để nhớ Tức nội ghi nhớ mà khơng cần can thiệp Mọi mạng hồi quy có dạng chuỗi mô-đun lặp lặp lại mạng nơ-ron Với mạng RNN chuẩn, mơ-dun có cấu trúc đơn giản, thường tầng tanhtanh LSTM có kiến trúc dạng chuỗi vậy, mơ-đun có cấu trúc khác với mạng RNN chuẩn Thay có tầng mạng nơ-ron, chúng có tới tầng tương tác với cách đặc biệt Làm quen với kí tự : Ở sơ đồ trên, đường mang véc-tơ từ đầu nút tới đầu vào nút khác Các hình màu hồng biểu diễn phép tốn phép cộng véc-tơ chẳng hạn, cịn ô màu vàng sử dụng để học mạng nơ-ron Các đường hợp kí hiệu việc kết hợp, đường rẽ nhánh ám nội dung chép chuyển tới nơi khác Page 1.4.1 Ý tưởng cốt lõi LSTM Chìa khóa LSTM trạng thái tế bào (cell state) - đường chạy thơng ngang phía sơ đồ hình vẽ Trạng thái tế bào dạng giống băng truyền Nó chạy xuyên suốt tất mắt xích (các nút mạng) tương tác tuyến tính đơi chút Vì mà thơng tin dễ dàng truyền thơng suốt mà khơng sợ bị thay đổi LSTM có khả bỏ thêm vào thông tin cần thiết cho trạng thái tế báo, chúng điều chỉnh cẩn thận nhóm gọi cổng (gate) Các cổng nơi sàng lọc thông tin qua nó, chúng kết hợp tầng mạng sigmoid phép nhân Page Tầng sigmoid cho đầu số khoản [0, 1][0,1], mô tả có thơng tin thơng qua Khi đầu 00 có nghĩa khơng cho thơng tin qua cả, cịn 11 có nghĩa cho tất thơng tin qua Một LSTM gồm có cổng để trì điều hành trạng thái tế bào 1.4.2 Bên LSTM Bước LSTM định xem thông tin cần bỏ từ trạng thái tế bào Quyết định đưa tầng sigmoid - gọi “tầng cổng quên” (forget gate layer) Nó lấy đầu vào ht−1 xt đưa kết số khoảng [0, 1][0,1] cho số trạng thái tế bào Ct−1 Đẩu 11thể giữ tồn thơng tin lại, cịn 00 taonf thông tin bị bỏ Quay trở lại với ví dụ mơ hình ngơn ngữ dự đoán từ dựa tất từ trước đó, với tốn vậy, trạng thái tế bào mang thơng tin giới tính nhân vật giúp ta sử dụng đại từ nhân xưng chuẩn xác Tuy nhiên, đề cập tới người khác ta khơng muốn nhớ tới giới tính nhân vật nữa, khơng cịn tác dụng với chủ Giờ lúc cập nhập trạng thái tế bào cũ Ct−1 thành trạng thái Ct Ở bước trước định việc cần làm, nên ta cần thực xong Page 10 Ta nhân trạng thái cũ với ft để bỏ thông tin ta định quên lúc trước Sau cộng thêm it∗Ct~ Trạng thái mơi thu phụ thuộc vào việc ta định cập nhập giá trị trạng thái Với tồn mơ hình ngơn ngữ, việc ta bỏ thơng tin giới tính nhân vật cũ, thêm thơng tin giới tính nhân vật ta định bước trước Cuối cùng, ta cần định xem ta muốn đầu Giá trị đầu dựa vào trạng thái tế bào, tiếp tục sàng lọc Đầu tiên, ta chạy tầng sigmoid để định phần trạng thái tế bào ta muốn xuất Sau đó, ta đưa trạng thái tế bảo qua hàm để co giá trị khoảng [-1, 1][−1,1], nhân với đầu cổng sigmoid để giá trị đầu ta mong muốn Với ví dụ mơ hình ngơn ngữ, cần xem chủ thể mà ta đưa thơng tin trạng từ sau Ví dụ, đầu chủ thể số số nhiều ta biết dạng trạng từ theo sau phải Page 11 Page 12 CHƯƠNG 2: Chạy chỉnh sửa chương trình Trong tài liệu chúng em nhận gồm có hai chương trình dự đốn số VN-Index Trong chúng em tập chung nghiên cứu mơ hình LSTM với hỗ trợ anh Việt Anh 2.1 Kết chạy thử nghiệm chương trình Chương trình chạy xử dụng mơ hình phân tích chuỗi thời gian time-series với LSTM Page 13 Hình 2.1 epoch=50, rmse = 4.5 2.2 Chạy chỉnh sửa code chương trình 2.2.1 Mơ tả chương trình Trong phần tập lớn chúng em chủ yếu tập trung nghiên cứu mơ hình cải tiến này.Trong chương trình chúng em làm liệu đầu vào đến Ngày 20-5-2018,cùng với chúng em chỉnh sửa vài liệu chương trình để chương trình dự đốn vịng 20 ngày tháng 7-2017 thay dự đốn vào ngày cuối năm 2016 chương trình cũ Đồng thời chúng em sửa lại cách tính sai số để tính xác sai số phương pháp dự đốn Trong chương trình có sử dụng gói thư viện: Mơ Tả Tên Gói Thư Viện Các gói thư viện xử lý tốn học hỗ trợ - Numpy mơ hình LSTM - Scipy Gói thư viện xử lý đồ thị - Pandas - Kereas - Matplotlib 2.2.2 Dữ liệu đầu vào chương trình Dữ liệu đầu vào chương trình chứa file raw_data.csv Dữ liệu đầu vào chúng em làm phù hợp với định dạng yêu cầu Nguồn liệu bọn em lấy từ chỗ anh Việt Anh Chúng em tách liệu thành 2: 0.9 liệu để train, lại dung để test phát triển 2.2.3 Chương trình số thành phần 1.Chuẩn hóa liệu đầu vào: Page 14 def scale(train,test): # fit scaler scaler = MinMaxScaler(feature_range=(-1, 1)) scaler = scaler.fit(train) # transform train train = train.reshape(train.shape[0], train.shape[1]) train_scaled = scaler.transform(train) # transform test test = test.reshape(test.shape[0], test.shape[1]) test_scaled = scaler.transform(test) return scaler, train_scaled, test_scaled Hàm trả giá trị số đóng cửa ngày khảo sát train, nhiên scale lại khoảng -1; Hàm dự báo theo phương pháp LSTM def forecast_lstm(model,batch_size,X): #reshape X to fit keras X = X.reshape(1, 1, len(X)) yhat = model.predict(X, batch_size=batch_size) return yhat[0,0] Hàm trả giá trị dự đốn xu hướng số ngày hơm sau dựa vào liệu học từ mơ hình LSTM Hàm xây dựng mơ hình LSTM def fit_lstm(train,batch_size,nb_epoch, neurons): X,y = train[:,0:-1], train[:,-1] X = X.reshape(X.shape[0],1,X.shape[1 ]) #X=[ [[1,2,3, ]] , [[2,3,4, ]] , [[3,4,5, ]] , ] Page 15 #init model = Sequential() #choose neurons, batch (3dimensions) , stateful model.add(LSTM(neurons, batch_input_shape = (batch_size, X.shape[1], X.shape[2]),stateful= True)) model.add(Dense(1)) ####### set to test ######### model.compile(loss='mean_squared _error', optimizer='adam') ####### set to test ######### for i in range(nb_epoch): #verbose model.fit(X, y, epochs=1, batch_size=batch_size, verbose=0, shuffle=False) model.reset_states() return model Trong hàm chúng em sử dụng thư viện kereas để build LSTM, khơng cần setup bước activation phần trước chúng em trình bày Với tham số: Train : liệu train, Batch_size : độ lớn tâp liệu chi bị chia nhỏ, nb_epoch : số epoch lần train neurons : số lượng hidden_layers Hàm trả model optimized theo phương pháp adam, model kết hợp với đầu vào để đưa giá trị predict Page 16 Đưa kết Với mơ phần chúng em cho mơ hình học đi, học lại “repeats” lần batch_size=1 nb_epoch = neurons = repeats = 20 error_scores = list() for r in range(repeats): ####### set to test ######### lstm_model = fit_lstm(train_scaled, batch_size,nb_epoch, neurons) ####### set to test ######### # forecast the training dataset to build up state for forecasting train_reshaped = train_scaled[:, 0].reshape(len(train_scaled), 1, 1) ####### set to test ######### lstm_model.predict(train_reshaped, batch_size=1) ####### set to test ######### #predict for test data predictions = list() for i in range(len(test_scaled)): # make one-step forecast X, y = test_scaled[i, 0:-1], test_scaled[i, -1] yhat = forecast_lstm(lstm_model, 1, X) Page 17 # yhat= y # invert scaling yhat = invert_scale(scaler, X, yhat) # invert differencing yhat = inverse_difference(datas, yhat, len(test_scaled)+1-i) # store forecast predictions.append(yhat) expected = datas[len(train) + i + 1] # print('Month=%d, Predicted=%f, Expected=%f' % (i+1, yhat, expected)) rmse = math.sqrt(mean_squared_error(datas[test_size:], predictions)) print('%d) Test RMSE: %.3f' % (r+1, rmse)) error_scores.append(rmse) Trong hàm chúng em in độ lệch trung bình giá trị predict giá trị test Page 18 2.2.4 Kết chạy chương trình Page 19 Độ lệch trung bình 4.5 2.3.Đánh giá chương trình so sánh với chương trình nhóm làm Chương trình mơ hình cải tiến đánh giá chạy thử 90% số ngày liệu Tỉ lệ chương trình đạt khoảng 70%.giá trị sai số khoảng 0.8% nghĩa khoảng 4.5 điểm So sánh với nhóm hai chạy liệu cập nhập nhóm em làm sai số nhóm em thấp so với nhóm Sai số trung bình nhóm em 4.5 điểm nhóm 5.5 điểm họ điểm.Về thời gian tính tốn chương trình nhóm em chạy nhanh chương trình nhóm chạy máy tính Và mơ hình sử dụng rộng rãi sàn chứng khoán nước quốc tế Page 20 Trang ... Các khái niệm 1.1 Chỉ số chứng khoán VN-Index 1.2 Mơ hình chuỗi thời gian 1.3 Mơ hình RNN 1.4 Mơ hình LSTM RNN 1.4.1 Ý tưởng cốt... sàn HNX, Upcom Hà Nội Chỉ số chứng khoán Việt Nam VN-Index số thể xu hướng biến động giá tất cổ phiếu niêm yết giao dịch sàn HOSE Ở đây, giá số VN-Index hiểu giá đóng cửa số VN-Index sau ngày... batch_size=batch_size) return yhat[0,0] Hàm trả giá trị dự đoán xu hướng số ngày hôm sau dựa vào liệu học từ mơ hình LSTM Hàm xây dựng mơ hình LSTM def fit_lstm(train,batch_size,nb_epoch, neurons):

Ngày đăng: 13/03/2022, 16:18

Tài liệu cùng người dùng

Tài liệu liên quan