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á trung bì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ựa trê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:
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ễ
dàng
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
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 Boston
rad chỉ số khả năng tiếp cận các đường cao tốc hướng tâm
tax thuế suất toàn bộ giá trị tài sản trên mỗi lô đất
ptratio tỷ lệ học sinh-giáo viên đang sinh sống nơi đây
black 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á
summary(Boston)
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
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ựng bà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à nox
là đồ 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
Trang 31Qua đó, 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", , , )
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:
Trang 35Qua đó, 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
Trang 37lstat, rm và ptration là những biến quan trọng nhất
Bảng sau hiển thị các biến được bao gồm trong các mô hình có kích thước khácnhau, cùng với các giá trị BIC, R-bình phương, adj r-bình phương, cp được liênkết với mô hình
Plotting Model metrics
#PLOTS OF R2, ADJ R2, CP, BIC#
rsq <-data.frame round( (sum.model4$rsq,5))
model4.rsq.plot <-ggplot(data = rsq, aes(y = rsq, x = 1:13)) +
geom_point() +geom_line() +
geom_text aes( (label=rsq), size=3, vjust=-0.5) +
scale_x_continuous(breaks=1:13)
adjr2 <-data.frame round( (sum.model4$adjr2,4))
model4.adjrsq.plot <-ggplot(data = adjr2, aes(y = adjr2, x = 1:13)) +
Trang 38geom_point() +geom_line() +
geom_text aes( (label=adjr2), size=3, vjust=-0.5) +
scale_x_continuous(breaks=1:13)
bic <-data.frame round( (sum.model4$bic,4))
model4.bic.plot <-ggplot(data = bic, aes(y = bic, x = 1:13)) +
geom_point() +geom_line() +
geom_text aes( (label=bic), size=3, vjust=-0.5) +
scale_x_continuous(breaks=1:13)
cp <-data.frame round( (sum.model4$cp,4))
model4.cp.plot <-ggplot(data = cp, aes(y = cp, x = 1:13)) +
Trang 39Tương tự như 2 mô hinh trên, ta cũng có thể kết luận được rằng mô hình tối ưu nhất là mô hình chưa 11 biến dữ liệu.
Trang 41## Residual standard error: 4.566 on 392 degrees of freedom
## Multiple R-squared: 0.759, Adjusted R-squared: 0.7522
## F-statistic: 112.2 on 11 and 392 DF, p-value: < 2.2e-16
Trang 42So với mô hình lúc ban đâu của dataset Boston, giờ đây mô hình đã chỉ còn đúng 11 mà có ảnh hưởng đấy quá trình dư đoán.
data.frame cbind( (comparison_table, stats.model.ss))
Tương tự, như lúc đầu, ta sẽ kiểm tra thống kê mô hình, bằng xây dựng MSE, R-squared, adjusted R-squared, Test MSPE, AIC and BIC
## comparison_table stats.model.ss
## 1 model type model.SS
## 2 MSE 20.8454551923437
Trang 43Bây giờ chúng ta sử dụng kỹ thuật chọn biến LASSO Chúng tôi cố gắng thu nhỏ ước lượng hệ số của các biến không có ý nghĩa về không.
Ở đây lambda là yếu tố hình phạt giúp lựa chọn biến và do đó lambda càng cao thì các biến có ý nghĩa trong mô hình càng thấp
Trước đó, ta cần chuẩn hóa các biến trước khi sử dụng chúng trong việc tạo môhình
Boston.X.std <-scale(dplyr::select(Boston, -medv))
X.train<-as.matrix(Boston.X.std)[index,]
X.test<- as.matrix(Boston.X.std)[-index,]
Y.train<-Boston[index, "medv"]
Trang 44Y.test<-Boston[-index, "medv"]
Mục đích của code là chuẩn hóa dữ liệu trước khi áp vào sử dụng cho mô hình
scale() có thể được sử dụng để chia tỷ lệ các giá trị trong vectơ, ma trận hoặc
khung dữ liệu Với các giá trị thuộc Boston ngoại trừ biến dữ liệu medv as.matrix() được dùng để chuyển đổi data.table thành ma trận, với
Boston.X.std là độ lệch chuẩn của các giá trị của x thuộc Boston Standard (
deviation)
Fit Model
Chúng ta sẽ nhét vừa dữ liệu của mô hình LASSO với dữ liệu đã có Từ biểu đồbên dưới, chúng ta thấy rằng khi giá trị của lambda không ngừng tăng lên, hệ
số của các biến có xu hướng bằng 0
lasso.fit<-glmnet(x=X.train, y=Y.train, alpha = 1)
plot(lasso.fit, xvar = "lambda", label=TRUE)