Chào mọi người hôm nay mình sẽ thử cài đặt Random Forest cho 1 mẫu dữ liệu mà mình thu được trên Kaggle nhằm phục vụ cho bài toán Demand Forecasting
(link https://www.kaggle.com/c/demand-forecasting-kernels-only/data 1 )
.jpeg)
1.Trực quan và khai phá dữ liệu
Dữ liệu bao gồm 50 item (mặt hàng), date (ngày bán ra), sales (số lượng bán ra trong ngày), store (cửa hàng bán mặt hàng đó) được thu thập từ 2013-2017 mục đích của mình là train được 1 model từ dữ liệu sale trong quá khứ predict được doanh số các sản phẩm trong tương lai.

- Tỉ lệ doanh số các sản phẩm được bán ra:

Nhận xét: Hầu hết sản phẩm bán ra đều với số lượng nhỏ, khoảng 92% nhỏ hơn 100, và doanh số trung bình khoảng 52. Do vậy khi xây dựng model cần chú ý điểm này (1)
Doanh số tại các cửa hàng:

Như ta có thể thấy cửa hàng có id 2 và 8 là có doanh số cao nhất, cửa hàng 5-7 có doanh thu thấp, dữ liệu này sẽ có ý nghĩa nhiều hơn với nhà bán lẻ nhằm đưa ra các giải pháp cụ thể.
Dữ liệu sale theo năm, quý, tháng và ngày trong tuần:


-Biến động doanh số suốt khoảng thời gian 2013-2017

-Biểu đồ xu hướng và tính thời vụ:

Như đã nói ở phần 1 ta có thể thấy từ 2013-2014 là giai đoạn tăng trưởng khá mạnh, giai đoạn giữa 2014-2015 ổn định và nhìn vào giai đoạn 2016-2017 cũng có thể đoán ra rằng 2018 sẽ là 1 năm tăng trưởng tốt vì vậy có thể dự đoán doanh số khá cao cho năm này.
Ta cũng xác định được tính mùa vụ: thường thì tháng 5-7 sẽ là thời điểm doanh số đạt đỉnh sau đó sẽ giảm vào cuối năm và đầu năm sau. Hơn nữa doanh số đạt đỉnh vào cuối tuần thấp nhất vào đầu tuần (lưu ý 2)
Tiếp theo mình xin phân tích doanh số của 5 mặt hàng bán chạy và 5 mặt hàng doanh số ít nhất từng năm





Ta có thể thấy top 5 items chạy nhất gần như không thay đổi và tỉ lệ bán ra của chúng cũng được giữ khá ổn định trong khi đó item 5; 4 và 1 có tình hình kinh doanh khá tệ tuy nhiên tỉ lệ của chúng cũng khá ổn định điều này giúp dễ dàng xây dựng 1 mô hình dự đoán hơn.
Có 1 điều cần chú ý nữa là những ngày nghỉ, mình đã quan sát và nhận ra là tại những ngày nghỉ doanh số thường tăng vọt hơn rất nhiều so với ngày bình thường do vậy những tháng có nhiều ngày nghỉ thường có doanh số cao đây cũng là 1 lưu ý.
2. Xây dưng mô hình
Trước tiên cần phải chuẩn hóa dữ liệu:
Ở đây cột date là kiểu ngày tháng không phù hợp cho nên mình sẽ thực hiện xuất ra các thuộc tính dẫn xuất để phù hợp hơn cho hoạt động của thuật giải nhé. Cụ thể ta sẽ xuất các thông tin về ngày, tháng, năm, thứ trong tuần, quý, ngày trong năm… Ta sẽ thu được các thuộc tính dẫn xuất như sau:
Tiếp đó mình dùng ma trận hiệp phương sai để tìm ra những thuộc tính quan trọng đối với kết quả sale : ứng với cột sales thuộc tính nào màu càng sáng càng quan trọng:
Cụ thể hơn mình tìm được 1 số thuộc tính quan trọng là : store, item, year, month, day, week, weekofyear, dayofweek, weekday, dayofyear, quarter. Sau đó mình tiếp tục loại bỏ các giá trị bị missing.
Model mình sử dụng là Random Forest, do mình nhận thấy dataset cũng khá đơn giản hơn nữa chiều tăng và các quy luật doanh số cũng khá ổn định nên mình nghĩ RD là đủ.
Ở đây file train.csv có hơn 90k hàng mình lấy 70k cho tập train và 20k cho tập test. X_train sẽ là dữ liệu bỏ cột sales và đương nhiên label sẽ chính là sales. Kết quả đạt score 0.9851 ở tập train và 0.9684 ở tập test 1 kết quả cũng khá ok.
Được rồi mình thử cải tiến 1 ít, như trên các thuộc tính mình chọn có 4 trường value dạng 0 hoặc 1 trong khi thuộc tính còn lại thì có nhiều giá trị tự nhiên khác vì vậy mình thử thêm chuẩn hóa dữ liệu về [0,1] xem. Cuối cùng thu được kết quả score 0.9885 ơ tập train và 0.9702 ở tập test kết quả có tăng nhưng không nhiều vì như nói ở trên tập dữ liệu này không quá phức tạp. Đến đây bài viết mình xin kết thúc hẹn gặp lại các bạn vào tuần tới.