Ta tổ chức dữ liệu thành một frame, với các cột là các giá trị như bảng trên. Điều này sẽ rất thuận tiện cho việc cung cấp dữ liệu cho mơ hình: đầu ra là cột đầu tiên và đầu vào là các cột cịn lại (trừ cột cuối cùng là thời gian ghi số liệu “Date”). Cụ thể, trong bài tốn của mình, chúng tơi tổ chức dữ liệu là các tỉ lệ giá đĩng cửa của 10 ngày trước thời điểm t. Dữ liệu này khi đưa vào mơ hình mạng nơ-ron sẽ dự báo tỉ lệ giá đĩng cửa phụ thuộc vào 10 ngày trước đĩ. Cụ thể dữ liệu được tổ chức như sau:
r1.f1 r1.t0 r1.t1 r1.t2 r1.t3 r1.t4 r1.t5 r1.t6 r1.t7 r1.t8 r1.t9 Date Ở đây, giá trị là tỉ lệ giá đĩng của tại thời điểm t tương ứng trong cột , các giá trị r1.t0, r1.t1,...., r1.t9 là các tỉ lệ giá đĩng cửa của 10 ngày trước thời điểm t. Dữ liệu này khi đưa vào mơ hình mạng sẽ dự báo tỉ lệ giá đĩng cửa phụ thuộc vào 10 ngày trước đĩ.
3.4 Tổ chức dữ liệu
Sau khi chuẩn hố dữ liệu, chúng ta chia dữ liệu thành hai tập: tập huấn luyện (train set) và tập kiểm tra (test dataset).
Tập huấn luyện là tập lớn nhất được sử dụng bởi mơ hình để học các mẫu trong tập dữ liệu. Tập huấn luyện chiếm khoảng 70% dữ liệu.
Tập kiểm tra cĩ kích cỡ chiếm khoảng 30% của tập dữ liệu, nĩ được dùng để ước lượng khả năng khái quát hố của một mạng theo giả thiết được huấn luyện.
3.5 Huấn luyện mạng
Huấn luyện mạng nơ-ron cĩ nghĩa là học các mẫu từ dữ liệu. Quá trình huấn luyện được thực hiện bằng cách đầu vào là một phần của chuỗi thời gian được gọi là cửa sổ, phần đầu ra là các giá trị dự đốn. Bằng cách di chuyển các cửa sổ trên chuỗi thời gian của tập huấn luyện cho đến khi kết thúc tập huấn luyện ta sẽ thu được mơ hình đã được huấn luyện [2].
Hình 3.2 Tạo tập huấn luyện trong mạng nơ-ron
Trong hình vẽ trên ta sử dụng thuật tốn cửa sổ trượt để xây dựng tập huấn luyện.
Thuật tốn cửa sổ trượt (Sliding window) như sau:
1. Cho chuỗi Rh(1),Rh(2),. . . ,Rh(n), thời gian t và kích thước
cửa sổ w
2. Xây dựng mơ hình với tập dữ liệu huấn luyện Rh(t−w−1),...
,Rh(t−1)
3. LẶP
a. Dự đốn giá trị cho Rh(t)
b. Ghi lại tỉ lệ lỗi dự đốn
c. Thêm Rh(t) vào tập huấn luyện và xĩa Rh(t−w−1) ra khỏi tập
huấn luyện
d. Xây dựng mơ hình mới với tập huấn luyện mới
e. Đặt t = t + 1
4. ĐẾN KHI t = n
Mục tiêu của huấn luyện là tìm ra được tập trọng số liên kết giữa các nơ-ron sao cho hàm lỗi (hàm giá) là nhỏ nhất. Nếu một mơ hình khơng rơi vào trạng thái overfiting thì tập trọng số liên kết cĩ thể cung cấp khả năng tổng quát hĩa tốt. Thuật tốn lan truyền ngược sai số như đã giới thiệu ở chương 2 là thuật tốn phổ biến và hiệu quả nhất để huấn luyện mạng. Tuy nhiên, thuật tốn này cũng khơng đảm bảo cĩ được một cực tiểu tồn cục, thuật tốn cĩ thể bị mặc kẹt vào một cực tiểu địa phương nào đĩ[16].
Trong khuơn khổ của luận văn, tác giả đã sử dụng giải thuật gen di truyền (GA)
kết hợp với mơ hình mạng nơ-ron để tối ưu hĩa tốc độ học (decay) của mơ hình và sử
dụng giải thuật GA kết hợp với mơ hình máy vector hỗ trợ để tối ưu hĩa hai tham số
3.6 Đánh giá mơ hình và dự báo kết quả
Ước lượng độ chính xác của mơ hình là quan trọng ở chỗ nĩ cho phép dự đốn được độ chính xác của các kết quả dự báo những dữ liệu tương lai. Độ chính xác cịn giúp so sánh các mơ hình phân lớp khác nhau.
Mục đích chính của bất kì việc đánh giá nào là chỉ ra độ chính xác của mơ hình dự đốn đạt được một giá trị đáng tin cậy nào đĩ. Nếu như sự đánh giá của chúng ta đáng tin cậy, chúng ta hồn tồn cĩ thể tin tưởng rằng giá trị dự đốn sẽ khơng lệch nhiều so với kết quả thực tế khi ta đưa dữ liệu mới vào mơ hình.
Trong thiết lập thời gian khởi tạo, t là thời gian bắt đầu giai đoạn thử nghiệm. Dữ liệu với thời gian trước t dùng để huấn luyện mơ hình dự đốn, cịn dữ liệu cĩ được sau thời điểm t sẽ được sử dụng để kiểm tra mơ hình đĩ.
Khi cĩ quyết định thiết lập thử nghiệm, ta vẫn phải chọn cơng thức tỷ lệ lỗi mà ta sẽ sử dụng để đánh giá mơ hình. Đồng thời, chúng ta cũng phải đề cập đến những cơng
thức tỷ lệ lỗi tương quan như bình phương lỗi nhỏ nhất (normalized mean squared
error), cung cấp chỉ số lỗi tương quan của mơ hình. Trong kĩ thuật phân tích thời gian
thực phổ biến dùng hệ số Theil U để giải quyết vấn đề trên. Hệ số thống kê này về cơ bản là giá trị trung bình bình phương lỗi đã được điều chỉnh cho phù hợp với vấn đề thời gian thực. Theo đĩ, ta sẽ sử dụng mơ hình đơn giản dưới đây để đơn giản hĩa quá trình dự đốn[9]:
Trong bài tốn dự báo tài chính, điều này tương đương với việc dự đốn rằng giá trị dự đốn tại thời điểm t+h và giá trị được quan sát ngày hơm nay (tại thời điểm t) là như nhau. Theo đĩ, hệ số Theil U được định nghĩa như sau:
Với là dự đốn của mơ hình tại thời điểm , là giá trị đúng tại thời điểm t + h, là giá trị đúng tại thời điểm t. Mục đích của chúng ta là làm sao cho giá trị U càng nhỏ hơn 1 càng tốt.
Các dự đốn của chuỗi thời gian sử dụng mạng nơ-ron bao gồm giảng dạy net lịch sử của các biến trong một thời gian hạn chế lựa chọn và áp dụng các thơng tin dạy cho tương lai.
Hình 3.3 Quá trình dự đốn trong mơ hình mạng nơ-ron
Quá trình dự đốn trong mơ hình mạng nơ-ron được thể hiện rất rõ trong hình 3.3. Dữ liệu từ quá khứ được cung cấp cho các đầu vào của mạng nơ-ron trong chuỗi thời gian thực với cửa sổ thời gian xác định trước. Đầu ra của mạng nơ-ron chính là giá trị dự đốn của mơ hình[15].
3.7 Kết luận
Như vậy trong chương 3 của luận văn đã trình bày được phương pháp giải quyết bài tốn. Việc giới thiệu bài tốn và các bước thực hiện từ thu thập dữ liệu, tiền xử lý dữ liệu, tổ chức dữ liệu, huấn luyện mạng đến việc đánh giá và dự báo kết quả giúp cho người đọc cĩ một cái nhìn cụ thể về cách thức cũng như các bước để giải quyết bài tốn.
Chương 4. THỰC NGHIỆM VÀ ĐÁNH GIÁ 4.1 Mơi trường thực nghiệm
Mơ hình được cài đặt bằng ngơn ngữ R với bộ cơng cụ hỗ trợ RStudio 2.1.12. Cơng cụ RStudio 2.1.12 hỗ trợ cho quá trình phân tích thống kê và vẽ đồ thị [8].
RStudio là một bộ cơng cụ tích hợp được thiết kế để giúp chúng ta làm việc hiệu quả hơn với R. Nĩ bao gồm một giao diện điều khiển, chỉnh sửa cú pháp, điểm nổi bật nhất của Rstudio là quá trình hỗ trợ thực thi mã lệnh trực tiếp cũng như các cơng cụ để vẽ, lịch sử, gỡ lỗi và quản lý khơng gian làm việc[18].
RStudio cho phép cài đặt, xây dựng chương trình bằng ngơn ngữ R – một ngơn ngữ đa năng, cĩ thể sử dụng cho nhiều mục tiêu khác nhau, từ tính tốn đơn giản, tính tốn ma trận đến các phân tích thống kê phức tạp. Ngơn ngữ R được sáng lập bởi hai nhà thống kê học tên là Ross Ihaka và Robert Gentleman năm 1996. Kể từ khi R ra đời, rất nhiều nhà nghiên cứu thống kê và tốn học trên thế giới ủng hộ và tham gia vào việc phát triển R như một phần mềm mã nguồn mở. Cho đến nay, càng ngày càng cĩ nhiều nhà phân tích thống kê, tốn học, nghiên cứu trong mọi lĩnh vực đều chuyển sang sử dụng R để phân tích dữ liệu khoa học[14][17].
RStudio cĩ thể được download miễn phí theo link sau: http://www.rstudio.com/products/rstudio/download/
Cơng cụ RStudio hỗ trợ nhiều gĩi (package), đĩ là một phần mềm nhỏ được các nhà thống kê phát triển để giải quyết những vấn đề cụ thể, cĩ thể chạy bởi cơng cụ RStudio. Các gĩi hỗ trợ này cĩ thể được download theo link sau:
http://cran.r-project.org/web/packages/ 4.2Dữ liệu dùng trong thực nghiệm
Để thực hiện quá trình tính tốn và phân tích dữ liệu thời gian thực, trong R hỗ
trợ gĩi (packages) tseries. Gĩi tseries cung cấp một số hàm cơ bản để đọc dữ liệu thời gian thực. Ở đây, chúng tơi sử dụng hàm get.hist.quote để lấy dữ liệu trực tiếp từ trên
website của cơng ty.
ibm<-get.hist.quote("IBM",start="1962-01-02",end="2014-12-31", quote=c("Open", "High", "Low", "Close","Volume"))
Kết quả thu được là dữ liệu IBM được cấu trúc như trong bảng 3.1 của chương 3. Dữ liệu IBM được download tại trang web của cơng ty bắt đầu từ ngày 02/01/1962 đến ngày 31/12/2014 với 5 trường dữ liệu là Date, Open, High, Low, Close, Volume.
Hàm tseries cũng cung cấp về cách vẽ đồ thị để đồ thị hĩa các giá trị tương ứng trong dữ liệu. Hàm plot dưới đây cho phép ta vẽ đồ thị để thể hiện một cách trực quan
về sự biến đổi của giá đĩng cửa và khối lượng giao dịch ở hình 4.1.
plot(t.ibm[,c('Close','Volume')],main="IBM stock")
Hình 4.1 Giá đĩng cửa và số lượng giao dịch
Hình 4.1 là kết quả thể hiện sự thay đổi của giá Close và biên độ giao dịch tương ứng. Ta nhận thấy một điều là khi biên độ thay đổi của giá đĩng cửa càng cao thì lượng giao dịch càng thấp và ngược lại, khi biên độ dao động của giá đĩng cửa thấp thì lượng giao dịch cao. Điều này cho thấy người giao dịch luơn thận trọng trong quá trình giao dịch ở mức an tồn nhất.
Tương ứng với biểu đồ giá đĩng cửa và số lượng giao dịch là biểu đồ của giá trị series 1 và series2 được thể hiện trong hình 2.
Nhìn vào biểu đồ trên ta thấy được giá đĩng cửa và số lượng giao dịch cĩ tính chất mùa vụ. Vào khoảng tháng 1 đến tháng 4 thì giá cổ phiếu tăng cao tương ứng với nĩ sẽ là quá trình giao dịch diễn ra rất thấp. Càng về dịp cuối năm khi giá cổ phiếu xuống thấp đến mức chạm đáy thì lượng cổ phiếu mua vào rất cao thể hiện quy luật mua bán của thị trường chứng khốn.
Để cho quá trình phân tích và dự báo được chính xác hơn ta sẽ tiến hành tính tốn, bổ sung thêm các chỉ số cơ bản của chứng khốn như đã nêu ở chương 3. Dưới đây là đồ thị biểu diễn mối quan hệ giữa giá đĩng cửa và đường trung bình dịch chuyển MA10, MA20:
Hình 4.3 Đồ thị giá đĩng cửa và MA10, MA20
Trong đồ thị trên, đường nét đứt màu đen là đường biểu diễn giá trị Close, đường màu Xanh là biểu diễn giá trị của chỉ số MA10, đường màu đỏ là biểu diễn giá trị của chỉ số MA20. Ta thấy rằng đường đi của giá đĩng cửa và đường trung bình dịch chuyển trên đồ thị cĩ sự sai khác khơng đáng kể. Tuy nhiên chỉ số MA20 tỏ ra chính xác, gần với giá đĩng cửa hơn so với chỉ số MA10.
Đồ thị trong hình 4.4 thể hiện mối quan hệ giữa giá đĩng cửa và MA10, EMA
Trong biểu đồ trên, đường nét đứt màu đen là đường biểu diễn giá trị Close, đường màu Xanh là biểu diễn giá trị của chỉ số MA10, đường màu đỏ là biểu diễn giá trị của chỉ số EMA. Ta thấy biểu đồ đường đi của các giá trị Close, MA10, MA20, EMA là tương đối ổn định.
Sau khi thu được dữ liệu ban đầu, ta sẽ tiến hành tính tốn dữ liệu đầu vào cho
mơ hình. Thư viện TSA trong R cung cấp cho ta hàm embed() để tạo các frame dữ liệu
ghi nhớ theo chiều lùi dần của dữ liệu thời gian thực. Dữ liệu được tổ chức theo cấu trúc trong bảng 3.2.
Quá trình thực hiện để thu được tập dữ liệu đầu vào cho mơ hình được tiến hành như sau: embeded.dataset<-function(data,quote='Close',hday=1,emb=10) { ds <-data.frame(embed(h.returns(data[,quote],h=hday),emb+hday)) ds <-ds[,c(1,(1+hday):(hday+emb))] names(ds)<- c(paste('r',hday,'.f',hday,sep=""),
paste('r', hday,'.t', 0:(emb-1), sep="")) ds$Date<-data[(hday+emb):(nrow(data)-hday),'Date'] ds
}
Sau khi tính tốn với bước nhảy bằng 10 ta sẽ thu được bộ dữ liệu gồm các trường sau:
> names(ibm.data)
[1] "r1.f1" "r1.t0" "r1.t1" "r1.t2" "r1.t3" "r1.t4" "r1.t5" "r1.t6" "r1.t7" "r1.t8" "r1.t9" "Date"
Trong đĩ, trường Date khơng tham gia vào quá trình tính tốn; r1.f1 là giá trị của hàm mục tiêu và được tính bằng cơng thức sau [3]:
r1.f1 = sqrt(sum((true - preds)2))/sqrt(sum((true -naive)2))
Khi đĩ, ta sẽ thu được bảng dữ liệu đầu vào của mơ hình như sau:
r1.f1 r1.f1 r1.t1 r1.t2 r1.t3 [1] 0.001431639 0.0007163324 -0.0085227273 -0.008450704 0.026011561 [2] 0.004288778 0.0014316392 0.0007163324 -0.008522727 -0.008450704 r1.t4 r1.t5 r1.t6 r1.t7 r1.t8 [1]-0.01072194 0.01450326 0.01771218 -0.01310998 0.00002000 [2] 0.02601156 -0.01072194 0.01450326 0.01771218 -0.01310998 r1.t9 Date [1] 0.000728863 1970-02-16 [2] 0.000000000 1970-02-17
Với bộ dữ liệu vừa thu được. Bây giờ chúng ta sẽ cùng nhau đi vào quá trình huấn luyện mạng.
Đầu tiên, việc phân chia dữ liệu của tập train và tập test sẽ theo tỷ lệ 7:3, tức là tập dữ liệu đem đi training sẽ chiếm 70% của tập dữ liệu ban đầu. Tập dữ liệu đem thử nghiệm mơ hình sẽ chiếm 30% của tập dữ liệu ban đầu. Cụ thể, tập training sẽ bắt đầu từ ngày 02/01/1962 đến ngày 31-12-1999. Tập test sẽ bắt đầu từ ngày 01-01-2000 đến ngày 31/12/2014.
ibm.train <- ibm.data[ibm.data$Date < '1990-01-02',] ibm.test <- ibm.data[ibm.data$Date > '2000-12-31',]
4.3 Kết quả thực nghiệm
Sau quá trình thu thập và tiền xử lý dữ liệu đã được mơ tả rất kỹ trong chương 3, chúng tơi tiến hành cài đặt thử nghiệm bộ dữ liệu trên ba mơ hình mạng nơ-ron, máy vector hỗ trợ, mơ hình arima và đã đạt được những kết quả nhất định.
4.3.1Kết quả chạy với mơ hình ANN
Như đã tìm hiểu về mạng nơ-ron trong chương 2 ta thấy, Trong mơ hình đầu tiên, chúng ta sẽ thử với mục tiêu dự đốn 1 ngày trước ngày đĩng cửa. Mạng nơ-ron là một mơ hình thường được sử dụng nhiều trong dự đốn tài chính bởi khả năng giải quyết tốt vấn đề trong bài tốn dữ liệu phi tuyến tính [3].
Một mạng nơ-ron được hình thành bởi các thành phần là các nơ-ron. Mỗi liên kết cĩ một trọng số liên kết. Việc xây dựng một mạng nơ-ron bao gồm sử dụng thuật tốn tìm kiếm trọng số kết nối giữa các nơ-ron. Một mạng nơ-ron gồm các nơ-ron được tổ chức trong các tầng. Tầng đầu tiên bao gồm các nơ-ron đầu vào của mạng. Tầng cuối cùng cho ta dự đốn về mạng thơng qua nơ-ron đầu vào. Ở giữa là các tầng nơ-ron ẩn [4].
Bây giờ chúng ta sẽ xem cách xây dựng mạng nơ-ron trong R và cách sử dụng mơ hình trong việc dự đốn như thế nào. Để đạt được kết quả này, chúng ta sẽ chia dữ liệu cài đặt trong 2 khoảng thời gian, một khoảng để xây dựng hệ thống mạng nơ-ron, một khoảng để đánh giá độ tin cậy trong việc dự đốn mơ hình với biến mục tiêu[6][7][10]. Ở đây chúng ta chỉ đơn giản là tách dữ liệu thành 2 khoảng thời gian, thứ nhất là dữ liệu trong 36 năm đầu tiên, khoảng thứ hai là dữ liệu 14 năm cịn lại như đã nĩi ở trên.
Mạng nơ-ron thường cĩ kết quả tốt hơn đối với dữ liệu đã được chuẩn hĩa. Để cĩ một mạng nơ-ron dự đốn trong tương lai, cụ thể là trước 1 ngày, chúng ta cĩ thể sử dụng thư viện nnet().
> library(nnet)
> nn <- nnet(r1.f1 ~ .,data=ibm.train[,-ncol(ibm.train)], linout=T,size=10,decay=0.01,maxit=1000)
Thư viện nnet sử dụng thuật tốn back-propagation (lan truyền ngược) làm cơ sở cho việc cập nhật các trọng số trong mạng nơ-ron. Quá trình này được lặp đi lặp lại để cập nhật các trọng số của mạng nơ-ron. Việc lặp đi lặp lại nhiều lần cĩ thể mất một thời gian dài để tính tốn với bộ dữ liệu lớn.