GIỚI THIỆU TỔNG QUAN
Giới thiệu đề tài và lý do chọn đề tài
- Trong thời đại hiện đại, thị trường vàng không chỉ là một phần quan trọng của nền kinh tế toàn cầu mà còn là một trong những cơ hội đầu tư hấp dẫn Việc hiểu và dự đoán biến động của giá vàng có thể đóng vai trò quan trọng trong việc đưa ra quyết định đầu tư hiệu quả Thị trường vàng không chỉ ảnh hưởng đến các nhà đầu tư và các doanh nghiệp mà còn là một chỉ số quan trọng của sức khỏe kinh tế toàn cầu
Việc nắm bắt được xu hướng giá vàng có thể giúp dự báo được tình hình kinh tế và tài chính trong tương lai Mô hình dự đoán giá vàng có thể được áp dụng trong nhiều lĩnh vực khác nhau, từ đầu tư vàng đến quản lý rủi ro tài chính và dự báo kinh tế Việc phát triển một mô hình dự đoán giá vàng có thể mang lại lợi ích lớn cho cả cộng đồng đầu tư và kinh doanh, giúp họ đưa ra các quyết định thông minh và cân nhắc
- Mục tiêu của đề tài này là xây dựng một mô hình dự đoán giá vàng chính xác và tin cậy, dựa trên các phương pháp và kỹ thuật hiện đại của khoa học dữ liệu và machine learning Hy vọng rằng dự án này sẽ mang lại những kết quả tích cực và cung cấp cho cộng đồng một công cụ hữu ích để hiểu và dự đoán thị trường vàng.
Quy trình thực hiện
- Để triển khai xây dựng mô hình dự đoán giá vàng, nhóm nghiên cứu đã dựa theo các quy trình như sau:
+ Bước 1_Thu thập dữ liệu: Thu thập dữ liệu về giá vàng từ các nguồn tin cậy như trang web tài chính, cơ sở dữ liệu thị trường, hoặc API từ các sàn giao dịch Đây sẽ là cơ sở dữ liệu chính để có thể huấn luyện mô hình dự đoán trong tương lai
+ Bước 2_ Tiền xử lý dữ liệu: Tiền xử lý dữ liệu bằng cách loại bỏ các giá trị thiếu, chuẩn hóa dữ liệu, và chuyển đổi dữ liệu sang định dạng phù hợp cho việc huấn luyện mô hình Như vậy, dữ liệu sau khi thu thập sẽ bám sát hơn với mô hình, giúp giảm thiểu các sai số khi dự đoán do lỗi từ các dữ liệu cơ sở
5 + Bước 3_ Phân tích dữ liệu: Phân tích dữ liệu dựa vào các đặc trưng quan trọng ảnh hưởng đến giá vàng như: tỷ giá mua bán, tỷ giá hối đoái, chỉ số thị trường, lạm phát kinh tế,… Việc phân tích làm cho mô hình biết và hiểu được những đặc trưng nào là quan trọng để có thể dựa vào giá trị đó mà tiến hành huấn luyện
+ Bước 4_ Chia tập dữ liệu: Chia dữ liệu thành tập huấn luyện và tập kiểm tra để đánh giá hiệu suất của mô hình Bước này trong quy trình xây dựng mô hình ML là quan trọng để đảm bảo rằng mô hình của bạn được đánh giá một cách khách quan và có thể tổng quát hóa tốt cho dữ liệu mới
• Tập huấn luyện: Được sử dụng để huấn luyện mô hình Mô hình sẽ học từ các mẫu dữ liệu trong tập huấn luyện và điều chỉnh các tham số để phù hợp với dữ liệu
• Tập kiểm tra: Được sử dụng để đánh giá hiệu suất của mô hình Sau khi mô hình đã được huấn luyện, bạn sẽ sử dụng tập kiểm tra để đánh giá khả năng dự đoán của nó trên dữ liệu mới mà nó chưa từng thấy
+ Bước 5_ Tiến hành huấn luyện: Tiến hành huấn luyện mô hình từ dữ liệu ở “Tập huấn luyện” Tại đây cần tìm ra được đâu là thuật toán tối ưu nhất cho mô hình đang xây dựng Đối với mô hình dự đoán giá vàng, ba thuật toán Random Forest Regressor, Linear Regression, Kneighbors Regressor đang là tối ưu nhất để huấn luyện
+ Bước 6_Đánh giá mô hình: Sau khi huấn luyện, cần đánh giá hiệu suất của mô hình bằng cách sử dụng các tiêu chuẩn như Mean Absolute Error (MAE), Mean Squared Error (MSE) và R-squared (R²) trên tập kiểm tra
CƠ SỞ LÝ THUYẾT
Random Forest Regressor
- Random Forest Regressor: là một thuật toán trong ML thuộc nhóm Ensemble Learning, nó sử dụng “rừng” ngẫu nhiên để dự đoán giá trị của biến liên tục (hay còn gọi là biến mục tiêu) dựa trên các biến đặc trưng
- Random Forest Regressor hoạt động bằng cách tạo ra một tập hợp các cây quyết định, mỗi cây được huấn luyện trên các tập hợp con của dữ liệu gốc Trong quá trình huấn luyện, mỗi cây được xây dựng ngẫu nhiên chọn một tập hợp con các tính năng từ tập dữ liệu Tính ngẫu nhiên này giúp giảm thiểu việc trang bị quá mức và tăng khả năng khái quát hóa của mô hình Khi đưa ra dự đoán, Random Forest Regressor kết hợp kết quả đầu ra của tất cả các cây riêng lẻ để đưa ra dự đoán cuối cùng Tên của thuật toán xuất phát từ thực tế là nó giới thiệu tính ngẫu nhiên cả trong việc tạo ra cây quyết định và trong việc lựa chọn các tính năng
- Nó có hiệu suất dự đoán cao, thường vượt trội so với các phương pháp học máy khác do khả năng xử lý các khối lượng lớn và các tập dữ liệu phức tạp Nó có thể xử lý hiệu quả các dữ liệu bị thiếu và các dữ liệu ngoại lệ, giúp nó trở nên mạnh mẽ hơn trong việc tiếng ồn và sự không nhất quán Random Forest Regressor cũng cung cấp cơ chế lựa chọn tính năng nội tại, cho phép chúng tôi xác định các biến quan trọng nhất góp phần vào dự đoán
- Có một số lưu ý khi làm việc với Random Forest Regressor Đây là một phương pháp tập hợp, nó đòi hỏi nhiều tài nguyên tính toán hơn và có thể chậm hơn trong quá trình đào tạo và dự đoán so với các cây quyết định riêng lẻ Giải thích kết quả của mô hình có thể ít đơn giản hơn vì nó kết hợp nhiều cây Ngoài ra, Random Forest Regressor có xu hướng gặp khó khăn với các tập dữ liệu mất cân bằng, trong đó tầng lớp thiểu số có thể không được đại diện đầy đủ, có khả năng dẫn đến những dự đoán sai lệch
- Random Forest Regressor được tìm thấy ứng dụng trong nhiều lĩnh vực khác nhau trong các tình huống thực tế Trong chăm sóc sức khỏe, nó có thể được sử dụng để dự đoán kết quả bệnh, chẳng hạn như xác định nguy cơ cao bệnh nhân về các tình trạng cụ thể hoặc đánh giá sự thành công của một số phương pháp điều trị nhất định Trong tài chính, thuật toán được sử dụng để chấm điểm tín dụng, phát hiện gian lận và dự đoán thị trường chứng khoán Nó cũng tìm thấy ứng dụng trong mô hình sinh thái, phân khúc khách hàng, phân tích tình cảm và nhiều các lĩnh vực khác yêu cầu dự đoán chính xác và hiểu biết sâu sắc từ các bộ dữ liệu phức tạp
Linear Regression
- Thuật toán Linear Regression là một phương pháp trong thống kê và ML được sử dụng để dự đoán giá trị của một biến phụ thuộc dựa trên các biến độc lập Nó thường được sử dụng khi có một mối quan hệ tuyến tính giữa các biến độc lập và biến phụ thuộc
- Trong Linear Regression, chúng ta cố gắng tìm một đường thẳng (trong trường hợp đa chiều, đường phẳng hoặc siêu phẳng) sao cho tổng bình phương của sai số giữa giá trị dự đoán và giá trị thực tế là nhỏ nhất Điều này thường được thực hiện bằng cách sử dụng phương pháp của bình phương tối thiểu hay phương pháp tối ưu hóa để điều chỉnh các tham số của đường thẳng nhằm giảm thiểu sai số
- Đầu tiên, chúng ta cần có dữ liệu Dữ liệu bao gồm ít nhất một biến độc lập (hoặc nhiều biến độc lập trong trường hợp của Linear Regression đa chiều) và một biến phụ thuộc Mục tiêu của Linear Regression là tìm một đường thẳng sao cho tổng bình phương của các sai số giữa giá trị dự đoán và giá trị thực tế là nhỏ nhất Đường thẳng này được biểu diễn bởi một phương trình tuyến tính: y = mx + b
Trong đó: y là giá trị dự đoán m là hệ số góc của đường thẳng x là biến độc lập b là điểm cắt trục y
- Linear Regression là một trong những mô hình đơn giản nhất trong machine learning, dễ hiểu và dễ triển khai Người dùng không cần phải có kiến thức chuyên sâu về toán học hoặc lập trình phức tạp để sử dụng nó Mặc dù đơn giản, Linear Regression có thể được áp dụng trong nhiều bài toán khác nhau, từ dự đoán giá cổ phiếu đến dự báo doanh số bán hàng Phương trình tuyến tính của Linear Regression dễ dàng diễn giải Điều này có nghĩa là bạn có thể hiểu được cách mỗi biến độc lập ảnh hưởng đến biến phụ thuộc ra sao Trong các tình huống mà mối quan hệ giữa biến độc lập và biến phụ thuộc là tuyến tính và không có nhiều biến độc lập hoặc biến phụ thuộc phức tạp, Linear Regression có thể cho kết quả tốt
- Một trong những hạn chế lớn nhất của Linear Regression là nó giả định mối quan hệ giữa các biến là tuyến tính Trong thực tế, có nhiều tình huống mà mối quan hệ không phải lúc nào cũng là tuyến tính, và việc sử dụng Linear Regression có thể dẫn đến kết quả không chính xác Linear Regression nhạy cảm với nhiễu trong dữ liệu Nếu dữ liệu có các giá trị ngoại lệ (outliers), nó có thể ảnh hưởng đến mô hình một cách lớn và dẫn đến kết quả không chính xác Trong các tình huống mà mối quan hệ giữa biến độc lập và biến phụ thuộc là phức tạp, Linear Regression có thể không đủ mạnh mẽ để mô hình hóa mối quan hệ đó Linear Regression cũng có thể dẫn đến hiện tượng overfitting (quá mức) hoặc underfitting (thiếu mức) tùy thuộc vào việc mô hình có đủ phức tạp để biểu diễn mối quan hệ giữa các biến hay không
- Dự đoán giá nhà: Trong lĩnh vực bất động sản, Linear Regression có thể được sử dụng để dự đoán giá của các căn nhà dựa trên các yếu tố như diện tích, số phòng ngủ, vị trí, và các tiện ích xung quanh
- Dự báo doanh số bán hàng: Các doanh nghiệp có thể sử dụng Linear Regression để dự đoán doanh số bán hàng trong tương lai dựa trên các yếu tố như chiến lược tiếp thị, giá cả, và kinh tế chung
10 - Dự đoán lượng truy cập trang web: Trong marketing số, Linear Regression có thể được áp dụng để dự đoán lượng truy cập trang web dựa trên các chiến lược quảng cáo trực tuyến, nội dung, và các yếu tố khác
- Dự đoán doanh thu: Linear Regression có thể được sử dụng để dự đoán doanh thu của một công ty dựa trên các yếu tố như chi phí quảng cáo, số lượng khách hàng, và biến động của thị trường
K-Neighbors Regressor
- K-Neighbors Regressor là một thuật toán trong ML được sử dụng cho các bài toán dự đoán giá trị của biến liên tục dựa trên phương pháp "K-Nearest Neighbors" (KNN), tức là dự đoán giá trị mới dựa trên giá trị của các điểm dữ liệu lân cận gần nhất
- Thuật toán K-Nearest Neighbors (KNN) không cần quá trình huấn luyện như các thuật toán Supervised learning khác Thay vào đó, khi cần dự đoán giá trị cho một điểm dữ liệu mới, K-Neighbors Regressor sẽ tìm ra điểm dữ liệu gần nhất trong tập huấn luyện (theo độ đo khoảng cách) và sử dụng giá trị của các điểm này để tính toán giá trị dự đoán cho điểm mới
- K-Neighbors Regressor thường được sử dụng trong các tình huống mà không có sự giả định cụ thể về phân phối của dữ liệu và khi không có nhiều yếu tố phức tạp ảnh hưởng đến mối quan hệ giữa biến đầu vào và biến đầu ra Tuy nhiên, việc lựa chọn phù hợp và hiệu suất của thuật toán có thể phụ thuộc nhiều vào đặc điểm của dữ liệu và cần được kiểm tra và điều chỉnh một cách cẩn thận
- KNN là một thuật toán đơn giản và dễ hiểu Không cần quá nhiều giả định về dữ liệu hoặc quá trình huấn luyện, điều này làm cho việc triển khai KNN trở nên đơn giản KNN không yêu cầu quá trình huấn luyện phức tạp Một khi đã có dữ liệu huấn luyện, không cần phải tiến hành bất kỳ xử lý nào để huấn luyện mô hình KNN có thể được sử dụng cho cả bài toán phân loại (classification) và bài toán dự đoán (regression) Nó cũng có thể được áp dụng cho các bài toán có số lượng biến đầu vào lớn Nó thường hoạt động tốt với các tập dữ liệu nhỏ hoặc có cấu trúc đơn giản, nơi các mối quan hệ giữa các biến đầu vào và biến đầu ra là rõ ràng
- KNN yêu cầu tính toán khoảng cách giữa điểm dữ liệu dự đoán và tất cả các điểm trong tập huấn luyện Điều này có thể làm cho việc dự đoán trở nên chậm chạp, đặc biệt là với các tập dữ liệu lớn KNN có thể không hiệu quả khi một số biến đầu vào không quan trọng hoặc không ảnh hưởng đến kết quả dự đoán Việc này có thể làm tăng độ phức tạp của mô hình mà không cải thiện hiệu suất Việc lựa chọn số lượng điểm láng giềng K là một thách thức Một giá trị K không phù hợp có thể dẫn đến overfitting hoặc underfitting của mô hình KNN không hoạt động tốt trên các tập dữ liệu có phân phối không đồng đều, trong đó có quá nhiều điểm dữ liệu trong một lớp và quá ít điểm dữ liệu trong các lớp khác
- Thuật toán K-Nearest Neighbors có thể được sử dụng trong các hệ thống nhận diện vật thể để phân loại các đối tượng trong hình ảnh dựa trên đặc trưng của chúng
Như được sử dụng trong phân tích hình ảnh y tế để phát hiện các bất thường hoặc các điểm dữ liệu nổi bật trong hình ảnh y tế Bên cạnh đó, KNN có thể được sử dụng để xác định và loại bỏ nhiễu từ dữ liệu bằng cách xác định các điểm nhiễu dựa trên khoảng cách tới các điểm lân cận Nó có thể được sử dụng để phân tích cấu trúc không gian của dữ liệu bằng cách ánh xạ các điểm dữ liệu vào không gian nhiều chiều và xác định mối quan hệ giữa các điểm
DỮ LIỆU HUẤN LUYỆN
Mô tả về dữ liệu huấn luyện và nguồn của dữ liệu huấn luyện
- Trong dự án này, chúng em sử dụng tập dữ liệu “Gold Price Data” được lấy từ Kaggle Đây là một tập dữ liệu về các giá trị của một số chỉ số tài chính quan trọng và tỷ giá trao đổi ngoại tệ Cụ thể, nó chứa thông tin về các yếu tố sau: Date (Ngày), SPX (Chỉ số S&P 500), GLD (Giá quỹ ETF GLD), USO (Giá quỹ ETF USO), SLV (Giá quỹ
ETF SLV), EUR/USD (Tỷ giá ngoại tệ EUR/USD) Tập dữ liệu này có thể được sử dụng để xây dựng các mô hình học máy nhằm dự đoán giá vàng dựa trên các chỉ số tài chính được cung cấp trong dataset Mô hình này có thể mang lại nhiều lợi ích, đặc biệt trong lĩnh vực tài chính và đầu tư Cụ thể hơn nó sẽ giúp cho các nhà đầu tư nghiên cứu kỹ càng và đưa ra các chiến lược đầu tư thông minh hơn.
Mô tả các đặc trưng đầu vào và đầu ra
- Date (Ngày): Đây là cột chứa Thời gian các giá trị được ghi nhận, giúp theo dõi sự biến động theo thời gian Có thể được sử dụng để phân tích xu hướng theo thời gian
Ngày được định dạng theo MM/DD/YYYY (tháng/ngày/năm)
- SPX (Chỉ số S&P 500): Chỉ số S&P 500 là một chỉ số thị trường chứng khoán đo lường hiệu suất của 500 công ty lớn nhất được niêm yết trên các sàn giao dịch
14 chứng khoán ở Hoa Kỳ Chỉ số này được sử dụng rộng rãi như một thước đo chính của thị trường chứng khoán Hoa Kỳ
- Giá quỹ ETF GLD (Gold): Đây là giá của quỹ hoán đổi danh mục (ETF) SPDR Gold Shares (GLD) Quỹ này theo dõi giá vàng và cho phép các nhà đầu tư mua cổ phần của quỹ thay vì mua vàng vật chất
- Giá quỹ ETF USO (Dầu): Đây là giá của quỹ hoán đổi danh mục (ETF) United States Oil Fund (USO) Quỹ này theo dõi giá dầu thô và cho phép các nhà đầu tư mua cổ phần của quỹ thay vì mua dầu thô vật chất
- Giá quỹ ETF SLV (Bạc): Đây là giá của quỹ hoán đổi danh mục (ETF) iShares Silver Trust (SLV) Quỹ này theo dõi giá bạc và cho phép các nhà đầu tư mua cổ phần của quỹ thay vì mua bạc vật chất
- EUR/USD (Tỷ giá ngoại tệ EUR/USD): Đây là tỷ giá hối đoái giữa đồng Euro (EUR) và đồng Đô la Mỹ (USD) Tỷ giá này cho biết số lượng Đô la Mỹ cần thiết để mua một Euro
- Đầu ra cụ thể sẽ phụ thuộc vào mục tiêu phân tích hoặc dự đoán Cụ thể hơn là dự báo giá của một trong các chỉ số tài chính (SPX, GLD, USO, SLV) hoặc dự báo tỷ giá hối đoái EUR/USD Ở đây, tụi em chọn dự đoán giá vàng.
Phân tích về cấu trúc và tính chất của tập dữ liệu
*Cấu trúc của tập dữ liệu:
- Dạng dữ liệu: Bảng - Số lượng cột: 6 cột (1 cột về thời gian và 5 cột về giá trị tài chính) - Số lượng hàng: 2290 hàng
*Tính chất của tập dữ liệu:
15 + Mức độ biến động: Liên tục theo ngày - SPX, GLD, USO, SLV, EUR/USD:
+ Mức độ biến động: Các giá trị biến động theo thời gian, phản ánh sự thay đổi của thị trường tài chính và các yếu tố kinh tế
• SPX: Có thể biến động mạnh trong các giai đoạn khủng hoảng tài chính hoặc tăng trưởng kinh tế
• GLD: Thường có xu hướng ngược chiều với các chỉ số chứng khoán trong thời kỳ bất ổn
• USO: Bị ảnh hưởng mạnh bởi giá dầu toàn cầu, chính sách của OPEC và các sự kiện địa chính trị
• SLV: Biến động theo giá bạc, có thể có mối tương quan với GLD
• EUR/USD: Bị ảnh hưởng bởi chính sách tiền tệ, sự khác biệt lãi suất giữa Eurozone và Mỹ, và các yếu tố kinh tế vĩ mô khác.
Các bước tiền xử lý dữ liệu trước khi đưa vào huấn luyện mô hình
- Đọc dữ liệu: Đọc dữ liệu từ file CSV vào một DataFrame của pandas
+ Hiển thị 5 hàng đầu tiên của DataFrame Giúp kiểm tra nhanh cấu trúc và các giá trị đầu tiên của dữ liệu
16 + Hiển thị 5 hàng cuối cùng của DataFrame Kiểm tra các giá trị cuối cùng để đảm bảo dữ liệu đã được đọc đúng và đầy đủ
+ Hiển thị kích thước của DataFrame (số hàng và số cột) Trả về một tuple gồm (số hàng, số cột), giúp hiểu rõ quy mô của dữ liệu
+ Hiển thị thông tin tổng quan về DataFrame Cung cấp thông tin về các cột, loại dữ liệu, và số lượng giá trị không rỗng trong mỗi cột
+ Kiểm tra và đếm số lượng giá trị bị thiếu trong mỗi cột Trả về một Series với số lượng giá trị bị thiếu (null) trong mỗi cột, giúp nhận diện các cột cần xử lý thiếu dữ liệu
17 + Tạo ra một bảng thống kê mô tả các đặc trưng cơ bản của dữ liệu số Cung cấp các thống kê như trung bình (mean), độ lệch chuẩn (std), giá trị tối thiểu (min), các percentiles (25%, 50%, 75%), và giá trị tối đa (max)
- Loại bỏ cột không cần thiết: Loại bỏ cột 'Date' khỏi DataFrame và tạo ra một
DataFrame mới với cột 'Date' bị loại bỏ, vì cột này không cần thiết cho các phân tích tương quan
- Tính toán ma trận tương quan: Tính toán ma trận tương quan giữa các cột trong DataFrame Tính toán hệ số tương quan giữa các cột số, cho biết mức độ và hướng mối quan hệ giữa các biến
18 - Vẽ ma trận tương quan: Vẽ biểu đồ ma trận tương quan dưới dạng heatmap
- In ra hệ số tương quan giữa GLD và các cột khác: Giúp kiểm tra nhanh mối quan hệ giữa GLD và các biến số khác trong dữ liệu
19 - Vẽ biểu đồ phân phối giá trị GLD: Sử dụng seaborn để tạo một biểu đồ phân phối giúp trực quan hóa phân phối của giá GLD
- Tách dữ liệu thành đầu vào (X) và đầu ra (Y): (X) chứa tất cả các cột ngoại trừ 'Date' và 'GLD', (Y) chứa chỉ cột 'GLD' Việc này chuẩn bị dữ liệu cho quá trình huấn luyện mô hình, với (X) là đầu vào và (Y) là mục tiêu dự đoán
- Chia dữ liệu thành tập huấn luyện và tập kiểm tra: Với 80% cho huấn luyện và 20% cho kiểm tra Random_state = 2 đảm bảo việc chia dữ liệu là ngẫu nhiên nhưng tái lập lại được để có kết quả nhất quán khi chạy lại
LƯU ĐỒ THUẬT TOÁN ĐỂ HUẤN LUYỆN MÔ HÌNH
Lưu đồ giải thuật
Giải thích hoạt động của lưu đồ giải thuật
- Thực hiện các import cần thiết cho pandas, numpy, matplotlib, seaborn, và các mô hình học máy từ sklearn
2 Nhập dữ liệu và tiền xử lý dữ liệu:
- Đọc dữ liệu từ file CSV vào DataFrame
- Hiển thị các thông tin cơ bản của dữ liệu nhằm mục đích kiểm tra dữ liệu để hiểu cấu trúc và tính chất
- Tính toán ma trận tương quan giữa các biến
- Vẽ biểu đồ heatmap của ma trận tương quan để trực quan hóa mối quan hệ giữa các biến
- Vẽ biểu đồ phân phối của giá GLD
3 Chia dữ liệu thành tập huấn luyện và kiểm tra:
- Tách dữ liệu thành các biến đầu vào (features) và biến mục tiêu (target)
- Chia dữ liệu thành tập huấn luyện và tập kiểm tra
- Huấn luyện và dự đoán với các mô hình học máy khác nhau (Random Forest, Linear Regression, KNN)
- Đánh giá hiệu suất của các mô hình bằng các chỉ số như MAE, MSE, và R-squared
- Quy trình kết thúc sau khi các mô hình được đánh giá
CODE CHƯƠNG TRÌNH HUẤN LUYỆN
Nhập thư viện
- Nhập các thư viện cần thiết cho việc xây dựng mô hình huấn luyện:
• numpy: Thư viện tính toán mảng và số học
• pandas: Thư viện xử lý và phân tích dữ liệu
• matplotlib.pyplot: Thư viện vẽ biểu đồ
• seaborn: Thư viện vẽ biểu đồ nâng cao dựa trên matplotlib
• sklearn.metrics: Cung cấp các hàm tính toán chỉ số đánh giá mô hình
• sklearn.model_selection.train_test_split: Chia dữ liệu thành tập huấn luyện và kiểm tra
• sklearn.ensemble.RandomForestRegressor: Mô hình học máy Random Forest để hồi quy
• sklearn.linear_model.LinearRegression: Mô hình học máy Linear Regression
• sklearn.neighbors.KNeighborsRegressor: Mô hình học máy K-Nearest
Neighbors (KNN) để hồi quy
*Code nguồn có bổ sung thêm hai thư viện Linear Regression và K-Nearest Neighbors.
Đọc file dữ liệu và hiển thị các thông tin cần thiết
- Đọc dữ liệu từ file “gld_price_data.csv” vào DataFrame của pandas
23 - gold_data.head(): Hiển thị 5 hàng đầu tiên của DataFrame Giúp kiểm tra nhanh cấu trúc và các giá trị đầu tiên của dữ liệu
- gold_data.tail(): Hiển thị 5 hàng cuối cùng của DataFrame Kiểm tra các giá trị cuối cùng để đảm bảo dữ liệu đã được đọc đúng và đầy đủ
- gold_data.shape: Hiển thị kích thước của DataFrame (số hàng, số cột)
- gold_data.info(): Hiển thị thông tin tổng quan về DataFrame Cung cấp thông tin về các cột, loại dữ liệu, và số lượng giá trị không rỗng trong mỗi cột
- gold_data.isnull().sum(): Đếm số lượng giá trị bị thiếu trong mỗi cột
- gold_data.describe(): Tạo ra một bảng thống kê mô tả các đặc trưng cơ bản của dữ liệu số Cung cấp các thống kê như trung bình (mean), độ lệch chuẩn (std), giá trị tối thiểu (min), các percentiles (25%, 50%, 75%), và giá trị tối đa (max)
Tiền xử lý dữ liệu
- Tính toán ma trận tương quan:
• date_column = 'Date': Đặt tên cột 'Date' vào biến date_column
• gold_data_temp = gold_data.drop(columns=[date_column]): Tạo DataFrame mới mà không có cột 'Date'
• correlation = gold_data_temp.corr(): Tính toán ma trận tương quan giữa các cột số
• print(correlation): In ra ma trận tương quan
*Code nguồn cải tiến thành tính ma trận tương quan của DataFrame không có cột Date
- Vẽ biểu đồ ma trận tương quan:
• plt.figure(figsize = (8,8)): Tạo biểu đồ với kích thước 8x8 inches
• sns.heatmap(correlation, cbar=True, square=True, fmt='.1f', annot=True, annot_kws={'size':8}, cmap='Blues'): Vẽ biểu đồ heatmap của ma trận tương quan với thanh màu (color bar), các ô trong heatmap có hình vuông, các giá trị sẽ được hiển thị với 1 chữ số thập phân, hiển thị giá trị số của hệ số tương quan trên từng ô của heatmap, kích thước phông chữ của các giá trị chú thích là 8 và bảng màu 'Blues' để biểu diễn giá trị
- print(correlation['GLD']): In ra hệ số tương quan giữa GLD và các cột khác
Giúp kiểm tra nhanh mối quan hệ giữa GLD và các biến số khác trong dữ liệu
- sns.distplot(gold_data['GLD'],color='green'): Vẽ biểu đồ phân phối của giá GLD với màu xanh lá cây
Chia dữ liệu
- Tách dữ liệu thành biến đầu vào và biến mục tiêu:
• X = gold_data.drop(['Date','GLD'],axis=1): Biến đầu vào (features) không bao gồm cột 'Date' và 'GLD'
• Y = gold_data['GLD']: Biến mục tiêu (target) là cột 'GLD'
• print(X): Hiển thị các biến đầu vào
• print(Y): Hiển thị biến mục tiêu
- Chia dữ liệu thành tập huấn luyện và kiểm tra:
• X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state=2): Chia dữ liệu thành tập huấn luyện (80%) và tập kiểm tra (20%), với seed ngẫu nhiên là 2 để đảm bảo kết quả tái lập lại được
Huấn luyện mô hình
- Huấn luyện mô hình sử dụng thuật toán Random Forest Regressor:
• regressor = RandomForestRegressor(n_estimators0): Khởi tạo mô hình Random Forest với 100 cây quyết định
• regressor.fit(X_train,Y_train): Huấn luyện mô hình trên tập huấn luyện
- Dự đoán với mô hình với Random Forest Regressor:
• test_data_prediction = regressor.predict(X_test): Dự đoán giá trị trên tập kiểm tra
• print(test_data_prediction): In ra các giá trị dự đoán
- Huấn luyện mô hình sử dụng thuật toán Linear Regression:
• linear_regressor = LinearRegression(): Khởi tạo mô hình Linear Regression
• linear_regressor.fit(X_train, Y_train): Huấn luyện mô hình trên tập huấn luyện
- Dự đoán với mô hình với Linear Regression:
• linear_pred = linear_regressor.predict(X_test): Dự đoán giá trị trên tập kiểm tra
• print(linear_pred): In ra các giá trị dự đoán
30 - Huấn luyện mô hình sử dụng thuật toán K-Neighbors Regressor:
• knn_regressor = KNeighborsRegressor(n_neighbors=5): Khởi tạo mô hình
K-Neighbors Regressor với số lượng láng giềng (neighbors) là 5
• knn_regressor.fit(X_train, Y_train): Huấn luyện mô hình trên tập huấn luyện
- Dự đoán với mô hình với K-Neighbors Regressor:
• knn_pred = knn_regressor.predict(X_test): Dự đoán giá trị trên tập kiểm tra
• print(knn_pred): In ra các giá trị dự đoán
Đánh giá chất lượng mô hình
- Vẽ biểu đồ so sánh giữa giá trị thực tế (Actual Value) và giá trị dự đoán (Predicted Value) của mô hình tương ứng với ba thuật toán Random Forest Regressor, Linear Regression, K-Neighbors Regressor:
• Y_test = list(Y_test): Chuyển đổi biến Y_test từ kiểu dữ liệu (thường là Series của pandas) sang danh sách (list) của Python
• plt.figure(figsize=(10, 6)): Tạo một figure mới với kích thước 10 inch (chiều rộng) x 6 inch (chiều cao)
• plt.scatter(range(len(Y_test)), Y_test, color='blue', label='Actual Value'): Vẽ biểu đồ scatter (điểm) của giá trị thực tế (Actual Value)
+ range(len(Y_test)): Trục x, đại diện cho chỉ số của mỗi điểm dữ liệu
+ Y_test: Trục y, đại diện cho giá trị thực tế của GLD
+ color='blue': Màu của các điểm là màu xanh dương
31 + label='Actual Value': Nhãn của các điểm dữ liệu thực tế, sẽ xuất hiện trong phần chú thích (legend)
• plt.plot(range(len(Y_test)), test_data_prediction, color='green', label='Random Forest Regressor Predicted Value'): Vẽ biểu đồ đường của giá trị dự đoán (Predicted Value) từ mô hình Random Forest
+ range(len(Y_test)): Trục x, đại diện cho chỉ số của mỗi điểm dữ liệu
+ test_data_prediction: Trục y, đại diện cho giá trị dự đoán của GLD từ mô hình Random Forest
+ color='green': Màu của đường là màu xanh lá cây
+ label='RandomForest Regressor Predicted Value': Nhãn của đường dữ liệu dự đoán, sẽ xuất hiện trong phần chú thích (legend)
• plt.title('RandomForest Regressor: Actual Price vs Predicted Price'): Thêm tiêu đề cho biểu đồ
• plt.xlabel('Number of values'): Thêm nhãn cho trục x (số lượng giá trị)
• plt.ylabel('GLD Price'): Thêm nhãn cho trục y (giá GLD)
• plt.legend(): Hiển thị chú thích (legend) cho biểu đồ, giúp phân biệt giữa giá trị thực tế và giá trị dự đoán
• plt.show(): Hiển thị biểu đồ
- Tính toán và cho hiển thị các chỉ số đánh giá MAE, MSE và R-squared của mô hình tương ứng với ba thuật toán Random Forest Regressor, Linear Regression, K-Neighbors Regressor:
• MAE_RF = metrics.mean_absolute_error(Y_test, test_data_prediction): Tính toán Mean Absolute Error (MAE) giữa giá trị thực tế và giá trị dự đoán
• print("Mean Absolute Error (MAE) of Random Forest Regressor:", MAE_RF):
In ra giá trị MAE
• MSE_RF = metrics.mean_squared_error(Y_test, test_data_prediction): Tính toán Mean Squared Error (MSE) giữa giá trị thực tế và giá trị dự đoán
• print("Mean Squared Error (MSE) of Random Forest Regressor:", MSE_RF): In ra giá trị MSE
• R_squared_RF = metrics.r2_score(Y_test, test_data_prediction): Tính toán hệ số xác định R-squared (R²) giữa giá trị thực tế và giá trị dự đoán
• print("R-squared (R^2) of Random Forest Regressor:", R_squared_RF): In ra giá trị R²
PHÂN TÍCH ĐÁNH GIÁ KẾT QUẢ MÔ HÌNH ĐẠT ĐƯỢC
Random Forest Regressor
• Các điểm màu xanh dương (Actual Value): Giá trị thực tế của GLD từ tập kiểm tra
• Đường màu xanh lá cây (RandomForest Regressor Predicted Value): Giá trị dự đoán của GLD từ mô hình Random Forest Regressor
- Từ biểu đồ trên, ta có thể thấy được:
• Các điểm màu xanh dương (giá trị thực tế) và đường màu xanh lá cây (giá trị dự đoán) có sự trùng khớp khá tốt, cho thấy mô hình Random Forest dự đoán gần với giá trị thực tế
• Biểu đồ thể hiện sự biến động giá GLD khá lớn, từ khoảng dưới 80 đến trên 180
• Mặc dù có sự biến động lớn, đường dự đoán vẫn theo sát xu hướng của giá trị thực tế, chứng tỏ mô hình có khả năng xử lý tốt các biến động trong dữ liệu
• Một số đoạn trên biểu đồ, giá trị dự đoán có sự chênh lệch so với giá trị thực tế, đặc biệt ở các điểm cực trị (cao nhất hoặc thấp nhất)
• Tuy nhiên, nhìn chung, mức độ sai số không quá lớn và mô hình vẫn duy trì được độ chính xác cao trong phần lớn các trường hợp
- Mean Absolute Error (MAE) of Random Forest Regressor: 1.3404583615065466 có nghĩa là trung bình dự đoán của mô hình sai lệch khoảng 1.34 đơn vị so với giá trị thực tế của GLD
- Mean Squared Error (MSE) of Random Forest Regressor: 5.52049095470373 có nghĩa là trung bình bình phương sai số giữa dự đoán của mô hình và giá trị thực tế của GLD là 5.52
- R-squared (R^2) of Random Forest Regressor: 0.9895334932597276 có nghĩa là 98.95% biến động của giá trị GLD có thể được dự đoán bởi mô hình Random Forest, cho thấy mô hình có độ chính xác cao.
Linear Regression
• Các điểm màu xanh dương (Actual Value): Giá trị thực tế của GLD từ tập kiểm tra
• Đường màu xanh lá cây (RandomForest Regressor Predicted Value): Giá trị dự đoán của GLD từ mô hình Random Forest Regressor
- Từ biểu đồ trên, ta có thể thấy được:
• Các điểm màu xanh dương (giá trị thực tế) và đường màu xanh lá cây (giá trị dự đoán) có sự trùng khớp nhất định
• Đường màu xanh lá cây có xu hướng theo sau các điểm màu xanh dương nhưng với nhiều biến động lớn hơn, cho thấy mô hình Linear Regression không dự đoán chính xác bằng Random Forest
• Biểu đồ thể hiện sự biến động giá GLD khá lớn, từ khoảng dưới 80 đến trên 180
• Mặc dù có sự biến động lớn nhưng đường dự đoán vẫn không theo sát xu hướng của giá trị thực tế như trong mô hình Random Forest, chứng tỏ Linear Regression không xử lý tốt các biến động trong dữ liệu
• Có nhiều đoạn trên biểu đồ mà giá trị dự đoán có sự chênh lệch rõ rệt so với giá trị thực tế
• Đặc biệt ở các đoạn giá trị thực tế cao hoặc thấp, đường dự đoán có xu hướng không theo kịp, cho thấy mô hình Linear Regression gặp khó khăn trong việc dự đoán các giá trị cực trị
- Mean Absolute Error (MAE) of Linear Regression: 5.9114867357777605 có nghĩa là trung bình dự đoán của mô hình sai lệch khoảng 5.91 đơn vị so với giá trị thực tế của GLD
- Mean Squared Error (MSE) of Linear Regression: 70.78890079721535 có nghĩa là trung bình bình phương sai số giữa dự đoán của mô hình và giá trị thực tế của GLD là 70.78
- R-squared (R^2) of Linear Regression: 0.8657886565869236 có nghĩa là 86.57% biến động của giá trị GLD có thể được dự đoán bởi mô hình Linear Regression, cho thấy mô hình có độ chính xác cao nhưng kém hơn mô hình Random Forest
K-Neighbors Regressor
• Các điểm màu xanh dương (Actual Value): Giá trị thực tế của GLD từ tập kiểm tra
• Đường màu xanh lá cây (RandomForest Regressor Predicted Value): Giá trị dự đoán của GLD từ mô hình Random Forest Regressor
- Từ biểu đồ trên, ta có thể thấy được:
• Đường màu xanh lá cây theo sát các điểm màu xanh dương, nhưng có nhiều dao động và biến động hơn so với mô hình Random Forest, cho thấy mô hình KNN cũng dự đoán tốt nhưng vẫn có những sai lệch nhất định
• Biểu đồ thể hiện sự biến động giá GLD khá lớn, từ khoảng dưới 80 đến trên 180
• Mặc dù có sự biến động lớn, đường dự đoán của KNN có thể theo sát xu hướng của giá trị thực tế hơn so với Linear Regression, nhưng vẫn kém hơn so với Random Forest
• Có nhiều đoạn trên biểu đồ mà giá trị dự đoán có sự chênh lệch rõ rệt so với giá trị thực tế, đặc biệt ở các giá trị cực trị
• Tuy nhiên, sự sai lệch này không quá lớn và phân bố đều, cho thấy KNN xử lý tốt hơn Linear Regression nhưng vẫn có một số hạn chế so với Random Forest
- Mean Absolute Error (MAE) of KNN Regression: 3.975908673362446 có nghĩa là trung bình dự đoán của mô hình sai lệch khoảng 3.97 đơn vị so với giá trị thực tế của GLD
- Mean Squared Error (MSE) of KNN Regression: 34.86469067219383 có nghĩa là trung bình bình phương sai số giữa dự đoán của mô hình và giá trị thực tế của GLD là 34.86
- R-squared (R^2) of KNN Regression: 0.9338987197131254 có nghĩa là 93.38% biến động của giá trị GLD có thể được dự đoán bởi mô hình KNN Regression, cho thấy mô hình có độ chính xác cao tốt hơn Linear Regression nhưng kém hơn Random Forest.
So sánh, đánh giá và lựa chọn thuật toán tốt nhất cho mô hình
*So sánh, đánh giá các thuật toán sử dụng cho mô hình:
• Mô hình Random Forest có MAE nhỏ nhất, cho thấy dự đoán của nó gần với giá trị thực tế nhất
• Mô hình Linear Regression có MAE lớn nhất, cho thấy sai lệch trung bình giữa giá trị dự đoán và giá trị thực tế là lớn nhất trong ba mô hình
• Mô hình KNN có MAE trung bình, tốt hơn Linear Regression nhưng kém hơn Random Forest
• MSE của Random Forest là nhỏ nhất, cho thấy nó xử lý tốt nhất các sai số lớn
• Mô hình Linear Regression có MSE lớn nhất, cho thấy sai lệch bình phương trung bình giữa giá trị dự đoán và giá trị thực tế là lớn nhất
• MSE của KNN trung bình, tốt hơn Linear Regression nhưng kém hơn Random Forest
• R² của Random Forest là cao nhất, gần với 1, cho thấy nó dự đoán được nhiều biến động của giá trị GLD nhất
• R² của Linear Regression là thấp nhất, cho thấy nó dự đoán được ít biến động của giá trị GLD nhất
• R² của KNN trung bình, tốt hơn Linear Regression nhưng kém hơn Random Forest
- Mô Hình Tốt Nhất: Random Forest Regressor
• MAE nhỏ nhất: Mô hình Random Forest có sai số tuyệt đối trung bình nhỏ nhất, cho thấy dự đoán của nó gần với giá trị thực tế nhất
• MSE nhỏ nhất: Mô hình Random Forest có sai số bình phương trung bình nhỏ nhất, cho thấy nó xử lý tốt nhất các sai số lớn và ít nhạy cảm với các giá trị ngoại lệ
• R² cao nhất: Mô hình Random Forest dự đoán được nhiều biến động của giá trị GLD nhất, chứng tỏ nó có độ chính xác cao trong việc dự đoán