Đang tải... (xem toàn văn)
dplyr: “ %>%” để kết hợp các hàm khác nhau trong R.hàm filter chọn các biến dựa trên giá trị của chúng Lọc ra các hàng nhất định đáp ứng các tiêu chí của bạn.gridExtra: Gói gridtrong R
Trang 1 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
BÀI TIỂU LUẬN NHÓM 4
Học phần: Nhập Môn Phân Tích Dữ Liệu Giảng viên hướng dẫn: Bình Vũ Ngọc
Nội dung đề tài : Boston Housing Data
Trang 2 Mục lục
Giới thiệu Boston Housing Price 3
Báo cáo vấn đề 3
Tạo giả thiết 4
Thư viện Mass chứa tập dữ liệu Boston 5
Liệt kê tên các biến thuộc tính của dữ liệu Boston 8
Cấu trúc dữ liệu và nội dung: 10
Phân tích dữ liệu khám phá 10
Distributions 14
Tóm tắt nội dung mục đích code về sau 19
Forward Variable Selection 22
Backward Variable Selection 30
Exhaustive Subset Selection 35
Plotting Model metrics 36
Selected Model, 42
TIỂU KẾT 43
LASSO Variable Selection 43
Model Statistics 47
Comparing models from Subset selection, LASSO with Full model 49
Residual Analysis plots (lasso model) 50
Nhận xét các thành viên trong nhóm……….53
Trang 3 Giới thiệu Boston Housing Price
Boston Housing Price là giá trị nhà điển hình của những ngôi nhà ở Boston là $ 739,180 Giá trị này được điều chỉnh theo mùa và chỉ bao gồm mức giá trungbình của các căn nhà Giá trị nhà ở Boston đã tăng 8,5% trong năm qua.
Báo cáo vấn đề
Với hơn 600 ngàn dân nằm trên phía bắc Hoa Kỳ, cách DC hơn 1 giờ bay, thành phố Boston – thủ phủ của bang Massachusetts cùng lịch sử 400 năm đã trở thành thủ đô của văn hóa, giáo dục và sáng tạo của nước Mỹ Boston được mệnh danh là nơi đắt đỏ nổi tiếng thế giới nhưng lại đứng thứ 3 tại Hoa Kỳ và thứ 37 trên thế giới về địa điểm lý tưởng để sống Boston còn được mệnh danh là thủ đô tri thức bởi có tới 200 trường đại học với những cái tên nổi tiếng đã trở thành “thương hiệu giáo dục” trong suốt thời gian qua như Harvard, MIT, U-Mass…cùng những thư viện “chứa đựng tất cả những gì mà nhân loại cần”.Boston chào đón hàng trăm ngàn sinh viên ưu tú nhất từ khắp thế giới đổ về
Trang 4cùng hơn 16 triệu du khách tham quan hàng năm vì thế lĩnh vực bất động sản khu vực này càng tăng trưởng nhanh chóng
Tạo giả thiết
Nghiên cứu này nhằm xây dựng mô hình dự báo giá nhà ở Boston Housing dựatrên một số các thuộc tính được xác định thông qua tin đăng bất động sản trên mạng Internet
Dự án này nhằm tìm ra các yếu tố ảnh hưởng đến giá trị bất động sản trong nước tại thành phố Boston Các yếu tố như thu nhập bình quân đầu người, các yếu tố môi trường, cơ sở giáo dục, quy mô tài sản
Tạo các gói câu lệnh cần sử dụng:
library(corrr)library(gridExtra)library(ggplot2)library(tidyverse)library(dplyr)library(DT)library(MASS)library(leaps)
Trang 5library(PerformanceAnalytics)đọc dữ liệu train, test và submission:
thư viện Mass chứa tập dữ liệu Boston
tidyverse: thao tác và trực quan hóa dữ liệu dễ dàng.corrr: phân tích ma trận tương quan.
ggplot2: tạo trực quan hóa dữ liệu như biểu đồ thanh, biểu đồ hình tròn, biểu
đồ, biểu đồ phân tán, biểu đồ lỗi, v.v
dplyr: “ %>%” để kết hợp các hàm khác nhau trong R.hàm filter () chọn các
biến dựa trên giá trị của chúng (Lọc ra các hàng nhất định đáp ứng (các) tiêu chí của bạn.
gridExtra: Gói gridtrong R thực thi các hàm đồ họa nguyên thủy làm nền tảng
cho ggplot2.
DT: lọc, tìm kiếm và xuất dữ liệu sang các định dạng khác nhau một cách dễ
MASS: thư viện chứa dataset Boston housing.
leaps: thư viện để có thể sử dụng các mô hình subset selection.
glmnet: Gói này phù hợp với các đường dẫn mô hình lasso và mạng đàn hồi để
hồi quy hồi quy, logistic và hồi quy đa thức bằng cách sử dụng phương pháp suy giảm tọa độ.
Trang 6PerformanceAnalytics: một tập hợp các hàm kinh tế lượng để phân tích hiệu
suất và rủi ro.
Liệt kê tên các biến thuộc tính của dữ liệu Boston
glimpse(Boston)## Observations: 506## Variables: 14
## $ crim <dbl> 0.00632, 0.02731, 0.02729, 0.03237, 0.06905, 0.02985, ## $ zn <dbl> 18.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.5, 12.5, 12.5, 12.5, ## $ indus <dbl> 2.31, 7.07, 7.07, 2.18, 2.18, 2.18, 7.87, 7.87, 7.87, ## $ chas <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ## $ nox <dbl> 0.538, 0.469, 0.469, 0.458, 0.458, 0.458, 0.524, 0.524 ## $ rm <dbl> 6.575, 6.421, 7.185, 6.998, 7.147, 6.430, 6.012, 6.172 ## $ age <dbl> 65.2, 78.9, 61.1, 45.8, 54.2, 58.7, 66.6, 96.1, 100.0, ## $ dis <dbl> 4.0900, 4.9671, 4.9671, 6.0622, 6.0622, 6.0622, 5.5605 ## $ rad <int> 1, 2, 2, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4,
## $ tax <dbl> 296, 242, 242, 222, 222, 222, 311, 311, 311, 311, 311, ## $ ptratio <dbl> 15.3, 17.8, 17.8, 18.7, 18.7, 18.7, 15.2, 15.2, 15.2, ## $ black <dbl> 396.90, 396.90, 392.83, 394.63, 396.90, 394.12, 395.60 ## $ lstat <dbl> 4.98, 9.14, 4.03, 2.94, 5.33, 5.21, 12.43, 19.15, 29.9 ## $ medv <dbl> 24.0, 21.6, 34.7, 33.4, 36.2, 28.7, 22.9, 27.1, 16.5,
Trang 7Với hàm glimpse(), ta sẽ có thể thấy được một vài thông số cơ bản của dataset Boston, bao gồm số lượng biến dữ liệu, số lượng đối tượng được tham gia, địnhdạng của biến dữ liệu, là một vài đối tượng của các biến
Bên cạnh đó, nếu ta vào help để tìm hiểu thì 13 biến dữ liệu được định nghĩa như sau:
crim tỷ lệ tội phạm bình quân đầu người đang sinh sống nơi đây indus tỷ lệ mẫu đất kinh doanh không bán lẻ trên nơi đây chas biến giả Charles River
nox nồng độ oxit nitric
dis khoảng cách có trọng số đến năm trung tâm việc làm Bostonrad chỉ số khả năng tiếp cận các đường cao tốc hướng tâmtax thuế suất toàn bộ giá trị tài sản trên mỗi lô đấtptratio tỷ lệ học sinh-giáo viên đang sinh sống nơi đâyblack tỷ lệ người da đen đang sinh sống nơi đây medv là giá trị nhà cửa trung bình
rm là số phòng trung bình mỗi nhàage là trung bình độ tuổi của các căn nhà
lstat là tỉ lệ hộ gia đình có địa vị kinh tế xã hội thấp
Cấu trúc dữ liệu và nội dung:
Để khám phá dữ liệu trong bất kỳ cuộc thi khoa học dữ liệu nào, chúng ta nên nối dữ liệu test vào dữ liệu train Vì vậy, sẽ cần kết hợp cả đào tạo và kiểm tra để thực hiện trực quan hóa dữ liệu, kỹ thuật tính năng, mã hóa một nóng và mã
Trang 8hóa nhãn Sau đó, chúng tôi sẽ tách dữ liệu kết hợp này trở lại để đào tạo và kiểm tra tập dữ liệu:
Phân tích dữ liệu khám phá
Với mục đích là bản tóm tắt cung cấp đầy đủ những yếu tố quan trọng về dữ liệu của 14 biến, 6 yếu tố đấy bao gồm: giá trị nhỏ nhất(min), giá trị lớn nhất(max), giá trị quantile thứ nhất (25% dữ liệu của biến), giá trị quantile thứ 3 (75% dữ liệu của biến), giá trị trung bình, giá trị median
## crim zn indus chas
## Min : 0.00632 Min : 0.00 Min : 0.46 Min :0.00000 ## 1st Qu.: 0.08204 1st Qu.: 0.00 1st Qu.: 5.19 1st Qu.:0.00000 ## Median : 0.25651 Median : 0.00 Median : 9.69 Median :0.00000 ## Mean : 3.61352 Mean : 11.36 Mean :11.14 Mean :0.06917 ## 3rd Qu.: 3.67708 3rd Qu.: 12.50 3rd Qu.:18.10 3rd Qu.:0.00000 ## Max :88.97620 Max :100.00 Max :27.74 Max :1.00000 ## nox rm age dis
## Min :0.3850 Min :3.561 Min : 2.90 Min : 1.130 ## 1st Qu.:0.4490 1st Qu.:5.886 1st Qu.: 45.02 1st Qu.: 2.100 ## Median :0.5380 Median :6.208 Median : 77.50 Median : 3.207 ## Mean :0.5547 Mean :6.285 Mean : 68.57 Mean : 3.795 ## 3rd Qu.:0.6240 3rd Qu.:6.623 3rd Qu.: 94.08 3rd Qu.: 5.188
Trang 9## Max :0.8710 Max :8.780 Max :100.00 Max :12.127 ## rad tax ptratio black
## Min : 1.000 Min :187.0 Min :12.60 Min : 0.32 ## 1st Qu.: 4.000 1st Qu.:279.0 1st Qu.:17.40 1st Qu.:375.38 ## Median : 5.000 Median :330.0 Median :19.05 Median :391.44 ## Mean : 9.549 Mean :408.2 Mean :18.46 Mean :356.67 ## 3rd Qu.:24.000 3rd Qu.:666.0 3rd Qu.:20.20 3rd Qu.:396.23 ## Max :24.000 Max :711.0 Max :22.00 Max :396.90 ## lstat medv
## Min : 1.73 Min : 5.00 ## 1st Qu.: 6.95 1st Qu.:17.02 ## Median :11.36 Median :21.20 ## Mean :12.65 Mean :22.53 ## 3rd Qu.:16.95 3rd Qu.:25.00 ## Max :37.97 Max :50.00
Tiếp theo, chúng tôi tìm xem liệu có dữ liệu nào trong tổng 506 quan sát không được điền hay không ? Mục đích để tránh bị ảnh hưởng đến quá trình xây dựnghàm tuyến tính cho về sau
colSums is.na((Boston))
## crim zn indus chas nox rm age dis rad ## 0 0 0 0 0 0 0 0 0
Trang 10## tax ptratio black lstat medv ## 0 0 0 0
Ở đây, ta nhận thấy rằng, ở 13 biến dữ liệu, không có biến nào có giá trị chưa được điền (hay xuất hiện giá trị null) Điều này là tốt, để khi ta thực hiện xây dựngbài toán linear, sẽ không có rắc rối nào xảy ra.
Từ đó chúng tôi kiểm tra là đi thì hiểu mối tương quan giữa các biến giá trị với nhau, ngoài trừ biến medv do đây là biến đại lượng ta cần dư đoán kết quả, hay làbiến chúng tôi cần xây dựng sự đoán bởi 13 biến còn lại
chart.Correlation(Boston[,-14], histogram=TRUE, pch=19)
Trang 11Định nghĩa : Trước tiên, để hiểu được đây là gì, thì ta cần hiểu correlation
trước đó
Correlation hay dịch ra là hệ số tương quan giữa 2 biến với nhau, là chỉ số chỉ
mức độ mật thiết giữa các biến với nhau khi ta làm về việc xây dựng đồ thị
biểu diễn chúng Correlation có phạm vi từ đoạn -1 đến 1, khi hệ số bằng +- 1
thì 2 biến dữ liệu có mối quan hệ mật thiết với nhau và được thể hiện bằng việc
Trang 12có điểm dữ liệu tập trung trên đường thẳng tuyến tính, và khi hệ sống bằng 0 thì 2 biến sẽ gần như không hề có sự ảnh hưởng gì đến nhau Khi hệ số càng dương thì các dữ liệu của 2 biến sẽ hướng theo hướng hệ số (a) dương của đường tuyến tính, và điều ngược lại xảy ra khi hệ số correlation càng hướng về -1.
Dựa vào hình ta, có thấy mức độ correlation (hệ số tương quan) của 13 biến
dữ liệu với nhau
Với đồ thị và chỉ số correlation của 2 biến bất kỳ với nhau là giao của 2
đường vuông góc kẻ từ vị trí biến đấy Ví dụ như đồ thị của biến crim và noxlà đồ thị ở hàng 5 cột 1 và hệ số correlation là 0.42, hay đồ thị của nox với age
Distributions
Trang 13Chúng tôi cũng sẽ kiểm tra qua các dữ liệu của các biến, xem nó phân bố như thế nào.
Boston %>%
gather(-medv, key = "var", value = "value") %>%
filter(var != "chas") %>%
ggplot aes( (x = '',y = value)) +
geom_boxplot(outlier.colour = "red", outlier.shape = 1) +
facet_wrap(~ var, scales = "free") +
theme_bw()
Với %>% là thuộc thư viện dplyr, với mục đích là thực hiện liện tục dòng lệnhtrước dấu và sau dấu %>%, để hạn chế tài nguyên cũng như không cần hiển thị dòng lệnh đã thực thi không cần thiết qua console, giống như lệnh pipe
Trang 30Qua 4 biểu đồ trên, ta thấy được rằng giá trị rsq, adjr2, bic, cp đều có một 1 tăng giảm nhất định mỗi khi ta tăng sô lượng biến dữ liệu vào đồ thị Giá trị rsq, adjr2 có xu hướng tăng mỗi khi ta tăng biến dữ liệu, và điều ngược lại xảy ra đối với giá trị bic và cp.
Và nếu chúng tôi chạy dòng lện thì kết quả thu được :which.max(sum.model2$rsq)
Chúng tôi thu được kết quả là 13, chứng tỏ đã có 13 biến dữ liệu tham gia
hình càng có sự chuẩn xác Nhưng có một vấn đề, mỗi khi ta thêm biến giá trị
Dẫn đến việc là kể cả có những biến dữ liệu không có mối quan hệ gì với kết
Chúng tôi sẽ thu được 11, chứng tỏ mô hình tốt nhất là mô hình có 11 biến dữ liệu Tương tự khi chúng tôi tìm min của cp, và bic.
Chúng tôi cũng sẽ thu được mô hình 11 là mô hình có sự chuẩn xác cao nhất.
Trang 31## 4.135996126 -1.440623894 0.304517981 -0.013434078 -0.897688747 ## black lstat
## 0.008922492 -0.494178892
Qua đó, như dự đoán trước đó, mình sẽ loại bỏ 2 biến dữ liệu là age và indus, để cho mô hình dự đoán giá nhà trở nên chuẩn xác hơn Và từ số liệu ở coef ta cũng có thể thấy được luyện phương trình tiến tính dự đoán giá nhà:
Y= 33 -0.09*crim -0.045*zn+3.38*chas+…
Backward Variable Selection
model3 <-regsubsets(medv~., data = Boston.train, nvmax = 13, method="backward")
sum.model3 <-summary(model3)
Trang 32model3.subsets <-cbind(sum.model3$which, sum.model3$bic, sum.model3$rsq, sum.model3$adjr2,sum.model3$cp)model3.subsets <-as.data.frame(model3.subsets)
colnames(model3.subsets)[15:18] <-c("BIC" "rsq" "adjr2" "cp", , , )model3.subsets
model3 là biến lưu giá trị của hàm regsubsets() (mục đích là lựa chọn mô hình bởi “backward selection”)
Nội dung: Ở đây, bây giờ chúng ta đến với phương pháp lựa chọn Backward selection, nơi chúng ta tiếp tục loại bỏ các biến không ảnh hưởng khỏi mô hình, để xây dựng mô hình với số lượng của các biến dữ liệu các tầm ảnh hưởng đến việc dự đoán giá nhà lần lượt tăng lên 1 theo thứ tự ảnh hưởng (hay nói cách khác là mô hình đâu tiên sẽ có 1 biến dữ liệu đánh, mô hình thứ 2 sẽ có 2 biến dữ liệu đánh,…, đến mô hình thứ 13) Qua đó, ta sẽ thiết lập nên 4 biểu đồ
chính là về chỉ số R-squared(rsq), Adjusted R-Squared(adjr2), BIC(bic) và
giá trị CP(cp) bằng việc sử dụng hàm ggplot() và sử dụng hàm
scale_x_continuous() để biểu diễn giá trị thu được 13 mô hình về 4 đại lượng
nêu trên Cuối cùng, ta sử dụng hàm grid.arrange() để biểu diễn 4 biểu đồ đường- điểm chính theo dạng ma trận như hình bên dưới.
Trang 33Qua 4 biểu đồ trên, ta thấy được rằng giá trị rsq, adjr2, bic, cp đều có một 1 tăng giảm nhất định mỗi khi ta tăng sô lượng biến dữ liệu vào đồ thị Giá trị rsq, adjr2 có xu hướng tăng mỗi khi ta tăng biến dữ liệu, và điều ngược lại xảy ra đối với giá trị bic và cp.
Và nếu chúng tôi chạy dòng lện thì kết quả thu được:
Trang 34Chúng tôi thu được kết quả là 13, chứng tỏ đã có 13 biến dữ liệu tham gia trong quá trình đánh giá, điều này là rất tốt do nếu R-squared càng cao thì mô hình càng có sự chuẩn xác Nhưng có một vấn đề, mỗi khi ta thêm biến giá trị vào mô hình, R-squared sẽ có xu hướng là giữ nguyên giá trị hoặc tăng lên Dẫn đến việc là kể cả có những biến dữ liệu không có mối quan hệ gì với kết
quả đầu ra, R-squared vẫn có thể tăng lên Vậy nên ta sẽ xét thêm câu lệnh:
Chúng tôi sẽ thu được 11, chứng tỏ mô hình tốt nhất là mô hình có 11 biến dữ liệu Tương tự khi ta tìm min của cp, và bic.
chúng tôi cũng sẽ thu được mô hình 11 là mô hình có sự chuẩn xác cao nhất.Bằng việc sử dụng lệnh này:
Trang 35## 33.007130803 -0.092092535 0.045489957 3.383711876 -16.588259678 ## rm dis rad tax ptratio
## 4.135996126 -1.440623894 0.304517981 -0.013434078 -0.897688747 ## black lstat
## 0.008922492 -0.494178892
Qua đó, như dự đoán trước đó, mình sẽ loại bỏ 2 biến dữ liệu là age và indus, để cho mô hình dự đoán giá nhà trở nên chuẩn xác hơn Và từ số liệu ở coef ta cũng có thể thấy được luyện phương trình tiến tính dự đoán giá nhà:
Y= 33 -0.09*crim -0.045*zn+3.38*chas+…
Exhaustive Subset Selection
model4 <-regsubsets(medv~., data = Boston.train, nvmax = 13)sum.model4 <-summary(model4)
model4.subsets <-cbind(sum.model4$which, sum.model4$bic, sum.model4$rsq, sum.model4$adjr2,sum.model4$cp)model4.subsets <-as.data.frame(model4.subsets)
colnames(model4.subsets)[15:18] <-c("BIC" "rsq" "adjr2" "cp", , , )model4.subsets
Trang 36## (Intercept) crim zn indus chas nox rm age dis rad tax ptratio black## 1 1 0 0 0 0 0 0 0 0 0 0 0 0
## 2 1 0 0 0 0 0 1 0 0 0 0 0 0## 3 1 0 0 0 0 0 1 0 0 0 0 1 0## 4 1 0 0 0 1 0 1 0 0 0 0 1 0## 5 1 0 0 0 0 1 1 0 1 0 0 1 0## 6 1 0 0 0 1 1 1 0 1 0 0 1 0## 7 1 0 0 0 1 1 1 0 1 0 0 1 1## 8 1 0 1 0 1 1 1 0 1 0 0 1 1## 9 1 0 0 0 1 1 1 0 1 1 1 1 1## 10 1 0 1 0 1 1 1 0 1 1 1 1 1## 11 1 1 1 0 1 1 1 0 1 1 1 1 1## 12 1 1 1 1 1 1 1 0 1 1 1 1 1## 13 1 1 1 1 1 1 1 1 1 1 1 1 1## lstat BIC rsq adjr2 cp
## 1 1 -310.4951 0.5498895 0.5487698 329.66053## 2 1 -416.5731 0.6589365 0.6572354 154.88775## 3 1 -458.8968 0.6973878 0.6951182 94.55548## 4 1 -469.3669 0.7094775 0.7065650 76.95723## 5 1 -482.8609 0.7231641 0.7196862 56.77032## 6 1 -493.4400 0.7342956 0.7302799 40.72531## 7 1 -497.4187 0.7407790 0.7361968 32.21528