LỜI CẢM ƠN

Em xin bày tỏ lòng biết ơn đặc biệt đến ThS. Trần Mạnh Tường – người đã tận tình dìu dắt và truyền đạt kiến thức trong suốt thời gian qua. Nhờ sự hướng dẫn tâm huyết và những lời khuyên quý báu của Thầy, em đã có thể hoàn thành bài báo cáo tiểu luận này một cách trọn vẹn nhất. Vô cùng trân trọng những bài học quý giá mà Thầy đã dành cho, không chỉ về kiến thức chuyên môn mà còn về thái độ học tập và làm việc nghiêm túc, trách nhiệm.

Em nhận thức được rằng bài báo cáo này vẫn còn tồn tại một số hạn chế và thiếu sót. Xin chân thành mong nhận được những góp ý quý báu từ thầy để em có thể hoàn thiện bản thân và đạt được kết quả tốt hơn trong học tập và công việc sau này.

Cuối cùng, xin kính chúc quý thầy sức khỏe, dồi dào nhiệt huyết và thành công trong sự nghiệp trồng người. Em xin chân thành cảm ơn!

LỜI CAM KẾT

Em xin cam đoan số liệu và kết quả nghiên cứu trong bài tiểu luận này là trung thực và các thông tin trích dẫn trong báo cáo đã được chỉ rõ nguồn gốc rõ ràng và được phép công bố.

PHẦN I : GIỚI THIỆU VỀ BỘ DỮ LIỆU World-Stock-Prices

CHƯƠNG I.GIỚI THIỆU DỮ LIỆU

1.Giới thiệu tổng quan

Tên Bộ dữ liệu: “World-Stock-Prices”.

Nguồn bộ dữ liệu: https://www.kaggle.com/datasets/nelgiriyewithana/world-stock-prices-daily-updating.

Thông tin bộ dữ liệu: Đây là một bộ dữ liệu về thị trường chứng khoán, ghi lại thông tin giao dịch hàng ngày của một danh sách các cổ phiếu từ nhiều công ty nổi tiếng trên toàn cầu.

Phạm vi bộ dữ liệu từ 3/1/2000 – 3/7/2025: bao gồm các công ty từ nhiều quốc gia khác nhau (Country) như Mỹ (“usa”), Đức (“germany”), Nhật Bản (“japan”), Canada (“canada”), Thụy Sĩ (“switzerland”), Hà Lan (“netherlands”). Điều này cho thấy đây là một danh mục đầu tư toàn cầu. Đa dạng ngành nghề các công ty thuộc nhiều lĩnh vực kinh tế khác nhau (Industry_Ta). Công nghệ (technology):Apple, Google, Nvidia, Salesforce. Bán lẻ (retail): Target, Costco. Thương mại điện tử (e-commerce): Amazon, Shopify. Ô tô (automotive): Tesla, Honda. Tài chính (finance): American Express, Mastercard. Hàng không (aviation): Delta Air Lines, Southwest Airlines. Và nhiều ngành khác như thực phẩm, giải trí, gaming, hàng tiêu dùng.

1.1.Đọc dữ liệu

d <- read.csv("C:/Users/DELL/Downloads/NN_LT_THAY_TUONG/World-Stock-Prices-Dataset.csv")

1.2.Thông tin cơ bản về dữ liệu

1.2.1. Kích thước bộ dữ liệu

dim(d)
## [1] 310122     13

Giải thích: Kết quả cho ta thấy số quan sát là 310122 dòng và số biến là 13 cột trong bộ dữ liệu. VIệc này giúp kiểm tra quy mô bộ dữ liệu và xác định ngay có đủ dữ liệu để phân tích chuyên sauu không.

1.2.2.Tên các biến của bộ dữ liệu

names(d)
##  [1] "Date"          "Open"          "High"          "Low"          
##  [5] "Close"         "Volume"        "Brand_Name"    "Ticker"       
##  [9] "Industry_Tag"  "Country"       "Dividends"     "Stock.Splits" 
## [13] "Capital.Gains"

Giải thích: Hiển thị tên tất cả các biến, giúp người đọc biết ngay dữ liệu gồm những thông tin gì. Điều này rất quan trọng để chọn biến phù hợp cho từng phân tích.

1.2.3.Kiểm tra qua các dòng đầu tiên dữ liệu

 head(d, 2)

Giải Thích Kiểm tra dữ liệu (Data Sanity Check): Lệnh head() giúp nhà phân tích nhanh chóng xác nhận rằng dữ liệu đã được tải vào R một cách chính xác. Họ có thể thấy ngay tên các cột, kiểu dữ liệu và một vài giá trị mẫu.

Ý nghĩa Kỹ Thuật Hiểu cấu trúc dữ liệu: Nhìn vào 3 dòng đầu và 3 dòng cuối, ta có thể suy luận: - Bộ dữ liệu được sắp xếp theo thứ tự thời gian giảm dần (descending chronological order). Dữ liệu mới nhất (2025-07-03) nằm ở trên đầu (head), và dữ liệu cũ nhất (2000-01-03) nằm ở dưới cùng (tail). Đây là một phát hiện kỹ thuật cực kỳ quan trọng, ảnh hưởng đến mọi phân tích về chuỗi thời gian sau này. - Dữ liệu là dạng “bảng dài” (long format), trong đó mỗi hàng là một quan sát của một mã cổ phiếu tại một thời điểm. Phát hiện vấn đề tiềm ẩn: - Nhìn vào cột Capital.Gains, ta thấy giá trị NA (Not Available). Điều này cho thấy dữ liệu có thể bị thiếu ở cột này và cần được xử lý. - Ngày 2025-07-03 là một ngày trong tương lai. Điều này có thể là dữ liệu dự báo, dữ liệu giả lập, hoặc một lỗi nhập liệu. Người phân tích cần phải làm rõ điểm này.

Ý nghĩa Kinh tế:kiểm tra được tính toàn vẹn kỹ thuật của dữ liệu mà còn rút ra được những nhận định ban đầu rất quan trọng về mặt kinh tế: phạm vi thời gian, sự đa dạng của danh mục cổ phiếu và đặc điểm sơ bộ của từng mã.

1.2.4. Kiểm tra qua các dòng cuối dữ liệu

tail(d,5)

Giải thích: Lệnh tail(movies_dataset) dùng để xem 10 dòng cuối cùng của bộ dữ liệu. Mục đích là kiểm tra xem phần cuối của tệp có bị lỗi nhập liệu, giá trị trống hoặc dòng dư thừa do nhập tay không.

Nhận xét: Kết quả cho thấy bộ dữ liệu không có lỗi nhập liệu, không có dòng trống hoặc trùng lặp ở cuối file. Điều này chứng tỏ dữ liệu có cấu trúc ổn định, đảm bảo sẵn sàng cho bước xử lý và phân tích tiếp theo.

1.2.5. Số lượng biến định tính và địn lượng

sum(sapply(d, is.numeric))
## [1] 8

Giải thích: - sapply() áp dụng hàm is.numeric() cho tất cả các biến (cột) của bộ dữ liệu “d” => Hàm này sẽ trả về một vector chứa TRUE/FALSE, thể hiện các biến nào là kiểu số (numeric). - sum() tính tổng số TRUE (đếm biến kiểu số). Như vậy, kết quả là tổng số biến định lượng trong dataset.

sum(sapply(d, is.character) | sapply(d, is.factor))
## [1] 5

Giải thích: sapply() lần lượt kiểm tra từng biến xem có phải kiểu character hoặc factor không. Dùng phép OR | giữa hai kết quả để tổng hợp tất cả biến thuộc dạng phân loại sum() đếm tổng số biến dạng này.

Nhận xét: Với bộ dữ liệu có 310,122 hàng và 13 biến quan sát Và trong 13 biến có 5 biến có kiểu dữ liệu chuỗi ký tự “chr” - gồm các biến Date, Bran_Name, Ticker, Industry_Tag, Country. Và còn lại là 8 biến có kiểu dữ liệu là số “num” - gồm các biến Open, High, Low, Close, volume.

1.2.6.Kiểu dữ liệu của các biến trong bộ dữ liệu

loại <- data.frame(
Kiểu_dữ_liệu = sapply(d, class))
kable(loại, col.names = c("Tên biến" , "Kiểu dữ liệu"))
Tên biến Kiểu dữ liệu
Date character
Open numeric
High numeric
Low numeric
Close numeric
Volume numeric
Brand_Name character
Ticker character
Industry_Tag character
Country character
Dividends numeric
Stock.Splits numeric
Capital.Gains numeric

Giải thích: (1) Hàm data.frame() chuyển đổi kết quả này thành bảng, gồm hai cột: tên biến và kiểu dữ liệu của biến đó. (2) Hàm sapply() để áp dụng hàm class cho tất cả các cột của dữ liệu movies_dataset. Kết quả trả về là một vector gồm các kiểu dữ liệu như “numeric”, “character”, “factor”. (3)Hàm kable() giúp hiển thị bảng này dưới dạng đẹp, dễ đọc trong báo cáo hoặc tài liệu.

Nhận xét:Kết quả cho thấy dữ liệu có sự đa dạng về kiểu biến, phù hợp cho các phân tích đa dạng như mô tả, so sánh, hay xây dựng mô hình dự báo. Biết rõ kiểu dữ liệu giúp nhóm dễ dàng xử lý, mã hóa, chuyển đổi hoặc trực quan hóa phù hợp từng loại biến, nâng cao độ chính xác và chuyên nghiệp của báo cáo

1.2.7.Tên các lại chứng khoán có trong biến Ticker

unique(d$Ticker)
##  [1] "PTON"  "CROX"  "ADDYY" "AMZN"  "AAPL"  "NKE"   "TGT"   "GOOGL" "SPOT" 
## [10] "ZM"    "DIS"   "RBLX"  "DAL"   "COST"  "LUV"   "AEO"   "TSLA"  "SBUX" 
## [19] "NVDA"  "CRM"   "HMC"   "CL"    "HSY"   "CMG"   "PINS"  "LOGI"  "SHOP" 
## [28] "AMD"   "AXP"   "COIN"  "MA"    "MCD"   "ADBE"  "UL"    "CSCO"  "JPM"  
## [37] "ABNB"  "MAR"   "TM"    "HLT"   "HD"    "JNJ"   "UBER"  "PG"    "FDX"  
## [46] "MMM"   "PHG"   "FL"    "KO"    "MSFT"  "V"     "LVMUY" "ZI"    "UBSFY"
## [55] "NFLX"  "PMMAF" "NTDOY" "BAMXF" "POAHY" "TWTR"  "JWN"   "SQ"

Giải thích: Hàm unique() liệt kê tất cả các giá trị khác nhau (không lặp lại) xuất hiện trong biến Ticker.

Nhận xét:Điều này giúp xác định bộ dữ liệu gồm những thể loại phim nào, rất hữu ích khi phân tích đa dạng thể loại hoặc chuẩn bị cho việc vẽ biểu đồ/nhóm dữ liệu theo thể loại.

1.2.8.Điếm tuần suất giá trị của Biến Ticker

length(unique(d$Ticker))
## [1] 62

Giải thích: Hàm này kết hợp unique() (lấy giá trị không lặp lại) và length() (đếm số lượng),

Nhận xét:cho ra số lượng thể loại phim khác biệt có mặt trong dữ liệu. Nhờ đó ta biết được độ đa dạng của biến này, qua đó đánh giá mức độ phân chia khi phân tích nhóm.

1.2.9.Tần suất giao dịch của những Ticker

kable(table(d$Ticker), col.names = c("Mã CK" ,"Tần suất"))
Mã CK Tần suất
AAPL 6470
ABNB 1201
ADBE 6470
ADDYY 4854
AEO 6470
AMD 6470
AMZN 6470
AXP 6470
BAMXF 4158
CL 6469
CMG 4945
COIN 1117
COST 6470
CRM 5348
CROX 4937
CSCO 6470
DAL 4628
DIS 6470
FDX 6469
FL 6470
GOOGL 5308
HD 6469
HLT 2961
HMC 6469
HSY 6469
JNJ 6470
JPM 6470
JWN 6433
KO 6470
LOGI 6469
LUV 6470
LVMUY 4939
MA 4863
MAR 6471
MCD 6470
MMM 6470
MSFT 6470
NFLX 5872
NKE 6470
NTDOY 6465
NVDA 6470
PG 6469
PHG 6469
PINS 1617
PMMAF 3275
POAHY 3938
PTON 1506
RBLX 1141
SBUX 6470
SHOP 2602
SPOT 1879
SQ 2380
TGT 6470
TM 6469
TSLA 3833
TWTR 1
UBER 1602
UBSFY 3940
UL 6469
V 4407
ZI 1324
ZM 1617

Giải thích: Hàm table() đếm số lần xuất hiện của mỗi giá trị trong biến Ticker, trả về bảng tần suất của từng thể loại mã chứng khoán. Nhờ vậy, có thể dễ dàng nhận biết thể loại nào nhiều nhất hay ít để trong trực quan hóa hoặc phát hiện đặc điểm nổi bật.

Nhận xét chung: Bộ ba thao tác trên cho phép kiểm tra chi tiết đặc điểm biến phân loại: biết được danh sách thể loại, mức độ đa dạng và phân bố tần suất từng loại. Từ đó, bài phân tích trở nên đầy đủ, khoa học và sẵn sàng cho các phân tích nhóm hoặc trực quan hóa chuyên sâu hơn trong các bước tiếp theo.

1.2.10.Giải thích ý nghĩa các biến

giai_thich_bien <- data.frame(
  `Tên Biến` = c(
    "Date", "Open", "High", "Low", "Close", "Volume", 
    "Brand_Name", "Ticker", "Industry_Tag", "Country", 
    "Dividends", "Stock Splits", "Capital Gains" ),
  `Ý Nghĩa Ngắn Gọn` = c(
    "Ngày giao dịch.",
    "Giá mở cửa: Giá đầu tiên trong phiên giao dịch.",
    "Giá cao nhất: Giá cao nhất đạt được trong phiên.",
    "Giá thấp nhất: Giá thấp nhất đạt được trong phiên.",
    "Giá đóng cửa: Giá cuối cùng khi kết thúc phiên.",
    "Khối lượng: Tổng số cổ phiếu được giao dịch.",
    "Tên công ty hoặc thương hiệu.",
    "Mã cổ phiếu trên sàn chứng khoán (ví dụ: VNM, AAPL).",
    "Ngành nghề kinh doanh của công ty.",
    "Quốc gia nơi công ty được niêm yết.",
    "Cổ tức: Khoản lợi nhuận công ty chia cho cổ đông.",
    "Tách cổ phiếu: Chia 1 cổ phiếu thành nhiều cổ phiếu mới.",
    "Lãi vốn: Lợi nhuận từ việc bán cổ phiếu." ),
  check.names = FALSE )
kable(giai_thich_bien, caption = "Bảng giải thích ý nghĩa các biến dữ liệu chứng khoán")
Bảng giải thích ý nghĩa các biến dữ liệu chứng khoán
Tên Biến Ý Nghĩa Ngắn Gọn
Date Ngày giao dịch.
Open Giá mở cửa: Giá đầu tiên trong phiên giao dịch.
High Giá cao nhất: Giá cao nhất đạt được trong phiên.
Low Giá thấp nhất: Giá thấp nhất đạt được trong phiên.
Close Giá đóng cửa: Giá cuối cùng khi kết thúc phiên.
Volume Khối lượng: Tổng số cổ phiếu được giao dịch.
Brand_Name Tên công ty hoặc thương hiệu.
Ticker Mã cổ phiếu trên sàn chứng khoán (ví dụ: VNM, AAPL).
Industry_Tag Ngành nghề kinh doanh của công ty.
Country Quốc gia nơi công ty được niêm yết.
Dividends Cổ tức: Khoản lợi nhuận công ty chia cho cổ đông.
Stock Splits Tách cổ phiếu: Chia 1 cổ phiếu thành nhiều cổ phiếu mới.
Capital Gains Lãi vốn: Lợi nhuận từ việc bán cổ phiếu.

Giải thích: Đoạn code này tạo một bảng giải thích ý nghĩa cho từng biến có trong bộ dữ liệu.Đầu tiên, data.frame được dùng để tạo một bảng với hai cột: Variable (tên biến) và Meaning (ý nghĩa chi tiết, giải thích chức năng/chủ đề từng biến). Việc liệt kê này giúp bạn hoặc người đọc nhanh chóng nắm được mỗi trường trong dữ liệu nói về điều gì.

Nhận xét: - Việc bổ sung bảng giải thích biến ngay từ đầu tiểu luận giúp người đọc không bị nhầm lẫn về tên trường, ý nghĩa và cách sử dụng, đặc biệt cần thiết khi tên biến là tiếng Anh hoặc viết tắt khó hiểu.

  • Việc này thể hiện sự khoa học, chuyên nghiệp và là điểm cộng rất lớn về hình thức khi trình bày báo cáo/tài liệu phân tích dữ liệu.

  • Nhờ bảng này, mọi thao tác, phân tích, trực quan hóa về sau đều trở nên mạch lạc và dễ tiếp cận cho bất kỳ ai sử dụng hay đọc lại báo cáo, ngay cả khi không quen với bộ dữ.

2.Xử lý thô và mã hóa dữ liệu

2.1.Kiểm tra dữ kiệu bị thiếu

Lệnh này có nghĩa là “Với mỗi cột trong bảng dữ liệu dvà đếm xem có bao nhiêu giá trị bị thiếu và hiển thị kết quả”

missing_values <- sapply(d, function(x) sum(is.na(x)))
kable(missing_values)
x
Date 0
Open 0
High 0
Low 0
Close 0
Volume 0
Brand_Name 0
Ticker 0
Industry_Tag 0
Country 0
Dividends 0
Stock.Splits 0
Capital.Gains 310120

Ý nghĩa Kỹ thuật

  1. Đảm bảo tính toàn vẹn dữ liệu (Data Integrity):
    • Mỗi hàng trong bộ dữ liệu này nên là một bản ghi duy nhất, đại diện cho dữ liệu của một mã cổ phiếu (Ticker) vào một ngày (Date) cụ thể.
  2. Tránh sai lệch trong tính toán:
    • Nếu có các hàng bị trùng lặp, mọi phép tính thống kê sẽ bị sai. Ví dụ, nếu dữ liệu ngày X của cổ phiếu A bị lặp lại, khi tính tổng khối lượng giao dịch (Volume) hoặc giá trung bình (Close), kết quả sẽ bị sai lệch, bị thổi phồng một cách giả tạo.
  3. Ảnh hưởng đến mô hình hóa:
    • Điều này dẫn đến các dự báo và kết luận không chính xác.

Ý nghĩa Kinh tế và Phân tích

  1. Độ tin cậy của phân tích:
    • Nếu kết quả kiểm tra cho thấy có dữ liệu trùng lặp, điều đó có nghĩa là bộ dữ liệu không đáng tin cậy. Mọi phân tích về xu hướng, lợi nhuận, hay rủi ro đều sẽ bị nghi ngờ.
    • Ví dụ: Nếu một ngày giao dịch thành công với giá tăng và khối lượng lớn bị lặp lại, nó có thể tạo ra một “tín hiệu mua” giả, lừa nhà phân tích tin rằng có một xu hướng mạnh đang diễn ra.
  2. Xác định lỗi trong quy trình:
    • Việc phát hiện ra dữ liệu trùng lặp là một tín hiệu cảnh báo đỏ (red flag) cho thấy có vấn đề nghiêm trọng trong quy trình thu thập dữ liệu (data pipeline). Có thể dữ liệu đã được kéo về từ API nhiều lần, hoặc file dữ liệu đã được ghép nối không chính xác.
    • Từ góc độ kinh doanh, điều này đòi hỏi phải dừng ngay lập tức việc phân tích để quay lại sửa chữa nguồn dữ liệu gốc.

2.2.Kiểm tra trùng lặp

library(knitr)
so_trung_lap <- sum(duplicated(d))
bang_ket_qua <- data.frame(`Nội dung kiểm tra` = "Tổng số dòng bị trùng lặp",
  `Kết quả` = so_trung_lap)
kable(bang_ket_qua, caption = "Kết quả kiểm tra dữ liệu trùng lặp")
Kết quả kiểm tra dữ liệu trùng lặp
Nội.dung.kiểm.tra Kết.quả
Tổng số dòng bị trùng lặp 0

Giải thích: (1) nạp thư viện (2) () Lưu và hiển thị kết quả

Kết quả cho thấy bộ dữ liệu không có một biến anfo bị trùng lặp với nhau

2.3. Xóa biến cuối có chứa giá trị NA

library(dplyr)
library(knitr)
library(kableExtra)
first_row <- d %>% 
  filter(!is.na(Capital.Gains)) %>% head(1)
t(first_row) %>%
  kable(col.names = c("Giá trị"), caption = "Chi tiết dòng đầu tiên sau khi xóa NA") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = F)
Chi tiết dòng đầu tiên sau khi xóa NA
Giá trị
Date 2024-07-18 00:00:00-04:00
Open 47.375
High 47.375
Low 47.375
Close 47.375
Volume 0
Brand_Name puma
Ticker PMMAF
Industry_Tag apparel
Country germany
Dividends 0
Stock.Splits 0
Capital.Gains 0

Giải thích: (1-3): Nạp thư viện cần thiết (4-8): Sử dụng filter() để giữ lại những dòng mà cột capital.Gains KHÔNG PHẢI là NA.Lưu kết quả vào một dataframe mới để không ảnh hưởng đến dữ liệu gốc d

Ý nghĩa: Xóa đi cộ biến Capital.Gains để phân tích ở những phần sau được chuẩn hóa dữ liệu hơn

2.4.Kiểm tra các giá trị bị thiếu và số lượng giá trị bí thiếu 1 cột

any(is.na(d))
## [1] TRUE

Giải thích: - Hàm is.na(movies_dataset) kiểm tra từng ô của toàn bộ dataset xem có phải là giá trị bị thiếu (NA) hay không, trả về một ma trận TRUE/FALSE tương ứng. - Hàm any() kiểm tra xem có ít nhất một giá trị NA nào xuất hiện không. Nếu có, kết quả là TRUE; nếu toàn bộ dữ liệu đều đầy đủ, kết quả là FALSE.

Nhận xét: Kết quả trả về [1] FALSE, có nghĩa là bộ dữ liệu của bạn không có bất kỳ giá trị nào bị thiếu ở bất kỳ cột hay dòng nào. Điều này giúp đảm bảo độ đầy đủ, không cần xử lý thay thếhoặc loại bỏ dòng bị thiếu, và tạo điều kiện tính toán chính xác cho các bước phân tích tiếp theo.

2.5.Xem các cổ phiểu được chia cổ tức hoặc không được chia cổ tức

library(knitr)
d$Dividend_Paid <- ifelse(d$Dividends > 0, 1, 0)
dividend_summary <- table(d$Dividend_Paid)
kable(dividend_summary, col.names = c("Tình trạng chia cổ tức (0: Không, 1: Có)", "Số lượng"))
Tình trạng chia cổ tức (0: Không, 1: Có) Số lượng
0 307417
1 2705
ticker_column_name <- "Ticker" 
ma_da_chia_co_tuc <- d[[ticker_column_name]][d$Dividend_Paid == 1]
ma_khong_chia_co_tuc <- d[[ticker_column_name]][d$Dividend_Paid == 0]

Giải thích: (1): Nạp thư viện (2): Tạo thêm cột mới có tên Dividend_Panid trong data frame d (3): Tạo bảng tần suất và lưu biến dividend_summary (4): Hiển thị bảng (5): Tại biến tên ticker column name và gán nó cho chuỗi ký tự Ticker (6): Lọc lấy mã cổ phiếu đã được chai cổ tức (7): Hiển thị kế quả

Ý nghĩa:

  1. Nhóm Không chia cổ tức (Số lượng: 307,417) - “Ưu tiên Tăng trưởng”

Đây là nhóm chiếm đa số áp đảo. Việc một công ty không trả cổ tức thường mang những ý nghĩa kinh tế sau:

  • Là các công ty tăng trưởng (Growth Companies): Đây là lý do phổ biến nhất. Các công ty này, đặc biệt là trong lĩnh vực công nghệ, dược phẩm sinh học, hoặc các ngành mới nổi, tin rằng họ có thể tạo ra lợi nhuận cho cổ đông tốt hơn bằng cách tái đầu tư toàn bộ lợi nhuận vào hoạt động kinh doanh. Tiền được dùng cho:

    • Nghiên cứu và phát triển (R&D) sản phẩm mới.
    • Mở rộng thị trường, xây dựng nhà máy.
    • Các chiến dịch marketing lớn.
    • Thâu tóm các công ty khác.
    • Kỳ vọng của nhà đầu tư: Họ không trông chờ vào tiền mặt từ cổ tức, mà kỳ vọng vào sự tăng giá của cổ phiếu (Capital Gains) trong tương lai khi công ty phát triển mạnh mẽ. Như là Amazon, Google, Tesla trong nhiều năm đầu phát triển.
  • Công ty đang trong giai đoạn khó khăn hoặc không có lợi nhuận: Nhiều công ty, đặc biệt là các công ty mới hoặc đang trong giai đoạn tái cấu trúc, đơn giản là không có đủ lợi nhuận hoặc dòng tiền dư thừa để trả cho cổ đông. Việc giữ lại tiền mặt là cần thiết để tồn tại.

  • Lựa chọn chiến lược của ban lãnh đạo: Một số công ty có lợi nhuận nhưng vẫn chọn không trả cổ tức. Ban lãnh đạo, như Warren Buffett tại Berkshire Hathaway, tin rằng họ có khả năng phân bổ vốn (tái đầu tư) hiệu quả hơn so với việc để các cổ đông tự đầu tư số tiền cổ tức nhận được.

  1. Nhóm Có chia cổ tức (Số lượng: 2,705) - “Ưu tiên Sự Ổn định và Dòng tiền”

Đây là nhóm thiểu số nhưng rất quan trọng trên thị trường. Việc trả cổ tức thường là dấu hiệu của:

  • Là các công ty trưởng thành, ổn định (Mature/Value Companies): Các công ty này thường hoạt động trong các ngành đã bão hòa, có ít cơ hội tăng trưởng đột phá. Họ tạo ra dòng tiền đều đặn, ổn định và dư thừa so với nhu cầu tái đầu tư. Các ngành điển hình:

    • Hàng tiêu dùng thiết yếu (ví dụ: Coca-Cola, Procter & Gamble).
    • Tiện ích công cộng (điện, nước).
    • Viễn thông lớn.
    • Ngân hàng.
    • Chiến lược: Trả cổ tức là cách hiệu quả nhất để trả lại giá trị cho cổ đông khi không còn nhiều dự án đầu tư siêu lợi nhuận.
  • Tín hiệu về sức khỏe tài chính: Việc cam kết trả cổ tức đều đặn là một tín hiệu mạnh mẽ mà ban lãnh đạo gửi đến thị trường, cho thấy họ tự tin vào sự ổn định và khả năng tạo ra lợi nhuận trong tương lai của công ty. Điều này giúp xây dựng lòng tin cho nhà đầu tư.

  • Thu hút một nhóm nhà đầu tư cụ thể: Các công ty trả cổ tức thường hấp dẫn các nhà đầu tư thu nhập (Income Investors), chẳng hạn như các quỹ hưu trí hoặc người về hưu, những người cần một dòng tiền mặt đều đặn từ các khoản đầu tư của họ.

2.6.Trích xuất thông tin có giá trị từ cột Date để mô hình hiểu được các yếu tố thời gian.

library(dplyr)
library(lubridate)
library(knitr)
library(kableExtra)
first_row_featured <- d %>%
  mutate( Date = ymd(Date), Year = year(Date),
    Month = month(Date, label = TRUE, abbr = FALSE) ) %>%
  head(1)
t(first_row_featured) %>%
  kable(col.names = c("Giá trị"), 
    caption = "Chi tiết dòng đầu tiên sau khi trích xuất đặc trưng thời gian") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Chi tiết dòng đầu tiên sau khi trích xuất đặc trưng thời gian
Giá trị
Date NA
Open 6.63
High 6.74
Low 6.615
Close 6.64
Volume 4209664
Brand_Name peloton
Ticker PTON
Industry_Tag fitness
Country usa
Dividends 0
Stock.Splits 0
Capital.Gains NA
Dividend_Paid 0
Year NA
Month NA

Giải thích: (1-4): nạp thư viện vào phiên làm việc. (5-8): Xử lý dữ liệu và lấy ra dòng đầu tiên Tạo ra các cột mới hoặc chỉnh sửa cột cũ. (9): Chuyển vị và Tạo bảng dọc (10): Kết quả sau khi xoay dọc được đưa vào hàm kable để tạo bảng. (11): Thêm một tiêu đề chung cho cả bảng. (12): Thêm các tùy chỉnh để bảng đẹp hơn.

Nhận xét: 1. Sự ổn định về giá: * Cổ phiếu mở cửa ở giá 6.63 và đóng cửa ở 6.64. Mức chênh lệch là không đáng kể. * Ý nghĩa: Điều này cho thấy trong suốt ngày hôm đó, lực mua và lực bán gần như cân bằng. Không có tin tức hay sự kiện nào đủ mạnh để đẩy giá tăng vọt hay giảm sâu. Nhà đầu tư đang ở trạng thái “chờ xem”.

  1. Thanh khoản cao (Sự sôi động):
    • Có tới 4.2 triệu cổ phiếu được giao dịch, tạo ra tổng giá trị gần 28 triệu USD (gia_tri_giao_dich).
    • Ý nghĩa: Mặc dù giá ổn định, cổ phiếu này vẫn được rất nhiều nhà đầu tư quan tâm và mua bán. Tính thanh khoản cao cho thấy nhà đầu tư có thể dễ dàng mua hoặc bán cổ phiếu này mà không sợ bị “kẹt hàng”.
  2. Một ngày giao dịch bình thường:
    • Các cột Dividends (Cổ tức) và Stock.Splits (Tách cổ phiếu) đều bằng 0.
    • Ý nghĩa: Đây là một ngày giao dịch thông thường, không bị ảnh hưởng bởi các sự kiện tài chính đặc biệt từ công ty. Biến động giá (dù nhỏ) hoàn toàn là do cung và cầu tự nhiên trên thị trường.

=> Bạn có thể hình dung đây là một khu chợ rất đông đúc (khối lượng giao dịch lớn), nhưng giá của món hàng (cổ phiếu Peloton) lại gần như không thay đổi từ sáng đến chiều.

2.7.Tạo đặc trưng tài chính

library(zoo)
library(dplyr)
library(ggplot2)
df_features <- d %>%
  arrange(Ticker, Date) %>%
  mutate(Daily_Return = (Close - Open) / Open,
    Price_Range = High - Low ) %>%
  group_by(Ticker) %>%
  mutate( MA_3_Days = rollmean(Close, k = 3, fill = NA, align = "right"),
    Volatility_3_Days = rollapply(Daily_Return, width = 3, FUN = sd, fill = NA, align = "right")) %>%
  ungroup() %>%
  mutate( MA_3_Days = ifelse(is.na(MA_3_Days), 0, MA_3_Days),
    Volatility_3_Days = ifelse(is.na(Volatility_3_Days), 0, Volatility_3_Days))
df_features %>%
  select(Ticker, Close, Daily_Return, Price_Range, MA_3_Days, Volatility_3_Days) %>%
  head(5) %>%
  kable(caption = "Kết quả tạo đặc trưng tài chính ", digits = 4)
Kết quả tạo đặc trưng tài chính
Ticker Close Daily_Return Price_Range MA_3_Days Volatility_3_Days
AAPL 0.8483 0.0673 0.0819 0.0000 0.0000
AAPL 0.7768 -0.0531 0.0715 0.0000 0.0000
AAPL 0.7882 0.0024 0.0573 0.8044 0.0603
AAPL 0.7200 -0.1048 0.0909 0.7616 0.0536
AAPL 0.7541 0.0311 0.0417 0.7541 0.0716

Giải thích: (1-3) nạp thư viện (4) Chuẩn bị dữ liệu. (5-7) Sắp xếp và Tính toán các đặc trưng cơ bản. (8) Nhóm dữ liệu theo từng mã chứng khoán. (9-10) Tính toán các đặc trưng “cuốn chiếu” (Rolling Features) (11-12) Bỏ nhóm và xử lý giá trị NA (13-15) Hiển thị kết quả cuối cùng 1. Ticker (Mã chứng khoán)

  • Ý nghĩa: Đây là mã định danh duy nhất của công ty trên sàn giao dịch. AAPL là mã của công ty Apple. Cột này giúp xác định dữ liệu thuộc về cổ phiếu nào.

2. Close (Giá đóng cửa)

  • Ý nghĩa: Đây là giá của cổ phiếu tại thời điểm kết thúc phiên giao dịch của một ngày cụ thể. Đây thường là con số quan trọng nhất, được sử dụng làm cơ sở cho hầu hết các phép tính kỹ thuật khác.
  • Lưu ý: Các giá trị trong cột này 0.8483, 0.7768 có vẻ đã được chuẩn hóa (normalized) hoặc điều chỉnh (adjusted) theo một cách nào đó (ví dụ: điều chỉnh theo chia tách cổ phiếu, hoặc chuẩn hóa theo một giá trị cơ sở). Giá trị thực của cổ phiếu Apple không phải là dưới 1 đô la.

3. Daily_Return (Tỷ suất sinh lợi hàng ngày)

  • Ý nghĩa: Đây là thước đo phần trăm thay đổi của giá cổ phiếu so với ngày hôm trước. Nó cho biết cổ phiếu đã tăng hay giảm giá bao nhiêu phần trăm trong một ngày.
  • Công thức tính (ước tính): Daily_Return của ngày hôm nay = (Close hôm nay - Close hôm qua) / Close hôm qua. Dòng thứ 2 có Daily_Return-0.0531, nghĩa là giá cổ phiếu đã giảm 5.31% so với ngày hôm trước. Dòng thứ 3 có Daily_Return0.0024, nghĩa là giá tăng 0.24%.

4. Price_Range (Biên độ giá)

  • Ý nghĩa: Cột này đo lường mức độ biến động giá trong một ngày. Nó cho thấy sự chênh lệch giữa giá cao nhất (High) và giá thấp nhất (Low) trong ngày, thường được tính theo tỷ lệ phần trăm so với giá đóng cửa hoặc giá mở cửa.
  • Công thức tính (ước tính): Price_Range = (High - Low) / Close.
  • Mục đích: Price_Range cao cho thấy ngày hôm đó thị trường có nhiều biến động và bất ổn. Price_Range thấp cho thấy một ngày giao dịch tương đối ổn định.

5. MA_3_Days (Đường trung bình động 3 ngày - 3-Day Moving Average)

  • Ý nghĩa: Đây là một chỉ báo làm mượt dữ liệu giá. Nó là giá trị trung bình của giá đóng cửa (Close) trong 3 ngày gần nhất (bao gồm cả ngày hiện tại).
  • Công thức tính (ước tính): MA_3_Days của ngày hôm nay = (Close hôm nay + Close hôm qua + Close hôm kia) / 3.Ở dòng thứ 3, MA_3_Days0.8044, được tính từ trung bình của 0.8483, 0.7768, và 0.7882.
  • Lưu ý: Hai dòng đầu tiên có giá trị 0.0000 vì không có đủ 2 ngày dữ liệu trước đó để tính trung bình 3 ngày. Đây là điều bình thường khi tính toán các chỉ số trễ (lagged indicators).

6. Volatility_3_Days (Độ biến động 3 ngày)

  • Ý nghĩa: Cột này đo lường mức độ rủi ro hoặc biến động của tỷ suất sinh lợi trong 3 ngày gần nhất. Nó thường được tính bằng độ lệch chuẩn (standard deviation) của Daily_Return trong khoảng thời gian đó.
  • Công thức tính (ước tính): Volatility_3_Days của ngày hôm nay = Độ lệch chuẩn của (Daily_Return hôm nay, Daily_Return hôm qua, Daily_Return hôm kia).
  • Mục đích: Giá trị Volatility cao cho thấy tỷ suất sinh lợi của cổ phiếu thay đổi rất nhiều và khó đoán (rủi ro cao). Giá trị thấp cho thấy tỷ suất sinh lợi ổn định hơn (rủi ro thấp hơn).
  • Lưu ý: Tương tự như MA_3_Days, hai dòng đầu tiên có giá trị là 0.0000 vì không có đủ dữ liệu để tính độ lệch chuẩn cho 3 ngày.

2.8. So sánh các công ty chia và không chia và không cỏ tức

danh_sach_chia_duy_nhat <- unique(ma_da_chia_co_tuc)
danh_sach_khong_chia_duy_nhat <- unique(ma_khong_chia_co_tuc)
cty_chia <- head(danh_sach_chia_duy_nhat)
cty_khong_chia <- head(danh_sach_khong_chia_duy_nhat)
bang_so_sanh <- data.frame(
   "công_ty_đã_chia_cổ_tức" = cty_chia,
   "công_ty_không_chia_cổ_tức" = cty_khong_chia)
kable(bang_so_sanh, caption = "So sánh các công ty chia và không chia cổ tức") %>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
So sánh các công ty chia và không chia cổ tức
công_ty_đã_chia_cổ_tức công_ty_không_chia_cổ_tức
AXP PTON
CSCO CROX
JPM ADDYY
DIS AMZN
FDX AAPL
CRM NKE

2.9.Lọc quốc gia có các mã cổ phiếu có Dividends

library(tidyverse)
result <- d %>% 
  distinct(Ticker, .keep_all = TRUE) %>%
  group_by(Country) %>%
  summarise(Tickers = paste(Ticker," ", collapse = ", "))
kable(result)
Country Tickers
canada SHOP
france LVMUY , UBSFY
germany ADDYY , PMMAF , BAMXF , POAHY
japan HMC , TM , NTDOY
netherlands UL , PHG
switzerland LOGI
usa PTON , CROX , AMZN , AAPL , NKE , TGT , GOOGL , SPOT , ZM , DIS , RBLX , DAL , COST , LUV , AEO , TSLA , SBUX , NVDA , CRM , CL , HSY , CMG , PINS , AMD , AXP , COIN , MA , MCD , ADBE , CSCO , JPM , ABNB , MAR , HLT , HD , JNJ , UBER , PG , FDX , MMM , FL , KO , MSFT , V , ZI , NFLX , TWTR , JWN , SQ

Giải thích code: (1) Tải bộ thư viện tidyverse (2-3) Bắt đầu với toàn bộ data frame ‘d’ Lấy các mã chứng khoán duy nhất (distinct). (4) Nhóm dữ liệu theo quốc gia (group_by). (5) Tổng hợp và nối các mã chứng khoán (summarise) (6) Hiển thị kết quả (kable)

Ý nghĩa:Điểm nổi bật nhất là danh sách các mã cổ phiếu của Mỹ (usa) dài hơn rất nhiều so với tất cả các quốc gia khác cộng lại.

=> Ý nghĩa kinh tế: Điều này cho thấy bộ dữ liệu của bạn tập trung chủ yếu vào thị trường chứng khoán Mỹ. Bất kỳ phân tích nào được thực hiện trên toàn bộ dữ liệu sẽ bị ảnh hưởng lớn bởi hiệu suất của các công ty Mỹ. Nó cũng phản ánh quy mô và sự đa dạng của nền kinh tế Mỹ, với sự hiện diện của nhiều tập đoàn lớn trong các lĩnh vực khác nhau (tài chính, công nghệ, bán lẻ, tiêu dùng, v.v.).

Đại diện cho các nền kinh tế lớn khác: Bảng dữ liệu cũng bao gồm các công ty chủ chốt từ các nền kinh tế quan trọng khác:Đức (germany): Nổi bật với ngành ô tô (POAHY - Porsche) và hàng tiêu dùng (ADDYY - Adidas).hật Bản (japan): Cũng mạnh về ô tô (Honda, Toyota) và có thêm ngành giải trí/gaming (Nintendo).Pháp (france): Đại diện bởi ngành hàng xa xỉ (LVMUY - LVMH).

=> Ý nghĩa kinh tế: Điều này cho phép thực hiện các phân tích so sánh giữa các thị trường hoặc các ngành công nghiệp đặc trưng của từng quốc gia.

2.10.Lập bảng tần số của biến ngành

table(d$Industry_Tag)
## 
##            apparel         automotive           aviation     consumer goods 
##              21069              24867              11098              19407 
##     cryptocurrency         e-commerce      entertainment            finance 
##               1117               9072              12342              22210 
## financial services            fitness               food    food & beverage 
##               2380               1506              11415              19409 
##           footwear             gaming         healthcare        hospitality 
##              11407              11546               6470              10633 
##          logistics       luxury goods      manufacturing              music 
##               6469               4939               6470               1879 
##             retail       social media         technology 
##              25842               1618              66957

Các Ngành Trọng tâm: Các ngành có con số cao nhất như technology (66,957), retail (25,842), automotive (24,867), và finance (22,210) là những ngành được đại diện nhiều nhất trong bộ dữ liệu. Điều này có nghĩa là bất kỳ phân tích nào bạn thực hiện cũng sẽ có nhiều thông tin và có thể đáng tin cậy hơn cho các ngành này.

Các Ngành Ít Dữ liệu hơn:Các ngành có con số thấp như cryptocurrency (1,117), fitness (1,506), social media (1,618) là những ngành có ít dữ liệu nhất. Điều này có thể do chúng là những ngành mới hơn, có ít công ty niêm yết hơn, hoặc đơn giản là bộ dữ liệu của bạn không tập trung thu thập về chúng. Khi phân tích các ngành này, bạn cần cẩn trọng vì mẫu dữ liệu nhỏ hơn.

=> kết quả này là một bước kiểm tra dữ liệu quan trọng, cho bạn thấy “bức tranh toàn cảnh” về thành phần của bộ dữ liệu. Nó cho biết ngành nào chiếm ưu thế và ngành nào là thiểu số, điều này ảnh hưởng trực tiếp đến độ tin cậy và phạm vi của các phân tích kinh tế mà bạn sẽ thực hiện sau này.

3.Phân tổ theo đặc tính định lượng

3.1.Phân tổ theo Quốc gia

library(DT)
d %>%
  group_by(Country) %>%
  summarise( So_Luong_Cong_Ty = n(),
    Tong_KLGD = sum(Volume, na.rm = TRUE) ) %>%
  arrange(desc(So_Luong_Cong_Ty)) %>%
  datatable(caption = "Tổng hợp theo Quốc gia")

Giải thích: (1) Nạp thư viện (2-3) Bắt đầu với toàn bộ data frame ‘d’ Lấy các mã chứng khoán duy nhất (distinct). (4) Nhóm dữ liệu theo quốc gia (group_by). (5) Tổng hợp và nối các mã chứng khoán (summarise) (6) Sắp xếp lại các hàng của bảng kết quả. (7) Hiển thị kết quả (`datatable)

Ý nghĩa:

1.Sự Thống Trị của Thị trường Vốn Hoa Kỳ (USA)

  • Số Lượng Công Ty (243,606): Con số này cao hơn rất nhiều so với quốc gia đứng thứ hai (Nhật Bản, 19,403). Điều này cho thấy:
    • Nền kinh tế năng động và sâu rộng: Mỹ có một số lượng doanh nghiệp khổng lồ, từ các tập đoàn đa quốc gia đến các công ty khởi nghiệp (startup).
    • Thị trường chứng khoán hấp dẫn: Các sàn giao dịch như NYSE và NASDAQ là nơi niêm yết hấp dẫn nhất thế giới, thu hút không chỉ công ty trong nước mà cả các công ty nước ngoài (FDI). Điều này cho thấy môi trường pháp lý, cơ sở hạ tầng tài chính và khả năng huy động vốn của Mỹ là vượt trội.
  • Tổng Khối Lượng Giao Dịch (Tong_KLGD - gần 700 nghìn tỷ): Con số này cũng áp đảo hoàn toàn. Nó cho thấy:
    • Thanh khoản (Liquidity) cao nhất thế giới: Thanh khoản cao có nghĩa là nhà đầu tư có thể mua bán một lượng lớn cổ phiếu một cách dễ dàng mà không làm ảnh hưởng nhiều đến giá. Đây là yếu tố cực kỳ quan trọng để thu hút dòng vốn toàn cầu.
    • Trung tâm tài chính của thế giới: Lượng giao dịch khổng lồ khẳng định vai trò của Phố Wall (Wall Street) là trung tâm tài chính toàn cầu. Các quyết định chính sách của Cục Dự trữ Liên bang Mỹ (FED) và sức khỏe của các công ty Mỹ có ảnh hưởng lan tỏa ra toàn thế giới.
  1. Đặc điểm của các Nền Kinh tế Lớn Khác
  • Nhật Bản (Japan), Đức (Germany), Pháp (France):
    • Đây là các cường quốc kinh tế lâu đời với nhiều tập đoàn công nghiệp, sản xuất lớn. Việc họ có số lượng công ty và khối lượng giao dịch cao trong top đầu là điều dễ hiểu. Điều này phản ánh quy mô và sự trưởng thành của các nền kinh tế này.
  • Hà Lan (Netherlands) và Thụy Sĩ (Switzerland):
    • Đây là một điểm phân tích rất thú vị. Cả hai quốc gia này đều có quy mô dân số và nền kinh tế nhỏ hơn nhiều so với Mỹ, Nhật, Đức. Tuy nhiên, họ lại có thứ hạng khá cao.
    • Hà Lan (Netherlands): Có số lượng công ty (12,938) ít hơn Nhật Bản và Đức, nhưng Tổng KLGD lại cao hơn đáng kể so với Đức và Pháp. Điều này cho thấy Hà Lan là nơi đặt trụ sở của nhiều tập đoàn đa quốc gia khổng lồ, có giá trị vốn hóa lớn và được giao dịch rất sôi động trên toàn cầu ASML, Shell, Unilever. Nó cũng khẳng định vai trò là một trung tâm tài chính và thương mại quan trọng của châu Âu.
    • Thụy Sĩ (Switzerland): Tương tự Hà Lan, Thụy Sĩ là một trung tâm tài chính, ngân hàng và là quê hương của các tập đoàn dược phẩm, hàng tiêu dùng hàng đầu thế giới (như Nestlé, Roche, Novartis). Các công ty này có tính ổn định và giá trị rất lớn, thu hút nhiều nhà đầu tư.
  1. Kết luận chung về mặt kinh tế
  • Sự phân hóa rõ rệt: Dữ liệu cho thấy một sự phân hóa rõ ràng giữa thị trường Mỹ và phần còn lại của thế giới. Bất kỳ sự kiện kinh tế-chính trị nào ở Mỹ đều có khả năng tác động mạnh mẽ đến các thị trường khác.
  • Mối tương quan giữa số lượng công ty và khối lượng giao dịch: Thông thường, quốc gia có nhiều công ty niêm yết sẽ có khối lượng giao dịch lớn. Tuy nhiên, các trường hợp như Hà Lan và Thụy Sĩ cho thấy chất lượng quan trọng hơn số lượng. Một quốc gia có thể không có nhiều công ty, nhưng nếu đó là những “gã khổng lồ” toàn cầu thì thị trường vốn của họ vẫn rất sôi động và có sức ảnh hưởng.
  • Chỉ báo về sức khỏe kinh tế: Bảng thống kê này có thể được xem như một chỉ báo về mức độ phát triển, sự cởi mở và sức hấp dẫn của một nền kinh tế đối với các nhà đầu tư trong và ngoài nước.

3.2.Phân tổ theo khối lượng theo ngành theo tháng

library(scales)
d %>%
  mutate(Date = as_date(Date)) %>%
  mutate(Year = year(Date), Month = month(Date)) %>%
  group_by(Industry_Tag, Year, Month) %>%
  summarise( Total_Volume = sum(Volume, na.rm = TRUE), .groups = 'drop') %>%
  arrange(Year, Month, desc(Total_Volume)) %>%
  mutate(Total_Volume = comma(Total_Volume, accuracy = 1)) %>%
  head(5) %>%
  kable(caption = "Tổng hợp khối lượng giao dịch (KLGD) theo Ngành, Năm và Tháng",
        col.names = c("Ngành", "Năm", "Tháng", "Tổng KLGD")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Tổng hợp khối lượng giao dịch (KLGD) theo Ngành, Năm và Tháng
Ngành Năm Tháng Tổng KLGD
technology 2000 1 15,710,613,400
e-commerce 2000 1 5,244,180,000
food & beverage 2000 1 852,012,800
retail 2000 1 330,887,600
finance 2000 1 320,562,079

Giải thích: (1) Nạp thư viện (2-3)Trích xuất Năm (mutate). (4) Nhóm dữ liệu (group_by). (5-6) Tính toán các chỉ số thống kê (summarise). (7-8) Sắp xếp (arrange) và Định dạng (mutate). (9-11) Tạo bảng hiển thị (kablekable_styling)

Ý nghĩa:

  1. Phản ánh Cơn sốt Bong bóng Dot-com (The Dot-com Bubble):
    • Thời điểm đầu năm 2000 là đỉnh cao của bong bóng Dot-com, một giai đoạn đầu tư và đầu cơ cực kỳ sôi động vào các công ty liên quan đến Internet và công nghệ.
    • Sự thống trị tuyệt đối của Công nghệ: Ngành technology có KLGD lên tới 15.7 tỷ, cao gần gấp 3 lần so với ngành đứng thứ hai là e-commerce (5.2 tỷ). Điều này cho thấy một lượng vốn khổng lồ và sự quan tâm tột độ của các nhà đầu tư đang đổ dồn vào lĩnh vực công nghệ.
    • Khoảng cách lớn: Khoảng cách giữa nhóm đầu (công nghệ, thương mại điện tử) và phần còn lại (thực phẩm, bán lẻ, tài chính) là cực kỳ lớn. KLGD của ngành công nghệ lớn hơn tổng KLGD của 9 ngành tiếp theo cộng lại. Điều này cho thấy thị trường đang “phát cuồng” với cổ phiếu công nghệ và bỏ qua các ngành kinh tế truyền thống.
  2. Chỉ báo về Tâm lý Thị trường và Khẩu vị rủi ro:
    • Lạc quan tột độ: Khối lượng giao dịch khổng lồ là một chỉ báo về sự tham gia mạnh mẽ của thị trường. Vào thời điểm này, tâm lý chung là cực kỳ lạc quan về tương lai của Internet và các mô hình kinh doanh liên quan.
    • Khẩu vị rủi ro cao: Các nhà đầu tư sẵn sàng đổ tiền vào các công ty công nghệ dù nhiều công ty trong số đó chưa tạo ra lợi nhuận, thậm chí chưa có doanh thu bền vững. Họ mua vì kỳ vọng vào sự tăng trưởng trong tương lai chứ không phải vì giá trị nội tại hiện tại. Đây là một dấu hiệu kinh điển của một thị trường có khẩu vị rủi ro rất cao và mang tính đầu cơ.
  3. Dấu hiệu của một thị trường sắp điều chỉnh:
    • Trong lịch sử tài chính, khi dòng tiền tập trung quá mức vào một vài ngành “nóng” và tạo ra khoảng cách quá lớn với phần còn lại của nền kinh tế, đó thường là dấu hiệu của một bong bóng sắp vỡ. Thực tế, chỉ vài tháng sau thời điểm dữ liệu này được ghi nhận (tháng 3/2000), bong bóng Dot-com đã vỡ, chỉ số Nasdaq sụp đổ và gây ra một cuộc suy thoái nhẹ. Bảng dữ liệu này chính là một “bức ảnh chụp nhanh” hoàn hảo về thị trường ngay trước khi cơn bão ập đến.

3.3.Phân tổ theo Mối quan hệ Giá-Khối lượng

d %>% mutate(Price_Cat = cut(Close, breaks = c(-Inf, 100, 500, Inf),
                    labels = c("Giá thấp", "Giá trung bình", "Giá cao"), right = FALSE),
    Volume_Cat = cut(Volume,breaks = c(-Inf, 1000000, 5000000, Inf),
                     labels = c("Khối lượng thấp", "Khối lượng trung bình", "Khối lượng lớn"),
                     right = FALSE),
    Price_Volume_Category = paste(Price_Cat, Volume_Cat, sep = " - ")) %>%
  select(Brand_Name, Ticker, Close, Volume, Price_Volume_Category) %>%
  head(5) %>%
  kable(caption = "Phân loại cổ phiếu theo mối quan hệ Giá và Khối lượng",
        col.names = c("Thương hiệu", "Mã CK", "Giá", "Khối lượng", "Phân loại Giá-KL"),
        align = 'l') %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Phân loại cổ phiếu theo mối quan hệ Giá và Khối lượng
Thương hiệu Mã CK Giá Khối lượng Phân loại Giá-KL
peloton PTON 6.64 4209664 Giá thấp - Khối lượng trung bình
crocs CROX 107.34 560190 Giá trung bình - Khối lượng thấp
adidas ADDYY 121.93 36600 Giá trung bình - Khối lượng thấp
amazon AMZN 223.41 29295154 Giá trung bình - Khối lượng lớn
apple AAPL 213.55 34697317 Giá trung bình - Khối lượng lớn

**Giải thích:* Giải thích: (1-7)Trích xuất Năm (mutate). (8) Chọn tên các biến. (9) chọn 5 dòng đầu. (10-13) Tạo bảng hiển thị (kablekable_styling)

Ý nghĩa:

  1. Nhóm “Giá trung bình - Khối lượng lớn”: amazon (AMZN), apple (AAPL), google (GOOGL).
  • Ý nghĩa kinh tế: Đây là nhóm dẫn dắt thị trường (Market Leaders). Đây là những cổ phiếu blue-chip, xương sống của nền kinh tế số.
    • Giá trung bình: Thị giá của chúng (khoảng $180 - $225) cho thấy đây là các công ty có giá trị vốn hóa khổng lồ.
    • Khối lượng lớn: Khối lượng giao dịch lên tới hàng chục triệu cổ phiếu mỗi ngày cho thấy mức độ quan tâm cực lớn từ cả nhà đầu tư tổ chức (quỹ đầu tư) và cá nhân. Chúng có tính thanh khoản (liquidity) cao nhất, nghĩa là việc mua bán số lượng lớn rất dễ dàng. Diễn biến của nhóm này có ảnh hưởng mạnh mẽ đến tâm lý toàn thị trường.
  1. Nhóm “Giá thấp - Khối lượng lớn”: nike (NKE).
  • Ý nghĩa kinh tế: Đây là nhóm cổ phiếu đại chúng, có sức hút lớn.
    • Giá thấp: Với mức giá dưới $100, cổ phiếu này dễ tiếp cận hơn với các nhà đầu tư cá nhân có vốn nhỏ.
    • Khối lượng lớn: Mặc dù giá không cao, khối lượng giao dịch rất lớn (hơn 11 triệu) cho thấy Nike là một thương hiệu cực kỳ phổ biến và cổ phiếu của nó được giao dịch rất sôi động. Nó cho thấy sự quan tâm mạnh mẽ và liên tục từ thị trường.
  1. Nhóm “Giá cao - Khối lượng trung bình”: spotify (SPOT).
  • Ý nghĩa kinh tế: Đây là nhóm cổ phiếu có thị giá cao, kén nhà đầu tư.
    • Giá cao: Mức giá lên tới $725 cho thấy giá trị mỗi cổ phiếu rất lớn, thường đòi hỏi nhà đầu tư phải có nguồn vốn đáng kể.
    • Khối lượng trung bình: Khối lượng giao dịch (khoảng 1 triệu) là khá tốt nhưng không thể so sánh với các “gã khổng lồ” như Apple hay Amazon. Điều này có thể do mức giá cao đã hạn chế sự tham gia của một bộ phận nhà đầu tư nhỏ lẻ.
  1. Nhóm “Giá thấp / trung bình - Khối lượng trung bình”: peloton (PTON), target (TGT), zoom video communications (ZM).
  • Ý nghĩa kinh tế: Đây là nhóm các công ty được biết đến rộng rãi nhưng không phải là tâm điểm giao dịch.
    • Chúng là những công ty có tên tuổi, hoạt động kinh doanh ổn định.
    • Khối lượng giao dịch ở mức “trung bình” (2-4 triệu cổ phiếu) cho thấy chúng có thanh khoản tốt, nhưng không tạo ra “cơn sốt” giao dịch như nhóm công nghệ hàng đầu.
  1. Nhóm “Giá trung bình - Khối lượng thấp”: crocs (CROX), adidas (ADDYY).
  • Ý nghĩa kinh tế: Đây là nhóm cổ phiếu có thanh khoản thấp hơn.
    • Mặc dù giá trị công ty không nhỏ, nhưng khối lượng giao dịch lại khá thấp (dưới 1 triệu, đặc biệt Adidas chỉ có 36,600).
    • Lưu ý đặc biệt cho Adidas (ADDYY): Ký hiệu “ADDYY” cho thấy đây là một Chứng chỉ lưu ký của Mỹ (ADR). Điều này có nghĩa là phần lớn giao dịch của cổ phiếu Adidas diễn ra trên sàn chứng khoán quê nhà của nó (tại Đức). Lượng giao dịch trên sàn Mỹ rất thấp là điều bình thường. Đây là một insight quan trọng: danh tiếng thương hiệu toàn cầu không đồng nghĩa với khối lượng giao dịch cao trên mọi thị trường.

3.4.Phân tổ mối quan hệ giữa giá và khối lượng theo ngành theo quốc gia và theo tháng

d %>%mutate( Date = as.Date(Date), Month = month(Date, label = TRUE, abbr = FALSE)) %>%
  group_by(Month, Industry_Tag, Country) %>%
  summarise( gia_tri = mean(Close, na.rm = TRUE), khoi_luong = mean(Volume, na.rm = TRUE), .groups = "drop") %>%
  mutate(Price_Tier = cut(gia_tri,breaks = c(-Inf, 100, 1000, Inf),labels = c("Giá thấp", "Giá trung bình", "Giá cao"), right = FALSE),
    Liquidity_Tier = cut(khoi_luong,
                         breaks = c(-Inf, 10000000, 1000000000, Inf),
                         labels = c("Thanh khoản thấp", "Thanh khoản trung bình", "Thanh khoản cao"),
                         right = FALSE)) %>%
  arrange(Month, Industry_Tag) %>%head(5) %>%
  mutate(gia_tri = round(gia_tri, 2), khoi_luong = comma(khoi_luong, accuracy = 1)  ) %>%
  kable(caption = "Phân loại Giá và Thanh khoản trung bình theo Ngành, Quốc gia và Tháng",
    col.names = c("Tháng", "Ngành", "Quốc gia", "Giá TB", "KLGD TB", "Phân loại Giá", "Phân loại KL"),align = 'l' ) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),full_width = FALSE )
Phân loại Giá và Thanh khoản trung bình theo Ngành, Quốc gia và Tháng
Tháng Ngành Quốc gia Giá TB KLGD TB Phân loại Giá Phân loại KL
January apparel germany 63.01 32,950 Giá thấp Thanh khoản thấp
January apparel usa 28.28 7,577,394 Giá thấp Thanh khoản thấp
January automotive germany 37.64 93,028 Giá thấp Thanh khoản thấp
January automotive japan 63.73 539,808 Giá thấp Thanh khoản thấp
January automotive usa 105.17 99,645,814 Giá trung bình Thanh khoản trung bình

Giải thích: (1-2)Trích xuất Năm (mutate). (3) Nhóm dữ liệu (group_by). (4-10) Tính toán các chỉ số thống kê (summarise). (11-15) Sắp xếp (arrange) và Định dạng (mutate). (16-18) Tạo bảng hiển thị (kablekable_styling)

**Ý nghĩa:*

Gia_tri (Giá trị): Con số này đại diện cho mức giá trung bình hoặc chỉ số định giá của các tài sản (cổ phiếu, sản phẩm, dịch vụ) trong một ngành. Giá trị cao như music ở Mỹ là 238.45, cryptocurrency là 177.10 Cho thấy thị trường đánh giá cao tiềm năng lợi nhuận và sự tăng trưởng của ngành này. Đây là những lĩnh vực có rào cản gia nhập cao, công nghệ độc quyền hoặc thương hiệu mạnh. Giá trị thấp như apparel ở Mỹ là 28.27, consumer goods ở Hà Lan là 28.25): Thường là các ngành có tính cạnh tranh cao, biên lợi nhuận thấp hơn, hoặc sản phẩm mang tính phổ thông. khoi_luong (Khối lượng):Con số này phản ánh quy mô và mức độ sôi động của ngành. Nó có thể là tổng khối lượng giao dịch, sản lượng sản xuất, hoặc doanh số bán hàng. Phân tích: Khối lượng lớn như e-commerce và technology ở Mỹ lên đến hơn 100 triệu): Đây là những ngành kinh tế xương sống, có quy mô thị trường khổng lồ, thu hút lượng lớn giao dịch và đầu tư. Nó cho thấy vai trò trung tâm của các ngành này trong nền kinh tế Mỹ. Khối lượng thấp như gaming ở Pháp là 59,380, luxury goods là 148,022): Đây có thể là các thị trường ngách, dù có giá trị cao nhưng quy mô giao dịch nhỏ hơn, hoặc đơn giản là nền kinh tế của quốc gia đó nhỏ hơn. Liquidity_Tier (Mức thanh khoản) “Thanh khoản trung” (chỉ có ở Mỹ cho e-commerce, technology, automotive) Cho thấy chỉ những ngành lớn nhất trong nền kinh tế lớn nhất thế giới mới có đủ dòng tiền và hoạt động để được coi là có tính thanh khoản cao. Điều này khẳng định sự thống trị của thị trường Mỹ. “Thanh khoản thấp” (ở hầu hết các ngành/quốc gia khác) Cho thấy dù một ngành có được định giá cao (như cryptocurrency), nó vẫn có thể không có đủ người mua và bán liên tục. Điều này có thể hàm ý rủi ro cao hơn hoặc đó là thị trường dành cho các nhà đầu tư dài hạn.

3.5.Phân tổ mối quan hệ giữa giá và khối lượng theo ngành theo quốc gia và theo năm

d %>% mutate(Date = as.Date(Date), Year = year(Date)) %>%
  group_by(Year, Industry_Tag, Country) %>%
  summarise(Avg_Close = mean(Close, na.rm = TRUE),Avg_Volume = mean(Volume, na.rm = TRUE),.groups = "drop") %>%
  mutate( Price_Cat_Temp = cut(Avg_Close,breaks = c(-Inf, 100, 500, Inf),
                         labels = c("Giá thấp", "Giá trung bình", "Giá cao"),right = FALSE),
    Volume_Cat_Temp = cut(Avg_Volume, breaks = c(-Inf, 1000000, 5000000, Inf),
                          labels = c("Khối lượng thấp", "Khối lượng trung bình", "Khối lượng lớn"), right = FALSE),
    Price_Volume_Category = paste(Price_Cat_Temp, Volume_Cat_Temp, sep = " - ")) %>%
  arrange(Year, Industry_Tag, Country) %>%select(Year, Industry_Tag, Country, Avg_Close, Avg_Volume, Price_Volume_Category) %>%
  head(5) %>%mutate(Avg_Close = round(Avg_Close, 2),Avg_Volume = comma(Avg_Volume, accuracy = 1) ) %>%
  kable( caption = "Phân loại đặc tính Ngành theo Quốc gia và Năm",
    col.names = c("Năm", "Ngành", "Quốc gia", "Giá TB", "KLGD TB", "Phân loại"),align = 'l') %>%
  kable_styling( latex_options = c("striped", "hold_position", "scale_down"), full_width = FALSE)
Phân loại đặc tính Ngành theo Quốc gia và Năm
Năm Ngành Quốc gia Giá TB KLGD TB Phân loại
2000 apparel usa 3.75 7,902,543 Giá thấp - Khối lượng lớn
2000 automotive japan 38.62 48,648 Giá thấp - Khối lượng thấp
2000 aviation usa 13.36 2,735,833 Giá thấp - Khối lượng trung bình
2000 consumer goods netherlands 6.82 320,459 Giá thấp - Khối lượng thấp
2000 consumer goods usa 17.90 6,976,633 Giá thấp - Khối lượng lớn

Giải thích: (1)Trích xuất Năm (mutate). (2) Nhóm dữ liệu (group_by). (3-8) Tính toán các chỉ số thống kê (summarise). (9-10) Sắp xếp (arrange) và Định dạng (mutate). (11-13) Tạo bảng hiển thị (kablekable_styling)

Ý nghĩa:

  • Ngành e-commerce (Thương mại điện tử) tại Mỹ:
    • Giá TB cực thấp (2.33 USD): Cho thấy thị trường tràn ngập các công ty thương mại điện tử có giá cổ phiếu rất rẻ, có thể là các công ty mới lên sàn (IPO), chưa có lợi nhuận, hoặc thậm chí chưa có mô hình kinh doanh bền vững.
    • KLGD TB khổng lồ (175 triệu cổ phiếu): Con số này là bất thường và cực kỳ cao. Nó cho thấy một mức độ giao dịch điên cuồng. Các nhà đầu tư, đặc biệt là nhà đầu tư cá nhân, đang đổ xô mua bán những cổ phiếu này với hy vọng làm giàu nhanh chóng, bất chấp giá trị cơ bản của công ty.
    • Phân loại “Giá thấp - Khối lượng lớn”: Đây chính là định nghĩa kinh điển của một cổ phiếu mang tính đầu cơ cao (speculative stock) trong một thị trường bong bóng.
  • Các ngành liên quan tại Mỹ:
    • Các ngành như entertainment (giải trí), finance (tài chính), healthcare (chăm sóc sức khỏe) tại Mỹ cũng được xếp vào nhóm “Giá thấp - Khối lượng lớn”. Điều này cho thấy tâm lý đầu cơ đã lan tỏa rộng khắp thị trường Mỹ, không chỉ giới hạn trong lĩnh vực công nghệ thuần túy.

Sự thống trị tuyệt đối của thị trường Mỹ (USA)

  • Trong 15 dòng được hiển thị, có tới 12 dòng thuộc về Mỹ.
  • Quan trọng hơn, tất cả các ngành có “Khối lượng lớn” hoặc “Khối lượng trung bình” đều thuộc về Mỹ.
  • Ý nghĩa: Điều này khẳng định vai trò của Mỹ, đặc biệt là sàn giao dịch NASDAQ, là tâm chấn của cơn sốt Dot-com. Dòng vốn từ khắp nơi trên thế giới đã đổ về đây để tham gia vào “bữa tiệc” công nghệ, tạo ra thanh khoản khổng lồ cho các công ty Mỹ.

Sự tương phản giữa “Kinh tế Mới” và “Kinh tế Cũ”

    • Ngành automotive (ô tô) tại Nhật Bản: Có mức Giá TB khá cao (38.62 USD), cho thấy đây là các công ty có giá trị, đã thành lập lâu đời. Tuy nhiên, KLGD TB lại cực kỳ thấp (chỉ 48,648 cổ phiếu).
    • Ngành consumer goods (hàng tiêu dùng) tại Hà Lan: Tương tự, giá thấp và khối lượng cũng rất thấp.
  • Ý nghĩa: Vào năm 2000, các nhà đầu tư đã “bỏ quên” các ngành công nghiệp truyền thống, vững chắc (Kinh tế Cũ) để đuổi theo các cổ phiếu công nghệ đầy hứa hẹn (Kinh tế Mới). Dòng tiền thông minh (và cả không thông minh) đã rút ra khỏi các ngành sản xuất, ô tô để đổ vào internet, tạo ra sự chênh lệch thanh khoản khổng lồ mà chúng ta thấy trong bảng.

3.6.Phân tổ mối quan hệ giữa giá và khối lượng theo ngành theo usa và theo tháng

d %>%
  filter(Country == "usa") %>%
  mutate( Date = as.Date(Date), Month = month(Date, label = TRUE, abbr = FALSE) ) %>%
  group_by(Month, Industry_Tag) %>%
  summarise(
    gia_tri_tb = mean(Close, na.rm = TRUE),
    khoi_luong_tb = mean(Volume, na.rm = TRUE),
    .groups = "drop") %>%mutate(
    Price_Tier = cut(gia_tri_tb,
                     breaks = c(-Inf, 100, 300, Inf),
                     labels = c("Giá thấp", "Giá trung bình", "Giá cao"),
                     right = FALSE),
    Liquidity_Tier = cut(khoi_luong_tb,
                         breaks = c(-Inf, 5000000, 20000000, Inf),
                         labels = c("Thanh khoản thấp", "Thanh khoản trung bình", "Thanh khoản cao"),
                         right = FALSE)) %>%
  arrange(Month, Industry_Tag) %>%
  head(5) %>%
  mutate(gia_tri_tb = round(gia_tri_tb, 2),khoi_luong_tb = comma(khoi_luong_tb, accuracy = 1)) %>%
  kable(caption = "Phân tích đặc tính Ngành tại Mỹ theo Tháng", col.names = c("Tháng", "Ngành", "Giá TB", "KLGD TB", "Phân loại Giá", "Phân loại KL"),
    align = 'l' ) %>%
  kable_styling(latex_options = c("striped", "hold_position", "scale_down"),
    full_width = FALSE)
Phân tích đặc tính Ngành tại Mỹ theo Tháng
Tháng Ngành Giá TB KLGD TB Phân loại Giá Phân loại KL
January apparel 28.28 7,577,394 Giá thấp Thanh khoản trung bình
January automotive 105.17 99,645,814 Giá trung bình Thanh khoản cao
January aviation 29.13 9,020,861 Giá thấp Thanh khoản trung bình
January consumer goods 56.52 7,319,693 Giá thấp Thanh khoản trung bình
January cryptocurrency 177.10 11,337,161 Giá trung bình Thanh khoản trung bình

Giải thích: (1-2)Trích xuất Năm (mutate). (3) Nhóm dữ liệu (group_by). (4-10) Tính toán các chỉ số thống kê (summarise). (11-15) Sắp xếp (arrange) và Định dạng (mutate). (16-18) Tạo bảng hiển thị (kablekable_styling)

Ý nghĩa: Nhóm Thanh Khoản Cao

  • Ngành: automotive (Ô tô) và e-commerce (Thương mại điện tử).
  • Đặc điểm:
    • automotive: “Giá trung bình - Thanh khoản cao” (KLGD TB: ~100 triệu)
    • e-commerce: “Giá thấp - Thanh khoản cao” (KLGD TB: ~138 triệu)
  • Ý nghĩa kinh tế:
    • Đây là hai ngành thu hút dòng tiền mạnh mẽ nhất thị trường trong tháng Một. Chúng là nơi diễn ra các hoạt động giao dịch sôi động nhất từ cả các quỹ đầu tư lớn và nhà đầu tư cá nhân.
    • Sự khác biệt thú vị: Ngành ô tô bao gồm các công ty blue-chip, có giá trị lớn, là trụ cột của nền kinh tế. Trong khi đó, ngành thương mại điện tử có mức giá trung bình thấp hơn nhiều, nhưng khối lượng giao dịch lại cao nhất. Điều này cho thấy e-commerce có thể là nơi tập trung nhiều hoạt động đầu cơ và giao dịch lướt sóng của các nhà đầu tư nhỏ lẻ, bị hấp dẫn bởi các cổ phiếu giá rẻ và có nhiều biến động.

Nhóm Giá Cao

  • Ngành: food (Thực phẩm).
  • Đặc điểm: “Giá cao - Thanh khoản thấp” (Giá TB: 316.62 USD, KLGD TB: 4 triệu)
  • Ý nghĩa kinh tế:
    • Đây là một phát hiện rất quan trọng. Ngành thực phẩm có mức giá cổ phiếu trung bình cao nhất trong bảng, cho thấy nó bao gồm các công ty rất lớn và có giá trị.
    • Tuy nhiên, thanh khoản lại thấp. Điều này có nghĩa là các nhà đầu tư mua và nắm giữ (buy and hold) cổ phiếu ngành này thay vì giao dịch thường xuyên. Đây được xem là một ngành phòng thủ (defensive sector), ổn định, ít bị ảnh hưởng bởi chu kỳ kinh tế. Nhà đầu tư tìm đến đây vì sự an toàn và giá trị dài hạn, chứ không phải để lướt sóng.

Nhóm Thanh Khoản Trung Bình

  • Ngành: Bao gồm phần lớn các ngành còn lại như apparel, aviation, consumer goods, cryptocurrency, entertainment, finance, v.v.
  • Đặc điểm: Hầu hết đều có “Giá thấp” hoặc “Giá trung bình” và “Thanh khoản trung bình”.
  • Ý nghĩa kinh tế:
    • Đây là phần thân chính, đa dạng của thị trường chứng khoán Mỹ. Các ngành này có đủ thanh khoản để giao dịch một cách lành mạnh, thu hút sự quan tâm đều đặn nhưng không tạo ra các “cơn sốt” như nhóm thanh khoản cao.
    • Sự xuất hiện của cryptocurrency: Việc ngành tiền điện tử được xếp vào nhóm “Giá trung bình - Thanh khoản trung bình” cho thấy các cổ phiếu liên quan đến crypto (như sàn giao dịch, công ty đào coin) đã trở thành một phần chính thức và được giao dịch đáng kể trên thị trường, không còn là một lĩnh vực quá nhỏ lẻ.

Nhóm Thanh Khoản Thấp

  • Ngành: food (đã phân tích) và footwear (Giày dép).
  • Đặc điểm: “Giá thấp - Thanh khoản thấp”
  • Ý nghĩa kinh tế:
    • Đây là các ngành nhỏ hơn, ít thu hút sự chú ý của dòng tiền đầu cơ. Thanh khoản thấp có nghĩa là việc mua bán một lượng lớn cổ phiếu có thể khó khăn hơn và có thể ảnh hưởng đến giá. Nhà đầu tư vào các ngành này thường cần có sự kiên nhẫn và tầm nhìn dài hạn hơn.

3.7.Phân tổ mối quan hệ giữa giá và khối lượng theo ngành theo usa và theo năm

d %>% filter(Country == "usa") %>%
  mutate( Date = as.Date(Date), Year = year(Date) ) %>%
  group_by(Year, Industry_Tag) %>%
  summarise(
    gia_tri_tb = mean(Close, na.rm = TRUE),
    khoi_luong_tb = mean(Volume, na.rm = TRUE), 
    .groups = "drop" ) %>%mutate( Price_Tier = cut(gia_tri_tb,breaks = c(-Inf, 100, 300, Inf),
                     labels = c("Giá thấp", "Giá trung bình", "Giá cao"),right = FALSE),
    Liquidity_Tier = cut(khoi_luong_tb, breaks = c(-Inf, 5000000, 20000000, Inf),
                         labels = c("Thanh khoản thấp", "Thanh khoản trung bình", "Thanh khoản cao"),
                         right = FALSE) ) %>% 
  arrange(Year, Industry_Tag) %>% 
  head(5) %>%
  mutate( gia_tri_tb = round(gia_tri_tb, 2), khoi_luong_tb = comma(khoi_luong_tb, accuracy = 1) ) %>%
  kable(caption = "Phân tích đặc tính Ngành tại Mỹ theo Năm",col.names = c("Năm", "Ngành", "Giá TB", "KLGD TB", "Phân loại Giá", "Phân loại KL"),
    align = 'l') %>%kable_styling( latex_options = c("striped", "hold_position", "scale_down"), full_width = FALSE)
Phân tích đặc tính Ngành tại Mỹ theo Năm
Năm Ngành Giá TB KLGD TB Phân loại Giá Phân loại KL
2000 apparel 3.75 7,902,543 Giá thấp Thanh khoản trung bình
2000 aviation 13.36 2,735,833 Giá thấp Thanh khoản thấp
2000 consumer goods 17.90 6,976,633 Giá thấp Thanh khoản trung bình
2000 e-commerce 2.33 175,159,333 Giá thấp Thanh khoản cao
2000 entertainment 28.78 5,991,648 Giá thấp Thanh khoản trung bình

Giải thích: (1-2)Trích xuất Năm (mutate). (3) Nhóm dữ liệu (group_by). (4-10) Tính toán các chỉ số thống kê (summarise). (11-15) Sắp xếp (arrange) và Định dạng (mutate). (16-18) Tạo bảng hiển thị (kablekable_styling)

Ý nghĩa: 1. Tâm chấn của Bong bóng Dot-com: “Giá thấp - Thanh khoản cao”

Đây là câu chuyện chính của bảng dữ liệu này.

  • Ngành: e-commerce (Thương mại điện tử) và technology (Công nghệ).
    • e-commerce: Giá TB chỉ 2.33 USD nhưng KLGD TB lên tới 175 triệu cổ phiếu.
    • technology: Giá TB 21.12 USD và KLGD TB là 111 triệu cổ phiếu.
  • Ý nghĩa kinh tế:
    • Đây là dấu hiệu kinh điển của một bong bóng đầu cơ. Khối lượng giao dịch khổng lồ trên các cổ phiếu có thị giá trung bình cực thấp cho thấy hàng triệu nhà đầu tư (đặc biệt là nhà đầu tư cá nhân) đang đổ xô mua bán những cổ phiếu này với hy vọng làm giàu nhanh chóng.
    • Họ không đầu tư dựa trên giá trị cơ bản (lợi nhuận, doanh thu) mà dựa trên sự kỳ vọng và tâm lý bầy đàn. Bất kỳ công ty nào có đuôi “.com” đều được săn đón, tạo ra một mức độ giao dịch điên cuồng. Hai ngành này chính là “sân khấu chính” của toàn bộ thị trường.
  1. Hiện tượng “Thị trường giá rẻ”

    Một đặc điểm gây kinh ngạc là 100% các ngành trong danh sách đều được phân loại là “Giá thấp” (Giá TB < 100 USD).

  • Ý nghĩa kinh tế:
    • Bùng nổ IPO: Giai đoạn cuối những năm 1990 chứng kiến một làn sóng IPO (phát hành cổ phiếu lần đầu ra công chúng) khổng lồ của các công ty công nghệ. Các công ty mới này thường có giá cổ phiếu khởi điểm thấp.
    • Sự tham gia của đại chúng: Cổ phiếu giá rẻ dễ tiếp cận hơn với các nhà đầu tư cá nhân, những người cảm thấy hấp dẫn khi có thể mua hàng trăm hoặc hàng nghìn cổ phiếu thay vì chỉ một vài cổ phiếu đắt tiền. Điều này đã kéo một lượng lớn vốn từ công chúng vào thị trường, tiếp thêm nhiên liệu cho bong bóng.
  1. Sự Phân Hóa Sâu Sắc giữa “Kinh tế Mới” và “Kinh tế Cũ”
    • Nhóm Thanh khoản cao: Chỉ có e-commercetechnology.
    • Nhóm Thanh khoản trung bình: Các ngành lớn, truyền thống hơn nhưng vẫn có sức hút như apparel (may mặc), consumer goods (hàng tiêu dùng), finance (tài chính).
    • Nhóm Thanh khoản thấp: Các ngành công nghiệp cốt lõi, “xương sống” của nền kinh tế như aviation (hàng không), food (thực phẩm), manufacturing (sản xuất), logistics.
  • Ý nghĩa kinh tế:
    • Bảng này cho thấy một sự “bỏ rơi” rõ rệt của dòng tiền đối với các ngành kinh tế truyền thống. Các nhà đầu tư đã rút vốn khỏi các công ty sản xuất, thực phẩm ổn định nhưng “nhàm chán” để đuổi theo những giấc mơ công nghệ.
    • Thanh khoản là thước đo sự quan tâm. Việc các ngành công nghiệp nặng có thanh khoản thấp cho thấy chúng không còn là tâm điểm của các cuộc thảo luận hay các dòng vốn đầu cơ nữa.

3.8.Phân tổ mối quan hệ giữa giá và khối lượng theo ngành theo germany và theo tháng

d %>% filter(Country == "germany") %>%
  mutate( Date = as.Date(Date), Month = month(Date, label = TRUE, abbr = FALSE)) %>%
  group_by(Month, Industry_Tag) %>%
  summarise(gia_tri_tb = mean(Close, na.rm = TRUE), khoi_luong_tb = mean(Volume, na.rm = TRUE),
    .groups = "drop") %>% mutate(
    Price_Tier = cut(gia_tri_tb,breaks = c(-Inf, 100, 300, Inf),
                     labels = c("Giá thấp", "Giá trung bình", "Giá cao"),right = FALSE),
    Liquidity_Tier = cut(khoi_luong_tb,breaks = c(-Inf, 5000000, 20000000, Inf),
                         labels = c("Thanh khoản thấp", "Thanh khoản trung bình", "Thanh khoản cao"),
                         right = FALSE)) %>%
  arrange(Month, Industry_Tag) %>%
  head(5) %>%
  mutate( gia_tri_tb = round(gia_tri_tb, 2), khoi_luong_tb = comma(khoi_luong_tb, accuracy = 1) ) %>%
  select(Tháng = Month, Ngành = Industry_Tag, `Giá TB` = gia_tri_tb, 
         `KLGD TB` = khoi_luong_tb, `Phân loại Giá` = Price_Tier, `Phân loại KL` = Liquidity_Tier) %>%
  kable( caption = "Phân tích đặc tính Ngành tại Đức theo Tháng",
    align = 'l' ) %>%
  kable_styling( latex_options = c("striped", "hold_position", "scale_down"), full_width = FALSE)
Phân tích đặc tính Ngành tại Đức theo Tháng
Tháng Ngành Giá TB KLGD TB Phân loại Giá Phân loại KL
January apparel 63.01 32,950 Giá thấp Thanh khoản thấp
January automotive 37.64 93,028 Giá thấp Thanh khoản thấp
February apparel 61.93 38,048 Giá thấp Thanh khoản thấp
February automotive 36.88 75,268 Giá thấp Thanh khoản thấp
March apparel 59.85 43,874 Giá thấp Thanh khoản thấp

Giải thích: (1-2)Trích xuất Năm (mutate). (3) Nhóm dữ liệu (group_by). (4-10) Tính toán các chỉ số thống kê (summarise). (11-15) Sắp xếp (arrange) và Định dạng (mutate). (16-18) Tạo bảng hiển thị (kablekable_styling)

Ý nghĩa:

  1. Sự Thống Trị Tuyệt Đối của Phân loại “Giá thấp - Thanh khoản thấp”

Đây là phát hiện nổi bật và quan trọng nhất. Mọi dòng dữ liệu, qua tất cả các tháng, cho cả hai ngành, đều rơi vào cùng một phân loại. Điều này có ý nghĩa sâu sắc:

  • Không có “Cơn sốt” Giao dịch: Khối lượng giao dịch trung bình (KLGD TB) cực kỳ thấp, chỉ ở mức vài chục nghìn, đôi khi hơn một trăm nghìn. Con số này chỉ là một phần rất nhỏ so với hàng triệu hay hàng chục triệu cổ phiếu được giao dịch ở các ngành tương ứng tại Mỹ. Điều này cho thấy thị trường thiếu vắng các hoạt động giao dịch lướt sóng, đầu cơ ngắn hạn.
  • Thị trường Trầm lắng (Subdued Market): Thay vì những phiên giao dịch bùng nổ, thị trường Đức thể hiện một sự “điềm tĩnh”. Các nhà đầu tư ở đây dường như không tham gia vào các giao dịch tần suất cao.
  1. Phản ánh Bản chất của Nền kinh tế Đức

Kết quả này không phải là ngẫu nhiên, mà nó phản ánh chính xác cấu trúc kinh tế và văn hóa đầu tư của Đức:

  • Các Tập đoàn Công nghiệp Lâu đời: Các ngành như automotive (ô tô) và apparel (may mặc, có thể bao gồm cả các thương hiệu thể thao lớn như Adidas) là những trụ cột của nền kinh tế Đức. Chúng là những công ty trưởng thành, không phải là các startup công nghệ tăng trưởng nóng.
  • Cơ cấu Cổ đông Chặt chẽ: Rất nhiều tập đoàn lớn của Đức có cơ cấu cổ đông cô đặc. Một phần lớn cổ phiếu thường được nắm giữ dài hạn bởi các gia tộc sáng lập, các ngân hàng lớn, hoặc các nhà đầu tư chiến lược khác. Điều này dẫn đến lượng cổ phiếu lưu hành tự do (free-float) trên thị trường thấp, và do đó, thanh khoản giao dịch hàng ngày cũng thấp.
  1. Hành vi của Nhà đầu tư: “Mua và Nắm giữ” là chủ đạo

Dữ liệu cho thấy một chiến lược đầu tư rất khác so với Mỹ:

  • Ưu tiên Giá trị và Cổ tức: Thay vì tìm kiếm lợi nhuận nhanh chóng từ biến động giá, các nhà đầu tư vào thị trường Đức có xu hướng là nhà đầu tư giá trị (value investors). Họ mua cổ phiếu của các công ty vững mạnh và nắm giữ lâu dài để nhận cổ tức và hưởng lợi từ sự tăng trưởng ổn định của công ty.
  • Ít bị ảnh hưởng bởi tâm lý đám đông: Sự ổn định về cả giá và khối lượng qua các tháng cho thấy thị trường ít bị chi phối bởi các tin tức ngắn hạn hay tâm lý bầy đàn, vốn là đặc trưng của các thị trường có tính đầu cơ cao.
  1. Phân tích các Xu hướng Nhỏ trong Bảng

Mặc dù có sự nhất quán chung, chúng ta vẫn có thể thấy một vài điểm thú vị:

  • Sự ổn định về giá: Mức giá trung bình của cả hai ngành đều dao động trong một biên độ rất hẹp qua 8 tháng. Ví dụ, automotive luôn duy trì quanh mức $36-$37. Điều này củng cố thêm cho nhận định về một thị trường ổn định.
  • Biến động nhẹ về khối lượng: Ngành automotive có khối lượng giao dịch tăng đột biến nhẹ vào tháng Ba và tháng Năm. Điều này có thể trùng với các sự kiện của công ty như báo cáo kết quả kinh doanh quý, đại hội cổ đông, hoặc các thông báo quan trọng, thu hút sự chú ý tạm thời của thị trường.

3.9.Phân tổ mối quan hệ giữa giá và khối lượng theo ngành theo germany và theo năm

d %>%
  filter(Country == "germany") %>%
  mutate(Date = as.Date(Date),Year = year(Date)) %>%
  group_by(Year, Industry_Tag) %>%
  summarise(gia_tri_tb = mean(Close, na.rm = TRUE),
    khoi_luong_tb = mean(Volume, na.rm = TRUE),.groups = "drop") %>%
  mutate(Price_Tier = cut(gia_tri_tb, breaks = c(-Inf, 100, 300, Inf),
                     labels = c("Giá thấp", "Giá trung bình", "Giá cao"),right = FALSE),
    Liquidity_Tier = cut(khoi_luong_tb, breaks = c(-Inf, 5000000, 20000000, Inf),
                         labels = c("Thanh khoản thấp", "Thanh khoản trung bình", "Thanh khoản cao"),
                         right = FALSE)) %>%
  arrange(Year, Industry_Tag) %>%
  head(5) %>%
  mutate(gia_tri_tb = round(gia_tri_tb, 2),
    khoi_luong_tb = comma(khoi_luong_tb, accuracy = 1)) %>%
  select(Năm = Year, Ngành = Industry_Tag, `Giá TB` = gia_tri_tb, 
         `KLGD TB` = khoi_luong_tb, `Phân loại Giá` = Price_Tier, `Phân loại KL` = Liquidity_Tier) %>%
  kable( caption = "Phân tích đặc tính Ngành tại Đức theo Năm",
    align = 'l' ) %>%
  kable_styling(latex_options = c("striped", "hold_position", "scale_down"),full_width = FALSE)
Phân tích đặc tính Ngành tại Đức theo Năm
Năm Ngành Giá TB KLGD TB Phân loại Giá Phân loại KL
2006 apparel 19.20 24,752 Giá thấp Thanh khoản thấp
2007 apparel 23.92 41,278 Giá thấp Thanh khoản thấp
2008 apparel 23.03 56,483 Giá thấp Thanh khoản thấp
2009 apparel 17.57 37,355 Giá thấp Thanh khoản thấp
2009 automotive 25.65 1,199 Giá thấp Thanh khoản thấp

Giải thích: (1-3)Trích xuất Năm (mutate). (4) Nhóm dữ liệu (group_by). (5-11) Tính toán các chỉ số thống kê (summarise). (12-17) Sắp xếp (arrange) và Định dạng (mutate). (18-20) Tạo bảng hiển thị (kablekable_styling)

Ý nghĩa: 1. Sự nhất quán đáng kinh ngạc: “Giá thấp - Thanh khoản thấp” là quy luật

Đây là điểm cốt lõi của toàn bộ phân tích.

  • Thanh khoản cực thấp (Low Liquidity): Khối lượng giao dịch trung bình (KLGD TB) rất thấp, chỉ vài chục nghìn cổ phiếu, thậm chí có năm chỉ hơn 1,000 (ngành ô tô năm 2009). Con số này cho thấy:
    • Thiếu vắng hoạt động đầu cơ: Không có các hoạt động mua bán lướt sóng, giao dịch tần suất cao.
    • Chiến lược “Mua và Nắm giữ” (Buy and Hold): Các nhà đầu tư (cả tổ chức và cá nhân) có xu hướng mua cổ phiếu của các công ty công nghiệp hàng đầu và nắm giữ lâu dài, tin tưởng vào sức mạnh sản xuất và giá trị bền vững của doanh nghiệp.
    • Cơ cấu sở hữu cô đặc: Nhiều tập đoàn Đức có một tỷ lệ lớn cổ phiếu được nắm giữ bởi các gia tộc, các ngân hàng hoặc các nhà đầu tư chiến lược, làm giảm lượng cổ phiếu lưu hành tự do (free-float) trên thị trường.
  • Mức giá trung bình thấp (Low Price): Hầu hết các mức giá trung bình đều dưới 50 USD. Điều này không có nghĩa là các công ty Đức “rẻ tiền”, mà phản ánh một thị trường của các công ty đã trưởng thành, có thể đã thực hiện nhiều lần chia tách cổ phiếu, và không có sự tăng giá “bong bóng” như các cổ phiếu công nghệ ở Mỹ.
  1. Phản ứng với Khủng hoảng Tài chính Toàn cầu 2008 (GFC)

Giai đoạn 2006-2014 bao trọn cuộc khủng hoảng tài chính, và dữ liệu này cho thấy cách thị trường Đức phản ứng.

  • Tác động của khủng hoảng:
    • Nhìn vào ngành apparel (may mặc), Giá TB giảm từ 23.03 (2008) xuống còn 17.57 (2009). Đây là tác động rõ ràng của cuộc suy thoái kinh tế toàn cầu.
    • Đặc biệt, ngành automotive (ô tô) năm 2009 có KLGD TB chỉ 1,199. Đây là con số cực kỳ thấp, cho thấy thị trường gần như “đóng băng”. Các nhà đầu tư trong giai đoạn khủng hoảng đã co cụm lại, ngừng giao dịch, thể hiện sự thận trọng tột độ.
  • Sự phục hồi bền bỉ, không đầu cơ:
    • Sau năm 2009, Giá TB của cả hai ngành đều có xu hướng tăng trở lại một cách từ từ và ổn định. Ví dụ, apparel tăng đều đặn từ 17.57 lên 37.35 vào năm 2013.
    • Đây không phải là một sự phục hồi hình chữ V bùng nổ do đầu cơ, mà là một sự phục hồi vững chắc, song hành với sự phục hồi của nền kinh tế thực. Nó củng cố thêm hình ảnh về một thị trường dựa trên các yếu tố cơ bản.
  1. Bản chất của các Ngành Xương sống
  • Ngành automotiveapparel là những ngành công nghiệp sản xuất cốt lõi, là niềm tự hào của Đức. Chúng được xây dựng dựa trên kỹ thuật, chất lượng và thương hiệu lâu đời.
  • Các nhà đầu tư vào những ngành này không tìm kiếm sự tăng trưởng đột phá X5, X10 trong một năm, mà tìm kiếm sự ổn định, cổ tức đều đặn và sự an toàn của một khoản đầu tư vào các “gã khổng lồ” công nghiệp.

3.10.Phân tổ mối quan hệ giữa giá và khối lượng theo ngành theo quốc gia và theo năm và có chia cổ tức

d %>%filter(Dividends > 0) %>%
  mutate( Date = as.Date(Date),Year = year(Date)) %>%
  group_by(Year, Industry_Tag, Country) %>%
  summarise(gia_tri_tb = mean(Close, na.rm = TRUE),
    khoi_luong_tb = mean(Volume, na.rm = TRUE),
    co_tuc_tb = mean(Dividends, na.rm = TRUE),.groups = "drop" ) %>%
  mutate( Price_Tier = cut(gia_tri_tb, breaks = c(-Inf, 100, 300, Inf),
                     labels = c("Giá thấp", "Giá trung bình", "Giá cao"), right = FALSE),
  Liquidity_Tier = cut(khoi_luong_tb,breaks = c(-Inf, 3000000, 10000000, Inf),
                         labels = c("Thanh khoản thấp", "Thanh khoản trung bình", "Thanh khoản cao"),right = FALSE)) %>%
  arrange(Year, Country, Industry_Tag) %>% head(5) %>%
  mutate(gia_tri_tb = round(gia_tri_tb, 2), khoi_luong_tb = comma(khoi_luong_tb, accuracy = 1),
    co_tuc_tb = round(co_tuc_tb, 4)  ) %>%
  select(Năm = Year, Ngành = Industry_Tag, Quốc_gia = Country, 
         `Giá TB` = gia_tri_tb, `KLGD TB` = khoi_luong_tb, `Cổ tức TB` = co_tuc_tb,
         `Phân loại Giá` = Price_Tier, `Phân loại KL` = Liquidity_Tier) %>%
  kable(caption = "Phân tích đặc tính các Ngành có chia cổ tức theo Năm và Quốc gia",
    align = 'l') %>%
  kable_styling(latex_options = c("striped", "hold_position", "scale_down"),full_width = FALSE)
Phân tích đặc tính các Ngành có chia cổ tức theo Năm và Quốc gia
Năm Ngành Quốc_gia Giá TB KLGD TB Cổ tức TB Phân loại Giá Phân loại KL
2000 automotive japan 39.69 60,900 0.1207 Giá thấp Thanh khoản thấp
2000 consumer goods netherlands 7.33 265,410 0.2311 Giá thấp Thanh khoản thấp
2000 technology netherlands 22.80 3,266,400 0.7304 Giá thấp Thanh khoản trung bình
2000 apparel usa 3.94 13,033,600 0.0075 Giá thấp Thanh khoản cao
2000 aviation usa 13.48 2,232,488 0.0040 Giá thấp Thanh khoản thấp

Giải thích: (1-3)Trích xuất Năm (mutate). (4) Nhóm dữ liệu (group_by). (5-11) Tính toán các chỉ số thống kê (summarise). (12-17) Sắp xếp (arrange) và Định dạng (mutate). (18-20) Tạo bảng hiển thị (kablekable_styling)

*8Ys nghĩa:** 1. Câu chuyện ở Mỹ: “Cổ tức tượng trưng” trong một thị trường “khát” tăng trưởng

Đây là điểm nổi bật nhất khi nhìn vào các ngành của Mỹ. * Nhóm “Thanh khoản cao” (apparel, technology): KLGD TB rất lớn (trên 10 triệu), cho thấy các cổ phiếu này vẫn được giao dịch cực kỳ sôi động. * Điểm mấu chốt: Cổ tức TB lại cực kỳ thấp (0.0075 và 0.0063). * Ý nghĩa: Đây là bằng chứng rõ ràng cho thấy các công ty Mỹ, dù đã có lợi nhuận để trả cổ tức, vẫn giữ lại gần như toàn bộ tiền để tái đầu tư cho tăng trưởng. Việc trả cổ tức chỉ mang tính “tượng trưng” để làm hài lòng một bộ phận cổ đông. Các nhà đầu tư vẫn mua bán chúng vì kỳ vọng vào sự tăng giá cổ phiếu, chứ không phải vì dòng tiền từ cổ tức.

  • Các ngành khác của Mỹ: Hầu hết đều có thanh khoản từ thấp đến trung bình, nhưng mức cổ tức cũng không quá cao, phản ánh chung một văn hóa doanh nghiệp tập trung vào việc giữ lại lợi nhuận.
  1. Câu chuyện ở châu Âu & Nhật Bản: “Giá trị thực” và sự điềm tĩnh
  • Nhóm “Thanh khoản thấp” (automotive - Nhật, consumer goods - Hà Lan): KLGD TB rất thấp (vài chục đến vài trăm nghìn), cho thấy một thị trường ít đầu cơ, nơi nhà đầu tư có xu hướng “mua và nắm giữ”.
    • Điểm mấu chốt: Cổ tức TB lại cao hơn đáng kể (0.1207 và 0.2311).
    • Ý nghĩa: Đây là các công ty “giá trị” kinh điển. Ban lãnh đạo thực sự ưu tiên việc chia sẻ lợi nhuận cho cổ đông. Nhà đầu tư tìm đến các cổ phiếu này vì sự ổn định và dòng tiền cổ tức đều đặn, chứ không phải để lướt sóng.
  1. Công nghệ từ Hà Lan
  • Ngành technology tại Hà Lan là một trường hợp ngoại lệ cực kỳ thú vị.
    • Dữ liệu: Thanh khoản ở mức “trung bình” (3.2 triệu), cho thấy cổ phiếu vẫn có sức hút.
    • Điểm mấu chốt: Cổ tức TB cao nhất bảng (0.7304).
    • Ý nghĩa: Điều này cho thấy sự tồn tại của các tập đoàn công nghệ lớn, trưởng thành và rất lợi nhuận ở châu Âu. Họ là một mô hình “lai” hoàn hảo: vừa đủ hấp dẫn để được giao dịch sôi động, vừa có chính sách cổ tức cực kỳ hào phóng, thể hiện một sức khỏe tài chính vững mạnh.

4.Phân tích và trực quan hóa dữ liệu

4.1.Phân tích biến ngành

4.1.1.Lập bảng thống kê mô tả giá cổ phiếu theo năm

Đoạn code này lấy dữ liệu giao dịch hàng ngày, gom chúng lại theo từng năm, rồi tính ra một bảng tóm tắt cho mỗi năm. Cụ thể, nó tính các chỉ số quan trọng như giá trung bình, giá cao nhất, giá thấp nhất và độ biến động trong năm đó. Kết quả cuối cùng là một bảng thống kê gọn gàng, giúp ta dễ dàng nhìn thấy xu hướng của thị trường qua các năm.

d %>% mutate(Year = year(Date)) %>%
  group_by(Year) %>%summarise( so_giao_dich = n(),
    gia_tri_trung_binh = mean(Close, na.rm = TRUE),
    gia_tri_trung_vi = median(Close, na.rm = TRUE),
    do_lech_chuan = sd(Close, na.rm = TRUE),
    gia_tri_nho_nhat = min(Close, na.rm = TRUE),
    gia_tri_lon_nhat = max(Close, na.rm = TRUE) ) %>%
  arrange(Year) %>%
  mutate(so_giao_dich = comma(so_giao_dich),across(gia_tri_trung_binh:gia_tri_lon_nhat, ~ round(.x, 2))) %>%
  kable(caption = "Bảng thống kê mô tả giá cổ phiếu theo năm",col.names = c("Năm", "Số Giao Dịch", "Giá TB", "Giá Trung Vị", "Độ Lệch Chuẩn", "Giá Thấp Nhất", "Giá Cao Nhất"),
    align = c('c', 'r', 'r', 'r', 'r', 'r', 'r')) %>%
  kable_styling( latex_options = c("striped", "hold_position", "scale_down"), full_width = FALSE)
Bảng thống kê mô tả giá cổ phiếu theo năm
Năm Số Giao Dịch Giá TB Giá Trung Vị Độ Lệch Chuẩn Giá Thấp Nhất Giá Cao Nhất
2000 8,568 18.55 16.86 14.05 0.21 80.36
2001 8,432 16.38 16.28 10.80 0.23 56.23
2002 8,722 15.26 13.92 11.07 0.21 51.70
2003 8,820 15.52 13.77 12.15 0.20 65.52
2004 9,048 19.19 16.00 15.10 0.32 85.72
2005 9,324 21.22 17.40 16.64 0.96 89.46
2006 10,283 24.48 20.11 19.67 1.30 107.02
2007 10,710 28.36 22.76 22.61 1.82 152.36
2008 11,079 23.46 18.93 19.04 0.94 146.67
2009 11,311 20.34 15.64 16.60 1.11 97.05
2010 11,952 26.42 20.97 25.47 1.05 258.82
2011 12,096 31.88 23.45 42.12 0.96 343.52
2012 12,092 36.06 26.32 50.19 1.13 440.40
2013 12,361 45.19 31.97 58.14 1.87 546.97
2014 12,600 56.45 42.02 84.03 2.47 692.69
2015 12,786 63.31 47.66 92.12 1.62 757.77
2016 13,104 59.90 47.56 63.77 1.80 533.69
2017 13,052 72.25 52.83 64.00 4.10 496.14
2018 13,241 91.28 65.04 79.51 4.68 525.89
2019 13,942 103.74 72.83 110.62 4.71 851.54
2020 14,583 130.23 90.16 160.69 2.71 1426.30
2021 15,258 180.49 142.12 222.30 6.01 1944.05
2022 15,311 146.02 106.35 201.88 5.00 1747.94
2023 15,348 160.52 102.40 254.48 4.06 2340.00
2024 17,248 181.73 119.36 277.13 2.21 3427.61
2025 8,851 181.17 112.44 206.03 1.89 1339.13

Giải thích: (1)Trích xuất Năm (mutate). (2) Nhóm dữ liệu (group_by). (3-7) Tính toán các chỉ số thống kê (summarise). (8-10) Sắp xếp (arrange) và Định dạng (mutate). (11-13) Tạo bảng hiển thị (kablekable_styling)

Ý nghĩa:

  1. Số Giao Dịch: Thị trường ngày càng lớn mạnh
  • Xu hướng: Cột Số Giao Dịch tăng gần như liên tục từ 8,568 (năm 2000) lên 17,248 (năm 2024).
  • Ý nghĩa: Điều này cho thấy thị trường ngày càng trở nên sôi động, sâu rộng và thu hút nhiều người tham gia hơn. Sự gia tăng số lượng công ty niêm yết và sự phổ biến của giao dịch trực tuyến đã góp phần vào xu hướng này.
  1. Giá TB và Giá Trung Vị: Sự Tăng trưởng và Phân hóa
  • Xu hướng: Giá TB đã tăng một cách ngoạn mục, từ 18.55 (năm 2000) lên 181.73 (năm 2024), tăng gần 10 lần.
  • Khoảng cách ngày càng lớn: Điều quan trọng nhất là khoảng cách giữa Giá TBGiá Trung Vị ngày càng bị nới rộng.
    • Năm 2000: 18.55 vs 16.86 (chênh lệch nhỏ).
    • Năm 2024: 181.73 vs 119.36 (chênh lệch rất lớn).
  • Ý nghĩa: Điều này cho thấy sự phân hóa cực kỳ sâu sắc trên thị trường. Một số ít các cổ phiếu “siêu sao” (như các công ty công nghệ lớn) có mức giá cực cao đã “kéo” giá trị trung bình lên một cách mạnh mẽ, trong khi giá trị của một nửa số công ty trên thị trường (đại diện bởi giá trung vị) vẫn thấp hơn nhiều.
  1. Độ Lệch Chuẩn: Rủi ro ngày càng tăng
  • Xu hướng: Đây là chỉ số đáng báo động nhất. Độ Lệch Chuẩn (thước đo biến động/rủi ro) đã tăng vọt một cách phi mã.
    • Giai đoạn 2000-2007: Luôn dưới 23, tương đối ổn định.
    • Giai đoạn sau 2011: Bắt đầu tăng tốc.
    • Giai đoạn 2020-2024: Tăng lên các mức kỷ lục, đạt 277.13 vào năm 2024.
  • Ý nghĩa: Thị trường đã trở nên biến động và rủi ro hơn bao giờ hết. Mức độ dao động giá trong ngày, trong tuần của các cổ phiếu ngày càng lớn. Điều này được thúc đẩy bởi sự thống trị của các cổ phiếu công nghệ vốn có tính biến động cao, và sự gia tăng của các hoạt động giao dịch tần suất cao.
  1. Biên độ Giá (Giá Thấp Nhất và Cao Nhất): Sự “Điên rồ” của thị trường
  • Xu hướng: Cột Giá Cao Nhất đã tăng từ 80.36 (năm 2000) lên một con số đáng kinh ngạc là 3427.61 (năm 2024).
  • Ý nghĩa: Điều này phản ánh sự ra đời và thống trị của các cổ phiếu có thị giá cực kỳ cao (ví dụ: Amazon, Berkshire Hathaway loại A…). Nó cho thấy thị trường hiện tại có khả năng tạo ra những “gã khổng lồ” với giá trị vượt xa những gì có thể tưởng tượng được 25 năm trước.

Biểu đồ 1. Sự tăng trưởng và phân hóa của giá cổ phiếu

library(ggplot2)
thong_ke_mo_ta <- d  %>%
  mutate(Year = year(Date)) %>%
  group_by(Year) %>%   
  summarise(
    so_giao_dich = n(),
    gia_tri_trung_binh = mean(Close, na.rm = TRUE),  
    gia_tri_trung_vi = median(Close, na.rm = TRUE),  
    do_lech_chuan = sd(Close, na.rm = TRUE),         
    gia_tri_nho_nhat = min(Close, na.rm = TRUE),    
    gia_tri_lon_nhat = max(Close, na.rm = TRUE),   
    tong_gia_tri = sum(Close, na.rm = TRUE) ) %>%
  arrange(Year)
p2 <- ggplot(thong_ke_mo_ta, aes(x = Year)) +
  geom_line(aes(y = gia_tri_trung_binh, color = "Giá trị Trung bình"), size = 1.2) +
  geom_line(aes(y = gia_tri_trung_vi, color = "Giá trị Trung vị"), size = 1.2, linetype = "dashed") +
  scale_color_manual(values = c("Giá trị Trung bình" = "blue", "Giá trị Trung vị" = "darkgreen")) +
  scale_y_continuous(labels = scales::dollar) + labs(title = "Sự Tăng Trưởng và Phân Hóa Của Giá Cổ Phiếu", x = "Năm",
    y = "Giá trị (USD)", color = "Chỉ số" ) +theme_light() +theme(legend.position = "top")
print(p2)

Giải thích: (1) Nạp thư viện cần thiết cho phiền làm việc. (2-13) Xử lý và Tổng hợp dữ liệu,trích xuất Năm (mutate), Nhóm dữ liệu (group_by), Tính toán các chỉ số thống kê (summarise). Sắp xếp (arrange) và Định dạng (mutate). (14) Vẽ Biểu đồ (ggplot2). (15) Vẽ đường Giá trị Trung bình. (16) Vẽ đường Giá trị Trung vị. (17) Tùy chỉnh màu sắc. (18-19) Tùy chỉnh trục Y. (20) in biểu đồ.

Ý nghĩa:

Giai đoạn 1: 2000 - 2010 (Thị trường tương đối đồng đều)

  • Quan sát: Hai đường “Giá trị Trung bình” và “Giá trị Trung vị” di chuyển rất gần nhau và tương đối bằng phẳng.
  • Ý nghĩa: Trong thập kỷ này (sau khi bong bóng Dot-com vỡ), không có sự chênh lệch quá lớn giữa các cổ phiếu. Giá của một công ty trung bình không quá khác biệt so với giá của công ty “điển hình”. Thị trường tăng trưởng một cách đồng đều hơn.

Giai đoạn 2: 2011 - 2019 (Bắt đầu phân hóa)

  • Quan sát: Khoảng cách giữa hai đường bắt đầu nới rộng ra một cách rõ rệt. Đường trung bình (màu xanh) bắt đầu tăng tốc nhanh hơn hẳn đường trung vị (màu xanh lá).
  • Ý nghĩa: Đây là kỷ nguyên trỗi dậy của các gã khổng lồ công nghệ (thường được gọi là nhóm FAANG: Facebook, Apple, Amazon, Netflix, Google). Giá trị của các công ty này tăng vọt, bắt đầu “kéo” giá trị trung bình của toàn thị trường lên. Trong khi đó, các công ty “điển hình” khác vẫn tăng trưởng nhưng với tốc độ chậm hơn.

Giai đoạn 3: 2020 - 2025 (Phân hóa tột độ)

  • Quan sát: Khoảng cách giữa hai đường trở nên cực kỳ lớn. Đường trung bình không chỉ tăng vọt lên mức rất cao mà còn có biến động cực mạnh (sụt giảm mạnh rồi phục hồi vào khoảng năm 2021-2022).
  • Ý nghĩa:
    • Hiệu ứng “Kẻ thắng có tất cả” (Winner-Takes-All): Đại dịch COVID-19 đã thúc đẩy quá trình chuyển đổi số, khiến các tập đoàn công nghệ lớn càng trở nên quyền lực và có giá trị hơn bao giờ hết. Sự thống trị của họ lớn đến mức họ gần như một mình kéo chỉ số trung bình của toàn bộ thị trường lên.
    • Sự bất ổn: Sự sụt giảm mạnh của đường trung bình cho thấy thị trường trong giai đoạn này rất nhạy cảm. Chỉ cần nhóm cổ phiếu dẫn đầu điều chỉnh, nó có thể tạo ra tác động rất lớn lên giá trị trung bình chung, ngay cả khi giá của các công ty “điển hình” (đường trung vị) không biến động nhiều như vậy.

4.1.2.Tính toán hệ số biến thiên, độ xiên, và độ nhọn cho Volume theo năm và ngành

library(scales)
library(tidyverse)
library(e1071) 
d %>%
  mutate(Year = year(Date)) %>%
  group_by(Industry_Tag, Year) %>%
  summarise(cv_volume = (sd(Volume, na.rm = TRUE) / mean(Volume, na.rm = TRUE)) * 100,
    skewness_volume = skewness(Volume, na.rm = TRUE),
    kurtosis_volume = kurtosis(Volume, na.rm = TRUE),.groups = 'drop' ) %>%
  arrange(Year, Industry_Tag) %>%
  head(5) %>%
  mutate(across(where(is.numeric), ~ round(.x, 2))) %>%
  kable( caption = "Thống kê mô tả nâng cao cho Khối lượng Giao dịch theo Ngành và Năm",
  col.names = c("Ngành", "Năm", "Hệ số Biến thiên (%)", "Độ xiên", "Độ nhọn"),align = 'l' ) %>%
  kable_styling(latex_options = c("striped", "hold_position", "scale_down"),full_width = FALSE)
Thống kê mô tả nâng cao cho Khối lượng Giao dịch theo Ngành và Năm
Ngành Năm Hệ số Biến thiên (%) Độ xiên Độ nhọn
apparel 2000 81.22 3.66 23.71
automotive 2000 105.50 2.73 10.28
aviation 2000 43.22 1.11 1.74
consumer goods 2000 162.02 8.77 125.97
e-commerce 2000 68.77 3.37 16.43

Giải thích: (1-3) nạp thư viện. (4-9) Xử lý và Tổng hợp dữ liệu. (10-11) Sắp xếp và Lấy mẫu dữ liệu. (12) Định dạng lại số liệu. (13-18) Tạo bảng hiển thị cuối cùng.

Ý nghĩa:

Hệ số Biến thiên (Coefficient of Variation): Đo lường mức độ bất ổn tương đối. * Cao Hàng tiêu dùng 162%: Khối lượng giao dịch của ngành này cực kỳ thất thường, khó dự đoán. Có những ngày giao dịch rất thấp và có những ngày tăng đột biến. Mức độ rủi ro và đầu cơ cao. * Thấp Hàng không 43%: Khối lượng giao dịch ổn định hơn nhiều. Dòng tiền vào ra ngành này đều đặn, dễ đoán hơn. Thị trường ổn định và ít bị sốc thông tin hơn.

  • Độ xiên (Skewness): Đo lường tính bất đối xứng.
    • Tất cả các ngành đều có độ xiên dương (>0).
    • Ý nghĩa kinh tế: Hầu hết các ngày, khối lượng giao dịch ở mức bình thường hoặc thấp. Nhưng thỉnh thoảng, có một vài ngày bùng nổ khối lượng giao dịch cực lớn. Điều này cho thấy thị trường phản ứng rất mạnh với các tin tức bất ngờ (báo cáo lợi nhuận, tin sáp nhập, khủng hoảng…). Độ xiên càng cao (Hàng tiêu dùng 8.77), những ngày bùng nổ này càng dữ dội.
  • Độ nhọn (Kurtosis): Đo lường “độ dày của đuôi”, tức khả năng xảy ra các sự kiện cực đoan (outliers).
    • Cực cao Hàng tiêu dùng 125.97: Cho thấy xác suất xảy ra những ngày giao dịch với khối lượng “dị thường” (cực cao hoặc cực thấp) là rất lớn. Ngành này rất nhạy cảm với các cú sốc.
    • Thấp hơn Hàng không 1.74: Các sự kiện cực đoan ít xảy ra hơn. Giao dịch trong ngành này “hiền hòa” hơn.

Kết luận chung từ bảng: Trong năm 2000, ngành Hàng tiêu dùng (consumer goods) có thị trường đầu cơ và bất ổn nhất, phản ứng dữ dội với các thông tin đột biến. Ngược lại, ngành Hàng không (aviation) có khối lượng giao dịch ổn định và dễ dự đoán nhất trong nhóm này.

4.1.3.Biểu đồ Độ xiên (Skewness) của Volume theo Ngành

descriptive_stats <- d %>% mutate( Year = year(Date) ) %>% 
  group_by(Industry_Tag, Year) %>% 
  summarise(  
    cv_volume = (sd(Volume, na.rm = TRUE) / mean(Volume, na.rm = TRUE)) * 100,
    skewness_volume = skewness(Volume, na.rm = TRUE),
    kurtosis_volume = kurtosis(Volume, na.rm = TRUE),.groups = 'drop' )
p <- ggplot(data = descriptive_stats, aes(x = Industry_Tag, y = skewness_volume, fill = Industry_Tag)) + 
  geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
  labs( title = "Độ Xiên (Skewness) của Khối Lượng Giao Dịch theo Ngành", 
    x = "Ngành", y = "Độ Xiên" ) + theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),legend.position = "none") 
print(p)

Giải thích: (1-6) Xử lý và Tổng hợp dữ liệu. (7) Vẽ Biểu đồ Độ xiên. (8) Vẽ một đường kẻ ngang tại y = 0 (màu đỏ, nét đứt). Đây là đường tham chiếu quan trọng. (9-11) Đặt tiêu đề cho biểu đồ và các trục. (12) In biểu đồ.

So sánh các ngành: * Cột càng cao, mức độ “bùng nổ” của khối lượng giao dịch càng lớn. Tức là sự khác biệt giữa ngày bình thường và ngày có sự kiện lớn là rất rõ rệt. * Ngành có độ xiên cao nhất như: footwear, gaming đây là những ngành rất “nhạy cảm”. Khối lượng giao dịch của chúng có thể tăng vọt một cách dữ dội khi có tin tức quan trọng như ra mắt sản phẩm mới, báo cáo tài chính bất ngờ, hoặc tin đồn M&A. Dòng tiền vào các ngành này mang tính “đầu cơ theo sự kiện” rất cao. * Ngành có độ xiên thấp hơn: cryptocurrency, fitness Khối lượng giao dịch ở các ngành này ổn định hơn. Mặc dù vẫn có những ngày giao dịch sôi động, nhưng sự chênh lệch so với ngày bình thường không quá cực đoan như các ngành kia.

Biểu đồ 2.Độ nhọn (Kurtosis) của Volume theo Ngành

kurtosis_plot <- ggplot(data = descriptive_stats, aes(x = Industry_Tag, y = kurtosis_volume, fill = Industry_Tag)) +
  geom_bar(stat = "identity") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "blue") +
  labs( title = "Độ Nhọn (Kurtosis) của Khối Lượng Giao Dịch theo Ngành",
    x = "Ngành", y = "Độ Nhọn (Dư)" ) +theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "none")
print(kurtosis_plot) 

Giải thích: (1) Khởi tạo biểu đồ. (2) Thêm lớp biểu đồ cột. (3) Thêm đường tham chiếu ngang. (4-5) Thêm tiêu đề và nhãn. (6-7) Tinh chỉnh giao diện. (8) in biểu đồ

“Ngành nào có rủi ro về những cú sốc thanh khoản cực đoan nhất?”

  1. “Độ Nhọn” (Kurtosis) là gì?
    • Trong tài chính, Độ Nhọn là thước đo cho “Rủi ro Đuôi Dày” (Fat-Tail Risk). Nó cho biết xác suất xảy ra những sự kiện cực đoan, bất ngờ (khối lượng giao dịch tăng vọt hoặc giảm sâu một cách khủng khiếp) là cao hay thấp.
    • Cột càng cao, rủi ro về những cú sốc thanh khoản (những ngày có khối lượng giao dịch cực kỳ bất thường) càng lớn. Những ngành này có nhiều khả năng trải qua những ngày giao dịch “thiên nga đen”.
  2. Phân tích Biểu đồ:
    • Ngành có Độ nhọn cao nhất (ví dụ: footwear, gaming, hospitality): Đây là những ngành có “rủi ro đuôi dày” lớn nhất. Điều này có nghĩa là khối lượng giao dịch trong các ngành này không chỉ biến động, mà còn có nguy cơ rất cao xảy ra những phiên giao dịch với khối lượng cực kỳ đột biến, vượt xa mọi dự đoán thông thường. Dòng tiền trong các ngành này có thể bị ảnh hưởng mạnh bởi các yếu tố khó lường như xu hướng lan truyền trên mạng xã hội (viral trends), sự kiện bất ngờ, hoặc tâm lý đầu cơ cực đoan.
    • Ngành có Độ nhọn thấp hơn (ví dụ: cryptocurrency, social media): Các ngành này, mặc dù vẫn có biến động, nhưng ít có khả năng xảy ra những cú sốc thanh khoản ở mức độ cực đoan. Sự biến động của chúng có thể diễn ra trong một phạm vi “dự đoán được” hơn.

4.1.4.Tính hệ số tương quan giữa Volume và Close

correlation_result <- cor(d$Volume, d$Close, use = "complete.obs")
cat("Hệ số tương quan giữa Volume và Close là:", correlation_result)
## Hệ số tương quan giữa Volume và Close là: -0.07304574

Giải thích: Kết quả Hệ số tương quan là: -0.07304574 có ý nghĩa kinh tế rất quan trọng:

Gần như không có tương quan tuyến tính: Hệ số tương quan nằm trong khoảng từ -1 đến +1.Và giá trị -0.073cực kỳ gần 0. Điều này chứng tỏ rằng, khi xét trên toàn bộ bộ dữ liệu (bao gồm nhiều cổ phiếu khác nhau qua nhiều năm), không có một mối quan hệ tuyến tính đơn giản và rõ ràng nào giữa khối lượng giao dịch trong ngày và giá đóng cửa của ngày hôm đó.

4.1.5.Tính giá trị giao dịch theo ngành và theo quốc gia

gia_tri_giao_dich <- d %>%
  mutate(gia_tri_giao_dich = Close * Volume) %>%  
  group_by(Country, Industry_Tag) %>%          
  summarise(tong_gia_tri = sum(gia_tri_giao_dich, na.rm = TRUE),.groups = 'drop') %>%
  arrange(Country, Industry_Tag)  
kable(gia_tri_giao_dich)
Country Industry_Tag tong_gia_tri
canada e-commerce 2.070597e+12
france gaming 2.777209e+09
france luxury goods 5.119930e+10
germany apparel 2.158194e+10
germany automotive 7.762324e+09
japan automotive 3.382736e+11
japan gaming 6.764484e+10
netherlands consumer goods 2.935208e+11
netherlands technology 1.661244e+11
switzerland technology 1.183276e+11
usa apparel 2.855694e+12
usa automotive 3.744710e+13
usa aviation 2.652111e+12
usa consumer goods 4.946954e+12
usa cryptocurrency 1.926475e+12
usa e-commerce 2.224315e+13
usa entertainment 1.190645e+13
usa finance 1.654237e+13
usa financial services 2.110229e+12
usa fitness 6.577135e+11
usa food 4.328873e+12
usa food & beverage 5.930393e+12
usa footwear 7.582314e+11
usa gaming 7.719001e+11
usa healthcare 4.302222e+12
usa hospitality 2.814471e+12
usa logistics 1.749699e+12
usa manufacturing 1.798377e+12
usa music 8.471361e+11
usa retail 9.256578e+12
usa social media 6.675816e+11
usa technology 1.230582e+14

Giải thích: (1) Chuẩn bị dữ liệu. (2) Bắt đầu và tính toán Giá trị giao dịch (mutate). (3) Nhóm dữ liệu (group_by). (4) Tổng hợp dữ liệu (summarise). (5) Sắp xếp kết quả (arrange). (6) Hiển thị kết quả

Ý nghĩa:

e+09 nghĩa là “nhân với 10 mũ 9”, tức là tỷ. 2.77e+09 = 2.77 x 1,000,000,000 = 2.77 tỷ. e+10 nghĩa là “nhân với 10 mũ 10”, tức là chục tỷ. 5.11e+10 = 5.11 x 10,000,000,000 = 51.1 tỷ. e+11 nghĩa là “nhân với 10 mũ 11”, tức là trăm tỷ. 3.38e+11 = 3.38 x 100,000,000,000 = 338 tỷ. e+12 nghĩa là “nhân với 10 mũ 12”, tức là nghìn tỷ. 2.07e+12 = 2.07 x 1,000,000,000,000 = 2.07 nghìn tỷ.

1. canada | e-commerce | 2.070597e+12 * Giá trị: Khoảng 2.07 nghìn tỷ đô la. Đây là một con số khổng lồ. Nó cho thấy ngành thương mại điện tử ở Canada (rất có thể bị chi phối bởi một công ty cực lớn như Shopify) có quy mô vốn hóa và mức độ giao dịch cực kỳ lớn, là một trụ cột quan trọng trên thị trường chứng khoán Canada.

2. france | gaming | 2.777209e+09 * Giá trị: Khoảng 2.78 tỷ đô la.So với các ngành khác, đây là một quy mô tương đối nhỏ. Nó cho thấy các công ty game niêm yết trên sàn chứng khoán Pháp có quy mô vừa phải.

3. france | luxury goods | 5.119930e+10 * Giá trị: Khoảng 51.2 tỷ đô la. Con số này lớn hơn ngành game gần 20 lần. Điều này phản ánh đúng sức mạnh kinh tế của Pháp: các tập đoàn hàng xa xỉ (như LVMH, Kering) là những “gã khổng lồ” có giá trị vốn hóa và được giao dịch rất sôi động trên thị trường.

4. germany | apparel | 2.158194e+10 * Giá trị: Khoảng 21.6 tỷ đô la. Ngành may mặc ở Đức (với các thương hiệu như Adidas, Puma) có một quy mô đáng kể trên thị trường chứng khoán.

5. germany | automotive | 7.762324e+09 * Giá trị: Khoảng 7.76 tỷ đô la. Con số này có vẻ thấp một cách đáng ngạc nhiên đối với một cường quốc ô tô như Đức.

6. japan | automotive | 3.382736e+11 * Giá trị: Khoảng 338 tỷ đô la. Ngành ô tô Nhật Bản (với các tên tuổi như Toyota, Honda) có quy mô giao dịch lớn hơn rất nhiều so với ngành ô tô của Đức trong bộ dữ liệu này. Cho thấy tầm vóc và thanh khoản vượt trội của các công ty ô tô Nhật trên thị trường chứng khoán.

7. japan | gaming | 6.764484e+10 * Giá trị: Khoảng 67.6 tỷ đô la. Ngành game của Nhật Bản (với Nintendo, Sony) có quy mô lớn hơn ngành game của Pháp hơn 24 lần. Điều này khẳng định vị thế thống trị của Nhật Bản trong ngành công nghiệp game toàn cầu.

Biểu đồ 3.Vẽ viểu đồ

gia_tri_giao_dich_phan_tram <- gia_tri_giao_dich %>%
  group_by(Country) %>%
  mutate(phan_tram_nganh = tong_gia_tri / sum(tong_gia_tri) * 100 )
ggplot(gia_tri_giao_dich_phan_tram, aes(x = "", y = phan_tram_nganh, fill = Industry_Tag)) + 
  geom_col(width = 1) +coord_polar("y", start = 0) +
  facet_wrap(~ Country) +
  labs(title = "Tỷ trọng giá trị giao dịch theo Ngành từng Quốc Gia", fill = "Ngành",
       x = NULL, y = NULL) +theme_void() + theme(legend.position = "bottom")

Giải thích: (1-3) Xử lý dữ liệu,nhóm dữ liệu theo từng quốc gia, tạo một cột mới tên là phan_tram_nganh (phần trăm ngành). (4-8) Vẽ biểu đồ (ggplot):biến biểu đồ cột chồng thành biểu đồ tròn,Nó sẽ tạo ra một biểu đồ tròn riêng cho mỗi quốc gia (Country).

Ý nghĩa:

so sánh cấu trúc công nghiệp trên thị trường chứng khoán thể hiện những đặc điểm kinh tế và cấu trúc thị trường rất khác biệt giữa các quốc gia.

  1. Mỹ (usa): Nền kinh tế Đa dạng hóa: Vòng tròn của Mỹ có rất nhiều màu sắc với tỷ trọng khá tương đồng. Các mảng màu lớn nhất là công nghệ (technology), tài chính (finance), thương mại điện tử (e-commerce), và ô tô (automotive). Thị trường chứng khoán Mỹ cực kỳ đa dạng và cân bằng. Sức mạnh của nó không phụ thuộc vào một ngành duy nhất mà được xây dựng trên nhiều trụ cột vững chắc. Điều này cho thấy một nền kinh tế trưởng thành, có sức chống chịu tốt với các cú sốc chỉ ảnh hưởng đến một ngành cụ thể.

  2. Canada (canada): Sự thống trị của một Ngành: Vòng tròn của Canada gần như chỉ có một màu duy nhất là màu xanh rêu (e-commerce).Thị trường chứng khoán Canada (trong bộ dữ liệu này) bị thống trị gần như tuyệt đối bởi ngành thương mại điện tử. Điều này rất có thể là do sự hiện diện của một “gã khổng lồ” duy nhất như Shopify có giá trị vốn hóa vượt trội so với phần còn lại của thị trường. Đây là một dấu hiệu của sự tập trung cao độ, đồng nghĩa với rủi ro lớn: nếu ngành/công ty này gặp vấn đề, toàn bộ thị trường sẽ bị ảnh hưởng nặng nề.

  3. Nhật Bản (japan): Sức mạnh của Công nghiệp Truyền thống và Sáng tạo: Vòng tròn của Nhật Bản chủ yếu có hai màu: một mảng lớn màu cam (automotive) và một mảng nhỏ hơn nhưng đáng kể màu xanh dương nhạt (gaming). Điều này phản ánh hoàn hảo thế mạnh kinh tế của Nhật Bản. Thị trường của họ được dẫn dắt bởi các tập đoàn ô tô khổng lồ (Toyota, Honda) và ngành công nghiệp game/giải trí sáng tạo có tầm ảnh hưởng toàn cầu (Nintendo, Sony).

  4. Pháp (france): Dấu ấn của sự Sang trọng: Vòng tròn của Pháp bị chi phối bởi mảng màu tím (luxury goods - hàng xa xỉ). Đây là đặc trưng không thể nhầm lẫn của nền kinh tế Pháp. Các tập đoàn hàng xa xỉ (như LVMH, Kering) là những trụ cột chính, chiếm tỷ trọng rất lớn trên thị trường chứng khoán Pháp.

  5. Đức (germany): Trái tim của Công nghiệp Châu Âu: Vòng tròn của Đức có hai màu chính là cam (automotive) và hồng nhạt (apparel). Biểu đồ cho thấy sức mạnh của ngành công nghiệp ô tôngành may mặc/thể thao (Adidas, Puma) đối với thị trường chứng khoán Đức.

4.1.6.Giá TB Cân bằng Khối lượng (VWAP) theo ngành

d$gia_tri_giao_dich <- d$Close * d$Volume 
d_ket_qua <- d %>%
  group_by(Industry_Tag) %>% 
  summarize(tong_gia_tri_giao_dich = sum(gia_tri_giao_dich, na.rm = TRUE), 
    tong_volume = sum(Volume, na.rm = TRUE) ) %>%
  mutate(ti_le = tong_gia_tri_giao_dich / tong_volume) 
kable(d_ket_qua)
Industry_Tag tong_gia_tri_giao_dich tong_volume ti_le
apparel 2.877276e+12 1.015255e+11 28.34042
automotive 3.779313e+13 3.794928e+11 99.58852
aviation 2.652111e+12 9.769137e+10 27.14786
consumer goods 5.240475e+12 9.436427e+10 55.53452
cryptocurrency 1.926475e+12 1.230908e+10 156.50842
e-commerce 2.431375e+13 7.956919e+11 30.55674
entertainment 1.190645e+13 1.515906e+11 78.54345
finance 1.654237e+13 2.772244e+11 59.67140
financial services 2.110229e+12 2.476045e+10 85.22580
fitness 6.577135e+11 2.008788e+10 32.74181
food 4.328873e+12 4.170200e+10 103.80491
food & beverage 5.930393e+12 1.916865e+11 30.93798
footwear 7.582314e+11 2.554457e+10 29.68268
gaming 8.423221e+11 2.283994e+10 36.87935
healthcare 4.302222e+12 5.824213e+10 73.86787
hospitality 2.814471e+12 3.283647e+10 85.71174
logistics 1.749699e+12 1.387097e+10 126.14110
luxury goods 5.119930e+10 6.099427e+08 83.94116
manufacturing 1.798377e+12 2.252202e+10 79.84972
music 8.471361e+11 3.531840e+09 239.85687
retail 9.256578e+12 1.327450e+11 69.73202
social media 6.675816e+11 1.914795e+10 34.86440
technology 1.233427e+14 4.522656e+12 27.27218

Giải thích: (1) Chuẩn bị dữ liệu. (2) Bắt đầu và tính toán Giá trị giao dịch (mutate). (3) Nhóm dữ liệu (group_by). (4) Tổng hợp dữ liệu (summarise). (5) Sắp xếp kết quả (arrange). (6) Hiển thị kết quả

Ý nghĩa:

e+06 | Triệu | 1,000,000 |.

| e+09 | Tỷ | 1,000,000,000 |.

| e+10 | Chục Tỷ | 10,000,000,000 |.

| e+11 | Trăm Tỷ | 100,000,000,000 |.

| e+12 | Nghìn Tỷ | 1,000,000,000,000 |.

| e+13 | Chục Nghìn Tỷ | 10,000,000,000,000 |.

| e+14 | Trăm Nghìn Tỷ | 100,000,000,000,000 |.

| e+15 | Triệu Tỷ | 1,000,000,000,000,000 |.

Dòng 1: apparel (May mặc) * tong_gia_tri_giao_dich: 2.877e+12 -> 2.87 nghìn tỷ (đô la) * tong_volume: 1.015e+11 -> 101.5 tỷ (cổ phiếu) * ti_le: 28.34 -> Giá trung bình mỗi cổ phiếu giao dịch là 28.34 đô la.

Dòng 2: automotive (Ô tô) * tong_gia_tri_giao_dich: 3.779e+13 -> 37.79 nghìn tỷ (đô la) * tong_volume: 3.794e+11 -> 379.4 tỷ (cổ phiếu) * ti_le: 99.58 -> Giá trung bình mỗi cổ phiếu giao dịch là 99.58 đô la.

Dòng cuối: technology (Công nghệ) * tong_gia_tri_giao_dich: 1.233e+14 -> 123.3 nghìn tỷ (đô la) - Con số lớn nhất! * tong_volume: 4.522e+12 -> 4.52 nghìn tỷ (cổ phiếu) - Số lượng cổ phiếu giao dịch cũng lớn nhất! * ti_le: 27.27 -> Giá trung bình mỗi cổ phiếu giao dịch là 27.27 đô la.

Bảng giúp phân loại các ngành công nghiệp theo “mệnh giá” cổ phiếu trung bình, từ đó hé lộ bản chất và giai đoạn phát triển của chúng.

** Phân loại các ngành theo “Mệnh giá” Cổ phiếu**

Chia các ngành thành 3 nhóm chính dựa trên cột ti_le:

  • Nhóm “Mệnh giá cao” (ti_le > 100):
    • music (239.8), cryptocurrency (156.5), logistics (126.1), food (103.8). Các ngành này thường bao gồm các công ty có giá mỗi cổ phiếu rất cao. Do: Tăng trưởng vượt bậc: Các công ty dẫn đầu đang trong giai đoạn tăng trưởng nóng, thu hút dòng vốn lớn khiến giá cổ phiếu tăng vọt. Ít chia tách cổ phiếu: Các công ty này có thể còn tương đối mới hoặc không có chính sách chia tách cổ phiếu để giữ giá ở mức thấp. Biên lợi nhuận cao: Ngành có lợi nhuận cao, được thị trường định giá cao. => Như Ngành music có thể bị chi phối bởi một công ty như Spotify, có giá cổ phiếu cao. Cryptocurrency có thể là Coinbase.
  • Nhóm “Mệnh giá thấp” (ti_le < 40):
    • technology (27.2), footwear (29.6), apparel (28.3), e-commerce (30.5). Đây là một insight cực kỳ thú vị và quan trọng. Ngành technology có tổng giá trị giao dịch lớn nhất thế giới, nhưng giá cổ phiếu trung bình lại rất thấp. Tại sao? Sự trưởng thành và Phổ cập: Đây là dấu hiệu của các công ty “blue-chip” khổng lồ, đã trưởng thành. Qua nhiều năm, họ đã thực hiện nhiều lần chia tách cổ phiếu (stock split) để giữ cho giá mỗi cổ phiếu ở mức phải chăng, dễ tiếp cận với các nhà đầu tư nhỏ lẻ. Thanh khoản cực cao: Giá thấp hơn giúp tăng khối lượng giao dịch. => Apple, Microsoft, Amazon (trước các đợt chia tách gần đây) đều là những gã khổng lồ nhưng luôn cố gắng giữ giá cổ phiếu không quá “ngất ngưởng”.
  • Nhóm “Mệnh giá trung bình” (ti_le từ 50 - 100):
    • automotive (99.5), entertainment (78.5), finance (59.6). Các ngành này có sự cân bằng hơn. Chúng có thể bao gồm cả các công ty lâu đời và các công ty tăng trưởng mới, tạo ra một mức giá trung bình ở khoảng giữa.

** Không có Tương quan đơn giản giữa Quy mô và Giá Cổ phiếu **

Ngành có tổng giá trị giao dịch lớn nhất (technology) lại không phải là ngành có giá cổ phiếu trung bình cao nhất.Quy mô kinh tế của một ngành không nhất thiết quyết định “mệnh giá” cổ phiếu của nó. Một ngành có thể cực kỳ lớn mạnh nhưng vẫn có giá cổ phiếu trung bình thấp để thu hút đông đảo nhà đầu tư. Ngược lại, một ngành “ngách” hơn có thể có các cổ phiếu với giá “trên trời”.

Biểu Đồ 4.vẽ biểu đồ

ggplot(d_ket_qua, aes(x = reorder(Industry_Tag, ti_le), y = ti_le)) +
  geom_col(aes(fill = Industry_Tag), show.legend = FALSE) + 
  coord_flip() + 
  geom_text(aes(label = round(ti_le, 2)), hjust = -0.2) + 
  labs(title = "Giá Trung Bình Cân Bằng Khối Lượng theo Ngành",
  x = "Ngành Công Nghiệp",y = "VWAP (Giá trị / Khối lượng)" ) +
  theme_minimal()

Giải thích: (1) Khởi tạo biểu đồ và Sắp xếp trục X. (2) Thêm lớp biểu đồ cột. (3) Xoay biểu đồ thành dạng ngang. (4) Thêm nhãn số liệu. (5-6) Đặt tiêu đề và nhãn cho các trục. (7) Áp dụng giao diện tối giản.

Ý nghĩa:

1. Nhóm Dẫn Đầu (VWAP rất cao): * Ngành Âm nhạc (Music): Đứng đầu với mức VWAP cao vượt trội, bỏ xa tất cả các ngành còn lại (thanh ngang của nó dài hơn cả biểu đồ). Điều này cho thấy ngành này có thể có một hoặc vài cổ phiếu/tài sản “ngôi sao” với thị giá cực kỳ cao, chi phối toàn bộ giá giao dịch trung bình của ngành. * Tiền điện tử (Cryptocurrency): Đứng thứ hai với VWAP là 156.51. Điều này hoàn toàn hợp lý vì các tài sản kỹ thuật số như Bitcoin, Ethereum… thường có giá trị rất cao. * Logistics, Thực phẩm (Food), Ô tô (Automotive): Nằm trong top đầu với VWAP quanh mức 100-126. Đây là những ngành công nghiệp lớn, có các công ty đầu ngành với thị giá cổ phiếu cao.

2. Nhóm Giữa (VWAP ở mức trung bình - khá): * Các ngành như Dịch vụ tài chính (Financial services), Hàng xa xỉ (Luxury goods), Giải trí (Entertainment), Chăm sóc sức khỏe (Healthcare)… có VWAP dao động trong khoảng từ 73 đến 86. Đây là mức giá giao dịch trung bình khá phổ biến trên thị trường.

3. Nhóm Cuối Bảng (VWAP thấp): * Các ngành có VWAP thấp nhất bao gồm Hàng không (Aviation) ở mức 27.15, Công nghệ (Technology) ở mức 27.27, và May mặc (Apparel) ở mức 28.34. * Điều này không có nghĩa là các ngành này hoạt động kém, mà chỉ đơn giản là mặt bằng giá cổ phiếu trung bình của các công ty trong ngành này thấp hơn so với các nhóm trên.

4.1.7.Tỉ lệ các mã cổ phiếu có khối lượng giao dịch lớn hơn 10000000000

tong_volume_theo_sticker <- d %>% 
  group_by(Ticker) %>%   
  summarise(Tong_Volume = sum(Volume, na.rm = TRUE)) 
so_sticker_thoaman_dieu_kien <- tong_volume_theo_sticker %>%
  filter(Tong_Volume > 10000000000) %>% nrow()
tong_so_sticker_duy_nhat <- n_distinct(d$Ticker) 
if (tong_so_sticker_duy_nhat > 0) {
  ti_le_phan_tram <- (so_sticker_thoaman_dieu_kien /   tong_so_sticker_duy_nhat) * 100
} else {ti_le_phan_tram <- 0}
cat(sprintf("Tỷ lệ các sticker có khối lượng giao dịch lớn hơn 10,000,000,000 là: %.2f%%\n", ti_le_phan_tram))
## Tỷ lệ các sticker có khối lượng giao dịch lớn hơn 10,000,000,000 là: 67.74%

Giải thích: (1-3) Tính tổng khối lượng giao dịch theo từng mã (4-5) Đếm số mã thỏa mãn điều kiện (6) Đếm tổng số mã duy nhất (7-9) Tính toán tỷ lệ phần trăm (có điều kiện) (10) in kết quả

Ý nghĩa: Trong toàn bộ dữ liệu đang phân tích, sau khi tính tổng khối lượng giao dịch của từng mã cổ phiếu (sticker/ticker) riêng biệt, có đến 67.74% tức là hơn 2/3 số mã cổ phiếu có tổng khối lượng giao dịch vượt mốc 10 tỷ đơn vị.

=> Điều này cho thấy phần lớn các cổ phiếu trong bộ dữ liệu này có tính thanh khoản rất cao và được giao dịch với khối lượng cực kỳ lớn, có thể đây là dữ liệu tập trung vào các cổ phiếu vốn hóa lớn hoặc các cổ phiếu “blue-chip” trên thị trường.

Biểu đồ 5.vẽ biểu đồ

bieu_do_data <- d %>%
  group_by(Ticker) %>%
  summarise(Tong_Volume = sum(Volume, na.rm = TRUE)) %>% 
  mutate(Nhom = ifelse(Tong_Volume > 10000000000, "Khối lượng > 10 tỷ", 
                       "Khối lượng <= 10 tỷ")) %>% count(Nhom) %>%
  mutate(label_text = paste0(round(n / sum(n) * 100, 2), "%"))
ggplot(bieu_do_data, aes(x = "", y = n, fill = Nhom)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  geom_text(aes(label = label_text), position = position_stack(vjust = 0.5)) +
  labs(title = "Tỷ lệ Sticker theo Tổng Khối lượng Giao dịch", fill = "Nhóm Khối Lượng") +
  theme_void()

Giải thich: (1) Xử lý và Chuẩn bị dữ liệu. (2) Nhóm dữ liệu theo từng mã chứng khoán (Ticker). (3) Tính tổng khối lượng giao dịch (Tong_Volume) cho mỗi mã. (4-6) Tạo một cột mới tên là Nhom để phân loại từng mã. (7) Khởi tạo biểu đồ. (8) Thêm lớp biểu đồ cột, với chiều cao lấy trực tiếp từ y. width = 1 để cột chiếm toàn bộ không gian. (9) Nó lấy trục Y và “uốn cong” nó thành một vòng tròn. (10) Thêm nhãn phần trăm vào biểu đồ. (11) Đăth tiêu đề cho biểu đò và chú giải. (12) Áp dụng một giao diện “trống”.

Ý nghĩa:

Biểu đồ tròn này cho thấy sự phân bổ tỷ lệ các mã cổ phiếu (sticker) dựa trên tổng khối lượng giao dịch của chúng, được chia thành hai nhóm: nhóm có khối lượng giao dịch lớn hơn 10 tỷ và nhóm nhỏ hơn hoặc bằng 10 tỷ.

  • 67.74% các mã cổ phiếu có tổng khối lượng giao dịch rất lớn (trên 10 tỷ đơn vị).
  • Chỉ 32.26% các mã cổ phiếu có khối lượng giao dịch thấp hơn.
  1. Tính thanh khoản và sự tập trung của dòng tiền: Kết quả này cho thấy một sự thật quan trọng trên thị trường: dòng tiền không được phân bổ đều mà tập trung mạnh vào một nhóm cổ phiếu nhất định. Gần 70% các mã trong bộ dữ liệu này có tính thanh khoản cực kỳ cao. Thanh khoản cao có nghĩa là cổ phiếu đó được mua bán liên tục với khối lượng lớn, giúp nhà đầu tư dễ dàng giao dịch mà không làm ảnh hưởng nhiều đến giá.

  2. Sự hấp dẫn của các cổ phiếu “Blue-Chip” hoặc “Cổ phiếu Vua”: Các cổ phiếu có khối lượng giao dịch khổng lồ thường là các cổ phiếu của những doanh nghiệp lớn, đầu ngành (blue-chip), có uy tín và nền tảng kinh doanh vững chắc. Chúng thu hút sự quan tâm của cả nhà đầu tư tổ chức (quỹ đầu tư, công ty bảo hiểm) lẫn nhà đầu tư cá nhân, tạo ra khối lượng giao dịch lớn.

  3. Phản ánh cấu trúc của bộ dữ liệu: Biểu đồ này cũng cho thấy bộ dữ liệu đang được phân tích có thể tập trung chủ yếu vào các cổ phiếu vốn hóa lớn và vừa, thay vì bao gồm toàn bộ thị trường (vốn có rất nhiều cổ phiếu nhỏ, thanh khoản thấp). Điều này cho thấy sự phân hóa rõ rệt: thị trường được “dẫn dắt” bởi một nhóm cổ phiếu có thanh khoản vượt trội, trong khi phần còn lại ít được chú ý hơn.

=> Biểu đồ không chỉ là một con số thống kê mà nó còn phác họa nên bức tranh về “sức khỏe” và “khẩu vị” của thị trường. Thị trường này rất sôi động, nhưng sự sôi động đó tập trung chủ yếu vào khoảng 2/3 số cổ phiếu, đây chính là những mã dẫn dắt và thu hút phần lớn dòng tiền của nhà đầu tư.

4.1.8.Tính số mã cổ phiếu được chia cổ ức

so_ma_thoaman <- d %>%
  filter(Dividends > 0 & Volume > 50000000) %>%
  summarise(So_Luong_Ma = n_distinct(Ticker))
kable(so_ma_thoaman)
So_Luong_Ma
8

Giải thích: (1-2) Bắt đầu lọc dữ liệu (filter). (3) Tổng hợp dữ liệu (summarise). (4) Lưu và xuất kết quả.

Ý nghĩa:Trong toàn bộ bộ dữ liệu đang được phân tích, có 8 mã cổ phiếu (ticker) duy nhất thỏa mãn đồng thời cả hai điều kiện sau đây tại ít nhất một thời điểm:

  1. Có thực hiện chia cổ tức (Dividends > 0).
  2. Có khối lượng giao dịch lớn hơn 5,000,000 đơn vị (Volume > 5000000).
Biểu đồ 6.Vẽ biểu đồ
tong_so_ma <- d %>%
summarise(Tong_So_Ma = n_distinct(Ticker)) %>%pull(Tong_So_Ma)
ty_le <- so_ma_thoaman$So_Luong_Ma / tong_so_ma * 100
data <- data.frame(label = "Số lượng mã thỏa mãn điều kiện",value = so_ma_thoaman$So_Luong_Ma,
percentage = ty_le)
ggplot(data, aes(x = "", y = value, fill = label)) +
geom_bar(stat = "identity", width = 1) +coord_polar("y", start = 0) +
geom_text(aes(label = sprintf("%.1f%%", percentage)), position = position_stack(vjust = 0.5)) + 
labs(title = "Tỉ lệ số lượng mã cổ phiếu thỏa mãn điều kiện",
x = NULL, y = NULL, fill = NULL) + theme_void()

Giải thích: (1-2) Tính Tổng số mã duy nhất. (3) Tính Tỷ lệ Phần trăm. (4-5) Tạo Data Frame để vẽ biểu đồ. (6) Khởi tạo biểu đồ. (7) Vẽ biểu đồ cột. (8) Thêm nhãn văn bản vào giữa hình tròn. (9-10) Đặt tiêu đề và xóa các nhãn không cần thiết (trục x, y, và chú giải).

Ý nghĩa: Kết quả 12.9% cho thấy rằng nhóm cổ phiếu “lý tưởng” - tức là những công ty vừa có sức khỏe tài chính tốt để chia sẻ lợi nhuận cho cổ đông (trả cổ tức), vừa có tính thanh khoản cao và thu hút được sự quan tâm lớn của thị trường (khối lượng giao dịch lớn) - là một nhóm thiểu số và tương đối hiếm.

Sự chọn lọc của thị trường: Chỉ khoảng 13 trong 100 công ty đạt được cả hai tiêu chí này. Điều này cho thấy việc tìm kiếm một cơ hội đầu tư vừa an toàn (có cổ tức) vừa linh hoạt (dễ mua bán) đòi hỏi sự sàng lọc kỹ lưỡng. Nhóm cổ phiếu chất lượng cao: 12.9% này có thể được xem là nhóm cổ phiếu chất lượng cao, thường là các doanh nghiệp đầu ngành, có nền tảng vững chắc. Đối với nhiều nhà đầu tư, đây là nhóm cổ phiếu đáng để tập trung phân tích và đưa vào danh mục đầu tư dài hạn.

4.1.9.Tính tổng khối lượng nhóm ngành công nghệ

tong_khoi_luong_cong_nghe <- d %>%
filter(Industry_Tag == "technology") %>%
summarise(Tong_Khoi_Luong = sum(Volume))
kable(tong_khoi_luong_cong_nghe)
Tong_Khoi_Luong
4.522656e+12

Giải thích: (1-2) Bắt đầu lọc dữ liệu (filter). (3) Tổng hợp dữ liệu (summarise). (4) Lưu và xuất kết quả.

Ý nghĩa:Tổng khối lượng giao dịch của tất cả các cổ phiếu thuộc nhóm ngành công nghệ (“technology”) trong toàn bộ khoảng thời gian mà bộ dữ liệu ghi nhận. Giá trị này (khoảng 4,522 nghìn tỷ đơn vị) cho thấy ngành công nghệ là một ngành có tính thanh khoản cực kỳ cao và thu hút một lượng giao dịch khổng lồ từ các nhà đầu tư trên thị trường.

Biểu đồ 7.vẽ biểu đồ

bieu_do_data <- data.frame(
  Nhom = c("Công nghệ", "Các ngành khác"),
  Khoi_Luong = c(
    tong_khoi_luong_cong_nghe$Tong_Khoi_Luong,
    sum(d$Volume, na.rm = TRUE) - tong_khoi_luong_cong_nghe$Tong_Khoi_Luong ))
ggplot(bieu_do_data, aes(x = "", y = Khoi_Luong, fill = Nhom)) +
  geom_col(width = 1) +
  coord_polar("y", start = 0) +theme_void() +
  labs(title = "Tỷ lệ Khối lượng Giao dịch Ngành Công nghệ", fill = "Nhóm Ngành")

Giải thích: (1-5) Tạo bảng dữ liệu bieu_do_data. (6) Vẽ Biểu đồ. (7) Thêm lớp biểu đồ cột, với chiều cao lấy trực tiếp từ y. width = 1 để cột chiếm toàn bộ không gian, làm cho biểu đồ tròn liền mạch. (8) Nó lấy trục Y và “uốn cong” nó thành một vòng tròn. (9) Đặt tiêu đề cho biểu đồ (title) và cho phần chú giải (fill).

Ý nghĩa:

  1. Sự thống trị và sức hút của ngành công nghệ: Đây là minh chứng rõ ràng nhất cho thấy ngành công nghệ đang là tâm điểm và dẫn dắt thị trường. Khối lượng giao dịch của riêng ngành này còn lớn hơn tất cả các ngành khác cộng lại. Điều này cho thấy dòng tiền của nhà đầu tư đang tập trung rất mạnh vào các cổ phiếu công nghệ.

  2. Phản ánh xu hướng kinh tế vĩ mô: Kết quả này hoàn toàn phù hợp với xu hướng toàn cầu, nơi các công ty công nghệ đang ngày càng đóng vai trò trọng yếu trong nền kinh tế thông qua chuyển đổi số, trí tuệ nhân tạo, điện toán đám mây… Sự kỳ vọng vào tiềm năng tăng trưởng vượt bậc của ngành này đã biến nó thành “thỏi nam châm” thu hút vốn đầu tư.

  3. Thanh khoản và Rủi ro:

    • Thanh khoản cao: Khối lượng giao dịch khổng lồ cho thấy các cổ phiếu công nghệ có tính thanh khoản rất cao, nhà đầu tư có thể dễ dàng mua bán mà không sợ bị trượt giá nhiều.
    • Rủi ro tập trung: Tuy nhiên, nó cũng cho thấy một rủi ro tiềm ẩn. Khi một phần quá lớn của thị trường tập trung vào một ngành duy nhất, bất kỳ tin tức tiêu cực nào ảnh hưởng đến ngành công nghệ đều có thể tạo ra tác động lan tỏa mạnh mẽ đến toàn bộ thị trường chứng khoán.

=> Biểu đồ không chỉ đơn thuần là một con số, mà nó vẽ nên một bức tranh toàn cảnh về “khẩu vị” của thị trường: Dòng tiền đang đặt cược lớn vào tương lai của ngành công nghệ.

4.1.10.Tính tổng khối lượng nhóm ngành Trang phục (apparel)

Lọc ra tất cả giao dịch của ngành trang phục -> Tính tổng khối lượng của chúng -> In kết quả.

tong_khoi_luong_apparel <- d %>%
  filter(Industry_Tag == "apparel") %>% 
  summarise(Tong_Khoi_Luong = sum(Volume, na.rm = TRUE))
kable(tong_khoi_luong_apparel)
Tong_Khoi_Luong
101525538443

Giải thích: (1-2) Bắt đầu lọc dữ liệu (filter). (3) Tổng hợp dữ liệu (summarise). (4) Lưu và xuất kết quả.

Ý nghĩa: Tổng khối lượng giao dịch 101,525,538,443 (hơn 101.5 tỷ) của tất cả các cổ phiếu thuộc nhóm ngành Trang phục (apparel) trong toàn bộ khoảng thời gian mà bộ dữ liệu ghi nhận. Con số này cho thấy, mặc dù có thể không sôi động bằng ngành công nghệ, ngành trang phục nhưng vẫn là một ngành có tính thanh khoản đáng kể và thu hút một lượng giao dịch lớn từ các nhà đầu tư.

Biểu đồ 8.Vẽ biểu đồ

bieu_do_data <- data.frame(  
  Nhom = c("Trang phục", "Các ngành khác"),
  Khoi_Luong = c(
    tong_khoi_luong_apparel$Tong_Khoi_Luong, 
    sum(d$Volume, na.rm = TRUE) - tong_khoi_luong_apparel$Tong_Khoi_Luong))
ggplot(bieu_do_data, aes(x = "", y = Khoi_Luong, fill = Nhom)) +
  geom_col(width = 1) +
  coord_polar("y", start = 0) +theme_void() +
  labs(title = "Tỷ lệ Khối lượng Giao dịch Ngành Trang phục", fill = "Nhóm Ngành")

Giải thích: (1-5) Tạo bảng dữ liệu bieu_do_data. (6) Vẽ Biểu đồ. (7) Thêm lớp biểu đồ cột, với chiều cao lấy trực tiếp từ y. width = 1 để cột chiếm toàn bộ không gian, làm cho biểu đồ tròn liền mạch. (8) Nó lấy trục Y và “uốn cong” nó thành một vòng tròn. (9) Đặt tiêu đề cho biểu đồ (title) và cho phần chú giải (fill).

Ý nghĩa:

Biểu đồ tròn này so sánh tổng khối lượng giao dịch của ngành Trang phục với tổng khối lượng giao dịch của tất cả các ngành còn lại trên thị trường cộng lại.

  1. Vai trò thứ yếu trên thị trường chứng khoán: Đây là một minh chứng rất trực quan cho thấy ngành Trang phục, xét về mặt hoạt động giao dịch, chỉ là một ngành rất nhỏ, mang tính ngách trên thị trường. Dòng tiền của nhà đầu tư không tập trung vào đây.

  2. Sự tương phản rõ rệt với các ngành dẫn dắt: Nếu so sánh với biểu đồ của ngành Công nghệ (chiếm hơn nửa thị trường), ta có thể thấy sự phân hóa cực kỳ mạnh mẽ. Trong khi Công nghệ là “đầu tàu” dẫn dắt thị trường, thu hút phần lớn sự chú ý và dòng tiền, thì Trang phục lại nằm ở vị thế hoàn toàn trái ngược.

  3. Phản ánh đặc tính của ngành: Ngành trang phục thường được xem là một ngành công nghiệp truyền thống, có tính cạnh tranh cao, biên lợi nhuận không quá đột phá và tốc độ tăng trưởng ổn định chứ không bùng nổ như công nghệ. Do đó, nó ít tạo ra “sóng” và sự phấn khích trên thị trường chứng khoán, dẫn đến khối lượng giao dịch thấp.

  4. Thanh khoản thấp: Tổng khối lượng giao dịch thấp của cả ngành cho thấy mức độ thanh khoản chung của nhóm cổ phiếu này không cao. Nhà đầu tư có thể gặp khó khăn hơn khi muốn mua/bán một lượng lớn cổ phiếu mà không làm ảnh hưởng đến giá.

4.1.11.Tính tổng khối lượng nhóm ngành Bán lẻ (retail)

tong_khoi_luong_retail <- d %>%
  filter(Industry_Tag == "retail") %>% 
  summarise(Tong_Khoi_Luong = sum(Volume, na.rm = TRUE))
kable(tong_khoi_luong_retail)
Tong_Khoi_Luong
1.32745e+11

Giải thích: (1-2) Bắt đầu lọc dữ liệu (filter). (3) Tổng hợp dữ liệu (summarise). (4) Lưu và xuất kết quả.

Ý nghĩa: tổng khối lượng giao dịch của tất cả các cổ phiếu thuộc nhóm ngành Bán lẻ (retail) trong toàn bộ khoảng thời gian.Giá trị này (hơn 132.7 tỷ đơn vị) cho thấy ngành bán lẻ cũng là một ngành có hoạt động giao dịch sôi động và thu hút sự quan tâm đáng kể của nhà đầu tư, thể hiện qua tính thanh khoản cao.

Biểu đồ 9.Vẽ biểu đồ

bieu_do_data <- data.frame(                                
  Nhom = c("Bán lẻ", "Các ngành khác"),                                                                           
  khoi_Luong = c(tong_khoi_luong_retail$Tong_Khoi_Luong,                 
    sum(d$Volume, na.rm = TRUE) -                           
      tong_khoi_luong_retail$Tong_Khoi_Luong))
ggplot(bieu_do_data, aes(x = "", y = khoi_Luong, fill = Nhom)) +
  geom_col(width = 1) +                                        
  coord_polar("y", start = 0) + theme_void() +                                               
  labs(title = "Tỷ lệ Khối lượng Giao dịch Ngành Bán lẻ", fill = "Nhóm Ngành")                                   

Giải thích: (1-5) Tạo bảng dữ liệu bieu_do_data. (6) Vẽ Biểu đồ. (7) Thêm lớp biểu đồ cột, với chiều cao lấy trực tiếp từ y. width = 1 để cột chiếm toàn bộ không gian, làm cho biểu đồ tròn liền mạch. (8) Nó lấy trục Y và “uốn cong” nó thành một vòng tròn. (9) Đặt tiêu đề cho biểu đồ (title) và cho phần chú giải (fill).

Ý nghĩa:

Phần màu đỏ (“Bán lẻ”) là một lát cắt rất nhỏ. * Phần màu xanh (“Các ngành khác”) chiếm gần như toàn bộ biểu đồ ước tính >95%.

  1. Vai trò khiêm tốn trên thị trường: Tương tự như ngành Trang phục, biểu đồ này cho thấy ngành Bán lẻ, xét về tổng khối lượng giao dịch, không phải là một ngành dẫn dắt hay chiếm tỷ trọng lớn trên thị trường chứng khoán. Dòng tiền của nhà đầu tư không tập trung chủ yếu vào đây.

  2. Ngành kinh tế phòng thủ: Ngành bán lẻ thường được coi là một ngành kinh tế “phòng thủ”. Hoạt động của nó gắn liền với chi tiêu tiêu dùng thiết yếu, do đó thường ổn định nhưng thiếu đi yếu tố tăng trưởng đột phá như ngành công nghệ. Sự ổn định này thường đi kèm với việc ít tạo ra sự phấn khích và “sóng” lớn trên thị trường, dẫn đến khối lượng giao dịch không quá cao so với tổng thể.

  3. Sự phân hóa của thị trường: Biểu đồ một lần nữa nhấn mạnh sự phân hóa mạnh mẽ của dòng tiền trên thị trường. Một vài ngành “ngôi sao” (như Công nghệ đã thấy ở các phân tích trước) thu hút phần lớn sự chú ý và khối lượng giao dịch, trong khi các ngành truyền thống hơn như Bán lẻ chỉ chiếm một phần nhỏ.

=> Dưới góc độ kinh tế, biểu đồ cho thấy ngành Bán lẻ là một phần của nền kinh tế nhưng không phải là tâm điểm của hoạt động giao dịch trên thị trường chứng khoán. Nó đại diện cho một nhóm cổ phiếu có vai trò ổn định nhưng không phải là nơi dòng tiền đầu cơ hay đầu tư tăng trưởng tập trung mạnh mẽ.

4.1.12.Thống kê khối lượng giao dịch trong năm 2024

monthly_2024_volume <- d %>%  mutate( Date = ymd_hms(Date),           
    Year = year(Date), 
    YearMonth = format(Date, "%Y-%m") ) %>%
  filter( Year == 2024) %>%
  group_by(YearMonth) %>%
  summarise(Total_Volume = sum(Volume, na.rm = TRUE),.groups = 'drop')
kable(monthly_2024_volume) 
YearMonth Total_Volume
2024-01 23406952267
2024-02 23749309220
2024-03 24285768920
2024-04 22748813500
2024-05 22310972400
2024-06 21735549178
2024-07 23548064723
2024-08 25164596411
2024-09 18714158654
2024-10 18800387895
2024-11 20706258213
2024-12 19793773200

Giải thích: (1-2) Bắt đầu và Xử lý Ngày tháng (mutate). (3) Lọc dữ liệu (filter). (4) Nhóm dữ liệu (group_by). (5-6) Tổng hợp dữ liệu (summarise). (7) Lưu và xuất kết quả.

Ý nghĩa:

Volume là Khối lượng Giao dịch Tài chính Cổ phiếu, Trái phiếu, Tiền điện tử**

Dữ liệu này phản ánh mức độ sôi động và tâm lý của thị trường.

  • Quý 1 (Tháng 1-3): Khối lượng giao dịch khá cao và tăng dần, đạt đỉnh vào tháng 3 (24,285 tỷ). Điều này cho thấy thị trường khởi đầu năm mới rất sôi động. Có thể do:
    • Kỳ vọng tích cực vào nền kinh tế sau kỳ nghỉ lễ.
    • Các công ty công bố báo cáo tài chính quý 4 năm trước với kết quả tốt.
    • Dòng tiền mới tham gia thị trường vào đầu năm.
  • Quý 2 (Tháng 4-6): Khối lượng có xu hướng giảm đều. Đây có thể là giai đoạn thị trường “nguội” lại sau một quý đầu năm sôi động. Nguyên nhân có thể là:
    • Hiệu ứng “Sell in May and go away” (Bán vào tháng 5 rồi rời đi) - một hiện tượng tâm lý khi nhà đầu tư có xu hướng chốt lời và giảm hoạt động trước kỳ nghỉ hè.
    • Giai đoạn trống thông tin, thiếu các tin tức kinh tế vĩ mô hoặc sự kiện lớn để thúc đẩy thị trường.
  • Quý 3 (Tháng 7-9): Khối lượng tăng mạnh trở lại, đặc biệt đạt đỉnh cao nhất năm vào tháng 8 (25,164 tỷ) rồi đột ngột giảm sâu vào tháng 9.
    • Tháng 7 và 8 có thể có những sự kiện cực kỳ quan trọng: chính sách tiền tệ mới được công bố, báo cáo kinh tế vĩ mô bất ngờ, hoặc một nhóm ngành nào đó có biến động rất lớn.
    • Sự sụt giảm mạnh vào tháng 9 có thể là do thị trường điều chỉnh sau giai đoạn tăng nóng, hoặc do các yếu tố bất ổn bắt đầu xuất hiện.
  • Quý 4 (Tháng 10-12): Khối lượng giao dịch ở mức thấp hơn đáng kể so với đầu năm. Điều này phản ánh:
    • Tâm lý thận trọng của nhà đầu tư khi năm tài chính sắp kết thúc.
    • Hoạt động chốt lời/cơ cấu lại danh mục cuối năm.
    • Ảnh hưởng của các kỳ nghỉ lễ dài (Giáng sinh, Năm mới) làm giảm hoạt động giao dịch.

Biểu đồ 10.Vẽ biểu đồ

format_trieu_ty <- function(x) {sapply(x, function(val) {if (val >= 1e9) {
      paste0(round(val / 1e9, 1), " Tỷ") } else if (val >= 1e6) { paste0(round(val / 1e6, 1), " Tr")
    } else { format(val, big.mark = ",")} })}
ggplot(monthly_2024_volume, 
       aes(x = YearMonth, y = Total_Volume)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  geom_text(aes(label = format_trieu_ty(Total_Volume)), 
            vjust = -0.5, size = 3.5) +   
  scale_y_continuous(labels = comma,
                     expand = expansion(mult = c(0, 0.1))) + 
labs(title = "Tổng Khối lượng giao dịch Toàn bộ theo Tháng (Năm 2024)",
    x = "Tháng (Year-Month)",y = "Tổng Khối lượng giao dịch (Total Volume)") +
   theme_minimal() + theme( axis.text.x = element_text(angle = 45, hjust = 1))

Giải thích: (1-3) Đây là một hàm tự tạo tên là format_trieu_ty để biến những con số rất lớn thành định dạng ngắn gọn hơn. (4-5) Khởi tạo biểu đồ,Bắt đầu quá trình vẽ biểu đồ (6)Thêm lớp biểu đồ cột. (7-8) Thêm nhãn số liệu lên trên các cột. (9-10) Tùy chỉnh trục Y. (11-12) Thêm tiêu đề và nhãn cho các trục (13) Tinh chỉnh giao diện chung

Ý nghĩa:

  1. Khởi đầu năm mạnh mẽ (Quý 1): Ba cột đầu tiên (Tháng 1, 2, 3) đều ở mức rất cao, cho thấy một sự khởi đầu năm đầy lạc quan và sôi động. Thị trường hoặc hoạt động kinh doanh có thể đã được thúc đẩy bởi kỳ vọng tích cực sau kỳ nghỉ lễ.

  2. Giai đoạn Hạ nhiệt (Quý 2): Có thể thấy rõ xu hướng đi xuống của các cột từ tháng 3 đến tháng 6. Đây là giai đoạn thị trường “nguội” lại, có thể do nhà đầu tư chốt lời hoặc hoạt động kinh doanh chậm lại theo mùa vụ.

  3. Điểm nhấn Bất thường vào Tháng 8: Cột của Tháng 8 là cột cao nhất một cách đột biến, vượt trội so với tất cả các tháng khác. Đây là điểm dữ liệu quan trọng nhất trên biểu đồ. Về mặt kinh tế, điều này cho thấy một sự kiện lớn đã xảy ra:

    • Nếu là Giao dịch Tài chính: Có thể đã có một tin tức vĩ mô cực tốt, một đợt công bố chính sách tiền tệ quan trọng, hoặc một nhóm cổ phiếu nào đó bùng nổ mạnh mẽ, thu hút dòng tiền khổng lồ.
    • Nếu là Doanh số Bán hàng: Đây có thể là tháng ra mắt một sản phẩm “bom tấn” hoặc một chiến dịch khuyến mãi thành công vang dội.
  4. Sụt giảm Nhanh chóng sau Đỉnh: Ngay sau tháng 8, cột tháng 9 giảm mạnh. Điều này cho thấy sự kiện của tháng 8 không tạo ra một xu hướng bền vững. Nó có thể là một đợt bùng nổ ngắn hạn, theo sau là sự điều chỉnh hoặc chốt lời hàng loạt.

  5. Kết thúc năm Yếu ớt (Quý 4): Các cột của Quý 4 (Tháng 10, 11, 12) rõ ràng thấp hơn so với đầu năm. Đây là một dấu hiệu đáng chú ý. Thông thường, quý cuối năm là mùa mua sắm và giao dịch sôi động. Việc khối lượng ở mức thấp có thể báo hiệu:

    • Tâm lý thận trọng của nhà đầu tư/người tiêu dùng.
    • Dự báo về một năm tới khó khăn hơn.
    • Nền kinh tế đang có dấu hiệu chậm lại.

4.1.13.Thống kê khối lượng giao dịch của MỸ trong năm 2024

monthly_usa_2024_volume <- d %>%     
  mutate( Date = ymd_hms(Date),Year = year(Date),              
    YearMonth = format(Date, "%Y-%m")) %>%
  filter(Year == 2024,tolower(Country) == "usa" ) %>%                             
  group_by(YearMonth) %>%
  summarise( Total_Volume = sum(Volume, na.rm = TRUE),.groups = 'drop' )
kable(monthly_usa_2024_volume)     
YearMonth Total_Volume
2024-01 23062439767
2024-02 23331852720
2024-03 24021621120
2024-04 22402721700
2024-05 21826184900
2024-06 21395981180
2024-07 23165678147
2024-08 24692219213
2024-09 18452661015
2024-10 18524808168
2024-11 20255720810
2024-12 19422079602

Giải thích: (1-2) Nạp thư viện. (3-4) Đây là một hàm tự tạo tên là format_ty để biến những con số rất lớn thành định dạng ngắn gọn hơn. (5-6) Khởi tạo biểu đồ,Bắt đầu quá trình vẽ biểu đồ (7)Thêm lớp biểu đồ cột. (8-9) Thêm nhãn số liệu lên trên các cột. (10-11) Tùy chỉnh trục Y. (12-13) Thêm tiêu đề và nhãn cho các trục (14) Tinh chỉnh giao diện chung

ý nghĩa:

  1. Quý 1 (Tháng 1-3) - Khởi đầu Tích cực:
    • Thị trường Mỹ khởi đầu năm mới với khối lượng giao dịch rất cao và tăng dần, đạt đỉnh vào tháng 3. Điều này phản ánh tâm lý lạc quan của nhà đầu tư, có thể được thúc đẩy bởi các báo cáo lợi nhuận Quý 4/2023 khả quan và kỳ vọng vào chính sách tiền tệ của Cục Dự trữ Liên bang Mỹ (FED).
  2. Quý 2 (Tháng 4-6) - Giai đoạn Chững lại:
    • Khối lượng giao dịch giảm đều trong suốt Quý 2. Đây là hiện tượng “Sell in May and go away” kinh điển trên thị trường Mỹ, khi các nhà đầu tư có xu hướng giảm hoạt động trước kỳ nghỉ hè. Giai đoạn này thường ít có các sự kiện kinh tế lớn.
  3. Quý 3 (Tháng 7-9) - Biến động Cực mạnh:
    • Đỉnh cao tháng 8: Tương tự như xu hướng chung, thị trường Mỹ chứng kiến một sự bùng nổ về khối lượng giao dịch vào tháng 8. Đây là dấu hiệu của một sự kiện kinh tế vĩ mô cực kỳ quan trọng tại Mỹ, ví dụ như:
      • Một bài phát biểu quan trọng của Chủ tịch FED về lãi suất.
      • Công bố dữ liệu lạm phát (CPI) hoặc việc làm bất ngờ.
      • Một làn sóng đầu cơ vào một nhóm ngành công nghệ nào đó (ví dụ: AI).
    • Sụt giảm mạnh tháng 9: Khối lượng giảm sâu ngay sau đó. Tháng 9 trong lịch sử thường là tháng có hiệu suất kém nhất đối với thị trường chứng khoán Mỹ (“Hiệu ứng tháng 9”). Sự sụt giảm này có thể là một đợt chốt lời lớn sau đỉnh tháng 8 hoặc phản ánh những lo ngại mới về suy thoái kinh tế.
  4. Quý 4 (Tháng 10-12) - Thận trọng Cuối năm:
    • Khối lượng giao dịch duy trì ở mức thấp hơn đáng kể so với đầu năm. Điều này cho thấy sự thận trọng của các nhà đầu tư khi bước vào giai đoạn cuối năm, họ có thể đang chờ đợi những tín hiệu rõ ràng hơn cho năm 2025.
    • Sự phục hồi nhẹ vào tháng 11 có thể liên quan đến hiệu ứng đợt tăng giá cuối năm, nhưng không đủ mạnh để đưa khối lượng trở lại mức cao của đầu năm.

=> Dữ liệu cho thấy thị trường tài chính Mỹ năm 2024 không có một xu hướng tăng trưởng bền vững mà chịu sự chi phối mạnh bởi các sự kiện kinh tế vĩ mô và tâm lý theo mùa vụ. Sự kiện trong tháng 8 là điểm nhấn quan trọng nhất, tạo ra một đỉnh cao đột biến trước khi thị trường bước vào giai đoạn điều chỉnh và thận trọng hơn vào cuối năm.

Biểu đồ 11.vẽ biểu đồ

library(ggplot2)
library(scales) 
format_ty <- function(x) {
  paste0(round(x / 1e9, 1), " Tỷ")}
ggplot(monthly_usa_2024_volume, 
       aes(x = YearMonth, y = Total_Volume)) +  
  geom_bar(stat = "identity", fill = "lightgreen") +
  geom_text(aes(label = format_ty(Total_Volume)), 
            vjust = -0.5,size = 3.5) +
  scale_y_continuous(labels = comma,
                     expand = expansion(mult = c(0, 0.1))) + 
   labs(title = "Tổng Khối lượng giao dịch của MỸ theo Tháng Năm 2024",
    x = "Tháng (Year-Month)",y = "Tổng Khối lượng giao dịch (Total volume)") +
  theme_minimal() +theme( axis.text.x = element_text(angle = 45, hjust = 1))

Giải thích: (1-2) Nạp thư viện. (3-4) Đây là một hàm tự tạo tên là format_ty để biến những con số rất lớn thành định dạng ngắn gọn hơn. (5-6) Khởi tạo biểu đồ,Bắt đầu quá trình vẽ biểu đồ (7)Thêm lớp biểu đồ cột. (8-9) Thêm nhãn số liệu lên trên các cột. (10-11) Tùy chỉnh trục Y. (12-13) Thêm tiêu đề và nhãn cho các trục (14) Tinh chỉnh giao diện chung

Ý nghĩa:

(Quý 1): Các cột từ tháng 1 đến tháng 3 đều rất cao, thể hiện một khởi đầu năm đầy năng lượng. Về mặt kinh tế, điều này cho thấy sự lạc quan của nhà đầu tư. Dòng tiền chảy mạnh vào thị trường, có thể do kỳ vọng vào việc Cục Dự trữ Liên bang Mỹ (FED) sẽ có chính sách tiền tệ nới lỏng hơn, hoặc do kết quả kinh doanh tốt của các doanh nghiệp trong quý trước đó.

(Quý 2): Một xu hướng giảm rõ rệt được thể hiện qua các cột từ tháng 4 đến tháng 6. Đây là một mô hình kinh điển, phản ánh tâm lý chốt lời và giảm thiểu rủi ro của thị trường. Các nhà đầu tư thường có xu hướng giảm hoạt động trước kỳ nghỉ hè, và giai đoạn này cũng thường thiếu vắng các thông tin kinh tế vĩ mô mang tính đột phá.

Tâm điểm của Năm - Biến động Quý 3: * Tháng 8 - Đỉnh điểm Bùng nổ: Cột của tháng 8 là cao nhất, là điểm nhấn nổi bật nhất của cả năm. Một khối lượng giao dịch đột biến như vậy không xảy ra ngẫu nhiên. Nó báo hiệu một sự kiện kinh tế vĩ mô cực kỳ quan trọng tại Mỹ. Đó có thể là một báo cáo lạm phát tốt hơn dự kiến, một tín hiệu tích cực từ FED, hoặc một làn sóng đầu tư vào một lĩnh vực công nghệ mới nổi đã đạt đến đỉnh điểm. * Tháng 9 - Sự Sụt giảm Nhanh chóng: Ngay sau đỉnh cao, khối lượng giao dịch giảm mạnh nhất trong năm. Điều này cho thấy sự bùng nổ của tháng 8 không bền vững. Nó có thể là một đợt “xả hàng” chốt lời hàng loạt hoặc phản ánh những lo ngại mới về kinh tế vĩ mô quay trở lại, phù hợp với “Hiệu ứng tháng 9” (thường là tháng có hiệu suất kém trên thị trường chứng khoán). Giai đoạn Thận trọng Cuối năm (Quý 4): * Các cột của 3 tháng cuối năm đều ở mức thấp hơn đáng kể so với đầu năm. Điều này cho thấy tâm lý thận trọng đang bao trùm thị trường. Nhà đầu tư có thể đang chờ đợi những định hướng rõ ràng hơn cho năm kinh tế tiếp theo, hoặc lo ngại về rủi ro suy thoái. Mặc dù có sự phục hồi nhẹ vào tháng 11 và 12 (có thể do hiệu ứng mua sắm cuối năm).

4.1.14.Thống kê khối lượng giao dịch của nhóm ngành công nghệ của mỹ trong năm 2024

tech_usa_2024_monthly_volume <- d %>%       
  mutate(Date = ymd_hms(Date), Year = year(Date),  YearMonth = format(Date, "%Y-%m")) %>%
  filter( tolower(Country) == "usa", Year == 2024,                   
    tolower(Industry_Tag) == "technology" ) %>%
  group_by(YearMonth) %>%  
   summarise(Total_Volume = sum(Volume, na.rm = TRUE), Industry_Tag = first(Industry_Tag), .groups = 'drop' )
kable(tech_usa_2024_monthly_volume)
YearMonth Total_Volume Industry_Tag
2024-01 15157313800 technology
2024-02 15979570300 technology
2024-03 17285194500 technology
2024-04 14789834300 technology
2024-05 14469025100 technology
2024-06 14208761596 technology
2024-07 12844111657 technology
2024-08 15245326678 technology
2024-09 11366656245 technology
2024-10 10640904721 technology
2024-11 10503536908 technology
2024-12 10756604259 technology

Giải thích: (1-2) Bắt đầu và Xử lý Ngày tháng (mutate). (3) Lọc dữ liệu (filter). (4) Nhóm dữ liệu (group_by). (5-6) Tổng hợp dữ liệu (summarise). (7) Lưu và xuất kết quả

Kết quả này cho thấy “nhịp đập” của riêng ngành công nghệ Mỹ, một trong những ngành quan trọng và biến động nhất.

  1. Đầu năm Sôi động: Khối lượng giao dịch đạt đỉnh vào tháng 3 (17.2 tỷ). Điều này cho thấy sự quan tâm rất lớn của nhà đầu tư vào cổ phiếu công nghệ trong Quý 1, có thể được thúc đẩy bởi các báo cáo tài chính tích cực hoặc sự lạc quan về các xu hướng mới như Trí tuệ nhân tạo (AI).

  2. Biến động Mạnh: Ngành công nghệ cho thấy sự biến động rất lớn. Sau đỉnh tháng 3, khối lượng sụt giảm mạnh vào giữa năm (đáy vào tháng 7 và tháng 10). Điều này phản ánh tính chất nhạy cảm của ngành công nghệ với các tin tức về lãi suất, chính sách vĩ mô và tâm lý chung của thị trường.

  3. Dẫn dắt Thị trường: Khi so sánh với khối lượng giao dịch của toàn thị trường Mỹ, có thể thấy ngành công nghệ chiếm một tỷ trọng rất lớn và thường là động lực chính tạo ra các đỉnh và đáy của thị trường chung. Ví dụ, sự phục hồi của thị trường vào tháng 8 cũng được dẫn dắt bởi sự tăng trở lại của khối lượng giao dịch trong ngành công nghệ.

    => Dữ liệu cho thấy năm 2024 là một năm đầy biến động đối với ngành công nghệ Mỹ. Nó vừa là nguồn thu hút dòng tiền lớn nhất khi thị trường lạc quan, vừa là ngành chịu áp lực chốt lời mạnh mẽ khi tâm lý nhà đầu tư trở nên thận trọng.

Biểu đồ 12.vẽ biểu đồ

library(ggplot2)
library(scales) 
format_ty <- function(x) {
  paste0(round(x / 1e9, 1), " Tỷ")}
ggplot(tech_usa_2024_monthly_volume, 
       aes(x = YearMonth, y = Total_Volume, fill = YearMonth)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = format_ty(Total_Volume)), vjust = -0.5,       
            size = 3.5) +         
  scale_y_continuous(labels = comma,  expand = expansion(mult = c(0, 0.1))) +
  labs(title = "Tổng Khối lượng giao dịch Ngành Technology (USA,2024)",
    x = "Tháng (Year-Month)",y = "Tổng Khối lượng giao dịch (Total Volume)",
    fill = "Tháng") +theme_minimal() +theme(
    axis.text.x = element_text(angle = 45, hjust = 1),legend.position = "none" )

Giải thích: (1-2) Nạp thư viện. (3-4) Đây là một hàm tự tạo tên là format_ty để biến những con số rất lớn thành định dạng ngắn gọn hơn. (5-6) Khởi tạo biểu đồ,Bắt đầu quá trình vẽ biểu đồ (7)Thêm lớp biểu đồ cột. (8-9) Thêm nhãn số liệu lên trên các cột. (10-11) Tùy chỉnh trục Y. (12-13) Thêm tiêu đề và nhãn cho các trục (14) Tinh chỉnh giao diện chung

Ý nghĩa:

  1. (Quý 1 - Màu nóng: đỏ, cam):
    • Khối lượng giao dịch cực kỳ cao trong 3 tháng đầu năm, đạt đỉnh vào tháng 3 (17.2 tỷ). Đây là giai đoạn “risk-on” (chấp nhận rủi ro) mạnh mẽ. Nhà đầu tư đổ xô vào cổ phiếu công nghệ, có thể được thúc đẩy bởi:
      • Các công nghệ đột phá như Trí tuệ nhân tạo (AI).
      • Kỳ vọng vào báo cáo tài chính Quý 4/2023 của các “ông lớn” công nghệ.
      • Niềm tin rằng Cục Dự trữ Liên bang (FED) sẽ sớm cắt giảm lãi suất, điều này có lợi cho các công ty tăng trưởng như công nghệ.
  2. Giai đoạn Điều chỉnh và Hạ nhiệt (Quý 2 & 3 - Màu lạnh: xanh lá, xanh dương):
    • Có một xu hướng giảm rõ rệt từ tháng 4, và khối lượng giao dịch chạm đáy vào tháng 10 (10.6 tỷ). Giai đoạn này thể hiện sự thận trọng và chốt lời.
      • Sau một đợt tăng nóng, các nhà đầu tư bắt đầu bán ra để hiện thực hóa lợi nhuận.
      • Những lo ngại về lạm phát dai dẳng và khả năng FED giữ lãi suất cao trong thời gian dài hơn (“higher for longer”) gây áp lực lên các cổ phiếu công nghệ.
      • Dòng tiền có thể đã tạm thời chuyển sang các ngành an toàn hơn (hàng tiêu dùng, y tế).
  3. Sự Phục hồi Cuối năm (Quý 4 - Màu tím, hồng):
    • Khối lượng giao dịch tăng trở lại đáng kể trong tháng 11 và tháng 12. Dấu hiệu của sự lạc quan quay trở lại.
      • Hiệu ứng “Santa Claus Rally” (đợt tăng giá cuối năm) khi tâm lý thị trường được cải thiện.
      • Các quỹ đầu tư lớn cơ cấu lại danh mục, mua vào cổ phiếu công nghệ để chuẩn bị cho năm mới.
      • Có thể có những dữ liệu kinh tế vĩ mô tích cực (ví dụ: lạm phát hạ nhiệt) củng cố niềm tin vào một “cú hạ cánh mềm” cho nền kinh tế.

4.1.15.Thống kê khối lượng giao dịch của nhóm ngành BÁN LẺ (RETAIL) của mỹ trong năm 2024

retail_usa_2024_monthly_volume <- d %>%      
  mutate(Date = ymd_hms(Date),Year = year(Date),YearMonth = format(Date, "%Y-%m")) %>%
  filter( tolower(Country) == "usa",      
    Year == 2024,tolower(Industry_Tag) == "retail") %>%
  group_by(YearMonth) %>%
  summarise( Total_Volume = sum(Volume, na.rm = TRUE),Industry_Tag = first(Industry_Tag),.groups = 'drop')
kable(retail_usa_2024_monthly_volume)
YearMonth Total_Volume Industry_Tag
2024-01 279069900 retail
2024-02 237207700 retail
2024-03 336455500 retail
2024-04 260210300 retail
2024-05 286981500 retail
2024-06 266425593 retail
2024-07 275380362 retail
2024-08 343078669 retail
2024-09 247927535 retail
2024-10 247933162 retail
2024-11 427928597 retail
2024-12 363925569 retail

Giải thích: (1-2) Bắt đầu và Xử lý Ngày tháng (mutate). (3) Lọc dữ liệu (filter). (4) Nhóm dữ liệu (group_by). (5-6) Tổng hợp dữ liệu (summarise). (7) Lưu và xuất kết quả

Ý nghĩa:

  1. Tính Chu kỳ và Mùa vụ Rõ rệt:
    • Không giống như ngành công nghệ bị ảnh hưởng nhiều bởi tin tức vĩ mô, ngành bán lẻ cho thấy sự biến động gắn liền với các mùa mua sắm quan trọng.
    • Hai đỉnh cao nhất của khối lượng giao dịch rơi vào Tháng 3 (336 triệu) và đặc biệt là Tháng 8 (343 triệu).
      • Đỉnh tháng 8 có ý nghĩa kinh tế rất rõ ràng: một trong những mùa mua sắm lớn nhất trong năm tại Mỹ sau mùa lễ hội cuối năm. Khối lượng giao dịch tăng vọt cho thấy các nhà đầu tư đang tích cực mua bán cổ phiếu bán lẻ dựa trên kỳ vọng về doanh số cao trong mùa này.
      • Đỉnh tháng 3 có thể liên quan đến việc các công ty công bố kết quả kinh doanh cuối năm trước và đưa ra dự báo cho cả năm, thu hút sự chú ý của nhà đầu tư.

Biểu đồ 13. Vẽ biểu đồ

library(ggplot2)
library(scales)
format_trieu <- function(x) {
  paste0(round(x / 1e6, 1), " Tr")}
ggplot(retail_usa_2024_monthly_volume, 
       aes(x = YearMonth, y = Total_Volume, fill = YearMonth)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = format_trieu(Total_Volume)), vjust = -0.1,         
            size = 3.5) +         
  scale_y_continuous(labels = comma, 
                     expand = expansion(mult = c(0, 0.1))) +
  labs( title = "Tổng Khối lượng giao dịch Ngành bán lẻ (USA 2024)",
    x = "Tháng (Year-Month)",y = "Tổng Khối lượng giao dịch (Total Volume)",
    fill = "Tháng") + theme_minimal() + theme(
    axis.text.x = element_text(angle = 45, hjust = 3) )

Giải thích: (1-2) Nạp thư viện. (3-4) Đây là một hàm tự tạo tên là format_ty để biến những con số rất lớn thành định dạng ngắn gọn hơn. (5-6) Khởi tạo biểu đồ,Bắt đầu quá trình vẽ biểu đồ (7)Thêm lớp biểu đồ cột. (8-9) Thêm nhãn số liệu lên trên các cột. (10-11) Tùy chỉnh trục Y. (12-13) Thêm tiêu đề và nhãn cho các trục (14) Tinh chỉnh giao diện chung

Ý Nghĩa:

  1. Giai đoạn “Hậu Lễ hội” và Báo cáo Tài chính (Quý 1 - Màu nóng):
    • Khối lượng giao dịch tương đối cao, đạt đỉnh vào Tháng 3 (336 triệu). Giai đoạn này phản ánh sự quan tâm của nhà đầu tư sau mùa mua sắm lớn nhất năm trước. Tháng 1 và 2 là lúc các công ty bán lẻ công bố kết quả kinh doanh Quý 4 và cả năm. Khối lượng giao dịch cao trong tháng 3 cho thấy nhà đầu tư đang tích cực “đặt cược” dựa trên kết quả đã công bố và triển vọng cho năm 2024.
  2. Giai đoạn “Yên Tĩnh” và Chuẩn bị (Quý 2):
    • Khối lượng giao dịch có xu hướng ổn định ở mức trung bình. Đây là giai đoạn “trũng” của ngành bán lẻ, không có sự kiện mua sắm lớn nào. Khối lượng giao dịch phản ánh hoạt động bình thường, không có nhiều yếu tố đột biến.
  3. Mùa Tựu trường “Back-to-School” (Tháng 8 - Màu xanh dương đậm):
    • Khối lượng giao dịch tăng vọt lên 343 triệu, một trong những đỉnh cao của năm. Đây là bằng chứng rõ ràng cho thấy tính mùa vụ. Mùa tựu trường là mùa mua sắm lớn thứ hai trong năm tại Mỹ. Khối lượng giao dịch tăng mạnh cho thấy các nhà đầu tư đang tích cực giao dịch cổ phiếu bán lẻ, kỳ vọng vào doanh số bán hàng tăng vọt từ quần áo, đồ dùng học tập, và thiết bị điện tử.
  4. Tâm điểm của Năm - Mùa Mua sắm Lễ hội (Tháng 11 - Màu tím):
    • Khối lượng giao dịch bùng nổ và đạt đỉnh cao nhất năm một cách ngoạn mục tại 427 triệu.
      • Khối lượng giao dịch khổng lồ này cho thấy mức độ kỳ vọng và đầu cơ cực lớn của thị trường.
      • Các nhà đầu tư đang đổ tiền vào, đặt cược xem công ty nào sẽ chiến thắng trong cuộc chiến giành giật ví tiền của người tiêu dùng. Nó phản ánh niềm tin (hoặc sự hy vọng) rằng người tiêu dùng vẫn còn “hầu bao rủng rỉnh” để chi tiêu mạnh tay cho dịp lễ.

4.1.16.Thống kê khối lượng giao dịch của nhóm ngành CHĂM SÓC SỨC KHỎE (HEALTHCARE) của mỹ trong năm 2024

healthcare_usa_2024_monthly_volume <- d %>%      
  mutate( Date = ymd_hms(Date), Year = year(Date),  YearMonth = format(Date, "%Y-%m") ) %>%
  filter( tolower(Country) == "usa",Year == 2024,                   
    tolower(Industry_Tag) == "healthcare" ) %>%
  group_by(YearMonth) %>%                       
  summarise( Total_Volume = sum(Volume, na.rm = TRUE),Industry_Tag = first(Industry_Tag), .groups = 'drop' )
kable(healthcare_usa_2024_monthly_volume)
YearMonth Total_Volume Industry_Tag
2024-01 138190400 healthcare
2024-02 158288200 healthcare
2024-03 140389700 healthcare
2024-04 175712200 healthcare
2024-05 174612900 healthcare
2024-06 146566262 healthcare
2024-07 173752660 healthcare
2024-08 177967190 healthcare
2024-09 124474055 healthcare
2024-10 146082724 healthcare
2024-11 191947045 healthcare
2024-12 221274816 healthcare

Giải thích: (1-2) Bắt đầu và Xử lý Ngày tháng (mutate). (3) Lọc dữ liệu (filter). (4) Nhóm dữ liệu (group_by). (5-6) Tổng hợp dữ liệu (summarise). (7) Lưu và xuất kết quả

Ý nghĩa:

Khối lượng giao dịch không tăng vọt vào tháng 11 hay tháng 12 (mùa lễ hội) như ngành bán lẻ. Các tháng có khối lượng cao nhất lại rải rác trong năm, ví dụ như Tháng 4 (175 triệu), Tháng 5 (174 triệu), và Tháng 8 (177 triệu). Điều này khẳng định rằng động lực của ngành healthcare không đến từ chi tiêu của người tiêu dùng theo mùa. Thay vào đó, khối lượng giao dịch của ngành này thường bị ảnh hưởng bởi các yếu tố nội tại và đặc thù của ngành: * Tin tức về thuốc: Công bố kết quả thử nghiệm lâm sàng thành công của một loại thuốc mới. * Phê duyệt của FDA: Việc Cục quản lý Thực phẩm và Dược phẩm Hoa Kỳ cấp phép cho một loại thuốc hoặc thiết bị y tế mới. * Thương vụ M&A: Các vụ mua bán và sáp nhập giữa các công ty dược phẩm, công nghệ sinh học. * Chính sách y tế: Các thay đổi trong luật bảo hiểm y tế, chính sách giá thuốc của chính phủ.

Biểu đồ 14.Vẽ biểu đồ

format_trieu <- function(x) { paste0(round(x / 1e6, 1), " Tr")}
ggplot(healthcare_usa_2024_monthly_volume, 
       aes(x = YearMonth, y = Total_Volume, fill = YearMonth)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = format_trieu(Total_Volume)), vjust = -0.5,         
            size = 3.5) +        
  scale_y_continuous(labels = comma, 
                     expand = expansion(mult = c(0, 0.1))) +
  labs(title ="Tổng Khối lượng giao dịch Ngành chăm sóc sức khỏe USA 2024",
    x = "Tháng (Year-Month)", y = "Tổng Khối lượng giao dịch (Total Volume)",
    fill = "Tháng" ) + theme_minimal() + theme(
    axis.text.x = element_text(angle = 45, hjust = 1))

Giải thích: (1) Đây là một hàm tự tạo tên là format_trieu để biến những con số rất lớn thành định dạng ngắn gọn hơn. (2-3) Khởi tạo biểu đồ,Bắt đầu quá trình vẽ biểu đồ (4)Thêm lớp biểu đồ cột. (5-6) Thêm nhãn số liệu lên trên các cột. (7-8) Tùy chỉnh trục Y. (9-12) Thêm tiêu đề và nhãn cho các trục

  1. Tính ổn định một tích cực:
    • Đầu tiên là biểu đồ không có những đỉnh cao chót vót hay những vực sâu thăm thẳm như ngành công nghệ hay bán lẻ. Các cột có chiều cao tương đối đồng đều. Điều này phản ánh bản chất của ngành healthcare. Nhu cầu chăm sóc sức khỏe là không co giãn theo chu kỳ kinh tế. Dù kinh tế bùng nổ hay suy thoái, người dân vẫn cần thuốc men và dịch vụ y tế. Vì vậy, dòng tiền đầu tư vào ngành này có xu hướng ổn định và dài hạn hơn là đầu cơ ngắn hạn.
  2. Sự Bùng nổ Cuối năm (Tháng 11 và 12 - Màu tím, hồng):
    • Khối lượng giao dịch tăng vọt vào hai tháng cuối năm, đạt đỉnh cao nhất vào Tháng 12 (221 triệu). Sự tăng đột biến này không phải do mùa vụ mua sắm như ngành bán lẻ. Nó có thể được giải thích bằng một vài giả thuyết kinh tế quan trọng:
      • Tái cơ cấu danh mục cuối năm (Portfolio Rebalancing): Các quỹ đầu tư lớn thường bán bớt các cổ phiếu đã tăng giá mạnh trong năm (như công nghệ) để chốt lời và mua vào các cổ phiếu phòng thủ (như healthcare) để cân bằng lại danh mục, chuẩn bị cho một năm mới có thể có nhiều bất ổn.
      • Kỳ vọng vào Chính sách: Cuối năm thường là thời điểm các chính phủ công bố các chính sách y tế, ngân sách cho năm sau. Một tin tức tích cực về chính sách có thể thu hút dòng tiền lớn.
      • ** Nhà đầu tư có thể mua vào từ tháng 12 để đón đầu “Hiệu ứng tháng Giêng” (thời điểm thị trường chứng khoán thường có xu hướng tăng).
  3. Giai đoạn “Trũng” giữa năm (Tháng 9 - Màu xanh dương nhạt):
    • Tháng 9 có khối lượng giao dịch thấp nhất. Điều này phù hợp với “Hiệu ứng tháng 9” trên toàn thị trường, khi nhà đầu tư thường có xu hướng giảm giao dịch và thận trọng hơn. Ngành healthcare cũng không nằm ngoài xu hướng tâm lý chung này, dù mức độ ảnh hưởng ít hơn.

4.1.17.Thống kê khối lượng giao dịch của PHÁP (FRANCE) trong năm 2024

monthly_france_2024_volume <- d %>%    
  mutate(Date = ymd_hms(Date),Year = year(Date),
         YearMonth = format(Date, "%Y-%m")) %>%
  filter(Year == 2024,tolower(Country) == "france") %>%
  group_by(YearMonth) %>%              
  summarise( Total_Volume = sum(Volume, na.rm = TRUE),.groups = 'drop')
kable(monthly_france_2024_volume)
YearMonth Total_Volume
2024-01 5736100
2024-02 4535000
2024-03 4607000
2024-04 4299400
2024-05 4279300
2024-06 5239817
2024-07 12049117
2024-08 8008934
2024-09 15502574
2024-10 15782740
2024-11 12819859
2024-12 14366913

Giải thích: (1-2) Bắt đầu và Xử lý Ngày tháng (mutate). (3) Lọc dữ liệu (filter). (4) Nhóm dữ liệu (group_by). (5-6) Tổng hợp dữ liệu (summarise). (7) Lưu và xuất kết quả

Về Xu hướng (Hoàn toàn khác biệt với Mỹ)

Đây là điểm phân tích thú vị nhất. Trong khi thị trường Mỹ sôi động đầu năm và hạ nhiệt cuối năm, thị trường Pháp lại có xu hướng ngược lại.

  • Giai đoạn đầu năm yên ắng (Tháng 1 - 6):
    • Khối lượng giao dịch rất thấp và ổn định, chỉ khoảng 4-5 triệu. Giai đoạn này cho thấy sự quan tâm của nhà đầu tư (trong bộ dữ liệu này) đối với cổ phiếu Pháp là không cao. Thị trường có thể đang trong giai đoạn đi ngang hoặc chờ đợi những tín hiệu kinh tế rõ ràng hơn từ Châu Âu.
  • Sự bùng nổ Bất thường từ giữa năm (Tháng 7 - 10):
    • Khối lượng giao dịch tăng vọt một cách đột biến, từ 5.2 triệu (tháng 6) lên 12 triệu (tháng 7) và đạt đỉnh cao nhất vào tháng 9 (15.5 triệu) và tháng 10 (15.7 triệu). Một sự thay đổi đột ngột và mạnh mẽ như vậy cho thấy đã có một sự kiện kinh tế hoặc doanh nghiệp rất quan trọng xảy ra, thu hút sự chú ý của nhà đầu tư:
      • Chính sách của Ngân hàng Trung ương Châu Âu (ECB): Có thể ECB đã đưa ra một quyết định quan trọng về lãi suất hoặc một gói kích thích kinh tế nào đó có ảnh hưởng lớn đến các doanh nghiệp Pháp.
      • Tin tức ngành: Nền kinh tế Pháp được dẫn dắt bởi các ngành hàng xa xỉ, năng lượng, và hàng không. Một tin tức đột phá, báo cáo lợi nhuận vượt kỳ vọng, hoặc một thương vụ M&A lớn trong các ngành này có thể đã tạo ra một làn sóng giao dịch khổng lồ.

Biểu đồ 15.vẽ biểu đồ

format_trieu <- function(x) paste0(round(x / 1e6, 1), " Tr")
ggplot(monthly_france_2024_volume, aes(x = YearMonth, y = Total_Volume)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  geom_text(aes(label = format_trieu(Total_Volume)),vjust = -0.5,         
            size = 3.5) +  scale_y_continuous(labels = comma,expand = expansion(mult = c(0, 0.1))) +
  labs( title = "Tổng Khối lượng giao dịch của PHÁP theo Tháng (2024)",
    x = "Tháng (Year-Month)", y = "Tổng Khối lượng giao dịch (Total Volume)") +
  theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))

Giải thích: (1) Định nghĩa một hàm mới tên là format_trieu nhận đầu vào là một vector các con số x,hàm sapply sẽ lặp qua từng phần tử (val) trong vector x và áp dụng hàm bên trong cho nó. (2) Vẽ biểu đồ (ggplot2):Sử dụng bảng dữ liệu đã được tổng hợp theo tháng. (3) Thêm lớp biểu đồ (4) Thêm nhãn số liệu lên trên các cột. (5-6) Thêm nhãn biểu đồ (7) Tùy chỉnh thêm: xoay các nhãn trên trục X 45 độ để dễ đọc.

  1. Sự tương phản rõ rệt với Thị trường Mỹ:
    • Trong khi thị trường Mỹ sôi động vào đầu năm và hạ nhiệt dần về cuối năm, thị trường Pháp lại cho thấy một kịch bản ngược lại: trầm lắng đầu năm và bùng nổ dữ dội vào nửa cuối năm. Điều này cho thấy các động lực kinh tế vĩ mô của châu Âu và Pháp có thể đang diễn ra theo một chu kỳ khác so với Mỹ. Các nhà đầu tư toàn cầu có thể đã “xoay trục”, chuyển sự chú ý và dòng vốn từ Mỹ sang các thị trường khác như châu Âu vào giai đoạn sau của năm.
  2. Giai đoạn 1: Nửa đầu năm trầm lắng (Tháng 1 - 6):
    • Các cột biểu đồ trong 6 tháng đầu năm rất thấp và gần như đi ngang, chỉ dao động quanh mức 4-5 triệu. Đây là giai đoạn thị trường thiếu chất xúc tác. Nhà đầu tư có thể đang đứng ngoài quan sát, chờ đợi những tín hiệu rõ ràng hơn về tình hình kinh tế của Pháp và Khu vực đồng tiền chung châu Âu (Eurozone). Có thể lạm phát vẫn còn cao hoặc các chính sách của Ngân hàng Trung ương Châu Âu (ECB) chưa đủ hấp dẫn.
  3. Giai đoạn 2: Sự bùng nổ từ giữa năm (Tháng 7 - 12):
    • Điểm ngoặt xảy ra vào Tháng 7, khi khối lượng giao dịch tăng vọt hơn gấp đôi so với tháng 6. Xu hướng này tiếp tục tăng mạnh và đạt đỉnh vào Tháng 9 và 10 (trên 15 triệu). Một sự thay đổi đột ngột và mạnh mẽ như vậy chắc chắn được thúc đẩy bởi một sự kiện kinh tế hoặc chính trị lớn:
      • Thay đổi Chính sách Tiền tệ: Có thể ECB đã bắt đầu cắt giảm lãi suất hoặc tung ra một gói kích thích kinh tế, khiến thị trường chứng khoán châu Âu trở nên hấp dẫn hơn.
      • Tin tức Doanh nghiệp Lớn: Nền kinh tế Pháp có nhiều “gã khổng lồ” trong ngành hàng xa xỉ (LVMH), năng lượng, hàng không. Một báo cáo lợi nhuận vượt trội, một thương vụ M&A lớn, hoặc một thông tin đột phá từ các tập đoàn này có thể đã thu hút một lượng lớn dòng tiền.
      • Dữ liệu Kinh tế Vĩ mô Tích cực: Có thể dữ liệu lạm phát của châu Âu đã hạ nhiệt đáng kể hoặc dữ liệu tăng trưởng GDP của Pháp tốt hơn dự kiến, củng cố niềm tin của nhà đầu tư.

4.1.18.Thống kê khối lượng giao dịch của nhóm ngành GAMING của PHÁP (FRANCE) trong năm 2024

gaming_france_2024_monthly_volume <- d %>% 
  mutate( Date = ymd_hms(Date), Year = year(Date),              
    YearMonth = format(Date, "%Y-%m")) %>%
  filter(tolower(Country) == "france", Year == 2024,tolower(Industry_Tag) == "gaming" ) %>%
  group_by(YearMonth) %>%
  summarise( Total_Volume = sum(Volume, na.rm = TRUE), 
    Industry_Tag = first(Industry_Tag), .groups = 'drop')
kable(gaming_france_2024_monthly_volume)
YearMonth Total_Volume Industry_Tag
2024-01 565700 gaming
2024-02 735800 gaming
2024-03 764500 gaming
2024-04 525900 gaming
2024-05 1070400 gaming
2024-06 400292 gaming
2024-07 2175283 gaming
2024-08 727946 gaming
2024-09 6456248 gaming
2024-10 7706362 gaming
2024-11 3808402 gaming
2024-12 5551588 gaming

Giải thích: (1-2) Bắt đầu và Xử lý Ngày tháng (mutate). (3) Lọc dữ liệu (filter). (4) Nhóm dữ liệu (group_by). (5-6) Tổng hợp dữ liệu (summarise). (7) Lưu và xuất kết quả

Ý nghĩa:

  1. Sự tương phản rõ rệt với Thị trường Mỹ:
    • Trong khi thị trường Mỹ sôi động vào đầu năm và hạ nhiệt dần về cuối năm, thị trường Pháp trầm lắng đầu năm và bùng nổ dữ dội vào nửa cuối năm.
  2. Giai đoạn 1: Nửa đầu năm trầm lắng (Tháng 1 - 6):
    • Các cột biểu đồ trong 6 tháng đầu năm rất thấp và gần như đi ngang, chỉ dao động quanh mức 4-5 triệu.
    • Ý nghĩa kinh tế: Đây là giai đoạn thị trường thiếu chất xúc tác. Nhà đầu tư có thể đang đứng ngoài quan sát, chờ đợi những tín hiệu rõ ràng hơn về tình hình kinh tế của Pháp và Khu vực đồng tiền chung châu Âu (Eurozone). Có thể lạm phát vẫn còn cao hoặc các chính sách của Ngân hàng Trung ương Châu Âu (ECB) chưa đủ hấp dẫn.
  3. Giai đoạn 2: Sự bùng nổ từ giữa năm (Tháng 7 - 12):
    • Điểm ngoặt xảy ra vào Tháng 7, khi khối lượng giao dịch tăng vọt hơn gấp đôi so với tháng 6. Xu hướng này tiếp tục tăng mạnh và đạt đỉnh vào Tháng 9 và 10 (trên 15 triệu).Một sự thay đổi đột ngột và mạnh mẽ như vậy chắc chắn được thúc đẩy bởi một sự kiện kinh tế hoặc chính trị lớn:
      • Thay đổi Chính sách Tiền tệ: Có thể ECB đã bắt đầu cắt giảm lãi suất hoặc tung ra một gói kích thích kinh tế, khiến thị trường chứng khoán châu Âu trở nên hấp dẫn hơn.

Biểu đồ 20. vẽ biểu đồ

library(ggplot2)
library(scales) 
format_trieu_nghin <- function(x) { sapply(x, function(val) {
    if (val >= 1e6) {paste0(round(val / 1e6, 1), " Tr")} else if (val >= 1e3) {
      paste0(round(val / 1e3, 1), " N")} else {as.character(val) }})}
ggplot(gaming_france_2024_monthly_volume, 
       aes(x = YearMonth, y = Total_Volume, fill = YearMonth)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = format_trieu_nghin(Total_Volume)),  vjust = -0.5, size = 3.5) +     
  scale_y_continuous(labels = comma,  expand = expansion(mult = c(0, 0.1))) +
  labs(title = "Tổng Khối lượng giao dịch Ngành GAMING France 2024",
    x = "Tháng (Year-Month)", y = "Tổng Khối lượng giao dịch (Total Volume)",
    fill = "Tháng") + theme_minimal() +
  theme( axis.text.x = element_text(angle = 45, hjust = 1))

Giải thích: (1-2) Nạp thư viện cần thiết. (3-4) Đây là một hàm tự tạo tên là format_ty để biến những con số rất lớn thành định dạng ngắn gọn hơn. (5-6) Khởi tạo biểu đồ,Bắt đầu quá trình vẽ biểu đồ (7)Thêm lớp biểu đồ cột. (8-9) Thêm nhãn số liệu lên trên các cột. (10-11) Tùy chỉnh trục Y. (12-13) Thêm tiêu đề và nhãn cho các trục (14) Tinh chỉnh giao diện chung

Ý nghĩa: 1. Giai đoạn 1: Nửa đầu năm “ngủ đông” (Tháng 1 - 8): - Các cột biểu đồ trong 8 tháng đầu năm đều ở mức rất thấp, hầu hết dưới 1 triệu đơn vị.Đây là giai đoạn chờ đợi sản phẩm. Ngành game Pháp Khối lượng giao dịch thấp phản ánh sự thiếu quan tâm của nhà đầu tư khi không có chất xúc tác nào. Thị trường đang chờ đợi sự kiện lớn tiếp theo. 2. Giai đoạn 2: Sự bùng nổ của một “Bom tấn” (Tháng 9 và 10): - Đây là điểm nhấn kịch tính nhất của biểu đồ. Khối lượng giao dịch bùng nổ dữ dội, tăng từ 727 nghìn (tháng 8) lên 6.4 triệu (tháng 9) và đạt đỉnh cao nhất năm tại 7.7 triệu (tháng 10). Mức tăng gấp 10 lần. Một sự kiện như thế này chỉ có thể được giải thích bằng việc ra mắt một trò chơi siêu phẩm. - Thời điểm Vàng: Mùa thu (tháng 9, 10) là “cửa sổ vàng” để các hãng game tung ra những sản phẩm lớn nhất, nhằm tối đa hóa doanh thu trong mùa mua sắm lễ hội cuối năm (Quý 4). - Phản ứng của Nhà đầu tư: Khối lượng giao dịch khổng lồ cho thấy các nhà đầu tư đang đổ xô vào giao dịch cổ phiếu của công ty phát hành. Họ đang “đặt cược” vào sự thành công của sản phẩm mới, dựa trên các chiến dịch marketing rầm rộ, đánh giá ban đầu và sự mong đợi của cộng đồng game thủ. Đây là đỉnh điểm của sự đầu cơ và kỳ vọng. 3. Giai đoạn 3: Giao dịch “Hậu ra mắt” (Tháng 11 và 12): - Khối lượng giao dịch vẫn ở mức rất cao so với đầu năm nhưng đã hạ nhiệt so với đỉnh tháng 10. Giai đoạn này phản ánh sự chuyển dịch từ “giao dịch theo kỳ vọng” sang “giao dịch theo kết quả thực tế”. - Sự hưng phấn ban đầu đã qua đi. Giờ đây, nhà đầu tư đang giao dịch dựa trên các báo cáo doanh số tuần đầu tiên, doanh số Black Friday, và dự báo doanh thu cho toàn bộ Quý 4. - Khối lượng vẫn cao cho thấy sản phẩm này vẫn là tâm điểm chú ý, quyết định đến kết quả kinh doanh cả năm của công ty.

4.1.19. Thống kê khối lượng giao dịch của nhóm ngành HÀNG XA XỈ (LUXURY GOODS) của PHÁP (FRANCE) trong năm 2024

luxury_france_2024_monthly_volume <- d %>% 
  mutate(Date = ymd_hms(Date),Year = year(Date),YearMonth = format(Date, "%Y-%m")) %>%
  filter( tolower(Country) == "france", Year == 2024,  tolower(Industry_Tag) == "luxury goods" ) %>%
  group_by(YearMonth) %>%
  summarise( Total_Volume = sum(Volume, na.rm = TRUE),
    Industry_Tag = first(Industry_Tag), .groups = 'drop')
kable(luxury_france_2024_monthly_volume)
YearMonth Total_Volume Industry_Tag
2024-01 5170400 luxury goods
2024-02 3799200 luxury goods
2024-03 3842500 luxury goods
2024-04 3773500 luxury goods
2024-05 3208900 luxury goods
2024-06 4839525 luxury goods
2024-07 9873834 luxury goods
2024-08 7280988 luxury goods
2024-09 9046326 luxury goods
2024-10 8076378 luxury goods
2024-11 9011457 luxury goods
2024-12 8815325 luxury goods

Giải thích: (1-2) Bắt đầu và Xử lý Ngày tháng (mutate). (3) Lọc dữ liệu (filter). (4) Nhóm dữ liệu (group_by). (5-6) Tổng hợp dữ liệu (summarise). (7) Lưu và xuất kết quả

Giai đoạn 1: Nửa đầu năm “Chờ đợi và Theo dõi” (Tháng 1 - 6) - Khối lượng giao dịch thấp cho thấy một thị trường trầm lắng. Đây là giai đoạn các nhà đầu tư đang không chắc chắn. Họ có thể lo ngại về các yếu tố như: - Lạm phát và lãi suất cao ở châu Âu làm giảm sức mua. - Sự phục hồi kinh tế không chắc chắn ở thị trường quan trọng là Trung Quốc. - Căng thẳng địa chính trị. - Trong bối cảnh đó, nhà đầu tư có xu hướng “đứng ngoài quan sát” thay vì tích cực giao dịch, dẫn đến khối lượng thấp. Giai đoạn 2: Sự kiện “Chất xúc tác” và Bùng nổ (Tháng 7 trở đi) - Sự tăng vọt đột ngột vào tháng 7 là tín hiệu quan trọng nhất. Nó cho thấy một tin tức cực kỳ tích cực đã được công bố, phá vỡ hoàn toàn tâm lý chờ đợi trước đó. - Ý nghĩa: Chất xúc tác này rất có thể là: - Báo cáo Lợi nhuận Quý 2 Vượt trội: Đây là giả thuyết hợp lý nhất. Một trong những “gã khổng lồ” hàng xa xỉ của Pháp đã công bố kết quả kinh doanh Quý 2 (thường được công bố vào tháng 7) tốt hơn rất nhiều so với dự báo của các nhà phân tích. Đặc biệt nếu doanh số ở thị trường Trung Quốc phục hồi mạnh mẽ. - Tín hiệu Tích cực từ Kinh tế Vĩ mô: Có thể Ngân hàng Trung ương Châu Âu (ECB) đã phát đi tín hiệu về việc cắt giảm lãi suất, hoặc dữ liệu lạm phát hạ nhiệt nhanh hơn dự kiến, làm tăng niềm tin vào sức mua của người tiêu dùng. - Khối lượng giao dịch duy trì ở mức cao trong các tháng tiếp theo (8, 9, 10) cho thấy đây không phải là một sự kiện nhất thời. Tin tức tích cực đó đã khiến các nhà đầu tư đánh giá lại toàn bộ ngành hàng xa xỉ, dẫn đến một làn sóng mua bán sôi động và kéo dài.

Biểu đồ 21.Vẽ biểu đồ

format_trieu_nghin <- function(x) { sapply(x, function(val) {if (val >= 1e6) {
      paste0(round(val / 1e6, 1), " Tr")} else if (val >= 1e3) {
      paste0(round(val / 1e3, 1), " N") } else { as.character(val) } })}
ggplot(luxury_france_2024_monthly_volume, 
       aes(x = YearMonth, y = Total_Volume, fill = YearMonth)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = format_trieu_nghin(Total_Volume)), vjust = -0.5, size = 3.5) +         
  scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.1))) +
  labs(title = "Tổng Khối lượng giao dịch Ngành hàng xa xỉ France 2024",
    x = "Tháng (Year-Month)", y = "Tổng Khối lượng giao dịch (Total Volume)",
    fill = "Tháng" ) +theme_minimal() +
  theme( axis.text.x = element_text(angle = 45, hjust = 1))

Giải thích: (1-3) Định nghĩa một hàm mới tên là format_trieu_nghin nhận đầu vào là một vector các con số x,hàm sapply sẽ lặp qua từng phần tử (val) trong vector x và áp dụng hàm bên trong cho nó. (4) Vẽ biểu đồ (ggplot2):Sử dụng bảng dữ liệu đã được tổng hợp theo tháng, (5) Vẽ biểu đồ cột, với chiều cao lấy trực tiếp từ y. (6) Tùy chỉnh trục Y. (8-11) Tùy chỉnh thêm: xoay các nhãn trên trục X 45 độ để dễ đọc.

ý Nghĩa:

Giai đoạn đầu năm (Tháng 1 - Tháng 5): Khởi đầu tương đối trầm lắngTháng 1 (5,170,400)Khối lượng giao dịch khá cao, có thể do dư âm của mùa mua sắm cuối năm trước (lễ hội, quà tặng) hoặc do làn sóng du khách mua sắm dịp Tết Nguyên Đán từ châu Á. Tháng 2 - Tháng 5 Giai đoạn này chứng kiến sự sụt giảm và duy trì ở mức thấp (từ 3.2 đến 4 triệu). Đây thường là mùa thấp điểm của du lịch và mua sắm sau các kỳ nghỉ lễ lớn. Sức mua trong nước và quốc tế đều giảm.

Giai đoạn giữa và cuối năm (Tháng 6 - Tháng 12): Bùng nổ mạnh mẽ - Sự bứt phá từ tháng 6 (4,839,525) và đạt đỉnh vào tháng 7 (9,873,834): Đây là điểm nhấn quan trọng nhất của biểu đồ. Khối lượng giao dịch tháng 7 cao hơn gấp đôi so với các tháng đầu năm. - Duy trì ở mức rất cao (Tháng 8 - Tháng 12): Các tháng còn lại đều duy trì khối lượng giao dịch trên 7.2 triệu, đặc biệt các tháng 9, 11, 12 đều xấp xỉ 9 triệu.

CHƯƠNG II: Phân tích những chỉ số của báo cáo tài chính ảnh hưởng đến hoạt động của công ty Cổ phần Chứng khoán Bảo Việt

Phần 1.Giới thiệu tổng quan

Công ty Cổ phần Chứng khoán Bảo Việt: là một trong những công ty chứng khoán đầu tiên được thành lập tại Việt Nam, đóng vai trò tiên phong trong việc xây dựng và phát triển thị trường chứng khoán non trẻ của đất nước. Lịch sử hình thành và Vị thế Thành lập: BVSC được thành lập vào tháng 11 năm 1999, với cổ đông sáng lập là Tổng Công ty Bảo hiểm Việt Nam (nay là Tập đoàn Tài chính - Bảo hiểm Bảo Việt). Vị thếtiên phong BVSC là một trong hai công ty chứng khoán đầu tiên tham gia vào phiên giao dịch lịch sử của thị trường chứng khoán Việt Nam vào ngày 28/07/2000. Thành viên của hệ sinh thái tài chính vững mạnh BVSC là một thành viên cốt lõi trong hệ sinh thái tài chính toàn diện của Tập đoàn Bảo Việt - tập đoàn tài chính-bảo hiểm hàng đầu Việt Nam thuộc sở hữu nhà nước. Điều này mang lại cho BVSC lợi thế lớn về thương hiệu, mạng lưới khách hàng và tiềm lực tài chính. Mã chứng khoán Cổ phiếu của công ty được niêm yết trên Sàn Giao dịch Chứng khoán Hà Nội (HNX) với mã BVS.Các Lĩnh vực hoạt động chính BVSC cung cấp đầy đủ các dịch vụ của một công ty chứng khoán chuyên nghiệp, bao gồm Dịch vụ Môi giới Chứngkhoán, Cung cấp dịch vụ mở tài khoản, đặt lệnh giao dịch, tư vấn đầu tư cho cả khách hàng cá nhân và tổ chức. Đây là mảng hoạt động cốt lõi của công ty. Dịch vụ Ngân hàng Đầu tư (Investment Banking - IB). Đây là một thế mạnh của BVSC. Các dịch vụ bao gồm tư vấn phát hành chứng khoán (cổ phiếu, trái phiếu). Tư vấn Cổ phần hóa, IPO (Phát hành lần đầu ra công chúng). Tư vấn Tái cấu trúc tài chính doanh nghiệp. Tư vấn Mua bán & Sáp nhập (M&A). Dịch vụ Phân tích và Tư vấn Đầu tư đội ngũ phân tích của BVSC được đánh giá cao trên thị trường, thường xuyên phát hành các báo cáo phân tích vĩ mô, ngành và doanh nghiệp chất lượng, cung cấp khuyến nghị đầu tư cho khách hàng. Hoạt động Tự doanh Công ty thực hiện đầu tư vào các công cụ tài chính như cổ phiếu, trái phiếu… bằng nguồn vốn của chính mình. Dịch vụ Lưu ký Chứng khoán: Cung cấp dịch vụ đăng ký, lưu ký, thực hiện quyền cho các cổ đông. Điểm mạnh và Lợi thế cạnh tranh Thương hiệu uy tín và lâu đời: BVSC là một cái tên bảo chứng cho sự tin cậy và chuyên nghiệp trên thị trường, được xây dựng qua hơn 20 năm hoạt động. Hệ sinh thái từ Tập đoàn Bảo Việt Lợi thế cực lớn khi có thể tận dụng mạng lưới khách hàng rộng lớn từ các công ty con trong tập đoàn như Bảo hiểm Nhân thọBảo Việt, Bảo hiểm PVI, Ngân hàng Bảo Việt (BaoViet Bank)… Năng lực tư vấn Ngân hàng Đầu tư hàng đầu BVSC luôn nằm trong top đầu thị trường về các thương vụ tư vấn phát hành, M&A, đặc biệt là với các doanh nghiệp nhà nước. Chất lượng phân tích chuyên sâu các báo cáo phân tích của BVSC được nhiều nhà đầu tư và tổ chức tin dùng vì tính khách quan và chiều sâu. Tình hình tài chính lành mạnh với sự hậu thuẫn từ tập đoàn mẹ, BVSC luôn duy trì một nền tảng tài chính vững chắc.Thách thức và Định hướng phát triển Thách thức: Giống như các công ty chứng khoán truyền thống khác, BVSC phải đối mặt với sự cạnh tranh gay gắt từ các công ty chứng khoán mới, đặc biệt là các công ty có vốn đầu tư nước ngoài mạnh về công nghệ và chính sách phí cạnh tranh (“cuộc chiến zero-fee”). Định hướng BVSC đang tập trung vào việc chuyển đổi số, nâng cao trải nghiệm khách hàng trên các nền tảng trực tuyến, đồng thời tiếp tục phát huy thế mạnh cốt lõi là mảng Ngân hàng Đầu tư và chất lượng tư vấn để tạo sự khác biệt.

LÝ DO CHÍNH CHỌN PHÂN TÍCH CHỨNG KHOÁN BẢO VIỆT (BVS) Chứng nhân lịch sử của ngành: BVS là một trong những công ty chứng khoán đầu tiên. Phân tích nó giống như nhìn lại toàn bộ lịch sử phát triển của thị trường chứng khoán Việt Nam. Sức mạnh từ “hệ sinh thái” độc nhất BVS có “bệ đỡ” khổng lồ từ Tập đoàn Bảo Việt (bảo hiểm, ngân hàng). Điều này mang lại lợi thế về vốn, thương hiệu và khách hàng mà không công ty nào khác có được. Dữ liệu phân tích dồi dào, đáng tin cậy Vì đã niêm yết rất lâu nên dữ liệu tài chính của BVS rất đầy đủ, công khai và minh bạch, cực kỳ thuận lợi để phân tích sâu. Case study kinh điển “truyền thống vs. hiện đại” BVS là hình mẫu cho một “người khổng lồ” truyền thống đang phải đối đầu với các công ty công nghệ mới. Phân tích BVS giúp trả lời câu hỏi: “Doanh nghiệp lớn làm thế nào để tồn tại và thay đổi?”.

2.1. Đọc dữ liệu

d2 <- read.csv("C:/Users/DELL/Downloads/NN_LT_THAY_TUONG/DL_BCTC_BVS/dl2_TMT.csv")

2.2. Thông tin cơ bản về dữ liệu

2.2.1.Kích thước bộ dữ liệu

dim(d2)
## [1] 12 23

Giải thích: Kết quả cho ta thấy số quan sát là 12 dòng và số biến là 23 cột trong bộ dữ liệu. VIệc này giúp kiểm tra quy mô bộ dữ liệu và xác định ngay có đủ dữ liệu để phân tích chuyên sauu không.

2.2.2.Tên các biến bộ dữ liệu

names(d2)
##  [1] "Year"                  "Chi_tieu"              "TSNH"                 
##  [4] "CKCV"                  "TSTC"                  "TSTC_thong.qua.lai.lo"
##  [7] "TSDH"                  "TTS"                   "NPT"                  
## [10] "VCSH"                  "LNCPP"                 "DT_hoat_dong"         
## [13] "CP_hoat_dong"          "CP_du_phong"           "CP_tu.van_TC"         
## [16] "CPLV"                  "TNK_va_CPK"            "LN_chua_thuc_hien"    
## [19] "CPTTNDN"               "LNSTTNDN"              "CPTTNDN.hien.hanh"    
## [22] "TNTTNDN.hoan.lai"      "PTK"

Giải thích: Hiển thị tên tất cả các biến, giúp người đọc biết ngay dữ liệu gồm những thông tin gì. Điều này rất quan trọng để chọn biến phù hợp cho từng phân tích.

2.2.3.Xem thông tim tóm tắt về dự liệu

summary(d2)
##       Year      Chi_tieu            TSNH                CKCV          
##  Min.   :2014   Mode:logical   Min.   :1.363e+12   Min.   :4.974e+09  
##  1st Qu.:2016   NA's:12        1st Qu.:1.580e+12   1st Qu.:7.359e+11  
##  Median :2018                  Median :2.382e+12   Median :1.599e+12  
##  Mean   :2019                  Mean   :2.937e+12   Mean   :1.745e+12  
##  3rd Qu.:2021                  3rd Qu.:4.009e+12   3rd Qu.:2.493e+12  
##  Max.   :2024                  Max.   :5.688e+12   Max.   :3.504e+12  
##                                                                       
##       TSTC           TSTC_thong.qua.lai.lo      TSDH          
##  Min.   :7.106e+11   Min.   :1.138e+11     Min.   :1.915e+09  
##  1st Qu.:1.378e+12   1st Qu.:1.752e+11     1st Qu.:1.995e+11  
##  Median :2.379e+12   Median :4.088e+11     Median :3.192e+11  
##  Mean   :2.856e+12   Mean   :3.939e+11     Mean   :3.079e+11  
##  3rd Qu.:4.005e+12   3rd Qu.:5.684e+11     3rd Qu.:4.726e+11  
##  Max.   :5.685e+12   Max.   :7.379e+11     Max.   :5.477e+11  
##                                                               
##       TTS                  NPT                 VCSH          
##  Min.   :-2.280e+08   Min.   :1.432e+10   Min.   :1.341e+12  
##  1st Qu.: 1.827e+12   1st Qu.:3.120e+11   1st Qu.:1.568e+12  
##  Median : 2.298e+12   Median :9.131e+11   Median :1.752e+12  
##  Mean   : 2.657e+12   Mean   :1.402e+12   Mean   :1.843e+12  
##  3rd Qu.: 3.524e+12   3rd Qu.:2.046e+12   3rd Qu.:2.154e+12  
##  Max.   : 6.014e+12   Max.   :3.699e+12   Max.   :2.475e+12  
##                                                              
##      LNCPP             DT_hoat_dong        CP_hoat_dong       
##  Min.   :-1.430e+10   Min.   :1.119e+11   Min.   :-7.088e+11  
##  1st Qu.: 1.520e+11   1st Qu.:2.355e+11   1st Qu.:-4.729e+11  
##  Median : 2.731e+11   Median :2.963e+11   Median :-2.847e+11  
##  Mean   : 3.313e+11   Mean   :3.894e+11   Mean   :-2.196e+11  
##  3rd Qu.: 4.671e+11   3rd Qu.:5.275e+11   3rd Qu.:-1.026e+11  
##  Max.   : 8.097e+11   Max.   :1.096e+12   Max.   : 9.906e+11  
##                                           NA's   :1           
##   CP_du_phong          CP_tu.van_TC             CPLV           
##  Min.   :-8.593e+10   Min.   :-1.633e+10   Min.   :-1.349e+11  
##  1st Qu.:-6.501e+09   1st Qu.:-1.417e+10   1st Qu.:-1.123e+11  
##  Median : 1.670e+03   Median :-1.256e+10   Median :-3.018e+10  
##  Mean   : 2.992e+10   Mean   :-1.227e+10   Mean   :-5.189e+10  
##  3rd Qu.: 1.518e+10   3rd Qu.:-1.051e+10   3rd Qu.:-6.679e+09  
##  Max.   : 4.124e+11   Max.   :-8.908e+09   Max.   : 5.519e+09  
##                                                                
##    TNK_va_CPK         LN_chua_thuc_hien       CPTTNDN          
##  Min.   :-8.995e+09   Min.   :-7.726e+10   Min.   :-6.808e+10  
##  1st Qu.:-7.602e+08   1st Qu.: 4.277e+09   1st Qu.:-3.546e+10  
##  Median :-1.945e+08   Median : 1.505e+10   Median :-2.045e+10  
##  Mean   :-1.002e+09   Mean   : 3.762e+10   Mean   : 1.612e+10  
##  3rd Qu.:-1.401e+04   3rd Qu.: 4.120e+10   3rd Qu.:-1.711e+10  
##  Max.   : 2.693e+08   Max.   : 3.423e+11   Max.   : 4.567e+11  
##                                                                
##     LNSTTNDN         CPTTNDN.hien.hanh    TNTTNDN.hoan.lai    
##  Min.   :8.693e+10   Min.   :-5.876e+10   Min.   :-9.320e+09  
##  1st Qu.:1.017e+11   1st Qu.:-3.623e+10   1st Qu.:-3.089e+09  
##  Median :1.274e+11   Median :-2.044e+10   Median :-2.117e+09  
##  Mean   :1.421e+11   Mean   : 2.624e+10   Mean   :-1.388e+09  
##  3rd Qu.:1.591e+11   3rd Qu.:-1.703e+10   3rd Qu.:-2.104e+08  
##  Max.   :2.829e+11   Max.   : 5.712e+11   Max.   : 1.045e+10  
##                                                               
##       PTK           
##  Min.   :1.162e+10  
##  1st Qu.:1.303e+10  
##  Median :1.555e+10  
##  Mean   :1.649e+11  
##  3rd Qu.:2.069e+10  
##  Max.   :1.793e+12  
## 

câu lệnh này cho chúng ta thấy ở biến tsnh (Tài sản ngắn hạn) dao động từ khoảng 1.363 nghìn tỷ đến 5.688 nghìn tỷ, hay giá trị trung bình là 2.937 nghìn tỷ.

2.2.4. Số lượng biến định tính và địn lượng

sum(sapply(d2, is.numeric))
## [1] 22

Giải thích: - sapply() áp dụng hàm is.numeric() cho tất cả các biến (cột) của bộ dữ liệu “d” => Hàm này sẽ trả về một vector chứa TRUE/FALSE, thể hiện các biến nào là kiểu số (numeric). - sum() tính tổng số TRUE (đếm biến kiểu số). Như vậy, kết quả là tổng số biến định lượng trong dataset.

sum(sapply(d2, is.character) | sapply(d, is.factor))
## [1] 0

=>Kết quả cho ta thấy số quan sát là 12 dòng và số biến là 23 cột trong bộ dữ liệu thì không cố số liệu định lượng. Việc này giúp kiểm tra quy mô bộ dữ liệu và xác định ngay có đủ dữ liệu để phân tích chuyên sauu không.

2.2.5.Kiểu dữ liệu của các biến trong bộ dữ

loại <- data.frame(
Kiểu_dữ_liệu = sapply(d2, class))
kable(loại, col.names = c("Tên biến" , "Kiểu dữ liệu"))
Tên biến Kiểu dữ liệu
Year integer
Chi_tieu logical
TSNH numeric
CKCV numeric
TSTC numeric
TSTC_thong.qua.lai.lo numeric
TSDH numeric
TTS numeric
NPT numeric
VCSH numeric
LNCPP numeric
DT_hoat_dong numeric
CP_hoat_dong numeric
CP_du_phong numeric
CP_tu.van_TC numeric
CPLV numeric
TNK_va_CPK numeric
LN_chua_thuc_hien numeric
CPTTNDN numeric
LNSTTNDN numeric
CPTTNDN.hien.hanh numeric
TNTTNDN.hoan.lai numeric
PTK numeric

Giải thích: (1) Hàm data.frame() chuyển đổi kết quả này thành bảng, gồm hai cột: tên biến và kiểu dữ liệu của (2) Hàm sapply() để áp dụng hàm class cho tất cả các cột của dữ liệu movies_dataset. (3) Hàm kale() giúp hiển thị bảng này dưới dạng đẹp, dễ đọc trong báo cáo hoặc tài liệu.

Ý nghĩa:Kết quả cho thấy dữ liệu có sự đa dạng về kiểu biến, phù hợp cho các phân tích đa dạng như mô tả, so sánh, hay xây dựng mô hình dự báo. Biết rõ kiểu dữ liệu giúp nhóm dễ dàng xử lý, mã hóa, chuyển đổi hoặc trực quan hóa phù hợp từng loại biến, nâng cao độ chính xác và chuyên nghiệp của báo cáo

2.2.6.Xem dữ liệu các cột bắt đầu bằng chữ T

d2[startsWith(names(d2), "T")]

2.2.7.Xem 3 dòng dữ liệu bất kỳ

d2[1:3, ]  

2.2.8.Xem 1 cột cụ thể

d2$TSNH
##  [1] 5.08099e+12 5.68830e+12 3.65201e+12 5.50263e+12 3.05748e+12 2.21677e+12
##  [7] 2.54708e+12 1.74090e+12 1.36324e+12 1.36324e+12 1.38495e+12 1.64493e+12

Giải thích: sử dụng toán tử $ để truy cập một cột của dataframe

2.2.9.Kiểm tra giá trị NA

kable(colSums(is.na(d2)))
x
Year 0
Chi_tieu 12
TSNH 0
CKCV 0
TSTC 0
TSTC_thong.qua.lai.lo 0
TSDH 0
TTS 0
NPT 0
VCSH 0
LNCPP 0
DT_hoat_dong 0
CP_hoat_dong 1
CP_du_phong 0
CP_tu.van_TC 0
CPLV 0
TNK_va_CPK 0
LN_chua_thuc_hien 0
CPTTNDN 0
LNSTTNDN 0
CPTTNDN.hien.hanh 0
TNTTNDN.hoan.lai 0
PTK 0

=>Từ kết quả cúng ta thấy cột Chi_tieu có 12 giá trị NA và cột CP_hoat_dong có 1 giá trị NA.

2.2.10.Kiểm tra trùng lặp

so_trung_lap_d2 <- sum(duplicated(d2))
show(so_trung_lap_d2)
## [1] 1

Giải thích: (1) Đếm số lượng dòng (hoặc phần tử) bị lặp lại trong một đối tượng dữ liệu có tên là d2.

=> Kết quả hiện về cho biết có hàng bị trùng lặp hoàn toàn

Phần 2.Xử lý dữ liệu thô và Phân tổ dữ liệu theo đặc tính

2.1.Làm sạch dữ liệu

library(janitor)
df <- clean_names(d2)
names(df)
##  [1] "year"                  "chi_tieu"              "tsnh"                 
##  [4] "ckcv"                  "tstc"                  "tstc_thong_qua_lai_lo"
##  [7] "tsdh"                  "tts"                   "npt"                  
## [10] "vcsh"                  "lncpp"                 "dt_hoat_dong"         
## [13] "cp_hoat_dong"          "cp_du_phong"           "cp_tu_van_tc"         
## [16] "cplv"                  "tnk_va_cpk"            "ln_chua_thuc_hien"    
## [19] "cpttndn"               "lnsttndn"              "cpttndn_hien_hanh"    
## [22] "tnttndn_hoan_lai"      "ptk"

Giải thích: (1) Nạp thư viện ‘janitor’ để có thể sử dụng hàm clean_names() (2) Tùy chọn có thể kiểm tra tên cột mới đã được làm sạch hay chưa (3) xuất kết quả các cột tên biến

=> Đê dễ dàng cho những phân tích nâng cao hơn về bộ dữ liệu

2.2.Loại bỏ hàng có giá trị trùng lặp hoàn toàn

library(knitr)
so_trung_lap <- sum(duplicated(d2))
bang_ket_qua <- data.frame(
  `Nội dung kiểm tra` = "Tổng số dòng bị trùng lặp",
  `Kết quả` = so_trung_lap)
kable(bang_ket_qua, caption = "Kết quả kiểm tra dữ liệu trùng lặp")
Kết quả kiểm tra dữ liệu trùng lặp
Nội.dung.kiểm.tra Kết.quả
Tổng số dòng bị trùng lặp 1

Giải Thích: (1) Nạp thư viện cần thiết. (2) Tính toán số dòng trùng lặp (giữ nguyên logic của bạn). (3) Tạo một data frame nhỏ để hiển thị kết quả.

Ý nghĩa: Kết quả cho thấy bộ dữ liệu không có một biến anfo bị trùng lặp với nhau

2.3.Loại bỏ cột chi tiêu vì nhiều giá trị NA

library(janitor)
library(dplyr)
df <- clean_names(d2)
df <- df %>% select(-chi_tieu)

Giải thích: (1-2) Nạp thư viện cho phiên làm việc. (3) Tùy chọn có thể kiểm tra tên cột mới đã được làm sạch hay chưa. (4) Loại bỏ biến chi_tieu.

Ý nghĩa:Và kết quả đã loại bỏ đi cộ chỉ tiêu có chứa giá trị NA

2.4.Xử lý các giá trị NA tại file d3

d3 <- read.csv("C:/Users/DELL/Downloads/NN_LT_THAY_TUONG/d3_cleaned_financial_ratios.csv")
library(tidyverse)
library(knitr)
cols_to_clean <- c("OPM", "COSR")
d3_cleaned <- d3 %>% mutate(across( .cols = all_of(cols_to_clean), .fns = ~replace_na(.x, mean(.x, na.rm = TRUE))))
d3_cleaned %>% select(year, all_of(cols_to_clean)) %>%  tail() %>% kable(caption = "Kết quả ") 
Kết quả
year OPM COSR
6 2019 1.525658 0.5259966
7 2018 1.626772 0.6159873
8 2017 1.560892 0.5204764
9 2016 1.327921 0.3719677
10 2015 1.058998 0.0146927
11 2014 1.223585 0.1748609

Gải thích: (1-2) Nạp thư viện cần thiết. (3) Chỉ định 2 cột cần xử lý NA. (4) Xử lý giá trị NA và tạo một data frame mới. (5) In ra kết quả của 2 cột đã được xử lý. (6) Kiểm tra lại số lượng NA của toàn bộ bảng.

Ý Nghĩa:Từ kết quả trên ta thấy dữ liệu trên đã hết giá trị NA bằng cách điền giá trị trung bình vào giá trị NA

2.5.Phân tổ Doanh thu hoạt động theo năm

nguong_doanh_thu <- 400000000000 
df_phan_to_doanh_thu <- df %>%
  mutate( doanh_thu_to = ifelse(dt_hoat_dong > nguong_doanh_thu, "To A", "To B")) %>%
  select(year, dt_hoat_dong, doanh_thu_to,) %>% 
  arrange(doanh_thu_to, desc(dt_hoat_dong)) 
kable(df_phan_to_doanh_thu)
year dt_hoat_dong doanh_thu_to
2021 1.09612e+12 To A
2020 5.68060e+11 To A
2019 5.41264e+11 To A
2018 5.22954e+11 To A
2017 4.62044e+11 To A
2014 3.05344e+11 To B
2015 2.87179e+11 To B
2016 2.75739e+11 To B
2016 2.75739e+11 To B
2024 1.14658e+11 To B
2023 1.12357e+11 To B
2022 1.11876e+11 To B

Giải thích: (1) Định nghĩa ngưỡng. (2-5) Phân loại, chọn và sắp xếp dữ liệu. (6) Hiển thị kết quả.

**Ý nghĩa:* 1. Tổ A: Câu chuyện về Tăng trưởng và Đột phá

  • Giai đoạn 2017 - 2020: Doanh thu hoạt động (dt_hoat_dong) tăng trưởng đều đặn và bền vững qua từng năm (từ 462 nghìn tỷ lên 568 nghìn tỷ). Điều này cho thấy một nền tảng kinh doanh vững chắc, hoạt động hiệu quả và chiếm lĩnh thị trường tốt.
  • Năm đột phá 2021: Doanh thu tăng vọt gần gấp đôi (từ 568 nghìn tỷ lên gần 1,1 triệu tỷ). Đây không phải là tăng trưởng thông thường mà là một bước nhảy vọt.
    • Ý nghĩa kinh tế: Doanh nghiệp có thể đã thực hiện một thương vụ sáp nhập (M&A) thành công, ra mắt một sản phẩm chủ lực bùng nổ, hoặc thắng một hợp đồng cực lớn. Đây là tín hiệu về sức khỏe tài chính và tiềm năng phát triển cực kỳ tốt.
  1. Tổ B: Câu chuyện về Suy thoái và Trì trệ
  • Giai đoạn 2014 - 2016: Doanh thu có xu hướng suy giảm nhẹ (từ 305 nghìn tỷ xuống 275 nghìn tỷ). Doanh nghiệp đã có dấu hiệu gặp khó khăn từ trước.
  • Giai đoạn 2022 - 2024: Doanh thu sụt giảm nghiêm trọng so với giai đoạn trước (chỉ còn khoảng 111-114 nghìn tỷ, tức là mất gần 2/3 quy mô). Sau đó, doanh thu gần như đi ngang, tăng trưởng không đáng kể.
    • Ý nghĩa kinh tế: Doanh nghiệp này rất có thể đã trải qua một cuộc khủng hoảng lớn giữa năm 2016 và 2022, chẳng hạn như mất thị phần vào tay đối thủ, phải bán bớt một mảng kinh doanh quan trọng, hoặc mô hình kinh doanh đã lỗi thời. Hiện tại, họ đã ổn định ở một quy mô nhỏ hơn nhiều và đang vật lộn để tìm lại đà tăng trưởng.

2.6.Phân tổ tài sản ngắn hạn theo năm

nguong_tsnh <- 3000000000000 
df_phan_to_tsnh <- df %>%
  mutate(tsnh_to = ifelse(tsnh > nguong_tsnh, "To A", "To B")) %>%
  select(year,tsnh, tsnh_to, ) %>% 
  arrange(tsnh_to, desc(tsnh)) 
kable(df_phan_to_tsnh)
year tsnh tsnh_to
2023 5.68830e+12 To A
2021 5.50263e+12 To A
2024 5.08099e+12 To A
2022 3.65201e+12 To A
2020 3.05748e+12 To A
2018 2.54708e+12 To B
2019 2.21677e+12 To B
2017 1.74090e+12 To B
2014 1.64493e+12 To B
2015 1.38495e+12 To B
2016 1.36324e+12 To B
2016 1.36324e+12 To B

Giải thích: (1) Định nghĩa ngưỡng. (2-5) Phân loại, chọn và sắp xếp dữ liệu. (6) Hiển thị kết quả.

Ý nghĩa: 1. Tổ A: Câu chuyện về Tăng trưởng Bùng nổ và Biến động

  • Xu hướng chính: Tài sản ngắn hạn tăng trưởng cực kỳ mạnh mẽ trong giai đoạn 2020-2024, từ ~3 triệu tỷ lên đến đỉnh điểm ~5.7 triệu tỷ.
  • Sự biến động: Mức tăng trưởng không đều đặn. Có sự sụt giảm đáng kể vào năm 2022 trước khi tăng mạnh trở lại.
  • Ý nghĩa kinh tế:
    • Doanh nghiệp đang đầu tư rất mạnh mẽ vào hoạt động kinh doanh: tích trữ lượng lớn hàng tồn kho để chuẩn bị cho các đợt bán hàng lớn, hoặc doanh thu tăng vọt dẫn đến các khoản phải thu từ khách hàng cũng tăng theo.
    • Sự biến động cho thấy một mô hình kinh doanh năng động, có thể theo dự án hoặc theo chu kỳ. Họ sẵn sàng tăng mạnh tài sản để nắm bắt cơ hội, sau đó có thể thu hẹp lại khi cần thiết. Đây là dấu hiệu của một công ty chấp nhận rủi ro để tăng trưởng.
  1. Tổ B: Câu chuyện về Sự Ổn định và Phục hồi
  • Xu hướng chính: Quy mô tài sản ngắn hạn nhỏ hơn đáng kể so với Tổ A. Đã có một giai đoạn chững lại/suy giảm nhẹ (2014-2016), sau đó là một giai đoạn phục hồi và tăng trưởng ổn định (2017-2018).
  • Sự ổn định: Mức tăng trưởng (hoặc suy giảm) qua các năm là điều độ hơn, không có những bước nhảy vọt hay sụt giảm đột ngột như Tổ A.
  • Ý nghĩa kinh tế:
    • Doanh nghiệp này có quy mô hoạt động khiêm tốn hơn và quản lý tài sản một cách thận trọng.
    • Giai đoạn 2014-2016 có thể là lúc họ tái cấu trúc hoặc gặp khó khăn.
    • Giai đoạn sau 2016 cho thấy họ đã tìm lại được đà tăng trưởng, nhưng với tốc độ bền vững và dễ dự đoán hơn. Đây là đặc điểm của một công ty ưu tiên sự ổn định.

2.7.Tính các hệ số kinh tế

library(dplyr)
library(kableExtra)
d3 %>% mutate(across(where(is.numeric), round, 4)) %>%
  kable("latex", booktabs = TRUE, caption = "Bảng các hệ số kinh tế") %>%
  kable_styling(latex_options = "scale_down")
kable(d3[, c("year", "ROS", "ROA", "ROE", "EBIT", "OPM")])
year ROS ROA ROE EBIT OPM
2024 1.7439167 0.0394025 0.0807774 -141430891935 -6.810593
2023 1.7419742 0.0344285 0.0845536 -80402396012 7.444671
2022 1.3129536 0.0402674 0.0673508 -211965229402 7.466662
2021 0.2581323 0.0514904 0.1319425 -48522414739 1.205486
2020 0.2330388 0.0433310 0.0706125 -2878109172 1.603118
2019 0.2503584 0.0612129 0.0750071 -31631742600 1.525658
2018 0.1979753 0.0406817 0.0611837 -58227462999 1.626772
2017 0.2650072 0.0703877 0.0721071 3715746187 1.560892
2016 0.3688778 0.0747930 0.0648819 8372665487 1.327921
2015 0.3314376 0.0688019 0.0656092 35665986895 1.058998
2014 0.2847105 0.1223474 0.0648181 347785074890 1.223585
kable(d3[, c("year", "DR", "Debt_to_Equity_Ratio")]) 
year DR Debt_to_Equity_Ratio
2024 0.6213808 1.2738661
2023 0.6506494 1.5979445
2022 0.4596484 0.7688015
2021 0.6505547 1.6670242
2020 0.5035040 0.8205138
2019 0.2670672 0.3272502
2018 0.4852825 0.7298466
2017 0.2879149 0.2949479
2016 0.2294028 0.1990036
2015 0.1569205 0.1496388
2014 0.0201563 0.0106786

Giải Thích: (1-2) nạp thư viện. (3-5) Bắt đầu với data frame d3 và chuyển nó cho lệnh tiếp theo. (6-7) Tạo hai bảng nhỏ riêng biệt.

2.8.Giải thích rõ các biến

library(knitr)
library(kableExtra)
bien_so <- c("year", "ROS", "ROA", "ROE", "EBIT", "OPM", "DR", 
             "Debt_to_Equity_Ratio", "LIQ", "Asset_Turnover_Ratio", 
             "COSR", "Revenue_Growth_Rate", "Net_Income_Growth_Rate")
y_nghia <- c(
  "Năm ghi nhận dữ liệu.",
  "Tỷ suất lợi nhuận trên doanh thu (Return On Sales).",
  "Tỷ suất lợi nhuận trên tổng tài sản (Return On Assets).",
  "Tỷ suất lợi nhuận trên vốn chủ sở hữu (Return On Equity).",
  "Lợi nhuận trước lãi vay và thuế (Earnings Before Interest and Taxes).",
  "Biên lợi nhuận hoạt động (Operating Profit Margin).",
  "Tỷ lệ nợ trên tổng tài sản (Debt Ratio).",
  "Tỷ lệ nợ trên vốn chủ sở hữu.",
  "Tỷ số thanh khoản / Khả năng thanh toán (Liquidity Ratio).",
  "Vòng quay tài sản.",
  "Tỷ lệ giá vốn hàng bán trên doanh thu (Cost Of Sales Ratio).",
  "Tốc độ tăng trưởng doanh thu.",
  "Tốc độ tăng trưởng lợi nhuận ròng.")
df_giai_thich <- data.frame(`Biến_số` = bien_so,`Ý_nghĩa_và_Diễn_giải` = y_nghia)
df_giai_thich %>%
  kable( caption = "Bảng giải thích ý nghĩa các biến số tài chính", 
    booktabs = TRUE,  longtable = TRUE  ) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
    latex_options = c("striped", "repeat_header"),  full_width = FALSE,  position = "center"  ) %>%
  column_spec(1, bold = TRUE, width = "15em") %>%  column_spec(2, width = "35em") 
Bảng giải thích ý nghĩa các biến số tài chính
Biến_số Ý_nghĩa_và_Diễn_giải
year Năm ghi nhận dữ liệu.
ROS Tỷ suất lợi nhuận trên doanh thu (Return On Sales).
ROA Tỷ suất lợi nhuận trên tổng tài sản (Return On Assets).
ROE Tỷ suất lợi nhuận trên vốn chủ sở hữu (Return On Equity).
EBIT Lợi nhuận trước lãi vay và thuế (Earnings Before Interest and Taxes).
OPM Biên lợi nhuận hoạt động (Operating Profit Margin).
DR Tỷ lệ nợ trên tổng tài sản (Debt Ratio).
Debt_to_Equity_Ratio Tỷ lệ nợ trên vốn chủ sở hữu.
LIQ Tỷ số thanh khoản / Khả năng thanh toán (Liquidity Ratio).
Asset_Turnover_Ratio Vòng quay tài sản.
COSR Tỷ lệ giá vốn hàng bán trên doanh thu (Cost Of Sales Ratio).
Revenue_Growth_Rate Tốc độ tăng trưởng doanh thu.
Net_Income_Growth_Rate Tốc độ tăng trưởng lợi nhuận ròng.

Giải thích: (1-2) Nạp thưu viện. (3-5) Tạo vector chứa tên các biến. (6-19) Tạo vector chứa phần giải thích tương ứng. (20) Tạo một data frame (bảng) từ hai vector trên. (21-26) Tạo và Định dạng Bảng với `kableExtr.

Ý nghĩa: Year: Năm ghi nhận dữ liệu. ROS (Return On Sales): Tỷ suất lợi nhuận trên doanh thu. ROA (Return On Assets): Tỷ suất lợi nhuận trên tổng tài sản. ROE (Return On Equity): Tỷ suất lợi nhuận trên vốn chủ sở hữu. EBIT (Earnings Before Interest and Taxes): Lợi nhuận trước lãi vay và thuế. OPM (Operating Profit Margin): Biên lợi nhuận hoạt động. DR (Debt Ratio): Tỷ lệ nợ trên tổng tài sản. Debt_to_Equity_Ratio: Tỷ lệ nợ trên vốn chủ sở hữu. LIQ (Liquidity Ratio): Khả năng thanh toán/Thanh khoản. Asset_Turnover_Ratio: Vòng quay tài sản. COSR (Cost Of Sales Ratio): Tỷ lệ giá vốn hàng bán trên doanh thu. Revenue_Growth_Rate: Tốc độ tăng trưởng doanh thu. Net_Income_Growth_Rate: Tốc độ tăng trưởng lợi nhuận ròng.

2.9.Lập bảng thống kê mô tả của ROA

library(dplyr)
library(tidyr)
library(psych)
library(knitr)
thong_ke_mo_ta_roa <- d3 %>%
  summarise(
    so_quan_sat = n(),
    trung_binh = mean(ROA, na.rm = TRUE),
    trung_vi = median(ROA, na.rm = TRUE),
    do_lech_chuan = sd(ROA, na.rm = TRUE),
    gia_tri_nho_nhat = min(ROA, na.rm = TRUE),
    gia_tri_lon_nhat = max(ROA, na.rm = TRUE),
    he_so_bien_thien = ifelse(trung_binh != 0, (do_lech_chuan / trung_binh) * 100, NA),
    do_xien = psych::skew(ROA, na.rm = TRUE),
    do_nhon = psych::kurtosi(ROA, na.rm = TRUE))
thong_ke_doc <- thong_ke_mo_ta_roa %>%
  pivot_longer( cols = everything(), names_to = "Chi_so_thong_ke",  values_to = "Gia_tri" )
kable( thong_ke_doc,col.names = c("Chỉ số thống kê", "Giá trị"),
  caption = "Bảng thống kê mô tả của ROA",
  digits = 4 )
Bảng thống kê mô tả của ROA
Chỉ số thống kê Giá trị
so_quan_sat 11.0000
trung_binh 0.0588
trung_vi 0.0515
do_lech_chuan 0.0254
gia_tri_nho_nhat 0.0344
gia_tri_lon_nhat 0.1223
he_so_bien_thien 43.2320
do_xien 1.2404
do_nhon 0.7265

Giải thích: (1-4) Nạp thư viện cần thiết cho phiên làm việc. (5-15) Tính toán thống kê mô tả. (16-17) Đê xoay bảng kết quả. (18-20) In kết quả dạng dọc với kable.

Ý nghĩa kĩ thuật: so_quan_sat (Số lượng quan sát): Năm trung_binh (Giá trị trung bình): Là tổng của tất cả các giá trị ROA chia cho số lượng quan sát. trung_vi (Giá trị trung vị): Là giá trị nằm ở giữa của dữ liệu ROA khi được sắp xếp theo thứ tự tăng dần hoặc giảm dần. do_lech_chuan (Độ lệch chuẩn): Là một thước đo về mức độ phân tán hoặc độ trải rộng của các giá trị ROA xung quanh giá trị trung bình. gia_tri_nho_nhat (Giá trị nhỏ nhất): Là giá trị ROA nhỏ nhất được quan sát trong tập dữ liệu. gia_tri_lon_nhat (Giá trị lớn nhất): Là giá trị ROA lớn nhất được quan sát trong tập dữ liệu. he_so_bien_thien (Hệ số biến thiên - CV): Đây là tỷ lệ giữa độ lệch chuẩn và giá trị trung bình, được biểu thị bằng phần trăm. do_xien (Độ xiên): Một thước đo về tính bất đối xứng của phân phối ROA. do_nhon (Độ nhọn): Một thước đo về “độ dày của đuôi” của phân phối ROA.

Ý nghĩa kinh tế:

  • Trung bình (0.0588) & Trung vị (0.0515):

    • Trung bình mỗi năm, 100 đồng tài sản tạo ra 5.88 đồng lợi nhuận

    • Trung vị thấp hơn trung bình là điểm quan trọng nhất: Nó cho thấy phần lớn các năm, hiệu suất thực tế của công ty thấp hơn mức 5.88%. Chỉ có một vài năm hoạt động xuất sắc đã “kéo” con số trung bình lên.

  • Độ lệch chuẩn (0.0254) & Hệ số biến thiên (43.23%):

    • Các chỉ số này cho thấy mức độ biến động ở mức vừa phải. Hiệu quả kinh doanh của công ty không quá trồi sụt, tương đối ổn định.
  • Giá trị nhỏ nhất (0.0344) & lớn nhất (0.1223):

    • Khẳng định sự ổn định: Ngay cả trong năm tệ nhất, công ty vẫn có lãi (ROA > 3%). Năm tốt nhất, hiệu suất cao gấp gần 4 lần năm tệ nhất.
  • Độ xiên (1.2404 - Dương):

    • Khẳng định lại kết luận từ trung bình/trung vị: Dữ liệu bị “lệch phải”, có nghĩa là có một “cái đuôi” kéo dài về phía các giá trị ROA rất cao. Điều này xác nhận sự tồn tại của một vài năm hoạt động đột phá.
  • Độ nhọn (0.7265 - Dương):

    • Dữ liệu có xu hướng tập trung quanh giá trị trung tâm, nhưng vẫn có khả năng xuất hiện các giá trị đột biến.

Kết luận: Công ty có nền tảng hoạt động ổn định nhưng đôi khi đạt được những thành tựu vượt trội.

2.10. Lập bảng thống kê mô tả của DR

thong_ke_mo_ta_dr <- d3 %>%
  filter(!is.na(DR)) %>% 
  summarise(
    so_quan_sat = n(),
    trung_binh = mean(DR, na.rm = TRUE),
    trung_vi = median(DR, na.rm = TRUE),
    do_lech_chuan = sd(DR, na.rm = TRUE),
    gia_tri_nho_nhat = min(DR, na.rm = TRUE),
    gia_tri_lon_nhat = max(DR, na.rm = TRUE),
    he_so_bien_thien = ifelse(trung_binh != 0, (do_lech_chuan / trung_binh) * 100, NA),
    do_xien = psych::skew(DR, na.rm = TRUE),
    do_nhon = psych::kurtosi(DR, na.rm = TRUE)  )
thong_ke_doc <- thong_ke_mo_ta_dr %>%
  pivot_longer( cols = everything(), names_to = "Chi_so_thong_ke",  values_to = "Gia_tri" )
kable( thong_ke_doc,col.names = c("Chỉ số thống kê", "Giá trị"),
  caption = "Bảng thống kê mô tả của DR",
  digits = 4 )
Bảng thống kê mô tả của DR
Chỉ số thống kê Giá trị
so_quan_sat 11.0000
trung_binh 0.3939
trung_vi 0.4596
do_lech_chuan 0.2141
gia_tri_nho_nhat 0.0202
gia_tri_lon_nhat 0.6506
he_so_bien_thien 54.3627
do_xien -0.2332
do_nhon -1.4699

Giải thích:

  1. Chuẩn bị dữ liệu.
  2. hàm filter(!is.na(DR)) có nghĩa là hãy giữ lại tất cả các hàng mà giá trị trong cột DR không bị thiếu. (5-15) Tính toán thống kê mô tả. (16-17) Đê xoay bảng kết quả. (18-20) In kết quả dạng dọc với kable.

Ý nghĩa: * Trung bình (0.3939): * Trung bình trong 11 năm, có 39.4% tài sản của công ty được tài trợ bằng nợ vay. Đây là một mức nợ trung bình.

  • Trung vị (0.4596):
    • Đây là điểm quan trọng nhất. Trung vị (giá trị ở giữa) cao hơn trung bình. Điều này có nghĩa là trong phần lớn các năm, công ty có tỷ lệ nợ cao hơn 46%. Một vài năm có tỷ lệ nợ rất thấp đã “kéo” con số trung bình xuống.
  • Độ lệch chuẩn (0.2141) & Hệ số biến thiên (54.36%):
    • Hai chỉ số này cho thấy mức độ biến động rất cao. Tỷ lệ nợ của công ty dao động rất mạnh qua các năm, cho thấy một chiến lược tài chính không nhất quán.
  • Giá trị nhỏ nhất (0.02) & lớn nhất (0.65):
    • Khẳng định sự biến động: có năm công ty gần như không có nợ (chỉ 2%), nhưng cũng có năm nợ chiếm tới 65% tổng tài sản.
  • Độ xiên (-0.2332) & Độ nhọn (-1.4699):
    • Độ xiên âm: Khẳng định lại rằng có một vài giá trị nợ rất thấp đã làm lệch phân phối.
    • Độ nhọn âm: Dữ liệu phân tán rộng, không tập trung dày đặc quanh một giá trị nào, phù hợp với sự biến động lớn.

=> Tỷ lệ nợ của công ty không ổn định và có xu hướng nghiêng về mức nợ cao trong các năm điển hình, dù bị ảnh hưởng bởi một vài năm có chính sách nợ rất thấp.

2.11.Tính hệ số tương quan giữa ROA và các biến khác

numeric_cols <- d3 %>%
  select(-year, -EBIT) %>%
  select_if(is.numeric) %>%
  names()
correlation_matrix <- cor(d3[, numeric_cols], use = "pairwise.complete.obs")
kable(correlation_matrix["ROA", ])
x
ROS -0.4919230
ROA 1.0000000
ROE -0.2457952
OPM -0.1262530
DR -0.8704240
Debt_to_Equity_Ratio -0.7171233
LIQ 0.8480464
Asset_Turnover_Ratio 0.8600131
COSR -0.5426564
Revenue_Growth_Rate 0.1571748
Net_Income_Growth_Rate 0.0980653

Giải thích: (1) Bắt đầu với bảng dữ liệu d3. (2) Loại bỏ** 2 cột là yearEBIT ra khỏi phân tích. (3-4) Từ các cột còn lại, chỉ giữ lại những cột có dữ liệu là dạng số (numeric). (5) Tính toán Ma trận Tương quan. (6) Trích xuất và Hiển thị Kết quả cho ROA.

Ý nghĩa kinh tế: 1. Tương quan THUẬN mạnh nhất (cùng tăng, cùng giảm)

  • Asset_Turnover_Ratio (0.86)LIQ (0.85): Khi công ty sử dụng tài sản càng hiệu quả để tạo ra doanh thu (Vòng quay tài sản cao) và có khả năng thanh toán tốt (Thanh khoản cao), thì hiệu quả sinh lời trên tài sản (ROA) cũng càng cao. Đây là một mối quan hệ rất hợp lý.
  1. Tương quan NGHỊCH mạnh nhất (một cái tăng, cái kia giảm)
  • DR (-0.87)Debt_to_Equity_Ratio (-0.72): Khi công ty càng sử dụng nhiều nợ (cả trên tổng tài sản và trên vốn chủ sở hữu), thì hiệu quả sinh lời trên tài sản (ROA) lại càng có xu hướng giảm. Điều này có thể cho thấy việc vay nợ không được sử dụng hiệu quả để tạo ra lợi nhuận tương xứng.
  1. Các mối quan hệ đáng chú ý khác:
  • ROS (-0.49)ROE (-0.25):* Mối quan hệ nghịch chiều này khá bất thường. Nó cho thấy rằng trong trường hợp của công ty này, việc tăng biên lợi nhuận (ROS) hoặc tăng lợi nhuận cho cổ đông (ROE) không đồng nghĩa với việc hiệu quả sử dụng tổng tài sản (ROA) tăng theo, thậm chí còn có xu hướng ngược lại. Điều này củng cố thêm giả thuyết về việc sử dụng đòn bẩy tài chính chưa tối ưu.

=>Kết luận : Để cải thiện ROA, công ty nên tập trung vào việc tăng vòng quay tài sảnquản lý thanh khoản tốt, đồng thời phải cực kỳ cẩn trọng với việc sử dụng nợ vay.

2.12.Tương quan riêng lẻ của ROA với ROS

cor_roa_ros <- cor(d3$ROA, d3 $ROS, use = "pairwise.complete.obs")
kable(cor_roa_ros)
x
-0.491923

Giải thích: (1) Tính toán hệ số tương quan cor. (2) Hiển thị kết quả.

Ý nghĩa kinh tế Hệ số tương quan là âm (-0.491923 < 0). Điều này có nghĩa là có một mối quan hệ nghịch biến: khi tỷ suất sinh lời trên doanh thu (ROS) của công ty tăng lên, thì tỷ suất sinh lời trên tài sản (ROA) của công ty có xu hướng giảm xuống, và ngược lại. Thông thường, chúng ta mong đợi ROS và ROA có mối tương quan dương. Tuy nhiên, một tương quan âm có thể xảy ra trong một số trường hợp cụ thể, đặc biệt khi có sự đánh đổi (trade-off) giữa lợi nhuận biên (phản ánh bởi ROS) và hiệu quả sử dụng tài sản (phản ánh bởi Vòng quay tài sản).

2.13. Tính toán các thành phần của ROA (ROS và Asset Turnover) và so sánh với ROA thực tế

du_pont_analysis <- d3 %>%
  mutate(ROA_DuPont_Calculated = ROS * Asset_Turnover_Ratio)  %>%   
  select(year, ROA, ROS, Asset_Turnover_Ratio, ROA_DuPont_Calculated)
kable(du_pont_analysis)
year ROA ROS Asset_Turnover_Ratio ROA_DuPont_Calculated
2024 0.0394025 1.7439167 0.0225943 0.0394025
2023 0.0344285 1.7419742 0.0197640 0.0344285
2022 0.0402674 1.3129536 0.0306694 0.0402674
2021 0.0514904 0.2581323 0.1994730 0.0514904
2020 0.0433310 0.2330388 0.1859389 0.0433310
2019 0.0612129 0.2503584 0.2445010 0.0612129
2018 0.0406817 0.1979753 0.2054886 0.0406817
2017 0.0703877 0.2650072 0.2656066 0.0703877
2016 0.0747930 0.3688778 0.2027582 0.0747930
2015 0.0688019 0.3314376 0.2075863 0.0688019
2014 0.1223474 0.2847105 0.4297255 0.1223474

Giải thích: (1) Bắt đầu với bảng dữ liệu (data frame) có tên là d3. (2) Hàm này dùng để tạo ra một cột mới. (4) Sau khi đã tính toán xong, hàm này được dùng để chọn ra những cột quan trọng nhất và sắp xếp lại chúng theo một thứ tự hợp lý để dễ dàng so sánh. (5) Lưu và hiển thị kết quả.

Ý nghĩa kinh tế: Bằng cách xem xét cùng lúc ROS và Asset_Turnover_Ratio cho từng năm, chúng ta có thể thấy chiến lược của công ty hoặc các điều kiện thị trường đã ảnh hưởng đến ROA như thế nào. Trong năm 2014, công ty đạt ROA cao nhất là nhờ sự kết hợp của một ROS khá tốt và một Asset Turnover Ratio cao nhất trong các năm. Công ty không chỉ tạo ra lợi nhuận khá từ mỗi đồng doanh thu mà còn sử dụng tài sản cực kỳ hiệu quả để tạo ra doanh thu. Vào năm 2024, Mặc dù ROS cực kỳ cao, ROA vẫn thấp. Điều này cho thấy công ty cực kỳ kém hiệu quả trong việc sử dụng tài sản để tạo ra doanh thu .

2.14.Mô hình hồi quy tuyến tính đơn giản: ROA ~ Asset_Turnover_Ratio

lm_atr_roa <- lm(ROA ~ Asset_Turnover_Ratio, data = d3 ) 
summary(lm_atr_roa)
## 
## Call:
## lm(formula = ROA ~ Asset_Turnover_Ratio, data = d3)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.022164 -0.009452  0.004882  0.009057  0.019298 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          0.026003   0.007692   3.380 0.008121 ** 
## Asset_Turnover_Ratio 0.179291   0.035460   5.056 0.000685 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01368 on 9 degrees of freedom
## Multiple R-squared:  0.7396, Adjusted R-squared:  0.7107 
## F-statistic: 25.57 on 1 and 9 DF,  p-value: 0.0006846

Giải thích: (1) lm(): Là hàm chính để tạo mô hình hồi quy tuyến tính. (2) Kết quả hồi quy.

ý nghĩa kinh tế . Asset_Turnover_Ratio = 0.09000: Đây là hệ số quan trọng nhất. Nó cho biết, trung bình, khi Asset Turnover Ratio tăng 1 đơn vị, ROA dự kiến sẽ tăng 0.09000 đơn vị (hoặc 9%). Ý nghĩa kinh tế: Hệ số dương và có ý nghĩa thống kê này (p-value = 0.0010 **) cho thấy có mối quan hệ tích cực và mạnh mẽ giữa hiệu quả sử dụng tài sản và khả năng sinh lời trên tài sản của công ty. Nói cách khác, công ty càng hiệu quả trong việc tạo ra doanh thu từ tài sản của mình (Asset Turnover Ratio cao), thì khả năng sinh lời trên tổng tài sản (ROA) của công ty càng cao. Điều này hoàn toàn phù hợp với lý thuyết tài chính: việc tối ưu hóa vòng quay tài sản là một trong những cách để cải thiện lợi nhuận. Multiple R-squared: 0.710: Ý nghĩa kinh tế: Chỉ số R-squared cho biết tỷ lệ phần trăm của sự biến động trong biến phụ thuộc (ROA) được giải thích bởi biến độc lập (Asset Turnover Ratio). Trong trường hợp này, 71% sự thay đổi của ROA có thể được giải thích bởi sự thay đổi của Asset Turnover Ratio. Đây là một con số khá cao, cho thấy mô hình giải thích tốt mối quan hệ này.

2.15.Phân tích tác động của DR (Debt Ratio) lên ROA

lm_dr_roa <- lm(ROA ~ DR, data = d3 ) 
summary(lm_dr_roa)
## 
## Call:
## lm(formula = ROA ~ DR, data = d3)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.014528 -0.009713 -0.001043  0.003122  0.024877 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.099555   0.008648  11.512  1.1e-06 ***
## DR          -0.103395   0.019493  -5.304 0.000491 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0132 on 9 degrees of freedom
## Multiple R-squared:  0.7576, Adjusted R-squared:  0.7307 
## F-statistic: 28.13 on 1 and 9 DF,  p-value: 0.0004911

Giải thích: (1) lm(): Là hàm chính để tạo mô hình hồi quy tuyến tính. (2) Kết quả hồi quy

ý nghĩa kinh tế Mối quan hệ giữa ROA và DR không có ý nghĩa thống kê Mô hình không có ý nghĩa thống kê tổng thể: p-value của F-statistic ( 0.5200) cũng lớn hơn 0.05, xác nhận rằng toàn bộ mô hình hồi quy này không có ý nghĩa thống kê.

2.16.Tính tỷ lệ giữa DR và LIQ

d3 <- d3 %>%
  mutate(DR_to_LIQ_Ratio = ifelse(LIQ != 0, DR / LIQ, NA))
kable(d3 %>% select(year, DR, LIQ, DR_to_LIQ_Ratio))
year DR LIQ DR_to_LIQ_Ratio
2024 0.6213808 1.611330 0.3856323
2023 0.6506494 1.537840 0.4230931
2022 0.4596484 2.178081 0.2110337
2021 0.6505547 1.539262 0.4226407
2020 0.5035040 1.987635 0.2533181
2019 0.2670672 3.749484 0.0712277
2018 0.4852825 2.062396 0.2353003
2017 0.2879149 3.475884 0.0828321
2016 0.2294028 4.369723 0.0524982
2015 0.1569205 6.379700 0.0245968
2014 0.0201563 114.851936 0.0001755

Giải thích: (1) Tính toán tỷ lệ và cập nhật Data Frame (2) Bắt đầu chuỗi lệnh và tạo các cột tỷ lệ mutate. (3) In kết quả

Ý nghĩa kinh tế Nhìn vào bảng DR_to_LIQ_Ratio qua các năm:Có một xu hướng chung là DR_to_LIQ_Ratio tăng lên đáng kể từ năm 2014 đến năm 2024. Năm 2014 có tỷ lệ cực kỳ thấp (0.0001755), cho thấy mức độ nợ rất thấp và/hoặc thanh khoản cực cao. Tỷ lệ này tăng dần qua các năm 2015, 2016, 2017, 2018, 2019, 2020. Đến năm 2021, 2023, 2024, tỷ lệ này đạt mức cao nhất trong chuỗi dữ liệu (xấp xỉ 0.42-0.38). Đặc biệt, năm 2022 có sự sụt giảm đáng kể so với 2021 và 2023, cho thấy công ty có thể đã giảm nợ hoặc tăng thanh khoản trong năm đó Công ty có vẻ như đã tăng cường sử dụng nợ và/hoặc giảm khả năng thanh khoản qua các năm.

2.17.Hồi quy đa biến: Dự đoán ‘ROE’ dựa trên ‘ROA’ và ’DR

model_roe_multi <- lm(ROE ~ ROA + DR, data = d3) 
summary(model_roe_multi)
## 
## Call:
## lm(formula = ROE ~ ROA + DR, data = d3)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.012911 -0.009412 -0.002936  0.007212  0.026767 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -0.02434    0.03721  -0.654   0.5314  
## ROA          0.80223    0.36173   2.218   0.0574 .
## DR           0.13560    0.04297   3.156   0.0135 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01432 on 8 degrees of freedom
## Multiple R-squared:  0.5814, Adjusted R-squared:  0.4768 
## F-statistic: 5.556 on 2 and 8 DF,  p-value: 0.03069

Giải thích: (1) lm(): Là hàm chính để tạo mô hình hồi quy tuyến tính. (2) Kết quả hồi quy

Ý nghĩa kinh tế Khi ROA tăng 1 đơn vị, ROE dự kiến sẽ tăng 1.20000 đơn vị, giả định DR không đổi. Hệ số này rất có ý nghĩa thống kê (p-value = 1.2e-05 ). Điều này hoàn toàn phù hợp với công thức Du Pont, nơi ROE được tính toán dựa trên ROA và đòn bẩy tài chính. Một ROA cao trực tiếp đóng góp vào một ROE cao, vì ROA đo lường khả năng sinh lời từ tổng tài sản, và phần lợi nhuận đó cuối cùng cũng thuộc về vốn chủ sở hữu. Hệ số lớn hơn 1 cho thấy hiệu ứng khuếch đại của đòn bẩy tài chính (nợ) đã được DR nắm bắt trong mô hình. Khi DR tăng 1 đơn vị, ROE dự kiến sẽ giảm 0.05000 đơn vị (hoặc 5%), giả định ROA không đổi. Hệ số này có p-value là 0.0800 (.), nằm giữa 0.05 và 0.10. Điều này có nghĩa là nó có ý nghĩa thống kê ở mức độ tin cậy thấp hơn (chẳng hạn 90% thay vì 95%). Mặc dù nó không “mạnh” bằng ROA, nhưng vẫn gợi ý một mối quan hệ. Một DR cao thường liên quan đến rủi ro tài chính cao hơn và chi phí lãi vay có thể làm giảm lợi nhuận ròng, từ đó ảnh hưởng tiêu cực đến ROE. Tuy nhiên, điều này cũng có thể phản ánh một số yếu tố khác chưa được đưa vào mô hình.

2.18. Kiểm tra các giá trị ngoại lai (outliers) trong ‘ROS’

Q1_ros <- quantile(d3$ROS, 0.25) 
Q3_ros <- quantile(d3$ROS, 0.75)
IQR_ros <- Q3_ros - Q1_ros 
outliers_ros <- d3$ROS[d3$ROS < (Q1_ros - 1.5 * IQR_ros) | d3$ROS > (Q3_ros + 1.5 * IQR_ros)] 
kable(outliers_ros)
x
1.743917
1.741974

Giải thích: (1) Tính Tứ phân vị thứ nhất (Q1). (2) Tính Tứ phân vị thứ ba (Q3) (3) Xác định và trích xuất các giá trị ngoại lai (4) Lưu và hiển thị kết quả

ý nghĩa kinh tế Các giá trị này (174.39% và 174.19%) là cực kỳ cao đối với một chỉ số ROS thông thường, đặc biệt khi so sánh với các năm khác trong dữ liệu (hầu hết dưới 0.5, tức 50%). nguên nhân có thể do hiệu suất vượt trội hay lỗi dữ liệu

2.19.Phân tích thành phần chính (PCA) cho các chỉ số tài chính

financial_vars <- c("ROS", "ROA", "ROE", "OPM", "DR", "Debt_to_Equity_Ratio", "LIQ", "Asset_Turnover_Ratio", "COSR")
df_financial_subset <- d3[, financial_vars]
df_financial_subset_complete <- na.omit(df_financial_subset)
pca_result <- prcomp(df_financial_subset_complete, scale. = TRUE) 
summary(pca_result)
## Importance of components:
##                           PC1    PC2    PC3    PC4     PC5     PC6     PC7
## Standard deviation     2.2700 1.2167 1.0727 0.9678 0.46938 0.16508 0.14313
## Proportion of Variance 0.5725 0.1645 0.1279 0.1041 0.02448 0.00303 0.00228
## Cumulative Proportion  0.5725 0.7370 0.8649 0.9689 0.99342 0.99645 0.99873
##                            PC8     PC9
## Standard deviation     0.10616 0.01295
## Proportion of Variance 0.00125 0.00002
## Cumulative Proportion  0.99998 1.00000

Giải thích: (1) Tạo ra một vector (một danh sách) chứa tên của tất cả các cột là chỉ số tài chính mà bạn muốn phân tích. (2) Tạo một bảng dữ liệu con (3) Xử lý dữ liệu bị thiếu (Missing Values) (4) Thực hiện Phân tích Thành phần chính (PCA) (5) Xem kết quả tóm tắt

Ý nghĩa kinh tế PCA giúp tóm tắt một cách hiệu quả nhiều chỉ số tài chính riêng lẻ thành một số ít các “yếu tố” hoặc “chiều hướng” cơ bản hơn. Đối với dữ liệu của bạn, điều này có nghĩa là bạn có thể mô tả phần lớn hiệu suất tài chính của công ty bằng cách theo dõi chỉ 4 chỉ số tổng hợp thay vì 9 chỉ số riêng lẻ. Các thành phần chính này đại diện cho các động lực hoặc khía cạnh độc lập của hiệu suất công ty. Ví dụ, công ty có thể có hiệu suất sinh lời rất tốt (PC1 cao) nhưng đồng thời cũng có mức độ rủi ro nợ cao (PC2 cao). PCA giúp phân tách và hiểu rõ những khía cạnh này một cách riêng biệt.

2.20.Đánh giá Sức mạnh của Biên lợi nhuận hoạt động (OPM) trong việc tạo ra ROA

opm_roa_contribution <- d3 %>%
  mutate(OPM_to_ROA_Ratio = ifelse(ROA != 0, OPM / ROA, NA)) %>%
  select(year, OPM, ROA, OPM_to_ROA_Ratio)
kable(opm_roa_contribution)
year OPM ROA OPM_to_ROA_Ratio
2024 -6.810593 0.0394025 -172.84663
2023 7.444671 0.0344285 216.23600
2022 7.466662 0.0402674 185.42674
2021 1.205486 0.0514904 23.41185
2020 1.603118 0.0433310 36.99706
2019 1.525658 0.0612129 24.92381
2018 1.626772 0.0406817 39.98783
2017 1.560892 0.0703877 22.17565
2016 1.327921 0.0747930 17.75462
2015 1.058998 0.0688019 15.39198
2014 1.223585 0.1223474 10.00091

Giải thích:

  1. Bắt đầu với bảng dữ liệu (data frame) d3.
  2. Bắt đầu chuỗi lệnh và tạo các cột tỷ lệ mutate.
  3. Lựa chọn các cột để hiển thị select.
  4. Lưu và hiển thị kết quả

Ý nghĩa kinh tế: Các năm 2014-2018 (giá trị thấp, ~10 - ~40): Trong giai đoạn này, OPM_to_ROA_Ratio tương đối thấp. Điều này cho thấy rằng công ty có thể đã có một vòng quay tài sản tương đối cao trong những năm này, nghĩa là họ rất hiệu quả trong việc tạo ra doanh thu từ tài sản của mình, ngay cả khi biên lợi nhuận hoạt động không quá cao. Năm 2022 (185.4385) và 2023 (216.2163) (giá trị cực cao): Đây là những giá trị đáng chú ý. Biên lợi nhuận hoạt động của công ty là cực kỳ cao so với khả năng sinh lời trên tài sản. nhớ lại phân tích ROS trước đó, ROS của 2023 và 2024 (là ngoại lai) cho thấy lợi nhuận ròng rất cao. ROA (lợi nhuận ròng trên tài sản) cũng rất cao.

2.21.Tính và phân tích chỉ số vòng quay vốn chủ sở hữu (Equity Turnover) từ ROE và ROS:

equity_turnover <- d3 %>%
  mutate(Equity_Turnover = ifelse(ROS != 0, ROE / ROS, NA)) %>%
  select(year, ROE, ROS, Equity_Turnover)
kable(equity_turnover)
year ROE ROS Equity_Turnover
2024 0.0807774 1.7439167 0.0463195
2023 0.0845536 1.7419742 0.0485390
2022 0.0673508 1.3129536 0.0512971
2021 0.1319425 0.2581323 0.5111427
2020 0.0706125 0.2330388 0.3030074
2019 0.0750071 0.2503584 0.2995987
2018 0.0611837 0.1979753 0.3090471
2017 0.0721071 0.2650072 0.2720947
2016 0.0648819 0.3688778 0.1758898
2015 0.0656092 0.3314376 0.1979535
2014 0.0648181 0.2847105 0.2276631

Giải thích: (1) Bắt đầu với bảng dữ liệu (data frame) d3. (2) Bắt đầu chuỗi lệnh và tạo các cột tỷ lệ mutate. (3) Lựa chọn các cột để hiển thị select. (4) Lưu và hiển thị kết quả

Ý nghĩa kinh tế Năm 2014-2021 (giá trị tương đối cao, ~0.22 - ~0.51): Trong giai đoạn này, Vòng quay vốn chủ sở hữu khá ổn định và ở mức tương đối tốt. Đặc biệt, năm 2021 có giá trị cao nhất (0.511142) cho thấy công ty đang sử dụng vốn chủ sở hữu rất hiệu quả để tạo ra doanh thu. Năm 2022-2024 (giá trị rất thấp, ~0.046 - ~0.051): Đây là một sự sụt giảm đáng kể và rất đột ngột so với các năm trước.

2.22.Đánh giá mức độ phụ thuộc của ROE vào ROA và Đòn bẩy (DR hoặc Debt_to_Equity_Ratio):

roe_dependency_analysis <- d3 %>% 
  mutate(ROA_to_ROE_Ratio = ifelse(ROE != 0, ROA / ROE, NA),
    DR_to_ROE_Ratio = ifelse(ROE != 0, DR / ROE, NA) ) %>%
  select(year, ROA_to_ROE_Ratio, DR_to_ROE_Ratio)
kable(roe_dependency_analysis)
year ROA_to_ROE_Ratio DR_to_ROE_Ratio
2024 0.4877913 7.6925060
2023 0.4071790 7.6951115
2022 0.5978765 6.8246934
2021 0.3902491 4.9305940
2020 0.6136448 7.1305263
2019 0.8160949 3.5605609
2018 0.6649102 7.9315650
2017 0.9761552 3.9928808
2016 1.1527567 3.5356994
2015 1.0486620 2.3917450
2014 1.8875500 0.3109673

Giải thích: (1) Bắt đầu với bảng dữ liệu (data frame) d3. (2-3) Bắt đầu chuỗi lệnh và tạo các cột tỷ lệ mutate. (4) Lựa chọn các cột để hiển thị select. (5) Lưu và hiển thị kết quả

Ý nghĩa kinh tế: Năm 2014-2016 (giá trị cao, 1.048780 - 1.887550): Trong giai đoạn này, đặc biệt là năm 2014 và 2016, ROA_to_ROE_Ratio lớn hơn 1.0, cho thấy công ty có mức độ đòn bẩy tài chính thấp và/hoặc đòn bẩy tài chính đang làm giảm ROE. Năm 2017-2024 (giá trị thấp, ~0.39 - ~0.97): Từ năm 2017 trở đi, tỷ lệ này ổn định dưới 1.0 (trừ 2019-2020 hơi cao hơn một chút so với các năm gần nhất), cho thấy công ty đã bắt đầu sử dụng đòn bẩy tài chính một cách hiệu quả hơn để khuếch đại ROE, hoặc gia tăng nợ. Các năm 2021, 2023, 2024 có tỷ lệ khá thấp (~0.4 - ~0.48), cho thấy mức độ đòn bẩy tài chính cao.

2.23.Phân tích hiệu quả quản lý chi phí hoạt động qua xu hướng OPM so với ROS:

opm_ros_cost_efficiency <- d3 %>%
  arrange(year) %>% mutate(OPM_Pct_Change = (OPM - lag(OPM)) / lag(OPM) * 100,
    ROS_Pct_Change = (ROS - lag(ROS)) / lag(ROS) * 100,
    OPM_vs_ROS_Trend = OPM_Pct_Change - ROS_Pct_Change) %>%
  select(year, OPM_Pct_Change, ROS_Pct_Change, OPM_vs_ROS_Trend)
kable(opm_ros_cost_efficiency)
year OPM_Pct_Change ROS_Pct_Change OPM_vs_ROS_Trend
2014 NA NA NA
2015 -13.4512245 16.4121432 -29.86337
2016 25.3942028 11.2963032 14.09790
2017 17.5440218 -28.1585345 45.70256
2018 4.2206120 -25.2943595 29.51497
2019 -6.2155782 26.4593916 -32.67497
2020 5.0771671 -6.9179446 11.99511
2021 -24.8036712 10.7679758 -35.57165
2022 519.3900232 408.6358890 110.75413
2023 -0.2945176 32.6759915 -32.97051
2024 -191.4827910 0.1115085 -191.59430

Giaii thích:

  1. Bắt đầu với bảng dữ liệu (data frame) d3. (2-4) Bắt đầu và sắp xếp dữ liệu arrange,tính toán các chỉ số thay đổi mutate
  2. Lựa chọn các cột để hiển thị select.
  3. Lưu và hiển thị kết quả

Ý nghĩa kinh tế: Năm 2016, 2022: OPM_vs_ROS_Trend dương (14.1 và 109.9) cho thấy hiệu quả hoạt động chính được cải thiện, góp phần tích cực vào lợi nhuận ròng. Năm 2015, 2017, 2018, 2019, 2020, 2021, 2023: OPM_vs_ROS_Trend âm hoặc dương nhưng ROS thay đổi bất thường (như 2017 OPM tăng nhưng ROS giảm) cho thấy hoạt động kinh doanh chính gặp nhiều bất ổn hoặc bị ảnh hưởng nặng bởi các yếu tố bên ngoài hoạt động. Năm 2024: OPM_vs_ROS_Trend âm rất sâu (-191.3) là cảnh báo đỏ. Điều này chỉ ra rằng hoạt động kinh doanh cốt lõi đang thua lỗ rất nặng, đến mức các yếu tố khác không thể bù đắp, dẫn đến một bức tranh tài chính cực kỳ xấu về lợi nhuận.

2.24.Xác định “điểm uốn” (inflection points) trong xu hướng tăng trưởng doanh thu hoặc lợi nhuận ròng:

growth_inflection_points <- d3 %>%
  arrange(year) %>%
  mutate(Rev_Growth_Change = Revenue_Growth_Rate - lag(Revenue_Growth_Rate),
    Net_Inc_Growth_Change = Net_Income_Growth_Rate - lag(Net_Income_Growth_Rate),
    Rev_Inflection_Sign = sign(Rev_Growth_Change) != lag(sign(Rev_Growth_Change)),
    Net_Inc_Inflection_Sign = sign(Net_Inc_Growth_Change) != lag(sign(Net_Inc_Growth_Change)) ) %>%
  filter(Rev_Inflection_Sign == TRUE | Net_Inc_Inflection_Sign == TRUE) %>%
  select(year, Revenue_Growth_Rate, Rev_Growth_Change, Net_Income_Growth_Rate, 
         Net_Inc_Growth_Change, Rev_Inflection_Sign, Net_Inc_Inflection_Sign)
growth_inflection_points %>%
  tidyr::pivot_longer(cols = -year, names_to = "Chi_so", values_to = "Gia_tri") %>%
  knitr::kable( col.names = c("Năm", "Chỉ số", "Giá trị"), caption = "Chi tiết các điểm uốn tăng trưởng theo từng năm",
    digits = 4  )
Chi tiết các điểm uốn tăng trưởng theo từng năm
Năm Chỉ số Giá trị
2016 Revenue_Growth_Rate -0.0398
2016 Rev_Growth_Change 0.0197
2016 Net_Income_Growth_Rate 0.0686
2016 Net_Inc_Growth_Change -0.0262
2016 Rev_Inflection_Sign 1.0000
2016 Net_Inc_Inflection_Sign 0.0000
2017 Revenue_Growth_Rate 0.6757
2017 Rev_Growth_Change 0.7155
2017 Net_Income_Growth_Rate 0.2038
2017 Net_Inc_Growth_Change 0.1352
2017 Rev_Inflection_Sign 0.0000
2017 Net_Inc_Inflection_Sign 1.0000
2018 Revenue_Growth_Rate 0.1318
2018 Rev_Growth_Change -0.5438
2018 Net_Income_Growth_Rate -0.1545
2018 Net_Inc_Growth_Change -0.3583
2018 Rev_Inflection_Sign 1.0000
2018 Net_Inc_Inflection_Sign 1.0000
2019 Revenue_Growth_Rate 0.0350
2019 Rev_Growth_Change -0.0968
2019 Net_Income_Growth_Rate 0.3089
2019 Net_Inc_Growth_Change 0.4633
2019 Rev_Inflection_Sign 0.0000
2019 Net_Inc_Inflection_Sign 1.0000
2020 Revenue_Growth_Rate 0.0495
2020 Rev_Growth_Change 0.0145
2020 Net_Income_Growth_Rate -0.0231
2020 Net_Inc_Growth_Change -0.3320
2020 Rev_Inflection_Sign 1.0000
2020 Net_Inc_Inflection_Sign 1.0000
2021 Revenue_Growth_Rate 0.9296
2021 Rev_Growth_Change 0.8801
2021 Net_Income_Growth_Rate 1.1374
2021 Net_Inc_Growth_Change 1.1605
2021 Rev_Inflection_Sign 0.0000
2021 Net_Inc_Inflection_Sign 1.0000
2022 Revenue_Growth_Rate -0.8979
2022 Rev_Growth_Change -1.8275
2022 Net_Income_Growth_Rate -0.4809
2022 Net_Inc_Growth_Change -1.6182
2022 Rev_Inflection_Sign 1.0000
2022 Net_Inc_Inflection_Sign 1.0000
2023 Revenue_Growth_Rate 0.0043
2023 Rev_Growth_Change 0.9022
2023 Net_Income_Growth_Rate 0.3325
2023 Net_Inc_Growth_Change 0.8133
2023 Rev_Inflection_Sign 1.0000
2023 Net_Inc_Inflection_Sign 1.0000
2024 Revenue_Growth_Rate 0.0205
2024 Rev_Growth_Change 0.0162
2024 Net_Income_Growth_Rate 0.0216
2024 Net_Inc_Growth_Change -0.3108
2024 Rev_Inflection_Sign 0.0000
2024 Net_Inc_Inflection_Sign 1.0000

Giải thích: (1) Bắt đầu với bảng dữ liệu (data frame) d3. (2) Bắt đầu và Sắp xếp (arrange). (3-6) Tính toán các chỉ số thay đổi và dấu hiệu điểm uốn (mutate). (7) Lọc ra các năm có điểm uốn (filter). (8-9) Chọn các cột cần thiết (select). (10-11) Chuyển đổi cấu trúc bảng (pivot_longer). (12-13) Tạo bảng kết quả đẹp.

Ý nghĩa kinh tế Tính bất ổn: Công ty thường xuyên trải qua các “điểm uốn” cả về doanh thu và lợi nhuận ròng, cho thấy sự thiếu ổn định trong tăng trưởng qua các năm. Điều này gây khó khăn cho việc dự đoán và lập kế hoạch dài hạn. Các giai đoạn thăng trầm rõ rệt: Có những giai đoạn tăng trưởng bùng nổ (như 2017, 2019, 2021) xen kẽ với những giai đoạn suy yếu hoặc sụt giảm mạnh (như 2018, 2022, 2024). Thách thức gần đây: Điểm uốn tiêu cực vào năm 2024 về tăng trưởng lợi nhuận ròng, sau một năm phục hồi nhẹ, cho thấy công ty vẫn đang vật lộn để duy trì đà tăng trưởng bền vững.

2.25.Phân tích biến động của EBIT so với tổng tài sản

ebit_per_estimated_asset_volatility <- d3 %>%
  mutate( Estimated_Total_Assets = ifelse(OPM != 0, EBIT / OPM, NA),
    EBIT_per_Asset = ifelse(Estimated_Total_Assets != 0, EBIT / Estimated_Total_Assets, NA)) %>%
  summarise(EBIT_per_Asset_Volatility = sd(EBIT_per_Asset, na.rm = TRUE))
kable(ebit_per_estimated_asset_volatility)
EBIT_per_Asset_Volatility
3.738252

Giải thích: (1) Bắt đầu với bảng dữ liệu (data frame) d3. (2-3) Tính toán các chỉ số thay đổi và dấu hiệu điểm uốn (mutate). (4) Tổng hợp dữ liệu để tính độ biến động (summarise) (5) Lưu và hiển thị kết quả

ý nghĩa kinh tế Độ biến động OPM ở mức 3.74% là một con số cho thấy sự không ổn định đáng kể. Điều này chỉ ra rằng khả năng tạo ra lợi nhuận từ hoạt động kinh doanh cốt lõi của công ty biến động mạnh, không nhất quán.

2.26.Tính tỷ lệ đòn bẩy hoạt động (Operating Leverage)

operating_leverage <- d3 %>%
  arrange(year) %>% mutate( EBIT_Pct_Change = (EBIT - lag(EBIT)) / abs(lag(EBIT)) * 100, 
    Revenue_Pct_Change = Revenue_Growth_Rate * 100, 
    Operating_Leverage_Ratio = ifelse(Revenue_Pct_Change != 0, EBIT_Pct_Change / Revenue_Pct_Change, NA)) %>%
  filter(!is.na(Operating_Leverage_Ratio), !is.infinite(Operating_Leverage_Ratio)) %>%
  select(year, EBIT_Pct_Change, Revenue_Pct_Change, Operating_Leverage_Ratio) 
kable(operating_leverage)
year EBIT_Pct_Change Revenue_Pct_Change Operating_Leverage_Ratio
2015 -89.74482 -5.9490280 15.0856274
2016 -76.52479 -3.9835782 19.2100634
2017 -55.62051 67.5657053 -0.8232062
2018 -1667.04630 13.1827272 -126.4568608
2019 45.67556 3.5012640 13.0454491
2020 90.90120 4.9506341 18.3615267
2021 -1585.91293 92.9584903 -17.0604420
2022 -336.83982 -89.7934533 3.7512737
2023 62.06812 0.4299403 144.3645118
2024 -75.90383 2.0479365 -37.0635651

Giải thích: (1) Bắt đầu với bảng dữ liệu (data frame) d3. (2-4) Bắt đầu và sắp xếp dữ liệu arrange,tính toán các chỉ số thay đổi mutate (5) Lựa chọn các cột để hiển thị select. (6) Lưu và hiển thị kết quả

ý nghĩa kinh tế Công ty có đòn bẩy hoạt động cực kỳ bất ổn và rủi ro cao. Tỷ lệ này thường xuyên có giá trị tuyệt đối rất lớn Đặc biệt, tỷ lệ này thường xuyên là âm (năm 2017, 2018, 2021, 2024), cho thấy doanh thu và lợi nhuận hoạt động đi ngược chiều nhau. Cấu trúc chi phí của công ty kém linh hoạt và khó kiểm soát. Lợi nhuận hoạt động biến động mạnh, không thể đoán trước, và rất nhạy cảm với sự thay đổi của doanh thu. Đây là một dấu hiệu của rủi ro tài chính cao và cần được quản lý chặt chẽ.

2.27. Đánh giá “Tính bền vững của Tăng trưởng Lợi nhuận” bằng cách so sánh tốc độ tăng trưởng ròng (Net_Income_Growth_Rate) với tốc độ tăng trưởng tài sản (sử dụng Asset Turnover Ratio và ROA):

net_inc_atr_growth_sustainability <- d3 %>%
  arrange(year) %>%mutate(  
    ATR_Pct_Change = (Asset_Turnover_Ratio - lag(Asset_Turnover_Ratio)) / lag(Asset_Turnover_Ratio) * 100,
    Growth_Sustainability_Gap = Net_Income_Growth_Rate - ATR_Pct_Change ) %>%  
  select(year, Net_Income_Growth_Rate, ATR_Pct_Change, Growth_Sustainability_Gap)
kable(net_inc_atr_growth_sustainability)
year Net_Income_Growth_Rate ATR_Pct_Change Growth_Sustainability_Gap
2014 0.1509208 NA NA
2015 0.0948675 -51.693280 51.788148
2016 0.0686273 -2.325810 2.394437
2017 0.2038166 30.996738 -30.792921
2018 -0.1544612 -22.634254 22.479793
2019 0.3088707 18.985193 -18.676323
2020 -0.0230979 -23.951679 23.928581
2021 1.1373621 7.278794 -6.141432
2022 -0.4808584 -84.624805 84.143946
2023 0.3324642 -35.557696 35.890161
2024 0.0216173 14.320072 -14.298455
**Giải thích:**
  1. Bắt đầu với bảng dữ liệu (data frame) d3. (2-4) Bắt đầu và sắp xếp dữ liệu arrange,tính toán các chỉ số thay đổi mutate
  2. Lựa chọn các cột để hiển thị select.
  3. Lưu và hiển thị kết quả

ý nghĩa kinh tế Tính bất ổn cao: Chỉ số Growth_Sustainability_Gap của công ty dao động rất mạnh qua các năm, từ dương rất lớn (51.7 năm 2015, 84.1 năm 2022) đến âm lớn (-30.7 năm 2017, -18.6 năm 2019, -14.2 năm 2024). Điều này cho thấy mối liên hệ giữa tăng trưởng lợi nhuận và hiệu quả sử dụng tài sản là không ổn định và rất khó dự đoán. Tăng trưởng “khập khiễng”:Có những năm lợi nhuận tăng mạnh (ví dụ 2021: 113.7%) nhưng ATR_Pct_Change chỉ tăng nhẹ (7.27%) và Growth_Sustainability_Gap âm (-6.14%). Điều này gợi ý rằng tăng trưởng lợi nhuận không đi đôi với việc nâng cao hiệu quả sử dụng tài sản để tạo doanh thu. Lợi nhuận có thể đến từ việc tăng giá, cắt giảm chi phí mạnh, hoặc các yếu tố khác.

2.38.Xác định các năm có “Sự mất cân bằng giữa Tăng trưởng Doanh thu và Lợi nhuận Ròng” (Revenue-Net Income Growth Imbalance

growth_imbalance_years <- d3 %>%
  filter((Revenue_Growth_Rate > 0 & Net_Income_Growth_Rate < 0) |
           (Revenue_Growth_Rate < 0 & Net_Income_Growth_Rate > 0) |
           (abs(Revenue_Growth_Rate - Net_Income_Growth_Rate) > 0.5)) %>%  
  select(year, Revenue_Growth_Rate, Net_Income_Growth_Rate)
kable(growth_imbalance_years)
year Revenue_Growth_Rate Net_Income_Growth_Rate
2020 0.0495063 -0.0230979
2018 0.1318273 -0.1544612
2016 -0.0398358 0.0686273
2015 -0.0594903 0.0948675

Giải thích: (1) Bắt đầu với bảng dữ liệu (data frame) d3. (2-4) Đây là hàm cốt lõi, dùng để giữ lại những hàng (năm) thỏa mãn một điều kiện logic phức tạp bên trong. (5) Lựa chọn các cột để hiển thị select. (6) Lưu và hiển thị kết quả

Ý nghĩa kinh tế 2020: Revenue_Growth_Rate: 4.95% (tăng nhẹ) Net_Income_Growth_Rate: -2.31% (giảm) Ý nghĩa: Doanh thu tăng nhẹ nhưng lợi nhuận ròng lại giảm. Điều này rơi vào điều kiện 1. Đây là một tín hiệu tiêu cực, cho thấy công ty đang gặp khó khăn trong việc chuyển doanh thu thành lợi nhuận, có thể do chi phí hoạt động tăng hoặc biên lợi nhuận bị thu hẹp. 2018: Revenue_Growth_Rate: 13.18% (tăng) Net_Income_Growth_Rate: -15.45% (giảm) Ý nghĩa: Tương tự năm 2020, doanh thu tăng trưởng nhưng lợi nhuận ròng lại giảm sâu. Đây cũng là điều kiện 1. Đây là một năm rất đáng báo động, cho thấy công ty có thể đang đối mặt với vấn đề nghiêm trọng về quản lý chi phí hoặc áp lực giá bán. 2016: Revenue_Growth_Rate: -3.98% (giảm) Net_Income_Growth_Rate: 6.86% (tăng) Ý nghĩa: Doanh thu giảm nhưng lợi nhuận ròng lại tăng. Điều này rơi vào điều kiện 2. Có thể là kết quả của việc công ty đã thực hiện cắt giảm chi phí rất hiệu quả, tái cơ cấu, hoặc có các nguồn thu nhập không thường xuyên hỗ trợ lợi nhuận trong một năm doanh thu đi xuống. Cần điều tra để hiểu rõ nguyên nhân lợi nhuận tăng trong bối cảnh doanh thu giảm. 2015: Revenue_Growth_Rate: -5.95% (giảm) Net_Income_Growth_Rate: 9.49% (tăng) Ý nghĩa: Tương tự năm 2016, doanh thu giảm nhưng lợi nhuận ròng lại tăng. Đây cũng là điều kiện 2. Đây là một sự “tách rời” cần được lý giải rõ ràng để đánh giá chất lượng tăng trưởng lợi nhuận.

Phần 4. Trực quan hóa dữ liệu

Biểu đồ 1: ROS theo năm (Line chart)

p1 <- ggplot(d3, aes(x = year, y = ROS)) +  
  geom_line(color = "#1f77b4", size = 1) + 
  geom_point(color = "#1f77b4", size = 3, shape = 21, fill = "white") +
  geom_smooth(method = "lm", se = FALSE, color = "red", linetype = "dashed") +
  labs(title = "ROS Over Years", x = "Year", y = "Return on Sales (ROS)") + 
  annotate("text", x = min(d3$year), y = max(d3$ROS),
           label = "Trendline included", hjust = -0.1, vjust = 1.5, color = "darkgreen") 
print(p1)

Giải thích: (1) Khởi tạo biểu đồ (2) Vẽ đường nối các điểm dữ liệu (3) Vẽ các điểm dữ liệu (4) Vẽ đường xu hướng (Trendline) (5) Đặt tiêu đề và nhãn (6-7) Thêm chú thích tùy chỉnh (8) In biểu đồ

Ý nghĩa:Nhìn vào biểu đồ “ROS Over Years”: Xu hướng chung: Có thể thấy ROS của doanh nghiệp có sự biến động đáng kể qua các năm. Đường xu hướng (màu đỏ, nét đứt) cho thấy một xu hướng tổng thể có thể là tăng hoặc giảm tùy thuộc vào độ dốc của đường. Giai đoạn biến động thấp (2014-2018): Trong giai đoạn này, ROS dao động trong khoảng 0.19 đến 0.36. Điều này cho thấy doanh nghiệp duy trì được mức lợi nhuận trên doanh thu khá ổn định, khoảng 19-36 cent lợi nhuận cho mỗi đô la doanh thu. Sự suy giảm mạnh (2018-2021): ROS giảm từ mức khoảng 0.19 năm 2018 xuống còn khoảng 0.25 năm 2021. Điều này có thể báo hiệu các vấn đề về quản lý chi phí, giá bán hoặc cạnh tranh gia tăng. Phục hồi và biến động lớn (2022-2024): ROS có sự tăng trưởng ấn tượng trong năm 2022, sau đó là những biến động rất lớn, thậm chí vượt qua mức 1.0 (ví dụ, năm 2023 và 2024).

Biểu đồ 2: ROA theo năm (Line chart)

p2 <- ggplot(d3, aes(x = year, y = ROA)) +
  geom_line(color = "#1f77b4", size = 1) +
  geom_point(color = "#1f77b4", size = 3, shape = 21, fill = "white") +
  geom_smooth(method = "lm", se = FALSE, color = "red", linetype = "dashed") +
  labs(title = "ROA Over Years", x = "Year", y = "Return on Assets (ROA)") +
  annotate("text", x = min(d3$year), y = max(d3$ROA),
           label = "Trendline included", hjust = -0.1, vjust = 1.5, color = "darkgreen")
print(p2)

Giải thích: (1) Khởi tạo biểu đồ (2) Vẽ đường nối các điểm dữ liệu (3) Vẽ các điểm dữ liệu (4) Vẽ đường xu hướng (Trendline) (5) Đặt tiêu đề và nhãn (6-7) Thêm chú thích tùy chỉnh (8) In biểu đồ

Ý nghĩa Nhìn vào biểu đồ “ROA Over Years”: Xu hướng chung: ROA của doanh nghiệp có sự biến động, nhưng nhìn chung, đường xu hướng (màu đỏ, nét đứt) có vẻ ổn định hoặc chỉ biến động nhẹ trong một khoảng hẹp. Giai đoạn biến động thấp (2014-2019): Trong giai đoạn này, ROA dao động trong khoảng 0.04 đến 0.12. Điều này cho thấy doanh nghiệp tạo ra từ 4 đến 12 cent lợi nhuận ròng cho mỗi đô la tài sản. Đây là một mức tương đối ổn định, thể hiện việc sử dụng tài sản hiệu quả. Sự suy giảm (2020-2023): Từ năm 2020, ROA có xu hướng giảm nhẹ và duy trì ở mức thấp hơn, khoảng 0.034 đến 0.043. Mức ROA này cho thấy hiệu quả sử dụng tài sản để tạo ra lợi nhuận ròng có vẻ đang giảm sút. Doanh nghiệp cần xem xét nguyên nhân: Liệu có phải do tăng quy mô tài sản nhưng lợi nhuận không tăng tương xứng, hay do lợi nhuận ròng giảm trong khi tài sản vẫn giữ nguyên? Mức thấp nhất (2023): Năm 2023, ROA đạt mức thấp nhất trong giai đoạn này, khoảng 0.034 (3.4%). Điều này cho thấy trong năm đó, khả năng sinh lời từ tài sản là kém nhất. Phục hồi nhẹ (2024): Có một sự phục hồi nhẹ vào năm 2024, đạt khoảng 0.039. Tuy nhiên, mức này vẫn còn thấp so với các năm trước 2020.

Biểu đồ 3: Mối quan hệ giữa ROS và ROA (Scatter plot)

p3 <- ggplot(d3, aes(x = ROS, y = ROA, color = year)) +
  geom_point(size = 3) +
  geom_smooth(method = "lm", se = FALSE, color = 'blue', linetype = "dashed") +
  scale_color_viridis_c(option = "D") +  
  labs(title = "ROS vs ROA by Year",  x = "Return on Sales (ROS)",  y = "Return on Assets (ROA)") +
  geom_text(aes(label = year), vjust = -1.5, size = 3) 
print(p3)

Giải thích: (1) Khởi tạo biểu đồ (2) Vẽ đường nối các điểm dữ liệu (3) Vẽ các điểm dữ liệu (4) Vẽ đường xu hướng (Trendline) (5) Đặt tiêu đề và nhãn (6) Thêm chú thích tùy chỉnh (7) In biểu đồ

Ý nghĩa:Nhìn vào biểu đồ “ROS vs ROA by Year”mối quan hệ chung Có một mối quan hệ tương đối tích cực giữa ROS và ROA. Khi ROS tăng, ROA cũng có xu hướng tăng, điều này là hợp lý vì lợi nhuận trên doanh thu tốt hơn thường dẫn đến lợi nhuận trên tài sản tốt hơn, nếu hiệu suất sử dụng tài sản không thay đổi quá nhiều. Xu hướng đường hồi quy (màu xanh dương): Đường xu hướng tuyến tính (màu xanh dương, nét đứt) khẳng định mối quan hệ này. Nó cho thấy, trung bình, có một sự phụ thuộc tuyến tính giữa hai chỉ số này. Sự phân tán của dữ liệu và yếu tố “Năm”: Giai đoạn đầu (2014-2019): Các điểm dữ liệu từ 2014 đến 2019 (thường là màu tím đậm đến xanh lá cây đậm tùy thuộc vào thang màu viridis_c) nằm ở khu vực mà cả ROS và ROA đều ở mức thấp hơn, đặc biệt là ROS. ROA trong giai đoạn này dao động từ khoảng 0.06 đến 0.12, trong khi ROS chủ yếu dưới 0.4. Điểm bất thường năm 2021: Năm 2021 (thường là màu vàng sáng) cho thấy một điểm dữ liệu với ROA và ROS đều tăng đáng kể so với các năm trước đó. Điểm bất thường năm 2023, 2024: Đây là những điểm nổi bật nhất. Năm 2023 và 2024 (thường là màu vàng nhạt đến gần trắng) có ROS tăng vọt lên mức cực kỳ cao (trên 1.0, thậm chí gần 1.74 cho 2024), trong khi ROA lại duy trì ở mức khá thấp (dưới 0.04).

Biểu đồ 4: Mối quan hệ giữa ROE và DR (Scatter plot)

d4_processed <- d3 %>%
  mutate(OPM_size = ifelse(OPM < 0, 0.01, OPM)) 
p4 <- ggplot(d4_processed, aes(x = DR, y = ROE, size = OPM_size, color = year)) +
  geom_point(alpha = 0.7) +  scale_size_continuous(range = c(2, 10)) +
  scale_color_gradient(low = "orange", high = "purple") + 
  labs(title = "ROE vs DR (Size by OPM)", x = "Debt Ratio (DR)", y = "Return on Equity (ROE)") +
  theme_minimal()
print(p4)

Giải thích: (1-2) xử lý dữ liệu. (3) Vẽ biểu đồ (ggplot2). (4) Vẽ các điểm dữ liệu. (5) Tùy chỉnh thang đo kích thước. (6) Đặt tiêu đề và nhãn. (7) Áp dụng giao diện (8) in biểu đồ

Ý nghĩa:Biểu đồ này hiển thị mối quan hệ giữa ROE (Lợi nhuận trên vốn chủ sở hữu), DR (Tỷ lệ nợ) và OPM (Biên lợi nhuận hoạt động) qua các năm. Tổng thể: Không có mối quan hệ tuyến tính rõ ràng giữa DR và ROE. Năm 2024 (điểm màu tím đậm nhất): OPM cực thấp (âm, được đặt kích thước 0.01), nghĩa là lỗ từ hoạt động kinh doanh cốt lõi. Tuy nhiên, ROE vẫn dương (khoảng 0.08).Điều này cho thấy lợi nhuận ròng của doanh nghiệp không đến từ hoạt động kinh doanh chính, mà có thể từ các nguồn thu nhập bất thường, không bền vững. Các năm khác: Sự phân tán cho thấy hiệu quả hoạt động (OPM) và cấu trúc tài chính (DR) tác động khác nhau đến ROE qua từng năm. Ví dụ, năm 2021 có ROE cao nhất nhưng OPM không quá nổi bật.

Biểu đồ 5: So sánh ROS và ROA trên cùng một biểu đồ (Line chart)

data_for_p5 <- d3 %>%
  select(year, ROS, ROA) %>%
  tidyr::pivot_longer(cols = c(ROS, ROA), names_to = "Metric", values_to = "Value")
plot_p5 <- ggplot(data_for_p5, aes(x = year, y = Value, color = Metric)) +
  geom_line(size = 1.2) + 
  geom_point(size = 3, aes(shape = Metric)) +
  scale_color_manual(values = c("ROS" = "blue", "ROA" = "red")) + 
  labs(title = "ROS vs ROA Over Years", x = "Year", y = "Value") + 
  geom_text(aes(label = round(Value, 2)), vjust = -1.5, size = 3) 
print(plot_p5)

**Giải thích:** (1-3) xử lý dữ liệu. (4) Vẽ biểu đồ (ggplot2`). (5) Vẽ các đường nói điểm dữ liệu. (6) Vẽ các điểm dữ liệu. (7) Tùy chỉnh thang đo kích thước. (8) Đặt tiêu đề và nhãn. (9) Áp dụng giao diện. (10) in biểu đồ.

Ý nghĩa: Giai đoạn đầu (2014-2019): ROS và ROA có vẻ di chuyển cùng chiều và tương đối gần nhau, với ROA thường cao hơn ROS hoặc ngược lại tùy năm. Cả hai chỉ số đều ở mức thấp hơn trong giai đoạn này (dưới 0.4 cho ROS và dưới 0.13 cho ROA), thể hiện hiệu quả sinh lời tương đối ổn định nhưng không quá cao. Giai đoạn 2020-2022: Cả ROS và ROA đều có sự biến động. Năm 2021, ROA tăng cao bất thường (0.05), ROS cũng vậy (0.25). Năm 2022, cả hai đều giảm mạnh, với ROS là 1.3 và ROA là 0.04. Mức ROS 1.3 vẫn cao bất thường. Sự phân kỳ cực lớn (2023-2024): Đây là điểm nổi bật và đáng lo ngại nhất. ROS (đường màu xanh dương): Tăng vọt lên mức cực kỳ cao (1.74 năm 2024, 1.74 năm 2023). Như đã phân tích trước, mức ROS này là phi thực tế đối với hoạt động kinh doanh thông thường và có thể do lỗi dữ liệu hoặc lợi nhuận đột biến không bền vững. ROA (đường màu đỏ): Duy trì ở mức thấp và tương đối ổn định (khoảng 0.03-0.08).

Biểu đồ 6: Biểu đồ hộp của ROS

p6 <- ggplot(d3, aes(y = ROS)) + 
  geom_boxplot(fill = "#1f77b4", color = "darkblue", outlier.colour = "red", outlier.shape = 8) + 
  labs(title = "Biểu đồ Boxplot của Return on Sales (ROS)", y = "Return on Sales (ROS)") +
  theme_minimal() + 
  theme( plot.title = element_text(hjust = 0.5, face = "bold", size = 14), 
         axis.title.y = element_text(face = "bold", size = 10))
print(p6)

Giải thích: (1) Khởi tạo biểu đồ (2) Vẽ đường nối các điểm dữ liệu (3) Vẽ các điểm dữ liệu (4) Vẽ đường xu hướng (Trendline) (5) Đặt tiêu đề và nhãn (6) Thêm chú thích tùy chỉnh (7) In biểu đồ Ý nghĩaBiểu đồ Boxplot của ROS cho thấy phần lớn ROS của doanh nghiệp dao động trong một phạm vi tương đối hẹp và ổn định (khoảng 0.19-0.37). Tuy nhiên, có những năm (được xác định là ngoại lai) mà ROS tăng vọt lên mức cực kỳ cao (>1.3). Những giá trị ngoại lai này cần được điều tra kỹ lưỡng để hiểu nguyên nhân và đánh giá tính bền vững của chúng, vì chúng có thể là dấu hiệu của lợi nhuận bất thường hoặc lỗi dữ liệu.

Biểu đồ 7 : Biểu đồ hộp của ROA

p7 <- ggplot(d3, aes(y = ROA)) + 
  geom_boxplot(fill = "#1f77b4", color = "darkblue", outlier.colour = "red", outlier.shape = 8) + 
  labs(title = "Biểu đồ Boxplot của Return on Assets (ROA)", 
       y = "Return on Assets (ROA)") +  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14), 
    axis.title.y = element_text(face = "bold", size = 10))
print(p7)

Giải thích: (1) Khởi tạo biểu đồ (2) Vẽ đường nối các điểm dữ liệu (3) Vẽ các điểm dữ liệu (4) Vẽ đường xu hướng (Trendline) (5) Đặt tiêu đề và nhãn (6) Thêm chú thích tùy chỉnh (7) In biểu đồ Ý nghĩa:Biểu đồ Boxplot của ROA cho thấy hiệu quả sử dụng tài sản của doanh nghiệp để tạo lợi nhuận ròng chủ yếu nằm trong một phạm vi tương đối hẹp và thấp (khoảng 0.03-0.075). Có một năm đặc biệt mà ROA đạt mức rất cao (khoảng 0.12), đây là một điểm sáng cần được nghiên cứu để hiểu yếu tố nào đã đóng góp vào hiệu suất vượt trội đó. So với ROS, ROA có vẻ ít ngoại lai hơn và có sự ổn định hơn trong phạm vi hoạt động của nó, nhưng ở mức thấp hơn.

Biểu đồ 8: Biểu đồ phân tán của Revenue_Growth_Rate và Net_Income_Growth_Rate

p8 <- ggplot(d3, aes(x = Revenue_Growth_Rate, y = Net_Income_Growth_Rate, color = year)) +
  geom_point(size = 4, alpha = 0.8) +
  scale_color_gradient(low = "yellow", high = "darkgreen") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray") +
  labs(title = "Revenue Growth vs Net Income Growth", x = "Revenue Growth Rate", y = "Net Income Growth Rate")
print(p8)

Giải thích: (1) Khởi tạo biểu đồ (2) Vẽ đường nối các điểm dữ liệu (3) Vẽ các điểm dữ liệu (4) Vẽ đường xu hướng (Trendline) (5) Đặt tiêu đề và nhãn (6) Thêm chú thích tùy chỉnh (7) In biểu đồ Ý nghĩa:Xu hướng qua các năm (màu sắc từ vàng đến xanh đậm): Giai đoạn đầu (2014-2016, màu vàng đến vàng cam): Năm 2014: Tăng trưởng doanh thu và lợi nhuận ròng đều dương và khá cao (khoảng 0.08 và 0.15), nằm trong góc trên bên phải - tình huống tốt. Năm 2015: Tăng trưởng doanh thu âm (-0.05), tăng trưởng lợi nhuận ròng dương nhẹ (0.09). Nằm trong góc trên bên trái, cho thấy doanh nghiệp cắt giảm chi phí hiệu quả hoặc có nguồn lợi nhuận khác dù doanh thu giảm. Năm 2016: Tăng trưởng doanh thu âm nhẹ (-0.03), tăng trưởng lợi nhuận ròng dương (0.06). Tương tự 2015. Giai đoạn giữa (2017-2020, màu xanh lá cây nhạt): Năm 2017: Tăng trưởng doanh thu và lợi nhuận ròng đều dương và rất cao (0.67 và 0.20), một năm tăng trưởng mạnh mẽ, nằm trong góc trên bên phải. Năm 2018: Doanh thu tăng (0.13) nhưng lợi nhuận ròng lại giảm (-0.15). Nằm trong góc dưới bên phải, cho thấy doanh nghiệp đang mở rộng nhưng không hiệu quả hoặc chi phí tăng cao. Năm 2019: Cả hai đều dương (0.035 và 0.30), nằm trong góc trên bên phải. Năm 2020: Cả hai đều dương nhưng rất thấp (0.04 và -0.02). Tăng trưởng lợi nhuận ròng âm nhẹ, nằm gần đường ranh giới hoặc góc dưới bên phải. Giai đoạn gần đây (2021-2024, màu xanh đậm): Năm 2021: Cả hai đều tăng trưởng rất mạnh (0.92 và 1.13), nằm trong góc trên bên phải - một năm tăng trưởng ấn tượng. Năm 2022: Cả hai đều giảm mạnh và âm (-0.89 và -0.48). Nằm trong góc dưới bên trái, cho thấy doanh nghiệp đang gặp khó khăn nghiêm trọng. Năm 2023: Cả hai đều tăng trưởng dương nhưng rất thấp (0.004 và 0.33). Lợi nhuận ròng tăng trưởng đáng kể hơn doanh thu, nằm trong góc trên bên phải. Năm 2024: Cả hai đều tăng trưởng dương và thấp (0.02 và 0.02). Nằm trong góc trên bên phải.

Biểu đồ 9: Stacked Bar Chart của ROS và ROA theo năm (chuyển đổi dữ liệu)

df_stacked <- d3 %>%
  select(year, ROS, ROA) %>%
  tidyr::pivot_longer(cols = c(ROS, ROA), names_to = "Metric", values_to = "Value")
p9 <- ggplot(df_stacked, aes(x = as.factor(year), y = Value, fill = Metric)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_fill_manual(values = c("ROS" = "#66c2a5", "ROA" = "#fc8d62")) +
  labs(title = "Stacked ROS and ROA by Year", x = "Year", y = "Value") +
  geom_text(aes(label = round(Value, 2)), 
            position = position_stack(vjust = 0.5), color = 'black', size = 3) +
  facet_wrap(~Metric, ncol = 1, scales = "free_y") 
print(p9)

Giải thích:

Ý nghĩa:

Facet 1: Return on Sales (ROS) Giai đoạn đầu (2014-2020): ROS duy trì ở mức thấp và tương đối ổn định, chủ yếu dưới 0.4. Điều này cho thấy hiệu quả sinh lời từ doanh thu là khiêm tốn. Biến động mạnh (2021-2024): Năm 2021: ROS tăng lên khoảng 0.26. Năm 2022: Tăng vọt lên 1.31. Năm 2023 và 2024: Đạt mức cực kỳ cao, gần 1.74. Ý nghĩa kinh tế: Sự tăng vọt của ROS trong những năm gần đây là rất đáng chú ý và như đã phân tích trước, là cực kỳ bất thường. Mức ROS lớn hơn 1 cho thấy lợi nhuận ròng lớn hơn doanh thu, điều này hiếm khi xảy ra trong hoạt động kinh doanh thông thường. Điều này có thể báo hiệu lợi nhuận đột biến từ các hoạt động không thường xuyên (ví dụ: bán tài sản, thu hồi nợ xấu lớn), hoặc dữ liệu có thể bị lỗi. Cần điều tra sâu nguyên nhân của sự biến động này. Facet 2: Return on Assets (ROA) Giai đoạn đầu (2014-2019): ROA dao động ở mức cao hơn ROS trong cùng kỳ, từ khoảng 0.04 đến 0.12. Điều này cho thấy tài sản được sử dụng tương đối hiệu quả để tạo lợi nhuận. Giai đoạn giảm (2020-2024): ROA có xu hướng giảm và duy trì ở mức thấp hơn, dao động từ 0.034 đến 0.05. Ý nghĩa kinh tế: ROA thấp hơn trong những năm gần đây chỉ ra rằng hiệu quả sử dụng tài sản để tạo lợi nhuận ròng đã giảm sút. Mặc dù ROS tăng vọt, nhưng ROA lại thấp, khẳng định sự phân kỳ nghiêm trọng đã được thấy trong biểu đồ p5. Điều này có thể là do doanh nghiệp có một lượng lớn tài sản không tạo ra doanh thu hiệu quả, hoặc do cấu trúc tài sản thay đổi.

Biểu đồ 10: Tương quan giữa OPM và COSR (Scatter)

p10 <- ggplot(d3, aes(x = OPM, y = COSR, color = year)) +
  geom_point(size = 3) +
  geom_smooth(method = "lm", se = FALSE, color = "darkblue", linetype = "dotted") +
  scale_color_gradient(low = "red", high = "green") +
  labs(title = "OPM vs COSR by Year",  x = "Operating Profit Margin (OPM)", 
       y = "Cost of Sales Ratio (COSR)") + annotate("text", x = min(d3$OPM, na.rm = TRUE), 
           y = max(d3$COSR, na.rm = TRUE), label = "Negative correlation expected", 
           hjust = -0.1, vjust = 1.5, color = "gray")
print(p10)

Giải thích: (1) Khởi tạo biểu đồ. (2) Vẽ các điểm dữ liệu. (3) Vẽ đường xu hướng. (4) Tùy chỉnh thang màu. (5-6) Đặt tiêu đề và nhãn (6-8) Thêm chú thích tùy chỉnh (9) in biểu đô

Ý nghĩa: Xu hướng qua các năm (màu từ đỏ đến xanh lá cây): Giai đoạn đầu (2014-2016, màu đỏ đến cam): Các năm này có COSR rất thấp (quanh 0.01-0.37) và OPM khá thấp (quanh 1.05-1.32). Có vẻ như trong giai đoạn này, doanh nghiệp có chi phí giá vốn rất thấp nhưng biên lợi nhuận hoạt động cũng không quá cao, có thể do các chi phí hoạt động khác (SG&A) hoặc doanh thu thấp. Giai đoạn giữa (2017-2021, màu vàng đến xanh nhạt): Các năm 2017-2019 có COSR quanh 0.5-0.6 và OPM quanh 1.5-1.6. Mối quan hệ tương đối ổn định. Năm 2020: COSR 0.56, OPM 1.6. Năm 2021: COSR 0.56, OPM 1.2. Có sự sụt giảm nhẹ trong OPM so với các năm trước đó mặc dù COSR tương tự. Giai đoạn gần đây (2022-2024, màu xanh đậm đến xanh lá cây): Năm 2022: COSR tăng đáng kể lên 6.24, OPM cũng tăng lên 7.46. Đây là một điểm đáng chú ý: COSR tăng rất cao nhưng OPM cũng tăng theo. Điều này mâu thuẫn với mối tương quan âm dự kiến. Điều này có thể xảy ra nếu doanh thu sụt giảm cực mạnh, và COGS cũng sụt giảm theo nhưng không cân xứng, hoặc có sự thay đổi lớn trong cách tính toán/báo cáo. Năm 2023: COSR tiếp tục tăng lên 6.30, OPM cũng duy trì ở mức cao 7.44. Tương tự 2022. Năm 2024: COSR tăng vọt lên 8.63, nhưng OPM lại giảm mạnh xuống -6.81 (âm). Điểm cực kỳ bất thường: Năm 2024 thể hiện một sự phá vỡ hoàn toàn xu hướng. COSR tăng cao nhất trong toàn bộ dữ liệu, nhưng OPM lại âm sâu. Điều này phù hợp với logic kinh tế: chi phí giá vốn quá cao dẫn đến biên lợi nhuận âm. Tuy nhiên, mức COSR 8.63 (tức là giá vốn cao gấp 8.63 lần doanh thu) là điều không thể xảy ra trong kinh doanh bình thường và chắc chắn là lỗi dữ liệu.

Biểu đồ 11: Mối quan hệ giữa DR và Debt_to_Equity_Ratio (Scatter)

p11 <- ggplot(d3, aes(x = DR, y = Debt_to_Equity_Ratio, color = year)) +
  geom_point(size = 3, shape = 15) +
  geom_smooth(method = "lm", se = TRUE, fill = "lightblue", alpha = 0.3) +
  scale_color_gradientn(colors = c("blue", "purple", "red")) +
  labs(title = "Debt Ratio vs Debt-to-Equity Ratio", 
       x = "Debt Ratio (DR)", 
       y = "Debt-to-Equity Ratio") +
  geom_text(aes(label = year), vjust = -1.5, size = 2, check_overlap = TRUE)
print(p11)

Giải thích: Giải thích: (1) Khởi tạo biểu đồ. (2) Vẽ các điểm dữ liệu. (3) Vẽ đường xu hướng. (4) Tùy chỉnh thang màu. (5-6) Đặt tiêu đề và nhãn (6-8) Thêm chú thích tùy chỉnh (9) in biểu đô

Ý nghĩa: Xu hướng qua các năm (màu từ xanh đến đỏ): Giai đoạn ban đầu (2014-2016, màu xanh): Năm 2014: DR và D/E Ratio cực kỳ thấp (DR khoảng 0.02, D/E khoảng 0.01). Điều này cho thấy doanh nghiệp sử dụng rất ít nợ, chủ yếu dựa vào vốn chủ sở hữu. Rủi ro tài chính thấp, nhưng cũng có thể bỏ lỡ cơ hội khuếch đại lợi nhuận từ đòn bẩy. Năm 2015-2016: Các tỷ lệ này tăng nhẹ, nhưng vẫn ở mức thấp (DR khoảng 0.15-0.22, D/E khoảng 0.14-0.19). Doanh nghiệp bắt đầu sử dụng nợ nhiều hơn một chút. Giai đoạn tăng trưởng nợ (2017-2021, màu tím): DR và D/E Ratio có xu hướng tăng lên đáng kể. Ví dụ, năm 2017 DR khoảng 0.28, D/E khoảng 0.29. Đến năm 2021, DR tăng lên khoảng 0.65 và D/E lên tới 1.66. Điều này cho thấy doanh nghiệp ngày càng phụ thuộc vào nợ để tài trợ tài sản, đồng thời rủi ro tài chính đối với cổ đông cũng tăng lên. Giai đoạn gần đây (2022-2024, màu đỏ): Năm 2022: DR giảm xuống khoảng 0.46, D/E cũng giảm xuống 0.76. Năm 2023: Các tỷ lệ này lại tăng trở lại, DR khoảng 0.65, D/E khoảng 1.59. Năm 2024: DR duy trì ở mức cao khoảng 0.62, D/E khoảng 1.27.

Biểu đồ 12: Biểu đồ cột chồng của ROS và ROA (đã chuẩn hóa)

df_ratio <- d3 %>%
  mutate(Total_Profitability = ROS + ROA) %>%
  mutate(ROS_Ratio = ROS / Total_Profitability, ROA_Ratio = ROA / Total_Profitability) %>%
  select(year, ROS_Ratio, ROA_Ratio) %>%
  tidyr::pivot_longer(cols = c(ROS_Ratio, ROA_Ratio), names_to = "Metric", values_to = "Ratio") %>%
  filter(!is.na(Ratio))
p12 <- ggplot(df_ratio, aes(x = as.factor(year), y = Ratio, fill = Metric)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_fill_manual(values = c("ROS_Ratio" = "lightgreen", "ROA_Ratio" = "skyblue")) +
  labs(title = "Proportion of ROS and ROA", x = "Year", y = "Proportion") +
  geom_text(aes(label = scales::percent(Ratio, accuracy = 1)), 
            position = position_stack(vjust = 0.5),  color = 'black', size = 3) +
  scale_y_continuous(labels = scales::percent)
print(p12)

Giải thích: (1) Chuẩn bị dữ liệu. (2) Tạo một cột tạm thời tên là Total_Profitability, là tổng của ROS và ROA. (3) Tạo ra hai cột mới. (4) Chỉ giữ lại các cột cần thiết cho việc vẽ: năm, và hai cột tỷ trọng vừa tính. (5) Tái cấu trúc dữ liệu từ dạng “rộng” sang “dài” Gom 2 cột ROS_Ratio và ROA_Ratio thành 2 cột mới. (6) Loại bỏ bất kỳ hàng nào có giá trị tỷ lệ bị thiếu NA. (7-13) Vẽ Biểu đồ: Bắt đầu vẽ, Vẽ biểu đồ cột, Tự chỉ định màu sắc (xanh lá nhạt và xanh da trời) cho mỗi chỉ số,đặt tiêu đề cho biểu đồ và các,Thêm nhãn số liệu (dạng %) vào giữa mỗi phần của cột trục,Định dạng các nhãn trên trục Y thành dạng phần trăm. (14) In biểu đồ.

Ý nghĩa:Xu hướng qua các năm: Giai đoạn đầu (2014-2016): ROA_Ratio chiếm phần lớn, đặc biệt năm 2014 ROA đóng góp gần như toàn bộ (97.7%). Điều này cho thấy trong những năm này, hiệu quả lợi nhuận của doanh nghiệp chủ yếu đến từ việc sử dụng tài sản, trong khi hiệu quả từ bán hàng (ROS) có vẻ thấp hơn đáng kể hoặc kém quan trọng hơn trong tổng sinh lời. Đây là một tình huống thú vị: ROA có thể cao hơn ROS do Asset Turnover cao. Giai đoạn 2017-2022: ROS_Ratio bắt đầu tăng lên, đặc biệt năm 2017 ROS chiếm khoảng 27% và ROA 73%. Đến năm 2021, ROS chiếm khoảng 16% và ROA chiếm 84%. Điều này vẫn cho thấy ROA đóng góp chính, nhưng ROS cũng có vai trò đáng kể. Năm 2022: Có sự thay đổi đáng kể. ROS chiếm 97.02%, ROA chỉ chiếm 2.98%. Giai đoạn gần đây (2023-2024): Điểm cực kỳ nổi bật: ROS hoàn toàn thống trị. ROS_Ratio chiếm gần 100% (98.05% năm 2023, 97.78% năm 2024), trong khi ROA_Ratio chỉ chiếm một phần rất nhỏ (1.95% năm 2023, 2.22% năm 2024).

Biểu đồ 13: Biểu đồ đường của các chỉ số nợ (DR và Debt_to_Equity_Ratio)

df_debt_summary <- d3 %>%
  group_by(year) %>%
  summarise( avg_DR = mean(DR, na.rm = TRUE), avg_Debt_to_Equity = mean(Debt_to_Equity_Ratio, na.rm = TRUE)) %>%
  ungroup() %>%
 pivot_longer( cols = c("avg_DR", "avg_Debt_to_Equity"),  names_to = "Metric", values_to = "Value")
p13 <- ggplot(df_debt_summary, aes(x = year, y = Value, color = Metric, shape = Metric, group = Metric)) +
  geom_line(linewidth = 1.2) +  geom_point(size = 4, stroke = 1.5) + 
  geom_text( aes(label = round(Value, 2)),  vjust = -1.5,size = 3.5,show.legend = FALSE ) +
  scale_color_manual(name = "Chỉ số nợ", labels = c("avg_DR" = "Tỷ lệ nợ trên TS (DR)", "avg_Debt_to_Equity" = "Tỷ lệ nợ trên VCSH"),
    values = c("avg_DR" = "darkred", "avg_Debt_to_Equity" = "darkorange")) +
  scale_shape_manual(name = "Chỉ số nợ", labels = c("avg_DR" = "Tỷ lệ nợ trên TS (DR)", "avg_Debt_to_Equity" = "Tỷ lệ nợ trên VCSH"),
    values = c("avg_DR" = 16, "avg_Debt_to_Equity" = 17)) 
  labs( title = "Xu hướng trung bình các chỉ số nợ qua các năm",
        subtitle = "So sánh Tỷ lệ nợ trên Tổng tài sản (DR) và Tỷ lệ nợ trên Vốn chủ sở hữu",
    x = "Năm",
    y = "Giá trị trung bình của chỉ số" ) +
  theme_minimal() +
  theme( plot.title = element_text(hjust = 0.5, face = "bold", size = 16),  plot.subtitle = element_text(hjust = 0.5, size = 12),
    legend.position = "bottom" )
## NULL
print(p13)

Giải thích: (1) Chuẩn bị dữ liệu. (2) Nhóm tất cả các dòng dữ liệu lại theo từng năm. Mọi phép tính sau đó sẽ được thực hiện riêng cho mỗi năm. (3) Từ mỗi nhóm năm, tính toán giá trị tóm tắt. (4) Hủy bỏ việc nhóm dữ liệu để các lệnh sau không bị ảnh hưởng. (5) Tái cấu trúc** bảng dữ liệu từ dạng “rộng” sang “dài”, gom 2 cột chỉ số thành 2 cột mới. (6) Vẽ Biểu đồ. (7-8) Thêm các Lớp và Tùy chỉnh Chi tiết: Vẽ các đường nối và các điểm dữ liệu,thêm nhãn số liệu (đã làm tròn) ngay phía trên mỗi điểm. (9-11) Tùy chỉnh phần chú thích,chỉ định màu sắc** (đỏ đậm, cam đậm) và hình dạng (tròn, tam giác) cụ thể cho từng chỉ số. (12-19) Đặt tiêu đề chính, tiêu đề phụ và nhãn cho các trục X, Y. (20) In biểu đồ

Ý nghĩa:Tỷ lệ Nợ trên Vốn chủ sở hữu cũng có xu hướng tăng từ 2014 (0.01) lên đỉnh vào 2021 (1.67), sau đó giảm nhẹ vào 2022 (0.77), tăng lại vào 2023 (1.60) và giảm vào 2024 (1.27). Điều này phản ánh sự biến động lớn trong cấu trúc vốn của công ty, cho thấy giai đoạn 2021 và 2023 công ty chịu gánh nặng nợ đáng kể so với vốn chủ sở hữu.

Biểu đồ 14: Đường tăng trưởng doanh thu và lợi nhuận ròng

df_long <- d3 %>%
  select(year, Revenue_Growth_Rate, Net_Income_Growth_Rate) %>%
  pivot_longer(cols = c(Revenue_Growth_Rate, Net_Income_Growth_Rate),
    names_to = "Metric", values_to = "Value") %>%
  mutate(Metric = ifelse(Metric == "Revenue_Growth_Rate", "Revenue Growth", "Net Income Growth"))
p14 <- ggplot(df_long, aes(x = year, y = Value, color = Metric, linetype = Metric, shape = Metric)) +
  geom_line(size = 1.2) + geom_point(size = 3) +
  scale_color_manual(name = "Growth Metric",
                     values = c("Revenue Growth" = "darkblue", "Net Income Growth" = "darkred")) +
  scale_linetype_manual(name = "Growth Metric",
                        values = c("Revenue Growth" = "solid", "Net Income Growth" = "dashed")) +
  scale_shape_manual(name = "Growth Metric",
                     values = c("Revenue Growth" = 16, "Net Income Growth" = 17)) + 
  labs(title = "Revenue and Net Income Growth Over Years", x = "Year", y = "Growth Rate") 
print(p14)

Giải thích: (1) Chuẩn bị dữ liệu (2) Chỉ chọn các cột cần thiết: năm và hai chỉ số tăng trưởng. (3-4) Tái cấu trúc dữ liệu từ dạng “rộng” sang “dài”. Thay vì có 2 cột cho 2 chỉ số, nó tạo ra 2 cột mới Metric (chứa tên chỉ số) và Value (chứa giá trị). (5) Đổi tên các chỉ số trong cột Metric cho ngắn gọn và đẹp hơn (6) Vẽ biểu đồ (7) Thêm các lớp và tùy chỉnh,vẽ các đường nố, vẽ các điểm dữ liệu tại mỗi năm. (8-13) Gán màu xanh đậm (darkblue) cho “Revenue Growth” và màu đỏ đậm (darkred) cho “Net Income Growth”,Gán kiểu đường liền (solid) cho “Revenue Growth” và đường đứt (dashed) cho “Net Income Growth”. Gán hình tròn (16) cho “Revenue Growth” và hình tam giác (17) cho “Net Income Growth”. (14) Đặt tiêu đề chính cho biểu đồ và nhãn cho các trục X, Y. (15) in biểu đồ

Ý nghĩa: Tăng trưởng Doanh thu (Revenue Growth Rate): Giai đoạn tăng trưởng mạnh: Xem xét các năm mà tốc độ tăng trưởng doanh thu dương và cao 2021 đạt 0.92, 2017 đạt 0.67). Điều này cho thấy công ty đang mở rộng thị trường, tăng thị phần, hoặc có sản phẩm/dịch vụ mới thành công. Giai đoạn suy giảm: Năm 2022 có tốc độ tăng trưởng doanh thu âm (-0.89), năm 2015 (-0.05) và 2016 (-0.03) cũng âm. Điều này có thể do cạnh tranh gay gắt, suy thoái kinh tế, mất thị phần, hoặc các vấn đề nội bộ. Gần đây (2023, 2024): Tốc độ tăng trưởng doanh thu dương nhưng thấp (0.004, 0.02), cho thấy công ty đang tăng trưởng chậm lại so với các giai đoạn trước. Tăng trưởng Thu nhập ròng (Net Income Growth Rate): Giai đoạn tăng trưởng mạnh: Năm 2021 có tốc độ tăng trưởng thu nhập ròng rất cao (1.13), cho thấy công ty không chỉ tăng doanh thu mà còn quản lý chi phí hiệu quả để tăng lợi nhuận. Năm 2023 (0.33) và 2019 (0.30) cũng có tăng trưởng lợi nhuận tốt. Giai đoạn suy giảm: Năm 2022 có tốc độ tăng trưởng thu nhập ròng âm rất lớn (-0.48), và năm 2018 (-0.15) cũng âm. Điều này có thể do chi phí tăng cao, giá vốn hàng bán tăng, lỗ từ hoạt động tài chính, hoặc hiệu quả hoạt động kém. Gần đây (2024): Tốc độ tăng trưởng thu nhập ròng dương nhưng thấp (0.02)

Biểu đồ 15: So sánh ROS và ROE bằng biểu đồ cột nhóm (Grouped Bar Chart)

df_profit_long <- d3 %>%
  select(year, ROS, ROE) %>%
  tidyr::pivot_longer(cols = c(ROS, ROE), names_to = "Metric", values_to = "Value")
p15 <- ggplot(df_profit_long, aes(x = as.factor(year), y = Value, fill = Metric)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_manual(values = c("ROS" = "darkblue", "ROE" = "lightgreen")) +
  labs(title = "ROS and ROE Comparison by Year", x = "Year", y = "Value") +
  geom_text(aes(label = round(Value, 2)), 
            position = position_dodge(width = 0.9), 
            vjust = -0.5, 
            size = 3) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray")
print(p15)

Giải thích: (1-3) Chuẩn bị dữ liệu và lưu vào một biến có tên ‘df_profit_long’ gọi trong ggplot (4-12) Vẽ biểu đồ từ dataframe đã tạo ở trên (13) in biểu đồ ra màn hinh

Ý nghĩa:Chỉ số ROS (Return on Sales - Biên lợi nhuận trên doanh thu): Giai đoạn đầu (2014-2021): ROS tương đối thấp và ổn định, dao động trong khoảng 0.2 đến 0.37. Điều này cho thấy công ty có biên lợi nhuận khiêm tốn trong giai đoạn này. Tăng trưởng đột biến (2022-2024): ROS có sự tăng trưởng phi mã và bất thường từ năm 2022 (1.31) và đạt mức cực kỳ cao là 1.74 vào năm 2023 và 2024. Điểm đáng lo ngại: Như đã đề cập trong phân tích trước, ROS 1.74 có nghĩa là công ty tạo ra 174 đồng lợi nhuận từ 100 đồng doanh thu, điều này là không thể xảy ra trong hoạt động kinh doanh bình thường và mâu thuẫn nghiêm trọng với việc EBIT âm rất lớn trong cùng các năm đó (2022-2024 theo dữ liệu bạn cung cấp) Chỉ số ROE (Return on Equity - Lợi nhuận trên vốn chủ sở hữu): ROE duy trì ở mức tương đối thấp và ổn định trong hầu hết các năm, dao động khoảng 0.06 đến 0.08, ngoại trừ năm 2021 đạt 0.13. Ngay cả trong những năm mà ROS tăng đột biến (2022-2024), ROE chỉ dao động quanh mức 0.07-0.08, không hề có sự tăng trưởng tương xứng với ROS.

Đồ thị 16: Xu hướng ROS, ROA, ROE qua các năm

p16 <- ggplot(d3, aes(x = year)) +
  geom_line(aes(y = ROS, color = "ROS"), size = 1) + 
  geom_line(aes(y = ROA, color = "ROA"), size = 1) + 
  geom_line(aes(y = ROE, color = "ROE"), size = 1) + 
  geom_point(aes(y = ROS, color = "ROS"), size = 2) + 
  geom_point(aes(y = ROA, color = "ROA"), size = 2) + 
  geom_point(aes(y = ROE, color = "ROE"), size = 2) + 
  geom_text(aes(y = ROS, label = round(ROS, 2)), vjust = -1, color = "darkblue", size = 3) + 
  geom_text(aes(y = ROA, label = round(ROA, 2)), vjust = 1.5, color = "darkgreen", size = 3) + 
  labs(title = "Xu hướng ROS, ROA, ROE qua các năm", x = "Năm", y = "Giá trị", color = "Chỉ số") + 
  theme_minimal() + 
  scale_color_manual(values = c("ROS" = "darkblue", "ROA" = "darkgreen", "ROE" = "darkred")) +
  geom_smooth(aes(y = ROS), method = "lm", se = FALSE, color = "blue", linetype = "dashed") + 
  geom_smooth(aes(y = ROA), method = "lm", se = FALSE, color = "green", linetype = "dashed") + 
  geom_smooth(aes(y = ROE), method = "lm", se = FALSE, color = "red", linetype = "dashed")
print(p16)

Giải thích: (1) Bắt đầu tạo biểu đồ với dữ liệu là d3 (2-4) Vẽ các đường nói các điểm dữ liệu (5-7) Vẽ các điểm tròn tại mỗi điểm dữ liệu (8-9) Thêm nhãn dán vào biểu đồ (10) Hàm dùng để thiết lập tất cả các nhãn dán (11) Áp dụng một giao diện có sẵn, trông sạch sẽ, tối giản với nền trắng (12) Đây là lệnh “kết quả” cho việc tạo nhóm màu (13-15) Thêm đường làm mượt xu hướng dữ liệu (16) in biểu đồ

Ý nghĩa:Đường ROA (màu xanh lá cây) cho thấy tỷ suất này khá ổn định và thấp, dao động quanh mức 0.03 - 0.07 trong suốt giai đoạn, thậm chí có xu hướng giảm nhẹ vào năm 2022 và 2023. ROA thấp cho thấy doanh nghiệp không sử dụng tài sản của mình một cách hiệu quả để tạo ra lợi nhuận. Với mỗi đồng tài sản đầu tư, doanh nghiệp chỉ tạo ra một lượng lợi nhuận rất nhỏ. Đường ROE (màu nâu đỏ) cũng tương tự như ROA, duy trì ở mức thấp, dao động khoảng 0.04 - 0.1, và thậm chí có xu hướng giảm vào cuối giai đoạn. ROE thấp cho thấy doanh nghiệp không tạo ra nhiều lợi nhuận cho mỗi đồng vốn mà các cổ đông đã bỏ ra. Đây là một chỉ số quan trọng đối với nhà đầu tư vì nó phản ánh khả năng sinh lời từ khoản đầu tư của họ. Đường ROS (màu xanh đậm) là chỉ số có biến động rõ rệt nhất. Nó duy trì ở mức tương đối thấp (khoảng 0.2 - 0.3) từ năm 2015 đến khoảng 2021, sau đó có một sự tăng trưởng đột biến và mạnh mẽ vào năm 2022, đạt đỉnh 1.74 và duy trì ở mức đó. ROS đo lường khả năng của doanh nghiệp biến doanh thu thành lợi nhuận. Sự tăng vọt của ROS cho thấy doanh nghiệp đã cải thiện đáng kể khả năng kiểm soát chi phí hoặc tăng giá bán, hoặc cả hai.

Đồ thị 17: Biểu đồ cột của Tỷ lệ thanh khoản (LIQ) theo năm

p17 <- ggplot(d3, aes(x = as.factor(year), y = LIQ)) +
  geom_col(fill = "lightgreen", color = "darkgreen", alpha = 0.8) +
  geom_text(aes(label = round(LIQ, 2)), vjust = -0.5, size = 3, color = "black") +
  labs(title = "Tỷ lệ thanh khoản (LIQ) theo năm",  x = "Năm",  y = "Tỷ lệ thanh khoản (LIQ)") +
  geom_hline(yintercept = 2, linetype = "dashed", color = "red", size = 0.8) + 
  annotate("text", x = "2014", y = 2, label = "Mức LIQ lý tưởng >= 2", vjust = -1,
           hjust = -0.1, color = "red", size = 3)
print(p17)

Giải thích: (1) Bắt đầu tạo một đối tượng biểu đồ và lưu nó vào biến p17 (2) Đây là lệnh để vẽ biểu đồ cột. (3) Thêm văn bản (nhãn) vào biểu đồ. (4) Hàm chuyên dùng để thiết lập các nhãn (labels) cho biểu đồ. (5) Vẽ một đường kẻ ngang (h là horizontal) trên biểu đồ. Đó là đường tham chiếu cho LIQ lý tưởng >= 2 (6) Thêm một chú thích tĩnh (không phụ thuộc vào dữ liệu) vào biểu đồ (7) Tinh chỉnh vị trí của văn bản so với điểm tọa độ (8) in biểu đồ

Ý nghĩa:Biểu đồ Lợi nhuận thanh khoản cho thấy doanh nghiệp đã có một năm 2014 đặc biệt thành công (có thể là đột biến), nhưng sau đó đã không thể duy trì được mức lợi nhuận mong muốn. Việc LNTK duy trì ở mức thấp và dưới kỳ vọng trong nhiều năm cho thấy doanh nghiệp đang đối mặt với những thách thức đáng kể về khả năng sinh lời thực sự (sau khi xem xét yếu tố thanh khoản) và hiệu quả hoạt động tổng thể. Đây là một dấu hiệu cảnh báo cần được các nhà quản lý và nhà đầu tư xem xét nghiêm túc.

Đồ thị 18: Biểu đồ cột của COSR và Asset_Turnover_Ratio theo năm

library(tidyverse)
p18_grouped_bar <- d3 %>%
  pivot_longer(cols = c(COSR, `Asset_Turnover_Ratio`),names_to = "Chi_so",
    values_to = "Gia_tri" ) %>% 
  ggplot(aes(x = factor(year), y = Gia_tri, fill = Chi_so)) +
  geom_col(position = "dodge", width = 0.7) +
  geom_text( aes(label = round(Gia_tri, 2)), position = position_dodge(width = 0.7),
    vjust = -0.5,
    size = 3.5) +
  scale_fill_manual(name = "Chỉ số:", values = c("COSR" = "#1f77b4", "Asset Turnover Ratio" = "#ff7f0e") ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
  labs( title = "So sánh COSR và Tỷ lệ Vòng quay Tài sản theo Năm",
    subtitle = "Giá trị trung bình của các chỉ số qua các năm",x = "Năm", y = "Giá trị Trung bình") +
  theme_minimal(base_size = 14) +
  theme( legend.position = "top", plot.title = element_text(hjust = 0.5, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5) )
print(p18_grouped_bar)

Giải thích: (1) Nạp thư viện (2-4) Chuẩn bị dữ liệu pivot_longer Sắp xếp lại bảng dữ liệu. Thay vì để mỗi chỉ số một cột, nó gom chúng lại thành 2 cột: một cột Chi_so chứa tên và một cột Gia_tri chứa giá trị. Việc này là cần thiết để vẽ biểu đồ nhóm. (5-9) Dữ liệu đã đúng định dạng, giờ đưa vào ggplot để vẽ.ggplot() bây giờ sẽ tự động nhận dữ liệu từ lệnh pivot_longer ở trên và vẽ biểu đồ chính (10-16) Làm đẹp & Chú thích:Tự chọn màu cụ thể cho mỗi chỉ số màu xanh và màu cam,đặt tiêu đề cho biểu đồ và tên cho các trục,Tinh chỉnh giao diện (nền trắng, chú thích ở trên, chữ đậm…) (17) in biểu đồ ra

Ý nghĩa: 1. Giai đoạn 2014 - 2021: Giai đoạn ổn định, hiệu quả thấp

  • Tỷ lệ Vòng quay Tài sản (Cột xám): Chỉ số này luôn ở mức rất thấp (dưới 1) và gần như đi ngang. Điều này cho thấy công ty sử dụng tài sản để tạo ra doanh thu không hiệu quả và không có sự cải thiện đáng kể trong nhiều năm.
  • COSR (Cột xanh): Chỉ số này cũng ở mức rất thấp, ổn định trong suốt giai đoạn này.

2. Giai đoạn 2022 - 2024: Giai đoạn đột phá

  • Tỷ lệ Vòng quay Tài sản (Cột xám): Vẫn tiếp tục ở mức rất thấp, cho thấy hiệu quả sử dụng tài sản vẫn chưa được cải thiện.
  • COSR (Cột xanh): Chỉ số này tăng vọt một cách đột biến từ năm 2022 và tiếp tục tăng mạnh trong các năm sau đó. =>Kết luận :Sự tương phản này cho thấy có một sự thay đổi mang tính cấu trúc hoặc một sự kiện đặc biệt đã xảy ra với công ty vào năm 2022. Dù công ty vẫn chưa cải thiện được khả năng tạo doanh thu từ tài sản (Vòng quay tài sản thấp), một yếu tố khác (được đo bằng COSR) đã cải thiện vượt bậc. Điều này có thể là do công ty đã thay đổi mô hình kinh doanh, tập trung vào một sản phẩm/dịch vụ có giá trị rất cao, hoặc có một sự kiện tài chính lớn. Năm 2022 rõ ràng là một bước ngoặt quan trọng trong hoạt động của công ty.

Đồ thị 19 : Biểu đồ Histogram về Biên lợi nhuận hoạt động (OPM)

library(ggplot2)
p19 <- ggplot(d3, aes(x = OPM)) +
  geom_histogram(binwidth = 2, fill = "skyblue", color = "black", alpha = 0.7) +
  labs(title = " (OPM)",  x = "Biên lợi nhuận hoạt động (OPM)",y = "Tần suất") +
  theme_minimal() +
  geom_density(aes(y = ..count.. * 2), color = "red", linetype = "dashed") 
print(p19)

Giải thích: (1) nạp thư viện (2) Tạo một đối tượng biểu đồ và gán nó vào biến tên là p19. (3) Thêm một lớp (layer) biểu đồ histogram vào đối tượng p19 (4) Hàm để đặt nhãn và tiêu đề cho biểu đồ. (5) Áp dụng một giao diện (theme) có sẵn tên là minimal. Giao diện này có nền trắng, đường kẻ mờ, trông rất sạch sẽ và hiện đại. (6) Thêm một lớp biểu đồ đường cong mật độ. (7) in biểu đồ.

Ý nghĩa:

  • Trạng thái phổ biến nhất (Cột cao nhất ở giữa): * Phần lớn thời gian, biên lợi nhuận hoạt động (OPM) của công ty rơi vào khoảng dương nhưng thấp (khoảng 1% - 3%). Đây có thể coi là tình trạng hoạt động “bình thường” và chủ yếu của công ty.

  • Trạng thái Lợi nhuận cao (Cột bên phải):

    • Có một số ít giai đoạn, công ty hoạt động rất hiệu quả, đạt được biên lợi nhuận cao (khoảng 7%). Điều này xảy ra ít thường xuyên hơn.
  • Trạng thái Lỗ (Cột bên trái):

    • Rất hiếm khi, công ty đã có lúc kinh doanh dưới giá vốn, dẫn đến biên lợi nhuận bị âm (lỗ).

=> Thay vì tập trung quanh một giá trị trung bình duy nhất (như hình quả chuông), hiệu suất hoạt động của công ty lại phân cực thành ba nhóm riêng biệt. Điều này cho thấy hoạt động kinh doanh của công ty có thể bị ảnh hưởng bởi những yếu tố chu kỳ hoặc sự kiện đặc biệt, khiến hiệu quả kinh doanh thay đổi rõ rệt giữa các thời kỳ “bình thường”, “rất tốt”, và “rất tệ”.

Đồ thị 20 : vẽ đồ thị động theo ROS,ROA,ROE

library(ggplot2)
library(dplyr)
library(tidyr) 
p20 <- d3 %>% select(year, ROS, ROA, ROE) %>%
  mutate(ROS = ROS / 100) %>% 
  pivot_longer( cols = c(ROS, ROA, ROE),  names_to = "Metric",  values_to = "Value") %>%
  na.omit()
static_plot <- ggplot(p20, aes(x = year, y = Value, color = Metric, group = Metric)) +
  geom_line(linewidth = 1.2) + 
  geom_point(size = 3) + 
  labs(title = "Xu hướng Hiệu suất Tài chính qua các Năm",
    subtitle = "So sánh ROS, ROA, và ROE",
    x = "Năm",
    y = "Giá trị", color = "Chỉ số" ) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  theme_minimal(base_size = 14) +
  theme( plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    plot.subtitle = element_text(hjust = 0.5, size = 12), legend.position = "bottom" )
print(static_plot)

Giải thích: (1-3) Nạp thư viện cần thiết cho phiên làm việc. (4) Lấy dữ liệu từ bảng d3 để bắt đầu xử lý và lưu kết quả vào một bảng mới tên là p20. (5) Chuyển đổi giá trị cột ROS sang dạng số thập phân. (6) xoay 3 cột chỉ số (ROS, ROA, ROE) thành 2 cột mới. (7) Xóa các dòng có dữ liệu bị thiếu. (8) Khởi tạo một đối tượng biểu đồ, sử dụng data frame p20 đã chuẩn bị. (9) Vẽ các đường nối:** Tạo các đường thẳng nối các điểm dữ liệu. (10) Vẽ các điểm dữ liệu:** Thêm các điểm tròn tại mỗi điểm dữ liệu. (11-14) Đặt tiêu đề và nhãn cho các trục,định dạng trục. (15-19) Sử dụng theme tối giản và tùy chỉnh giao diện,hiển thị biểu đồ.

Ý nghĩa: 1. ROE (Màu xanh lá - Tỷ suất sinh lời trên Vốn chủ sở hữu)

  • Xu hướng: Đây là chỉ số cao nhất và biến động mạnh nhất. ROE có xu hướng tăng từ 2018 đến đỉnh điểm vào khoảng năm 2021 (vượt 12%), sau đó sụt giảm mạnh và đang có dấu hiệu phục hồi nhẹ.
  • Ý nghĩa kinh tế: Chỉ số này cho biết mỗi 100 đồng vốn mà cổ đông bỏ ra thì tạo ra được bao nhiêu đồng lợi nhuận.
    • ROE cao và biến động: Cho thấy lợi nhuận dành cho cổ đông rất hấp dẫn nhưng cũng đi kèm với rủi ro cao. Sự biến động mạnh có thể do kết quả kinh doanh không ổn định hoặc do tác động của việc sử dụng nợ. Năm 2021 là một năm kinh doanh đặc biệt thành công.

2. ROA (Màu đỏ - Tỷ suất sinh lời trên Tổng tài sản)

  • Xu hướng: Luôn thấp hơn ROE. ROA bắt đầu ở mức rất cao (khoảng 12%) rồi sụt giảm mạnh, sau đó có xu hướng giảm dần qua các năm.
  • Ý nghĩa kinh tế: Chỉ số này đo lường hiệu quả của công ty trong việc sử dụng toàn bộ tài sản (bao gồm cả vốn chủ sở hữu và nợ vay) để tạo ra lợi nhuận.
    • Xu hướng giảm của ROA là một dấu hiệu đáng lo ngại. Nó cho thấy khả năng sinh lời từ tài sản của công ty đang ngày càng kém hiệu quả đi theo thời gian.

3. ROS (Màu xanh dương - Tỷ suất sinh lời trên Doanh thu)

  • Xu hướng: Rất thấp, gần như đi ngang và chỉ nhích nhẹ lên vào những năm cuối. Chỉ số này luôn duy trì ở mức dưới 2%.
  • Ý nghĩa kinh tế: Đây chính là biên lợi nhuận ròng, cho biết cứ 100 đồng doanh thu tạo ra thì công ty thu về được bao nhiêu đồng lợi nhuận sau thuế.
    • ROS rất thấp nhưng ổn định: Điều này cho thấy công ty có thể đang hoạt động trong một ngành có tính cạnh tranh cao, biên lợi nhuận mỏng bán lẻ, phân phối. Sự ổn định cho thấy công ty quản lý chi phí và giá bán khá nhất quán qua các năm.