[AIVIVN-bandwidth_prediction] 7th place solution - NN

bandwidth_prediction

#1

Kết quả của mình không được tốt lắm (khoảng 86% ở cả 2 bảng xếp hạng) và phương pháp cũng khá sơ sài (mình không dành nhiều thời gian để phân tích và hiểu dữ liệu, không giải quyết được vấn đề output của BANDWIDTH_TOTAL toàn 0). Thuật toán của mình gồm 3 phần: tiền xử lý dữ liệu, scale (đáng ra mình làm chung với bước tiền xử lý dữ liệu nhưng quên mất, sau mới thêm vào :slight_smile:) và build model.

  • Tiền xử lý dữ liệu: mình tạo thêm 1 số feature mới như năm, tháng, ngày, ngày trong tuần, ngày lễ, ngày tết và chuyển server_zone và server_name sang one-hot.
  • Scale: Mình dùng min_max scaler của sklearn.
  • Model: Mình build NN model sử dụng Keras với 2 output và MAPE loss (weight 80%, 20% giống metrics của cuộc thi). Kết quả: model của mình chỉ dự đoán được phần MAX_USER (mape trên validation và trên bảng điểm khoảng 30%), và thất bại trong việc dự đoán BANDWIDTH_TOTAL (tất cả output của BANDWIDTH_TOTAL là 0). Mình đoán do 1 số server ở một số thời điểm nhất định có giá trị BANDWIDTH_TOTAL rất nhỏ dẫn đến giá trị loss (mape) sẽ rất lớn và cuối cùng là model output tất cả 0 để tối thiểu hàm loss. Mình có nghĩ đến phương pháp xây dựng 2 model độc lập để predict BANDWIDTH_TOTAL, 1 model sẽ predict xác suất output lớn hơn 1 (sử dụng sigmoid và binary_crossentropy) và 1 model sẽ predict giá trị thực (sử dụng relu và mape và dữ liệu train sẽ được lọc bỏ những giá trị nhỏ hơn 1). Output cuối cùng sẽ là: (output1>0.5)*ouput2. Ý tưởng này không cải thiện được điểm trên bảng xếp hạng.

Code