Chương 6 Các giải pháp và đóng góp nổi bật
1.21 Xử lý dữ liệu bị thiếu
Dữ liệu quan trắc môi trường thường xuyên bị thiếu nhiều do nhiều tác động của yếu tố bên ngoài ảnh hưởng tới các cảm biến. Do đó, việc xử lý dữ liệu thiếu là rất quan trọng. Dữ liệu bị thiếu không thể huấn luyện cho mô hình đã đề xuất, vì vậy cần tìm phương pháp để điền các dữ liệu bị trống này. Một số phương pháp hay được sử dụng như là: lấy giá trị trung bình, lược bỏ các dòng bị thiếu, sử dụng một mô hình dự đoán để điền vào chỗ trống. Tuy nhiên vì đây là dữ liệu dạng chuỗi theo thời gian nên không thể sử dụng phương pháp lược bỏ các dòng dữ liệu chứa ô trống, điều đó sẽ làm ngắt quãng dòng thời gian và ảnh hưởng tới việc học. Em quyết định chọn phương pháp lấy giá trị trung bình và sử dụng một mô hình khác để dự đoán dữ liệu trống.
Với việc sử dụng giá trị trung bình, ưu điểm là nhanh, có thể đưa luôn vào mô hình. Nhưng nhược điểm lớn nhất khi quan sát dữ liệu đó là những chỗ trống dùng giá trị trung bình có thể chính là điểm nhiễu. Ví dụ nhiệt độ có giá trị từ từ 10 đến 40 độ, nhưng mùa đông có nhiệt độ từ 10 – 15 mà trong khoảng thời gian đó có dữ liệu bị thiếu. Thì lấy trung bình
toàn bộ dữ liệu sẽ là khoảng 20 độ, là một điểm nhiễu trong khoảng thời gian đó. Do đó, em chuyển sang cách dùng một mô hình học máy để điền vào chỗ trống.
Với phương pháp điền dữ liệu thiếu sử dụng mô hình học máy khác, em chọn Random Forest [15]. Random Forest là thuật toán bagging trong việc học máy kết hợp (đã được đề cập ở 1.9) giúp tránh overfitting. Sau khi sử dụng thuật toán này, kết dự đoán vẫn không cải thiện được mấy, thậm chí có trường hợp còn không tốt bằng việc sử dụng lấy giá trị trung bình.
Bảng 8 Độ chính xác hai phương pháp điền dữ liệu bị trống
Model Method MAE RMSE
Encoder – Decoder (BiLSTM) Random Forest 4.106 6.243 Mean 4.080 6.214 Encoder – Decoder (LSTM) Random Forest 4.330 6.390 Mean 3.988 6.116
Do đó, sau khi cài đặt thử nghiệm và tìm hiểu sâu hơn về Random Forest, nhận thấy rằng Random Forest không phù hợp cho việc xử lý dữ liệu trống ở bộ dữ liệu này:
• Để dự đoán một thuộc tính nào có chứa giá trị rỗng, cần phải chỉ ra các thuộc tính (không chứa dữ liệu rỗng) có ảnh hưởng tới thuộc tính đích cần dự đoán. Mà trong bộ dữ liệu, các thuộc tính đều bị chứa dữ liệu trống, do đó cần phải điền dữ liệu vào một số thuộc tính trước rồi mới có thể áp dụng mô hình. Như vậy nó tạo thành một vòng lặp.
• Theo như chính tác giả đã nêu về hai phương pháp sử dụng để điền dự liệu trống [16]: thứ nhất là lấy giá trị trung bình (giống với cách đã thử), thứ hai là tính giá trị trung bình của các giá trị lân cận và điền vào.
Vì vậy, em quyết định chọn XGBoost để xử lý dữ liệu. XGBoost sử dụng thuật toán boosting (đã nêu ở 1.9) giúp tăng độ chính xác và tránh overfitting. Bên cạnh đó, XGBoost không cần điền dữ liệu vào ô trống cũng có thể đưa ra kết quả dự đoán hay độ quan trọng của thuộc tính. XGBoost thậm chí còn được thiết kế để phù hợp với bài toán thiếu dữ liệu [17]. Tuy nhiên, việc đưa các thuộc tính nào vào sẽ ảnh hưởng đến kết quả dự đoán. Các
mô hình đã đề xuất trước đó mới chỉ ra các yếu tố sử dụng cho mô hình như nhiệt độ, hướng gió, độ ẩm mà không minh chứng bằng các con số.
Vấn đề kể trên đã dẫn đến một bài toán khác cần xử lý đó là dựa vào bộ dữ liệu, xác định các yếu tố hay các biến ảnh hưởng nhất tới chỉ số bụi mịn PM2.5 và PM10 giúp tăng độ chính xác.Chi tiết được trình bày ở mục 1.22 dưới đây.