Ở đây chúng tôi sử dụng mô hình SVR và thử nghiệm với hàm nhân cho SVR là hàm nhân đa thức (Polynomial - Poly) để ánh xạ dữ liệu nhƣ là các biến đầu vào xi
trong mô hình SVR. Thử nghiệm thực hiện với giải thuật SMO cho mô hình hồi quy vector hỗ trợ.
Trong mô hình này do việc triển khai thuật toán SVR là phức tạp nên chúng tôi đã sử dụng thƣ viện có sẵn là LIBSVM – do Chih-Chung Chang và Chih-Jen Lin đƣa ra tại http://www.csie.ntu.edu.tw/~cjlin/libsvm/ kết hợp với công cụ hỗ trợ Weka phiên bản 3.7.9 (là công cụ mã nguồn mở viết bằng Java bởi các nhà khoa học thuộc trƣờng Đại học Waitako phát triển phục vụ cho lĩnh vực học máy và khai phá dữ liệu để triển khai thực nghiệm mô hình. Bộ dữ liệu thực tế đƣợc thu thập từ các sàn chứng khoán HSX và HNX của thị trƣờng chứng khoán Việt Nam tại website www.stox.vn.
3.3. Thu thập và xử lý dữ liệu
Để mô hình hoạt động hiệu quả thì dữ liệu đầu vào dành cho việc huấn luyện (training) và đánh giá (testing) là rất quan trọng. Việc thu thập và xử lý dữ liệu thông qua các bƣớc sau:
- Thu thập dữ liệu
- Tiền xử lý dữ liệu
- Chọn dữ liệu đầu vào
- Phân hoạch dữ liệu
3.3.1. Thu thập dữ liệu
Chúng tôi thực hiện thu thập dữ chứng khoán của từng cổ phiếu với các thông tin về cổ phiếu là: Ngày giao dịch, Giá mở cửa, Giá đóng cửa, Thay đổi, Giá cao nhất, Giá thấp nhất, Khối lượng giao dịch khớp lệnh, Giá trị giao dịch khớp lệnh, Khối lượng giao dịch thỏa thuận, Giá trị giao dịch thỏa thuận.
Bộ dữ liệu đƣợc thu thập dựa trên dữ liệu lịch sử của mã cổ phiếu đƣợc giao dịch trên sàn chứng khoán. Dữ liệu đƣợc lấy về từ trang www.stox.vn.
3.3.2. Tiền xử lý dữ liệu
Trong qui trình khai phá dữ liệu, công việc xử lý dữ liệu trƣớc khi đƣa vào các mô hình là rất cần thiết, bƣớc này làm cho dữ liệu có đƣợc ban đầu qua thu thập dữ liệu (gọi là dữ liệu gốc original data) có thể áp dụng đƣợc (thích hợp) với các mô hình khai phá dữ liệu (data mining model) cụ thể. Các công việc cụ thể của tiền xử lý dữ liệu thƣờng bao gồm những công việc nhƣ:
- Clean data: Làm sạch dữ liệu nhƣ xóa bỏ các dữ liệu bất thƣờng (Outlier).
- Transformation: Chuyển đổi dữ liệu cho phù hợp với các mô hình nhƣ chuyển đổi dữ liệu từ dạng số (numeric) sang dữ liệu dạng danh nghĩa (nomial) hay dữ liệu dạng thứ tự (ordinal).
Ở giai đoạn này, ngoài các dữ liệu đƣợc thu thập về chúng tôi còn thực hiện thêm các thông tin dữ liệu khác là các chỉ số kỹ thuật, thông tin này đƣợc tính toán dựa trên các thông tin đã có – Các chỉ số cụ thể sẽ đƣợc trình bày ở phần thực nghiệm.
Để sử dụng thƣ viện này dữ liệu phải đƣợc chuẩn hóa về theo định dạng ARFF (*.arff), cấu trúc của tập tin ARFF bao gồm các thành phần:
- Header: Chứa khai báo quan hệ, danh sách các thuộc tính (tên, kiểu dữ liệu).
- Data: Có nhiều dòng, mỗi dòng thể hiện giá trị của các thuộc tính cho một mẫu. Tập tin đƣợc khai báo nhƣ sau:
% This is a relation about wather @relation <relation-name>
@attribute <attribute-name><datatype>
@attribute <nominal attributes>{<nominal name1>, <nominal name2>, …, <nominal namen>}
@data
data 1,data 2, …, data n, Trong đó:
% : Sau dấu này là các chú thích
@relation <relation-name> : Khai báo tên của mối quan hệ (cũng chính là tên của file dƣ liêu), nó đƣợc khai báo ở dòng đầu tiên và tên của mối quan hệ phải viết liền hoặc viết cách thì phải có dấu gạch nối.
@attribute <attribute-name><datatype>: Là phần định nghĩa tên thuộc tính và kiểu dữ liệu. Thứ tự khai báo các thuộc tính là vị trí các dữ liệu trong tập tin, có 2 loại thuộc tính là:
- Thuộc tính số: Là các giá trị kiểu số có thể là số thực hoặc số nguyên
(vd: @attribute Gia_mocua string )
- Thuộc tính danh nghĩa: Đƣợc xác định bằng cách cung cấp một danh sách các thuộc tính ( Vd: @attribute Gia_CP {Tang,Giam,Khong_thaydoi}
* Với dữ liệu ngày tháng ta khai báo như sau: @attribute timestamp Date "yyyy-MM-dd HH:mm:ss"
* Phần phân loại được khai báo là giá trị cuối cùng
@data : Sau từ khóa này là bắt đầu của phần khai báo các giá trị của các thuộc tính đƣợc khai báo ở trên. Các dữ liệu phải tƣơng ứng với thứ tự các thuộc tính đƣợc khai báo ở trên.
Vd: 32, 53, 24, Tang Mẫu 1 ; 31, 50, 21, Giam Mẫu 2 ; ….
3.3.3. Chọn loại dữ liệu đầu vào
Với mỗi mã cổ phiếu có rất nhiều chỉ số dùng để đánh giá khác nhau, trong phạm vi bài toán dự báo chỉ số chứng khoán này ta chỉ chọn một số biến sau:
- Close: giá đóng cửa
- Ngoài ra, còn các dữ liệu đặc trƣng đƣợc dùng phổ biến trong các dự báo chứng khoán là các chỉ số kỹ thuật: trung bình trƣợt giản đơn (SMA) 12 ngày và 26 ngày, dải biên độ biến động giá (Bollinger bands) với Bollinger upper và lower, trung bình trƣợt hội tụ và phân kỳ (MACD) và MACD Histogram [10].
Các dữ liệu chỉ số kỹ thuật trên và giá đóng của tạo nên véc tơ đầu vào với số chiều là 8.
3.3.4. Phân hoạch dữ liệu
Sau khi chuẩn hoá dữ liệu, chúng ta chia dữ liệu thành các tập là 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 kiểm tra có kích cỡ chiếm khoảng 10%-30% của tập huấn luyện, kiểm tra độ chính xác của thuật toán.
Mô hình dựa đoán với dữ liệu huấn luyện và kiểm tra thành 3 xu hƣớng: Tăng, Giảm và Không xu hƣớng. Ở đây chúng tôi quy định Tăng tƣơng ứng với giá trị 1, Giảm tƣơng ứng với -1, Không xu hƣớng tƣơng ứng với giá trị 0.
Dữ liệu đƣợc gán nhãn dựa trên giá trị tăng giảm của ngày hôm đó.
Sau đó dữ liệu đƣợc phân hoạch cho các tập train và tập test, chúng tôi thực hiện dự báo xu hƣớng của mỗi mã cổ phiếu trong 1 ngày tiếp theo và 5 ngày tiếp theo.
3.4. Đánh giá mô hình
Ƣớc lƣợng độ chính xác của mô hình là quan trọng ở chỗ nó cho phép dự đoá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
holdout và k-fold cross-validation. Cả 2 kỹ thuật này đều dựa trên các phân hoạch ngẫu nhiên tập dữ liệu ban đầu [9]:
Trong phƣơng pháp holdout, dữ liệu dƣa ra đƣợc phân chia ngẫu nhiên thành 2 phần là: tập dữ liệu đào tạo và tập dữ liệu kiểm tra. Thông thƣờng 2/3 dữ liệu cấp cho tập dữ liệu đào tạo, 1/3 dữ liệu còn lại cho tập dữ liệu kiểm tra.
Trong phƣơng pháp k-fold cross validation tập dữ liệu ban đầu đƣợc chia ngẫu nhiên thành k tập con (fold) có kích thƣớc xấp xỉ nhau S1, S2, …, Sk. Quá trình học và test đƣợc thực hiện k lần. Tại lần lặp thứ i, Si là tập dữ liệu kiểm tra, các tập còn lại hợp thành tập dữ liệu đào tạo. Có nghĩa là, đầu tiên việc dạy đƣợc thực hiện trên các tập S2, S3 …, Sk, sau đó test trên tập S1; tiếp tục quá trình dạy đƣợc thực hiện trên tập S1, S3, S4,…, Sk, sau đó test trên tập S2; và cứ thế tiếp tục.
Độ chính xác là toàn bộ số phân lớp đúng từ k lần lặp chia cho tổng số mẫu của tập dữ liệu ban đầu.
Hình 3.2: Phương pháp K-Fold
Nếu độ chính xác của mô hình đƣợc coi nhƣ là chấp nhận đƣợc, mô hình có thể đƣợc sử dụng để phân lớp các mẫu về sau mà nhãn lớp là chƣa biết. Dữ liệu nhƣ vậy cũng đƣợc biết đến trong học máy nhƣ là các dữ liệu chƣa biết “unknown” hoặc dữ liệu trƣớc đây chƣa tồn tại “previously unseen”.
Các tiêu chuẩn sau để đánh giá mô hình:
- Độ chính xác dự đoán (predictive accuracy): Độ chính xác là khả năng của mô hình để dự đoán chính xác nhãn lớp của dữ liệu mới hay dữ liệu chƣa biết.
- Tốc độ (speed): Tốc độ là những chi phí tính toán liên quan đến quá trình tạo ra và sử dụng mô hình.
- Sức mạnh (robustness): Sức mạnh là khả năng mô hình tạo ta những dự đoán đúng từ những dữ liệu noise hay dữ liệu với những giá trị thiếu.
- Khả năng mở rộng (scalability): Khả năng mở rộng là khả năng thực thi hiệu quả trên lƣợng lớn dữ liệu của mô hình đã học.
- Tính hiểu được (interpretability): Tính hiểu đƣợc là mức độ hiểu và hiểu rõ những kết quả sinh ra bởi mô hình đã học.
- Tính đơn giản (simplicity): Tính đơn giản liên quan đến kích thƣớc của cây quyết định hay độ cô đọng của các luật.
Độ đo chất lƣợng phân lớp tiêu chuẩn thể hiện thông qua:
- Độ chính xác (accuracy): là tỷ lệ các cặp khái niệm đƣợc phân loại đúng trên tổng số các cặp khái niệm.
- Độ hồi nhớ (recall): Đo tỷ lệ các tƣơng ứng đƣợc tìm thấy đúng trong tổng số tƣơng ứng đƣợc mong đợi của tập tham chiếu
- Độ đúng đắn (precision): Đo tỷ lệ các tƣơng ứng đƣợc tìm thấy đúng trên tổng số tƣơng ứng đƣợc trả về.
- Độ đo F-measure: là trung bình điều hoà có trọng số của precision và recall, đƣợc sử dụng để đánh giá tổng quát các hệ thống.
Các độ đo đƣợc định nghĩa dựa trên công thức nhƣ hình dƣới. Chúng ta xem các lớp trong một vấn đề phân lớp nhị phân nhƣ là lớp dƣơng “positive” và âm “negative” tƣơng ứng.
Actual result / classification
Predictive result / Classification
yes no
yes tp (true positive) fp (false positive) no fn (false negative) tn (true negative)
Bảng 3.1: Ma trận hỗn hợp trong phân lớp Công thức tính các độ đo: Công thức tính các độ đo: Accuracy = fn fp tn tp tn tp ; Recall = fn tp tp ; Precision = tp fp tp F-Measure = 2* recall precision recall precision * ;
- Sai số căn quân phƣơng
( Root mean squared error - RMSE)
- Sai số tƣơng quan
(Relative absolute error - R)
- Sai số tuyệt đối trung bình
(Mean absolute error - MAE)
Trong đó, yi và fi chỉ giá trị thực và giá trị dự báo tại thời điểm i, , là giá trị trung bình của giá trị thực và giá trị dự báo.
Phƣơng pháp dự báo tốt là phƣơng pháp nhận đƣợc sai số R lớn còn sai số RMSE và MAE nhỏ (càng gần về không càng tốt).
Kết luận chương 3
Chƣơng này chúng tôi đƣa ra mô hình sử dụng cho việc dự báo chỉ số chứng khoán. Các bƣớc xây dựng mô hình đƣợc giới thiệu một cách khá chi tiết. Kết quả cuối cùng là một mô hình kết hợp giữa mô hình SVR với việc sử dụng một số chỉ số cơ bản làm dữ liệu đầu vào. Đây là mô hình đƣợc dùng để xây dựng chƣơng trình dự báo chỉ số chứng khoán và đƣa ra hỗ trợ quyết định đầu tƣ và kinh doanh chứng khoán.
Chƣơng 4. THỬ NGHIỆM VÀ ĐÁNH GIÁ
Chƣơng này thảo luận về các kết quả của các mô phỏng thực nghiệm. Đầu tiên là giới thiệu về dữ liệu đƣợc sử dụng trong thực nghiệm. Tiếp theo chúng tôi giới thiệu về quá trình thực nghiệm. Sau đó kết quả đƣợc trình bày và phân tích ở phần cuối cùng của chƣơng.
4.1. Thu thập dữ liệu
Trong thử nghiệm của mình chúng tôi thực hiện thu thập dữ liệu giao dịch lịch sử của các mã chứng khoán trên sàn giao dịch tại Sở giao dịch chứng khoán Hà Nội (HNX - http://hnx.vn và Sở giao dịch chứng khoán Hồ Chí Minh (HSX - http://www.hsx.vn). Các dữ liệu sử dụng là các giao dịch của các công ty đƣợc niêm yết trên sàn chứng khoán và đƣợc công khai trên mạng Internet, nguồn chính chúng tôi thu thập dữ liệu là tại http://stox.vn.
Dữ liệu đƣợc sử dụng bao gồm các dữ liệu giá chứng khoán giao dịch hàng ngày, giá mở cửa (OPEN), giá thấp ( LOWEST), giá cao nhất (HIGHEST), giá đóng cửa (CLOSE). Ở đây chúng tôi đã thực hiện thu thập ngẫu nhiên 5 mã chứng khoán đƣợc giao dịch trên sàn chứng khoán trong khoảng thời gian từ 2007 tới thời điểm hiện tại với 1631 quan sát, 5 mã đƣợc dùng thử nghiệm nhƣ sau:
Mã CP Tên công ty
ACB Ngân hàng Thƣơng mại Cổ phần Á Châu REE Công ty Cổ phần Cơ điện Lạnh
SAM Công ty Cổ phần Đầu tƣ và Phát triển SACOM SSI Công ty Cổ phần chứng khoán Sài Gòn
STB Ngân hàng Thƣơng mại Cổ phần Sài Gòn Thƣơng Tín
Dữ liệu đƣợc thu thập về gồm các giá trị nhƣ sau ( Ví dụ với một đoạn dữ liệu của mã cổ phiếu ACB):
Ngày Giá đóng cửa Thay đổi ( +/-/%)
Giámở
cửa Giá cao nhất Giá thấp nhất
KLGDkhớ p lệnh (CP) GTGD khớp lệnh(triệu VNĐ) KLGD thỏa thuận (CP) GTGDthỏa thuận (triệu VNĐ) 29/07/2013 15883 83 15800 16000 15800 152682 24,250,737 0 0 26/07/2013 15800 0 15900 15900 15700 403600 63,776,154 67 0,0010354 25/07/2013 15800 -200 15900 16000 15800 231700 36,866,184 236 0,0033984 24/07/2013 16000 0 16000 16000 16000 413100 66,102,048 42 0,0006048 23/07/2013 16000 -100 16100 16100 16000 150900 241,795 50 0,00072 22/07/2013 16000 -100 16100 16100 16000 423700 6,780,735 97 0,001455 19/07/2013 16000 0 16000 16100 16000 228500 36,625,244 376 0,0054144 18/07/2013 16000 -100 16100 16200 16000 232100 5,098,332 94076 1,364,102 17/07/2013 16100 100 16000 16200 15900 450900 7,193,263 115 0,001683 16/07/2013 15900 0 15900 16000 15900 68100 10,838,798 72 0,0010398 15/07/2013 15900 -100 16000 16000 15900 124200 19,779,052 133 0,0019152 …….
4.2. Tiền xử lý dữ liệu
Từ dữ liệu thu thập đƣợc trên tác giả thực hiện tính toán các chỉ số kỹ thuật dùng cho mô hình dựa trên các công thức tính chỉ số đã nêu ở trên và việc tính toán này đƣợc chúng tôi thực hiện bằng tay trên Excel, dữ liệu sau khi đƣợc tính toán và gán nhãn có các giá trị nhƣ sau:
Closed SMA12 SMA26 Bollinger up 20
Bollinger
down20 RSI MACD
MACD – Histogram Label 177500 163130.00 163130.00 191870 134390 90 48308.82 -100424.30 0 184000 165027.27 165027.27 202972.73 127081.82 34.6 49001.22 -106785.28 0 194000 167441.67 167441.67 220558.33 114325 37.9 49834.04 -113595.16 0 202000 171166.67 170100.00 233900 106300 50.9 50609.13 -120534.23 1 194000 174333.33 171807.14 216192.86 127421.43 48.5 50050.44 -125664.25 -1 191000 177000.00 173086.67 208913.33 137260 60.6 48843.27 -129928.48 -1 ….
Bảng 4.3: Dữ liệu sau khi được xử lý của một mã CP
Sau đó dữ liệu đƣợc chuyển sang dạng file *. ARFF để chạy với công cụ hỗ trợ Weka nhƣ sau:
Hình 4.1: Dữ liệu được đưa về định dạng *.arff
4.3. Phƣơng thức phân hoạch dữ liệu
Mỗi tập dữ liệu, ở đây chúng tôi sử dụng phƣơng thức đánh giá chéo k – fold, chia tập dữ liệu làm 10 fold, sau đó tiến hành huấn luyện với 10 lần lặp. Mỗi lần, sử
4.4. Kết quả thử nghiệm
4.4.1. Kết quả chạy thực nghiệm so sánh SVR với mô hình khác
Chúng tôi thực hiện thử nghiệm dự đoán với các mô hình khác nhau bao gồm:
- Mô hình SVR hàm nhân là hàm nhân đa thức (Polynomial - Poly) để ánh xạ dữ liệu nhƣ là các biến đầu vào xi trong mô hình SVR. Thử nghiệm thực hiện với giải thuật SMO cho mô hình hồi quy vector hỗ trợ.
- Mô hình Cây quyết định với thuật toán J48
- Mô hình ANN với hàm MultiLayer Perception và số lớp ẩn là 10.
- Thử nghiệm dự đoán với các chu kỳ là 1 ngày, dữ liệu đầu vào đƣợc lấy từ ngày 1/1/2007 đến 30/11/2013 từ trang web http://stox.vn bao gồm tổng là 1631 quan sát. Đánh giá bằng phƣơng pháp k-fold cross validation với k =10 với 20 điểm dữ liệu trong quá khứ. Kết quả trung bình thu đƣợc thể hiện dƣới bảng sau:
SVR Decision Tree ANN
ACB SAM REE SSI STB ACB SAM REE SSI STB ACB SAM REE SSI STB
Precision 0,702 0,652 0,701 0,664 0,725 0,598 0,534 0,601 0,711 0,595 0,591 0,541 0,613 0,548 0,618 Recall 0,663 0,649 0,672 0,571 0,621 0,483 0,529 0,541 0,521 0,492 0,573 0,529 0,592 0,513 0,539