STT | MSSV | Họ và tên | |
---|---|---|---|
01 | 20120328 | Hoàng Đức Nhật Minh | 20120328@student.hcmus.edu.vn |
02 | 20120224 | Trần Thị Mỹ Trinh | 20120224@student.hcmus.edu.vn |
03 | 20120210 | Trần Thị Kim Tiến | 20120210@student.hcmus.edu.vn |
04 | 20120307 | Phạm Gia Khiêm | 20120307@student.hcmus.edu.vn |
05 | 20120231 | Phan Huy Trường | 20120231@student.hcmus.edu.vn |
06 | 20120578 | Phạm Quốc Thái | 20120578@student.hcmus.edu.vn |
Trước khi thực hiện chọn ra mô hình tốt nhất, thì chúng em đã chia thành 2 nhóm để cùng thực hiện tiền xử lý, lựa chọn nhiều mô hình khác nhau theo cách khác nhau:
- Nhóm 1, bao gồm các thành viên:
- Hoàng Đức Nhật Minh
- Trần Thị Mỹ Trinh
- Phạm Quốc Thái
- Nhóm 2, bao gồm các thành viên:
- Phạm Gia Khiêm
- Trần Thị Kim Tiến
- Phan Huy Trường
Tên công việc | Nội dung chi tiết | NHÓM 1 | NHÓM 2 |
---|---|---|---|
Phân tích dữ liệu | Hoàng Đức Nhật Minh | Phan Huy Trường | |
Tiền xử lý dữ liệu | Hoàng Đức Nhật Minh Trần Thị Mỹ Trinh |
Phạm Gia Khiêm Phan Huy Trường |
|
Chọn mô hình | 1. Decision tree 2. Linear regression 3. Rigde regression 4. Lasso regression 5. XGBoost 6. LightGBM 7. Bagging 8. Stacking |
Phạm Quốc Thái Trần Thị Mỹ Trinh Phạm Quốc Thái Hoàng Đức Nhật Minh Hoàng Đức Nhật Minh |
Phạm Gia Khiêm Phạm Gia Khiêm Phan Huy Trường Phan Huy Trường Trần Thị Kim Tiến Trần Thị Kim Tiến Phạm Gia Khiêm |
Sau giai đoạn 1, nhóm đã họp bàn và chọn ra phương pháp tiền xử lý hiệu quả nhất là của NHÓM 1 và lựa chọn mô hình huấn luyện cho dữ liệu phù hợp nhất đó là các mô hình:
- Ridge regression
- Lasso regression
- XGBoost
- LightGBM
- Bagging
- Stacking
Sau khi lựa chọn mô hình, thì nhóm bắt đầu phân chia tiếp công việc như sau:
Tên công việc | Thành viên đảm nhiệm | Đánh giá |
---|---|---|
Tìm hyperparameter cho các mô hình | Phạm Gia Khiêm Hoàng Đức Nhật Minh |
100% |
Tìm hiểu Ridge Tìm hiểu Lasso |
Phạm Quốc Thái Phan Huy Trường |
100% |
Tìm hiểu XGBoost Tìm hiểu LightGBM |
Trần Thị Kim Tiến | 100% |
Làm slide thuyết trình | Trần Thị Mỹ Trinh Hoàng Đức Nhật Minh Trần Thị Kim Tiến Phạm Gia Khiêm Phan Huy Trường Phạm Quốc Thái |
100% |
Thuyết trình | Phạm Quốc Thái Trần Thị Kim Tiến |
100% |
Bộ dữ liệu này được lấy từ một cuộc thi của kaggle nhằm dự đoán giá nhà từ các thông tin thu thập được như là diện tích nhà, số phòng, tầng hầm,...
- Tên bộ dữ liệu: House Prices - Advanced Regression Techniques
- Đường dẫn của cuộc thi: https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/data
- train.csv - bộ dữ liệu huấn luyện
- test.csv - bộ dữ liệu kiểm thử
- data_description.txt - Toàn bộ những mô tả về thông tin của từng cột thuộc tính của dữ liệu
- sample_submission.csv - mẩu chuẩn để nộp bài lên kaggle
Giới thiệu sơ qua một vài trường dữ liệu của dữ liệu:
SalePrice
- Giá bán của ngôi nhà.OverallQual
- Chất lượng toàn bộ nội thất trong nhà.GrLivArea
- Tổng diện tích ngôi nhà từ mặt đất trở lên.YearBuilt
- số năm được sử dụng.YearRemodAdd
- Ngày sửa sang lại.TotalBsmtSF
- Tổng diện tích tầng hầm.FullBath
- Tổng số phòng tắm của ngôi nhà.
- Kích thước tập dữ liệu:
- Tập train: (1460, 80)
- Tập test: (1459, 79)
- Cả tập train và tập test có 79 đặc trưng (cột) độc lập trong đó:
- Có 37 cột là thuộc loại Numerical (Trong đó có cột output -
SalePrice
). - Có 43 cột là thuộc loại Categorical.
- Có 37 cột là thuộc loại Numerical (Trong đó có cột output -
- Xét dữ liệu thiếu:
- Tập train: Có 19 cột bị thiếu dữ liệu.
- Tập test: Có 33 cột bị thiếu dữ liệu.
- Xét độ tương quan của các biến numerical với SalePrice, ta thấy có một vài biến có độ tương quan > 0.5.
- Tuy nhiên, có một vài cặp independent variable tương quan mạnh với nhau:
TotalBsmtSF
-1stFlrSF
: Diện tích của basement area ~ Diện tích của tầng 1.YearBuilt
-GarageYrBlt
: Ngày nhà xây dựng ~ số năm mà cái Garage đã được sử dụng từ ngày xây dựngGrLivArea
-TotRmsAbvGrd
: Tổng diện tích ngôi nhà từ mặt đất trở lên ~ Tổng số phòng trong nhà ngoại trừ phòng tắm từ tầng mặt đất trở lên.GarageCars
-GarageArea
: Số lượng chiếc xe có thể để trong garage ~ kích thước garage
- Những biến này, ta sẽ bỏ đi 1 trong 2 vì biết được 1 biến ta có thể suy ra giá trị của biến còn lại, và tất nhiên ta sẽ giữ lại những biến nào có tương quan mạnh hơn với dependent variable. Đây gọi là vấn đề multicolinearity
Ta có 3 nhóm thuộc tính khác nhau về loại thuộc tính và giá trị định nghĩa của từng thuộc tính.
- Nhóm 1: Biến categorical với NA nghĩa là
None
, có nghĩa là không có. Cách xử lý: Thay thế những những vị trí có giá trị NA thành None. - Nhóm 2: Ngược lại với nhóm 1, biến categorical với NA không có nghĩa là
None
, có nghĩa là có. Thay thế những vị trí có giá trị NA thành mode (giá trị phổ biến) của cột thuộc tính đó. - Nhóm 3: Biến numerical với NA nghĩa là
0
, giá trị 0. Thay thế những vị trí có giá trị NA thành 0. - Trường hợp đặt biệt Cột thuộc tính LotFrontage ta sẽ thay th61 những vị trí có giá trị NA thành mean (giá trị trung vị) của cột thuộc tính LotFrontage.
Ta kiểm tra outlier ở các thuộc tính: GrLiveArea
, TotalBsmtSF
, Street
, LandContour
. Ta có thể nhận xét sơ lược:
- GrLiveArea: Có 2 dữ liệu nhiễu.
- TotalBsmtSF và Street: Chưa thể chắc chắn được là đó có phải là dữ liệu nhiễu hay không.
- LandContour: Những điểm dữ liệu được cho là outlier thực chất là sai vì những điểm đó còn bị chi phối bởi các thuộc tính khác.
Mã hóa cho ordinal categorical variable
YrSold
có thể tác động lớn tới giá (ví dụ năm đó khủng hoảng kinh tế, chiến tranh,...giá nhà có thể thấp). Do đó, ta chuyển chúng sang dạng categorical.MoSold
,MSSubClass
là những biến numeric nhưng không có ý nghĩa gì về mặt thứ tự nên ta chuyển nó sang dạng categorical.
- Chuẩn hoá cột Target: Một trong những cách để normalize right-skewd data là dùng log transformation vì giá trị lớn sẽ bị kéo về giữa. Tuy nhiên log(0) = nan, nên chúng ta sẽ dùng log(1 + x) để chuẩn hoá giá trị target (SalePrice).
- Bước tiếp theo, kiểm tra skewness của các numerical variable còn lại và dùng log transformation để chuẩn hóa.
- Nếu skewness <= -1 or >= 1, thì phân phối bị highly skewed.
- Nếu skewness nằm giữa -1 và -0.5 hoặc 0.5 và 1 thì phân phối bị moderately skewed.
- Nếu skewness nằm giữa -0.5 và 0.5 thì phân phối approximately symmetric.
Ngoại trừ Decision Tree và Random Forest, các thuật toán còn lại trong machine learning nên được standardize để mô hình nhanh hội tụ và ổn định.
Chuyển các dữ liệu từ Categorical sang Numerical.
Sau khi tiền xử lý dữ liệu, chúng ta có tập dữ liệu với kích thước mới:
- Tập train: (1460, 229)
- Tập test: (1459, 228)
Sau đó, ta sẽ ghi tập dữ liệu train và tập test mới này ra ngoài file khác và tiến đến quá trình chọn mô hình.
Lựa chọn mô hình: Có rất nhiều mô hình để thực hiện cho bộ dữ liệu này, ví dụ:
- Các mô hình cơ bản, đơn giản: Linear Regression, Random Forests Regressor
- Các mô hình phát triển hơn: Ridge, Lasso, ...
- Các mô hình nâng cao: GBoost, XGBoost, Light GBM, ...
Sử dụng các thông số tốt nhất của 4 mô hình Ridge, Lasso, XGBoost và LightGBM và kết hợp 4 mô hình này lại với nhau.
Có 2 cách kết hợp mô hình
- Dùng bagging, cho 4 mô hình huấn luyện song song với nhau và ta sẽ dùng trung bình cộng các kết quả của 4 mô hình.
- Kết quả thu được của hô mình Bagging là rất tốt (rmse = 0.11058).
- Dùng stacking để kết hợp các mô hình với base models là (Rigde, Lassso, XGBoost, LightGBM) và meta model là Ridge.
- Kết quả của mô hình này rất tốt, chênh lệch không nhiều so với Bagging (rmse = 0.1115).
Trong model evaluation, thường thì ta sẽ chia toàn bộ data làm 2 tập train và test. Tuy nhiên, đối với bộ dữ liệu này khá nhỏ, nên nếu chia như vậy, thì có lẽ mô hình sẽ dễ bị overfitting. Do đó, ta dùng cross-validation
là K-Fold với k = 5 để huấn luyện mô hình.
Đề bài yêu cầu đánh giá mô hình bằng độ đo RMSE, tuy nhiên do target variable đã được biến đổi qua log(1 + y), nên MSE cho log(1 + y) là MSLE - Mean Squared Logarithmic Error.
Với số điểm RMSE đạt được là 0.11973, thì thứ hạng mà nhóm đạt được là 228 / 4607 teams (chưa loại trừ các bài nộp gian lận).