Trong bối cảnh nền kinh tế Việt Nam đang hội nhập mạnh mẽ với thị trường tài chính quốc tế, các ngân hàng thương mại đóng vai trò quan trọng trong việc huy động vốn, cung ứng tín dụng và thúc đẩy tăng trưởng kinh tế. Việc phân tích dữ liệu tài chính của ngân hàng không chỉ giúp đánh giá hiệu quả hoạt động mà còn phản ánh khả năng thích ứng của ngân hàng với biến động thị trường. Techcombank là một trong những ngân hàng TMCP hàng đầu Việt Nam đây là đối tượng nghiên cứu tiêu biểu để tìm hiểu bức tranh tài chính của ngành ngân hàng trong giai đoạn 2014–2023.
Việc thực hiện đề tài “Phân tích toàn diện dữ liệu tài chính Techcombank” giúp vận dụng kiến thức đã được trang bị trong môn Phân tích dữ liệu để xử lý, mã hóa, thống kê và trực quan hóa dữ liệu thực tế. Đề tài không chỉ dừng lại ở việc mô tả số liệu, mà còn hướng đến việc hiểu sâu bản chất của dữ liệu, phát hiện xu hướng biến động và mối quan hệ giữa các chỉ tiêu tài chính. Đây là cơ hội để củng cố kỹ năng phân tích dữ liệu bằng R công cụ phổ biến trong lĩnh vực tài chính và kinh tế lượng hiện nay.
Thông qua việc phân tích toàn diện dữ liệu tài chính của Techcombank trong giai đoạn 10 năm, đề tài hướng đến việc mô tả sự thay đổi về quy mô tài sản, vốn chủ sở hữu, lợi nhuận, nợ phải trả và các chỉ tiêu hiệu quả tài chính khác. Kết quả nghiên cứu sẽ giúp người đọc hiểu rõ hơn về tình hình tăng trưởng của ngân hàng, đồng thời minh chứng cho khả năng ứng dụng công nghệ dữ liệu vào việc ra quyết định tài chính.
Mục tiêu tổng quát: Phân tích toàn diện dữ liệu tài chính của Ngân hàng TMCP Kỹ Thương Việt Nam (Techcombank) trong giai đoạn 2014–2023 thông qua các bước xử lý, thống kê mô tả và trực quan hóa dữ liệu bằng ngôn ngữ R. Qua đó, đề tài giúp đánh giá tình hình tài chính, nhận diện xu hướng biến động.
Mục tiêu chi tiết:
Thu thập và giới thiệu bộ dữ liệu báo cáo tài chính của Techcombank trong 10 năm gần nhất
Thực hiện xử lý và mã hóa dữ liệu thô, đảm bảo dữ liệu sạch, đồng nhất và sẵn sàng cho quá trình phân tích.
Tiến hành các thống kê mô tả cơ bản (trung bình, phương sai, độ lệch chuẩn, hệ số biến thiên, tốc độ tăng trưởng,…) để hiểu rõ đặc điểm và sự biến động của các chỉ tiêu tài chính.
Trực quan hóa dữ liệu bằng các biểu đồ đa lớp (multi-layer chart) để thể hiện xu hướng và mối quan hệ giữa các biến tài chính trong giai đoạn nghiên cứu.
Rút ra nhận xét và kết luận, chỉ ra các xu hướng nổi bật trong hoạt động tài chính của Techcombank và gợi ý hướng nghiên cứu chuyên sâu hơn trong tương lai.
Đối tượng nghiên cứu: Dữ liệu tài chính của Ngân hàng TMCP Kỹ Thương Việt Nam (Techcombank), bao gồm các chỉ tiêu phản ánh tình hình hoạt động kinh doanh và sức khỏe tài chính của ngân hàng như: tổng tài sản, vốn chủ sở hữu, lợi nhuận sau thuế, tổng nợ phải trả, dư nợ cho vay khách hàng,… Những chỉ tiêu này được trích xuất từ báo cáo tài chính hằng năm của Techcombank và được sử dụng để phục vụ cho việc xử lý, thống kê, và trực quan hóa dữ liệu bằng ngôn ngữ R.
Phạm vi nghiên cứu:
Về không gian: Nghiên cứu được thực hiện đối với Ngân hàng TMCP Kỹ Thương Việt Nam (Techcombank) một trong những ngân hàng thương mại cổ phần hàng đầu tại Việt Nam, có trụ sở chính tại Hà Nội và mạng lưới hoạt động rộng khắp trên toàn quốc.
Về thời gian: Dữ liệu nghiên cứu được thu thập trong giai đoạn 2014–2023, tương ứng với 10 năm hoạt động gần nhất của Techcombank, nhằm phản ánh xu hướng và sự thay đổi của các chỉ tiêu tài chính trong trung và dài hạn.
Về nội dung: Đề tài tập trung vào các bước: giới thiệu và mô tả dữ liệu, xử lý, mã hóa dữ liệu thô, thực hiện các thống kê cơ bản và trực quan hóa dữ liệu. Qua đó, rút ra các nhận định, xu hướng về tình hình tài chính của Techcombank trong giai đoạn nghiên cứu.
Dữ liệu được thu thập từ báo cáo tài chính hợp nhất thường niên của Ngân hàng TMCP Kỹ Thương Việt Nam (Techcombank) giai đoạn 2014–2023, được công bố công khai trên website chính thức của ngân hàng.
Các chỉ tiêu được chọn gồm: Tổng tài sản, Vốn chủ sở hữu, Lợi nhuận sau thuế, Tổng nợ phải trả, Dư nợ cho vay khách hàng,…
Sau khi thu thập, dữ liệu được nhập thủ công và lưu trữ dưới định dạng xlsx để dễ dàng đọc và xử lý trong ngôn ngữ R.
Kiểm tra và loại bỏ giá trị thiếu, giá trị ngoại lai.
Chuẩn hóa định dạng dữ liệu (chuyển từ ký tự sang số, loại bỏ dấu phẩy, ký hiệu “tỷ”, “triệu”,…).
Mã hóa dữ liệu khi cần thiết
Tạo các biến mới phục vụ phân tích (như tốc độ tăng trưởng, tỷ suất lợi nhuận,…).
Phân tích thống kê mô tả: Sử dụng các hàm như mean(), median(), var(), sd(), summary(),… để tính toán các chỉ tiêu thống kê cơ bản của từng biến tài chính.
Phân tích xu hướng: Tính tốc độ tăng trưởng, mức biến động và hệ số biến thiên nhằm đánh giá sự thay đổi của các chỉ tiêu qua các năm.
Phương pháp trực quan hóa: Dữ liệu được trình bày bằng 20 biểu đồ, mỗi biểu đồ có từ 5 lớp (layer) trở lên, sử dụng thư viện ggplot2 và các hàm bổ trợ như geom_line(), geom_bar(), geom_point(), geom_smooth(),… nhằm thể hiện rõ mối quan hệ và xu hướng tài chính của Techcombank.
Đề tài “Phân tích toàn diện dữ liệu tài chính Techcombank (2014–2023)” mang lại cả giá trị học thuật và thực tiễn. Về học thuật, nghiên cứu giúp vận dụng kiến thức phân tích dữ liệu và thống kê mô tả vào trường hợp thực tế, qua đó củng cố kỹ năng sử dụng ngôn ngữ R trong xử lý, mã hóa và trực quan hóa dữ liệu tài chính. Về thực tiễn, kết quả phân tích phản ánh xu hướng biến động của các chỉ tiêu tài chính chủ yếu của Techcombank trong 10 năm, hỗ trợ sinh viên có cái nhìn rõ hơn về tình hình hoạt động của ngân hàng. Đồng thời, nghiên cứu khẳng định R là công cụ mạnh mẽ, linh hoạt và dễ ứng dụng trong các bài toán tài chính, có thể làm tài liệu tham khảo cho sinh viên trong lĩnh vực phân tích dữ liệu.
Chương 1: Mở đầu
Trình bày lý do chọn đề tài, mục tiêu nghiên cứu, đối tượng và phạm vi nghiên cứu, phương pháp thực hiện, đóng góp của nghiên cứu và kết cấu tổng thể của đề tài.
Chương 2: Tổng quan về bộ dữ liệu
Giới thiệu nguồn gốc, nội dung và cấu trúc của bộ dữ liệu báo cáo tài chính Techcombank giai đoạn 2014–2023; mô tả sơ bộ các biến và định dạng dữ liệu trước khi xử lý.
Chương 3: Làm sạch dữ liệu
Thực hiện các thao tác xử lý dữ liệu thô, loại bỏ giá trị trống, chuẩn hóa định dạng, mã hóa dữ liệu, và xây dựng bộ dữ liệu sạch, sẵn sàng cho các bước phân tích tiếp theo.
Chương 4: Truy xuất dữ liệu
Trình bày cách đọc, lọc, trích xuất và tính toán các biến số cần thiết từ bộ dữ liệu; tạo thêm các biến phụ trợ như tốc độ tăng trưởng, tỷ suất sinh lời, hoặc chỉ số tổng hợp.
Chương 5: Thực hiện thống kê cơ bản
Áp dụng các công cụ thống kê mô tả để tính toán trung bình, phương sai, độ lệch chuẩn, hệ số biến thiên,… kèm giải thích kỹ thuật và ý nghĩa thống kê của từng chỉ tiêu.
Chương 6: Vẽ đồ thị cơ bản với R
Thực hiện trực quan hóa dữ liệu bằng các biểu đồ đa lớp (line, bar, scatter, boxplot, area,…) nhằm mô tả xu hướng biến động và mối quan hệ giữa các chỉ tiêu tài chính.
Bộ dữ liệu được thu thập từ báo cáo tài chính hợp nhất của Ngân hàng TMCP Kỹ Thương Việt Nam (Techcombank) trong giai đoạn từ năm 2014 đến năm 2023, tổng cộng 10 năm dữ liệu liên tục. Bộ dữ liệu bao gồm các chỉ tiêu tài chính quan trọng được trình bày trong Bảng cân đối kế toán, Báo cáo kết quả kinh doanh và Báo cáo lưu chuyển tiền tệ của ngân hàng như: tổng tài sản, cho vay khách hàng, tiền gửi khách hàng, vốn chủ sở hữu, lợi nhuận sau thuế, dự phòng rủi ro tín dụng,… Mỗi cột dữ liệu thể hiện giá trị tài chính của từng chỉ tiêu theo từng năm, phản ánh tình hình hoạt động, quy mô và hiệu quả kinh doanh của Techcombank qua các giai đoạn.
Mục tiêu của việc sử dụng bộ dữ liệu này là phân tích xu hướng biến động tài chính của Techcombank trong 10 năm gần nhất, đánh giá sức khỏe tài chính, và ứng dụng các mô hình thống kê – dự báo để ước lượng và dự đoán giá trị các chỉ tiêu tài chính trong tương lai.
Ta tiến hành đọc tệp xlsx và gán dữ liệu vào một đối tượng có tên là DLTCB
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
#Đọc dữ liệu
DLTCB <- read_excel("BCTCTCB.xlsx")
Đọc dữ liệu từ cột 2 đến cột 11 từ năm 2014 đến 2023, chuyển dữ liệu về dạng character. Các ô có kí hiệu -, –, ô trống, na được gán vào chữ NA sau đó chuyển hết dữ liệu còn lại về dạng numeric.
#Làm sạch dữ liệu tài chính theo từng năm (2014–2023)
DLTCB[, 2:11] <- lapply(DLTCB[, 2:11], function(x) {
#Chuyển toàn bộ giá trị trong cột hiện tại (x) sang dạng ký tự (character)
x <- as.character(x)
x[x == "-" | x == "–" | x == "" | is.na(x)] <- NA
#Chuyển toàn bộ dữ liệu của cột sang kiểu số (numeric)
as.numeric(x)
})
#Tạo một bản sao của dữ liệu DLTCB và gán vào đối tượng mới có tên là tieuluan
tieuluan <- DLTCB
#Thêm dấu phẩy ngăn cách hàng nghìn và tắt hiển thị số dạng khoa học
tieuluan[, 2:11] <- lapply(tieuluan[, 2:11], function(x) {
format(x, big.mark = ",", scientific = FALSE)
})
library(DT)
## Warning: package 'DT' was built under R version 4.4.3
datatable(
tieuluan,
options = list(pageLength = 10, scrollX = TRUE),
caption = "Bảng 1. Dữ liệu tài chính Techcombank 2014–2023"
)
Ta sử dụng một số lệnh để xem thông tin chung của tiểu luận
dim(tieuluan[-1, -c(1, ncol(tieuluan))])
## [1] 60 10
Ý nghĩa kỹ thuật:Hàm dim() trong R cho phép kiểm tra kích thước của bộ dữ liệu, gồm số hàng (quan sát) và số cột (biến).Trong lệnh này, ta loại bỏ dòng đầu tiên và cột đầu,cuối vì chứa tiêu đề danh mục chứ không phải dữ liệu số liệu tài chính.
Ý nghĩa thống kê: Kết quả thu được 60 × 10 cho biết bộ dữ liệu báo cáo tài chính của Techcombank gồm 60 quan sát (chỉ tiêu tài chính) và 10 biến tương ứng với 10 năm (2014–2023). Điều này cho thấy dữ liệu có độ bao phủ tốt về thời gian và số lượng chỉ tiêu, đủ cơ sở để thực hiện các phân tích thống kê và mô hình hóa xu hướng tài chính của ngân hàng.
#Xem tên các biến nhưng bỏ cột đầu tiên và cột cuối cùng
names(tieuluan)[-c(1, ncol(tieuluan))]
## [1] "2014" "2015" "2016" "2017" "2018" "2019" "2020" "2021" "2022" "2023"
Ý nghĩa kỹ thuật: Hàm names() được dùng để liệt kê tên các biến (cột) trong bộ dữ liệu. Trong trường hợp này, ta loại bỏ cột đầu tiên) và cột cuối cùng để chỉ hiển thị tên các biến năm tài chính.
Ý nghĩa thống kê: Kết quả trả về các biến 2014-2023. Bộ dữ liệu có cấu trúc chuỗi thời gian ổn định, giúp thuận lợi cho các phân tích biến động tài chính theo năm và dự báo xu hướng trong tương lai.
# Tạo bảng mô tả thông tin các biến trong bộ dữ liệu BCTCTCB
variable_info <- data.frame(
Variable = c("2014", "2015", "2016", "2017", "2018",
"2019", "2020", "2021", "2022", "2023"),
Type = rep("Numeric", 10),
Description = c(
"Giá trị tài chính của các chỉ tiêu trong năm 2014",
"Giá trị tài chính của các chỉ tiêu trong năm 2015",
"Giá trị tài chính của các chỉ tiêu trong năm 2016",
"Giá trị tài chính của các chỉ tiêu trong năm 2017",
"Giá trị tài chính của các chỉ tiêu trong năm 2018",
"Giá trị tài chính của các chỉ tiêu trong năm 2019",
"Giá trị tài chính của các chỉ tiêu trong năm 2020",
"Giá trị tài chính của các chỉ tiêu trong năm 2021",
"Giá trị tài chính của các chỉ tiêu trong năm 2022",
"Giá trị tài chính của các chỉ tiêu trong năm 2023"
),
stringsAsFactors = FALSE
)
# Hiển thị bảng
variable_info
## Variable Type Description
## 1 2014 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2014
## 2 2015 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2015
## 3 2016 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2016
## 4 2017 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2017
## 5 2018 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2018
## 6 2019 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2019
## 7 2020 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2020
## 8 2021 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2021
## 9 2022 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2022
## 10 2023 Numeric Giá trị tài chính của các chỉ tiêu trong năm 2023
Ý nghĩa kỹ thuật: Hàm data.frame() giúp ta tạo ra một bảng gồm nhiều cột và hàng, tương tự như một bảng tính Excel. Ở đây, cột Variable liệt kê tên các năm từ 2014 đến 2023, cột Type cho biết kiểu dữ liệu của các năm này là dạng số (Numeric) và cột Description mô tả ý nghĩa của từng năm, tức là giá trị tài chính của các chỉ tiêu trong năm đó.
Ý nghĩa thống kê: Mỗi biến tương ứng với một năm tài chính từ 2014 đến 2023, được biểu diễn dưới dạng dữ liệu định lượng (Numeric). Các biến này phản ánh giá trị của các chỉ tiêu tài chính qua các năm, phục vụ cho việc phân tích xu hướng biến động tài chính của ngân hàng.
#Xem cấu trúc tổng quát của dữ liệu
str(as.data.frame(tieuluan[, 2:11]))
## 'data.frame': 61 obs. of 10 variables:
## $ 2014: chr " 2,723,642" " 1,168,265" " 18,922,460" " 9,588,234" ...
## $ 2015: chr " 2,754,299" " 1,602,619" " 14,762,009" " 7,487,472" ...
## $ 2016: chr " 2,956,708" " 2,533,875" " 21,598,874" " 9,058,942" ...
## $ 2017: chr " 2,344,362" " 4,317,924" " 30,117,314" " 16,204,561" ...
## $ 2018: chr " 2,606,467" " 10,555,483" " 35,559,363" " 24,169,512" ...
## $ 2019: chr " 4,820,627" " 3,192,256" " 47,990,224" " 38,596,420" ...
## $ 2020: chr " 3,663,615" " 10,253,324" " 28,994,954" " 21,112,630" ...
## $ 2021: chr " 3,578,643" " 4,908,529" " 70,515,258" " 39,450,727" ...
## $ 2022: chr " 4,215,721" " 11,475,590" " 82,873,754" " 69,925,143" ...
## $ 2023: chr " 3,620,695" " 27,140,592" "104,072,320" " 80,126,897" ...
Ý nghĩa kỹ thuật: Lệnh str() giúp xem nhanh cấu trúc của dữ liệu, bao gồm số dòng, số cột và kiểu dữ liệu của từng cột. Ở đây, kết quả cho thấy bộ dữ liệu có 61 dòng và 10 cột, mỗi cột đại diện cho một năm tài chính từ 2014 đến 2023. Các giá trị hiện đang ở dạng ký tự (character).
Ý nghĩa thống kê: Kết quả này cho biết dữ liệu đã đầy đủ cho 10 năm, đảm bảo tính liên tục theo chuỗi thời gian. Tuy nhiên, vì dữ liệu đang ở dạng ký tự nên cần chuyển sang dạng số (numeric) để có thể thực hiện các phép tính thống kê.
options(scipen = 99999)
head(tieuluan[, 2:11])
## # A tibble: 6 × 10
## `2014` `2015` `2016` `2017` `2018` `2019` `2020` `2021` `2022` `2023`
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 " 2,723,642" " 2,… " 2,… " 2,… " 2,… " 4,… " 3,… " 3,… " 4,… " 3,…
## 2 " 1,168,265" " 1,… " 2,… " 4,… " 10,… " 3,… " 10,… " 4,… " 11,… " 27,…
## 3 " 18,922,460" " 14,… " 21,… " 30,… " 35,… " 47,… " 28,… " 70,… " 82,… "104,…
## 4 " 9,588,234" " 7,… " 9,… " 16,… " 24,… " 38,… " 21,… " 39,… " 69,… " 80,…
## 5 " 9,343,996" " 7,… " 12,… " 13,… " 11,… " 9,… " 7,… " 31,… " 13,… " 24,…
## 6 " -977" " … " … " … " … " … " … " … " … " …
# Đếm tổng số giá trị bị thiếu trong toàn bộ dataset
sum(is.na(tieuluan))
## [1] 58
# Kiểm tra vị trí xuất hiện giá trị NA
which(is.na(tieuluan), arr.ind = TRUE)
## row col
## [1,] 2 12
## [2,] 3 12
## [3,] 4 12
## [4,] 5 12
## [5,] 6 12
## [6,] 7 12
## [7,] 8 12
## [8,] 9 12
## [9,] 10 12
## [10,] 11 12
## [11,] 12 12
## [12,] 13 12
## [13,] 14 12
## [14,] 15 12
## [15,] 16 12
## [16,] 17 12
## [17,] 18 12
## [18,] 19 12
## [19,] 20 12
## [20,] 21 12
## [21,] 22 12
## [22,] 23 12
## [23,] 24 12
## [24,] 25 12
## [25,] 26 12
## [26,] 27 12
## [27,] 28 12
## [28,] 29 12
## [29,] 30 12
## [30,] 31 12
## [31,] 32 12
## [32,] 33 12
## [33,] 34 12
## [34,] 35 12
## [35,] 36 12
## [36,] 37 12
## [37,] 38 12
## [38,] 39 12
## [39,] 40 12
## [40,] 42 12
## [41,] 43 12
## [42,] 44 12
## [43,] 45 12
## [44,] 46 12
## [45,] 47 12
## [46,] 48 12
## [47,] 49 12
## [48,] 50 12
## [49,] 51 12
## [50,] 52 12
## [51,] 54 12
## [52,] 55 12
## [53,] 56 12
## [54,] 57 12
## [55,] 58 12
## [56,] 59 12
## [57,] 60 12
## [58,] 61 12
# Thay thế giá trị bị thiếu (NA) bằng 0 cho các cột từ 2014–2023
tieuluan[, 2:11] <- lapply(tieuluan[, 2:11], function(x) {
x[is.na(x)] <- 0
return(x)
})
# Kiểm tra lại sau khi xử lý
sum(is.na(tieuluan))
## [1] 58
Ý nghĩa kỹ thuật: Hàm is.na() giúp kiểm tra các ô bị trống hoặc có giá trị bị thiếu trong dữ liệu. Hàm này trả về TRUE nếu ô đó bị thiếu và FALSE nếu có dữ liệu đầy đủ.
Ý nghĩa thống kê: Việc phát hiện và xử lý giá trị thiếu giúp đảm bảo dữ liệu được hoàn chỉnh, tránh sai lệch khi tính toán. Dữ liệu của Techcombank chỉ thiếu một vài giá trị nhỏ, nên sau khi loại bỏ, bộ dữ liệu đủ tin cậy cho phân tích xu hướng tài chính.
#Kiểm tra các dòng bị trùng lặp trong bộ dữ liệu
head(duplicated(tieuluan))
## [1] FALSE FALSE FALSE FALSE FALSE FALSE
Nhận xét: Kết quả của hàm duplicated() cho thấy toàn bộ các giá trị trả về đều là FALSE, chứng tỏ không có dòng dữ liệu nào bị trùng lặp trong bộ dữ liệu.
#Đếm tổng số dòng bị trùng
sum(duplicated(tieuluan))
## [1] 0
Ý nghĩa kỹ thuật: Hàm duplicated() được dùng để kiểm tra xem có dòng nào bị lặp lại trong dữ liệu hay không. Nếu kết quả trả về toàn FALSE nghĩa là không có dòng trùng.
Ý nghĩa thống kê: Không có dữ liệu trùng lặp giúp đảm bảo tính chính xác và duy nhất của từng quan sát. Điều này rất quan trọng để các kết quả phân tích sau không bị sai do đếm lặp giá trị.
# Xem thống kê mô tả cơ bản của các biến (để phát hiện giá trị bất thường)
summary(tieuluan[, 2:11])
## 2014 2015 2016 2017
## Length:61 Length:61 Length:61 Length:61
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## 2018 2019 2020 2021
## Length:61 Length:61 Length:61 Length:61
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## 2022 2023
## Length:61 Length:61
## Class :character Class :character
## Mode :character Mode :character
Nhận xét: Các cột dữ liệu từ năm 2014 đến 2023 hiện đang có kiểu dữ liệu là character (chuỗi ký tự) thay vì numeric(dạng số).
# Kiểm tra xem có giá trị cực lớn hoặc bất hợp lý
which(tieuluan[, 2:11] > 1e9, arr.ind = TRUE)
## row col
## [1,] 40 1
## [2,] 46 1
## [3,] 52 1
## [4,] 61 1
## [5,] 57 2
## [6,] 58 2
## [7,] 11 3
## [8,] 12 3
## [9,] 40 3
## [10,] 46 3
## [11,] 52 3
## [12,] 61 3
## [13,] 11 4
## [14,] 12 4
## [15,] 40 4
## [16,] 46 4
## [17,] 52 4
## [18,] 61 4
## [19,] 11 5
## [20,] 12 5
## [21,] 40 5
## [22,] 46 5
## [23,] 52 5
## [24,] 61 5
## [25,] 11 6
## [26,] 12 6
## [27,] 40 6
## [28,] 46 6
## [29,] 52 6
## [30,] 61 6
## [31,] 11 7
## [32,] 12 7
## [33,] 40 7
## [34,] 46 7
## [35,] 52 7
## [36,] 61 7
## [37,] 11 8
## [38,] 12 8
## [39,] 40 8
## [40,] 43 8
## [41,] 46 8
## [42,] 52 8
## [43,] 61 8
## [44,] 11 9
## [45,] 12 9
## [46,] 17 9
## [47,] 18 9
## [48,] 40 9
## [49,] 43 9
## [50,] 45 9
## [51,] 46 9
## [52,] 52 9
## [53,] 60 9
## [54,] 61 9
## [55,] 3 10
## [56,] 11 10
## [57,] 12 10
## [58,] 17 10
## [59,] 18 10
## [60,] 40 10
## [61,] 43 10
## [62,] 45 10
## [63,] 46 10
## [64,] 52 10
## [65,] 60 10
## [66,] 61 10
# Kiểm tra xem có còn giá trị thiếu
sum(is.na(tieuluan))
## [1] 58
Ý nghĩa kỹ thuật: Hàm summary() giúp xem nhanh giá trị nhỏ nhất, lớn nhất, trung bình,… của các biến để phát hiện các giá trị bất thường. Kết quả cho thấy dữ liệu hiện đang ở dạng ký tự (character) do chứa dấu phẩy ngăn cách hàng nghìn.
Ý nghĩa thống kê: Không xuất hiện giá trị cực lớn hoặc sai lệch bất hợp lý, nghĩa là dữ liệu ổn định và có thể tin cậy cho phân tích thống kê. Việc phát hiện kiểu dữ liệu sai cũng giúp chuẩn bị bước chuyển đổi sang dạng số.
#Kiểm tra kiểu dữ liệu hiện tại của các cột
str(tieuluan[, 2:11])
## tibble [61 × 10] (S3: tbl_df/tbl/data.frame)
## $ 2014: chr [1:61] " 2,723,642" " 1,168,265" " 18,922,460" " 9,588,234" ...
## $ 2015: chr [1:61] " 2,754,299" " 1,602,619" " 14,762,009" " 7,487,472" ...
## $ 2016: chr [1:61] " 2,956,708" " 2,533,875" " 21,598,874" " 9,058,942" ...
## $ 2017: chr [1:61] " 2,344,362" " 4,317,924" " 30,117,314" " 16,204,561" ...
## $ 2018: chr [1:61] " 2,606,467" " 10,555,483" " 35,559,363" " 24,169,512" ...
## $ 2019: chr [1:61] " 4,820,627" " 3,192,256" " 47,990,224" " 38,596,420" ...
## $ 2020: chr [1:61] " 3,663,615" " 10,253,324" " 28,994,954" " 21,112,630" ...
## $ 2021: chr [1:61] " 3,578,643" " 4,908,529" " 70,515,258" " 39,450,727" ...
## $ 2022: chr [1:61] " 4,215,721" " 11,475,590" " 82,873,754" " 69,925,143" ...
## $ 2023: chr [1:61] " 3,620,695" " 27,140,592" "104,072,320" " 80,126,897" ...
# Chuyển đổi các cột từ dạng chuỗi (character) sang dạng số (numeric)
tieuluan[, 2:11] <- lapply(tieuluan[, 2:11], function(x) as.numeric(gsub(",", "", x)))
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
# Kiểm tra lại sau khi chuyển đổi
str(tieuluan[, 2:11])
## tibble [61 × 10] (S3: tbl_df/tbl/data.frame)
## $ 2014: num [1:61] 2723642 1168265 18922460 9588234 9343996 ...
## $ 2015: num [1:61] 2754299 1602619 14762009 7487472 7274537 ...
## $ 2016: num [1:61] 2956708 2533875 21598874 9058942 12539932 ...
## $ 2017: num [1:61] 2344362 4317924 30117314 16204561 13912753 ...
## $ 2018: num [1:61] 2606467 10555483 35559363 24169512 11389851 ...
## $ 2019: num [1:61] 4820627 3192256 47990224 38596420 9393804 ...
## $ 2020: num [1:61] 3663615 10253324 28994954 21112630 7882324 ...
## $ 2021: num [1:61] 3578643 4908529 70515258 39450727 31064531 ...
## $ 2022: num [1:61] 4215721 11475590 82873754 69925143 13049711 ...
## $ 2023: num [1:61] 3620695 27140592 104072320 80126897 24046523 ...
Nhận xét: Kết quả kiểm tra cấu trúc dữ liệu (str()) cho thấy các biến từ năm 2014 đến 2023 đã được chuyển đổi thành công từ kiểu chuỗi ký tự (character) sang kiểu số (numeric).Trong quá trình chuyển đổi, R xuất hiện cảnh báo “NAs introduced by coercion” do một số ô dữ liệu có chứa ký tự đặc biệt hoặc trống, khiến chúng không thể ép kiểu trực tiếp sang dạng số.
# Hiển thị thống kê mô tả sau khi chuyển đổi (để xác nhận kết quả đúng)
summary(tieuluan[, 2:11])
## 2014 2015 2016
## Min. : -923154 Min. : -1164407 Min. : -1504323
## 1st Qu.: 18409 1st Qu.: 379045 1st Qu.: 577209
## Median : 1556411 Median : 2596340 Median : 2956708
## Mean : 20129100 Mean : 169432072 Mean : 26332698
## 3rd Qu.: 10366601 3rd Qu.: 13190590 3rd Qu.: 10686720
## Max. :175901794 Max. :4752967000 Max. :235363736
## NA's :8 NA's :9 NA's :6
## 2017 2018 2019
## Min. : -2385114 Min. : -1884581 Min. : -2916744
## 1st Qu.: 12092 1st Qu.: 509827 1st Qu.: 268545
## Median : 3726528 Median : 5881767 Median : 4149968
## Mean : 31249922 Mean : 36593689 Mean : 42959654
## 3rd Qu.: 17639970 3rd Qu.: 23186184 3rd Qu.: 35120545
## Max. :269392380 Max. :320988941 Max. :383699461
## NA's :8 NA's :7 NA's :5
## 2020 2021 2022
## Min. : -2214248 Min. : -3735663 Min. : -4771449
## 1st Qu.: 139696 1st Qu.: 43826 1st Qu.: 108349
## Median : 5184822 Median : 4866310 Median : 5534942
## Mean : 49509172 Mean : 63335257 Mean : 76112263
## 3rd Qu.: 28447297 3rd Qu.: 38484451 3rd Qu.: 63764297
## Max. :439602933 Max. :668728950 Max. :699032544
## NA's :6 NA's :3 NA's :3
## 2023
## Min. : -6127896
## 1st Qu.: 309984
## Median : 8892697
## Mean : 96177077
## 3rd Qu.: 80335160
## Max. :849482012
## NA's :6
Ý nghĩa kỹ thuật: Dùng hàm lapply() kết hợp với as.numeric() để chuyển các cột dữ liệu từ dạng chuỗi ký tự (character) sang dạng số (numeric). Trong quá trình này, R có thể báo lỗi “NA introduced by coercion” do một vài ô trống hoặc ký tự đặc biệt.
Ý nghĩa thống kê: Sau khi chuyển đổi, dữ liệu đã có thể dùng để tính toán các chỉ số như trung bình, phương sai hay tăng trưởng. Việc này giúp đảm bảo dữ liệu tài chính được định dạng đúng để phân tích xu hướng qua các năm.
# Xem cấu trúc dữ liệu chỉ trong giai đoạn 2014–2023
str(as.data.frame(tieuluan[, 1:11]))
## 'data.frame': 61 obs. of 11 variables:
## $ Bảng Cân Đối Kế Toán
## (Đơn vị: Triệu đồng): chr "Tiền mặt vàng" "Tiền gửi tại NHNN (\"NHNN\")" "Tiền gửi và cấp tín dụng cho các TCTD khác" "Tiền gửi tại các TCTD khác" ...
## $ 2014 : num 2723642 1168265 18922460 9588234 9343996 ...
## $ 2015 : num 2754299 1602619 14762009 7487472 7274537 ...
## $ 2016 : num 2956708 2533875 21598874 9058942 12539932 ...
## $ 2017 : num 2344362 4317924 30117314 16204561 13912753 ...
## $ 2018 : num 2606467 10555483 35559363 24169512 11389851 ...
## $ 2019 : num 4820627 3192256 47990224 38596420 9393804 ...
## $ 2020 : num 3663615 10253324 28994954 21112630 7882324 ...
## $ 2021 : num 3578643 4908529 70515258 39450727 31064531 ...
## $ 2022 : num 4215721 11475590 82873754 69925143 13049711 ...
## $ 2023 : num 3620695 27140592 104072320 80126897 24046523 ...
# Xem vài dòng đầu tiên để hình dung dạng dữ liệu
options(scipen = 999999999)
head(tieuluan[, 2:11])
## # A tibble: 6 × 10
## `2014` `2015` `2016` `2017` `2018` `2019` `2020` `2021` `2022`
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2723642 2754299 2956708 2344362 2606467 4820627 3663615 3.58e6 4.22e6
## 2 1168265 1602619 2533875 4317924 10555483 3192256 10253324 4.91e6 1.15e7
## 3 18922460 14762009 21598874 30117314 35559363 47990224 28994954 7.05e7 8.29e7
## 4 9588234 7487472 9058942 16204561 24169512 38596420 21112630 3.95e7 6.99e7
## 5 9343996 7274537 12539932 13912753 11389851 9393804 7882324 3.11e7 1.30e7
## 6 -977 NA NA NA NA NA NA NA -1.01e3
## # ℹ 1 more variable: `2023` <dbl>
Ý nghĩa kỹ thuật: Hàm head() dùng để xem 6 dòng đầu của dữ liệu, giúp kiểm tra các giá trị có hiển thị đúng sau bước xử lý hay chưa.
Ý nghĩa thống kê: Việc xem mẫu dữ liệu cho phép nhận biết sơ bộ quy mô và độ biến động của các chỉ tiêu tài chính qua các năm.
# Tìm vị trí của dòng chứa chữ "Tổng tài sản"
dong_ts <- which(grepl("Tổng tài sản", tieuluan[[1]], ignore.case = TRUE))
# Lọc các năm có Tổng tài sản > 200000
tieuluan[dong_ts, which(unlist(tieuluan[dong_ts, ]) > 200000)]
## # A tibble: 1 × 9
## Bảng Cân Đối Kế Toán…¹ `2016` `2017` `2018` `2019` `2020` `2021` `2022` `2023`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 TỔNG TÀI SẢN 2.35e8 2.69e8 3.21e8 3.84e8 4.40e8 5.69e8 6.99e8 8.49e8
## # ℹ abbreviated name: ¹`Bảng Cân Đối Kế Toán\r\n(Đơn vị: Triệu đồng)`
Ý nghĩa kỹ thuật: Lệnh sử dụng hàm grepl() để tự động xác định dòng chứa “Tổng tài sản” và kết hợp điều kiện > 200000 nhằm lọc ra các năm có giá trị tổng tài sản lớn hơn 200.000 triệu đồng.
ý nghĩa thống kê: Kết quả hiển thị cho thấy các năm mà tổng tài sản của Techcombank vượt mức 200.000 triệu đồng, phản ánh giai đoạn ngân hàng mở rộng quy mô hoạt động và đạt được năng lực tài chính vững mạnh. Điều này cho thấy Techcombank đã bước vào thời kỳ tăng trưởng ổn định, quy mô tài sản lớn hơn đáng kể so với ngưỡng trung bình, thể hiện khả năng mở rộng tín dụng, đầu tư và năng lực cạnh tranh cao trên thị trường.
idx <- which(grepl("Tiền mặt", tieuluan[[1]], ignore.case = TRUE))
vals <- as.numeric(gsub(",", "", unlist(tieuluan[idx, 2:ncol(tieuluan)])))
## Warning: NAs introduced by coercion
sel <- which(vals > 3000) + 1
tieuluan[idx, sel, drop = FALSE]
## # A tibble: 1 × 10
## `2014` `2015` `2016` `2017` `2018` `2019` `2020` `2021` `2022` `2023`
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2723642 2754299 2956708 2344362 2606467 4820627 3663615 3578643 4215721 3.62e6
Ý nghĩa kỹ thuật:Đoạn lệnh sử dụng hàm grepl() để xác định dòng chứa nội dung “Tiền mặt” trong bảng dữ liệu, sau đó dùng gsub() để loại bỏ dấu phẩy trong giá trị và as.numeric() để chuyển chúng về dạng số, giúp có thể so sánh chính xác. Cuối cùng, điều kiện which(vals > 3000) được áp dụng để lọc ra các năm có giá trị tiền mặt và vàng vượt 3.000 triệu đồng.
Ý nghĩa thống kê:Kết quả lọc cho thấy toàn bộ các năm từ 2014 đến 2023 đều có lượng tiền mặt và vàng vượt ngưỡng 3.000 triệu đồng, phản ánh Techcombank luôn duy trì mức thanh khoản cao và ổn định. Điều này cho thấy ngân hàng có khả năng đáp ứng tốt các nghĩa vụ chi trả, đảm bảo an toàn tài chính và dự phòng rủi ro ngắn hạn hiệu quả trong suốt giai đoạn nghiên cứu.
# Tiền gửi tại NHNN > 5000
idx <- which(grepl("NHNN", tieuluan[[1]], ignore.case = TRUE))[1]
vals <- as.numeric(gsub(",", "", unlist(tieuluan[idx, 2:ncol(tieuluan)])))
sel <- which(vals > 5000)
tieuluan[idx, c(1, sel + 1), drop = FALSE]
## # A tibble: 1 × 11
## Bảng Cân Đối Kế Toán…¹ `2014` `2015` `2016` `2017` `2018` `2019` `2020` `2021`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 "Tiền gửi tại NHNN (\… 1.17e6 1.60e6 2.53e6 4.32e6 1.06e7 3.19e6 1.03e7 4.91e6
## # ℹ abbreviated name: ¹`Bảng Cân Đối Kế Toán\r\n(Đơn vị: Triệu đồng)`
## # ℹ 2 more variables: `2022` <dbl>, `2023` <dbl>
Ý nghĩa kỹ thuật: Đoạn lệnh sử dụng hàm grepl() để xác định dòng đầu tiên chứa “NHNN” trong cột danh mục. Sau đó, hàm gsub() được dùng để loại bỏ dấu phẩy giúp dữ liệu có thể chuyển đổi sang dạng số bằng as.numeric(). Tiếp theo, điều kiện which(vals > 5000) được áp dụng để chọn ra những năm có giá trị tiền gửi tại Ngân hàng Nhà nước lớn hơn 5.000 triệu đồng. Cuối cùng, tieuluan[idx, c(1, sel + 1)] hiển thị dòng chỉ tiêu cùng các năm thỏa mãn điều kiện lọc.
Ý nghĩa thống kê: Kết quả lọc cho thấy những năm Techcombank có lượng tiền gửi tại Ngân hàng Nhà nước vượt 5.000 triệu đồng, phản ánh khả năng duy trì dự trữ bắt buộc và đảm bảo thanh khoản cao trong hoạt động. Về mặt thống kê, điều này thể hiện năng lực quản lý vốn ổn định, giúp ngân hàng đáp ứng tốt các yêu cầu về an toàn tài chính và điều tiết vốn theo quy định của Ngân hàng Nhà nước Việt Nam.
taisan <- unlist(tieuluan[grep("TỔNG TÀI SẢN", tieuluan[[1]]), 2:11])
# Thay các ký tự bất thường bằng NA
taisan <- gsub(",", "", taisan)
taisan <- gsub(" ", "", taisan)
taisan <- gsub("-", NA, taisan, fixed = TRUE)
taisan <- gsub("–", NA, taisan, fixed = TRUE)
taisan <- gsub("—", NA, taisan, fixed = TRUE)
# Chuyển sang số
taisan <- suppressWarnings(as.numeric(taisan))
# Kiểm tra giá trị thực sự còn lại
taisan
## [1] 175901794 192009075 235363736 269392380 320988941 383699461 439602933
## [8] 568728950 699032544 849482012
mean(taisan, na.rm = TRUE)
## [1] 413420183
ý nghĩa kỹ thuật: Đoạn mã trên sử dụng hàm grep(“TỔNG TÀI SẢN”, tieuluan[[1]]) để xác định dòng có chứa chỉ tiêu “TỔNG TÀI SẢN” trong cột danh mục. Sau đó, các hàm gsub() được dùng liên tiếp để loại bỏ dấu phẩy, dấu cách và các ký tự đặc biệt như “–” hoặc “—” nhằm làm sạch dữ liệu. Tiếp đến, as.numeric() chuyển toàn bộ giá trị sang dạng số, cho phép R thực hiện phép tính toán học. Cuối cùng, hàm mean(taisan, na.rm = TRUE) được dùng để tính giá trị trung bình của tổng tài sản qua các năm, trong đó tùy chọn na.rm = TRUE giúp loại bỏ các giá trị thiếu (NA) khi tính toán.
Ý nghĩa thống kê: Kết quả trung bình tổng tài sản của Techcombank trong giai đoạn 2014–2023 đạt khoảng 413,420,183 triệu đồng, tương đương 413,420 tỷ đồng. Điều này phản ánh quy mô tài sản bình quân lớn và tăng trưởng ổn định của ngân hàng trong suốt giai đoạn 10 năm.
median_taisan <- median(taisan, na.rm = TRUE)
median_taisan
## [1] 352344201
Ý nghĩa kỹ thuật:Hàm median() tính giá trị trung vị – tức là giá trị nằm giữa khi sắp xếp dãy dữ liệu theo thứ tự tăng dần.Tham số na.rm = TRUE giúp bỏ qua các giá trị NA.
Ý nghĩa thống kê: Trung vị của tổng tài sản phản ánh quy mô tài sản “điển hình” của Techcombank trong giai đoạn 2014–2023, giúp giảm ảnh hưởng của các giá trị cực lớn ở những năm tăng trưởng mạnh.
min_taisan <- min(taisan, na.rm = TRUE)
min_taisan
## [1] 175901794
Ý nghĩa kỹ thuật: Hàm min() trả về giá trị nhỏ nhất trong dãy số.
Ý nghĩa thống kê: Giá trị nhỏ nhất thể hiện quy mô tài sản thấp nhất mà Techcombank từng ghi nhận trong giai đoạn 10 năm, cho thấy mốc khởi đầu trong quá trình tăng trưởng.
max_taisan <- max(taisan, na.rm = TRUE)
max_taisan
## [1] 849482012
Ý nghĩa kỹ thuật: Hàm max() trả về giá trị lớn nhất trong chuỗi dữ liệu.
Ý nghĩa thống kê: Giá trị này biểu thị năm Techcombank đạt quy mô tài sản cao nhất, phản ánh mức độ mở rộng tối đa của ngân hàng.
range_taisan <- range(taisan, na.rm = TRUE)
range_taisan
## [1] 175901794 849482012
Ý nghĩa kỹ thuật: Hàm range() trả về hai giá trị – nhỏ nhất và lớn nhất – giúp xác định độ rộng của tập dữ liệu.
Ý nghĩa thống kê: Khoảng biến thiên thể hiện mức độ chênh lệch tài sản giữa năm có giá trị cao nhất và thấp nhất, phản ánh độ dao động trong quy mô tài sản.
var_taisan <- var(taisan, na.rm = TRUE)
var_taisan
## [1] 51538168333279976
Ý nghĩa kỹ thuật: Hàm var() đo mức độ phân tán của các giá trị xung quanh trung bình.
Ý nghĩa thống kê: Phương sai cao cho thấy sự dao động lớn giữa các năm, chứng tỏ tổng tài sản có biến động mạnh qua thời gian.
sd_taisan <- sd(taisan, na.rm = TRUE)
sd_taisan
## [1] 227020194
Ý nghĩa kỹ thuật: Hàm sd() tính căn bậc hai của phương sai – thể hiện mức độ biến động trung bình của các quan sát so với giá trị trung bình.
Ý nghĩa thống kê: Độ lệch chuẩn càng cao thì mức độ biến động tổng tài sản giữa các năm càng lớn, thể hiện sự thay đổi mạnh trong quy mô hoạt động.
#Lấy lại dữ liệu tổng tài sản, làm sạch hoàn toàn ---
dong_ts <- grep("TỔNG TÀI SẢN", tieuluan[[1]], ignore.case = TRUE)
taisan <- unlist(tieuluan[dong_ts, 2:11])
#Làm sạch ký tự đặc biệt
taisan <- gsub(",", "", taisan)
taisan <- gsub(" ", "", taisan)
taisan <- gsub("-", NA, taisan, fixed = TRUE)
taisan <- gsub("–", NA, taisan, fixed = TRUE)
taisan <- gsub("—", NA, taisan, fixed = TRUE)
# Chuyển sang dạng số
taisan <- suppressWarnings(as.numeric(taisan))
# Bỏ NA, đảm bảo numeric thật
taisan <- taisan[!is.na(taisan) & taisan != 0]
# --- Tính trung bình và độ lệch chuẩn ---
mean_taisan <- mean(taisan, na.rm = TRUE)
sd_taisan <- sd(taisan, na.rm = TRUE)
# --- Tính hệ số biến thiên (CV) ---
cv_taisan <- (sd_taisan / mean_taisan) * 100
cv_taisan
## [1] 54.9127
Ý nghĩa kỹ thuật: Hệ số biến thiên dùng để đo mức độ biến động tương đối.
Ý nghĩa thống kê: Giúp đánh giá rủi ro biến động tài sản so với quy mô trung bình; CV thấp chứng tỏ Techcombank duy trì sự ổn định tài chính tốt.
sum_taisan <- sum(taisan, na.rm = TRUE)
sum_taisan
## [1] 4134201826
Ý nghĩa kỹ thuật: Hàm sum() tính tổng các giá trị hợp lệ trong chuỗi dữ liệu.
Ý nghĩa thống kê: Tổng giá trị tài sản gộp trong giai đoạn 2014–2023 thể hiện quy mô tích lũy của ngân hàng qua 10 năm.
growth_rate <- (tail(taisan, 1) / head(taisan, 1))^(1/(length(taisan)-1)) - 1
growth_rate * 100
## [1] 19.12066
Ý nghĩa kỹ thuật: Công thức tính tăng trưởng kép (CAGR), đo tốc độ tăng trung bình hàng năm của tổng tài sản.
Ý nghĩa thống kê: Giúp đánh giá tốc độ mở rộng tài sản của Techcombank, phản ánh khả năng phát triển quy mô dài hạn.
diff_mean <- mean(diff(taisan), na.rm = TRUE)
diff_mean
## [1] 74842246
Ý nghĩa kỹ thuật: diff() tính chênh lệch giữa các năm liên tiếp, mean() tính trung bình của các chênh lệch đó.
Ý nghĩa thống kê: Cho biết mỗi năm tổng tài sản của Techcombank tăng thêm bao nhiêu triệu đồng trung bình.
library(e1071)
## Warning: package 'e1071' was built under R version 4.4.3
skew_taisan <- skewness(taisan, na.rm = TRUE)
skew_taisan
## [1] 0.6519315
Ý nghĩa kỹ thuật: skewness() đo mức độ lệch của phân phối dữ liệu so với trung bình.
Ý nghĩa thống kê: Nếu Skewness > 0: dữ liệu lệch phải (có xu hướng tăng nhanh). Nếu Skewness < 0: dữ liệu lệch trái (giảm dần).
library(e1071)
# Độ nhọn (Kurtosis)
kurt_taisan <- kurtosis(taisan, na.rm = TRUE)
kurt_taisan
## [1] -1.099197
Ý nghĩa kỹ thuật: Hàm và kurtosis() nằm trong gói e1071, được dùng để đo đặc điểm phân phối của dữ liệu. Na.rm = TRUE để loại bỏ giá trị thiếu. Ý nghĩa thống kê: Nếu Kurtosis > 3 → Phân phối nhọn hơn chuẩn (dao động mạnh). Nếu Kurtosis < 3 → Phân phối phẳng hơn chuẩn (ổn định).
growth_rate <- diff(taisan) / head(taisan, -1) * 100
growth_rate
## [1] 9.156974 22.579485 14.457896 19.152940 19.536661 14.569599 29.373329
## [8] 22.911370 21.522527
Ý nghĩa kỹ thuật: Hàm diff() lấy hiệu giữa giá trị năm sau và năm trước, chia cho giá trị năm trước rồi nhân 100 để ra phần trăm tăng/giảm.
Ý nghĩa thống kê: Giúp xác định tốc độ tăng trưởng hàng năm của tổng tài sản. Các năm có giá trị dương thể hiện tăng trưởng, âm thể hiện sụt giảm quy mô tài sản.
mean_growth_rate <- mean(growth_rate, na.rm = TRUE)
mean_growth_rate
## [1] 19.2512
Ý nghĩa kỹ thuật: Hàm mean() tính trung bình của các giá trị phần trăm tăng trưởng theo từng năm.
Ý nghĩa thống kê: Tốc độ tăng trưởng trung bình cho thấy mức mở rộng quy mô tài sản hằng năm của Techcombank trong giai đoạn 2014–2023.
var_growth <- var(growth_rate, na.rm = TRUE)
var_growth
## [1] 34.87106
Ý nghĩa kỹ thuật: var() đo độ phân tán của tốc độ tăng trưởng giữa các năm.
Ý nghĩa thống kê: Nếu phương sai thấp tốc độ tăng trưởng ổn định; nếu cao tăng trưởng biến động, phản ánh sự thay đổi chính sách hoặc thị trường.
#Tỷ trọng tổng tài sản từng năm so với toàn giai đoạn
tytrong_taisan <- (taisan / sum(taisan, na.rm = TRUE)) * 100
tytrong_taisan
## [1] 4.254795 4.644405 5.693088 6.516188 7.764230 9.281101 10.633321
## [8] 13.756681 16.908525 20.547667
Ý nghĩa kỹ thuật: Sử dụng phép chia giữa giá trị từng năm và tổng toàn bộ chuỗi, nhân 100 để biểu diễn phần trăm.
Ý nghĩa thống kê: Cho biết mức đóng góp của từng năm vào tổng quy mô tài sản 10 năm. Tỷ trọng cao thể hiện giai đoạn ngân hàng nắm giữ nhiều tài sản, phản ánh thời kỳ mở rộng mạnh.
cor_growth_asset <- cor(growth_rate, tail(taisan, -1))
cor_growth_asset
## [1] 0.550027
Ý nghĩa kỹ thuật: Hàm cor() tính hệ số tương quan Pearson giữa hai chuỗi: tốc độ tăng trưởng (growth_rate) và giá trị tổng tài sản (trừ năm đầu vì không có tăng trưởng).
Ý nghĩa thống kê: Nếu hệ số tương quan > 0, tốc độ tăng trưởng cao đi cùng quy mô tài sản lớn nghĩa là Techcombank phát triển đều và mở rộng bền vững. Nếu < 0, quy mô càng lớn thì tăng trưởng càng chậm – cho thấy dấu hiệu bão hòa.
year_highest_growth <- 2014 + which.max(growth_rate)
year_lowest_growth <- 2014 + which.min(growth_rate)
year_highest_growth
## [1] 2021
year_lowest_growth
## [1] 2015
Ý nghĩa kỹ thuật: Dùng which.max() và which.min() để xác định vị trí có giá trị tăng trưởng cao nhất/thấp nhất, cộng thêm 2014 để ra đúng năm.
Ý nghĩa thống kê: Hai năm này phản ánh đỉnh và đáy tăng trưởng tài sản – năm cao nhất thể hiện giai đoạn bứt phá mạnh nhất của Techcombank, còn năm thấp nhất thể hiện giai đoạn chững lại hoặc điều chỉnh quy mô.
mad_taisan <- mean(abs(taisan - mean(taisan, na.rm = TRUE)), na.rm = TRUE)
mad_taisan
## [1] 180633142
Ý nghĩa kỹ thuật: abs() lấy giá trị tuyệt đối của độ lệch giữa từng quan sát và trung bình; mean() tính giá trị trung bình của các độ lệch tuyệt đối.
Ý nghĩa thống kê: MAD đo mức độ dao động trung bình của tổng tài sản quanh giá trị trung bình, đơn giản hơn độ lệch chuẩn nhưng vẫn thể hiện độ ổn định tài chính của ngân hàng. Giá trị MAD càng nhỏ tổng tài sản càng ổn định qua các năm.
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
df_taisan <- data.frame(
Nam = 2014:2023,
TongTaiSan = taisan
)
ggplot(df_taisan, aes(x = Nam, y = TongTaiSan)) +
geom_line(color = "blue") +
geom_point(size = 3, color = "red") +
geom_text(aes(label = round(TongTaiSan/1000, 1)), vjust = -1) +
geom_hline(yintercept = mean(taisan), color = "darkgreen", linetype = "dashed") +
theme_minimal()
Ý nghĩa kỹ thuật: Dùng geom_line() để vẽ đường xu hướng, geom_point() đánh dấu từng năm, geom_text() thêm nhãn số liệu, geom_hline() biểu diễn trung bình, và theme_minimal() tạo nền rõ ràng.
Ý nghĩa thống kê: Biểu đồ thể hiện xu hướng tăng mạnh của tổng tài sản Techcombank trong 10 năm, chứng tỏ ngân hàng mở rộng quy mô hoạt động ổn định và bền vững.
ggplot(df_taisan, aes(x = factor(Nam), y = TongTaiSan)) +
geom_col(fill = "skyblue") +
geom_text(aes(label = round(TongTaiSan/1000, 1)), vjust = -0.5) +
geom_hline(yintercept = mean(taisan), color = "red", linetype = "dashed") +
labs(x = "Năm", y = "Tổng tài sản") +
theme_classic()
Ý nghĩa kỹ thuật: geom_col() vẽ các cột biểu diễn tổng tài sản từng năm, geom_text() hiển thị nhãn, geom_hline() thêm đường trung bình để so sánh.
Ý nghĩa thống kê: Biểu đồ giúp so sánh quy mô tài sản qua từng năm, nhận diện rõ năm nào có tổng tài sản vượt trung bình và năm nào thấp hơn.
ggplot(df_taisan, aes(x = Nam, y = TongTaiSan)) +
geom_area(fill = "lightgreen", alpha = 0.6) +
geom_line(color = "darkgreen") +
geom_point(color = "black") +
geom_vline(xintercept = 2018, color = "gray", linetype = "dotted") +
theme_minimal()
Ý nghĩa kỹ thuật: geom_area() tạo phần tô nền cho vùng dữ liệu, giúp trực quan hóa phần tích lũy. Thêm geom_line(), geom_point(), geom_vline() và theme_minimal() để tạo 5 lớp hoàn chỉnh.
Ý nghĩa thống kê: Phần diện tích thể hiện quy mô tài sản tích lũy qua từng năm — diện tích càng lớn chứng tỏ tăng trưởng tài sản càng nhanh.
ggplot(df_taisan, aes(x = TongTaiSan)) +
geom_histogram(bins = 6, fill = "purple", color = "white") +
geom_vline(xintercept = mean(taisan), color = "red", linetype = "dashed") +
geom_vline(xintercept = median(taisan), color = "blue", linetype = "dotted") +
labs(x = "Tổng tài sản", y = "Tần suất") +
theme_bw()
Ý nghĩa kỹ thuật: geom_histogram() chia nhỏ dữ liệu thành các khoảng để hiển thị tần suất; thêm đường trung bình và trung vị giúp nhận diện đặc trưng phân bố.
Ý nghĩa thống kê: Cho thấy phần lớn giá trị tổng tài sản tập trung ở các mức cao — dữ liệu lệch phải, phản ánh xu hướng mở rộng nhanh của ngân hàng.
ggplot(df_taisan, aes(x = "", y = TongTaiSan)) +
geom_boxplot(fill = "orange", outlier.color = "red") +
geom_jitter(width = 0.1, color = "blue") +
labs(y = "Tổng tài sản (triệu đồng)") +
theme_light()
Ý nghĩa kỹ thuật: Kết hợp geom_boxplot() và geom_jitter() để thấy rõ giá trị ngoại lai, đường trung vị, phần tư và biến động dữ liệu.
Ý nghĩa thống kê: Biểu đồ hộp giúp phát hiện năm có tổng tài sản vượt trội hoặc thấp bất thường — phản ánh độ ổn định trong cấu trúc tài chính.
mean_val <- mean(taisan)
sd_val <- sd(taisan)
ggplot(df_taisan, aes(x = Nam, y = TongTaiSan)) +
geom_line(color = "blue") +
geom_point(color = "red") +
geom_hline(yintercept = mean_val, color = "green", linetype = "dashed") +
geom_hline(yintercept = mean_val + sd_val, color = "orange", linetype = "dotted") +
geom_hline(yintercept = mean_val - sd_val, color = "orange", linetype = "dotted") +
theme_minimal()
Ý nghĩa kỹ thuật: Thêm ba đường ngang thể hiện giá trị trung bình và hai ngưỡng ± độ lệch chuẩn, giúp so sánh biến động quanh trung tâm dữ liệu.
Ý nghĩa thống kê: Dễ dàng nhận thấy năm nào tổng tài sản nằm trong khoảng ổn định (±1 SD) và năm nào vượt quá — phản ánh mức biến động tài sản.
growth_rate <- diff(taisan) / head(taisan, -1) * 100
df_growth <- data.frame(Nam = 2015:2023, TangTruong = growth_rate)
ggplot(df_growth, aes(x = factor(Nam), y = TangTruong)) +
geom_col(fill = "lightblue") +
geom_text(aes(label = round(TangTruong, 1)), vjust = -0.5) +
geom_hline(yintercept = mean(growth_rate), color = "red", linetype = "dashed") +
labs(y = "Tốc độ tăng trưởng (%)") +
theme_classic()
Ý nghĩa kỹ thuật: Sử dụng diff() để tính phần trăm tăng trưởng giữa hai năm, geom_col() hiển thị trực quan, geom_hline() thể hiện mức trung bình.
Ý nghĩa thống kê: Giúp so sánh tốc độ tăng trưởng qua từng năm; năm nào cột cao hơn đường trung bình thể hiện tốc độ tăng nhanh hơn bình quân.
ggplot(df_taisan, aes(x = Nam, y = TongTaiSan)) +
geom_point(color = "darkred", size = 3) +
geom_smooth(method = "lm", se = FALSE, color = "black") +
geom_text(aes(label = Nam), vjust = -0.5) +
labs(x = "Năm", y = "Tổng tài sản") +
theme_light()
## `geom_smooth()` using formula = 'y ~ x'
Ý nghĩa kỹ thuật: Kết hợp geom_point() với geom_smooth(method=“lm”) để thêm đường hồi quy tuyến tính biểu diễn mối quan hệ tuyến tính giữa năm và tài sản.
Ý nghĩa thống kê: Đường hồi quy có hệ số dốc dương chứng tỏ mối quan hệ tỷ lệ thuận: năm càng lớn thì tổng tài sản càng tăng.
ggplot(df_taisan, aes(x = TongTaiSan, y = factor(Nam))) +
geom_bar(stat = "identity", fill = "pink") +
geom_text(aes(label = round(TongTaiSan/1000, 1)), hjust = -0.2) +
labs(x = "Tổng tài sản", y = "Năm") +
theme_minimal()
Ý nghĩa kỹ thuật: Dùng geom_bar(stat=“identity”) để vẽ cột ngang, dễ so sánh trực quan giữa các năm.
Ý nghĩa thống kê: Cho phép nhìn rõ mức độ tăng dần qua năm chiều dài cột thể hiện quy mô tài sản từng giai đoạn.
ggplot(df_taisan, aes(x = Nam, y = TongTaiSan)) +
geom_point(size = 3, color = "blue") +
geom_line(color = "gray") +
geom_text(aes(label = round(TongTaiSan/1000, 1)), vjust = -0.8, color = "black") +
geom_hline(yintercept = mean(taisan), color = "red", linetype = "dashed") +
theme_bw()
Ý nghĩa kỹ thuật: Kết hợp điểm, đường nối, nhãn và đường trung bình để thể hiện giá trị rõ ràng.
Ý nghĩa thống kê: Biểu đồ này tổng hợp trực quan xu hướng tăng đều của tổng tài sản qua từng năm.
df_taisan$TyTrong <- (df_taisan$TongTaiSan / sum(df_taisan$TongTaiSan)) * 100
ggplot(df_taisan, aes(x = factor(Nam), y = TyTrong)) +
geom_col(fill = "lightblue") +
geom_text(aes(label = paste0(round(TyTrong, 1), "%")), vjust = -0.5) +
geom_hline(yintercept = mean(df_taisan$TyTrong), color = "red", linetype = "dashed") +
labs(title = "Tỷ trọng (%) Tổng tài sản Techcombank từng năm",
x = "Năm", y = "Tỷ trọng (%)") +
theme_minimal() +
theme(plot.title = element_text(face = "bold"))
Ý nghĩa kỹ thuật: Biểu đồ sử dụng geom_col() để thể hiện tỷ trọng từng năm so với tổng 10 năm, geom_text() để hiển thị nhãn phần trăm, geom_hline() để thêm đường trung bình, và theme_minimal() giúp biểu đồ rõ ràng, dễ nhìn.
Ý nghĩa thống kê: Cho biết năm nào đóng góp nhiều nhất vào quy mô tài sản chung. Nếu tỷ trọng tăng dần qua các năm, điều đó phản ánh Techcombank không chỉ tăng quy mô tuyệt đối mà còn mở rộng ảnh hưởng tương đối trong giai đoạn nghiên cứu.
df_taisan$TichLuy <- cumsum(df_taisan$TongTaiSan)
ggplot(df_taisan, aes(x = Nam, y = TichLuy)) +
geom_line(color = "darkgreen", linewidth = 1.2) +
geom_point(color = "orange", size = 3) +
geom_text(aes(label = round(TichLuy/1000, 1)), vjust = -0.7, color = "black") +
geom_hline(yintercept = mean(df_taisan$TichLuy), color = "red", linetype = "dashed") +
theme_light() +
labs(title = "Tăng trưởng tích lũy Tổng tài sản Techcombank (2014–2023)",
x = "Năm", y = "Tích lũy (triệu đồng)")
Ý nghĩa kỹ thuật: cumsum() cộng dồn các giá trị tổng tài sản, sau đó biểu diễn bằng geom_line() và geom_point(). Thêm nhãn (geom_text) và đường trung bình (geom_hline) để tăng tính trực quan.
Ý nghĩa thống kê: Đường dốc thể hiện tốc độ tăng trưởng tích lũy tài sản. Biểu đồ minh họa rõ ràng mức độ tích lũy qua các năm, phản ánh chiến lược mở rộng và khả năng sinh lời ổn định của Techcombank.
mean_val <- mean(df_taisan$TongTaiSan)
ggplot(df_taisan, aes(x = factor(Nam), y = TongTaiSan, fill = TongTaiSan > mean_val)) +
geom_col() +
geom_hline(yintercept = mean_val, color = "red", linetype = "dashed") +
geom_text(aes(label = round(TongTaiSan/1000, 1)), vjust = -0.5) +
labs(title = "So sánh Tổng tài sản Techcombank với mức trung bình 10 năm",
x = "Năm", y = "Tổng tài sản (triệu đồng)") +
scale_fill_manual(values = c("TRUE" = "skyblue", "FALSE" = "lightgray")) +
theme_minimal()
Ý nghĩa kỹ thuật: geom_col() tạo cột, scale_fill_manual() tô màu khác nhau tùy theo điều kiện (> mean_val), và geom_hline() thêm đường trung bình — tạo 5 layer cơ bản trong một biểu đồ.
Ý nghĩa thống kê: Thể hiện năm nào tổng tài sản vượt mức trung bình và năm nào thấp hơn. Nếu nhiều cột nằm trên đường trung bình, chứng tỏ ngân hàng duy trì quy mô tài sản vượt trội trong phần lớn thời gian.
df_growth <- data.frame(Nam = 2015:2023, TangTruong = growth_rate)
ggplot(df_growth, aes(x = Nam, y = TangTruong)) +
geom_line(color = "blue") +
geom_point(color = "red", size = 3) +
geom_hline(yintercept = 0, color = "black") +
geom_text(aes(label = round(TangTruong, 1)), vjust = -0.8) +
theme_classic() +
labs(title = "Tốc độ tăng trưởng (%) Tổng tài sản Techcombank theo năm",
x = "Năm", y = "Tăng trưởng (%)")
Ý nghĩa kỹ thuật: Dùng geom_line() để nối chuỗi tốc độ tăng trưởng qua năm, geom_point() để đánh dấu giá trị, geom_text() hiển thị nhãn, và geom_hline(y=0) để phân biệt năm tăng/giảm.
Ý nghĩa thống kê: Biểu đồ cho thấy sự thay đổi tốc độ tăng trưởng hàng năm của Techcombank. Các điểm nằm trên trục 0 thể hiện năm có tăng trưởng dương, trong khi điểm dưới thể hiện giảm tốc giúp đánh giá sự ổn định của quá trình mở rộng tài sản.
ggplot(df_growth, aes(x = factor(Nam), y = TangTruong, fill = TangTruong > 0)) +
geom_col() +
geom_text(aes(label = round(TangTruong, 1)), vjust = -0.5) +
geom_hline(yintercept = 0, color = "black") +
labs(title = "Phân loại Tăng trưởng dương và âm của Tổng tài sản Techcombank",
x = "Năm", y = "Tăng trưởng (%)") +
scale_fill_manual(values = c("TRUE" = "lightgreen", "FALSE" = "pink")) +
theme_minimal()
Ý nghĩa kỹ thuật: geom_col() thể hiện giá trị tăng/giảm qua cột, scale_fill_manual() đổi màu xanh cho tăng và hồng cho giảm, geom_hline(y=0) giúp tách biệt 2 nhóm.
Ý nghĩa thống kê: Dễ dàng nhận ra năm nào Techcombank tăng trưởng dương và năm nào có dấu hiệu chững lại hoặc sụt giảm. Đây là biểu đồ trực quan nhất để đánh giá sự ổn định và khả năng duy trì tăng trưởng qua thời gian.
mean_val <- mean(df_taisan$TongTaiSan)
median_val <- median(df_taisan$TongTaiSan)
ggplot(df_taisan, aes(x = Nam, y = TongTaiSan)) +
geom_line(color = "blue", linewidth = 1.2) + # Layer 1
geom_point(color = "red", size = 3) + # Layer 2
geom_hline(yintercept = mean_val, color = "darkgreen", linetype = "dashed") + # Layer 3
geom_hline(yintercept = median_val, color = "orange", linetype = "dotted") + # Layer 4
geom_text(aes(x = 2016, y = mean_val, label = "Trung bình"), color = "darkgreen", vjust = -1) + # Layer 5
labs(title = "So sánh Trung bình và Trung vị Tổng tài sản Techcombank",
x = "Năm", y = "Tổng tài sản (triệu đồng)") +
theme_minimal()
## Warning in geom_text(aes(x = 2016, y = mean_val, label = "Trung bình"), : All aesthetics have length 1, but the data has 10 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
Ý nghĩa kỹ thuật: Dùng geom_hline() để thêm hai đường trung bình và trung vị, geom_line() thể hiện xu hướng, và geom_text() để ghi chú trực tiếp trên đồ thị.
Ý nghĩa thống kê: Khi trung bình cao hơn trung vị, chứng tỏ phân phối lệch phải tức là tổng tài sản tăng mạnh ở các năm cuối, phản ánh giai đoạn tăng trưởng vượt trội.
ggplot(df_growth, aes(x = TangTruong, y = df_taisan$TongTaiSan[-1])) +
geom_point(color = "blue", size = 3) + # Layer 1
geom_smooth(method = "lm", color = "red", se = FALSE) + # Layer 2
geom_text(aes(label = Nam), vjust = -0.5) + # Layer 3
geom_vline(xintercept = 0, color = "gray", linetype = "dashed") + # Layer 4
geom_hline(yintercept = mean(df_taisan$TongTaiSan), color = "green", linetype = "dotted") + # Layer 5
labs(title = "Mối quan hệ giữa Tổng tài sản và Tốc độ tăng trưởng (%)",
x = "Tăng trưởng (%)", y = "Tổng tài sản (triệu đồng)") +
theme_light()
## `geom_smooth()` using formula = 'y ~ x'
Ý nghĩa kỹ thuật: geom_smooth(method=“lm”) tạo đường hồi quy tuyến tính, giúp xác định mối quan hệ giữa hai biến; thêm geom_vline và geom_hline để biểu thị trung tâm dữ liệu.
Ý nghĩa thống kê: Biểu đồ cho thấy tổng tài sản tăng mạnh đi kèm với tốc độ tăng trưởng cao, phản ánh tính đồng biến giữa quy mô tài sản và hiệu quả mở rộng hoạt động.
df_taisan$PhanTram <- c(NA, round(diff(df_taisan$TongTaiSan) / head(df_taisan$TongTaiSan, -1) * 100, 2))
ggplot(df_taisan[-1, ], aes(x = factor(Nam), y = PhanTram)) +
geom_col(fill = "lightcoral") + # Layer 1
geom_text(aes(label = paste0(PhanTram, "%")), vjust = -0.5) + # Layer 2
geom_hline(yintercept = 0, color = "black") + # Layer 3
geom_hline(yintercept = mean(df_taisan$PhanTram, na.rm = TRUE),
color = "blue", linetype = "dashed") + # Layer 4
theme_minimal() + # Layer 5
labs(title = "Biến động (%) Tổng tài sản Techcombank theo từng năm",
x = "Năm", y = "Biến động (%)")
Ý nghĩa kỹ thuật: diff() tính phần trăm biến động, geom_col() biểu diễn mức thay đổi từng năm, và geom_hline() giúp xác định trung bình biến động.
Ý nghĩa thống kê: Cho thấy mức độ ổn định của tốc độ thay đổi tài sản qua từng năm. Nếu giá trị dương đều Techcombank duy trì tăng trưởng liên tục, còn nếu có giá trị âm xuất hiện giai đoạn điều chỉnh quy mô.
ggplot(df_growth, aes(x = "", y = TangTruong)) +
geom_boxplot(fill = "lightyellow", outlier.color = "red") + # Layer 1
geom_jitter(width = 0.1, color = "blue", size = 2) + # Layer 2
geom_hline(yintercept = mean(df_growth$TangTruong), color = "green", linetype = "dashed") + # Layer 3
geom_hline(yintercept = 0, color = "black") + # Layer 4
labs(title = "Phân bố và biến động Tốc độ tăng trưởng (%) Tổng tài sản",
y = "Tốc độ tăng trưởng (%)") + # Layer 5
theme_classic()
Ý nghĩa kỹ thuật: geom_boxplot() biểu diễn độ phân tán, geom_jitter() thêm điểm cụ thể, geom_hline() biểu diễn mức trung bình — giúp nhìn rõ xu hướng và biến động.
Ý nghĩa thống kê: Thể hiện độ biến thiên của tốc độ tăng trưởng; khoảng hộp càng nhỏ chứng tỏ mức tăng trưởng ổn định, còn hộp dài hoặc có ngoại lai thể hiện biến động mạnh theo thời gian.
ggplot() +
geom_line(data = df_taisan, aes(x = Nam, y = TongTaiSan, color = "Tổng tài sản"), linewidth = 1.2) + # Layer 1
geom_line(data = df_taisan, aes(x = Nam, y = TichLuy, color = "Tích lũy"), linewidth = 1.2, linetype = "dashed") + # Layer 2
geom_point(data = df_taisan, aes(x = Nam, y = TongTaiSan), color = "red", size = 3) + # Layer 3
geom_point(data = df_taisan, aes(x = Nam, y = TichLuy), color = "blue", size = 3) + # Layer 4
labs(title = "So sánh xu hướng Tổng tài sản và Tổng tích lũy Techcombank (2014–2023)",
x = "Năm", y = "Giá trị (triệu đồng)", color = "Biến") + # Layer 5
theme_minimal()
Ý nghĩa kỹ thuật: Biểu đồ kết hợp hai đường (geom_line) trong cùng hệ tọa độ, thể hiện đồng thời biến Tổng tài sản và biến Tích lũy, với màu và kiểu đường khác nhau.
Ý nghĩa thống kê: Giúp so sánh trực tiếp giữa giá trị tài sản hằng năm và tổng tích lũy qua thời gian. Khoảng cách hai đường càng lớn thể hiện tốc độ tích lũy tăng nhanh, chứng tỏ ngân hàng có khả năng tái đầu tư hiệu quả.