Giảng viên hướng dẫn: ThS. Trần Mạnh Tường
Sinh viên
thực hiện: Nhóm 24: Lê Ngọc Tường Vy và Trần Hoàng Minh Nhật
2015/11/6
1. # Nạp các thư viện để tiến hành phân tích
2. library(readxl) # Nạp thư viện 'readxl' để đọc dữ liệu từ các tệp Excel (.xlsx, .xls)
3. library(skimr) # Nạp thư viện 'skimr' để tạo bản tóm tắt thống kê nhanh chóng, đẹp mắt (giống như 'summary' nhưng chi tiết hơn)
4. library(tidyverse) # Nạp gói thư viện 'tidyverse' tổng hợp (bao gồm dplyr, ggplot2, tidyr, v.v.), mặc dù nhiều gói đã được tải riêng lẻ trước đó
5. library(ggplot2) # Nạp thư viện 'ggplot2' để tạo các đồ thị và biểu đồ trực quan hóa dữ liệu
6. library(dplyr) # Nạp thư viện 'dplyr' (một phần của tidyverse) để thao tác và xử lý dữ liệu hiệu quả
7. library(tidyr) # Nạp thư viện 'tidyr' (một phần của tidyverse) để làm sạch và định hình lại dữ liệu (ví dụ: pivot_longer/wider)
8. library(DT) # Nạp thư viện 'DT' để tạo các bảng dữ liệu tương tác, có thể tìm kiếm, sắp xếp
9. library(kableExtra) # Nạp thư viện 'kableExtra' để tùy chỉnh và làm đẹp các bảng HTML/LaTeX
10. library(lubridate) # Nạp thư viện 'lubridate' để thao tác và xử lý dữ liệu thời gian và ngày tháng
11. library(moments) # Nạp thư viện 'moments' để tính các đặc trưng phân phối như moment, skewness, kurtosis
Trong bối cảnh nền kinh tế toàn cầu biến động mạnh mẽ bởi các yếu tố như đại dịch COVID-19, chính sách tiền tệ thắt chặt của Cục Dự trữ Liên bang Mỹ (FED) và xu hướng lãi suất tăng cao, thị trường bất động sản Hoa Kỳ – vốn được xem là thước đo nhạy cảm của nền kinh tế – đã có nhiều biến động đáng chú ý về giá cả, quy mô và cấu trúc. Bên cạnh đó, tại Việt Nam, các tổ chức tài chính, đặc biệt là Ngân hàng TMCP Đầu tư và Phát triển Việt Nam (BIDV), cũng chịu ảnh hưởng trực tiếp từ các yếu tố quốc tế và biến động trong nước. Việc phân tích dữ liệu tài chính của BIDV trong giai đoạn 2010–2024 giúp phản ánh hiện trạng, xu hướng và khả năng thích ứng của ngân hàng trước các thay đổi vĩ mô.
Trước thực tiễn đó, đề tài “Ứng dụng phân tích dữ liệu trong nghiên cứu thị trường bất động sản Hoa Kỳ và phân tích hiện trạng, xu hướng của Ngân hàng TMCP Đầu tư và Phát triển Việt Nam BIDV giai đoạn 2010–2024” được lựa chọn nhằm: Kết hợp tư duy phân tích dữ liệu lớn (data analysis) với công cụ R. Minh họa khả năng khai thác thông tin, trực quan hóa và rút ra kết luận từ dữ liệu thực tế. Và cung cấp góc nhìn toàn diện giữa xu hướng quốc tế và bức tranh tài chính nội địa
Mục tiêu tổng quát: Ứng dụng công cụ R để xử lý, mô tả, phân tổ và trực quan hóa dữ liệu, từ đó rút ra những nhận định định lượng và định tính về thị trường bất động sản Hoa Kỳ và hoạt động tài chính của BIDV.
Mục tiêu cụ thể
Phân tích, mô tả và trực quan hóa đặc điểm của thị trường bất động sản Hoa Kỳ thông qua các yếu tố như giá nhà, diện tích, trạng thái ( đã bán/ cho thuê) và thời gian giao dịch.
Phân tích hiện trạng, cơ cấu tài sản, hiệu quả hoạt động và xu hướng tài chính của BIDV trong giai đoạn 2010–2024.
So sánh, tổng hợp và rút ra các bài học nâng cao hiệu quả kinh doanh trong bối cảnh hội nhập kinh tế quốc tế.
Đối tượng nghiên cứu:
Dữ liệu về thị trường bất động sản Hoa Kỳ (các giao dịch mua bán, giá nhà, trạng thái (đã bán/ cho thuê) diện tích, tiểu bang, thời gian giao dịch).
Dữ liệu tài chính và hiệu quả hoạt động của BIDV trong giai đoạn 2010–2024.
Phạm vi nghiên cứu:
Không gian: Thị trường bất động sản Hoa Kỳ và ngân hàng BIDV tại Việt Nam.
Thời gian: Giai đoạn 2010–2024 (BIDV), Giai đoạn 1901-nay (Dữ liệu bất động sản Hoa Kỳ)
Nội dung: Tập trung vào phân tích mô tả, phân tổ và trực quan hóa dữ liệu; chưa đi sâu vào mô hình dự báo định lượng.
Đề tài sử dụng phương pháp phân tích dữ liệu định lượng với sự hỗ trợ của phần mềm R. Các bước chính gồm:
Tiền xử lý dữ liệu (Data Cleaning): loại bỏ giá trị thiếu, sai lệch.
Thống kê mô tả (Descriptive Statistics): tổng hợp và so sánh các biến số.
Phân tích trực quan (Data Visualization): sử dụng các biểu đồ để thể hiện xu hướng, phân bố và mối quan hệ giữa các biến.
Nhận xét và đánh giá: đưa ra kết luận dựa trên bằng chứng dữ liệu.
Đề tài góp phần minh họa rõ ràng việc ứng dụng phân tích dữ liệu trong nghiên cứu kinh tế, đặc biệt là thị trường bất động sản và lĩnh vực tài chính – ngân hàng. Về mặt học thuật, nghiên cứu giúp củng cố khả năng xử lý, thống kê và trực quan hóa dữ liệu bằng ngôn ngữ R. Về mặt thực tiễn, kết quả phân tích mang lại cái nhìn tổng quan về xu hướng thị trường bất động sản Hoa Kỳ giai đoạn 1901-nay và hiện trạng hoạt động của BIDV giai đoạn 2010–2024, từ đó đề xuất một số gợi ý và giải pháp hữu ích cho quản lý và hoạch định chiến lược trong tương lai.
Ngoài Phần mở đầu: Giới thiệu đề tài và Phần kết luận : Kết luận và đề xuất, bài tiểu luận chia thành 2 phần chính với các chương sau:
Chương 1: Giới thiệu đề tài
Chương 2 : Xử lý dữ liệu thô
Chương 3: Thống kê cơ bản
Chương 4: Trực quan hóa dữ liệu
Bộ dữ liệu “USA Real Estate Dataset” được thu thập tại trang web Kaggle . Đây là một bộ dữ liệu công khai được xây dựng nhằm phục vụ mục đích học tập và thực hành phân tích dữ liệu trong lĩnh vực bất động sản. Bộ dữ liệu mô tả thông tin chi tiết của hơn 2,2 triệu bất động sản trên khắp các bang, thành phố và mã vùng của Hoa Kỳ. Mỗi dòng dữ liệu tương ứng với một bất động sản cụ thể, bao gồm các thông tin như giá bán, diện tích đất, diện tích nhà, số phòng ngủ, số phòng tắm, vị trí địa lý, mã vùng bưu điện, trạng thái giao dịch và ngày bán gần nhất. Dữ liệu được tổ chức dưới dạng dữ liệu định lượng và định tính, phản ánh đặc điểm và xu hướng chung của thị trường nhà ở Hoa Kỳ.
Ta tiến hành đọc tệp CSV và gán dữ liệu vào một đối tượng có tên là tieuluan để phục vụ cho quá trình phân tích.
1. tieuluan <- read.csv("~/Downloads/TLHK3:2025/Ngôn ngữ lập trình R/realtor-data.zip.csv")
2. tieuluan$prev_sold_date <- as.Date(tieuluan$prev_sold_date, format = "%Y-%m-%d")
Giải thích kỹ thuật: 1. Nhập dữ liệu từ file CSV vào R với objcet tên tieuluan. 2. Đổi cột prev_sold_date thành kiểu ngày.
1. head(tieuluan)
Giải thích kỹ thuật: 1. Hiển thị nhanh 6 dòng đầu tiên của dữ liệu.
1. tail(tieuluan)
Giải thích kỹ thuật: 1. Hiển thị nhanh 6 dòng cuối của dữ liệu.
Ta sử dụng sử dụng một số lệnh bên dưới để xem thông tin chung của tieuluan.
1. dim(tieuluan)
## [1] 2226382 12
Giải thích kỹ thuật: 1. Xuất ra số lượng dòng (rows) và số lượng cột (columns) của dữ liệu.
Nhận xét: Kết quả trả về cho thấy bộ dữ liệu tieuluan có 2.226.382 hàng (quan sát) và 12 cột (biến).
1. names(tieuluan)
## [1] "brokered_by" "status" "price" "bed"
## [5] "bath" "acre_lot" "street" "city"
## [9] "state" "zip_code" "house_size" "prev_sold_date"
Giải thích kỹ thuật: 1. Lấy ra tên các cột của bảng dữ liệu để kiểm tra cấu trúc.
Nhận xét: Kết quả trả về tên các biến trong bộ dữ liệu. Trong bộ dữ liệu tieuluan,có 12 biến bao gồm: “brokered_by”, “status”, “price”, “bed”, “bath”, “acre_lot”, “street”, “city”, “state”, “zip_code”, “house_size”, “prev_sold_date”.
1. str(tieuluan)
## 'data.frame': 2226382 obs. of 12 variables:
## $ brokered_by : num 103378 52707 103379 31239 34632 ...
## $ status : chr "for_sale" "for_sale" "for_sale" "for_sale" ...
## $ price : num 105000 80000 67000 145000 65000 179000 50000 71600 100000 300000 ...
## $ bed : int 3 4 2 4 6 4 3 3 2 5 ...
## $ bath : int 2 2 1 2 2 3 1 2 1 3 ...
## $ acre_lot : num 0.12 0.08 0.15 0.1 0.05 0.46 0.2 0.08 0.09 7.46 ...
## $ street : num 1962661 1902874 1404990 1947675 331151 ...
## $ city : chr "Adjuntas" "Adjuntas" "Juana Diaz" "Ponce" ...
## $ state : chr "Puerto Rico" "Puerto Rico" "Puerto Rico" "Puerto Rico" ...
## $ zip_code : int 601 601 795 731 680 612 639 731 730 670 ...
## $ house_size : num 920 1527 748 1800 NA ...
## $ prev_sold_date: Date, format: NA NA ...
Nhận xét: Trong bộ dữ liệu hiện tại có 2.226.382 quan sát và 12 biến với các kiểu dữ liệu như num (số thực), int (số nguyên) và chr (chuỗi ký tự). Các biến số như brokered_by, price, bed, bath, acre_lot, street, zip_code và house_size là các biến định lượng, còn các biến status, city, state và prev_sold_date là chuỗi ký tự.
Để phục vụ cho quá trình phân tích, tác giả lọc 6 biến tiêu biểu gồm: status, price, bed, state, house_size và prev_sold_date, nhằm đảm bảo tính tập trung và hiệu quả trong xử lý dữ liệu. Danh sách các biến được lựa chọn được trình bày trong bảng dưới đây.
1. tieuluan <- tieuluan[, c("status", "price", "bed", "state", "house_size", "prev_sold_date")]
Giải thích kỹ thuật: 1. Giữ lại và sắp xếp lại 6 biến: status, price, bed, state, house_size, prev_sold_date.
| STT | Tên biến | Mô tả |
|---|---|---|
| 1 | status | Trạng thái bất động sản (đang bán hoặc sẵn sàng xây dựng) |
| 2 | price | Giá của bất động sản (đơn vị tính USD) |
| 3 | bed | Số lượng phòng ngủ của bất động sản |
| 4 | state | Tên bang nơi bất động sản thuộc về |
| 5 | house_size | Diện tích sử dụng hoặc diện tích sàn của ngôi nhà (tính bằng feet vuông) |
| 6 | prev_sold_date | Ngày bán gần nhất trước đó (nếu có) |
1. nrow(tieuluan)
## [1] 2226382
Giải thích kỹ thuật: 1. Lấy số lượng dòng của bảng dữ liệu.
Nhận xét: Trong bộ dữ liệu tieuluan có 2.226.382 quan sát.
1. ncol(tieuluan)
## [1] 6
Giải thích kỹ thuật: 1. Lấy số lượng dòng của bảng dữ liệu.
Nhận xét: Trong bộ dữ liệu tieuluan có 6 biến.
1. sapply(tieuluan, class)
## status price bed state house_size
## "character" "numeric" "integer" "character" "numeric"
## prev_sold_date
## "Date"
Giải thích kỹ thuật: 1. Áp dụng hàm kiểm tra kiểu dữ liệu cho từng cột rồi trả về kiểu dữ liệu tương ứng dưới dạng vector.
Nhận xét: Kiểu dữ liệu của từng biến trong bộ dữ liệu tieuluan gồm biến status và state là kiểu character, biến price và house_size là kiểu numeric, biến bed là kiểu integer, và biến prev_sold_date là kiểu Date.
1. any(is.na(tieuluan))
## [1] TRUE
Giải thích kỹ thuật: 1.Kiểm tra xem dữ liệu có xuất hiện giá trị thiếu (NA) hay không. Nếu TRUE là có NA, FALSE là không có NA.
Nhận xét: Kết quả là TRUE, cho thấy toàn bộ dữ liệu có giá trị NA.
1. sum(is.na(tieuluan))
## [1] 1785639
Giải thích kỹ thuật: 1. Đếm tổng giá trị thiếu (NA) trong toàn bộ dữ liệu.
Nhận xét: Trong bộ dữ liệu tieuluan có 1.785.639 giá trị bị thiếu (NA) trên tổng số 2.226.382 quan sát và 6 biến.
1. colSums(is.na(tieuluan))
## status price bed state house_size
## 0 1541 481317 0 568484
## prev_sold_date
## 734297
Giải thích kỹ thuật: 1. Đếm số giá trị thiếu (NA) của từng cột và trả về kết quả cho tất cả các cột dưới dạng vector.
Nhận xét: trong bộ dữ liệu, biến status và state không có giá trị thiếu, biến price có 1.541 giá trị thiếu, biến bed có 481.317 giá trị thiếu, biến house_size có 568.484 giá trị thiếu, và biến prev_sold_date có 734.297 giá trị thiếu.
1. names(tieuluan)[colSums(is.na(tieuluan)) > 0]
## [1] "price" "bed" "house_size" "prev_sold_date"
Giải thích kỹ thuật: 1. Lấy tên các cột trong dữ liệu có ít nhất 1 giá trị thiếu (NA).
Nhận xét: Kết quả cho thấy các biến price, bed, house_size và prev_sold_date đều có giá trị NA, trong khi các biến status và state không có giá trị thiếu.
1. tieuluan <- na.omit(tieuluan)
2. sum(is.na(tieuluan))
## [1] 0
Giải thích kỹ thuật:
Loại bỏ toàn bộ hàng chứa giá trị thiếu (NA) trong dữ liệu.
Đếm tổng NA còn lại sau khi đã loại bỏ.
Nhận xét: Kết quả là 0, cho thấy không còn giá trị thiếu trong dữ liệu.
1. any(duplicated(tieuluan))
## [1] TRUE
Giải thích kỹ thuật: 1. Kiểm tra xem bảng dữ liệu có tồn tại dòng trùng lặp hoàn toàn hay không.
Nhận xét: Kết quả là TRUE, nghĩa là trong dữ liệu có quan sát (dòng) trùng lặp hoàn toàn.
1. sum(duplicated(tieuluan))
## [1] 3058
Giải thích kỹ thuật: 1. Đếm tổng số dòng dữ liệu bị trùng lặp.
Nhận xét: Trong bộ dữ liệu tieuluan có 3.058 dòng bị trùng lặp hoàn toàn.
1. table(duplicated(tieuluan))
##
## FALSE TRUE
## 1251749 3058
Giải thích kỹ thuật: 1. Tạo bảng tần suất với hai giá trị: số dòng dữ liệu là duy nhất (FALSE) và số dòng dữ liệu bị trùng lặp (TRUE).
Nhận xét: Kết quả cho thấy có 1.251.749 dòng không trùng lặp (FALSE) và 3.058 dòng trùng lặp (TRUE).
1. tieuluan<- tieuluan[!duplicated(tieuluan), ]
2. sum(duplicated(tieuluan))
## [1] 0
Giải thích kỹ thuật:
Loại bỏ toàn bộ dòng dữ liệu trùng lặp, chỉ giữ lại các dòng duy nhất trong bảng dữ liệu.
Đếm lại số dòng trùng lặp còn lại (sau khi đã loại), thông thường kết quả là 0.
Nhận xét: Kết quả trả về 0, cho thấy tất cả các dòng trùng lặp đã được loại bỏ.
1. remove_extreme_outliers_multi <- function(df, vars) {
2. for (var in vars) {
3. q1 <- quantile(df[[var]], 0.25, na.rm = TRUE)
4. q3 <- quantile(df[[var]], 0.75, na.rm = TRUE)
5. iqr <- q3 - q1
6. lower <- q1 - 3 * iqr
7. upper <- q3 + 3 * iqr
8. df <- df %>% filter(.data[[var]] >= lower, .data[[var]] <= upper)
9. }
10. return(df)
11. }
12. vars_extreme <- c("price", "house_size", "bed")
13. tieuluan <- remove_extreme_outliers_multi(tieuluan, vars_extreme)
14. tieuluan <- tieuluan %>% filter(price >= 10000, bed >= 1)
Giải thích kỹ thuật:
2-9. Xử lý từng biến: tính Q1, Q3, IQR, xác định ngưỡng loại, lọc giữ các dòng dữ liệu nằm trong ngưỡng cho từng biến.
10-11. Kết thúc hàm, trả về dữ liệu đã lọc outlier.
Chọn danh sách biến cần loại outlier.
Áp dụng hàm loại outlier cho dữ liệu.
Tiếp tục lọc dữ liệu chỉ giữ dòng có price >= 10000 và bed >= 1.
1. tieuluan$status <- as.factor(tieuluan$status)
Giải thích kỹ thuật: 1. Chuyển kiểu dữ liệu của cột trạng thái sang dạng phân loại (factor).
Tác giả thực hiện các lệnh thêm và sửa dữ liệu dưới đây:
1. tieuluan$house_size_m2 <- tieuluan$house_size * 0.092903
Giải thích kỹ thuật: 1. Tạo cột mới house_size_m2 tính diện tích nhà theo mét vuông bằng cách nhân cột house_size với hệ số 0,092903 để đổi sang mét vuông.
1. tieuluan <- tieuluan %>%
2. mutate(prev_sold_date = as.Date(prev_sold_date),
3. prev_month_year = format(prev_sold_date, "%m-%Y"),
4. prev_year = year(prev_sold_date))
Giải thích kỹ thuật:
Sử dụng hàm mutate để thêm và xử lý cột trong bảng dữ liệu.
Chuyển đổi cột prev_sold_date sang kiểu ngày.
Tạo cột mới prev_month_year chứa tháng-năm dựa trên ngày bán trước đó.
Tạo cột mới prev_year chỉ lấy năm từ ngày bán trước đó
1. summary_price <- tieuluan$price
2. data.frame(
3. Min = min(summary_price, na.rm = TRUE),
4. Q1 = quantile(summary_price, 0.25, na.rm = TRUE),
5. Median = median(summary_price, na.rm = TRUE),
6. Mean = mean(summary_price, na.rm = TRUE),
7. Q3 = quantile(summary_price, 0.75, na.rm = TRUE),
8. Max = max(summary_price, na.rm = TRUE),
9. SD = sd(summary_price, na.rm = TRUE),
10. Variance = var(summary_price, na.rm = TRUE),
11. Skewness = skewness(summary_price, na.rm = TRUE),
12. Kurtosis = kurtosis(summary_price, na.rm = TRUE))
Giải thích kỹ thuật:
2-12. Tạo bảng dữ liệu gồm các thống kê cơ bản như: Min, Max, Q1…
Nhận xét: Độ biến động của giá (price) là rất lớn, dao động từ 10.000 đến 1.688.500 với độ lệch chuẩn cao (\(\approx\) 294.346,1). Giá trị trung bình (434.154,3) cao hơn đáng kể so với trung vị (359.900). Sự chênh lệch này, cùng với hệ số lệch dương (1,4975), khẳng định phân phối lệch phải, tức là phân phối không đối xứng và chịu ảnh hưởng mạnh của các mức giá cao.
1. summary_bed <- tieuluan$bed
2. data.frame(
3. Min = min(summary_bed, na.rm = TRUE),
4. Q1 = quantile(summary_bed, 0.25, na.rm = TRUE),
5. Median = median(summary_bed, na.rm = TRUE),
6. Mean = mean(summary_bed, na.rm = TRUE),
7. Q3 = quantile(summary_bed, 0.75, na.rm = TRUE),
8. Max = max(summary_bed, na.rm = TRUE),
9. SD = sd(summary_bed, na.rm = TRUE),
10. Variance = var(summary_bed, na.rm = TRUE),
11. Skewness = skewness(summary_bed, na.rm = TRUE),
12. Kurtosis = kurtosis(summary_bed, na.rm = TRUE))
Giải thích kỹ thuật:
2-12. Tạo bảng dữ liệu gồm các thống kê cơ bản như: Min, Max, Q1…
Nhận xét: Số phòng ngủ (bed) chủ yếu tập trung quanh 3 phòng (Trung vị = 3, Trung bình = 3,156), với phần lớn nằm trong khoảng 3–4 phòng (Q1–Q3). Biến động về số phòng ngủ là thấp (SD = 0,969, Phương sai = 0,940). Phân phối có đặc điểm hơi lệch phải nhẹ (Skewness = 0,315) và có đuôi hơi dày hơn chuẩn (Kurtosis = 3,645).
1. summary_house <- tieuluan$house_size
2. data.frame(
3. Min = min(summary_house, na.rm = TRUE),
4. Q1 = quantile(summary_house, 0.25, na.rm = TRUE),
5. Median = median(summary_house, na.rm = TRUE),
6. Mean = mean(summary_house, na.rm = TRUE),
7. Q3 = quantile(summary_house, 0.75, na.rm = TRUE),
8. Max = max(summary_house, na.rm = TRUE),
9. SD = sd(summary_house, na.rm = TRUE),
10. Variance = var(summary_house, na.rm = TRUE),
11. Skewness = skewness(summary_house, na.rm = TRUE),
12. Kurtosis = kurtosis(summary_house, na.rm = TRUE))
Giải thích kỹ thuật:
2-12. Tạo bảng dữ liệu gồm các thống kê cơ bản như: Min, Max, Q1…
Nhận xét: Phân tích house_size cho thấy sự dao động rộng (100–5.354) và phân tán lớn (SD = 819,50), tập trung quanh trung vị 1.680. Phân phối này lệch phải mạnh (Skewness = 1,159), do trung bình (1.853,93) cao hơn trung vị. Hệ số Kurtosis cao (4,517) nhấn mạnh sự hiện diện của các giá trị diện tích lớn kéo trung bình lên, khiến phân phối không đối xứng.
1. status_tab <- table(tieuluan$status)
2. status_freq <- as.data.frame(status_tab)
3. names(status_freq) <- c("Trạng thái", "Tần số")
4. status_freq[["Tần suất (%)"]] <- round(100 * status_freq[["Tần số"]] / sum(status_freq[["Tần số"]]), 2)
5. status_freq
Giải thích kỹ thuật:
Tạo bảng tần suất cho trạng thái.
Đưa sang dạng bảng dữ liệu.
Đặt lại tên các cột.
Thêm cột phần trăm tần suất.
Hiển thị bảng kết quả.
Nhận xét: Trong bộ dữ liệu, 56,47% (670.654) bất động sản đã bán (sold), trong khi 43,53% (516.911) đang rao bán (for_sale). Tình trạng phân bố này khá cân đối nhưng nghiêng nhẹ về các giao dịch đã hoàn tất.
1. state_freq <- tieuluan %>% count(state) %>% mutate(`Tần suất (%)` = round(100 * n / sum(n), 2)) %>% arrange(desc(n))
2. topn <- 10
3. top_state <- state_freq[1:topn, ]
4. other_state <- state_freq[(topn+1):nrow(state_freq), ]
5. other_summary <- data.frame(state = "Khác", n = sum(other_state$n), `Tần suất (%)` = round(100 * sum(other_state$n) / sum(state_freq$n), 2), stringsAsFactors = FALSE)
6. names(other_summary) <- names(top_state)
7. state_desc <- rbind(top_state, other_summary)
8. names(state_desc) <- c("Tiểu bang", "Tần số", "Tần suất (%)")
9. state_desc
Giải thích kỹ thuật:
Đếm và tính phần trăm tần suất từng tiểu bang, sắp xếp giảm dần.
Đặt số tiểu bang nhiều nhất cần lấy (top 10).
3-4. Lấy top 10 và nhóm các tiểu bang còn lại vào “Khác”.
5-7. Tạo dòng tổng hợp cho nhóm “Khác” và ghép với top 10.
Đặt lại tên các cột.
Hiển thị bảng tổng hợp.
Nhận xét: Ba tiểu bang California (13,03%), Florida (12,03%) và Texas (9,15%) có số lượng quan sát nổi bật nhất. 10 tiểu bang hàng đầu chiếm phần lớn dữ liệu, với tỷ lệ 3,63% đến 13,03%. Nhóm “Khác” chiếm 38,62%. Dữ liệu có sự tập trung lớn ở một số tiểu bang chủ chốt.
1. tieuluan <- tieuluan %>%
2. mutate(mucgianha = case_when(
3. price < 100000 ~ "Rất rẻ",
4. price < 300000 ~ "Rẻ",
5. price < 600000 ~ "Trung bình",
6. price < 1000000 ~ "Mắc",
7. price >= 1000000 ~ "Rất mắc"
8. ))
Giải thích kỹ thuật: 1. Thêm cột mới dựa trên giá nhà.
2-8. Gán nhãn phân loại giá nhà (Rất rẻ, Rẻ, Trung bình, Mắc, Rất mắc) dựa theo khoảng giá.
Nhận xét : Kết quả nhận được là mỗi bất động sản được gán nhãn mức giá tương ứng, thuận tiện cho phân tích và thống kê theo nhóm.
1. tieuluan <- tieuluan %>%
2. mutate(mucdientichnha = case_when(
3. house_size < 1500 ~ "Nhỏ",
4. house_size < 4000 ~ "Trung bình",
5. TRUE ~ "Lớn"
6. ))
Giải thích kỹ thuật:
2-6. Gán nhãn ‘Nhỏ’, ‘Trung bình’, ‘Lớn’ cho diện tích dựa trên các khoảng house_size.
Nhận xét : Kết quả giúp phân loại các bất động sản theo quy mô diện tích, thuận tiện cho việc phân tích và so sánh giữa các nhóm.
1. tieuluan %>%
2. group_by(mucdientichnha) %>%
3. summarise(mean_price = mean(price, na.rm = TRUE))
Giải thích kỹ thuật:
2-3. Tính giá trung bình cho từng nhóm diện tích.
Nhận xét: Nhà “Lớn” có giá cao nhất, 853.731,9 USD, gần gấp ba lần nhà “Nhỏ” (319.750,2 USD). Nhà “Trung bình” có giá là 493.700,8 USD. Điều này khẳng định quy mô diện tích là yếu tố quyết định chính đến giá trị.
1. tieuluan %>%
2. group_by(mucdientichnha) %>%
3. summarise(Q1_bed = quantile(bed, 0.25, na.rm = TRUE))
Giải thích kỹ thuật:
2-3. Tính giá trị tứ phân vị thứ nhất (Q1) số phòng ngủ.
Nhận xét: Diện tích nhà ảnh hưởng trực tiếp đến số phòng ngủ tối thiểu (Q1). Nhà “Lớn” có Q1_bed là 3, cao hơn so với nhà “Nhỏ” và “Trung bình” (cùng là 2). Điều này phản ánh nhà lớn có xu hướng đảm bảo số phòng ngủ tối thiểu cao hơn..
1. tieuluan %>%
2. group_by(mucgianha) %>%
3. summarise(median_price = median(price, na.rm = TRUE))
Giải thích kỹ thuật:
2-3. Tính giá trung vị cho từng nhóm mức giá nhà, bỏ qua giá trị thiếu.
Nhận xét: Mức giá nhà có sự phân hóa rõ rệt ở giá trung vị. Giá nhà ở mức “Rất mắc” là cao nhất (1.275.000 USD), gấp khoảng 17 lần so với giá nhà ở mức “Rất rẻ” (74.900 USD). Giá trung vị của nhóm “Mắc” (749.000 USD) gần gấp đôi nhóm “Trung bình” (418.500 USD). Điều này cho thấy sự chênh lệch lớn về giá trị thị trường giữa các phân khúc nhà ở.
1. tieuluan %>%
2. group_by(status) %>%
3. summarise(total_bed = sum(bed, na.rm = TRUE))
Giải thích kỹ thuật:
2-3. Tính tổng số phòng ngủ cho từng trạng thái, bỏ qua giá trị thiếu.
Nhận xét: Tổng số phòng ngủ nhà “Đã bán” (sold) (2.095.512) cao hơn nhà “Đang bán” (for sale) (1.652.410). Điều này cho thấy các bất động sản nhiều phòng ngủ hơn có xu hướng được giao dịch thành công nhiều hơn so với những căn đang niêm yết.
1. tieuluan %>%
2. group_by(mucdientichnha) %>%
3. summarise(sd_house_size = sd(house_size, na.rm = TRUE))
Giải thích kỹ thuật:
2-3. Tính độ lệch chuẩn của diện tích nhà ở từng nhóm.
Nhận xét: Độ lệch chuẩn (SD) diện tích cho thấy phân khúc “Trung bình” có độ phân tán lớn nhất (587,57 feet vuông). SD của nhà “Lớn” (371,48 feet vuông) thấp hơn SD của nhóm “Trung bình”. Nhóm “Nhỏ” có SD thấp nhất (236,07 feet vuông). Điều này chỉ ra sự đa dạng cao nhất về diện tích nằm ở phân khúc nhà “Trung bình”.
1. tieuluan %>%
2. group_by(status) %>%
3. summarise(mean_house_size = mean(house_size, na.rm = TRUE))
Giải thích kỹ thuật:
2-3. Tính giá trị trung bình diện tích nhà cho từng trạng thái, bỏ qua những giá trị thiếu.
Nhận xét: Nhà “Đang bán” (for sale) có diện tích trung bình lớn hơn (1.911,65 feet vuông) so với nhà “Đã bán” (sold) (1.809,43 feet vuông). Điều này cho thấy các bất động sản quy mô lớn (diện tích lớn hơn) có xu hướng tồn đọng và khó bán hơn trên thị trường.
1. tieuluan %>%
2. group_by(mucgianha) %>%
3. summarise(Q2_price = median(price, na.rm = TRUE))
Giải thích kỹ thuật:
2-3. Tính Q2 cho từng nhóm mức giá nhà, bỏ qua giá trị thiếu.
Nhận xét: Giá nhà trung vị (Q2) phân hóa rõ theo mức độ. Giá “Rất mắc” cao nhất (1.275.000 USD). Đáng chú ý, nhóm “Trung bình” có giá 41.850 USD, thấp hơn nhóm “Rẻ” (215.000 USD). Điều này cho thấy sự chênh lệch lớn về giá trị thị trường và có thể có sự bất thường trong phân loại nhóm “Trung bình”.
1. tieuluan %>%
2. group_by(status) %>%
3. summarise(mean_bed = mean(bed, na.rm = TRUE),
4. sd_bed = sd(bed, na.rm = TRUE))
Giải thích kỹ thuật:
2-4. Tính giá trị trung bình và độ lệch chuẩn của số phòng ngủ cho từng trạng thái, bỏ qua giá trị thiếu (NA).
Nhận xét: Nhà “Đang bán” (for sale) có cả số phòng ngủ trung bình (3,20) cao hơn và mức độ biến động (SD) lớn hơn (0,998) so với nhà “Đã bán” (sold) (TB: 3,12; SD: 0,945). Điều này gợi ý rằng những căn nhà có nhiều phòng ngủ hơn (TB cao hơn) và ít đồng nhất hơn (SD lớn hơn) có xu hướng tồn đọng trên thị trường.
1. tieuluan %>%
2. group_by(mucdientichnha) %>%
3. summarise(skew_price = skewness(price, na.rm = TRUE),
4. kur_price = kurtosis(price, na.rm = TRUE))
Giải thích kỹ thuật:
2-4. Tính độ lệch và độ nhọn phân phối giá nhà cho từng nhóm diện tích.
Nhận xét: Phân phối giá nhà “Lớn” có độ lệch (0,465) và độ nhọn (2,516) thấp nhất, cho thấy giá đồng nhất và gần chuẩn nhất. Ngược lại, nhà “Nhỏ” có độ lệch (1,948) và độ nhọn (7,979) cao nhất, chứng tỏ giá phân khúc này có biến động lớn và tập trung nhiều ở mức thấp.
1. tieuluan %>%
2. group_by(status, mucdientichnha) %>%
3. summarise(sd_bed = sd(bed, na.rm = TRUE),
4. var_bed = var(bed, na.rm = TRUE))
Giải thích kỹ thuật:
2-4. Tính độ lệch chuẩn và phương sai số phòng ngủ cho từng nhóm.
Nhận xét: Độ biến động số phòng ngủ (SD và Var) giảm nhẹ khi nhà được bán so với đang bán ở mọi phân khúc. Nhà “Lớn” có SD giảm từ 0,90 xuống 0,87 (khi bán). Nhóm “Nhỏ” luôn có SD thấp nhất (khoảng 0,73 – 0,76). Điều này cho thấy các căn nhà ít đa dạng hơn về số phòng ngủ có xu hướng dễ bán thành công hơn.
1. tieuluan %>%
2. group_by(mucdientichnha, status) %>%
3. summarise(Q1_price = quantile(price, 0.25, na.rm = TRUE),
4. Q3_price = quantile(price, 0.75, na.rm = TRUE))
Giải thích kỹ thuật:
2-4. Tính tứ phân vị dưới (Q1) và trên (Q3) của giá bán cho từng nhóm.
Nhận xét: Nhà “Lớn” có biên độ giá (Q1-Q3) cao nhất. Giá Q1 và Q3 của nhà “Đã bán” đều thấp hơn nhà “Đang bán” ở mọi phân khúc (ví dụ: Q1 “Trung bình” là 289.900 USD so với 299.900 USD). Điều này gợi ý rằng việc định giá thấp hơn mức thị trường là yếu tố then chốt giúp giao dịch thành công.
1. thongke2 <- tieuluan %>%
2. group_by(mucgianha, mucdientichnha) %>%
3. summarise(Soluong = n(), Giatritb = mean(price, na.rm = TRUE), max = max(price, na.rm = TRUE), min = min(price, na.rm = TRUE), Trungvi = median(price, na.rm = TRUE), Dolechchuan = sd(price, na.rm = TRUE), Q1 = quantile(price, 0.25, na.rm = TRUE), Q3 = quantile(price, 0.75, na.rm = TRUE)) %>%
4. arrange(mucgianha, mucdientichnha)
5. head(thongke2)
Giải thích kỹ thuật theo số thứ tự dòng:
Nhóm dữ liệu theo mức giá nhà và mức diện tích nhà.
Tính các đặc trưng thống kê cho từng nhóm
Sắp xếp bảng kết quả theo mức giá và diện tích nhà.
Hiển thị nhanh một số dòng đầu của kết quả thống kê.
Nhận xét: Phân bố giá nhà theo diện tích rất đa dạng, được chia thành 5 nhóm với giá tăng theo diện tích. Nhóm “Rất mắc” (trung bình \(\ge\) 1.260.000 USD) là phân khúc cao cấp/biệt thự, có biến động giá cao nhất (SD \(\approx\) 172.047–178.974 USD). Nhóm “Rất rẻ” có giá trung bình dưới 100.000 USD, còn nhóm “Mắc” (trung bình \(\approx\) 760.000 USD) có biến động giá thấp nhất (SD \(\approx\) 110.988–113.440 USD). Phân loại này rất quan trọng để đánh giá thị trường theo phân khúc giá – diện tích, phục vụ cho chiến lược định giá và đầu tư hiệu quả.
1. thongke3 <- tieuluan %>%
2. group_by(status, mucgianha) %>%
3. summarise(Soluong = n(), Giatritb = mean(price, na.rm = TRUE), max = max(price, na.rm = TRUE), min = min(price, na.rm = TRUE), Trungvi = median(price, na.rm = TRUE), Dolechchuan = sd(price, na.rm = TRUE), Q1 = quantile(price, 0.25, na.rm = TRUE), Q3 = quantile(price, 0.75, na.rm = TRUE)) %>%
4. arrange(status, mucgianha)
5. head(thongke3)
Giải thích kỹ thuật theo số thứ tự dòng:
1-2. Nhóm dữ liệu theo trạng thái nhà và mức giá nhà.
Tính các đặc trưng thống kê cho từng nhóm.
Sắp xếp kết quả theo trạng thái và mức giá nhà.
Hiển thị nhanh những dòng đầu tiên của kết quả.
Nhận xét: Sự biến động của giá nhà tuân theo phân khúc giá và ổn định giữa nhà đang rao bán (for_sale) và đã bán (sold). Giá trung bình tăng dần theo phân khúc, từ Rất rẻ (71.259 USD – 71.259 USD) đến Rất mắc (1.298.578 USD – 1.288.795 USD), với mức giá của nhóm đã bán gần tương tự nhóm rao bán. Độ lệch chuẩn tăng theo phân khúc (21.373 – 176.650 USD), cho thấy biến động giá cao hơn ở nhà cao cấp. Tính ổn định và đồng nhất này giúp xác định giá tham chiếu hợp lý và dự đoán biến động giá cho các bên liên quan.
1. thongke4 <- tieuluan %>%
2. group_by(status, mucgianha, mucdientichnha) %>%
3. summarise(Soluong = n(), Giatritb = mean(price, na.rm = TRUE), max = max(price, na.rm = TRUE), min = min(price, na.rm = TRUE), Trungvi = median(price, na.rm = TRUE), Dolechchuan = sd(price, na.rm = TRUE), Q1 = quantile(price, 0.25, na.rm = TRUE), Q3 = quantile(price, 0.75, na.rm = TRUE)) %>%
4. arrange(status, mucgianha, mucdientichnha)
5. head(thongke4)
Giải thích kỹ thuật theo cụm dòng:
1-4. Nhóm dữ liệu theo trạng thái, mức giá nhà, mức diện tích nhà rồi tính các đặc trưng thống kê tổng hợp cho từng nhóm.
5-6. Lọc và xem nhanh những dòng đầu tiên của bảng kết quả.
Nhận xét: Thống kê phản ánh sự đa dạng về giá và diện tích giữa nhà rao bán và đã bán. Nhóm Rẻ/Trung bình có số lượng giao dịch lớn và thanh khoản cao, trong khi nhóm Mắc/Rất mắc có giá cao (\(\approx\) 763.000 – 1.319.000 USD) nhưng biến động giá mạnh (SD \(\approx\) 112.000 – 179.000 USD). Giá trung bình giữa hai trạng thái giao dịch đồng nhất, cho thấy thị trường ổn định. Phân loại này giúp định hướng đầu tư: nhà rẻ/trung bình cho thanh khoản, nhà mắc cho lợi nhuận cao và rủi ro lớn.
1. df_year_price <- tieuluan %>%
2. group_by(prev_year) %>%
3. summarise(price_tb = mean(price, na.rm = TRUE)) %>%
4. arrange(prev_year)
5. df_year_price <- df_year_price %>%
6. filter(prev_year <= 2024) #
7. plot(df_year_price$prev_year, df_year_price$price_tb, type = "l", col = "turquoise2", main = "Hình 1. Biến động giá bán bất động sản theo năm", xlab = "Năm", ylab = "Giá bán trung bình (USD)")
8. grid()
9. abline(h = mean(df_year_price$price_tb), lty = 2, col = "orange")
10. legend("topright", legend = c("Đường giá trung bình", "Đường trung bình"), lty = c(1, 2), col = c("turquoise2", "orange"), bty = "n")
11. box(lwd = 2, col = "gray40")
Giải thích kỹ thuật theo cụm dòng:
1-3. Nhóm dữ liệu theo năm, tính giá bán trung bình mỗi năm, sắp xếp theo năm tăng dần.
4-6. Lọc chỉ giữ các năm nhỏ hơn hoặc bằng 2024, lưu kết quả vào bảng tổng hợp.
8-11. Thêm lưới, đường ngang tại giá trung bình, chú thích phân biệt các đường, và viền khung cho biểu đồ.
Nhận xét: Phân tích giá bán bất động sản \(\text{(USD)}\) tại Hoa Kỳ cho thấy tính chu kỳ cực đoan, chịu ảnh hưởng của các cuộc khủng hoảng. Giá đã giảm sâu từ 400.000 USD (\(\text{1910}\)) xuống đáy lịch sử 150.000 USD vào đầu \(\text{1940}\) (phản ánh Đại Suy thoái). Sau đó, giá tăng vọt lên đỉnh 700.000 USD cuối \(\text{1960}\) (bong bóng hậu chiến tranh). Gần \(\text{2020}\), thị trường trải qua cú sốc giảm giá mạnh từ 550.000 USD về 280.000 USD, nhấn mạnh tính dễ bị tổn thương bởi rủi ro đuôi và khủng hoảng thanh khoản.
1. status_count <- table(tieuluan$status)
2. bp <- barplot(status_count, main = "Hình 2. Số lượng nhà theo trạng thái", xlab = "Trạng thái", ylab = "Số lượng", col = c("blue", "#FF4FF0"), ylim = c(0, max(status_count) * 1.3))
3. text(x = bp, y = status_count, labels = status_count, pos = 3, cex = 0.9, font = 2, col = "black")
4. grid()
5. box(lwd = 2, col = "gray40")
6. abline(h = mean(status_count), lty = 2, col = "orange")
Giải thích kỹ thuật ngắn gọn từng cụm dòng:
Tạo bảng đếm trạng thái nhà.
Vẽ biểu đồ cột số lượng nhà theo từng trạng thái, cài đặt màu sắc, tiêu đề, nhãn.
Thêm nhãn số lượng lên các cột.
4-5. Thêm lưới và khung viền cho biểu đồ.
Nhận xét: Sự phân bố số lượng nhà theo trạng thái cho thấy nhà đã bán (sold) (670.655 căn) cao hơn đáng kể nhà đang rao bán (for_sale) (516.909 căn). Điều này phản ánh phần lớn bất động sản đã giao dịch thành công, hàm ý nhu cầu mua cao và tốc độ tiêu thụ tốt trên thị trường. Tuy nhiên, vẫn còn một nguồn cung khá dồi dào đang chờ bán.
1. boxplot(tieuluan$bed, main = "Hình 3. Phân phối số phòng ngủ", ylab = "Số lượng phòng ngủ", col = "#9D00FF")
2. grid()
3. box(lwd = 2, col = "gray40")
4. abline(h = mean(tieuluan$bed), lty = 2, col = "orange")
5. abline(v = median(tieuluan$bed), lty = 3, col = "gray70")
Giải thích kỹ thuật theo cụm dòng:
2-3. Thêm lưới và viền cho biểu đồ giúp dễ theo dõi, tăng độ nổi bật khung hình.
Thêm đường kẻ ngang tại giá trị trung bình số phòng ngủ (tham chiếu).
Thêm đường kẻ dọc tại giá trị trung vị số phòng ngủ (tham chiếu).
Nhận xét: Biểu đồ Boxplot cho thấy trung vị số phòng ngủ là 3 phòng, là mức phổ biến nhất trên thị trường. 50% số nhà tập trung cao trong khoảng 3 đến 4 phòng ngủ. Các giá trị ngoại lai tại 1 và 7 phòng ngủ là sản phẩm hiếm. Hàm ý là nhu cầu thị trường tập trung mạnh vào nhà ở gia đình cỡ vừa (3–4 phòng).
1. top_state <- tieuluan %>% count(state, sort = TRUE) %>% top_n(10, n)
2. pie(top_state$n, labels = paste(top_state$state, "-", round(100 * top_state$n / sum(top_state$n), 1), "%"), main = "Hình 4. Top 10 bang có nhiều nhà nhất", col = rainbow(10), border = NA, cex = 0.7)
3. box(lwd = 2, col = "gray40")
4. grid()
5. abline(h = max(top_state$n)/2, lty = 2, col = "orange")
6. abline(v = 5, lty = 3, col = "gray70")
Giải thích kỹ thuật theo cụm dòng:
Đếm số lượng nhà ở từng bang, sắp xếp giảm dần và lấy top 10 bang có nhiều nhà nhất.
Vẽ biểu đồ hình tròn tỷ lệ số nhà của 10 bang này; nhãn gồm tên bang và phần trăm, màu sắc phân biệt.
3-6. Thêm viền, lưới, các đường ngang/đứng đánh dấu: một nửa cực đại và vị trí giữa số bang biểu diễn.
Nhận xét: Biểu đồ cho thấy sự tập trung cao độ của số lượng nhà ở tại các bang lớn. Cụ thể, \(\mathbf{3}\) bang là California (\(\mathbf{21,2\%}\)), Florida (\(\mathbf{19,6\%}\)) và Texas (\(\mathbf{14,9\%}\)) đã chiếm hơn \(\mathbf{55\%}\) tổng số nhà. Sự tập trung này phản ánh quy mô dân số lớn và hấp dẫn kinh tế, khiến \(\mathbf{3}\) bang này là động lực chính của thị trường bất động sản. \(\text{New York}\) (\(\text{5.9}\%\)) có tỷ trọng nhỏ hơn nhiều.
1. par(mar = c(5, 9, 4, 5) + 0.1)
2. state_count <- sort(table(tieuluan$state), decreasing = FALSE)
3. state_min10 <- head(state_count, 10)
4. bp <- barplot(state_min10, horiz = TRUE, main = "Hình 5. Top 10 bang có ÍT nhà nhất", xlab = "Số lượng nhà", col = "#006600", las = 1, xlim = c(0, max(state_min10) * 1.6), cex.names = 0.9)
5. text(x = state_min10, y = bp, labels = state_min10, pos = 4, xpd = TRUE, cex = 0.8, font = 2, col = "black")
6. grid()
7. box(lwd = 2, col = "gray40")
8. abline(v = mean(state_min10), lty = 2, col = "orange")
Giải thích kỹ thuật theo cụm dòng:
2-3. Tính số lượng nhà từng bang, lấy 10 bang có ít nhà nhất.
Vẽ biểu đồ cột ngang cho 10 bang này, thiết lập màu, nhãn trục,
tiêu đề, giới hạn trục x, và căn chỉnh nhãn ngang với
las = 1.
Thêm nhãn số lượng lên từng cột.
6-7. Thêm lưới nền và đường viền cho biểu đồ.
Nhận xét: Biểu đồ cho thấy sự tập trung cực kỳ thấp tại các bang này, với số lượng nhà dao động từ 2.562 căn (Mississipi) đến 52 căn (Virgin Islands). Sự phân bố này thể hiện sự phân phối lệch của thị trường. Hàm ý là các khu vực này có mật độ dân số thấp hoặc thanh khoản bất động sản rất thấp, nên không phải là động lực chính của thị trường nhà ở toàn quốc.
1. state_freq <- sort(table(tieuluan$state))
2. top10_states <- head(state_freq, 10)
3. labels <- paste(names(top10_states), "-", round(top10_states / sum(top10_states) * 100, 2), "%")
4. pie(top10_states, labels = labels, main = "Hình 6. Tỷ lệ nhà ở 10 bang có ít nhà nhất", col = rainbow(10), border = NA, cex = 0.7)
5. grid()
6. abline(h = max(top10_states)/2, lty = 2, col = "orange")
7. abline(v = 5, lty = 3, col = "gray70")
8. abline(h = median(top10_states), lty = 4, col = "black")
Giải thích kỹ thuật theo cụm dòng:
2-3. Lấy 10 bang ít nhất, tạo nhãn ghép tên bang với tỉ lệ phần trăm.
5-8. Thêm lưới, các đường ngang/đứng đánh dấu: một nửa cực đại, vị trí giữa, và trung vị số lượng nhà.
Nhận xét: Sự phân bổ nhà ở trong nhóm này không đồng đều, lệch rõ rệt về Mississippi (\(\mathbf{33,99\%}\)) và North Dakota (\(\mathbf{16,55\%}\)), chiếm hơn một nửa (\(\mathbf{50,54\%}\)) tổng số nhà của nhóm. Điều này hàm ý Mississippi và North Dakota có quy mô bất động sản lớn hơn đáng kể so với các bang nhỏ/lãnh thổ khác (như Virgin Islands).
1. plot(log(tieuluan$house_size), log(tieuluan$price), main = "Hình 7. Log-Log Plot: Diện tích nhà và Giá bán", xlab = "log(Diện tích nhà)", ylab = "log(Giá bán)", col = "lightgreen", pch = 19)
2. abline(lm(log(price) ~ log(house_size), data = tieuluan), col = "red", lwd = 3)
3. grid()
4. box(lwd = 2, col = "gray40")
5. abline(h = median(log(tieuluan$price)), lty = 2, col = "orange")
6. abline(v = median(log(tieuluan$house_size)), lty = 2, col = "orange")
Giải thích kỹ thuật từng cụm dòng code:
1. Vẽ biểu đồ phân tán giữa log(diện tích nhà) và log(giá bán), dùng màu xanh nhạt cho điểm, đặt tiêu đề và nhãn trục (log-log plot).
2. Thêm đường hồi quy tuyến tính (“lm”) vào biểu đồ với màu đỏ và độ dày đường cao.
3. Thêm lưới (grid) cho biểu đồ giúp dễ đọc giá trị.
4. Thêm đường viền cho biểu đồ để khung hình nổi bật rõ hơn.
5-6. Thêm đường kẻ đứt màu cam tại vị trí trung vị log(giá bán) (ngang) và trung vị log(diện tích nhà) (dọc).
Nhận xét: Biểu đồ \(\text{Log-Log Plot}\) cho thấy mối tương quan dương mạnh mẽ và tuyến tính giữa \(\text{log(Diện tích nhà)}\) và \(\text{log(Giá bán)}\). Đường hồi quy có độ dốc dương rõ rệt, khẳng định giá bán bất động sản tăng theo cấp số nhân so với diện tích. Hàm ý là diện tích là yếu tố quyết định giá trị tài sản và việc tăng quy mô dẫn đến tăng giá trị lũy tiến.
1. ggplot(tieuluan, aes(x = mucdientichnha, fill = status)) +
2. geom_bar(position = "dodge") +
3. geom_text(stat = "count", aes(label = ..count.., group = status), position = position_dodge(0.9), vjust = -0.3, size = 3) +
4. scale_fill_manual(values = c("#9A7", "red")) +
5. labs(title = "Hình 8. Trạng thái bán theo mức diện tích nhà", x = "Mức diện tích", y = "Số lượng nhà", fill = "Trạng thái") +
6. theme_minimal() +
7. theme(legend.position = "right")
Giải thích kỹ thuật theo cụm dòng:
Ánh xạ nhóm diện tích nhà lên trục x, dùng màu phân biệt theo trạng thái bán/lưu trữ và khởi tạo ggplot.
Vẽ biểu đồ cột, các trạng thái được đặt cạnh nhau bằng
position="dodge" để dễ so sánh.
Thêm nhãn số lượng lên từng cột, căn chỉnh vị trí để không bị che bởi cột khác.
Tùy chỉnh màu cho từng trạng thái giao dịch.
5-7. Thêm tiêu đề, nhãn trục, tối giản giao diện, ẩn chú giải màu.
Nhận xét: Phân khúc Trung bình (\(\mathbf{385.020}\) \(\mathbf{sold}\)) và Nhỏ (\(\mathbf{273.012}\) \(\mathbf{sold}\)) là động lực thanh khoản chính, với số lượng nhà đã bán vượt trội nhà đang rao bán. Điều này khẳng định nhu cầu cốt lõi tập trung vào các tài sản hiệu quả về chi phí. Ngược lại, phân khúc Lớn là nơi nguồn cung vượt cầu (\(\mathbf{15.754}\) \(\mathbf{for\_sale}\) so với \(\mathbf{12.623}\) \(\mathbf{sold}\)), cho thấy tính thanh khoản thấp hơn.
1. ggplot(tieuluan %>% filter(status == "sold"), aes(x = mucgianha, fill = mucgianha)) +
2. geom_bar() +
3. geom_text(stat = "count", aes(label = ..count..), hjust = -0.1, size = 2) +
4. coord_flip() +
5. scale_fill_manual(values = c("#023E8A", "#0077B6", "#00B4D8", "#48CAE4", "#90EE90")) +
6. labs(title = "Hình 9. Số lượng nhà đã bán theo mức giá", x = "Mức giá", y = "Số lượng nhà") +
7. theme_minimal(base_size = 13) +
8. theme(plot.title = element_text(hjust = 0.5, face = "bold"), legend.position = "none")
Giải thích kỹ thuật theo cụm dòng:
Chỉ lấy dữ liệu nhà đã bán; thiết lập ggplot với nhóm mức giá làm trục x, tô màu theo mức giá.
Vẽ biểu đồ cột số lượng nhà theo từng mức giá.
Thêm nhãn số lượng lên từng cột.
Đổi biểu đồ sang dạng ngang để dễ so sánh.
Tùy chỉnh màu từng mức giá.
6-8. Thêm tiêu đề, nhãn trục, căn giữa tiêu đề, ẩn chú giải màu và tối giản giao diện.
Nhận xét: Số lượng giao dịch đã bán (sold) tập trung áp đảo ở phân khúc Trung bình (\(\approx\) 262 nghìn căn) và Rẻ (239.611 căn). Hai phân khúc này chiếm phần lớn khối lượng giao dịch và có thanh khoản cao nhất. Ngược lại, các phân khúc giá cao (Mắc và Rất mắc) có khối lượng giao dịch thấp hơn nhiều, hàm ý thanh khoản thấp hơn.
1. ggplot(tieuluan %>% filter(status == "for_sale"), aes(x = mucgianha, fill = mucgianha)) +
2. geom_bar() +
3. geom_text(stat = "count", aes(label = ..count..), hjust = -0.1, size = 2) +
4. coord_flip() +
5. scale_fill_manual(values = c("#7B2CBF", "#9D4EDD", "#C77DFF", "#E45A84", "#FF006E")) +
6. labs(title = "Hình 10. Số lượng nhà đang rao bán theo mức giá", x = "Mức giá", y = "Số lượng nhà") +
7. theme_minimal(base_size = 13) +
8. theme(plot.title = element_text(hjust = 0.5, face = "bold"), legend.position = "none")
Giải thích kỹ thuật:
Lọc dữ liệu nhà đang rao bán và thiết lập ggplot cho trục x là nhóm mức giá với màu phân biệt từng nhóm.
Vẽ biểu đồ cột (bar chart) số lượng nhà theo từng mức giá.
Thêm nhãn số lượng lên từng cột của biểu đồ.
Đổi biểu đồ từ dạng đứng sang ngang cho dễ đọc.
Tùy chỉnh màu sắc cho từng nhóm mức giá.
Thêm tiêu đề và nhãn trục biểu đồ.
7-8. Đơn giản hóa giao diện, căn giữa tiêu đề, ẩn chú giải màu.
Nhận xét: Nguồn cung nhà đang rao bán (for_sale) tập trung cao nhất ở phân khúc Trung bình (\(\approx\) 204 nghìn căn) và Rẻ (174.422 căn), chiếm ưu thế tuyệt đối trong tổng nguồn cung. Ngược lại, phân khúc Rất rẻ và Rất mắc có nguồn cung rất hạn chế. Điều này hàm ý người bán tập trung định giá ở phân khúc Trung bình và Rẻ, phản ánh sự tập trung của thanh khoản và nhu cầu thị trường tiềm năng.
1. pie_data <- tieuluan %>%
2. group_by(status, mucdientichnha) %>% summarise(count = n()) %>% mutate(ty_le = count / sum(count) * 100)
3. ggplot(pie_data, aes(x = "", y = ty_le, fill = mucdientichnha)) +
4. geom_col(width = 1, color = "white") +
5. coord_polar(theta = "y") +
6. facet_wrap(~status) +
7. geom_text(aes(label = paste0(round(ty_le, 1), "%")), position = position_stack(vjust = 0.5), color = "darkblue", size = 4) +
8. scale_fill_manual(values = c("#FFD700", "#FFB6C1", "#FF69B4", "#FF1493")) +
9. labs(title = "Hình 11. Tỷ lệ trạng thái theo mức diện tích nhà") +
10. theme_void(base_size = 13) +
11. theme(plot.title = element_text(hjust = 0.5, face = "bold"), legend.position = "none")
Giải thích kỹ thuật:
Gom nhóm theo trạng thái và mức diện tích nhà, đếm từng nhóm, tính tỷ lệ phần trăm.
Thiết lập ggplot: dùng tỷ lệ phần trăm làm trục y, phân màu theo mức diện tích nhà.
3-4. Vẽ thanh và đưa sang dạng hình bánh (pie chart).
Chia biểu đồ thành từng trạng thái giao dịch.
Thêm nhãn hiển thị phần trăm lên từng phần của hình bánh.
Đặt màu riêng cho từng nhóm diện tích nhà.
8-11. Thêm tiêu đề, tối giản giao diện, căn giữa tiêu đề, ẩn chú giải màu.
Nhận xét: Cả nhà đang rao bán và đã bán đều tập trung áp đảo vào phân khúc Trung bình (\(\approx\) 57%–59%). Phân khúc Nhỏ có tỷ trọng đã bán (\(\mathbf{40,7\%}\)) cao hơn đang rao bán (\(\mathbf{37,2\%}\)), hàm ý thanh khoản cao nhất (cầu vượt cung). Ngược lại, phân khúc Lớn có tỷ trọng đã bán thấp hơn đang rao bán (\(\mathbf{1,9\%}\) so với \(\mathbf{3\%}\)), cho thấy thanh khoản thấp nhất và thời gian lưu kho dài hơn.
1. ggplot(tieuluan, aes(x = price)) +
2. geom_histogram(data = tieuluan %>% filter(status == "for_sale"), binwidth = 100000, fill = "darkblue", alpha = 0.7) +
3. geom_histogram(data = tieuluan %>% filter(status == "sold"), binwidth = 100000, fill = "orange", alpha = 0.7) +
4. labs(title = "Hình 12. Phân phối giá bất động sản theo trạng thái giao dịch", x = "Giá bất động sản (USD)", y = "Số lượng") +
5. theme_minimal() +
6. theme(legend.position = "none")
Giải thích kỹ thuật:
Vẽ biểu đồ histogram phân phối giá bất động sản.
Chồng hai histogram theo trạng thái giao dịch: “for_sale” màu xanh đậm, “sold” màu cam với độ trong suốt.
Dùng cùng một trục X (giá), giúp so sánh trực tiếp giữa hai trạng thái.
4-6. Đặt tiêu đề, nhãn trục, đơn giản giao diện và ẩn chú giải màu.
Nhận xét: Biểu đồ cho thấy sự phân phối lệch phải, với tần suất giao dịch tập trung cao nhất ở phân khúc dưới \(\mathbf{500.000}\) \(\text{USD}\) và đạt đỉnh trong khoảng \(\mathbf{250.000}\) \(\text{USD}\)–\(\mathbf{500.000}\) \(\text{USD}\). Hai lớp đã bán và đang rao bán gần như trùng khớp, hàm ý thanh khoản cốt lõi tập trung ở giá cả phải chăng (dưới \(\mathbf{500.000}\) \(\text{USD}\)) và là dấu hiệu của định giá thị trường hiệu quả.
1. freq_table <- tieuluan %>% group_by(mucgianha, mucdientichnha) %>% summarise(count = n()) %>% ungroup()
2. ggplot(freq_table, aes(x = mucdientichnha, y = mucgianha, fill = count)) +
3. geom_tile(color = "white") +
4. scale_fill_gradient(low = "lightyellow", high = "darkred") +
5. theme_minimal() +
6. labs(x = "Diện tích nhà", y = "Mức giá nhà", fill = "Số lượng", title = "Hình 13. Mối quan hệ giữa diện tích và giá nhà")
Giải thích kỹ thuật:
Vẽ biểu đồ dạng lưới (tile) thể hiện số lượng từng nhóm kết hợp diện tích và giá nhà.
Mỗi ô biểu đồ thể hiện số lượng ở từng cặp nhóm.
3-4. Tô màu từ giá trị nhỏ đến lớn, giúp dễ so sánh.
5-6. Giao diện đơn giản, tiêu đề và nhãn rõ ràng.
Nhận xét: \(\text{Heatmap}\) khẳng định thanh khoản cao nhất tập trung ở phân khúc Giá Trung bình và Diện tích Trung bình (tần suất \(\mathbf{> 300.000}\) căn). Các ô Giá Rẻ kết hợp với Diện tích Nhỏ/Trung bình cũng có tần suất cao (\(\mathbf{> 200.000}\) căn). Nhu cầu cốt lõi thị trường hướng đến các tài sản hiệu quả về chi phí. Ngược lại, phân khúc Giá Rất mắc/Mắc kết hợp với Diện tích Lớn có thanh khoản rất thấp (tần suất \(\mathbf{< 100.000}\) căn).
1. ggplot(tieuluan, aes(x = log(house_size_m2 + 1), y = log(price + 1), color = mucgianha)) +
2. geom_point(alpha = 0.2) +
3. geom_smooth(method = "lm", se = FALSE, color = "red", linetype = 2, size = 0.8) +
4. theme_minimal() +
5. labs(x = "log(Diện tích nhà m²)", y = "log(Giá nhà)", color = "Mức giá", title = "Hình 14. Phân tán log(Diện tích nhà) và log(Giá nhà)")
Giải thích kỹ thuật:
Vẽ biểu đồ phân tán log giữa diện tích nhà và giá nhà, phân nhóm theo mức giá.
Hiển thị điểm dữ liệu với độ trong suốt.
Thêm đường xu hướng hồi quy tuyến tính.
4-5. Tùy chỉnh giao diện, nhãn và tiêu đề.
Nhận xét: Mối quan hệ \(\text{log-log}\) cho thấy giá nhà tăng tỷ lệ thuận và lũy tiến so với diện tích. Phần lớn nhà tập trung ở phân khúc phổ biến (\(\text{log(diện tích 4,5–6)}\) và \(\text{log(giá 10–14)}\)). Sự chồng lấn các mức giá khẳng định giá nhà chịu ảnh hưởng bởi nhiều yếu tố khác ngoài diện tích (vị trí, chất lượng).
1. tmp <- tieuluan %>%
2. group_by(status, mucgianha, mucdientichnha) %>% summarise(n = n()) %>% ungroup()
3. ggplot(tmp, aes(x = status, y = n, fill = mucgianha)) +
4. geom_col(position = 'dodge') +
5. facet_wrap(~mucdientichnha) +
6. labs(title = "Hình 15. Số lượng theo trạng thái, mức giá và mức diện tích nhà", x = "Trạng thái giao dịch", y = "Số lượng", fill = "Mức giá nhà") +
7. theme_minimal(base_size = 13) +
8. theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 10))
Giải thích kỹ thuật:
Gom nhóm dữ liệu theo trạng thái, mức giá và mức diện tích, đồng thời đếm số lượng từng nhóm.
Vẽ biểu đồ cột, so sánh số lượng giữa các trạng thái, phân biệt theo mức giá.
3-5. Hiển thị các nhóm cột cạnh nhau (dodge), chia nhỏ biểu đồ theo từng mức diện tích nhà.
6-8. Thêm tiêu đề, nhãn trục, chú giải và chỉnh giao diện cho biểu đồ.
Nhận xét: Nhà Diện tích Trung bình và Nhỏ là trung tâm giao dịch và có thanh khoản cao nhất. Số lượng đã bán (sold) đạt đỉnh ở Giá Trung bình và Diện tích Trung bình (\(\approx\) 175.000 căn). Nhà Diện tích Nhỏ cũng rất dễ bán ở Giá Rẻ (\(\approx\) 140.000 căn), phản ánh ưu tiên chi phí. Ngược lại, nhà Diện tích Lớn là phân khúc khó bán nhất (thanh khoản thấp), với số lượng giao dịch cực kỳ ít (\(\text{< 10.000}\) căn) và nguồn cung \(\text{for\_sale}\) vượt cầu \(\text{sold}\) ở mức giá cao.
1. ggplot(tieuluan, aes(x = house_size)) +
2. geom_histogram(binwidth = 150, fill = 'orange', color = 'navy') +
3. facet_wrap(~mucdientichnha) +
4. labs(title = 'Hình 16. Phân phối diện tích nhà theo từng mức diện tích', x = 'Diện tích nhà (sq ft)', y = 'Số lượng') +
5. theme_minimal(base_size = 13) +
6. theme(plot.title = element_text(hjust = 0.5, size = 10, face = "bold"))
Giải thích kỹ thuật:
Tạo biểu đồ histogram cho diện tích nhà.
Chọn chiều rộng cột, màu tô và màu viền cho biểu đồ.
Phân chia biểu đồ theo nhóm mức diện tích nhà.
Thêm tiêu đề và nhãn trục cho biểu đồ.
5-6. Tùy chỉnh giao diện và định dạng tiêu đề.
Nhận xét: Phân phối diện tích nhà cho thấy các nhóm Nhỏ và Trung bình chiếm phần lớn số lượng, tập trung nhiều nhất quanh mức 1.000–3.000 sq ft. Nhóm Lớn có số lượng ít hơn đáng kể, tập trung ở khoảng 4.000–5.000 sq ft. Điều này khẳng định phần lớn nhà trên thị trường thuộc phân khúc diện tích vừa và nhỏ, phù hợp với nhu cầu phổ biến của người mua.
1. ggplot(tieuluan, aes(x = price)) +
2. geom_histogram(binwidth = 100000, fill = 'blue', color = 'red') +
3. facet_wrap(~mucgianha) +
4. labs(title = 'Hình 17. Phân phối giá bất động sản theo mức giá nhà', x = 'Giá bất động sản (USD)', y = 'Số lượng') +
5. theme_minimal(base_size = 13) +
6. theme(plot.title = element_text(hjust = 0.5, size = 10, face = "bold"))
Giải thích kỹ thuật:
Tạo biểu đồ histogram cho biến giá bất động sản.
Đặt chiều rộng cột, màu tô và màu viền cho histogram.
Phân chia biểu đồ theo nhóm mức giá nhà.
Thêm tiêu đề, nhãn trục X/Y cho biểu đồ.
5-6. Tùy chỉnh giao diện hiển thị và định dạng tiêu đề.
Nhận xét: Phần lớn các căn thuộc nhóm Rẻ và Trung bình, tập trung ở khoảng dưới \(\mathbf{500.000}\) \(\text{USD}\), là phân khúc phổ biến nhất trên thị trường. Nhóm Mắc dao động \(\mathbf{500.000}\)–\(\mathbf{1.000.000}\) \(\text{USD}\), và Rất mắc (trên \(\mathbf{1.000.000}\) \(\text{USD}\)) chiếm tỷ lệ nhỏ. Điều này khẳng định thị trường chủ yếu hướng đến phân khúc giá trung bình và thấp, phù hợp với nhu cầu ở thực.
1. tieuluan_2020_2022 <- tieuluan %>% filter(prev_year %in% c(2020, 2021, 2022))
2. ggplot(tieuluan_2020_2022, aes(x = price)) +
3. geom_histogram(binwidth = 100000, fill = "green", color = "orange") +
4. facet_wrap(~prev_year) +
5. labs(title = "Hình 18. Histogram phân phối giá từ 2020–2022", x = "Giá bất động sản (USD)", y = "Số lượng") +
6. theme_minimal(base_size = 13) +
7. theme(plot.title = element_text(hjust = 0.5, face = "bold"), axis.text.x = element_text(size = 8))
Giải thích kỹ thuật:
2-3. Vẽ biểu đồ histogram cho giá bất động sản, chọn kích thước cột và quy định màu sắc.
Phân chia biểu đồ theo từng năm bằng face_wrap.
Thêm tiêu đề và nhãn trục cho biểu đồ.
6-7. Tùy chỉnh giao diện và căn chỉnh tiêu đề, nhãn trục.
Nhận xét: Giá nhà có xu hướng tăng rõ rệt qua các năm (\(\text{2020}\)–\(\text{2022}\)), thể hiện qua việc đường phân phối dịch dần sang phải. Phần lớn nhà tập trung ở mức dưới \(\mathbf{500.000}\) \(\text{USD}\), nhưng số lượng ở nhóm giá này và nhóm trên \(\mathbf{1.000.000}\) \(\text{USD}\) đều tăng mạnh vào \(\text{2021}\) và \(\text{2022}\). Sự thay đổi này phản ánh ảnh hưởng của nhu cầu cao và chi phí tăng sau đại dịch.
1. ggplot(tieuluan, aes(x = bed)) +
2. geom_density(fill = "darkorange") +
3. facet_wrap(~mucgianha) +
4. labs(title = "Hình 19. Density plot số phòng ngủ theo nhóm mức giá", x = "Số phòng ngủ", y = "Mật độ") +
5. theme_minimal(base_size = 13) +
6. theme(plot.title = element_text(hjust = 0.5, face = "bold"), axis.text.x = element_text(size = 8))
Giải thích kỹ thuật:
Vẽ biểu đồ mật độ (density plot) cho số phòng ngủ.
Thêm phần tô màu cho đường mật độ.
Tách biểu đồ thành từng nhóm mức giá nhà.
Thêm tiêu đề và nhãn trục cho biểu đồ.
5-6. Tùy chỉnh giao diện đơn giản và căn chỉnh tiêu đề, nhãn trục.
Nhận xét: Tất cả các nhóm giá đều tập trung chủ yếu ở khoảng 2–4 phòng ngủ. Tuy nhiên, nhóm “rất mắc” và “mắc” có xu hướng xuất hiện nhiều bất động sản 4–6 phòng ngủ hơn, cho thấy nhà đắt tiền có quy mô lớn hơn. Nhóm “rẻ” và “rất rẻ” chủ yếu tập trung ở 2–3 phòng ngủ. Điều này khẳng định số phòng ngủ tăng dần theo mức giá, thể hiện mối quan hệ tích cực giữa quy mô nhà và giá bán.
1. tieuluan_21_22 <- tieuluan %>% filter(prev_year %in% c(2021, 2022)) %>% group_by(prev_year, mucgianha, status) %>% summarise(mean_size = mean(house_size, na.rm = TRUE))
2. ggplot(tieuluan_21_22, aes(x = mucgianha, y = mean_size, fill = status)) +
3. geom_col(position = "dodge") +
4. facet_wrap(~prev_year) +
5. labs(title = "Hình 20. Diện tích nhà trung bình theo nhóm giá, trạng thái từ 2021–2022", x = "Mức giá nhà", y = "Diện tích nhà trung bình (sq ft)", fill = "Trạng thái") +
6. theme_minimal(base_size = 13) +
7. theme(plot.title = element_text(hjust = 0.5, face = "bold"), axis.text.x = element_text(size = 8))
Giải thích kỹ thuật:
2-3. Vẽ biểu đồ cột so sánh diện tích nhà trung bình theo mức giá và trạng thái.
Chia nhỏ biểu đồ theo từng năm bằng faceting với
facet_wrap().
Đặt tiêu đề, tên trục, và chú giải cho biểu đồ.
6-7. Tùy chỉnh giao diện và căn chỉnh tiêu đề, nhãn trục.
Nhận xét: Quy mô tài sản ổn định theo mức giá trong suốt hai năm (\(\text{2021}\)–\(\text{2022}\)), khẳng định quy luật “giá trị cao đi kèm quy mô lớn” (Mắc/Rất mắc luôn trên \(\mathbf{2.000}\) \(\mathbf{sq}\) \(\mathbf{ft}\)). Tuy nhiên, ở nhóm Rất mắc, diện tích nhà đang rao bán (\(\text{for\_sale}\)) luôn cao hơn diện tích đã bán (\(\text{sold}\)). Điều này hàm ý người bán đưa ra các căn lớn hơn, và quá trình thương lượng đã điều chỉnh quy mô tài sản do người mua chỉ chấp nhận trả giá cao cho một quy mô nhất định.
Bộ dữ liệu Báo cáo tài chính BIDV được nhóm tác giả thu thập từ trang web “BIDV.com.vn” bao gồm các biến tài chính quan trọng của Ngân hàng TMCP Đầu tư và Phát triển Việt Nam (BIDV) được thu thập trong giai đoạn \(\text{15}\) năm, từ năm \(\text{2010}\) đến \(\text{2024}\). Các biến được chia thành nhiều nhóm: Quy mô (như Tổng tài sản, Dư nợ cho vay), Cơ cấu vốn (Vốn chủ sở hữu, Tổng nợ), Dòng tiền và Các khoản mục thu chi cốt lõi (như Doanh thu lãi thuần, Chi phí hoạt động, Chi phí tín dụng).
Ta giả tiến hành đọc từng sheet của file excel Báo cáo tài chính của BIDV giai đoạn 2010-2024 và gán cho từng sheet “Cân đối kế toán”, “Hoạt động kinh doanh”, “Lưu chuyển tiền tệ” tương ứng với các object “CDKT”, “HDKD” và “LCTT”.
1. CDKT <- read_excel( "~/Downloads/TLHK3:2025/Ngôn ngữ lập trình R/BCTC_BID_Final.xlsx", sheet = "CDKT")
2. HDKD <- read_excel("~/Downloads/TLHK3:2025/Ngôn ngữ lập trình R/BCTC_BID_Final.xlsx", sheet = "HDKD")
3. LCTT <- read_excel("~/Downloads/TLHK3:2025/Ngôn ngữ lập trình R/BCTC_BID_Final.xlsx" , sheet = "LCTT")
Giải thích kỹ thuật: 1., 2., 3. Đọc sheet các sheet và gán thành bảng dữ liệu.
Tiếp theo tác giả lọc 15 biến phù hợp với nhu cầu phân tích và gán vào một object mới tên là “BIDV”
1. CDKT_sel <- CDKT %>%
2. select(
3. Năm,
4. tong_tai_san = `TỔNG TÀI SẢN`,
5. von_chu_so_huu = `Vốn chủ sở hữu`,
6. tong_no_phai_tra = `Tổng nợ phải trả`,
7. du_no_cho_vay = `Cho vay khách hàng...10`,
8. du_phong_rui_ro = `Dự phòng rủi ro cho vay khách hàng`
9. )
10. HDKD_sel <- HDKD %>%
11. select(
12. Năm,
13. doanh_thu_lai_thuan = `Thu nhập lãi thuần`,
14. thu_nhap_phi_dich_vu = `Thu nhập từ hoạt động dịch vụ`,
15. loi_nhuan_truoc_thue = `Tổng lợi nhuận trước thuế`,
16. loi_nhuan_sau_thue = `Lợi nhuận sau thuế`,
17. chi_phi_hoat_dong = `Chi phí hoạt động`,
18. chi_phi_tin_dung = `Chi phí dự phòng rủi ro tín dụng`
19. )
20. LCTT_sel <- LCTT %>%
21. select(
22. Năm,
23. lc_tien_thuan_hdkd = `Lưu chuyển tiền thuần từ các hoạt động sản xuất kinh doanh`,
24. lc_tien_thuan_hddt = `Lưu chuyển tiền thuần từ hoạt động đầu tư`,
25. lc_tien_thuan_hdtc = `Lưu chuyển tiền từ hoạt động tài chính`,
26. tien_tuong_duong_cuoi_ky = `Tiền và tương đương tiền cuối kỳ`
27. )
28. BIDV <- CDKT_sel %>%
29. left_join(HDKD_sel, by = "Năm") %>%
30. left_join(LCTT_sel, by = "Năm")
31. colnames(BIDV) <- gsub(
32. "\\s+",
33. "_",
34. tolower(
35. stringi::stri_trans_general(colnames(BIDV), "Latin-ASCII")
36. )
37. )
Giải thích kỹ thuật:
1–9. Sử dụng hàm select() của gói dplyr
để lấy các cột cần thiết từ bảng số liệu CDKT. Đồng thời đặt lại tên các
cột cho dễ làm việc về sau, ví dụ: TỔNG TÀI SẢN đổi thành
tong_tai_san. 10–19. Lặp lại thao tác với
bảng HDKD, chỉ lấy các cột liên quan đến doanh thu, lợi nhuận, chi phí
và đặt lại tên tiếng Việt không dấu cho thống nhất.
20–27. Với bảng LCTT, tiếp tục dùng
select() để lấy các biến về tiền và hoạt động rồi đổi tên
chuẩn hóa.
28–30. Dùng left_join() để gộp ba bảng
đã chọn thành một bảng tổng hợp BIDV theo cột “Năm”.
31–37. Chuẩn hóa tên cột toàn bộ bảng BIDV: dùng hàm
chuyển về chữ thường, bỏ dấu, thay khoảng trắng bằng dấu
_.
1. head(BIDV)
Giải thích kỹ thuật: 1. Là lệnh để hiển thị vài dòng đầu tiên (mặc định 6 dòng) của bảng dữ liệu.
1. tail(BIDV)
Giải thích kỹ thuật: 1. Là lệnh để hiển thị một vài dòng cuối cùng (mặc định 6 dòng) của bảng dữ liệu
Ta sử dụng sử dụng một số lệnh bên dưới để xem thông tin chung của BIDV.
1. nrow(BIDV)
## [1] 15
Giải thích kỹ thuật: 1. Là lệnh trả về số lượng dòng (hay số bản ghi/row) của bảng dữ liệu BIDV
Nhận xét: Kết quả trả về có 15 dòng (quan sát) trong bộ dữ liệu BIDV.
1. ncol(BIDV)
## [1] 16
Giải thích kỹ thuật: 1. Là lệnh trả về số lượng cột (columns) của bảng dữ liệu BIDV.
Nhận xét: Sử dụng lệnh ncol() kết quả trả về có 16 cột (biến) trong bộ dữ liệu BIDV.
1. dim(BIDV)
## [1] 15 16
Giải thích kỹ thuật: Là lệnh trả về một vector gồm hai giá trị: số dòng (rows) và số cột (columns) của bảng dữ liệu BIDV.
Nhận xét: Kết quả trả về cho thấy bộ dữ liệu BIDV có 15 hàng (quan sát) và 16 cột (biến).
1. names(BIDV)
## [1] "nam" "tong_tai_san"
## [3] "von_chu_so_huu" "tong_no_phai_tra"
## [5] "du_no_cho_vay" "du_phong_rui_ro"
## [7] "doanh_thu_lai_thuan" "thu_nhap_phi_dich_vu"
## [9] "loi_nhuan_truoc_thue" "loi_nhuan_sau_thue"
## [11] "chi_phi_hoat_dong" "chi_phi_tin_dung"
## [13] "lc_tien_thuan_hdkd" "lc_tien_thuan_hddt"
## [15] "lc_tien_thuan_hdtc" "tien_tuong_duong_cuoi_ky"
Giải thích kỹ thuật: 1. Là lệnh trả về tên các biến (cột) của bảng dữ liệu BIDV.
Nhận xét: Sử dụng lệnh names() trả về danh sách các biến của bộ dữ liệu BIDV gồm: “nam”, “tong_tai_san”, “von_chu_so_huu”, “tong_no_phai_tra”, “du_no_cho_vay”, “du_phong_rui_ro”, “doanh_thu_lai_thuan”, “thu_nhap_phi_dich_vu”, “loi_nhuan_truoc_thue”, “loi_nhuan_sau_thue”, “chi_phi_hoat_dong”, “chi_phi_tin_dung”, “lc_tien_thuan_hdkd”, “lc_tien_thuan_hddt”, “lc_tien_thuan_hdtc”, “tien_tuong_duong_cuoi_ky”, phản ánh đầy đủ các thông tin tài chính và hoạt động của BIDV.
Dữ liệu bao gồm các biến sau, được tổng hợp chi tiết trong bảng dưới đây nhằm phục vụ cho quá trình phân tích:
| STT | Tên biến | Mô tả |
|---|---|---|
| 1 | nam | Năm báo cáo tài chính |
| 2 | tong_tai_san | Tổng tài sản hợp nhất tại thời điểm báo cáo (đơn vị tính VND) |
| 3 | von_chu_so_huu | Vốn chủ sở hữu của BIDV (đơn vị tính VND) |
| 4 | tong_no_phai_tra | Tổng nợ phải trả (đơn vị tính VND) |
| 5 | du_no_cho_vay | Dư nợ cho vay khách hàng tại thời điểm báo cáo (đơn vị tính VND) |
| 6 | du_phong_rui_ro | Dự phòng rủi ro cho vay khách hàng (đơn vị tính VND) |
| 7 | doanh_thu_lai_thuan | Thu nhập lãi thuần từ hoạt động tín dụng (đơn vị tính VND) |
| 8 | thu_nhap_phi_dich_vu | Thu nhập ròng từ phí dịch vụ ngân hàng (đơn vị tính VND) |
| 9 | loi_nhuan_truoc_thue | Tổng lợi nhuận trước thuế (đơn vị tính VND) |
| 10 | loi_nhuan_sau_thue | Lợi nhuận ròng sau thuế thu nhập doanh nghiệp (đơn vị tính VND) |
| 11 | chi_phi_hoat_dong | Tổng chi phí hoạt động trong kỳ (đơn vị tính VND) |
| 12 | chi_phi_tin_dung | Chi phí dự phòng rủi ro tín dụng trích lập (đơn vị tính VND) |
| 13 | lc_tien_thuan_hdkd | Lưu chuyển tiền thuần từ hoạt động kinh doanh (đơn vị tính VND) |
| 14 | lc_tien_thuan_hddt | Lưu chuyển tiền thuần từ hoạt động đầu tư (đơn vị tính VND) |
| 15 | lc_tien_thuan_hdtc | Lưu chuyển tiền thuần từ hoạt động tài chính (đơn vị tính VND) |
| 16 | tien_tuong_duong_cuoi_ky | Tiền và tương đương tiền cuối kỳ báo cáo (đơn vị tính VND) |
1. str(BIDV)
## tibble [15 × 16] (S3: tbl_df/tbl/data.frame)
## $ nam : chr [1:15] "2010" "2011" "2012" "2013" ...
## $ tong_tai_san : num [1:15] 3.66e+14 4.06e+14 4.85e+14 5.48e+14 6.50e+14 ...
## $ von_chu_so_huu : num [1:15] 2.42e+13 2.44e+13 2.65e+13 3.20e+13 3.36e+13 ...
## $ tong_no_phai_tra : num [1:15] 3.42e+14 3.81e+14 4.58e+14 5.16e+14 6.17e+14 ...
## $ du_no_cho_vay : num [1:15] 2.49e+14 2.88e+14 3.34e+14 3.85e+14 4.39e+14 ...
## $ du_phong_rui_ro : num [1:15] -5.29e+12 -5.86e+12 -5.91e+12 -6.15e+12 -6.62e+12 ...
## $ doanh_thu_lai_thuan : num [1:15] 9.19e+12 1.26e+13 9.21e+12 1.48e+13 1.68e+13 ...
## $ thu_nhap_phi_dich_vu : num [1:15] 2.41e+12 2.81e+12 1.88e+12 2.42e+12 2.98e+12 ...
## $ loi_nhuan_truoc_thue : num [1:15] 4.63e+12 4.22e+12 3.39e+12 5.29e+12 6.30e+12 ...
## $ loi_nhuan_sau_thue : num [1:15] 3.76e+12 3.20e+12 2.57e+12 4.05e+12 4.99e+12 ...
## $ chi_phi_hoat_dong : num [1:15] -5.55e+12 -6.65e+12 -4.57e+12 -7.39e+12 -8.62e+12 ...
## $ chi_phi_tin_dung : num [1:15] -1.32e+12 -4.54e+12 -3.52e+12 -6.48e+12 -6.99e+12 ...
## $ lc_tien_thuan_hdkd : num [1:15] 1.35e+13 -4.07e+12 -5.98e+12 3.28e+12 1.22e+13 ...
## $ lc_tien_thuan_hddt : num [1:15] -4.47e+11 -2.35e+12 -1.10e+12 -1.67e+12 -1.23e+12 ...
## $ lc_tien_thuan_hdtc : num [1:15] 3.61e+12 -1.65e+12 0.00 2.14e+12 -2.39e+12 ...
## $ tien_tuong_duong_cuoi_ky: num [1:15] 5.70e+13 4.89e+13 3.79e+13 4.16e+13 5.02e+13 ...
Giải thích kỹ thuật: 1. Dùng để hiển thị nhanh cấu trúc bên trong của bảng dữ liệu BIDV, bao gồm loại dữ liệu (class), số dòng, số cột và kiểu dữ liệu của từng biến.
Nhận xét: Cấu trúc tổng quát của bộ dữ liệu BIDV gồm 15 quan sát và 16 biến. Trong đó, biến “nam” có kiểu ký tự (chr) đại diện cho năm, các biến còn lại đều là kiểu số (num).
1. glimpse(BIDV)
## Rows: 15
## Columns: 16
## $ nam <chr> "2010", "2011", "2012", "2013", "2014", "2015…
## $ tong_tai_san <dbl> 3.662678e+14, 4.057555e+14, 4.847846e+14, 5.4…
## $ von_chu_so_huu <dbl> 2.421973e+13, 2.439046e+13, 2.649445e+13, 3.2…
## $ tong_no_phai_tra <dbl> 3.418986e+14, 3.811580e+14, 4.580811e+14, 5.1…
## $ du_no_cho_vay <dbl> 2.488985e+14, 2.880796e+14, 3.340091e+14, 3.8…
## $ du_phong_rui_ro <dbl> -5.293092e+12, -5.857480e+12, -5.914526e+12, …
## $ doanh_thu_lai_thuan <dbl> 9.191386e+12, 1.263896e+13, 9.208212e+12, 1.4…
## $ thu_nhap_phi_dich_vu <dbl> 2.411228e+12, 2.813420e+12, 1.881855e+12, 2.4…
## $ loi_nhuan_truoc_thue <dbl> 4.625568e+12, 4.219873e+12, 3.389918e+12, 5.2…
## $ loi_nhuan_sau_thue <dbl> 3.760715e+12, 3.199608e+12, 2.571943e+12, 4.0…
## $ chi_phi_hoat_dong <dbl> -5.545615e+12, -6.652479e+12, -4.574004e+12, …
## $ chi_phi_tin_dung <dbl> -1.316616e+12, -4.542126e+12, -3.521163e+12, …
## $ lc_tien_thuan_hdkd <dbl> 1.345221e+13, -4.066983e+12, -5.975368e+12, 3…
## $ lc_tien_thuan_hddt <dbl> -4.471060e+11, -2.346896e+12, -1.095187e+12, …
## $ lc_tien_thuan_hdtc <dbl> 3.614804e+12, -1.652150e+12, 0.000000e+00, 2.…
## $ tien_tuong_duong_cuoi_ky <dbl> 5.698530e+13, 4.891927e+13, 3.788718e+13, 4.1…
Giải thích kỹ thuật: 1. Là lệnh dùng để hiển thị nhanh cấu trúc bảng dữ liệu BIDV: mỗi biến là một dòng, hiển thị loại dữ liệu và các giá trị đầu tiên.
Nhận xét: Kết quả cho thấy cấu trúc của bộ dữ liệu gồm 15 quan sát và 16 biến. Trong đó, biến “nam” có kiểu ký tự (chr) thể hiện năm quan sát, còn các biến còn lại thuộc kiểu số thực (dbl) phản ánh các chỉ tiêu tài chính và dòng tiền của BIDV như tổng tài sản, vốn chủ sở hữu, lợi nhuận, chi phí và các dòng lưu chuyển tiền tệ.
1. sapply(BIDV, class)
## nam tong_tai_san von_chu_so_huu
## "character" "numeric" "numeric"
## tong_no_phai_tra du_no_cho_vay du_phong_rui_ro
## "numeric" "numeric" "numeric"
## doanh_thu_lai_thuan thu_nhap_phi_dich_vu loi_nhuan_truoc_thue
## "numeric" "numeric" "numeric"
## loi_nhuan_sau_thue chi_phi_hoat_dong chi_phi_tin_dung
## "numeric" "numeric" "numeric"
## lc_tien_thuan_hdkd lc_tien_thuan_hddt lc_tien_thuan_hdtc
## "numeric" "numeric" "numeric"
## tien_tuong_duong_cuoi_ky
## "numeric"
Giải thích kỹ thuật: 1. Là lệnh dùng để áp dụng hàm class() cho từng cột của bảng dữ liệu và trả về kiểu dữ liệu (class) của từng cột (biến) trong dạng vector.
Nhận xét: Kết quả cho thấy biến “nam” có kiểu ký tự (character) trong khi 15 biến còn lại đều có kiểu số (numeric).
1. unique(BIDV$nam)
## [1] "2010" "2011" "2012" "2013" "2014" "2015" "2016" "2017" "2018" "2019"
## [11] "2020" "2021" "2022" "2023" "2024"
Giải thích kỹ thuật: 1. là lệnh để trả về tất cả giá trị duy nhất của biến trong bảng dữ liệu.
Nhận xét: Kết quả trả về cho thấy dữ liệu bao gồm 15 năm quan sát liên tục từ 2010 đến 2024, phản ánh chuỗi thời gian nghiên cứu kéo dài trong 15 năm.
1. any(is.na(BIDV))
## [1] FALSE
Giải thích kỹ thuật: 1. Là lệnh kiểm tra xem bảng dữ liệu BIDV có bất kỳ giá trị thiếu (NA) không. Nếu có ít nhất một NA, trả về TRUE; nếu không có NA , trả về FALSE.
Nhận xét: Kết quả trả về là FALSE, cho thấy bộ dữ liệu BIDV không có giá trị NA nào.
1. sum(is.na(BIDV))
## [1] 0
Giải thích kỹ thuật: 1. Là lệnh dùng để đếm tổng số giá trị thiếu (NA) trong toàn bộ bảng dữ liệu BIDV.
Nhận xét: Kết quả trả về là 0, cho thấy toàn bộ dữ liệu BIDV không có giá trị thiếu.
1. colSums(is.na(BIDV))
## nam tong_tai_san von_chu_so_huu
## 0 0 0
## tong_no_phai_tra du_no_cho_vay du_phong_rui_ro
## 0 0 0
## doanh_thu_lai_thuan thu_nhap_phi_dich_vu loi_nhuan_truoc_thue
## 0 0 0
## loi_nhuan_sau_thue chi_phi_hoat_dong chi_phi_tin_dung
## 0 0 0
## lc_tien_thuan_hdkd lc_tien_thuan_hddt lc_tien_thuan_hdtc
## 0 0 0
## tien_tuong_duong_cuoi_ky
## 0
Giải thích kỹ thuật: 1. Là lệnh trả về số lượng giá trị thiếu (NA) ở từng cột của bảng dữ liệu BIDV.
Nhận xét: Kết quả trả về 0 cho tất cả các cột, cho thấy không có cột nào chứa giá trị NA. Điều này xác nhận dữ liệu BIDV hoàn chỉnh, tất cả 16 biến đều đầy đủ 15 quan sát.
1. names(BIDV)[colSums(is.na(BIDV)) > 0]
## character(0)
Giải thích kỹ thuật: 1. Là lệnh để trả về tên các biến (cột) trong bảng dữ liệu có ít nhất một giá trị thiếu (NA).
Nhận xét: Kết quả trả về là character(0), nghĩa là không có cột nào chứa giá trị NA.
1. duplicated(BIDV)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE
Giải thích kỹ thuật: 1. Là lệnh để trả về một vector logic, xác định các dòng bị lặp lại trong bảng dữ liệu.
Nhận xét: Kết quả trả về toàn FALSE, cho thấy không có dòng nào bị trùng lặp trong bộ dữ liệu BIDV.
1. sum(duplicated(BIDV))
## [1] 0
Giải thích kỹ thuật: 1. Là lệnh để đếm tổng số dòng bị trùng lặp trong bảng dữ liệu BIDV.
Nhận xét: Kết quả trả về là 0, nghĩa là không có dòng nào bị trùng lặp. Điều này xác nhận dữ liệu BIDV toàn bộ các quan sát đều duy nhất, không cần loại bỏ bản ghi trùng lặp.
1. BIDV$nam <- as.integer(BIDV$nam)
2. str(BIDV$nam)
## int [1:15] 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 ...
Giải thích kỹ thuật:
Là lệnh chuyển kiểu dữ liệu của biến nam trong bảng dữ liệu sang kiểu số nguyên (integer).
Là lệnh xem nhanh cấu trúc, kiểu dữ liệu biến.
Nhận xét: Sử dụng lệnh (1) chuyển biến nam từ kiểu ký tự sang kiểu số nguyên. Kết quả trả về là int [1:15] 2010 2011 2012 …2024, nghĩa là 15 quan sát của năm đã được chuyển thành số.
1. BIDV$ROE <- BIDV$loi_nhuan_sau_thue / BIDV$von_chu_so_huu
Giải thích kỹ thuật: 1. Là lệnh để tính và thêm biến ROE (Return On Equity) vào bảng dữ liệu , bằng cách lấy lợi nhuận sau thuế chia cho vốn chủ sở hữu.
1. BIDV$ROA <- BIDV$loi_nhuan_sau_thue / BIDV$tong_tai_san
Giải thích kỹ thuật: 1. Là lệnh để tính và thêm biến ROA (Return On Assets) vào bảng dữ liệu BIDV, bằng cách lấy lợi nhuận sau thuế chia cho tổng tài sản.
1. BIDV$ty_le_no_ts <- BIDV$tong_no_phai_tra / BIDV$tong_tai_san
Giải thích kỹ thuật: 1. Là lệnh để tính và thêm biến tỷ lệ nợ trên tổng tài sản vào bảng dữ liệu, bằng cách lấy tổng nợ phải trả chia cho tổng tài sản.
1. BIDV$hieu_qua_ROE <- ifelse(BIDV$ROE > 0.15, "Tốt",
2. ifelse(BIDV$ROE >= 0.1 & BIDV$ROE <= 0.15, "Trung bình", "Thấp"))
Giải thích kỹ thuật: 1. Là lệnh để phân loại hiệu quả ROE cho từng dòng dữ liệu trong bảng BIDV: nếu ROE > 0.15 thì gán là “Tốt”, từ 0.1 đến 0.15 là “Trung bình”, còn lại là “Thấp”.
1. BIDV$hieu_qua_ROA <- ifelse(BIDV$ROA > 0.01, "Tốt",
2. ifelse(BIDV$ROA >= 0.005 & BIDV$ROA <= 0.01, "Trung bình", "Thấp"))
Giải thích kỹ thuật: 1. Là lệnh để phân loại hiệu quả ROA cho từng dòng dữ liệu trong bảng BIDV: nếu ROA > 0.01 thì “Tốt”, từ 0.005 đến 0.01 là “Trung bình”, còn lại là “Thấp”.
1. BIDV <- BIDV %>%
2. mutate(
3. nhom_tong_tai_san = case_when(
4. tong_tai_san < 5e14 ~ "Nhỏ",
5. tong_tai_san >= 5e14 & tong_tai_san < 1e15 ~ "Trung bình",
6. tong_tai_san >= 1e15 ~ "Lớn"
7. )
8. )
Giải thích kỹ thuật:
Gán lại bảng dữ liệu BIDV với kết quả biến đổi bằng toán tử pipe %>%.
Thêm hoặc chỉnh sửa biến trong dataframe; vẫn giữ nguyên các biến cũ.
Tạo biến phân nhóm, cho phép phân loại nhiều trường hợp theo điều kiện logic trên một biến số.
1. skim(BIDV)
| Name | BIDV |
| Number of rows | 15 |
| Number of columns | 22 |
| _______________________ | |
| Column type frequency: | |
| character | 3 |
| numeric | 19 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| hieu_qua_ROE | 0 | 1 | 3 | 10 | 0 | 3 | 0 |
| hieu_qua_ROA | 0 | 1 | 3 | 10 | 0 | 3 | 0 |
| nhom_tong_tai_san | 0 | 1 | 3 | 10 | 0 | 3 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| nam | 0 | 1 | 2.017000e+03 | 4.470000e+00 | 2.010000e+03 | 2.013500e+03 | 2.017000e+03 | 2.020500e+03 | 2.024000e+03 | ▇▇▇▇▇ |
| tong_tai_san | 0 | 1 | 1.251883e+15 | 7.412196e+14 | 3.662678e+14 | 5.993632e+14 | 1.202284e+15 | 1.639191e+15 | 2.760792e+15 | ▇▆▅▂▃ |
| von_chu_so_huu | 0 | 1 | 6.306981e+13 | 3.801020e+13 | 2.421973e+13 | 3.282309e+13 | 4.883401e+13 | 8.298782e+13 | 1.449111e+14 | ▇▂▃▁▂ |
| tong_no_phai_tra | 0 | 1 | 1.188759e+15 | 7.037727e+14 | 3.418986e+14 | 5.664138e+14 | 1.153450e+15 | 1.556203e+15 | 2.615881e+15 | ▇▅▆▂▃ |
| du_no_cho_vay | 0 | 1 | 9.129274e+14 | 5.563560e+14 | 2.488985e+14 | 4.119800e+14 | 8.555355e+14 | 1.260384e+15 | 2.018044e+15 | ▇▂▃▂▂ |
| du_phong_rui_ro | 0 | 1 | -1.670143e+13 | 1.307210e+13 | -4.046906e+13 | -2.407983e+13 | -1.134978e+13 | -6.384094e+12 | -5.293092e+12 | ▃▁▁▃▇ |
| doanh_thu_lai_thuan | 0 | 1 | 3.065420e+13 | 1.739830e+13 | 9.191386e+12 | 1.584445e+13 | 3.095533e+13 | 4.140056e+13 | 5.800758e+13 | ▇▃▆▂▅ |
| thu_nhap_phi_dich_vu | 0 | 1 | 6.395216e+12 | 3.831985e+12 | 1.881855e+12 | 2.897310e+12 | 5.611617e+12 | 9.481832e+12 | 1.346531e+13 | ▇▂▃▂▂ |
| loi_nhuan_truoc_thue | 0 | 1 | 1.155299e+13 | 8.828890e+12 | 3.389918e+12 | 5.793494e+12 | 8.665177e+12 | 1.213993e+13 | 3.198487e+13 | ▇▂▁▁▂ |
| loi_nhuan_sau_thue | 0 | 1 | 9.207143e+12 | 7.080721e+12 | 2.571943e+12 | 4.518338e+12 | 6.945586e+12 | 9.694514e+12 | 2.560404e+13 | ▇▃▁▁▂ |
| chi_phi_hoat_dong | 0 | 1 | -1.460694e+13 | 7.291436e+12 | -2.796682e+13 | -1.857914e+13 | -1.550424e+13 | -8.007468e+12 | -4.574004e+12 | ▃▃▆▃▇ |
| chi_phi_tin_dung | 0 | 1 | -1.397639e+13 | 9.000441e+12 | -2.948083e+13 | -2.072635e+13 | -1.484731e+13 | -6.079597e+12 | -1.316616e+12 | ▁▇▁▂▇ |
| lc_tien_thuan_hdkd | 0 | 1 | 1.925048e+13 | 5.319680e+13 | -7.101499e+13 | -3.949585e+11 | 1.219266e+13 | 3.485631e+13 | 1.325179e+14 | ▂▅▇▁▂ |
| lc_tien_thuan_hddt | 0 | 1 | -1.029809e+12 | 5.929673e+11 | -2.346896e+12 | -1.180807e+12 | -9.773590e+11 | -7.997265e+11 | 3.336100e+10 | ▁▂▇▅▂ |
| lc_tien_thuan_hdtc | 0 | 1 | 5.994315e+11 | 4.559334e+12 | -2.940383e+12 | -2.009437e+12 | -1.196940e+11 | 1.447378e+12 | 1.545087e+13 | ▇▃▁▁▁ |
| tien_tuong_duong_cuoi_ky | 0 | 1 | 1.240421e+14 | 9.391600e+13 | 3.788718e+13 | 5.300604e+13 | 9.877124e+13 | 1.678013e+14 | 3.247245e+14 | ▇▃▂▁▂ |
| ROE | 0 | 1 | 1.400000e-01 | 3.000000e-02 | 9.000000e-02 | 1.300000e-01 | 1.400000e-01 | 1.500000e-01 | 1.800000e-01 | ▃▃▇▅▅ |
| ROA | 0 | 1 | 1.000000e-02 | 0.000000e+00 | 0.000000e+00 | 1.000000e-02 | 1.000000e-02 | 1.000000e-02 | 1.000000e-02 | ▇▃▆▂▅ |
| ty_le_no_ts | 0 | 1 | 9.500000e-01 | 1.000000e-02 | 9.300000e-01 | 9.500000e-01 | 9.500000e-01 | 9.500000e-01 | 9.600000e-01 | ▁▂▇▃▃ |
Giải thích kỹ thuật: 1. Là lệnh dùng để xem nhanh tổng quan bộ dữ liệu. Kết quả hiển thị tóm tắt các thống kê đặc trưng (số dòng, số cột, kiểu dữ liệu từng biến, số giá trị thiếu, số giá trị duy nhất, giá trị trung bình, min, max…) cho từng biến của bảng dữ liệu.
| Biến | Nhận_xét |
|---|---|
| nam | Biến kiểu ký tự, không thiếu giá trị, gồm 15 quan sát thể hiện các năm của dữ liệu. |
| tong_tai_san | Biến số, không thiếu giá trị, trung bình khoảng ~1,25 triệu tỷ đồng, dao động từ 366 nghìn tỷ đến 2,76 triệu tỷ đồng, tổng tài sản BIDV tăng dần, biến động lớn. |
| von_chu_so_huu | Biến số, không thiếu giá trị, trung bình khoảng ~63,1 nghìn tỷ đồng, dao động từ 24,2 nghìn tỷ đến 145 nghìn tỷ đồng, vốn chủ sở hữu tăng đều. |
| tong_no_phai_tra | Biến số, không thiếu giá trị, trung bình khoảng ~1,19 triệu tỷ đồng, dao động từ 342 nghìn tỷ đến 2,62 triệu tỷ đồng, tổng nợ tăng theo quy mô. |
| du_no_cho_vay | Biến số, không thiếu giá trị, trung bình khoảng ~913 nghìn tỷ đồng, dao động từ 249 nghìn tỷ đến 2,02 triệu tỷ đồng, dư nợ cho vay tăng theo từng năm. |
| du_phong_rui_ro | Biến số, không thiếu giá trị, giá trị âm, trung bình khoảng ~-16,7 nghìn tỷ đồng, dao động từ -5,29 nghìn tỷ đến -40,5 nghìn tỷ đồng, mức dự phòng rủi ro tín dụng. |
| doanh_thu_lai_thuan | Biến số, không thiếu giá trị, trung bình khoảng ~30,7 nghìn tỷ đồng, dao động từ 9,19 nghìn tỷ đến 58 nghìn tỷ đồng, doanh thu lãi thuần tăng nhưng biến động. |
| thu_nhap_phi_dich_vu | Biến số, không thiếu giá trị, trung bình khoảng ~6,4 nghìn tỷ đồng, dao động từ 1,88 nghìn tỷ đến 13,5 nghìn tỷ đồng, thu nhập phí dịch vụ biến động nhưng tăng. |
| loi_nhuan_truoc_thue | Biến số, không thiếu giá trị, trung bình khoảng ~11,6 nghìn tỷ đồng, dao động từ 3,39 nghìn tỷ đến 32 nghìn tỷ đồng, lợi nhuận trước thuế tăng trưởng nhưng biến động mạnh. |
| loi_nhuan_sau_thue | Biến số, không thiếu giá trị, trung bình khoảng ~9,21 nghìn tỷ đồng, dao động từ 2,57 nghìn tỷ đến 25,6 nghìn tỷ đồng, lợi nhuận sau thuế biến động và tăng. |
| chi_phi_hoat_dong | Biến số, không thiếu giá trị, giá trị âm, trung bình khoảng ~-14,6 nghìn tỷ đồng, dao động từ -4,57 nghìn tỷ đến -28 nghìn tỷ đồng, chi phí hoạt động tăng theo quy mô. |
| chi_phi_tin_dung | Biến số, không thiếu giá trị, giá trị âm, trung bình khoảng ~-14 nghìn tỷ đồng, dao động từ -1,32 nghìn tỷ đến -29,5 nghìn tỷ đồng, chi phí tín dụng biến động mạnh. |
| lc_tien_thuan_hdkd | Biến số, không thiếu giá trị, trung bình khoảng ~19,3 nghìn tỷ đồng, dao động từ -71 nghìn tỷ đến 133 nghìn tỷ đồng, dòng tiền thuần hoạt động kinh doanh biến động rất lớn. |
| lc_tien_thuan_hddt | Biến số, không thiếu giá trị, trung bình khoảng ~-1,03 nghìn tỷ đồng, dao động từ -2,35 nghìn tỷ đến 33,4 tỷ đồng, dòng tiền thuần đầu tư chủ yếu âm. |
| lc_tien_thuan_hdtc | Biến số, không thiếu giá trị, trung bình khoảng ~599 tỷ đồng, dao động từ -2,94 nghìn tỷ đến 15,5 nghìn tỷ đồng, dòng tiền thuần tài chính dao động cả âm và dương. |
| tien_tuong_duong_cuoi_ky | Biến số, không thiếu giá trị, trung bình khoảng ~124 nghìn tỷ đồng, dao động từ 37,9 nghìn tỷ đến 325 nghìn tỷ đồng, tiền và tương đương tiền cuối kỳ biến động nhưng tăng. |
1. BIDV %>%
2. group_by(hieu_qua_ROA) %>%
3. summarise(mean_loi_nhuan_sau_thue = mean(loi_nhuan_sau_thue, na.rm = TRUE))
Giải thích kỹ thuật:
Áp dụng các phép biến đổi dữ liệu tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến chỉ định, chia bảng thành từng nhóm nhỏ.
Tính giá trị trung bình cho từng nhóm; bỏ qua giá trị thiếu nếu có.
Nhận xét: Hiệu quả ROA “Tốt” có LNST trung bình thấp nhất (3.760,72 Tỷ VND). LNST cao nhất (9.778,68 Tỷ VND) thuộc nhóm “Trung bình”. Điều này cho thấy quy mô lợi nhuận tuyệt đối không tương đồng với ROA cao nhất.
1. BIDV %>%
2. group_by(hieu_qua_ROA) %>%
3. summarise(q3_chi_phi_hoat_dong = quantile(chi_phi_hoat_dong, 0.75, na.rm = TRUE))
Giải thích kỹ thuật:
Áp dụng các bước xử lý dữ liệu liên tiếp bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến, để phân chia bảng thành các nhóm cần phân tích.
Tính giá trị tứ phân vị thứ ba (Q3, tức 75%) cho biến chi phí hoạt động ở mỗi nhóm, bỏ qua giá trị thiếu nếu có.
Nhận xét: Chi phí hoạt động Q3 có mối quan hệ nghịch với ROA. Nhóm ROA “Tốt” có CP HĐ Q3 thấp nhất tuyệt đối (-5.545,62 Tỷ VND). Ngược lại, nhóm ROA “Thấp” có CP HĐ Q3 cao nhất tuyệt đối (-17.692,96 Tỷ VND). Kiểm soát CP HĐ là yếu tố then chốt để đạt ROA tốt nhất.
1. BIDV %>%
2. group_by(hieu_qua_ROE) %>%
3. summarise(median_von_chu_so_huu = median(von_chu_so_huu, na.rm = TRUE))
Giải thích kỹ thuật:
Thực hiện luồng xử lý tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị biến dự phòng rủi ro, phân chia bảng thành các nhóm riêng biệt.
Tính giá trị trung vị (median) của biến vốn chủ sở hữu cho từng nhóm, bỏ qua giá trị thiếu nếu có.
Nhận xét: Vốn chủ sở hữu trung vị (VCSH) đồng biến với ROE. Nhóm ROE “Tốt” có VCSH trung vị cao nhất (104.118,50 Tỷ VND), cao hơn gấp đôi nhóm “Trung bình” (46.473,04 Tỷ VND). Điều này cho thấy ROE cao thường yêu cầu quy mô vốn chủ sở hữu lớn để mở rộng và sinh lời.
1. BIDV %>%
2. group_by(hieu_qua_ROA) %>%
3. summarise(min_lc_tien_thuan_hdkd = min(lc_tien_thuan_hdkd, na.rm = TRUE))
Giải thích kỹ thuật:
Thực hiện các thao tác xử lý dữ liệu nối tiếp bằng cách sử dụng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến chỉ định, chia bảng thành các nhóm phân tích riêng biệt.
Tính giá trị nhỏ nhất cho biến chỉ định trong từng nhóm, bỏ qua giá trị thiếu nếu có.
Nhận xét: Nhóm ROA “Tốt” là duy nhất có Min LCTT HĐKD dương (13.452,21 Tỷ VND). Trong khi đó, cả nhóm “Thấp” (-67.912,81 Tỷ VND) và “Trung bình” (-71.014,99 Tỷ VND) đều ghi nhận dòng tiền âm lớn. Điều này nhấn mạnh rằng duy trì dòng tiền hoạt động dương là yếu tố then chốt để đạt ROA tốt nhất.
1. BIDV %>%
2. group_by(hieu_qua_ROE) %>%
3. summarise(max_doanh_thu_lai_thuan = max(doanh_thu_lai_thuan, na.rm = TRUE))
Giải thích kỹ thuật:
Thực hiện chuỗi các bước xử lý dữ liệu tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến phân tích, chia bảng thành các nhóm riêng biệt.
Tính giá trị lớn nhất cho một biến trong từng nhóm, bỏ qua giá trị thiếu nếu có.
Nhận xét: Doanh thu lãi thuần tối đa (DT Lãi Thuần) đồng biến với ROE. Nhóm ROE “Tốt” có DT Lãi Thuần cao nhất (58.007,58 Tỷ VND), cao hơn đáng kể nhóm “Thấp” (35.796,80 Tỷ VND). Điều này nhấn mạnh tối đa hóa doanh thu cốt lõi là yếu tố quan trọng để đạt ROE cao nhất.
##. Thống kê tỷ lệ nợ/tổng tài sản theo hiệu quả ROA
1. BIDV %>%
2. group_by(hieu_qua_ROA) %>%
3. summarise(mean_ty_le_no_ts = mean(ty_le_no_ts, na.rm = TRUE))
Giải thích kỹ thuật:
Thực hiện chuỗi thao tác xử lý dữ liệu bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến để phân tích từng nhóm riêng biệt.
Tính giá trị trung bình của một biến chỉ định (ở đây là tỷ lệ nợ trên tài sản), bỏ qua giá trị thiếu nếu có.
Nhận xét: Tỷ lệ Nợ/TS có mối quan hệ nghịch với ROA. ROA “Tốt” có tỷ lệ Nợ/TS thấp nhất (93,35%). Các nhóm “Thấp” (94,75%) và “Trung bình” (94,94%) có tỷ lệ nợ cao hơn. Điều này chỉ ra rằng kiểm soát tỷ lệ nợ là yếu tố then chốt để đạt ROA tốt nhất.
1. BIDV %>%
2. group_by(hieu_qua_ROE) %>%
3. summarise(Q1_du_no_cho_vay = quantile(du_no_cho_vay, 0.25, na.rm = TRUE))
Giải thích kỹ thuật:
Thực hiện luồng thao tác dữ liệu liên tiếp bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến dự phòng rủi ro, chia bảng thành các nhóm dựa trên giá trị này.
Tính tứ phân vị thứ nhất (Q1 - tức giá trị tại vị trí 25%) cho biến dư nợ cho vay trong từng nhóm, đồng thời bỏ qua giá trị thiếu nếu có.
Nhận xét: Dư nợ Q1 có mối quan hệ phức tạp với ROE. Nhóm ROE “Tốt” có Dư nợ Q1 cao nhất (590.917,40 Tỷ VND). Nhóm “Trung bình” lại có Dư nợ Q1 thấp nhất (425.525,10 Tỷ VND). Điều này chỉ ra rằng quy mô Dư nợ tối thiểu không phải là yếu tố then chốt phân biệt hiệu quả ROE.
1. BIDV %>%
2. group_by(hieu_qua_ROA) %>%
3. summarise(max_lc_tien_thuan_hdkd = max(lc_tien_thuan_hdkd, na.rm = TRUE))
Giải thích kỹ thuật:
Thực hiện chuỗi thao tác xử lý dữ liệu tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của một biến, chia bảng thành các nhóm phân tích riêng biệt.
Tính giá trị lớn nhất của một biến trong từng nhóm, đồng thời bỏ qua giá trị thiếu nếu có.
Nhận xét: Max lưu chuyển tiền thuần HĐKD cho thấy sự bất thường ở nhóm ROA “Thấp”, với dòng tiền âm (-67.912,81 Tỷ VND). Nhóm “Trung bình” và “Tốt” đều ghi nhận dòng tiền dương (lần lượt 132.517,90 Tỷ VND và 13.452,21 Tỷ VND). Điều này chỉ ra ROA thấp thường xảy ra khi doanh nghiệp gặp vấn đề lớn về dòng tiền hoạt động cốt lõi.
1. BIDV %>%
2. group_by(hieu_qua_ROE) %>%
3. summarise(mean_ty_le_no_ts = mean(ty_le_no_ts, na.rm = TRUE),
4. sd_ty_le_no_ts = sd(ty_le_no_ts, na.rm = TRUE))
Giải thích kỹ thuật:
Thực hiện chuỗi thao tác xử lý dữ liệu tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến hiệu quả ROE, chia bảng thành các nhóm tương ứng để phân tích từng loại hiệu quả.
Tính đồng thời hai thống kê tổng hợp cho từng nhóm: Trung vị tổng tài sản (median). Tứ phân vị thứ ba tổng tài sản (quantile với 0.75). Các phép tính đều bỏ qua giá trị thiếu (NA) nếu có.
Nhận xét: Tỷ lệ Nợ/Tổng Tài sản (Đòn bẩy) ở tất cả các nhóm ROE đều rất cao, dao động quanh mức 94,57% đến 95,02% tài sản được tài trợ bằng nợ. Đáng chú ý, nhóm ROE “Tốt” lại có tỷ lệ nợ trung bình thấp nhất (94,57%), thấp hơn nhóm “Trung bình” (95,02%), cho thấy việc tối đa hóa đòn bẩy không đảm bảo hiệu quả ROE cao nhất. Về tính ổn định, nhóm “Thấp” có độ lệch chuẩn (SD) thấp nhất (0,18%), trong khi ROE “Tốt” và “Trung bình” có SD cao hơn (0,71% - 0,75%), chỉ ra rằng hiệu quả ROE cao hơn đi kèm với sự biến động lớn hơn trong cơ cấu nợ.
1. BIDV %>%
2. group_by(hieu_qua_ROE) %>%
3. summarise(median_tong_tai_san = median(tong_tai_san, na.rm = TRUE),
4. Q3_tong_tai_san = quantile(tong_tai_san, 0.75, na.rm = TRUE))
Giải thích kỹ thuật:
Chuỗi các thao tác được thực hiện tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến hieu_qua_ROE,
chia bảng thành các nhóm tương ứng.
Tính đồng thời hai giá trị tổng hợp cho mỗi nhóm: trung vị và tứ phân vị thứ ba (Q3), bỏ qua các giá trị thiếu.
Nhận xét: Nhận xét này chính xác và cô đọng về mối quan hệ đồng biến giữa ROE và quy mô TTS. Việc trích dẫn số liệu (2.120.677,00 Tỷ VND cho nhóm “Tốt” và 1.000.735,00 Tỷ VND cho nhóm “Thấp”) đã làm nổi bật sự nhảy vọt về quy mô của nhóm “Tốt” so với các nhóm khác. Kết luận về việc ROE tốt đi kèm với việc mở rộng quy mô tài sản khổng lồ là hợp lý dựa trên dữ liệu trung vị TTS.
1. BIDV %>%
2. group_by(hieu_qua_ROA) %>%
3. summarise(mean_loi_nhuan_sau_thue = mean(loi_nhuan_sau_thue, na.rm = TRUE),
4. max_loi_nhuan_sau_thue = max(loi_nhuan_sau_thue, na.rm = TRUE))
Giải thích kỹ thuật:
Chuỗi các thao tác được thực hiện tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến phân tích, chia thành các nhóm dựa trên hiệu quả ROA.
Tính đồng thời hai giá trị tổng hợp cho mỗi nhóm: trung bình và giá trị lớn nhất của biến lợi nhuận sau thuế, và bỏ qua giá trị thiếu nếu có.
Nhận xét: Phân tích chính xác bản chất của ROA. Nhóm ROA “Tốt” có LNST trung bình thấp nhất (3.760,72 Tỷ VND), so với nhóm “Thấp” (7.223,57 Tỷ VND). Điều này khẳng định kiểm soát và sử dụng tài sản hiệu quả quan trọng hơn quy mô lợi nhuận tuyệt đối để đạt ROA cao nhất.
1. BIDV %>%
2. group_by(hieu_qua_ROA) %>%
3. summarise(Q1_du_no_cho_vay = quantile(du_no_cho_vay, 0.25, na.rm = TRUE),
4. Q3_du_no_cho_vay = quantile(du_no_cho_vay, 0.75, na.rm = TRUE))
Giải thích kỹ thuật:
Chuỗi các thao tác được thực hiện tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến phân tích, chia thành từng nhóm tương ứng.
Tính đồng thời hai giá trị tổng hợp cho mỗi nhóm: tứ phân vị thứ nhất (Q1) và tứ phân vị thứ ba (Q3); bỏ qua giá trị thiếu nếu có.
Nhận xét: Phân tích này hợp lý và chính xác. Việc nhóm ROA “Tốt” tập trung ở mức dư nợ thấp (248.898,50 Tỷ VND) và nhóm “Thấp” ở mức dư nợ cao (1.195.240,00 Tỷ VND) gợi ý mối tương quan nghịch. Điều này xác nhận kiểm soát quy mô dư nợ cho vay (ở mức thấp) là yếu tố then chốt để đạt hiệu quả ROA cao, do quy mô lớn dễ đi kèm với rủi ro tín dụng và gánh nặng tài sản.
1. BIDV %>%
2. group_by(hieu_qua_ROE) %>%
3. summarise(min_lc_tien_thuan_hdkd = min(lc_tien_thuan_hdkd, na.rm = TRUE),
4. max_lc_tien_thuan_hdkd = max(lc_tien_thuan_hdkd, na.rm = TRUE))
Giải thích kỹ thuật:
Chuỗi các thao tác được thực hiện tuần tự bằng toán tử pipe.
Nhóm dữ liệu theo giá trị của biến, chia thành các nhóm tương ứng theo hiệu quả ROE trong dataset.
Tính đồng thời hai giá trị tổng hợp cho mỗi nhóm: giá trị nhỏ nhất và giá trị lớn nhất của biến, bỏ qua giá trị thiếu nếu có.
Nhận xét: Sự biến động lưu chuyển tiền thuần HĐKD rất lớn ở nhóm ROE “Tốt” (phạm vi từ -71.015 tỷ VND đến 132.517,90 tỷ VND) chỉ ra ROE cao không chỉ phụ thuộc vào dòng tiền hoạt động dương trong kỳ. Việc cả ba nhóm đều có LCTT HĐKD âm (ví dụ, nhóm “Thấp” có tối thiểu -67.912,81 tỷ VND) cho thấy ROE bị ảnh hưởng mạnh mẽ bởi các hoạt động tài chính, đầu tư và cơ cấu vốn (đòn bẩy) của doanh nghiệp hơn là chỉ dòng tiền cốt lõi.
1. BIDV %>%
2. group_by(hieu_qua_ROE, hieu_qua_ROA) %>%
3. summarise(trung_binh_tong_tai_san = mean(tong_tai_san, na.rm = TRUE))
Giải thích kỹ thuật:
1–2. Chia dữ liệu thành các nhóm dựa theo hai biến phân loại: hiệu quả ROE và hiệu quả ROA.
Nhận xét: Phân tích chính xác mối quan hệ nghịch lý: nhóm ROE Tốt/ROA Tốt lại có TTS thấp nhất (366.267,80 Tỷ VND). Trong khi đó, nhóm Thấp/Thấp có TTS lớn thứ hai (1.516.686,00 Tỷ VND). Điều này khẳng định hiệu quả sinh lời cao nhất đạt được là nhờ tối ưu hóa hiệu suất tài sản trên quy mô TTS khiêm tốn.
1. BIDV %>%
2. group_by(hieu_qua_ROE, hieu_qua_ROA) %>%
3. summarise(
4. tb_von_chu_so_huu = mean(von_chu_so_huu, na.rm = TRUE),
5. )
Giải thích kỹ thuật:
1–2. Chia dữ liệu thành từng nhóm theo hai biến chất lượng: hiệu quả ROE và hiệu quả ROA.
3–4. Ttính giá trị trung bình cột von_chu_so_huu cho mỗi tổ hợp nhóm, dùng mean(…, na.rm = TRUE) để bỏ qua giá trị thiếu.
Nhận xét: Phân tích chính xác mối quan hệ nghịch lý: nhóm ROE Tốt/ROA Tốt lại có VCSH trung bình thấp nhất (24.219,73 Tỷ VND). Trong khi đó, nhóm ROE Tốt/ROA Trung bình có VCSH lớn nhất (103.558,00 Tỷ VND). Điều này khẳng định hiệu suất sinh lời tối ưu đạt được là nhờ sử dụng hiệu quả đòn bẩy trên quy mô vốn nhỏ, chứ không phải dựa vào quy mô vốn tuyệt đối lớn.
1. BIDV %>%
2. group_by(hieu_qua_ROE, hieu_qua_ROA) %>%
3. summarise(
4. median_tong_no_phai_tra = median(tong_no_phai_tra, na.rm = TRUE)
5. )
Giải thích kỹ thuật:
1–2. Dùng để nhóm dữ liệu theo hai biến phân loại: hiệu quả ROE và hiệu quả ROA.
3–5. Dùng để tính trung vị tổng nợ phải trả bằng công thức. Việc này giúp tìm giá trị đại diện cho từng nhóm, bỏ qua giá trị thiếu nếu có.
Nhận xét: Phân tích chính xác mối quan hệ nghịch lý. Nhóm ROE Tốt/ROA Tốt có Tổng nợ trung vị thấp nhất (341.898,60 Tỷ VND). Ngược lại, nhóm ROE Tốt/ROA Trung bình có quy mô nợ lớn nhất (2.097.280,00 Tỷ VND). Điều này khẳng định hiệu suất sinh lời cao nhất đạt được nhờ kiểm soát và tối ưu hóa đòn bẩy, không phải mở rộng nợ vô hạn.
1. thongke1p <- BIDV %>%
2. group_by(hieu_qua_ROE) %>%
3. summarise(
4. Soquansat = n(),
5. Giatritrungbinh = mean(ROE, na.rm = TRUE),
6. min = min(ROE, na.rm = TRUE),
7. max = max(ROE, na.rm = TRUE),
8. Trungvi = median(ROE, na.rm = TRUE),
9. Dolechchuan = sd(ROE, na.rm = TRUE),
10. Q1 = quantile(ROE, 0.25, na.rm = TRUE),
11. Q3 = quantile(ROE, 0.75, na.rm = TRUE)
12. ) %>%
13. arrange(hieu_qua_ROE)
14. thongke1p
Giải thích kỹ thuật:
2–11. Nhóm dữ liệu theo giá trị của biến hiệu quả ROE, rồi tính lần lượt các chỉ số tổng hợp cho từng nhóm: số quan sát, giá trị trung bình, nhỏ nhất, lớn nhất, trung vị, độ lệch chuẩn, Q1 và Q3 của ROE; các phép tính đều bỏ qua giá trị thiếu.
12–13. Sắp xếp bảng kết quả theo thứ tự của biến nhóm, giúp trình bày dữ liệu dễ theo dõi.
Nhận xét: Thống kê mô tả ROE cho thấy Nhóm “Thấp” (2 quan sát) có ROE trung bình \(\text{0,0949}\) và độ lệch chuẩn thấp, phản ánh khả năng sinh lời yếu và ổn định. Nhóm “Trung bình” (8 quan sát) có ROE trung bình \(\text{0,1327}\), với độ lệch chuẩn \(\text{0,0121}\), thể hiện hiệu quả sinh lời ổn định nhưng chưa nổi bật. Nhóm “Tốt” (5 quan sát) đạt ROE trung bình cao nhất \(\text{0,1675}\) (dao động \(\text{0,1506}\) - \(\text{0,1789}\)), chứng tỏ mức sinh lời vượt trội và ổn định, khẳng định năng lực tài chính mạnh mẽ và khả năng tối ưu hóa vốn tốt.
1. thongke2p <- BIDV %>%
2. group_by(hieu_qua_ROA) %>%
3. summarise(
4. Soquansat = n(),
5. Giatritrungbinh = mean(ROA, na.rm = TRUE),
6. min = min(ROA, na.rm = TRUE),
7. max = max(ROA, na.rm = TRUE),
8. Trungvi = median(ROA, na.rm = TRUE),
9. Dolechchuan = sd(ROA, na.rm = TRUE),
10. Q1 = quantile(ROA, 0.25, na.rm = TRUE),
11. Q3 = quantile(ROA, 0.75, na.rm = TRUE)
12. ) %>%
13. arrange(hieu_qua_ROA)
14. thongke2p
Giải thích kỹ thuật:
2–11. Nhóm dữ liệu theo giá trị của biến hiệu quả ROA, rồi tính lần lượt các chỉ số tổng hợp cho từng nhóm: số quan sát, giá trị trung bình, nhỏ nhất, lớn nhất, trung vị, độ lệch chuẩn, Q1 và Q3 của ROA; các phép tính đều bỏ qua giá trị thiếu.
12–13. Sắp xếp bảng kết quả theo thứ tự của biến nhóm.
Nhận xét: Thống kê mô tả ROA cho thấy Nhóm “Thấp” (1 quan sát) có ROA trung bình \(\text{0,0047}\), phản ánh mức sinh lời rất thấp trên tổng tài sản và hiệu quả hoạt động còn hạn chế. Nhóm “Trung bình” (14 quan sát) có ROA trung bình \(\text{0,0073}\), với độ lệch chuẩn \(\text{0,0015}\) cho thấy mức sinh lời ổn định (dao động \(\text{0,0053}\) - \(\text{0,0097}\)). Tuy nhiên, mức ROA này vẫn còn thấp, phản ánh hiệu quả sử dụng tài sản chỉ ở mức trung bình, chưa tối ưu được giá trị gia tăng từ nguồn lực.
1. data_group1 <- BIDV %>%
2. group_by(nam, hieu_qua_ROE) %>%
3. summarise(
4. tong_loi_nhuan = sum(loi_nhuan_sau_thue, na.rm = TRUE),
5. tong_doanh_thu = sum(doanh_thu_lai_thuan, na.rm = TRUE)
6. )
7. data_group1
Giải thích kỹ thuật:
2–6. Nhóm dữ liệu theo hai biến năm và hiệu quả ROE, sau đó tổng hợp cho từng nhóm bằng cách tính tổng lợi nhuận sau thuế và tổng doanh thu lãi thuần; các phép tính đều bỏ qua giá trị thiếu nếu có.
Nhận xét: Phân tích chính xác xu hướng cải thiện hiệu quả ROE của BIDV giai đoạn \(\text{2010}\)–\(\text{2024}\). Sự suy giảm ban đầu xuống mức “Thấp” (\(\text{2012}\)) với LNST chỉ \(\text{2,57}\) nghìn tỷ đồng là bằng chứng cho thấy biến động biên lợi nhuận. Sự cải thiện mạnh mẽ từ \(\text{2020}\)–\(\text{2024}\), với LNST tăng từ \(\text{18,35}\) nghìn tỷ (\(\text{2022}\)) lên \(\text{25,60}\) nghìn tỷ đồng (\(\text{2024}\)), khẳng định ngân hàng đã thành công trong việc tối ưu hóa hiệu suất sinh lời trên vốn song song với việc mở rộng quy mô.
1. data_group2 <- BIDV %>%
2. group_by(hieu_qua_ROE, hieu_qua_ROA) %>%
3. summarise(
4. trungbinh_tong_tai_san = mean(tong_tai_san, na.rm = TRUE),
5. trungbinh_loi_nhuan_sau_thue = mean(loi_nhuan_sau_thue, na.rm = TRUE),
6. trungbinh_ROE = mean(ROE, na.rm = TRUE),
7. trungbinh_ROA = mean(ROA, na.rm = TRUE)
8. )
9. data_group2
Giải thích kỹ thuật:
2–8. Nhóm dữ liệu theo hai biến hiệu quả ROE và hiệu quả ROA, sau đó tính đồng thời các giá trị trung bình cho từng nhóm: tổng tài sản, lợi nhuận sau thuế, ROE, ROA; các phép tính đều bỏ qua giá trị thiếu nếu có.
Nhận xét: Phân tích chính xác mối quan hệ giữa hiệu quả sinh lời (ROA/ROE) và quy mô tài sản của BIDV. Việc tài sản tăng từ \(\text{1,52}\) triệu tỷ (nhóm Thấp) lên \(\text{1,68}\) triệu tỷ đồng (nhóm Tốt) đã giúp LNST tăng \(\text{88}\%\) (từ \(\text{7,22}\) nghìn tỷ lên \(\text{15,21}\) nghìn tỷ đồng). Kết luận rằng BIDV đã tận dụng vốn tốt hơn và kiểm soát chi phí hiệu quả là hoàn toàn hợp lý, do sự gia tăng hiệu suất sinh lời (ROA từ \(\text{0,0048}\) lên \(\text{0,00895}\)) lớn hơn mức tăng quy mô tài sản.
1. y_max <- max(BIDV$tong_tai_san)*1.1
2. bp <- barplot(BIDV$tong_tai_san, names.arg = BIDV$nam, col = "blue", space = 1.2, width = 0.5, ylim = c(0, y_max), main = "Hình 1. Tổng tài sản BIDV theo năm", xlab = "Năm", ylab = "Tổng tài sản (VND)")
3. grid()
4. box(lwd = 2, col = "gray40")
5. abline(h = mean(BIDV$tong_tai_san), lty = 2, col = "orange")
6. abline(h = median(BIDV$tong_tai_san), lty = 3, col = "#0077B6")
Giải thích kỹ thuật:
2-10. Tạo biểu đồ cột (barplot) hiển thị tổng tài sản theo năm với: Trục x đặt tên theo năm. Màu cột xanh. Khoảng cách và bề rộng cột cỡ 1,2. Giới hạn trục y từ 0 đến giá trị trần . Tiêu đề, nhãn trục x và y rõ ràng, đầy đủ thông tin.
12-18. Ghi chú giá trị tổng tài sản phía trên mỗi cột theo dạng số khoa học, với vị trí, kích cỡ và font chữ phù hợp giúp dễ đọc và trực quan hóa thông tin.
Nhận xét: Biểu đồ ghi nhận xu hướng tăng trưởng của Tổng tài sản (TTS) BIDV giai đoạn \(\text{2010}\)–\(\text{2024}\). Việc TTS tăng hơn \(\text{7}\) lần (từ khoảng \(\text{385.000}\) tỷ VND (\(\text{2010}\)) lên \(\text{2.76}\) triệu tỷ VND (\(\text{2024}\))) là bằng chứng rõ ràng nhất. Nhận định này khẳng định chiến lược mở rộng quy mô thành công của BIDV, củng cố vị thế dẫn đầu và tạo nền tảng tài chính vững chắc cho việc mở rộng tín dụng và nâng cao năng lực sinh lời trong tương lai.
1. boxplot(BIDV$chi_phi_hoat_dong, main = "Hình 2. Chi phí hoạt động", ylab = "Chi phí hoạt động (VND)", col = "violet")
2. grid()
3. stripchart(BIDV$chi_phi_hoat_dong, method = "jitter", add = TRUE, vertical = TRUE, col = "red", pch = 20)
4. abline(h = mean(BIDV$chi_phi_hoat_dong), lty = 2, col = "orange")
5. abline(h = median(BIDV$chi_phi_hoat_dong), lty = 3, col = "#0077B6")
Giải thích kỹ thuật:
1-4. Vẽ biểu đồ hộp với màu nền là violet, thể hiện các giá trị trung vị, khoảng tứ phân vị và các điểm ngoại lai.
6-11. Thêm stripchart chồng lên boxplot để hiển thị từng điểm dữ liệu
trên đồ thị. method = "jitter" giúp các điểm không bị đè
lên nhau khi có giá trị trùng. Chấm tròn đầy (pch = 20) và
màu đỏ (col = "red").
Nhận xét: Biểu đồ cho thấy CPHĐ có giá trị trung vị cao, khoảng \(-\text{15.000}\) tỷ VND, với \(\text{50}\%\) chi phí tập trung trong biên độ rộng (\(\text{IQR}\) từ \(-\text{17.000}\) đến \(-\text{7.500}\) tỷ VND). Điều này khẳng định BIDV là ngân hàng quy mô lớn với chi phí vận hành cao và biến động, nhấn mạnh sự cần thiết phải quản lý chi phí chặt chẽ để duy trì hiệu suất lợi nhuận ròng, đặc biệt trong bối cảnh đầu tư công nghệ và mở rộng mạng lưới.
1. plot(BIDV$tong_tai_san, BIDV$loi_nhuan_sau_thue, pch = 19, col = "navy", main = "Hình 3. Tổng tài sản và lợi nhuận sau thuế", xlab = "Tổng tài sản", ylab = "Lợi nhuận sau thuế (VND)")
2. grid()
3. abline(lm(loi_nhuan_sau_thue ~ tong_tai_san, data = BIDV), col = "darkred", lwd = 2)
4. abline(h = mean(BIDV$loi_nhuan_sau_thue), lty = 2, col = "orange")
5. abline(v = mean(BIDV$tong_tai_san), lty = 2, col = "#0077B6")
Giải thích kỹ thuật:
1–7. Vẽ biểu đồ phân tán. Các điểm trên đồ thị được hiển thị bằng chấm tròn đầy (pch = 19) và màu xanh navy (col = “navy”). Đặt tiêu đề, nhãn trục x và y nhằm mô tả rõ nội dung biểu đồ.
9–11. Thêm đường hồi quy tuyến tính lên biểu đồ bằng
abline(lm(...)), đường này được tô màu đỏ đậm (col =
“darkred”) và vẽ nét dày (lwd = 2).
Nhận xét: Biểu đồ cho thấy mối tương quan dương mạnh mẽ giữa Tổng tài sản và LN sau thuế là chính xác dựa trên phân tích hồi quy tuyến tính. Mối quan hệ chặt chẽ ở mức tài sản cao (trên \(\text{2.000.000}\) tỷ VND) là bằng chứng rõ ràng nhất. Điều này khẳng định chiến lược mở rộng quy mô của BIDV là hiệu quả, vì sự gia tăng tài sản đã được chuyển hóa thành lợi nhuận ròng, chứng minh năng lực sinh lời vững chắc.
1. vals <- rbind(BIDV$von_chu_so_huu, BIDV$tong_no_phai_tra)
2. barplot(vals, beside = TRUE, names.arg = BIDV$nam, col = c("red", "green"), main = "Hình 4. Vốn chủ sở hữu và Tổng nợ phải trả theo năm", xlab = "Năm", ylab = "Giá trị (VND)")
3. grid()
4. legend("topright", legend = c("Vốn chủ sở hữu", "Nợ phải trả"), fill = c("red", "green"), bty = "n")
5. box(lwd = 2, col = "gray40")
Giải thích kỹ thuật:
Ghép hai biến “vốn chủ sở hữu” và “tổng nợ phải trả” nhiều năm vào ma trận để vẽ cột nhóm.
Vẽ biểu đồ cột nhóm (barplot), mỗi năm có hai cột đặt cạnh nhau (beside = TRUE), màu “red” cho vốn, “green” cho nợ, so sánh trực quan qua các năm.
Đặt nhãn năm cho trục x.
Mỗi biến là một màu phân biệt, dễ theo dõi.
7–9. Thêm tiêu đề, nhãn trục x/y cho đủ ý nghĩa của biểu đồ.
11–14. Thêm chú giải màu ở góc trên, làm rõ ý nghĩa từng cột màu.
Nhận xét: Biểu đồ cho thấy Nợ phải trả (NPT) của BIDV tuyệt đối chiếm ưu thế so với Vốn chủ sở hữu (VCSH) giai đoạn \(\text{2010}\)–\(\text{2024}\). NPT đạt khoảng \(\text{2.760.000}\) tỷ VND (\(\text{2024}\)), trong khi VCSH chỉ \(\text{140.000}\) tỷ VND. Hàm ý kinh tế khẳng định ngân hàng hoạt động dựa vào tiền gửi, phản ánh đòn bẩy tài chính rất cao. Đòn bẩy này giúp tăng khả năng sinh lời (ROE) nhưng đồng thời làm tăng rủi ro, nhấn mạnh quản lý an toàn vốn là ưu tiên hàng đầu.
1. matplot(BIDV$nam, cbind(BIDV$loi_nhuan_sau_thue, BIDV$doanh_thu_lai_thuan, BIDV$chi_phi_hoat_dong), type = "l", lwd = 2, col = c("darkred", "blue", "#FFD700"), lty = 1, main = "Hình 5. Lợi nhuận sau thuế, Doanh thu lãi thuần, Chi phí hoạt động", xlab = "Năm", ylab = "Giá trị (VND)")
2. grid()
3. legend("topright", legend = c("Lợi nhuận sau thuế", "Doanh thu lãi thuần", "Chi phí hoạt động"), col = c("darkred", "blue", "#FFD700"), lty = 1, lwd = 2, bty = "n")
4. box(lwd = 2, col = "gray40")
5. abline(h = mean(BIDV$loi_nhuan_sau_thue), lty = 2, col = "orange")
Giải thích kỹ thuật theo số thứ tự code:
1-4. Vẽ biểu đồ đường cho ba chỉ số theo thời gian bằng
matplot, các đường nét liền, độ dày 2, màu lần lượt là đỏ
đậm (“darkred”), xanh dương (“blue”), vàng (“#FFD700”).
5-11. Đặt tiêu đề, nhãn trục x và y giúp biểu đồ rõ ý nghĩa.
13-18. Thêm chú thích (legend) ở góc trên phải, ghi rõ tên và màu từng biến.
Nhận xét: Biểu đồ cho thấy mối quan hệ tích cực giữa DT lãi thuần, LNST và CP hoạt động của BIDV. DT lãi thuần đạt quy mô lớn nhất (\(\text{63.000}\) tỷ VND năm \(\text{2024}\)) và tăng nhanh hơn CP hoạt động. Sự chênh lệch này thúc đẩy LNST tăng trưởng mạnh (\(\text{29.000}\) tỷ VND năm \(\text{2024}\)). Điều này khẳng định BIDV đã quản lý chi phí hiệu quả so với tăng trưởng doanh thu cốt lõi, củng cố khả năng sinh lời bền vững.
1. vals_3_other <- rbind(BIDV$thu_nhap_phi_dich_vu, BIDV$chi_phi_tin_dung, BIDV$loi_nhuan_sau_thue)
2. par(mar = c(9,5,4,4), xpd = TRUE)
3. bp <- barplot(vals_3_other, beside = TRUE, names.arg = BIDV$nam, col = c("darkorange", "#32CD32", "#E6E"), main = "Hình 6. Thu nhập phí dịch vụ, chi phí tín dụng, lợi nhuận sau thuế", xlab = "Năm", ylab = "Giá trị (VND)")
4. grid()
5. legend("bottom", inset = c(0, -0.45), horiz = TRUE, legend = c("Thu nhập phí dịch vụ", "Chi phí tín dụng", "Lợi nhuận sau thuế"), fill = c("darkorange", "#32CD32", "#E6E"), bty = "n", cex = 0.9, x.intersp = 0.8)
6. box(lwd = 2, col = "gray40")
Giải thích kỹ thuật theo số thứ tự code:
1–3. Gộp số liệu ba biến thành ma trận để vẽ biểu đồ cột nhóm song song.
Thiết lập lề rộng để dễ bố trí chú thích dưới biểu đồ.
5–11. Vẽ barplot ba chỉ số cho từng năm, ba màu: cam (“darkorange”), xanh lá (“#32CD32”), tím nhạt (“#E6E”); đặt tiêu đề, trục.
Thêm lưới giúp so sánh giá trị trên trục y.
13–20. Thêm chú thích ngang ở dưới, giải thích từng màu ứng với từng chỉ số tài chính, giúp người xem phân biệt rõ.
Nhận xét: Biểu đồ cho thấy LNST (\(\text{28.000}\) tỷ VND năm \(\text{2024}\)) và Thu nhập phí DV đều tăng trưởng tích cực, khẳng định đa dạng hóa nguồn thu thành công. Tuy nhiên, CPTD biến động lớn và rất cao (chạm \(-\text{20.000}\) tỷ VND năm \(\text{2021}\)). Việc LNST tăng trưởng vượt trội sau \(\text{2021}\) chứng tỏ BIDV đã kiểm soát rủi ro tín dụng hiệu quả.
1. ggplot(BIDV, aes(x = nam, y = loi_nhuan_sau_thue)) +
2. geom_line(color = "orangered", size = 1.7) +
3. geom_point(color = "magenta", size = 4) +
4. geom_text(aes(label = formatC(loi_nhuan_sau_thue, format = "e", digits = 2)), vjust = -1.2, color = "navy", size = 3.8) +
5. labs(title = "Hình 7. Lợi nhuận sau thuế BIDV theo năm", x = "Năm", y = "Lợi nhuận sau thuế (VND)") +
6. theme_minimal(base_size = 14)
Giải thích kỹ thuật theo số thứ tự code:
Dùng ggplot() chọn dữ liệu, gán trục x là năm, trục
y là lợi nhuận sau thuế.
Vẽ đường biểu diễn xu hướng lợi nhuận theo năm bằng màu cam đỏ, nét dày, giúp nổi bật diễn biến chính.
Vẽ các điểm dữ liệu màu hồng tím, kích thước lớn để thấy rõ từng năm. 4–9. Thêm nhãn số liệu trên từng điểm, định dạng số khoa học, màu xanh đậm cho dễ phân biệt.
10–12. Đặt tiêu đề và nhãn trục x, y để biểu đồ đầy đủ thông tin.
Nhận xét: Biểu đồ cho thấy LNST của BIDV có xu hướng tăng trưởng mạnh và gần như liên tục (\(\text{2010}\)–\(\text{2024}\)). Sự tăng trưởng đột phá sau \(\text{2020}\) là bằng chứng rõ nhất: LNST tăng gấp \(\text{3,5}\) lần trong \(\text{4}\) năm, đạt mức kỷ lục \(\text{25.000}\) tỷ VND (\(\text{2024}\)) so với \(\text{7.220}\) tỷ VND trước đó. Điều này khẳng định hiệu quả hoạt động cốt lõi và năng lực kiểm soát chi phí của BIDV đã thành công trong việc tối ưu hóa và tạo ra giá trị lớn cho cổ đông.
1. ggplot(BIDV, aes(x = nam, y = ROA)) +
2. geom_line(color = "purple", size = 1.6) +
3. geom_point(color = "deepskyblue", size = 3) +
4. geom_text(aes(label = round(ROA, 4)), vjust = -1.3, color = "magenta", size = 3.5) +
5. labs(title = "Hình 8. ROA của BIDV qua các năm", x = "Năm", y = "ROA") +
6. theme_minimal(base_size = 14)
Giải thích kỹ thuật theo số thứ tự code:
Dùng ggplot() chọn dữ liệu, gán trục x là năm, trục
y là ROA.
Vẽ đường biểu diễn xu hướng ROA các năm, màu tím, nét dày.
Vẽ các điểm thực tế từng năm bằng chấm tròn xanh nước biển.
4–7. Gắn nhãn giá trị ROA tại từng điểm (làm tròn bốn chữ số, màu magenta, lệch lên cho dễ nhìn).
8–10. Đặt tiêu đề và nhãn trục, giúp biểu đồ dễ hiểu, rõ nội dung.
Nhận xét: Biểu đồ cho thấy ROA của BIDV biến động rõ rệt (\(\text{2010}\)–\(\text{2024}\)), với mức đáy \(\text{0,48}\%\) (\(\text{2020}\)) và đỉnh \(\text{0,96}\%\) (\(\text{2022}\)). Xu hướng có hai giai đoạn: giảm sút (\(\text{2010}\)–\(\text{2020}\)) và phục hồi mạnh mẽ (\(\text{2021}\)–\(\text{2024}\)). Sự phục hồi sau \(\text{2020}\) khẳng định hiệu quả quản lý tài sản đã được cải thiện, cho thấy BIDV đã tận dụng vốn hiệu quả hơn và củng cố năng lực sinh lời tổng thể.
1. ggplot(BIDV, aes(x = factor(substr(nam, 3, 4)), y = chi_phi_tin_dung, fill = chi_phi_tin_dung)) +
2. geom_bar(stat = "identity") +
3. scale_fill_gradient(low = "yellow", high = "purple") +
4. labs(title = "Hình 9. Chi phí tín dụng của BIDV qua các năm", x = "Năm", y = "Chi phí tín dụng (VND)") +
5. theme_minimal(base_size = 14) +
6. theme(axis.text.x = element_text(size = 10))
Giải thích kỹ thuật:
1–4. Dùng ggplot() vẽ biểu đồ cột cho chi phí tín dụng
từng năm, trục x là hai số cuối của năm, trục y là chi phí tín dụng. Màu
cột chuyển từ vàng (thấp) đến tím (cao) theo giá trị chi phí.
7–11. Thêm nhãn số khoa học trên mỗi cột, màu xanh đậm, dễ nhìn.
13–14. Đổi màu cột theo mức chi phí: giá trị thấp màu vàng, giá trị cao màu tím.
15–20. Đặt tiêu đề, nhãn trục, giao diện tối giản cho biểu đồ rõ ràng.
Nhận xét: Biểu đồ cho thấy Chi phí tín dụng (CPTD) của BIDV có xu hướng tăng quy mô tuyệt đối và luôn âm (\(\text{2010}\)–\(\text{2024}\)). CPTD tăng từ \(-\text{1.320}\) tỷ VND (\(\text{2010}\)) lên đỉnh \(-\text{29.500}\) tỷ VND (\(\text{2021}\)). Việc CPTD duy trì ở mức rất cao (khoảng \(-\text{20.000}\) tỷ VND gần đây) vừa phản ánh tăng trưởng dư nợ và quản lý rủi ro thận trọng, vừa cho thấy áp lực tiềm ẩn từ nợ xấu hoặc chủ động tăng cường dự phòng, làm giảm trực tiếp lợi nhuận ròng.
1. ggplot(BIDV, aes(x = tien_tuong_duong_cuoi_ky)) +
2. geom_histogram(bins = 7, fill = "springgreen", color = "gold3", size = 1.1) +
3. geom_rug(color = "darkorange", size = 1.2) +
4. labs(title = "Hình 10. Tiền và tương đương tiền cuối kỳ BIDV", x = "Tiền cuối kỳ (VND)", y = "Tần suất") +
5. theme_minimal(base_size = 14) +
6. theme(axis.text.x = element_text(size = 10))
Giải thích kỹ thuật theo số thứ tự code:
ggplot() chọn dữ liệu, trục x là giá trị “tiền
tương đương cuối kỳ”.2–5. Vẽ histogram phân phối tiền cuối kỳ, chia thành 7 khoảng, cột màu xanh lá non (springgreen), viền cột vàng (gold3), nét viền dày.
7–11. Đặt tiêu đề, nhãn trục x, trục y để mô tả rõ nội dung.
theme_minimal), dễ
nhìn.Nhận xét: Biểu đồ cho thấy TTCK có phân phối lệch phải, phần lớn (6 năm) tập trung ở mức thấp (dưới \(\text{50.000}\) tỷ VND). Điều này khẳng định BIDV tối ưu hóa sử dụng vốn (chuyển tiền mặt vào tín dụng). Tuy nhiên, sự xuất hiện các đỉnh cao (trên \(\text{300.000}\) tỷ VND) cho thấy quản lý thanh khoản linh hoạt và thận trọng trong những thời điểm cụ thể.
1. roe_data <- BIDV %>% count(hieu_qua_ROE) %>% mutate(pct = n/sum(n)*100, label = paste0(round(pct, 1), "%"))
2. ggplot(roe_data, aes(x = "", y = pct, fill = hieu_qua_ROE)) +
3. geom_col(width = 1, color = "white") +
4. coord_polar(theta = "y") +
5. geom_text(aes(label = label), position = position_stack(vjust = 0.5), color = "black", size = 4, fontface = "bold") +
6. scale_fill_manual(values = c("#00FFFF", "#FF00FF", "#39FF14")) +
7. labs(title = "Hình 11. Biểu đồ tròn thể hiện các mức hiệu quả ROE", fill = "Mức ROE")
Giải thích kỹ thuật:
1–4. Nhóm dữ liệu theo mức hiệu quả ROE, đếm và tính phần trăm của từng mức; tạo nhãn phần trăm để hiển thị trên biểu đồ.
5–6. Vẽ biểu đồ tròn bằng ggplot2, mỗi lát đại diện một
mức ROE, màu phân biệt theo từng nhóm; cột rộng, viền trắng cho rõ các
lát.
coord_polar(theta = "y").8–10. Thêm nhãn phần trăm vào mỗi lát, căn vị trí giữa lát, chữ đậm, cỡ lớn, dễ đọc.
Chỉ định thủ công màu các nhóm ROE với ba tông màu nổi bật.
Loại bỏ toàn bộ trục, lưới phụ cho biểu đồ thoáng với
theme_void().
Thêm tiêu đề, chú giải tên nhóm mức ROE.
Nhận xét: Biểu đồ cho thấy Hiệu quả ROE của BIDV rất ổn định và tích cực (\(\text{2010}\)–\(\text{2024}\)). Phần lớn các năm nằm ở mức Trung bình (\(\text{53,3}\%\)) và Tốt (\(\text{33,3}\%\)), chiếm tổng cộng \(\text{86,6}\%\) hoạt động. Tỷ lệ Thấp chỉ chiếm \(\text{13,3}\%\). Điều này khẳng định BIDV đã sử dụng đòn bẩy tài chính hiệu quả để tối ưu hóa lợi nhuận ròng trên vốn chủ sở hữu, củng cố khả năng tạo ra giá trị cho cổ đông.
1. ggplot(BIDV, aes(x = doanh_thu_lai_thuan, y = ROA)) +
2. geom_point(color = "deepskyblue", size = 5, alpha = 0.9) +
3. geom_smooth(method = "lm", se = FALSE, color = "magenta", linetype = "dashed", size = 1.2) +
4. labs(title = "Hình 12. Doanh thu lãi thuần và ROA BIDV", x = "Doanh thu lãi thuần (VND)", y = "ROA") +
5. theme_minimal(base_size = 14) +
6. theme(axis.text.x = element_text(size = 10))
Giải thích kỹ thuật theo số thứ tự dòng code:
Khởi tạo ggplot với dữ liệu BIDV, trục x là doanh thu lãi thuần, trục y là ROA.
Vẽ các điểm (scatter), mỗi quan sát là một chấm màu xanh nước biển, cỡ lớn, alpha 0,9 giúp dễ nhìn.
Vẽ đường hồi quy tuyến tính (lm), nét đứt, màu magenta, dày và bỏ phần bóng dự báo (se = FALSE).
4–5. Đặt tiêu đề và nhãn hai trục cho biểu đồ thể hiện rõ ý nghĩa.
Nhận xét: Biểu đồ cho thấy mối tương quan dương nhưng không mạnh giữa DT lãi thuần và ROA. Sự phân tán rộng ở \(\text{50.000}\) tỷ VND (ROA từ \(\text{0,6}\%\) đến \(\text{0,9}\%\)) là bằng chứng. Điều này ngụ ý tăng DT lãi thuần chưa đảm bảo cải thiện ROA, và quản lý chi phí (hoạt động/tín dụng) có ảnh hưởng lớn hơn đến hiệu suất tổng thể.
1. df_roa_roe <- BIDV %>% select(nam, ROA, ROE) %>% pivot_longer(-nam, names_to = "bien", values_to = "giatri")
2. ggplot(df_roa_roe, aes(x = nam, y = giatri, color = bien, group = bien)) +
3. geom_line(size = 1.6) +
4. geom_point(size = 3.5, shape = 21, fill = "gold") +
5. labs(title = "Hình 13. Biểu đồ đường của ROA và ROE", x = "Năm", y = "Tỷ suất (%)") +
6. scale_color_manual(values = c("magenta", "deepskyblue")) +
7. theme_minimal(base_size = 14)
Giải thích kỹ thuật:
1–3. Tạo bảng mới gồm năm, ROA, ROE và chuyển dữ liệu thành dạng dài để vẽ hai chỉ số trên cùng trục.
Khởi tạo biểu đồ, trục x là năm, y là giá trị; phân biệt ROA/ROE bằng màu và nhóm.
Vẽ hai đường biểu diễn ROA, ROE với nét dày, so sánh dễ dàng.
Thêm các điểm thực tế, nền vàng giúp nổi bật từng giá trị.
Đặt tiêu đề, nhãn trục x/y.
Tô màu riêng ROA (magenta) và ROE (deepskyblue).
Dùng giao diện tối giản cho biểu đồ sáng, dễ nhìn.
Nhận xét: Biểu đồ cho thấy ROE luôn cao hơn ROA một khoảng cách rất lớn. ROA duy trì ở mức thấp, gần \(\text{1}\%\), trong khi ROE đạt đỉnh gần \(\text{17}\%\) (\(\text{2022}\)–\(\text{2024}\)). Cả hai chỉ số cùng đạt đáy \(\text{2020}\) rồi phục hồi. Khoảng cách lớn này khẳng định BIDV đã sử dụng đòn bẩy tài chính cao hiệu quả để khuếch đại lợi nhuận cho cổ đông, với mức ROE cao sau \(\text{2021}\) cho thấy hiệu suất sinh lời tuyệt vời trên vốn cổ đông.
1. df_bar2 <- BIDV %>% select(nam, thu_nhap_phi_dich_vu, chi_phi_hoat_dong) %>% pivot_longer(-nam, names_to = "bien", values_to = "giatri")
2. ggplot(df_bar2, aes(x = factor(substr(nam, 3, 4)), y = giatri, fill = bien)) +
3. geom_bar(stat = "identity", position = "dodge") +
4. scale_fill_manual(values = c("orange", "royalblue")) +
5. labs(title = "Hình 14. Phí dịch vụ và Chi phí hoạt động của BIDV", x = "Năm", y = "Giá trị (VND)") +
6. theme_minimal(base_size = 14) +
7. theme(axis.text.x = element_text(size = 10))
Giải thích kỹ thuật theo số thứ tự dòng code:
1–3. Tạo bảng dữ liệu dạng dài gồm năm, thu nhập phí dịch vụ, chi phí hoạt động.
4–6. Vẽ biểu đồ cột nhóm: mỗi năm có hai cột đứng cạnh, màu cam cho phí dịch vụ, xanh dương cho chi phí hoạt động.
Hiển thị hai cột nhóm cạnh nhau giúp so sánh hai chỉ số mỗi năm.
Đặt màu riêng cho từng biến để dễ phân biệt.
9–10. Thêm tiêu đề, nhãn trục x/y cho rõ nội dung.
Nhận xét: Biểu đồ cho thấy Thu nhập phí DV và CPHĐ đồng biến theo quy mô. Thu nhập phí DV tăng ổn định từ \(\text{2.410}\) tỷ VND lên \(\text{13.500}\) tỷ VND, khẳng định đa dạng hóa nguồn thu hiệu quả. Cùng lúc đó, CPHĐ tăng từ \(-\text{5.550}\) tỷ VND lên \(-\text{28.700}\) tỷ VND, cho thấy đầu tư lớn vào vận hành. Sự tăng trưởng ổn định của Thu nhập phí DV giúp BIDV kiểm soát hiệu quả đòn bẩy chi phí.
1. df_line3_gapkhuc <- BIDV %>% select(nam, tong_tai_san, tong_no_phai_tra, du_no_cho_vay) %>% pivot_longer(-nam, names_to = "bien", values_to = "giatri")
2. ggplot(df_line3_gapkhuc, aes(x = nam, y = giatri, color = bien, group = bien)) +
3. geom_line(size = 1.1, linetype = "solid") +
4. geom_point(size = 3, shape = 16) +
5. labs(title = "Hình 15. Tổng tài sản - Tổng nợ phải trả - Dư nợ cho vay", x = "Năm", y = "Giá trị (VND)") +
6. scale_color_manual(values = c("magenta", "cyan", "gold")) +
7. theme_minimal(base_size = 14)
Giải thích kỹ thuật theo số thứ tự dòng code:
1–3. Tạo dữ liệu dài gồm năm, tổng tài sản, tổng nợ, dư nợ cho vay để vẽ ba chỉ số tài chính trên cùng biểu đồ.
Vẽ biểu đồ đường với ggplot, phân biệt màu và nhóm cho từng chỉ số.
Vẽ ba đường nét liền, dễ so sánh xu hướng qua các năm.
Thêm các điểm thực tế trên mỗi đường để nổi bật từng giá
7–8. Thêm tiêu đề, nhãn trục x/y rõ ràng (năm, giá trị).
Chọn màu riêng cho từng chỉ số: magenta (tổng tài sản), cyan (tổng nợ phải trả), gold (dư nợ cho vay).
Dùng giao diện tối giản để biểu đồ sáng, dễ đọc.
Nhận xét: Biểu đồ cho thấy Tổng tài sản, NPT, và Dư nợ cho vay đồng biến, cực kỳ chặt chẽ. Cụ thể, TTS tăng từ \(\text{385.000}\) tỷ VND lên \(\text{2.760.000}\) tỷ VND. Điều này khẳng định BIDV hoạt động với đòn bẩy rất cao (dựa vào NPT) và sử dụng tiền huy động hiệu quả để đẩy mạnh tín dụng, đạt quy mô khổng lồ.
1. df_bar <- BIDV %>% select(nam, doanh_thu_lai_thuan, chi_phi_hoat_dong, loi_nhuan_truoc_thue) %>% pivot_longer(-nam, names_to = "bien", values_to = "giatri") %>% mutate(nam_2so = substr(as.character(nam), 3, 4))
2. ggplot(df_bar, aes(x = nam_2so, y = giatri, fill = bien)) +
3. geom_bar(stat = "identity", position = position_dodge(width = 0.9), width = 0.7) +
4. scale_fill_manual(values = c("goldenrod", "mediumorchid", "firebrick")) +
5. labs(title = "Hình 16. Biểu đồ cột ba cho 3 biến của BIDV", x = "Năm", y = "Giá trị (VND)") +
6. theme_light(base_size = 15) +
7. theme(panel.background = element_rect(fill = "mintcream"), axis.text.x = element_text(size = 13, face = "bold", color = "salmon"), legend.position = "top")
Giải thích kỹ thuật:
1–4. Tạo dữ liệu dài gồm năm, doanh thu lãi thuần, chi phí hoạt động, lợi nhuận trước thuế; thêm biến hai số cuối của năm để cột trục x ngắn gọn.
5–6. Vẽ biểu đồ cột nhóm cạnh nhau; mỗi năm có ba cột với ba màu rõ rệt (vàng đậm, tím nhạt, đỏ gạch) đại diện cho từng biến tài chính; chiều rộng cột vừa phải.
7–8. Thêm nhãn số liệu dạng khoa học trên từng cột (màu xanh đậm, font đậm).
9–10. Đặt màu cột cho mỗi biến, tiêu đề và nhãn trục x/y giúp biểu đồ rõ ràng.
11–13. Dùng theme sáng, nền nhẹ; chỉnh font, màu trục x nổi bật, đưa chú thích lên trên làm nội dung biểu đồ rõ ràng.
Nhận xét: Biểu đồ cho thấy mối quan hệ tích cực giữa DT lãi thuần, LNTT và CPHĐ. DT lãi thuần đạt quy mô lớn nhất (\(\text{58.000}\) tỷ VND năm \(\text{2024}\)) và tăng trưởng nhanh hơn CPHĐ (đạt \(-\text{26.600}\) tỷ VND). Sự chênh lệch này thúc đẩy LNTT tăng mạnh (\(\text{32.000}\) tỷ VND năm \(\text{2024}\)). Điều này khẳng định BIDV đã quản lý hiệu quả đòn bẩy chi phí so với tăng trưởng doanh thu cốt lõi, duy trì khả năng sinh lời bền vững.
1. df_log5 <- BIDV %>% select(nam, chi_phi_hoat_dong, chi_phi_tin_dung, du_phong_rui_ro, thu_nhap_phi_dich_vu, lc_tien_thuan_hdkd) %>% pivot_longer(-nam, names_to = "bien", values_to = "giatri") %>% mutate(log_giatri = log(abs(giatri)+1), nam_2so = substr(as.character(nam), 3, 4))
2. ggplot(df_log5, aes(x = nam_2so, y = log_giatri, color = bien, group = bien)) +
3. geom_line(size = 1.2) +
4. geom_point(size = 2.7) +
5. scale_color_brewer(palette = "Set1") +
6. labs(title = "Hình 17. Line plot (log): 5 biến của BIDV", x = "Năm", y = "log(Giá trị)") +
7. theme_light(base_size = 15) +
8. theme(panel.background = element_rect(fill = "azure"), axis.text.x = element_text(size = 12, face = "bold", color = "forestgreen"), legend.position = "top")
Giải thích kỹ thuật:
1–2. Chọn các biến tài chính nhiều giá trị lớn và chênh lệch, chuyển sang dữ liệu dài để vẽ nhiều biến trên cùng một biểu đồ.
3–4. Lấy logarit giá trị (log(abs(x)+1)) để dễ so sánh các biến có độ lớn khác nhau, lấy hai số cuối của năm cho trục x gọn.
5–6. Vẽ biểu đồ đường cho 5 biến, phân biệt rõ từng biến bằng màu sắc bằng bảng màu Set1.
7–8. Thêm điểm dữ liệu trên mỗi đường giúp quan sát dễ hơn.
9–13. Đặt màu riêng, tiêu đề, nhãn trục, chỉnh nền và font cho biểu đồ sáng, trục x dễ đọc, chú thích trên.
Nhận xét: Biểu đồ cho thấy xu hướng tăng trưởng dương rõ rệt của hầu hết \(\text{5}\) chỉ số tài chính (log-transform), phản ánh quy mô hoạt động mở rộng. Dòng tiền thuần HĐKD có biến động mạnh nhất, sụt giảm giai đoạn \(\text{2011}\)–\(\text{2013}\) (từ \(\text{30,23}\) xuống \(\text{28,51}\) trên thang log). Tuy nhiên, sự phục hồi và duy trì mức cao của các chỉ số ở các năm cuối cùng (Dòng tiền đạt đỉnh \(\text{32,52}\) năm \(\text{2022}\)) khẳng định BIDV đã cải thiện đáng kể hiệu quả hoạt động tổng thể, đặc biệt là chất lượng lợi nhuận.
1. df_heatmap <- BIDV %>% count(hieu_qua_ROE, hieu_qua_ROA, name = "So_luong")
2. ggplot(df_heatmap, aes(x = hieu_qua_ROA, y = hieu_qua_ROE, fill = So_luong)) +
3. geom_tile(color = "white", width = 0.95, height = 0.95) +
4. scale_fill_gradient(low = "#FFF7EC", high = "#7F0000") +
5. labs(title = "Hình 18. Số lượng theo hiệu quả ROE và ROA", x = "Hiệu quả ROA", y = "Hiệu quả ROE", fill = "Số lượng") +
6. theme_minimal(base_size = 16) +
7. theme(axis.text.x = element_text(size = 14, face = "bold", color = "brown"), axis.text.y = element_text(size = 14, face = "bold", color = "navy"), panel.background = element_rect(fill = "antiquewhite"))
Giải thích kỹ thuật:
1–2. Đếm số lượng mẫu ứng với từng nhóm hiệu quả ROE và ROA, tạo dữ liệu cho heatmap.
3–4. Vẽ biểu đồ heatmap, mỗi ô đại diện một cặp mức hiệu quả, tô màu theo số mẫu, viền trắng giúp tách biệt từng ô.
6–9. Thêm tiêu đề, nhãn trục x/y và chú thích màu số lượng cho biểu đồ đầy đủ thông tin.
10–13. Trang trí giao diện sáng, trục x/y tô đậm màu nổi, nền bảng màu sáng giúp biểu đồ rõ ràng.
Nhận xét: Biểu đồ cho thấy hiệu quả hoạt động phổ biến nhất của BIDV là ROA Trung bình/ROE Trung bình (\(\text{8}\) năm), khẳng định tính ổn định trong hiệu suất. Điều đáng chú ý là ngân hàng thường xuyên đạt ROE Tốt ngay cả khi ROA chỉ Trung bình (khoảng \(\text{4}\)–\(\text{6}\) năm). Sự kết hợp này chứng minh chiến lược đòn bẩy tài chính của BIDV là hiệu quả, giúp tối ưu hóa lợi nhuận cho cổ đông, ngay cả khi hiệu suất sử dụng tài sản tổng thể chỉ ở mức ổn định.
1. ggplot(BIDV, aes(x = tong_tai_san)) +
2. geom_histogram(binwidth = 5e13, fill = 'blue', color = 'red') +
3. facet_wrap(~hieu_qua_ROE) +
4. labs(x = 'Tổng tài sản (VND)', y = 'Tần suất', title = 'Hình 19. Tổng tài sản theo từng loại hiệu quả ROE') +
5. theme_minimal()
Dùng ggplot() lấy dữ liệu BIDV, trục x là tổng tài
sản.
Vẽ biểu đồ histogram phân phối tổng tài sản với cột màu xanh, viền đỏ, mỗi bin rộng 50 nghìn tỷ VND.
facet_wrap(~hieu_qua_ROE): chia thành các biểu đồ
nhỏ, mỗi nhóm ứng với một mức hiệu quả ROE.
Thêm tiêu đề, nhãn trục x/y cho biểu đồ.
Dùng theme tối giản giúp biểu đồ thoáng, dễ đọc.
Nhận xét: Biểu đồ cho thấy ROE Thấp chỉ xảy ra ở mức Tổng tài sản (TS) thấp (khoảng \(\text{400.000}\) tỷ VND đến \(\text{1.300.000}\) tỷ VND). Ngược lại, ROE Tốt và Trung bình xảy ra ở tất cả các mức TS, kể cả khi TS đã đạt \(\text{2.500.000}\) tỷ VND. Hàm ý kinh tế: Quy mô tài sản không phải là yếu tố quyết định hiệu quả ROE. Điều này chứng tỏ BIDV duy trì được hiệu quả sinh lời trên vốn ngay cả khi quy mô mở rộng, nhấn mạnh vai trò của quản lý đòn bẩy tài chính và kiểm soát rủi ro.
1. BIDV_long <- BIDV %>%
2. filter(nam >= 2019 & nam <= 2023) %>%
3. mutate(nam2 = substr(as.character(nam), 3, 4)) %>%
4. select(nam2, tong_tai_san, von_chu_so_huu, du_no_cho_vay) %>%
5. pivot_longer(cols = c(tong_tai_san, von_chu_so_huu, du_no_cho_vay), names_to = "chitieu", values_to = "giatri") %>%
6. mutate(giatri_nghin_ty = giatri / 1e12)
7. color_vec <- c("tong_tai_san" = "#00FFFF", "von_chu_so_huu" = "#FF00FF", "du_no_cho_vay" = "#39FF14")
8. ggplot(BIDV_long, aes(x = chitieu, y = giatri_nghin_ty, fill = chitieu)) +
9. geom_col(width = 0.7, position = "dodge") +
10. facet_wrap(~nam2) +
11. scale_y_continuous(breaks = seq(0, max(BIDV_long$giatri_nghin_ty, na.rm = TRUE) * 1.2, 500), labels = scales::comma_format(suffix = "K", accuracy = 1)) +
12. scale_fill_manual(name = "Chỉ tiêu", values = color_vec, labels = c("tong_tai_san" = "Tổng tài sản", "von_chu_so_huu" = "Vốn chủ sở hữu", "du_no_cho_vay" = "Dư nợ cho vay")) +
13. labs(x = NULL, y = "Giá trị (nghìn tỷ VND)", title = "Hình 20. Tổng tài sản, Vốn chủ sở hữu, Dư nợ cho vay từ 2019-2023") +
14. theme_minimal() +
15. theme(legend.position = "bottom", axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())
Giải thích kỹ thuật:
1–4. Lọc dữ liệu từ 2019–2023, lấy ba biến tài chính, đổi thành hai số cuối năm để trục x gọn.
5–9. Chuyển dữ liệu sang dạng dài và chuẩn hóa số liệu theo nghìn tỷ (giúp dễ nhìn hơn).
10–14. Xác định màu riêng cho từng chỉ tiêu để cột phân biệt rõ ràng.
15–18. Vẽ nhóm cột, mỗi năm có ba cột cạnh nhau (theo chỉ tiêu), thêm nhãn số liệu trên cột.
20–23. Tùy chỉnh trục y (dạng nghìn tỷ, nhãn rõ).
24–32. Đặt tên chú thích, màu, nhãn biến tiếng Việt.
33–44. Đặt tiêu đề, chỉnh theme tối giản, bỏ trục x số, chú thích ở dưới.
Nhận xét: Biểu đồ cho thấy ba chỉ số quy mô chính của BIDV tăng trưởng liên tục và mạnh mẽ (\(\text{2019}\)–\(\text{2023}\)). Quy mô Tổng tài sản (\(\text{2.508,8}\) nghìn tỷ VND) và Dư nợ cho vay (\(\text{1.737,2}\) nghìn tỷ VND) áp đảo năm \(\text{2023}\). Ngược lại, VCSH duy trì ở mức rất thấp (\(\text{122,9}\) nghìn tỷ VND). Điều này khẳng định chiến lược mở rộng quy mô và tín dụng hiệu quả, đồng thời nhấn mạnh đòn bẩy tài chính rất cao do VCSH nhỏ, đòi hỏi quản lý rủi ro và vốn cẩn thận.
Nghiên cứu cho thấy thị trường bất động sản Hoa Kỳ mang tính chu kỳ mạnh và nhạy cảm cao với biến động vĩ mô. Giá nhà biến động theo các giai đoạn lịch sử, từ suy thoái nghiêm trọng thời kỳ Đại Suy thoái đến các đợt bong bóng tài sản cuối thập niên 1960. Dù ổn định hơn sau năm 1980, thị trường vẫn dễ tổn thương trước các cú sốc hiện đại như khủng hoảng thanh khoản năm 2020. Phân tích dữ liệu cho thấy thị trường đang trong trạng thái cầu mạnh, với tỷ lệ nhà “đã bán” chiếm ưu thế, phản ánh nguồn cung hạn chế. Giá trị giao dịch thực tế tập trung chủ yếu ở phân khúc nhà phổ thông dưới 1 triệu USD, nơi giá niêm yết và giá bán có độ chênh lệch nhỏ — thể hiện tính định giá hiệu quả. Thanh khoản cao nhất thuộc về các căn hộ tầm trung, 3 phòng ngủ và giá dưới 500.000 USD, trong khi các bất động sản lớn có thanh khoản thấp hơn đáng kể.
Đối với Ngân hàng TMCP Đầu tư và Phát triển Việt Nam (BIDV), giai đoạn 2010–2024 đánh dấu sự phát triển vượt bậc cả về quy mô lẫn hiệu quả hoạt động. Tổng tài sản tăng gấp nhiều lần, lợi nhuận sau thuế tăng gần sáu lần, và tỷ suất sinh lời trên vốn chủ sở hữu (ROE) duy trì ở mức cao, cho thấy năng lực sinh lời bền vững. Tuy nhiên, tỷ suất sinh lời trên tổng tài sản (ROA) vẫn ở mức trung bình, phản ánh hiệu quả sử dụng tài sản chưa tối ưu. Ngoài ra, chi phí tín dụng và trích lập dự phòng tăng mạnh cho thấy BIDV vẫn phải đối mặt với áp lực rủi ro tín dụng.
Đối với thị trường bất động sản Hoa Kỳ:
Cần tăng cường các chính sách ổn định vĩ mô và kiểm soát chu kỳ tín dụng để hạn chế bong bóng giá.
Phát triển hệ thống thông tin minh bạch về giá và giao dịch nhằm nâng cao khả năng định giá thị trường, giảm chênh lệch giữa giá niêm yết và giá bán thực tế.
Khuyến khích đầu tư vào phân khúc nhà ở tầm trung – phân khúc có thanh khoản cao và đáp ứng nhu cầu thực, thay vì chạy theo các dự án cao cấp ít hiệu quả.
Đối với Ngân hàng TMCP Đầu tư và Phát triển Việt Nam (BIDV):
Tăng hiệu quả sử dụng tài sản (ROA): Tập trung tái cơ cấu danh mục tín dụng, ưu tiên các lĩnh vực có biên lợi nhuận cao và rủi ro thấp.
Đa dạng hóa nguồn thu: Đẩy mạnh mảng dịch vụ ngân hàng số, thanh toán và bảo hiểm để giảm phụ thuộc vào thu nhập lãi thuần.
Quản trị rủi ro chủ động: Tiếp tục duy trì chính sách trích lập dự phòng thận trọng, đồng thời phát triển hệ thống cảnh báo sớm để kiểm soát nợ xấu.
Tối ưu hóa nguồn vốn: Nâng cao năng suất sử dụng vốn chủ sở hữu, đảm bảo ROE duy trì ở mức cao nhưng vẫn an toàn, hướng tới tăng trưởng bền vững dài hạn.
Phạm vi dữ liệu chưa thật toàn diện, chủ yếu dựa vào nguồn thứ cấp nên có thể chưa phản ánh hết biến động thực tế.
Phương pháp nghiên cứu mới tập trung vào mô tả và thống kê, chưa đi sâu vào mô hình định lượng chuyên sâu.
Phân tích BIDV còn giới hạn ở khía cạnh tài chính, chưa kết hợp các yếu tố vĩ mô và quản trị nội bộ.
Nên mở rộng phạm vi nghiên cứu sang nhiều quốc gia hoặc toàn khu vực để so sánh, qua đó đánh giá rõ hơn xu hướng chung của thị trường bất động sản toàn cầu.
Ứng dụng các mô hình kinh tế lượng hoặc học máy nhằm phân tích sâu mối quan hệ nhân – quả giữa các yếu tố ảnh hưởng đến giá và hiệu quả tài chính.
Kết hợp thêm các biến định tính như chính sách tín dụng, tâm lý nhà đầu tư và yếu tố quản trị để tăng tính thực tiễn cho kết quả nghiên cứu.
[1] American Psychological Association. (2020). Publication manual of the American Psychological Association (7th ed.). Washington, DC: Author.
[2] Baffoe-Bonnie, J. (\(\text{1998}\)). The role of economic fundamentals in the determination of U.S. house prices. Journal of Real Estate Finance and Economics, 17(\(\text{2}\)), \(\text{129}\)–\(\text{148}\).
[3] Berger, A. N., & Bouwman, C. H. (\(\text{2013}\)). How does capital affect bank performance and risk? A theoretical and empirical analysis. Journal of Financial Intermediation, 22(\(\text{2}\)), \(\text{172}\)–\(\text{199}\).
[4] Đỗ, V. H., & Trần, T. T. (\(\text{2015}\)). Tác động của quy mô tài sản và cấu trúc vốn đến hiệu quả hoạt động của các ngân hàng niêm yết tại Việt Nam. Tạp chí Khoa học Kinh tế và Quản trị Kinh doanh, 6(\(\text{4}\)), \(\text{21}\)–\(\text{35}\).
[5] Glaeser, E. L., & Gyourko, J. (\(\text{2008}\)). Housing dynamics. Journal of Public Economics, 92(\(\text{5}\)–\(\text{6}\)), \(\text{1063}\)–\(\text{1083}\).
[6] Lê, Q. H., & Nguyễn, T. D. (\(\text{2019}\)). Ảnh hưởng của các biến số kinh tế vĩ mô đến hiệu quả kinh doanh của các ngân hàng thương mại tại Việt Nam. Tạp chí Khoa học & Đào tạo Ngân hàng, (\(\text{211}\)), \(\text{15}\)–\(\text{28}\).
[7] Nguyễn, V. T., & Mai, T. T. M. (\(\text{2020}\)). Các yếu tố ảnh hưởng đến tỷ suất sinh lời trên tài sản (\(\text{ROA}\)) của các ngân hàng thương mại Việt Nam. Tạp chí Phát triển Khoa học và Công nghệ, 23(\(\text{1}\)), \(\text{12}\)–\(\text{25}\).
[8] Phạm, T. T. L., & Lê, H. T. N. (\(\text{2021}\)). Tác động của chi phí hoạt động đến hiệu quả sinh lời của các ngân hàng thương mại cổ phần Việt Nam. Tạp chí Công Thương, (\(\text{12}\)), \(\text{64}\)–\(\text{71}\).
[9] Trần Mạnh Tường(2025). Data manipulation và Data Visualization
[10] Vũ, T. H. Y., & Nguyễn, P. T. (\(\text{2018}\)). Mối quan hệ giữa chất lượng tín dụng và lợi nhuận của các ngân hàng thương mại Việt