Mô hình dự đoán giá vàng sử dụng thuật toán K-Neighbors Regressor

MỤC LỤC

Giới thiệu thuật toán

- 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.

Mô tả thuật toán

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 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ó 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 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.

Ứng dụng

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. 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.

DỮ LIỆU HUẤN LUYỆN

    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.

    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. 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. + 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ế.

    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. 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. - 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.

    - 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. - 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. 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.

    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

      - 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. - 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. - 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.

      - 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.

      CODE CHƯƠNG TRÌNH HUẤN LUYỆN

        - 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ố. • 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ố. - 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.

        • 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. • 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.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).

        + 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. + test_data_prediction: Trục y, đại diện cho giá trị dự đoán của GLD từ mô hình Random Forest.

        + 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.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.

        • 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. • 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. • 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.

        PHÂN TÍCH ĐÁNH GIÁ KẾT QUẢ MÔ HÌNH ĐẠT ĐƯỢC

        Random Forest Regressor

        • 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.

        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. • 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. • 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ị. • 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.

        • Đườ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. • 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.

        So sánh, đánh giá và lựa chọn thuật toán tốt nhất cho mô hình

        • 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.