1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đồ án cuối kỳ môn phương pháp nghiên cứu liên ngành đề tài stock price prediction in vietnam

24 2 0

Đ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

Thông tin cơ bản

Tiêu đề Stock Price Prediction in Vietnam
Tác giả Từ Hà Phúc, Trần Như Cẩm Ly, Bùi Xuân Mai, Nguyễn Ngọc Gia Nghi, Nguyễn Thanh Thúy Tiên
Người hướng dẫn TS. Nguyễn Thôn Dã
Trường học Trường Đại học Kinh tế - Luật
Chuyên ngành Phương pháp nghiên cứu liên ngành
Thể loại Đồ án cuối kỳ
Định dạng
Số trang 24
Dung lượng 4,09 MB

Nội dung

Các mô hình máy học được đào tạo và đánh giá sử dụng dữ liệu này để dự đoán giá chứng khoán.. Trong bài báo này, chúng tôi sẽ trình bày về việc sử dụng các kỹ thuật trên để dự đoán giá c

Trang 1

TRƯỜNG ĐẠI HỌC KINH TẾ - LUẬT KHOA HỆ THỐNG THÔNG TIN

ĐỒ ÁN CUỐI KỲ Môn: PHƯƠNG PHÁP NGHIÊN CỨU LIÊN NGÀNH

Đề tài: STOCK PRICE PREDICTION IN VIETNAM

GVGD: TS Nguyễn Thôn Dã NHÓM SINH VIÊN THỰC HIỆN

4 Nguyễn Ngọc Gia Nghi K224060802

5 Nguyễn Thanh Thúy Tiên K224060816

Trang 2

Tuy nhiên, do chưa có nhiều kinh nghiệm làm đề tài cũng như hạn chế về kiến thức,báo cáo không thể tránh khỏi những thiếu sót Chúng em rất mong nhận được những ýkiến, góp ý quý giá của Thầy để có thể cải thiện những thiếu sót trong báo cáo này vàhọc hỏi nhiều kinh nghiệm để hoàn thành tốt hơn những bài sắp tới.

Chúng em xin chân thành cảm ơn!

Trang 3

MỤC LỤC

1 Introduction 4

2 Related work 4

3 Methodology 5

3.1 Model AI 5

3.1.1 Machine learning 5

3.1.2 Deep learning 7

3.2 Description of Data 8

3.3 Process Diagram 10

3.3.1 Gathering machine learning data 11

3.3.2 Data pre-processing 11

3.3.3 Training model 12

3.3.4 Evaluating model 16

3.3.5 Deploying an application to predict stock price in Viet Nam 17

4 Result 17

5 Conclusion and Future Scope 18

References 20

Trang 4

Nghiên cứu này tập trung vào ứng dụng các mô hình máy học, bao gồm LinearRegression, KNN, SVM và LSTM để dự đoán giá chứng khoán của Ngân hàng TMCPNgoại thương Việt Nam (Vietcombank) có ký hiệu là VCB trên thị trường chứngkhoán Việt Nam Dữ liệu sử dụng trong nghiên cứu là thông tin lịch sử về giá chứngkhoán của mã chứng khoán Các đặc trưng của dữ liệu bao gồm giá mở cửa, giá đóngcửa, khối lượng giao dịch và các chỉ số liên quan khác Các mô hình máy học đượcđào tạo và đánh giá sử dụng dữ liệu này để dự đoán giá chứng khoán Hiệu suất củatừng mô hình được đánh giá bằng các phương pháp đo đạc như sai số trung bình bìnhphương, độ chính xác và độ chính xác Kết quả sẽ cho thấy hiệu suất và khả năng dựđoán của từng mô hình trong việc dự đoán giá chứng khoán VCB trên thị trườngchứng khoán Việt Nam

Too long to read on your phone? Save

to read later on your computer

Save to a Studylist

Trang 5

1 Introduction

Thị trường chứng khoán Việt Nam là một phần quan trọng của hệ thống tài chính quốcgia, đóng vai trò quyết định trong việc huy động vốn và cung cấp cơ hội đầu tư chocác nhà đầu tư Việc tra cứu thông tin về các mã chứng khoán, thông tin liên quan đếncông ty, và so sánh các mã chứng khoán với nhau là những nhu cầu cơ bản của họ Ápdụng machine learning và deep learning để dự đoán giá chứng khoán là một trongnhững ứng dụng quan trọng và phức tạp của trí tuệ nhân tạo trong lĩnh vực tài chính.Đến nay, đã có rất nhiều nghiên cứu về đề tài này và đã cho ra nhiều kết quả khá triểnvọng trong tương lai

Gần đây, việc dự đoán thị trường chứng khoán có thể được nâng cao bằng cách sửdụng máy học (Machine Learning) Những kỹ thuật như Máy Vectơ hỗ trợ (SupportVector Machine - SVM), hoặc một số vectơ dựa trên mạng noron kỹ thuật như Mạngnơron nhân tạo (ANN), Mạng nơ ron tái phát (RNN) và mạng nơ ron sâu mạng lướithần kinh như Bộ nhớ ngắn dài (Long short term memory - LSTM) [ ] [ ] [ ] Đây là1 2 3những công cụ tốt có thể giúp xử lý dữ liệu đầu vào và đầu ra của một tập dữ liệuphức tạp Trong bài báo này, chúng tôi sẽ trình bày về việc sử dụng các kỹ thuật trên

để dự đoán giá chứng khoán Việt Nam

Các phần tiếp theo của bài báo bao gồm: phần 2 trình bày về các nghiên cứu liên quanđến bài toán Trong phần 3, chúng tôi sẽ trình bày cơ sở lý thuyết Phần 4 trình bàynhững kết quả thực nghiệm của mô hình đề xuất, trong đó có kết hợp so sánh với một

số kết quả của mô hình khác Cuối cùng, trong phần 5 chúng tôi nêu lên một số kếtluận và những định hướng nghiên cứu tiếp theo

2 Related work

Dự đoán giá chứng khoán là một vấn đề quan trọng trong tài chính, có thể giúp nhàđầu tư đưa ra quyết định đầu tư hiệu quả hơn Để dự đoán giá trên thị trường chứngkhoán, mọi người tìm kiếm những phương pháp và công cụ như vậy sẽ làm tăng lợinhuận của họ, đồng thời giảm thiểu rủi ro [ ] Dự đoán đóng một vai trò rất quan4trọng trong hoạt động kinh doanh trên thị trường chứng khoán, một quá trình đượccho là rất phức tạp và đầy thử thách Việc sử dụng các phương pháp truyền thống nhưphân tích cơ bản và kỹ thuật có thể không đảm bảo độ tin cậy của dự đoán [ ] Sự phát5triển mạnh mẽ của các mô hình học máy, học sâu như Linear Regression, KNN, SVM,LSTM được ứng dụng vào dự đoán giá cổ phiếu và đã đạt được một số kết quả khảquan, được nêu ra trong các bài viết [ ] [ ] [ ] Chúng tôi nhận thấy tầm quan trọng6 7 8của việc so sánh các mô hình dự đoán khác nhau để tìm ra mô hình phù hợp nhất chotừng tình huống cụ thể đặc biệt là trong ngắn hạn và dài hạn Ngoài ra, chúng tôi có ý

Trang 6

tưởng để bài nghiên cứu có thể ứng dụng dự đoán cho hầu hết các mã chứng khoán ởViệt Nam, thông qua dữ liệu được lấy trực tiếp nhờ vào thư viện hỗ trợ Nghiên cứuchúng tôi tập trung vào tìm kiếm giải pháp cho việc dự đoán, hỗ trợ đưa ra quyết địnhđầu tư ở Việt Nam bên cạnh nghiên cứu về mô hình, thuật toán.

Dữ liệu đầu vào trong bài nghiên cứu của chúng tôi là các điểm dữ liệu lấy theo chuỗi

60 ngày liên tiếp và đầu ra là giá của ngày tiếp theo, thực hiện tiếp tục cho đến hết tập

dữ liệu đầu vào Vì vậy mô hình hồi quy tuyến tính được sử dụng ở đây là hồi quytuyến tính đa biến Mô hình này sử dụng nhiều biến độc lập để dự đoán biến phụthuộc, và mối quan hệ giữa các biến độc lập và biến phụ thuộc là tuyến tính [10].Công thức hồi quy đa biến:

Cách hoạt động của SVM sẽ có 3 bước Bước 1 sẽ là tìm một hệ thống tuyến tính(hyperplane) để phân biệt các lớp dữ liệu Hệ thống tuyến tính là một đường thẳnghoặc một đường cong có thể chia hai lớp dữ liệu thành hai phần riêng biệt Sau đó là

Trang 7

tìm các điểm dữ liệu gần nhất (support vector) với hệ thống tuyến tính Các điểm nàyđược gọi là vector hỗ trợ, vì chúng ảnh hưởng đến vị trí và hướng của hệ thống tuyếntính Cuối cùng, tối ưu hóa lề (margin) của hệ thống tuyến tính Lề là khoảng cáchgiữa hệ thống tuyến tính và các điểm dữ liệu gần nhất từ mỗi lớp Mục tiêu của modelSVM là tìm ra một lề lớn nhất có thể [13].

Phương trình của siêu phẳng tuyến tính có thể được viết là:

Vectơ W đại diện cho vectơ pháp tuyến của siêu phẳng, tức là hướng vuông góc vớisiêu phẳng Tham số b trong phương trình biểu thị độ lệch hoặc khoảng cách của siêuphẳng tính từ gốc dọc theo vectơ pháp tuyến w

Khoảng cách giữa điểm dữ liệu x_i và ranh giới quyết định có thể được tính như sau:

||w|| đại diện cho chuẩn Euclide của vectơ trọng số w Định mức Euclide của vectơpháp tuyến W [14]

❖ KNN

K-nearest neighbor ( KNN ) là một trong những thuật toán học có giám sát đơn giản nhất trong Machine Learning Ý tưởng của KNN là tìm ra output của dữ liệu dựa trên thông tin của những dữ liệu training gần nó nhất [15]

Quy trình làm việc của KNN gồm những bước sau Bước đầu tiên, chúng ta sẽ xác định tham số K bằng cách sử dụng số láng giềng gần nhất Tiếp theo, chúng ta tính toán khoảng cách đối tượng cần phân lớp với tất cả các đối tượng trong training data Sau đó, chúng ta sẽ sắp xếp khoảng cách theo thứ tự tăng dần đồng thời xác định K láng giềng gần nhất với đối tượng cần phân lớp rồi lấy tất cả các lớp của K láng giềng gần nhất Cuối cùng, dựa vào phần lớn lớp của K ta sẽ xác định được lớp cho đối tượng cần phân lớp

Thuật toán KNN cho rằng những dữ liệu tương tự nhau sẽ tồn tại gần nhau trong mộtkhông gian, từ đó công việc của chúng ta là sẽ tìm k điểm gần với dữ liệu cần kiểm tranhất Việc tìm khoảng cách giữa 2 điểm cũng có nhiều công thức có thể sử dụng, tùytrường hợp mà chúng ta lựa chọn cho phù hợp Đây là 3 cách cơ bản để tính khoảngcách 2 điểm dữ liệu x, y có k thuộc tính [16]:

Trang 8

3.1.2 Deep learning

❖ LSTM

Hochreiter và Schmidhuber đã phát minh ra mạng Long Short-Term Memory (LSTM)vào năm 1997 [ ] LSTM là một biến thể của mạng thần kinh tái phát hoặc RNN và17được chứng minh là hoạt động tốt với các mô hình học tập và ghi nhớ theo thời gian.LSTM được thiết kế để xử lý vấn đề phụ thuộc lâu dài về vấn đề tiêu biến và bùng nổgradient trong RNN [ ] [ ] LSTM có bốn thành phần chính bao gồm Cell State18 19(Ct), Hidden State (Ht), Forget Gate (Ft) và Input Gate (It) và Output Gate (Ot)

Hình 1: Hình xiên của LTSM [ ] 20Như được hiển thị trong Hình 1, đây là phương thức vận hành mô hình LSTM thôngthường Các công thức như sau [21]:

Trang 9

Ft, It lần lượt là viết tắt của Forget Gate và Input Gate (cơ chế quên và lưu vào bộ nhớdài hạn), lúc này máy tiếp tục làm mới kiến thức về cuốn sách trong trí nhớ dài hạncủa não (ví dụ: nếu một nhân vật chết, có thể quên một số chi tiết nhất định về nhânvật này) Ot là viết tắt của Output Gate (cơ chế truy xuất từ trí nhớ dài hạn) Thay vìlúc nào cũng sử dụng toàn bộ trí nhớ dài hạn, máy sẽ học những phần nào cần tậptrung vào một thời điểm nhất định Ct là viết tắt của Cell State (trí nhớ dài hạn) dùng

để lưu trữ các chi tiết cần thiết để máy hiểu được ngữ cảnh sau này mà không cần lậttrang lại (tên, nơi ở, mối quan hệ giữa các nhân vật…) Ht là viết tắt của Hidden State(trí nhớ ngắn hạn) dùng để lưu trữ các chi tiết nhất định cụ thể cho cảnh mà máy đangđọc cho đến khi cảnh này kết thúc và quên nó đi (trời đã sáng, hai nhân vật đã đidạo…)

Nghiên cứu này chúng tôi đã lựa chọn mô hình LSTM của RNN để dự đoán giá cổphiếu Bộ nhớ ngắn hạn dài (LSTM) là kiến trúc RNN phổ biến, được giới thiệu bởiSepp Hochreiter và Juergen Schmidhuber [ ] Mô hình LSTM có thể giải quyết được22vấn đề mà mô hình RNN cơ bản không thể dự đoán được trạng thái hiện tại của môhình LSTM có ba “ô”: cổng vào, cổng ra và cổng quên, giúp nó lọc và dự đoán thôngtin mà mạng nơ-ron yêu cầu [23]

3.2 Description of Data

Bộ dữ liệu này bao gồm thông tin về giá chứng khoán lịch sử của các mã chứng khoánđược lấy từ thư viện vnstock Dữ liệu được thu thập từ các ngày giao dịch và bao gồmcác thông tin quan trọng như giá mở cửa (open), giá cao nhất trong ngày (high), giáthấp nhất trong ngày (low), giá đóng cửa (close) và khối lượng giao dịch (volume).Mỗi mã chứng khoán được đại diện bởi một tập hợp các thông tin giá trị tương ứngvới các chỉ số trên Giá mở cửa là giá chứng khoán trong ngày giao dịch khi thị trường

mở cửa, giá cao nhất là mức giá tối đa mà cổ phiếu đã đạt trong ngày, giá thấp nhất làmức giá tối thiểu mà cổ phiếu đã đạt trong ngày, và giá đóng cửa là giá chứng khoánkhi thị trường đóng cửa trong ngày đó Khối lượng giao dịch chỉ ra tổng số cổ phiếu

đã được giao dịch trong ngày

Để minh họa cho toàn bộ quá trình, chúng tôi lựa chọn mã chứng khoán cụ thể là mãchứng khoán của Ngân hàng TMCP Ngoại thương Việt Nam (Vietcombank) có kýhiệu là VCB Dữ liệu đầu vào được lấy từ ngày 01- 01- 2021 đến 24- 11- 2023

Trang 10

Bảng 1: Mẫu dữ liệu giao dịch từ 04/01/2021-15/01/2021 chưa qua xử lý.

Bảng 2 và 3 : Số liệu thống kê mô tả của tập dữ liệu.

Trang 11

Bộ dữ liệu này gồm 724 hàng (tương ứng với 724 ngày giao dịch) được đánh số từ 0

-723 với 6 cột (time, open, high, low, close, volume) Ngoại trừ cột time có kiểu dữliệu là Object (cụ thể là datetime) vì là ngày giao dịch thì các cột còn lại có kiểu dữliệu là int64 và tất cả các cột đều không có giá trị null

3.3 Process Diagram

Bài viết nhằm mục đích nghiên cứu và đánh giá mức độ hiệu quả của các mô hình AItrong việc ứng dụng tiến hành dự báo giá của các mã chứng khoán được niêm yết ởViệt Nam Nghiên cứu này đã sử dụng các phương pháp phân tích khác nhau, baogồm một số kỹ thuật ML truyền thống và kỹ thuật DL với khả năng học các cấu trúcthông tin phức tạp của bộ dữ liệu, đưa ra những dự đoán từ dữ liệu chứng khoán lịch

sử Quy trình tổng hợp của nghiên cứu sẽ được thể hiện ở Hình 2 dưới đây:

Trang 12

Hình 2: Quy trình tổng hợp của nghiên cứu

3.3.1 Gathering machine learning data

Dữ liệu lịch sử của mã chứng khoán VCB được lấy về thông qua thư viện vnstock.Thư viện vnstock cung cấp cho người dùng khả năng truy cập dữ liệu chứng khoánViệt Nam từ các nguồn cấp dữ liệu đáng tin cậy thông qua các API công khai Dữ liệunày có thể được sử dụng để tạo các đối tượng Pandas DataFrame trong môi trườngPython Dữ liệu lịch sử của mã chứng khoán VCB bao gồm thông tin về giá mở cửa làgiá được xác định tại thời điểm bắt đầu phiên giao dịch (open), giá cao nhất của cổphiếu trong một ngày giao dịch (high), giá thấp nhất của cổ phiếu trong một ngày giaodịch (low), giá đóng cửa của cổ phiếu, là giá được xác định tại thời điểm kết thúcphiên giao dịch (close), khối lượng giao dịch của cổ phiếu trong ngày giao dịch đượctính bằng số lượng cổ phiếu được mua và bán trong ngày (volume) Đặc điểm của bộ

dữ liệu đã được mô tả chi tiết ở phần 3.2.

3.3.2 Data pre-processing

Dữ liệu lịch sử chứng khoán sẽ được bóc tách để chỉ lấy ra thông số về giá đóng cửa(close) Thông số này được chúng tôi lựa chọn làm dữ liệu đầu vào để tiến hành dựđoán Bởi vì giá đóng cửa là giá trị cuối cùng của ngày giao dịch, phản ánh tổng hợptất cả các giao dịch diễn ra trong ngày, giá trị thể hiện xu hướng của thị trường trongngày Giá đóng cửa (close) được lựa chọn trong khoảng thời gian tốt nhất là trên hai

Trang 13

tháng vì dự đoán sẽ được dựa vào dữ liệu của sáu mươi ngày liên tiếp để dự đoán ragiá trị của ngày tiếp theo.

Hình 3: Minh hoạ dữ liệu đầu vào và đầu ra

Dữ liệu sau đó chuyển từ DataFrame thành mảng numpy để dễ dàng tiến hành chuẩnhóa và phân tách tập dữ liệu huấn luyện và tập dữ liệu kiểm tra Tập dữ liệu huấnluyện và kiểm tra được phân tách theo tỷ lệ lần lượt là 80% và 20% của bộ dữ liệu banđầu Thư viện sklearn được sử dụng để chuẩn hóa dữ liệu trong khoảng [0, 1] Việcchuẩn hóa dữ liệu này giúp cho mô hình học máy hoạt động hiệu quả hơn

3.3.3 Training model

3.3.3.1 Linear Regression

Chúng tôi tiến hành đào tạo và khớp mô hình hồi quy tuyến tính Dùng lớpLinearRegression trong thư viện scikit-learn của Python để áp dụng phương pháp bìnhphương tối thiểu tìm các hệ số tốt nhất cũng như tính toán giá trị chặn cho mô hìnhtuyến tính Sau đó, tiến hành huấn luyện mô hình tuyến tính trên tập dữ liệu đào tạovới tập dữ liệu đầu vào là các điểm dữ liệu lấy theo chuỗi 60 ngày liên tiếp và đầu ra

là giá của ngày tiếp theo, thực hiện tiếp tục cho đến hết tập dữ liệu đầu vào Tiếp tụcvới việc dự đoán đầu ra cho các điểm dữ liệu mới - dữ liệu của tập dữ liệu kiểm tradựa trên mô hình tuyến tính đã được huấn luyện Các dự đoán sau đó được chuyển đổingược để có được thang đo gốc của dữ liệu bởi vì ở bước tiền xử lý dữ liệu mục 3.3.2,

dữ liệu đã được chuyển hoá trong khoảng [0,1]

Trang 14

Hình 4: Giá trị dự đoán giá cổ phiếu của mô hình Linear Regression

3.3.3.2 Support Vector Machine (SVM)

Sử dụng các hàm cần thiết để tạo và huấn luyện mô hình SVM Khởi tạo mô hìnhthông qua khởi tạo đối tượng SVR với tham số kernel='linear' Tham số này xác địnhkernel được sử dụng để ánh xạ dữ liệu sang không gian mới Kernel là một hàm toánhọc ánh xạ dữ liệu gốc (linearly inseparable) sang một không gian có chiều cao hơn(potentially linearly separable) Điều này cho phép SVM phân loại các dữ liệu khôngthể tách biệt được một cách tuyến tính trong không gian ban đầu Trong trường hợpnày, kernel được sử dụng là 'linear', tức là mô hình SVM sẽ tìm một đường thẳng phântách các lớp dữ liệu Huấn luyện mô hình bằng cách sử dụng dữ liệu huấn luyện, dữliệu đầu vào được lấy từ tập dữ liệu huấn luyện và đầu ra tương tự như trên mô hìnhLinear Regression Sử dụng mô hình đã được huấn luyện để dự đoán giá trị cho dữliệu kiểm tra Hàm này được xây dựng dựa trên các vectơ hỗ trợ và kernel được sửdụng, cho phép mô hình dự đoán giá trị cho các điểm dữ liệu mới Vì dữ liệu đã đượcchuẩn hóa trước khi huấn luyện mô hình, cần phải chuyển đổi ngược các dự đoán vềthang đo gốc để có được kết quả thực tế Hình 5

Ngày đăng: 06/04/2024, 09:40

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Li, L., Wu, Y., Ou, Y., Li, Q., Zhou, Y., & Chen, D. (2017, October). Research on machine learning algorithms and feature extraction for time series. In 2017 IEEE 28th annual international symposium on personal, indoor, and mobile radio communications (PIMRC) (pp. 1-5). IEEE,https://doi.org/10.1109/PIMRC.2017.8292668 Link
[2] Vijh, M., Chandola, D., Tikkiwal, V. A., & Kumar, A. (2020). Stock closing price prediction using machine learning techniques. Procedia computer science, 167, 599-606, https://doi.org/10.1016/j.procs.2020.03.326 Link
[3] Liaw, A., & Wiener, M. (2002). Classification and regression by randomForest. R news, 2(3), 18-22, https://journal.r-project.org/articles/RN-2002-022/RN-2002-022.pdf Link
[6] Vijh, M., Chandola, D., Tikkiwal, V. A., & Kumar, A. (2020). Stock closing price prediction using machine learning techniques. Procedia computer science, 167, 599-606, https://doi.org/10.1016/j.procs.2020.03.326 Link
[7] Lawal, Z. K., Yassin, H., & Zakari, R. Y. (2020, December). Stock market prediction using supervised machine learning techniques: An overview. In 2020 IEEE Asia-Pacific Conference on Computer Science and Data Engineering (CSDE) (pp. 1-6). IEEE, https://www.researchgate.net/profile/Zaharaddeen-Lawal/publication/ Link
[8] Alkhatib, K., Najadat, H., Hmeidi, I., & Shatnawi, M. K. A. (2013). Stock price prediction using k-nearest neighbor (kNN) algorithm. International Journal of Business, Humanities and Technology, 3(3), 32-44,https://www.researchgate.net/publication/262456253_Stock_Price_Prediction_Using_K-Nearest_Neighbor_kNN_Algorithm Link
[9] Maulud, D., Abdulazeez, A. M. J. J. o. A. S., & Trends, T. (2020). A review on linear regression comprehensive in machine learning. 1(4), 140-147, https://doi.org/10.38094/jastt1457 Link
[10] Uyanık, G. K., & Güler, N. (2013). A study on multiple linear regression analysis. Procedia-Social and Behavioral Sciences, 106, 234-240, https://doi.org/10.1016/j.sbspro.2013.12.027 Link
[11] Understanding Linear Regression in Machine Learning: A Fundamental Tool for Predictive Modeling, https://www.linkedin.com/pulse/understanding-linear-regression-machine-learning-tool-jadhav Link
[12] Zhang, Z. (2016). Introduction to machine learning: k-nearest neighbors. Annals of translational medicine, 4(11),http://pzs.dstu.dp.ua/DataMining/svm/bibl/IntroToSVM.pdf Link
[13] MonkeyLearn. Support Vector Machines (SVM) Algorithm Explained, https://monkeylearn.com/blog/introduction-to-support-vector-machines-svm/ Link

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w