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

2 I.GIỚI THIỆU DỮ LIỆU

3 1.1.Đọc dữ liệu từ file

#install.packages("gganimate")

d <- read.csv("C:/Users/CHI LINH/Downloads/World-Stock-Prices-Dataset.csv")
library(dplyr)
library(lubridate)
library(moments)
library(ggplot2)
library(scales)
library(gganimate)
library(tidyr)

4 1.2.Xem cấu trúc của bộ dữ liệu

Hàm str() được dùng để hiển thị một cách cô đọng cấu trúc bên trong của một đối tượng R. Đối với một bảng dữ liệu (data frame), nó sẽ cho bạn biết: * Loại đối tượng là gì (ví dụ: data frame). * Có bao nhiêu quan sát (hàng) và bao nhiêu biến (cột). * Tên của từng cột. * Kiểu dữ liệu của từng cột (num - số, chr - chuỗi ký tự, Factor - yếu tố, v.v.). * Một vài giá trị đầu tiên của mỗi cột để bạn có cái nhìn tổng quan.

str(d)
## 'data.frame':    310122 obs. of  13 variables:
##  $ Date         : chr  "2025-07-03 00:00:00-04:00" "2025-07-03 00:00:00-04:00" "2025-07-03 00:00:00-04:00" "2025-07-03 00:00:00-04:00" ...
##  $ Open         : num  6.63 106.75 122.63 221.71 212.15 ...
##  $ High         : num  6.74 108.37 123.05 224.01 214.65 ...
##  $ Low          : num  6.61 106.33 121.55 221.36 211.81 ...
##  $ Close        : num  6.64 107.34 121.93 223.41 213.55 ...
##  $ Volume       : num  4209664 560190 36600 29295154 34697317 ...
##  $ Brand_Name   : chr  "peloton" "crocs" "adidas" "amazon" ...
##  $ Ticker       : chr  "PTON" "CROX" "ADDYY" "AMZN" ...
##  $ Industry_Tag : chr  "fitness" "footwear" "apparel" "e-commerce" ...
##  $ Country      : chr  "usa" "usa" "germany" "usa" ...
##  $ Dividends    : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Stock.Splits : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Capital.Gains: num  NA NA NA NA NA NA NA NA NA NA ...

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.

5 1.3.Xem dữ liệu đầu, cuối

head(d, 3) 
##                        Date   Open   High      Low  Close  Volume Brand_Name
## 1 2025-07-03 00:00:00-04:00   6.63   6.74   6.6150   6.64 4209664    peloton
## 2 2025-07-03 00:00:00-04:00 106.75 108.37 106.3301 107.34  560190      crocs
## 3 2025-07-03 00:00:00-04:00 122.63 123.05 121.5500 121.93   36600     adidas
##   Ticker Industry_Tag Country Dividends Stock.Splits Capital.Gains
## 1   PTON      fitness     usa         0            0            NA
## 2   CROX     footwear     usa         0            0            NA
## 3  ADDYY      apparel germany         0            0            NA
tail(d, 3)
##                             Date      Open      High       Low     Close
## 310120 2000-01-03 00:00:00-05:00 72.313085 72.405794 71.756831 72.034958
## 310121 2000-01-03 00:00:00-05:00  7.289986  7.342182  7.098602  7.168196
## 310122 2000-01-03 00:00:00-05:00  5.731675  5.793975  5.427959  5.482471
##         Volume                Brand_Name Ticker Industry_Tag Country Dividends
## 310120   21200                    toyota     TM   automotive   japan         0
## 310121  882200                 nordstrom    JWN       retail     usa         0
## 310122 5825700 american eagle outfitters    AEO      apparel     usa         0
##        Stock.Splits Capital.Gains
## 310120            0            NA
## 310121            0            NA
## 310122            0            NA

** Ý nghĩa Kỹ Thuật

  1. Kiểm tra dữ liệu (Data Sanity Check): Lệnh head()tail() 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.
  2. 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.
  3. 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ã.

6 1.4.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)))
print(missing_values)
##          Date          Open          High           Low         Close 
##             0             0             0             0             0 
##        Volume    Brand_Name        Ticker  Industry_Tag       Country 
##             0             0             0             0             0 
##     Dividends  Stock.Splits Capital.Gains 
##             0             0        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.

7 1.5.Kiểm tra trùng lặp

so_trung_lap <- sum(duplicated(d))
print(so_trung_lap)
## [1] 0

-Capital.Gains # 1.6. Xóa biến cuối có chứa giá trị NA

d <- d %>% select(-Capital.Gains)

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 # 1.7.Cổ tức chia thành có chia hoặc l có chia

d$Dividends <- ifelse(d$Dividends > 0, 1, 0)

Ý nghĩa trực tiếp: Hầu hết các dòng dữ liệu trong bảng của bạn đều có giá trị Dividends là 0.

Ý nghĩa kinh tế: Điều này phản ánh một thực tế quan trọng: Việc trả cổ tức là một sự kiện tương đối hiếm. Các công ty thường chỉ trả cổ tức theo quý hoặc theo năm. Do đó, nếu dữ liệu của bạn được ghi nhận theo ngày, thì trong hầu hết các ngày, một công ty sẽ không có hoạt động trả cổ tức. Ngoài ra, nhiều công ty (đặc biệt là các công ty công nghệ đang tăng trưởng) chọn không trả cổ tức mà giữ lại lợi nhuận để tái đầu tư.

Sự xuất hiện rải rác của số 1:

Ý nghĩa trực tiếp: Những con số 1 đánh dấu chính xác những thời điểm (những dòng dữ liệu) mà một công ty đã thực hiện trả cổ tức cho cổ đông.

Ý nghĩa trực tiếp: Đây là thông báo của R cho biết bộ dữ liệu của bạn rất lớn. R chỉ in ra một phần đầu của kết quả (khoảng 1000 dòng đầu tiên) để tránh làm tràn màn hình console. Có đến 309,122 dòng dữ liệu khác không được hiển thị.

Ý nghĩa kinh tế và dữ liệu: Điều này khẳng định rằng bạn đang làm việc với một bộ dữ liệu quy mô lớn (big data), có thể bao gồm dữ liệu của nhiều công ty trong nhiều năm. Điều này làm cho kết luận ở mục 1 càng trở nên đáng tin cậy: trong hàng trăm nghìn điểm dữ liệu, số lần trả cổ tức chỉ chiếm một phần nhỏ.

=> Về mặt kỹ thuật: Bạn đã biến đổi thành công cột Dividends thành một biến nhị phân (0/1), rất hữu ích cho các mô hình phân tích và học máy sau này dự đoán xem một công ty CÓ hay KHÔNG trả cổ tức.

=> Về mặt kinh tế: Nó cung cấp một cái nhìn thực tế về tần suất trả cổ tức trên thị trường chứng khoán – đây là một hành động không thường xuyên và chỉ xảy ra vào những thời điểm cụ thể.

8 1.8.Lọc các mã cổ phiếu có Dividends = 1

dividend_stocks <- d[d$Dividends == 1, ]
head(dividend_stocks, 3) 
##                         Date   Open   High    Low  Close   Volume
## 29 2025-07-03 00:00:00-04:00 325.33 329.14 324.18 328.13  1541800
## 61 2025-07-03 00:00:00-04:00  68.18  69.47  68.18  69.37 17973500
## 62 2025-07-03 00:00:00-04:00 292.15 296.40 291.21 296.00  6541600
##             Brand_Name Ticker Industry_Tag Country Dividends Stock.Splits
## 29    american express    AXP      finance     usa         1            0
## 61               cisco   CSCO   technology     usa         1            0
## 62 jpmorgan chase & co    JPM      finance     usa         1            0

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

result <- dividend_stocks %>%
  distinct(Ticker, .keep_all = TRUE) %>%
  group_by(Country) %>%
  summarise(Tickers = paste(Ticker, collapse = ", "))

print(result)
## # A tibble: 6 × 2
##   Country     Tickers                                                           
##   <chr>       <chr>                                                             
## 1 france      LVMUY, UBSFY                                                      
## 2 germany     POAHY, PMMAF, ADDYY, BAMXF                                        
## 3 japan       HMC, TM, NTDOY                                                    
## 4 netherlands UL, PHG                                                           
## 5 switzerland LOGI                                                              
## 6 usa         AXP, CSCO, JPM, DIS, FDX, CRM, LUV, KO, GOOGL, HD, NKE, MCD, JNJ,…

Đ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).

Nhậ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.

10 1.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.

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

11.1 2.1.phân tổ theo giá theo ngành theo ngày

pt1 <-d %>%
  mutate(Price_Category = case_when(
    Close < 50 ~ "Rẻ", 
    Close >= 50 & Close < 500 ~ "Trung bình",
    Close >= 500 & Close < 1000 ~ "Cao",
    Close >= 1000 ~ "Rất cao"
  ))
pt1 <- pt1 %>%
  select(Date, Close, Price_Category, Volume, Brand_Name, Ticker, Industry_Tag, Country, Dividends)
pt1[1:10, ]  
##                         Date  Close Price_Category   Volume
## 1  2025-07-03 00:00:00-04:00   6.64             Rẻ  4209664
## 2  2025-07-03 00:00:00-04:00 107.34     Trung bình   560190
## 3  2025-07-03 00:00:00-04:00 121.93     Trung bình    36600
## 4  2025-07-03 00:00:00-04:00 223.41     Trung bình 29295154
## 5  2025-07-03 00:00:00-04:00 213.55     Trung bình 34697317
## 6  2025-07-03 00:00:00-04:00  76.39     Trung bình 11545304
## 7  2025-07-03 00:00:00-04:00 104.06     Trung bình  3535290
## 8  2025-07-03 00:00:00-04:00 179.53     Trung bình 21563145
## 9  2025-07-03 00:00:00-04:00 725.05            Cao  1071771
## 10 2025-07-03 00:00:00-04:00  78.58     Trung bình  2882442
##                   Brand_Name Ticker Industry_Tag Country Dividends
## 1                    peloton   PTON      fitness     usa         0
## 2                      crocs   CROX     footwear     usa         0
## 3                     adidas  ADDYY      apparel germany         0
## 4                     amazon   AMZN   e-commerce     usa         0
## 5                      apple   AAPL   technology     usa         0
## 6                       nike    NKE      apparel     usa         0
## 7                     target    TGT       retail     usa         0
## 8                     google  GOOGL   technology     usa         0
## 9                    spotify   SPOT        music     usa         0
## 10 zoom video communications     ZM   technology     usa         0

Bảng dữ liệu trên thể hiện thông tin giá cổ phiếu của 6 thương hiệu quốc tế vào cùng một ngày giao dịch là 03/07/2025, bao gồm các cột về giá đóng cửa, khối lượng giao dịch, ngành nghề, quốc gia và cổ tức.

Cụ thể, các doanh nghiệp có quy mô và lĩnh vực khác nhau như Peloton (fitness), Crocs (footwear), Adidas (apparel), Amazon (e-commerce), Apple (technology) và Nike (apparel). Giá đóng cửa của các cổ phiếu này dao động từ 6,64 USD đến 223,41 USD, trong đó Peloton thuộc nhóm “rẻ”, còn các cổ phiếu còn lại được xếp vào nhóm “trung bình” theo tiêu chí phân loại giá.

Về khối lượng giao dịch, Apple và Amazon có khối lượng rất lớn (hơn 29–34 triệu cổ phiếu), phản ánh tính thanh khoản cao và mức độ quan tâm mạnh mẽ của nhà đầu tư, trong khi Adidas và Crocs có khối lượng thấp hơn đáng kể. Tất cả các cổ phiếu trong mẫu đều có cổ tức bằng 0 tại thời điểm này, cho thấy không có đợt chi trả cổ tức trong ngày giao dịch đó.

Nhìn chung, dữ liệu này giúp người phân tích so sánh giá cổ phiếu, quy mô giao dịch và đặc điểm thị trường giữa các công ty, từ đó phục vụ cho các mục đích như phân tích hiệu suất cổ phiếu, định giá theo ngành, hoặc dự báo biến động giá. ## 2.2.Phân tổ theo khối lượng theo ngành theo ngày

pt2 <- d %>% # gán dữ liệu 
  mutate(Volume_Category = case_when(    # tạo ra các cộ mới
    Volume < 10000000 ~ "Thấp",
    Volume >= 10000000 & Volume < 50000000 ~ "Trung bình",
    Volume >= 50000000 & Volume <= 100000000 ~ "Lớn", 
    Volume > 100000000 ~ "Rất lớn"
  ))

pt2 <- pt2 %>%
  select(Date, Close, Volume, Volume_Category, Brand_Name, Ticker, Industry_Tag, Country, Dividends)
head(pt2)
##                        Date  Close   Volume Volume_Category Brand_Name Ticker
## 1 2025-07-03 00:00:00-04:00   6.64  4209664            Thấp    peloton   PTON
## 2 2025-07-03 00:00:00-04:00 107.34   560190            Thấp      crocs   CROX
## 3 2025-07-03 00:00:00-04:00 121.93    36600            Thấp     adidas  ADDYY
## 4 2025-07-03 00:00:00-04:00 223.41 29295154      Trung bình     amazon   AMZN
## 5 2025-07-03 00:00:00-04:00 213.55 34697317      Trung bình      apple   AAPL
## 6 2025-07-03 00:00:00-04:00  76.39 11545304      Trung bình       nike    NKE
##   Industry_Tag Country Dividends
## 1      fitness     usa         0
## 2     footwear     usa         0
## 3      apparel germany         0
## 4   e-commerce     usa         0
## 5   technology     usa         0
## 6      apparel     usa         0

Date (Ngày): Thời gian ghi nhận dữ liệu, cụ thể là ngày 3 tháng 7 năm 2025.

Close (Giá đóng cửa): Giá của một cổ phiếu khi thị trường chứng khoán đóng cửa vào ngày hôm đó. vào cuối ngày 3/7/2025, một cổ phiếu của Peloton (PTON) có giá 6.64 (đơn vị tiền tệ, thường là USD).

Volume (Khối lượng giao dịch): Tổng số cổ phiếu được giao dịch (mua và bán) trong ngày.Có 4,209,664 cổ phiếu của Peloton được giao dịch vào ngày hôm đó. Khối lượng giao dịch cao thường cho thấy sự quan tâm lớn từ nhà đầu tư.

Volume_Category (Phân loại khối lượng): Phân loại khối lượng giao dịch thành các mức “Thấp” hoặc “Trung bình”. Điều này giúp nhanh chóng đánh giá mức độ quan tâm của thị trường đối với cổ phiếu so với các cổ phiếu khác hoặc so với mức trung bình của chính nó.

Brand_Name (Tên thương hiệu): Tên của công ty, như “peloton”, “amazon”.

Ticker (Mã cổ phiếu): Ký hiệu viết tắt duy nhất được sử dụng để xác định cổ phiếu của một công ty trên thị trường chứng khoán. “PTON” là mã của Peloton, và “AAPL” là mã của Apple.

Industry_Tag (Ngành): Lĩnh vực kinh doanh chính của công ty. Nike và Adidas thuộc ngành “may mặc” (apparel), trong khi Apple thuộc ngành “công nghệ” (technology).

Country (Quốc gia): Quốc gia nơi công ty đặt trụ sở chính. Adidas là của Đức (Germany), trong khi 5 công ty còn lại là của Mỹ (USA).

Dividends (Cổ tức): Khoản thanh toán mà một công ty trả cho các cổ đông. Trong bảng dữ liệu này, giá trị “0” cho tất cả các công ty có nghĩa là vào ngày đó, không có công ty nào trong danh sách trả cổ tức.

So sánh hiệu suất: Bạn có thể so sánh giá cổ phiếu và khối lượng giao dịch giữa các công ty. Ví dụ, Amazon (AMZN) và Apple (AAPL) có giá đóng cửa cao nhất và khối lượng giao dịch ở mức “Trung bình”, cho thấy đây là các cổ phiếu có giá trị lớn và được giao dịch sôi động. Ngược lại, Peloton (PTON) có giá cổ phiếu rất thấp (6.64) nhưng khối lượng giao dịch lại không hề nhỏ, trong khi Adidas (ADDYY) có giá cao nhưng khối lượng giao dịch lại ở mức “Thấp”.

Phân loại theo ngành và quốc gia: Dữ liệu cho thấy sự đa dạng về ngành nghề (thể dục, giày dép, may mặc, thương mại điện tử, công nghệ) và nguồn gốc quốc gia (Mỹ và Đức). Điều này hữu ích cho việc phân tích theo từng lĩnh vực hoặc so sánh hiệu suất của các công ty từ những thị trường khác nhau.

Thông tin cho nhà đầu tư: Dữ liệu này cung cấp các thông tin cơ bản mà một nhà đầu tư sẽ xem xét. Giá đóng cửa cho biết giá trị thị trường, khối lượng giao dịch phản ánh mức độ quan tâm và tính thanh khoản của cổ phiếu. Việc không có cổ tức cũng là một thông tin quan trọng.

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

pt3 <- d %>%  # phép gán
  mutate(Price_Volume_Category = case_when(  # tạo ra bẳng mới xét họn điều kiện
    Close < 100 & Volume < 10000000 ~ "Giá thấp - Khối lượng thấp",
    Close < 100 & Volume >= 10000000 & Volume < 50000000 ~ "Giá thấp - Khối lượng trung bình",
    Close < 100 & Volume >= 50000000 ~ "Giá thấp - Khối lượng lớn",
    Close >= 100 & Close < 500 & Volume < 10000000 ~ "Giá trung bình - Khối lượng thấp",
    Close >= 100 & Close < 500 & Volume >= 10000000 & Volume < 50000000 ~ "Giá trung bình - Khối lượng trung bình",
    Close >= 100 & Close < 500 & Volume >= 50000000 ~ "Giá trung bình - Khối lượng lớn",
    Close >= 500 & Volume < 10000000 ~ "Giá cao - Khối lượng thấp",
    Close >= 500 & Volume >= 10000000 & Volume < 50000000 ~ "Giá cao - Khối lượng trung bình",
    Close >= 500 & Volume >= 50000000 ~ "Giá cao - Khối lượng lớn"
  ))
pt3 <- pt3 %>%
  select(Date, Close, Volume, Price_Volume_Category, Brand_Name, Ticker, Industry_Tag, Country, Dividends)
pt3[1:10, ]  
##                         Date  Close   Volume
## 1  2025-07-03 00:00:00-04:00   6.64  4209664
## 2  2025-07-03 00:00:00-04:00 107.34   560190
## 3  2025-07-03 00:00:00-04:00 121.93    36600
## 4  2025-07-03 00:00:00-04:00 223.41 29295154
## 5  2025-07-03 00:00:00-04:00 213.55 34697317
## 6  2025-07-03 00:00:00-04:00  76.39 11545304
## 7  2025-07-03 00:00:00-04:00 104.06  3535290
## 8  2025-07-03 00:00:00-04:00 179.53 21563145
## 9  2025-07-03 00:00:00-04:00 725.05  1071771
## 10 2025-07-03 00:00:00-04:00  78.58  2882442
##                     Price_Volume_Category                Brand_Name Ticker
## 1              Giá thấp - Khối lượng thấp                   peloton   PTON
## 2        Giá trung bình - Khối lượng thấp                     crocs   CROX
## 3        Giá trung bình - Khối lượng thấp                    adidas  ADDYY
## 4  Giá trung bình - Khối lượng trung bình                    amazon   AMZN
## 5  Giá trung bình - Khối lượng trung bình                     apple   AAPL
## 6        Giá thấp - Khối lượng trung bình                      nike    NKE
## 7        Giá trung bình - Khối lượng thấp                    target    TGT
## 8  Giá trung bình - Khối lượng trung bình                    google  GOOGL
## 9               Giá cao - Khối lượng thấp                   spotify   SPOT
## 10             Giá thấp - Khối lượng thấp zoom video communications     ZM
##    Industry_Tag Country Dividends
## 1       fitness     usa         0
## 2      footwear     usa         0
## 3       apparel germany         0
## 4    e-commerce     usa         0
## 5    technology     usa         0
## 6       apparel     usa         0
## 7        retail     usa         0
## 8    technology     usa         0
## 9         music     usa         0
## 10   technology     usa         0

Close (Giá đóng cửa): Đây là mức giá mà thị trường đồng ý trả cho một cổ phiếu của công ty vào cuối ngày giao dịch. Nó phản ánh sự định giá của thị trường về giá trị hiện tại và tiềm năng tương lai của công ty.Giá cao Costco $987.02, Spotify $725.05, Mastercard $569.24: Cho thấy nhà đầu tư có niềm tin lớn vào mô hình kinh doanh, lợi nhuận và khả năng tăng trưởng của các công ty này. Đây thường là các công ty đầu ngành, có lợi thế cạnh tranh bền vững.

Giá thấp như Peloton $6.64, Honda $30.28: Có thể do nhiều nguyên nhân: công ty đang gặp khó khăn, quy mô nhỏ hơn, hoặc đơn giản là họ phát hành số lượng cổ phiếu lớn khiến giá mỗi cổ phiếu thấp hơn.

Volume (Khối lượng giao dịch): Con số này thể hiện mức độ quan tâm của nhà đầu tư và tính thanh khoản của cổ phiếu. Khối lượng giao dịch càng cao, cổ phiếu càng dễ dàng được mua bán mà không ảnh hưởng nhiều đến giá.

Khối lượng lớn như Nvidia 142 triệu, Tesla 58 triệu: Cho thấy những cổ phiếu này đang thu hút sự chú ý cực lớn từ thị trường. Có thể có tin tức quan trọng, báo cáo tài chính tốt, hoặc đơn giản là chúng thuộc nhóm cổ phiếu “nóng” mà nhiều người muốn giao dịch. Đây là dấu hiệu của sự sôi động và niềm tin (hoặc cả sự đầu cơ) của thị trường.

Khối lượng thấp Adidas 36,600, Logitech 216,072: Cho thấy sự quan tâm của nhà đầu tư ít hơn trong ngày hôm đó. Cổ phiếu này có thể ổn định hơn, ít biến động hơn, hoặc thuộc về các công ty mà nhà đầu tư có xu hướng nắm giữ lâu dài thay vì giao dịch liên tục.

Price_Volume_Category (Phân loại giá và khối lượng): Cột này tổng hợp hai chỉ số trên, cho một cái nhìn nhanh và sâu sắc hơn về “tính cách” của mỗi cổ phiếu trên thị trường.

“Giá cao - Khối lượng thấp” (Costco, Mastercard): Đặc trưng của các cổ phiếu “blue-chip”, những gã khổng lồ ổn định. Nhà đầu tư mua và nắm giữ chúng vì tin tưởng vào sự bền vững lâu dài, không phải để lướt sóng.

“Giá trung bình - Khối lượng lớn” (Nvidia, Tesla): Đây là những ngôi sao của thị trường. Chúng có giá trị vốn hóa lớn và đang là tâm điểm của các cuộc thảo luận và giao dịch. Sự kết hợp này cho thấy cả giá trị thực tại và sự kỳ vọng lớn của nhà đầu tư.

“Giá thấp - Khối lượng trung bình” (Nike, Chipotle, Cisco): Các công ty này vẫn rất quen thuộc và được giao dịch tích cực, nhưng mức giá “mềm” hơn có thể thu hút một lượng lớn nhà đầu tư nhỏ lẻ.

“Giá thấp - Khối lượng thấp” (Peloton, Honda, Unilever): Có thể là các công ty đang trong giai đoạn khó khăn, ít được chú ý, hoặc thuộc các ngành công nghiệp ít biến động hơn.

Dividends (Cổ tức): Cổ tức là một phần lợi nhuận sau thuế mà công ty chia cho cổ đông. Nó là một hình thức trả lại giá trị trực tiếp cho nhà đầu tư.

Dividends = 1 (American Express): Chỉ có một công ty trong danh sách (American Express) trả cổ tức vào ngày này. Việc trả cổ tức thường là dấu hiệu của một công ty đã trưởng thành, có dòng tiền ổn định và lợi nhuận vững chắc. Họ tự tin vào sức khỏe tài chính của mình đến mức có thể chia sẻ lợi nhuận cho cổ đông.

Dividends = 0 (Hầu hết các công ty khác): Không trả cổ tức không có nghĩa là công ty yếu kém. Nhiều công ty, đặc biệt là trong lĩnh vực công nghệ (như Google, Amazon, Tesla), thường chọn tái đầu tư toàn bộ lợi nhuận vào nghiên cứu, phát triển và mở rộng kinh doanh để thúc đẩy tăng trưởng trong tương lai. Nhà đầu tư vào các công ty này kỳ vọng giá cổ phiếu sẽ tăng mạnh thay vì nhận tiền mặt từ cổ tức.

11.3 2.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

pt4<- 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"
  ) %>%
  arrange(Month, Industry_Tag) 

pt4_filtered <- pt4  %>%
  mutate(
    Price_Tier = case_when(
      gia_tri < 100 ~ "Giá thấp",
      gia_tri >= 100 & gia_tri < 1000 ~ "Giá trung",
      gia_tri >= 1000 ~ "Giá cao",
      TRUE ~ NA_character_
    ),
    Liquidity_Tier = case_when(
      khoi_luong < 100000000 ~ "Thanh khoản thấp",
      khoi_luong >= 100000000 & khoi_luong < 1000000000 ~ "Thanh khoản trung",
      khoi_luong >= 1000000000 ~ "Thanh khoản cao",
      TRUE ~ NA_character_
    )
  ) %>%
  select(Month, Industry_Tag, Country,
         gia_tri, Price_Tier,
         khoi_luong, Liquidity_Tier)
show(pt4_filtered)
## # A tibble: 384 × 7
##    Month       Industry_Tag Country gia_tri Price_Tier khoi_luong Liquidity_Tier
##    <ord>       <chr>        <chr>     <dbl> <chr>           <dbl> <chr>         
##  1 Tháng Giêng apparel      germany    63.0 Giá thấp       32950. Thanh khoản t…
##  2 Tháng Giêng apparel      usa        28.3 Giá thấp     7577394. Thanh khoản t…
##  3 Tháng Giêng automotive   germany    37.6 Giá thấp       93028. Thanh khoản t…
##  4 Tháng Giêng automotive   japan      63.7 Giá thấp      539808. Thanh khoản t…
##  5 Tháng Giêng automotive   usa       105.  Giá trung   99645814. Thanh khoản t…
##  6 Tháng Giêng aviation     usa        29.1 Giá thấp     9020861. Thanh khoản t…
##  7 Tháng Giêng consumer go… nether…    28.3 Giá thấp     1458219. Thanh khoản t…
##  8 Tháng Giêng consumer go… usa        56.5 Giá thấp     7319693. Thanh khoản t…
##  9 Tháng Giêng cryptocurre… usa       177.  Giá trung   11337161. Thanh khoản t…
## 10 Tháng Giêng e-commerce   canada     54.1 Giá thấp    13064198. Thanh khoản t…
## # ℹ 374 more rows

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.

11.4 2.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

pt5 <- 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_Volume_Category = case_when(
    Avg_Close < 100 & Avg_Volume < 10000000 ~ "Giá thấp - Khối lượng thấp",
    Avg_Close < 100 & Avg_Volume >= 10000000 & Avg_Volume < 50000000 ~ "Giá thấp - Khối lượng trung bình",
    Avg_Close < 100 & Avg_Volume >= 50000000 ~ "Giá thấp - Khối lượng lớn",
    Avg_Close >= 100 & Avg_Close < 500 & Avg_Volume < 10000000 ~ "Giá trung bình - Khối lượng thấp",
    Avg_Close >= 100 & Avg_Close < 500 & Avg_Volume >= 10000000 & Avg_Volume < 50000000 ~ "Giá trung bình - Khối lượng trung bình",
    Avg_Close >= 100 & Avg_Close < 500 & Avg_Volume >= 50000000 ~ "Giá trung bình - Khối lượng lớn",
    Avg_Close >= 500 & Avg_Volume < 10000000 ~ "Giá cao - Khối lượng thấp",
    Avg_Close >= 500 & Avg_Volume >= 10000000 & Avg_Volume < 50000000 ~ "Giá cao - Khối lượng trung bình",
    Avg_Close >= 500 & Avg_Volume >= 50000000 ~ "Giá cao - Khối lượng lớn"
  )) %>%
  select(Year, Avg_Close, Avg_Volume, Price_Volume_Category, Industry_Tag, Country)

show(pt5)
## # A tibble: 663 × 6
##     Year Avg_Close Avg_Volume Price_Volume_Category         Industry_Tag Country
##    <dbl>     <dbl>      <dbl> <chr>                         <chr>        <chr>  
##  1  2000      3.75   7902543. Giá thấp - Khối lượng thấp    apparel      usa    
##  2  2000     38.6      48648. Giá thấp - Khối lượng thấp    automotive   japan  
##  3  2000     13.4    2735833. Giá thấp - Khối lượng thấp    aviation     usa    
##  4  2000      6.82    320459. Giá thấp - Khối lượng thấp    consumer go… nether…
##  5  2000     17.9    6976633. Giá thấp - Khối lượng thấp    consumer go… usa    
##  6  2000      2.33 175159333. Giá thấp - Khối lượng lớn     e-commerce   usa    
##  7  2000     28.8    5991648. Giá thấp - Khối lượng thấp    entertainme… usa    
##  8  2000     29.5    6808273. Giá thấp - Khối lượng thấp    finance      usa    
##  9  2000     18.7    4654524. Giá thấp - Khối lượng thấp    food         usa    
## 10  2000     11.0   10360835. Giá thấp - Khối lượng trung … food & beve… usa    
## # ℹ 653 more rows

Avg_Close (Giá trung bình): Phản ánh niềm tin của nhà đầu tư và định giá của thị trường đối với một ngành trong năm đó. Giá cao cho thấy sự lạc quan về lợi nhuận và tăng trưởng.

Avg_Volume (Khối lượng trung bình): Thể hiện quy mô, mức độ quan tâm và tầm quan trọng kinh tế của ngành. Khối lượng lớn cho thấy ngành đó có nhiều hoạt động giao dịch và là một phần quan trọng của nền kinh tế.

Câu chuyện “Bong bóng Dot-com”: Đây là điểm nổi bật nhất. Ngành e-commerce (thương mại điện tử) của Mỹ có Avg_Close giảm mạnh từ 2.32 (năm 2000) xuống chỉ còn 0.61 (năm 2001). Đây là minh chứng rõ ràng cho sự sụp đổ của bong bóng dot-com, khi sự kỳ vọng quá lớn vào các công ty công nghệ đã tan vỡ, khiến giá cổ phiếu lao dốc.

Sự trỗi dậy của các “Gã khổng lồ”: Mặc dù giá cổ phiếu sụp đổ, các ngành e-commerce và technology của Mỹ vẫn được xếp loại “Khối lượng lớn”. Điều này cực kỳ quan trọng: nó cho thấy dù niềm tin về giá bị lung lay, quy mô và tầm ảnh hưởng của các ngành này vẫn rất lớn. Đây chính là nền móng cho sự thống trị của các công ty công nghệ lớn sau này.

Sự ổn định của các ngành truyền thống: Trong khi công nghệ biến động mạnh, các ngành như consumer goods (hàng tiêu dùng), automotive (ô tô), và healthcare (chăm sóc sức khỏe) có giá và khối lượng ổn định hơn nhiều. Điều này phản ánh bản chất bền vững, ít bị ảnh hưởng bởi các cú sốc đầu cơ của các ngành kinh tế cốt lõi.

Bức tranh kinh tế toàn cầu: Dữ liệu cho thấy thế mạnh kinh tế của từng quốc gia vào thời điểm đó: Mỹ dẫn đầu về công nghệ và thương mại điện tử, Nhật Bản mạnh về ô tô, và Hà Lan có vai trò trong ngành hàng tiêu dùng.

11.5 2.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

pt6 <- d %>%
  filter(Country == "usa") %>%
  mutate(
    Date = as.Date(Date),              
    Month = month(Date, label = TRUE, abbr = FALSE)  
  ) %>%
  group_by(Month, Industry_Tag) %>%
  summarise(
    gia_tri = mean(Close, na.rm = TRUE),    
    khoi_luong = mean(Volume, na.rm = TRUE),  
    .groups = "drop" 
  ) %>%
  arrange(Month, Industry_Tag)

pt6 <- pt6 %>%
  mutate(
    Price_Tier = case_when(
      gia_tri < 100 ~ "Giá thấp",
      gia_tri >= 100 & gia_tri < 300 ~ "Giá trung bình",
      gia_tri >= 300 ~ "Giá cao",
      TRUE ~ NA_character_
    ),
    Liquidity_Tier = case_when(
      khoi_luong < 5000000 ~ "Thanh khoản thấp",
      khoi_luong >= 5000000 & khoi_luong < 20000000 ~ "Thanh khoản trung bình",
      khoi_luong >= 20000000 ~ "Thanh khoản cao",
      TRUE ~ NA_character_
    )
  ) %>%
  select(Month, Industry_Tag,
         gia_tri, Price_Tier,
         khoi_luong, Liquidity_Tier)

show(pt6)
## # A tibble: 264 × 6
##    Month       Industry_Tag       gia_tri Price_Tier   khoi_luong Liquidity_Tier
##    <ord>       <chr>                <dbl> <chr>             <dbl> <chr>         
##  1 Tháng Giêng apparel               28.3 Giá thấp       7577394. Thanh khoản t…
##  2 Tháng Giêng automotive           105.  Giá trung b…  99645814. Thanh khoản c…
##  3 Tháng Giêng aviation              29.1 Giá thấp       9020861. Thanh khoản t…
##  4 Tháng Giêng consumer goods        56.5 Giá thấp       7319693. Thanh khoản t…
##  5 Tháng Giêng cryptocurrency       177.  Giá trung b…  11337161. Thanh khoản t…
##  6 Tháng Giêng e-commerce            48.0 Giá thấp     137958981. Thanh khoản c…
##  7 Tháng Giêng entertainment        123.  Giá trung b…  14995997. Thanh khoản t…
##  8 Tháng Giêng finance              105.  Giá trung b…  13161234. Thanh khoản t…
##  9 Tháng Giêng financial services    78.2 Giá thấp      10428028. Thanh khoản t…
## 10 Tháng Giêng fitness               37.2 Giá thấp      13666905. Thanh khoản t…
## # ℹ 254 more rows
  1. Các “Gã khổng lồ” của nền kinh tế (Thanh khoản cao): automotive (ô tô), e-commerce (thương mại điện tử), technology (công nghệ).Các ngành này có khoi_luong (khối lượng) cực kỳ lớn (từ 99 triệu đến 137 triệu).

Về mặt kinh tế, đây là những ngành xương sống, có quy mô thị trường khổng lồ, thu hút lượng vốn đầu tư và giao dịch lớn nhất. Chúng có tác động sâu rộng đến toàn bộ nền kinh tế và việc làm. Việc được xếp hạng “Thanh khoản cao” cho thấy chúng là trung tâm của dòng tiền.

  1. Các ngành “Chất lượng hơn số lượng” (Giá trị cao nhưng thanh khoản thấp/trung bình): food (thực phẩm), music (âm nhạc), logistics (hậu cần).Các ngành này có gia_tri (giá trị) rất cao (food: 316, music: 238), được xếp vào “Giá cao” hoặc “Giá trung bình”.

Tuy nhiên, khoi_luong của chúng lại thấp hơn nhiều so với nhóm “Gã khổng lồ”, điều này cho thấy đây là những ngành có biên lợi nhuận cao, sản phẩm/dịch vụ có giá trị lớn, nhưng không phải là thị trường giao dịch sôi động hàng ngày cho số đông. Chúng đại diện cho giá trị chuyên môn hóa, thương hiệu mạnh hoặc tài sản trí tuệ.

  1. Các ngành “Nền tảng” có quy mô lớn (Giá thấp nhưng thanh khoản trung bình): apparel (may mặc), consumer goods (hàng tiêu dùng), social media (mạng xã hội), đây là những ngành hàng thiết yếu hoặc phổ thông, phục vụ số lượng lớn người tiêu dùng. Mức độ cạnh tranh cao giữ cho giá cả ở mức thấp, nhưng quy mô thị trường khổng lồ đảm bảo chúng vẫn là một phần quan trọng của nền kinh tế.

  2. Sự biến động theo thời gian (So sánh các tháng):Khi nhìn từ tháng 1 đến tháng 3, bạn có thể thấy sự thay đổi. Ví dụ, automotive giảm từ “Giá trung bình” (105.17) xuống “Giá thấp” (88.86). Sự thay đổi này có thể phản ánh các yếu tố vĩ mô như thay đổi lãi suất, chính sách chính phủ, hoặc các vấn đề trong chuỗi cung ứng ảnh hưởng đến định giá của toàn ngành.

11.6 2.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

pt7 <- d %>%
  filter(Country == "usa") %>%
  mutate(
    Date = as.Date(Date),              
    Year = year(Date) 
  ) %>%
  group_by(Year, Industry_Tag) %>%
  summarise(
    gia_tri = mean(Close, na.rm = TRUE),    
    khoi_luong = mean(Volume, na.rm = TRUE),  
    .groups = "drop"
  ) %>%
  arrange(Year, Industry_Tag)

pt7 <- pt7 %>%
  mutate(
    Price_Tier = case_when(
      gia_tri < 100 ~ "Giá thấp",
      gia_tri >= 100 & gia_tri < 300 ~ "Giá trung bình",
      gia_tri >= 300 ~ "Giá cao",
      TRUE ~ NA_character_
    ),
    Liquidity_Tier = case_when(
      khoi_luong < 5000000 ~ "Thanh khoản thấp",
      khoi_luong >= 5000000 & khoi_luong < 20000000 ~ "Thanh khoản trung bình",
      khoi_luong >= 20000000 ~ "Thanh khoản cao",
      TRUE ~ NA_character_
    )
  ) %>%
  select(Year, Industry_Tag,
         gia_tri, Price_Tier,
         khoi_luong, Liquidity_Tier)

show(pt7)
## # A tibble: 449 × 6
##     Year Industry_Tag    gia_tri Price_Tier khoi_luong Liquidity_Tier        
##    <dbl> <chr>             <dbl> <chr>           <dbl> <chr>                 
##  1  2000 apparel            3.75 Giá thấp     7902543. Thanh khoản trung bình
##  2  2000 aviation          13.4  Giá thấp     2735833. Thanh khoản thấp      
##  3  2000 consumer goods    17.9  Giá thấp     6976633. Thanh khoản trung bình
##  4  2000 e-commerce         2.33 Giá thấp   175159333. Thanh khoản cao       
##  5  2000 entertainment     28.8  Giá thấp     5991648. Thanh khoản trung bình
##  6  2000 finance           29.5  Giá thấp     6808273. Thanh khoản trung bình
##  7  2000 food              18.7  Giá thấp     4654524. Thanh khoản thấp      
##  8  2000 food & beverage   11.0  Giá thấp    10360835. Thanh khoản trung bình
##  9  2000 footwear           6.42 Giá thấp      757515. Thanh khoản thấp      
## 10  2000 healthcare        24.5  Giá thấp     7190489. Thanh khoản trung bình
## # ℹ 439 more rows
  1. Vụ Nổ Bong Bóng Dot-com (2000-2001):

Ngành e-commerce (thương mại điện tử): gia_tri sụp đổ từ 2.32 xuống chỉ còn 0.61 trong vòng một năm. Đây là bằng chứng kinh tế rõ ràng về sự kết thúc của bong bóng dot-com, khi niềm tin của nhà đầu tư vào các công ty internet bay hơi.Mặc dù giá trị sụp đổ, khoi_luong (quy mô) của ngành này vẫn ở mức “Thanh khoản cao”. Điều này cho thấy, dù cơn sốt đầu cơ đã qua, nền tảng của kinh tế số vẫn cực kỳ lớn và quan trọng.

  1. Sức chống chịu của Kinh tế thực:

Trong khi các ngành công nghệ lao đao, các ngành truyền thống như consumer goods (hàng tiêu dùng) và healthcare (chăm sóc sức khỏe) có gia_tri (giá trị) gần như ổn định.

Điều này cho thấy các ngành phục vụ nhu cầu thiết yếu có sức chống chịu tốt hơn trước các cú sốc tài chính và đầu cơ.

11.7 2.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

pt8 <- d %>%  # thwujc hiện phép gán
  filter(Country == "germany") %>%    # lọc  theo quốc gia = "germany"
  mutate(
    Date = as.Date(Date),              
    Month = month(Date, label = TRUE, abbr = FALSE)  
  ) %>%
  group_by(Month, Industry_Tag) %>%  # Gom lại giá trị cột 
  summarise(    # thực hiện tính toán
    gia_tri = mean(Close, na.rm = TRUE),    
    khoi_luong = mean(Volume, na.rm = TRUE),  
    .groups = "drop" 
  ) %>%
  arrange(Month, Industry_Tag)  #Sắp xếp lại bảng dữ liệu theo thứ tự tăng dần của năm (Year) và ngành (Industry_Tag)

pt8 <- pt8 %>%
  mutate(
    Price_Tier = case_when(        
      gia_tri < 100 ~ "Giá thấp",
      gia_tri >= 100 & gia_tri < 300 ~ "Giá trung bình",
      gia_tri >= 300 ~ "Giá cao",
      TRUE ~ NA_character_
    ),
    Liquidity_Tier = case_when(
      khoi_luong < 5000000 ~ "Thanh khoản thấp",
      khoi_luong >= 5000000 & khoi_luong < 20000000 ~ "Thanh khoản trung bình",
      khoi_luong >= 20000000 ~ "Thanh khoản cao",
      TRUE ~ NA_character_
    )
  ) %>%
  select(Month, Industry_Tag,
         gia_tri, Price_Tier,
         khoi_luong, Liquidity_Tier)

# Hiển thị kết quả
show(pt8)
## # A tibble: 24 × 6
##    Month       Industry_Tag gia_tri Price_Tier khoi_luong Liquidity_Tier  
##    <ord>       <chr>          <dbl> <chr>           <dbl> <chr>           
##  1 Tháng Giêng apparel         63.0 Giá thấp       32950. Thanh khoản thấp
##  2 Tháng Giêng automotive      37.6 Giá thấp       93028. Thanh khoản thấp
##  3 Tháng Hai   apparel         61.9 Giá thấp       38048. Thanh khoản thấp
##  4 Tháng Hai   automotive      36.9 Giá thấp       75268. Thanh khoản thấp
##  5 Tháng Ba    apparel         59.9 Giá thấp       43874. Thanh khoản thấp
##  6 Tháng Ba    automotive      36.2 Giá thấp      129520. Thanh khoản thấp
##  7 Tháng Tư    apparel         61.0 Giá thấp       35144. Thanh khoản thấp
##  8 Tháng Tư    automotive      37.1 Giá thấp       92769. Thanh khoản thấp
##  9 Tháng Năm   apparel         62.4 Giá thấp       38367. Thanh khoản thấp
## 10 Tháng Năm   automotive      37.4 Giá thấp      137850. Thanh khoản thấp
## # ℹ 14 more rows
  1. Ngành May mặc (Apparel): “Giá trị cao hơn, Quy mô nhỏ hơn”

gia_tri (Giá trị) luôn cao hơn đáng kể (khoảng 60-64) so với ngành ô tô.

Ý nghĩa kinh tế: Điều này không có nghĩa là một cái áo đắt hơn một chiếc xe. gia_tri ở đây có thể đại diện cho một chỉ số hiệu quả kinh doanh như biên lợi nhuận ròng, tỷ suất lợi nhuận trên vốn đầu tư (ROI), hoặc một chỉ số định giá cổ phiếu (P/E). Việc ngành may mặc có chỉ số này cao hơn cho thấy, trong phân khúc này, các công ty may mặc có khả năng sinh lời trên mỗi đơn vị vốn hoặc doanh thu tốt hơn. Họ có thể có chi phí hoạt động thấp hơn, giá trị thương hiệu mạnh cho phép định giá cao, hoặc chu kỳ sản xuất linh hoạt hơn.

khoi_luong (Khối lượng) luôn ở mức thấp (khoảng 30k-40k).

Ý nghĩa kinh tế: Con số này phản ánh quy mô dòng tiền hoặc tổng giá trị giao dịch trong phân khúc này là nhỏ. Điều này là hợp lý vì giá trị mỗi sản phẩm may mặc thấp, và tổng quy mô vốn hóa của các công ty trong phân khúc này không lớn bằng ngành ô tô.

  1. Ngành Ô tô (Automotive): “Giá trị thấp hơn, Quy mô lớn hơn”

gia_tri (Giá trị) luôn thấp hơn (khoảng 35-38).

Ý nghĩa kinh tế: Ngành công nghiệp ô tô là ngành thâm dụng vốn (capital-intensive), đòi hỏi chi phí khổng lồ cho nhà xưởng, R&D, và vật liệu. Do đó, dù doanh thu rất lớn, biên lợi nhuận có thể mỏng hơn so với ngành may mặc. Sự cạnh tranh khốc liệt cũng gây áp lực lên lợi nhuận, dẫn đến chỉ số gia_tri thấp hơn.

khoi_luong (Khối lượng) lớn hơn nhiều và biến động mạnh (từ 75k đến 137k).

Ý nghĩa kinh tế: Con số này cho thấy quy mô dòng tiền và hoạt động kinh tế trong ngành ô tô lớn hơn rất nhiều. Mỗi giao dịch (bán một chiếc xe) có giá trị cao, nên tổng khối lượng giao dịch rất lớn. Sự biến động mạnh của khoi_luong cũng phản ánh tính thời vụ (seasonality) của ngành:

Các đỉnh cao vào tháng 3, tháng 5, và tháng 12 có thể tương ứng với các chương trình khuyến mãi lớn, mùa mua sắm cao điểm, hoặc các công ty đẩy mạnh doanh số để đạt chỉ tiêu cuối quý/cuối năm. Đây là đặc điểm kinh tế điển hình của ngành hàng tiêu dùng có giá trị lớn. => Ngành May mặc (trong phân khúc này): Tập trung vào hiệu quả và lợi nhuận. Họ tạo ra giá trị cao trên một quy mô hoạt động nhỏ hơn.Ngành Ô tô (trong phân khúc này): Là một cuộc chơi về quy mô và dòng tiền. Họ hoạt động với khối lượng khổng lồ, là một động lực kinh tế quan trọng, nhưng có thể phải chấp nhận biên lợi nhuận thấp hơn do chi phí và cạnh tranh.Sự ổn định của ngành may mặc so với sự biến động theo mùa của ngành ô tô cũng cho thấy sự khác biệt về hành vi của người tiêu dùng: quần áo là nhu cầu thường xuyên hơn, trong khi mua xe là một quyết định lớn, chịu ảnh hưởng nhiều hơn bởi các yếu tố kinh tế vĩ mô và các chương trình khuyến mãi.

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

pt9  <- d %>%   #Thêm các cột phân loại mới vào bảng pt9
  filter(Country == "germany") %>%  # Bước 1: Lọc dữ liệu, chỉ giữ lại các dòng có cột "Country" là "germany"
  mutate(
    Date = as.Date(Date),              
    Year = year(Date) 
  ) %>%
  group_by(Year, Industry_Tag) %>% # Gom lại giá trị cột 
  summarise(           # Thực hiện tính toán
    gia_tri = mean(Close, na.rm = TRUE),    
    khoi_luong = mean(Volume, na.rm = TRUE),  
    .groups = "drop" 
  ) %>%
  arrange(Year, Industry_Tag)

pt9 <- pt9 %>%    # Tạo cột "Price_Tier" (Bậc giá) dựa trên giá trị của cột "gia_tri"
  mutate(
    Price_Tier = case_when(
      gia_tri < 100 ~ "Giá thấp",
      gia_tri >= 100 & gia_tri < 300 ~ "Giá trung bình",
      gia_tri >= 300 ~ "Giá cao",
      TRUE ~ NA_character_
    ),
    Liquidity_Tier = case_when(
      khoi_luong < 5000000 ~ "Thanh khoản thấp",
      khoi_luong >= 5000000 & khoi_luong < 20000000 ~ "Thanh khoản trung bình",
      khoi_luong >= 20000000 ~ "Thanh khoản cao",
      TRUE ~ NA_character_
    )
  ) %>%
  select(Year, Industry_Tag,
         gia_tri, Price_Tier,
         khoi_luong, Liquidity_Tier)

show(pt9)
## # A tibble: 37 × 6
##     Year Industry_Tag gia_tri Price_Tier khoi_luong Liquidity_Tier  
##    <dbl> <chr>          <dbl> <chr>           <dbl> <chr>           
##  1  2006 apparel         19.2 Giá thấp       24752. Thanh khoản thấp
##  2  2007 apparel         23.9 Giá thấp       41278. Thanh khoản thấp
##  3  2008 apparel         23.0 Giá thấp       56483. Thanh khoản thấp
##  4  2009 apparel         17.6 Giá thấp       37355. Thanh khoản thấp
##  5  2009 automotive      25.6 Giá thấp        1199. Thanh khoản thấp
##  6  2010 apparel         23.6 Giá thấp       14845. Thanh khoản thấp
##  7  2010 automotive      19.5 Giá thấp       10135. Thanh khoản thấp
##  8  2011 apparel         29.0 Giá thấp       35973. Thanh khoản thấp
##  9  2011 automotive      27.8 Giá thấp      101173. Thanh khoản thấp
## 10  2012 apparel         31.9 Giá thấp       30341. Thanh khoản thấp
## # ℹ 27 more rows

Year (Năm): Mốc thời gian diễn ra sự kiện.

Industry_Tag (Ngành): Ngành công nghiệp được phân tích.

gia_tri (Giá trị): Đây có thể là một chỉ số đo lường hiệu suất hoặc giá trị của ngành, ví dụ như chỉ số giá cổ phiếu trung bình, giá trị vốn hóa, hoặc một chỉ số tài chính khác. Giá trị này càng cao, ngành đó càng có hiệu suất tốt hoặc được định giá cao hơn tại thời điểm đó.

Price_Tier (Mức giá): Phân loại mức định giá của ngành (ví dụ: “Giá thấp,” “Giá trung bình”). Điều này cho biết liệu thị trường đang định giá ngành đó cao hay thấp so với giá trị nội tại hoặc so với các ngành khác.

khoi_luong (Khối lượng): Con số này có thể đại diện cho khối lượng giao dịch cổ phiếu hoặc một thước đo về quy mô hoạt động của thị trường.

Liquidity_Tier (Mức thanh khoản): Cho biết mức độ dễ dàng mua/bán các tài sản (cổ phiếu) trong ngành đó. Ở đây, cả hai ngành đều được xếp hạng “Thanh khoản thấp,” nghĩa là việc giao dịch có thể khó khăn hơn, ít sôi động hơn so với các ngành khác.

Ý nghĩa Kinh tế

Sự Tăng Trưởng Vượt Trội của Ngành May Mặc:

Nhìn vào cột “gia_tri”, có thể thấy rõ ràng ngành may mặc đã trải qua một giai đoạn tăng trưởng ấn tượng từ năm 2009 đến 2021, đạt đỉnh vào năm 2021 (137.65).

Sự tăng trưởng này mạnh mẽ đến mức vào năm 2020 và 2021, mức giá của ngành được nâng từ “Giá thấp” lên “Giá trung bình”. Điều này cho thấy các nhà đầu tư đã nhận ra tiềm năng và định giá lại ngành này ở một mức cao hơn.

Sự Biến Động của Ngành Ô tô:

Ngành ô tô cũng có sự tăng trưởng nhưng không ổn định và mạnh mẽ bằng ngành may mặc. “Giá trị” của ngành này dao động nhiều hơn và luôn được giữ ở mức “Giá thấp”.

Điều này cho thấy ngành ô tô có thể phải đối mặt với nhiều thách thức hơn, có tính chu kỳ cao hơn, hoặc không được các nhà đầu tư ưa chuộng bằng ngành may mặc trong giai đoạn này.

Ảnh Hưởng của Khủng Hoảng Kinh Tế 2008:

Dữ liệu cho thấy “giá trị” của ngành may mặc đã giảm vào năm 2009 (từ 23.02 xuống 17.56), đây có thể là tác động của cuộc khủng hoảng tài chính toàn cầu năm 2008. Tuy nhiên, ngành này đã phục hồi rất nhanh chóng sau đó.

Tính Thanh Khoản Thấp:

Một điểm chung quan trọng là cả hai ngành đều có “Thanh khoản thấp”. Về mặt kinh tế, điều này có nghĩa là các cổ phiếu trong hai ngành này có thể không phải là lựa chọn hàng đầu cho các nhà đầu tư lướt sóng, ngắn hạn. Nó phù hợp hơn với các nhà đầu tư dài hạn, những người ít quan tâm đến việc mua bán liên tục hàng ngày.

=> Cho thấy trong giai đoạn 2006-2025, ngành may mặc có hiệu suất và sự tăng trưởng vượt trội so với ngành ô tô. Ngành may mặc đã thu hút được sự chú ý của thị trường và được định giá cao hơn, đặc biệt trong những năm gần đây. Ngược lại, ngành ô tô tỏ ra kém ổn định hơn và luôn được coi là một lựa chọn đầu tư “giá thấp”. Tuy nhiên, cả hai ngành đều có chung đặc điểm là thanh khoản thấp, cho thấy chúng có thể không phải là thị trường sôi động nhất.

11.9 2.11.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

pt10 <- d %>%
  filter(Dividends > 0) %>%
  mutate(
    Date = as.Date(Date),              
    Year = year(Date) 
  ) %>%
  group_by(Year, Industry_Tag, Country) %>%
  summarise(
    gia_tri = mean(Close, na.rm = TRUE),    
    khoi_luong = mean(Volume, na.rm = TRUE),  
    mean_dividends = mean(Dividends, na.rm = TRUE), 
    .groups = "drop"
  ) %>%
  arrange(Year, Country, Industry_Tag)

pt10 <- pt10 %>%
  mutate(
    Price_Tier = case_when(
      gia_tri < 100 ~ "Giá thấp",
      gia_tri >= 100 & gia_tri < 300 ~ "Giá trung bình",
      gia_tri >= 300 ~ "Giá cao",
      TRUE ~ NA_character_
    ),
    Liquidity_Tier = case_when(
      khoi_luong < 3000000 ~ "Thanh khoản thấp",
      khoi_luong >= 3000000 & khoi_luong < 10000000 ~ "Thanh khoản trung bình",
      khoi_luong >= 10000000 ~ "Thanh khoản cao",
      TRUE ~ NA_character_
    )
  ) %>%
  select(Year, Industry_Tag, Country,
         gia_tri, Price_Tier,
         khoi_luong, Liquidity_Tier,
         mean_dividends)

show(pt10)
## # A tibble: 490 × 8
##     Year Industry_Tag    Country    gia_tri Price_Tier khoi_luong Liquidity_Tier
##    <dbl> <chr>           <chr>        <dbl> <chr>           <dbl> <chr>         
##  1  2000 automotive      japan        39.7  Giá thấp       60900  Thanh khoản t…
##  2  2000 consumer goods  netherlan…    7.33 Giá thấp      265410  Thanh khoản t…
##  3  2000 technology      netherlan…   22.8  Giá thấp     3266400  Thanh khoản t…
##  4  2000 apparel         usa           3.94 Giá thấp    13033600  Thanh khoản c…
##  5  2000 aviation        usa          13.5  Giá thấp     2232488. Thanh khoản t…
##  6  2000 consumer goods  usa          19.3  Giá thấp     6562700  Thanh khoản t…
##  7  2000 entertainment   usa          24.5  Giá thấp     5313431  Thanh khoản t…
##  8  2000 finance         usa          29.2  Giá thấp     6722099. Thanh khoản t…
##  9  2000 food            usa          18.6  Giá thấp     4603700  Thanh khoản t…
## 10  2000 food & beverage usa          14.5  Giá thấp     5307050  Thanh khoản t…
## # ℹ 480 more rows
## # ℹ 1 more variable: mean_dividends <dbl>

Dữ liệu này phân tích và so sánh các ngành công nghiệp ở nhiều quốc gia khác nhau (chủ yếu là Mỹ, ngoài ra có Hà Lan và Nhật Bản) trong giai đoạn 2000-2002.

Các cột đầu tiên (Năm, Ngành, Quốc gia): Cho biết dữ liệu thuộc về ngành nào, ở đâu và vào thời điểm nào.

Cột thứ tư (ví dụ: 7.329102): Đây có thể là một chỉ số hiệu suất kinh tế, chẳng hạn như tỷ suất lợi nhuận, tốc độ tăng trưởng, hoặc một chỉ số định giá như P/E (giá trên thu nhập).

Cột “Giá thấp”: Cho thấy các công ty hoặc tài sản trong nhóm này đang được định giá ở mức thấp tại thời điểm đó.

Cột thứ sáu (số lớn, ví dụ: 265410.00): Con số này có thể đại diện cho quy mô, chẳng hạn như giá trị vốn hóa thị trường hoặc khối lượng giao dịch trung bình.

Cột “Thanh khoản”: Đây là một chỉ số quan trọng cho thấy mức độ dễ dàng mua hoặc bán cổ phiếu của các công ty trong ngành đó trên thị trường.

Thanh khoản cao: Rất dễ mua bán, có nhiều nhà đầu tư quan tâm (ví dụ: ngành may mặc, công nghệ ở Mỹ).

Thanh khoản trung bình: Mua bán tương đối dễ dàng.

Thanh khoản thấp: Khó mua bán hơn, có thể do ít nhà đầu tư quan tâm hoặc quy mô công ty nhỏ hơn (ví dụ: hàng không, khách sạn ở Mỹ).

Ý nghĩa kinh tế: Về cơ bản, bảng dữ liệu này là một “bức tranh” về sức khỏe và sự hấp dẫn đầu tư của các ngành kinh tế khác nhau vào đầu những năm 2000. Nó cho phép các nhà phân tích so sánh các ngành để xem ngành nào có hiệu suất tốt, được định giá thấp và có tính thanh khoản cao, từ đó đưa ra quyết định đầu tư. Giai đoạn 2000-2002 cũng là thời điểm sau bong bóng dot-com, vì vậy dữ liệu này có thể phản ánh sự thay đổi trong tâm lý của nhà đầu tư đối với các ngành, đặc biệt là ngành công nghệ.

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

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

12.1.1 3.1.1.Lập bảng thống kê mô tả theo volume 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.

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)  

print(thong_ke_mo_ta)
## # A tibble: 26 × 8
##     Year so_giao_dich gia_tri_trung_binh gia_tri_trung_vi do_lech_chuan
##    <dbl>        <int>              <dbl>            <dbl>         <dbl>
##  1  2000         8568               18.5             16.9          14.1
##  2  2001         8432               16.4             16.3          10.8
##  3  2002         8722               15.3             13.9          11.1
##  4  2003         8820               15.5             13.8          12.1
##  5  2004         9048               19.2             16.0          15.1
##  6  2005         9324               21.2             17.4          16.6
##  7  2006        10283               24.5             20.1          19.7
##  8  2007        10710               28.4             22.8          22.6
##  9  2008        11079               23.5             18.9          19.0
## 10  2009        11311               20.3             15.6          16.6
## # ℹ 16 more rows
## # ℹ 3 more variables: gia_tri_nho_nhat <dbl>, gia_tri_lon_nhat <dbl>,
## #   tong_gia_tri <dbl>
  1. Nhận diện Xu hướng thị trường dài hạn:
    • Nhìn vào cột gia_tri_trung_binh, ta thấy giá cổ phiếu có xu hướng tăng trưởng rõ rệt qua các năm, từ ~18.5 (năm 2000) lên đến ~181 (năm 2024). Điều này cho thấy một xu hướng tăng trưởng (bull market) dài hạn của các cổ phiếu trong bộ dữ liệu này.
  2. Đánh giá Mức độ Rủi ro/Biến động (Volatility):
    • Cột do_lech_chuan (độ lệch chuẩn) chính là thước đo rủi ro. Ta thấy con số này tăng mạnh theo thời gian, từ ~14 (năm 2000) lên đến ~277 (năm 2024). Điều này có nghĩa là thị trường ngày càng trở nên biến động mạnh hơn, biên độ dao động giá trong năm ngày càng lớn.
    • Sự tăng đột biến của do_lech_chuan ở một số năm (ví dụ, 2008-2009, 2020) có thể là dấu hiệu của các cuộc khủng hoảng kinh tế (khủng hoảng tài chính 2008, đại dịch COVID-19).
  3. Xác định các Chu kỳ Kinh tế:
    • Quan sát sự thay đổi của gia_tri_trung_binh, ta có thể thấy các giai đoạn thị trường đi xuống (bear market) hoặc đi ngang. Ví dụ, từ năm 2000 đến 2003, giá trung bình giảm, và năm 2008 giá trung bình cũng giảm mạnh so với 2007. Đây là các dấu hiệu của suy thoái kinh tế.
  4. Cung cấp Bối cảnh cho Quyết định Đầu tư:
    • Bảng thống kê này cho thấy cái nhìn tổng quan về “sức khỏe” của thị trường qua từng năm. Một nhà đầu tư có thể thấy rằng mặc dù thị trường biến động mạnh, nhưng xu hướng dài hạn vẫn là tăng trưởng, từ đó củng cố chiến lược đầu tư dài hạn.

12.1.1.1 Biểu đồ 1.Vẽ biểu đồ boxplot theo volume

ggplot(d, aes(y = Volume)) + # Khởi tạo biểu đồ
  geom_boxplot(fill = "skyblue", color = "black") + # Vẽ hình dạng biểu đồ
  labs(     # Thêm nhãn và tiêu đề
    title = "Biểu đồ Boxplot của Khối lượng Giao dịch (Volume)",
    y = "Khối lượng"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_blank(), 
        axis.ticks.x = element_blank()) # tùy chỉnh chi tiết giao diện

Thị trường hoạt động theo sự kiện (The Market is Event-Driven).

  1. Những ngày “Bình thường” (Phần hộp bị ép chặt): Đây là những ngày không có tin tức gì lớn. Hoạt động giao dịch chỉ ở mức duy trì, phản ánh tâm lý ổn định của thị trường.

  2. Những ngày “Bùng nổ” (Các chấm đen - Outliers): Đây mới là những ngày quan trọng và đáng chú ý nhất. Các chấm đen này không phải là lỗi dữ liệu, mà chúng đại diện cho phản ứng của thị trường trước các sự kiện kinh tế, tài chính quan trọng. Mỗi chấm đen có thể là một ngày: Công ty công bố báo cáo tài chính: Kết quả tốt hoặc xấu bất ngờ sẽ gây ra làn sóng mua hoặc bán tháo. Tin tức vĩ mô được công bố: Thay đổi lãi suất, số liệu lạm phát, chính sách mới của chính phủ. Sự kiện đặc thù của công ty: Ra mắt sản phẩm đột phá, sáp nhập và mua lại (M&A), vướng vào bê bối pháp lý. Khủng hoảng hoặc hoảng loạn thị trường: Ví dụ như các ngày trong cuộc khủng hoảng tài chính 2008.

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

descriptive_stats <- d %>% mutate( Year = year(Date) ) %>% # Tạo cột mới
  group_by(Industry_Tag, Year) %>% # Gom nhóm dữ liệu
  summarise(  # bắt đầu tính toán thống kê
    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'
  )
print(descriptive_stats)
## # A tibble: 500 × 5
##    Industry_Tag  Year cv_volume skewness_volume kurtosis_volume
##    <chr>        <dbl>     <dbl>           <dbl>           <dbl>
##  1 apparel       2000      81.2            3.67           26.8 
##  2 apparel       2001      86.3            5.14           46.4 
##  3 apparel       2002      73.1            2.10           11.3 
##  4 apparel       2003      79.4            3.27           21.9 
##  5 apparel       2004      63.5            2.45           13.7 
##  6 apparel       2005      88.7            3.88           27.9 
##  7 apparel       2006     114.             2.94           19.5 
##  8 apparel       2007     116.             1.74            8.25
##  9 apparel       2008     115.             1.82            8.78
## 10 apparel       2009     110.             2.10           13.1 
## # ℹ 490 more rows
  1. cv_volume (Hệ số biến thiên - Coefficient of Variation): Con số này đo lường “Mức độ Bất ổn” hay “Độ Bấp bênh” của khối lượng giao dịch.
    • CV cao: Khối lượng giao dịch rất thất thường. Có những ngày giao dịch rất sôi động, nhưng cũng có những ngày rất ảm đạm. Điều này cho thấy ngành này rất nhạy cảm với tin tức và sự kiện.
    • CV thấp: Khối lượng giao dịch ổn định và dễ dự đoán hơn qua các ngày.

Như năm 2010, ngành automotive có CV = 489.8, một con số khổng lồ. Trong khi đó ngành apparel chỉ là 105.3. Và điều đó cho thấy năm 2010, thị trường ô tô cực kỳ bất ổn (có thể do hậu quả của khủng hoảng tài chính 2008, các gói cứu trợ, sự phá sản của các hãng xe). Dòng tiền vào ngành này rất khó lường, trong khi ngành may mặc ổn định hơn nhiều.

  1. skewness_volume (Độ lệch): Cho sự phân bổ khối lượng giao dịch có đối xứng hay không.Nó đo lường “Thiên hướng Bùng nổ”.
    • Skewness > 0 (Lệch phải): Đây là trường hợp phổ biến nhất trên thị trường. Hầu hết các ngày có khối lượng giao dịch thấp (bình thường), nhưng thỉnh thoảng có một vài ngày khối lượng giao dịch cao đột biến, “bùng nổ” một cách bất thường.**

    • Giá trị càng cao: Sự bùng nổ trong những ngày đặc biệt đó càng mạnh mẽ so với những ngày bình thường.

    • Tất cả các giá trị skewness đều dương và lớn hơn 1, khẳng định rằng tất cả các ngành đều hoạt động theo mô hình “bùng nổ theo sự kiện”.

    • Năm 2010, ngành automotiveskewness = 11.95, cho thấy những ngày giao dịch đột biến của ngành này có khối lượng cực kỳ lớn, tạo ra một “cái đuôi” rất dài về phía bên phải của biểu đồ phân phối.

  2. kurtosis_volume (Độ nhọn): Con số này đo lường Mức độ Cực đoan”** của các sự kiện. Trong tài chính, nó là thước đo cho “Rủi ro Đuôi Dày” (Fat-Tail Risk).
    • Kurtosis cao (thường > 3): Điều này có nghĩa là xác suất xảy ra những sự kiện cực đoan (khối lượng giao dịch tăng vọt hoặc giảm sâu đột ngột) là cao hơn so với một phân phối chuẩn thông thường. Đây là những ngày “thiên nga đen”, những cú sốc thị trường.
    • Giá trị càng cao: Rủi ro về những cú sốc thanh khoản càng lớn.
    • Năm 2010, ngành automotivekurtosis = 184.44.Cho thấy năm đó ngành ô tô không chỉ có những ngày giao dịch bùng nổ, mà mức độ bùng nổ đó còn mang tính cực đoan, là những cú sốc thực sự trên thị trường. Bất kỳ ai giao dịch trong ngành này vào năm đó đều phải đối mặt với rủi ro rất lớn từ những sự kiện bất ngờ.

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

p <- ggplot(data = descriptive_stats, aes(x = Industry_Tag, y = skewness_volume, fill = Industry_Tag)) + # Khởi tạo và lưu biểu đồ
  geom_bar(stat = "identity") + # vẽ biểu đồ hình dạng cột
  # Thêm đường tham chiếu tại y = 0 để dễ so sánh
  geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
  labs(
    title = "Độ Xiên (Skewness) của Khối Lượng Giao Dịch (Volume) theo Ngành",  # đặt tiêu đề
    x = "Ngành",
    y = "Độ Xiên"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "none") 
print(p)

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.

12.1.3.1 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") + #vẽ biểu đồ dạng cột
  # Thêm đường tham chiếu tại y = 0 (tương ứng độ nhọn của phân phối chuẩn)
  geom_hline(yintercept = 0, linetype = "dashed", color = "blue") +
  labs(  #Đặt tiêu đề và nhãn
    title = "Độ Nhọn (Kurtosis) của Khối Lượng Giao Dịch (Volume) 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) 

Biểu đồ này trả lời cho câu hỏi: “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.

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

#Tính toán và lưu kết quả
correlation_result <- cor(d$Volume, d$Close, use = "complete.obs")
#In kết quả 
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

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 đó.

12.1.5 3.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) %>%  #Tạo cột biến mới
  group_by(Country, Industry_Tag) %>%      #Gom nhóm dữ liệu       
  summarise(
    tong_gia_tri = sum(gia_tri_giao_dich, na.rm = TRUE),
    .groups = 'drop'  
  ) %>%
  arrange(Country, Industry_Tag)  #Sắp xếp lại bảng kết quả 
print(gia_tri_giao_dich)
## # A tibble: 32 × 3
##    Country     Industry_Tag   tong_gia_tri
##    <chr>       <chr>                 <dbl>
##  1 canada      e-commerce          2.07e12
##  2 france      gaming              2.78e 9
##  3 france      luxury goods        5.12e10
##  4 germany     apparel             2.16e10
##  5 germany     automotive          7.76e 9
##  6 japan       automotive          3.38e11
##  7 japan       gaming              6.76e10
##  8 netherlands consumer goods      2.94e11
##  9 netherlands technology          1.66e11
## 10 switzerland technology          1.18e11
## # ℹ 22 more rows

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.

12.1.5.1 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)) + # bắt đầu vẽ biểu đồ với dl mới tạo
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  facet_wrap(~ Country) + 
  labs(
    title = "Tỷ Trọng Giá Trị Giao Dịch theo Ngành trong từng Quốc Gia",
    fill = "Ngành", 
    x = NULL,    # xóa nhãn trục x, y
    y = NULL
  ) +
  theme_void() + #áp dụng giao diện trống
  theme(legend.position = "bottom") #Di chuyển phần chú thích xuống

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.

12.1.6 3.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 # Chuẩn bị dl ban đầu
d_ket_qua <- d %>%  #chuổi xử lý dl và tính toán
  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) 
print(d_ket_qua)
## # A tibble: 23 × 4
##    Industry_Tag       tong_gia_tri_giao_dich  tong_volume ti_le
##    <chr>                               <dbl>        <dbl> <dbl>
##  1 apparel                           2.88e12 101525538443  28.3
##  2 automotive                        3.78e13 379492845589  99.6
##  3 aviation                          2.65e12  97691366604  27.1
##  4 consumer goods                    5.24e12  94364271605  55.5
##  5 cryptocurrency                    1.93e12  12309078642 157. 
##  6 e-commerce                        2.43e13 795691869144  30.6
##  7 entertainment                     1.19e13 151590648365  78.5
##  8 finance                           1.65e13 277224398917  59.7
##  9 financial services                2.11e12  24760452622  85.2
## 10 fitness                           6.58e11  20087881969  32.7
## # ℹ 13 more rows

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.

Insight 1: 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.

Insight 2: 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”.

12.1.6.1 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) + # Vẽ biểu đồ cột và tô màu theo ngành
  coord_flip() + # Lật các trục để có biểu đồ cột ngang
  geom_text(aes(label = round(ti_le, 2)), hjust = -0.2) + # Thêm nhãn giá trị lên mỗi cột
  labs(
    title = "Giá Trung Bình Cân Bằng Khối Lượng (VWAP) theo Ngành",
    x = "Ngành Công Nghiệp",
    y = "VWAP (Giá trị / Khối lượng)"
  ) +
  theme_minimal()

Biểu đồ cho thấy sự phân hóa rất rõ rệt về mặt bằng giá giao dịch giữa các ngành:

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.

12.1.7 3.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 %>%  # bắt đầu với bộ dữ liệu 'd'
  group_by(Ticker) %>%   # nhóm các còng dữ liệu (Ticker)
  summarise(Tong_Volume = sum(Volume, na.rm = TRUE)) # tính tổng khối lượng gioa dịch
so_sticker_thoaman_dieu_kien <- tong_volume_theo_sticker %>%
  filter(Tong_Volume > 10000000000) %>% #Lọc ra mã có tổng >10 tỷ
  nrow()
tong_so_sticker_duy_nhat <- n_distinct(d$Ticker) # đếm tổng mã trong bộ dữ liệu 'd'
  # Tính tỷ lệ: (Số mã thỏa mãn / Tổng số mã) * 100
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
}
# in kết quả
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%

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.

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

bieu_do_data <- d %>%
  group_by(Ticker) %>%
  #tính tổng khối lượng gioa dịch cho mỗi mã
  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) %>%
  # Tạo cột text chứa tỷ lệ phần trăm
  mutate(label_text = paste0(round(n / sum(n) * 100, 2), "%"))
  # Khởi tạo biểu đồ
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()

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ư.


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

so_ma_thoaman <- d %>%
  # Lọc dữ liệu theo điều kiện
  filter(Dividends > 0 & Volume > 50000000) %>%
  summarise(So_Luong_Ma = n_distinct(Ticker))

print(so_ma_thoaman)
##   So_Luong_Ma
## 1           8

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).

12.1.8.1 4.7.2 vẽ biểu đồ

tong_so_ma <- d %>%
 # Đếm số mã (Ticker) duy nhất và lưu vào cột 'Tong_So_Ma'
summarise(Tong_So_Ma = n_distinct(Ticker)) %>%
 # Rút giá trị duy nhất đó ra khỏi bảng dữ liệu để thành một con số
pull(Tong_So_Ma)
 # Lấy số mã thỏa mãn (tính ở code trước) chia cho tổng số mã, rồi nhân 100
                                                          # `so_ma_thoaman$So_Luong_Ma` chính là con số 8 đã tính được ở bước trước.
ty_le <- so_ma_thoaman$So_Luong_Ma / tong_so_ma * 100
#TẠO BẢNG DỮ LIỆU (DATA FRAME) ĐỂ VẼ BIỂU ĐỒ 
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
)
 # Khởi tạo biểu đồ ggplot
ggplot(data, aes(x = "", y = value, fill = label)) +
# Vẽ một biểu đồ cột (sẽ được uốn thành hình tròn)
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = sprintf("%.1f%%", percentage)), position = position_stack(vjust = 0.5)) +   # Thêm nhãn (text) vào biểu đồ
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) + # Đặt tên biểu đồ và ẩn đi các trục
theme_void()

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.

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

tong_khoi_luong_cong_nghe <- d %>%
 # Lọc và chỉ giữ lại những dòng có giá trị trong cột 'Industry_Tag'
filter(Industry_Tag == "technology") %>%
# Từ những dòng đã được lọc ở trên, tính tổng (sum) tất cả các giá trị
summarise(Tong_Khoi_Luong = sum(Volume))

print(tong_khoi_luong_cong_nghe)
##   Tong_Khoi_Luong
## 1    4.522656e+12

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.

12.1.9.1 Biểu đồ 6.vẽ biểu đồ

# Tạo một bảng dữ liệu mới tên là 'bieu_do_data'
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
  )
)
# Khởi tạo biểu đồ:
ggplot(bieu_do_data, aes(x = "", y = Khoi_Luong, fill = Nhom)) +
  geom_col(width = 1) +
  coord_polar("y", start = 0) +
  theme_void() +
  # Thêm tiêu đề cho biểu đồ
  labs(title = "Tỷ lệ Khối lượng Giao dịch Ngành Công nghệ", fill = "Nhóm Ngành")

  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ệ.

12.1.10 3.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 %>%
   # Lọc và chỉ giữ lại những dòng có giá trị trong cột 'Industry_Tag'
  filter(Industry_Tag == "apparel") %>% 
  summarise(Tong_Khoi_Luong = sum(Volume, na.rm = TRUE))

print(tong_khoi_luong_apparel)
##   Tong_Khoi_Luong
## 1    101525538443

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ư.

12.1.10.1 Biểu đồ 7.Vẽ biểu đồ

# Tạo một bảng dữ liệu mới tên là 'bieu_do_data'
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
  )
)
#VẼ BIỂU ĐỒ TRÒN BẰNG GGPLOT2
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")

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á.

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

#LỌC DỮ LIỆU THEO NGÀNH
tong_khoi_luong_retail <- d %>%
  filter(Industry_Tag == "retail") %>% 
  summarise(Tong_Khoi_Luong = sum(Volume, na.rm = TRUE))

print(tong_khoi_luong_retail)
##   Tong_Khoi_Luong
## 1     1.32745e+11

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.

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

# --- BƯỚC 1: TẠO DATA FRAME ĐỂ VẼ BIỂU ĐỒ ---
bieu_do_data <- data.frame(                                 # Tạo một bảng dữ liệu mới tên là 'bieu_do_data'
  Nhom = c("Bán lẻ", "Các ngành khác"),                     # Cột 1 'Nhom': Tạo hai dòng với nhãn là "Bán lẻ" và "Các ngành khác".
                                                            # Đây sẽ là tên hiển thị trong phần chú thích (legend).
  khoi_Luong = c(                                           # Cột 2 'khoi_Luong': Chứa giá trị khối lượng tương ứng cho mỗi nhóm.
    tong_khoi_luong_retail$Tong_Khoi_Luong,                 #  - Giá trị đầu tiên: Lấy tổng khối lượng ngành bán lẻ đã tính ở bước trước.
    sum(d$Volume, na.rm = TRUE) -                           #  - Giá trị thứ hai: Lấy TỔNG KHỐI LƯỢNG của toàn bộ thị trường
      tong_khoi_luong_retail$Tong_Khoi_Luong                #    trừ đi khối lượng của ngành bán lẻ để ra khối lượng của 'Các ngành khác'.
  )
)

# --- BƯỚC 2: VẼ BIỂU ĐỒ TRÒN BẰNG GGPLOT2 ---
ggplot(bieu_do_data, aes(x = "", y = khoi_Luong, fill = Nhom)) + # Khởi tạo biểu đồ:
                                                               #  - x = "": Đặt trục x rỗng để tạo một cột duy nhất (cần thiết cho biểu đồ tròn).
                                                               #  - y = khoi_Luong: Độ lớn của mỗi phần bánh sẽ dựa trên giá trị cột 'khoi_Luong'.
                                                               #  - fill = Nhom: Tô màu cho các phần bánh dựa trên cột 'Nhom'.
  geom_col(width = 1) +                                        # Vẽ biểu đồ cột xếp chồng (sẽ được uốn cong thành hình tròn).
  coord_polar("y", start = 0) +                                # Lệnh "thần kỳ" biến biểu đồ cột thành biểu đồ tròn bằng cách uốn cong trục y.
  theme_void() +                                               # Xóa toàn bộ nền, trục, lưới... để biểu đồ trông sạch sẽ và tối giản.
  labs(title = "Tỷ lệ Khối lượng Giao dịch Ngành Bán lẻ",      # Thêm tiêu đề cho biểu đồ.
       fill = "Nhóm Ngành")                                    # Đổi tên tiêu đề của phần chú thích (legend) thành "Nhóm Ngành".

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ẽ.

12.1.12 3.1.12.Đếm số mã cổ phiếu bắt đầu từ chữ f

# Gán kết quả của chuỗi lệnh vào biến 'danh_sach_ma'
danh_sach_ma <- d %>%                                      # Bắt đầu với bộ dữ liệu gốc 'd'

  # BƯỚC 1: LỌC DỮ LIỆU THEO CÁC ĐIỀU KIỆN KÉP
  filter(startsWith(tolower(Brand_Name), "f") & Volume > 5000000) %>%
  # Lọc và chỉ giữ lại những dòng thỏa mãn CẢ HAI điều kiện:
  #   1. startsWith(tolower(Brand_Name), "f"):
  #      - tolower(Brand_Name): Chuyển tên thương hiệu về chữ thường (để không phân biệt hoa/thường, vd: "Ford" và "ford" đều được).
  #      - startsWith(..., "f"): Kiểm tra xem tên đã chuyển sang chữ thường có bắt đầu bằng ký tự "f" hay không.
  #   2. & : Toán tử "VÀ".
  #   3. Volume > 5000000: Khối lượng giao dịch trong phiên đó phải lớn hơn 5 triệu.

  # BƯỚC 2: LOẠI BỎ CÁC DÒNG TRÙNG LẶP
  distinct(Ticker, Brand_Name) # Lấy ra các cặp giá trị (Ticker, Brand_Name) duy nhất.
                               # Điều này đảm bảo mỗi công ty chỉ xuất hiện một lần trong kết quả,
                               # ngay cả khi nó thỏa mãn điều kiện lọc ở nhiều ngày khác nhau.

# In kết quả (là một bảng dữ liệu chứa danh sách các mã thỏa mãn) ra màn hình
print(danh_sach_ma)
##   Ticker  Brand_Name
## 1     FL foot locker
## 2    FDX       fedex

12.1.12.1 Biểu đô 9.vẽ biểu đồ

so_ma_dat_yeu_cau <- nrow(danh_sach_ma)
tong_so_ma_chu_f <- danh_sach_ma$So_Luong

pie_chart_data <- data.frame(
  Phan_Loai = c("Đạt yêu cầu (Volume > 50M)", "Không đạt yêu cầu"),
  So_Luong = c(
    so_ma_dat_yeu_cau,
    tong_so_ma_chu_f - so_ma_dat_yeu_cau # Phần còn lại (3 - 1 = 2)
  )
) %>%
  mutate(label_text = paste0(round(So_Luong / sum(So_Luong) * 100, 1), "%"))

ggplot(pie_chart_data, aes(x = "", y = So_Luong, fill = Phan_Loai)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  geom_text(aes(label = label_text), 
            position = position_stack(vjust = 0.5), 
            color = "white", size = 5) +
  labs(
    title = "Tỷ lệ Mã cổ phiếu bắt đầu bằng 'F' thỏa mãn điều kiện Volume",
    fill = "Phân loại"
  ) +
  theme_void()

12.1.13 3.1.13.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' 
  )
print(monthly_2024_volume) 
## # A tibble: 12 × 2
##    YearMonth Total_Volume
##    <chr>            <dbl>
##  1 2024-01    23406952267
##  2 2024-02    23749309220
##  3 2024-03    24285768920
##  4 2024-04    22748813500
##  5 2024-05    22310972400
##  6 2024-06    21735549178
##  7 2024-07    23548064723
##  8 2024-08    25164596411
##  9 2024-09    18714158654
## 10 2024-10    18800387895
## 11 2024-11    20706258213
## 12 2024-12    19793773200

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.

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

ggplot(monthly_2024_volume,                  # Bắt đầu vẽ biểu đồ, sử dụng dữ liệu từ 'monthly_2024_volume'.
       aes(x = YearMonth, y = Total_Volume)) + # Định nghĩa các trục:
                                              #  - Trục X (hoành) là cột 'YearMonth'.
                                              #  - Trục Y (tung) là cột 'Total_Volume'.

  geom_bar(stat = "identity", fill = "skyblue") + # Vẽ biểu đồ cột (bar chart):
                                                  #  - stat = "identity": Chiều cao cột lấy trực tiếp từ giá trị của trục Y.
                                                  #  - fill = "skyblue": Tô màu xanh da trời cho các cột.
  
  geom_text(aes(label = format(Total_Volume, big.mark = ",", scientific = FALSE)), # Thêm nhãn số liệu lên trên mỗi cột.
                                                  #  - label = ...: Nội dung nhãn là giá trị 'Total_Volume' đã được định dạng.
                                                  #  - format(...): Định dạng số cho dễ đọc.
                                                  #  - big.mark = ",": Thêm dấu phẩy ngăn cách hàng nghìn.
                                                  #  - scientific = FALSE: Không dùng ký hiệu khoa học (vd: 2.5e+10).
            vjust = -0.5,                         #  - vjust = -0.5: Đẩy nhãn số liệu lên phía trên đỉnh cột một chút.
            size = 4) +                           #  - size = 4: Đặt kích thước chữ của nhãn.
  
  scale_y_continuous(labels = comma) +        # Định dạng lại các nhãn số trên trục Y để có dấu phẩy ngăn cách hàng nghìn.
  
  labs(                                       # Thêm tiêu đề và tên cho các trục.
    title = "Tổng Khối lượng giao dịch Toàn bộ theo Tháng (Năm 2024)", # Tiêu đề chính của biểu đồ.
    x = "Tháng (Year-Month)",                 # Tên trục X.
    y = "Tổng Khối lượng giao dịch (Total Volume)" # Tên trục Y.
  ) +
  
  theme_minimal() +                           # Áp dụng giao diện (theme) tối giản, nền trắng cho biểu đồ.
  
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Tùy chỉnh chi tiết giao diện:

                                                  #  - axis.text.x: Nhắm vào các nhãn trên trục X.
                                                  #  - angle = 45: Xoay các nhãn 45 độ để không bị chồng lên nhau.
                                                  #  - hjust = 1: Căn lề cho các nhãn đã xoay.
  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.

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

monthly_usa_2024_volume <- d %>%     # Bắt đầu chuỗi xử lý từ bảng dữ liệu 'd', 
  mutate(                           # và gán kết quả cuối cùng cho biến 'monthly_usa_2024_volume'.
    Date = ymd_hms(Date),           # Tạo ra các cột mới để xử lý dữ liệu thời gian.
    Year = year(Date),              #   - Chuyển cột 'Date' sang định dạng ngày-giờ chuẩn.
    YearMonth = format(Date, "%Y-%m") #   - Trích xuất năm từ cột 'Date' vào cột mới 'Year'.
  ) %>%
  filter(        # Lọc để chỉ giữ lại các dòng dữ liệu thỏa mãn điều kiện.
    Year == 2024,                  
    tolower(Country) == "usa"       #   - Điều kiện 1: Chỉ lấy dữ liệu của năm 2024.
  ) %>%                             #     (tolower() để đảm bảo bắt được cả "USA", "Usa", "usa",...)
  group_by(YearMonth) %>%
  summarise(
    Total_Volume = sum(Volume, na.rm = TRUE),
    .groups = 'drop' 
  )
print(monthly_usa_2024_volume)     # In kết quả (bảng tổng hợp khối lượng theo tháng của Mỹ) ra màn hình.
## # A tibble: 12 × 2
##    YearMonth Total_Volume
##    <chr>            <dbl>
##  1 2024-01    23062439767
##  2 2024-02    23331852720
##  3 2024-03    24021621120
##  4 2024-04    22402721700
##  5 2024-05    21826184900
##  6 2024-06    21395981180
##  7 2024-07    23165678147
##  8 2024-08    24692219213
##  9 2024-09    18452661015
## 10 2024-10    18524808168
## 11 2024-11    20255720810
## 12 2024-12    19422079602
  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.

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

# Bắt đầu một khối lệnh R.
ggplot(monthly_usa_2024_volume, # Bắt đầu vẽ biểu đồ, sử dụng dữ liệu từ 'monthly_usa_2024_volume'.
       aes(x = YearMonth,            
           y = Total_Volume)) +      # Định nghĩa các trục:
                                     #  - Trục X (hoành) là cột 'YearMonth'.
                                     #  - Trục Y (tung) là cột 'Total_volume'.
  geom_bar(stat = "identity", fill = "lightgreen") +   # Vẽ biểu đồ cột (bar chart):
                                                  #  - stat = "identity": Chiều cao cột lấy trực tiếp từ giá trị của trục Y.
                                                  #  - fill = "lightgreen": Tô màu xanh lá cây nhạt cho các cột.
  
  geom_text(aes(label = format(Total_Volume, big.mark = ",", scientific = FALSE)),# Thêm nhãn số liệu lên trên mỗi cột.
                                                  #  - label = ...: Nội dung nhãn là giá trị 'Total_volume' đã được định dạng.
                                                  #  - format(...): Định dạng số cho dễ đọc.
                                                  #  - big.mark = ",": Thêm dấu phẩy ngăn cách hàng nghìn.
            vjust = -0.5,                         #  - vjust = -0.5: Đẩy nhãn số liệu lên phía trên đỉnh cột một chút.
            size = 4) +
  scale_y_continuous(labels = comma) +          # Định dạng lại các nhãn số trên trục Y để có dấu phẩy ngăn cách hàng nghìn.
  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() +                            # Áp dụng giao diện (theme) tối giản, nền trắng cho biểu đồ.
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Tùy chỉnh chi tiết giao diện:

                                                  #  - axis.text.x: Nhắm vào các nhãn trên trục X.
                                                  #  - angle = 45: Xoay các nhãn 45 độ để không bị chồng lên nhau.
                                                  #  - hjust = 1: Căn lề cho các nhãn đã xoay.

(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).

12.1.15 3.1.15.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 %>%       # Bắt đầu chuỗi xử lý, gán kết quả cho biến mới
  mutate(
    Date = ymd_hms(Date),                    # Tạo các cột thời gian cần thiết.
    Year = year(Date),              
    YearMonth = format(Date, "%Y-%m")
  ) %>%
  filter(
    tolower(Country) == "usa",      # Lọc dữ liệu với 3 điều kiện đồng thời.
    Year == 2024,                   
    tolower(Industry_Tag) == "technology" 
  ) %>%
  group_by(YearMonth) %>%  # Gom nhóm dữ liệu theo từng tháng.
  
  summarise(      # Tóm tắt dữ liệu cho mỗi tháng.
    Total_Volume = sum(Volume, na.rm = TRUE),
    Industry_Tag = first(Industry_Tag), 
    .groups = 'drop' 
  )
print(tech_usa_2024_monthly_volume)
## # A tibble: 12 × 3
##    YearMonth Total_Volume Industry_Tag
##    <chr>            <dbl> <chr>       
##  1 2024-01    15157313800 technology  
##  2 2024-02    15979570300 technology  
##  3 2024-03    17285194500 technology  
##  4 2024-04    14789834300 technology  
##  5 2024-05    14469025100 technology  
##  6 2024-06    14208761596 technology  
##  7 2024-07    12844111657 technology  
##  8 2024-08    15245326678 technology  
##  9 2024-09    11366656245 technology  
## 10 2024-10    10640904721 technology  
## 11 2024-11    10503536908 technology  
## 12 2024-12    10756604259 technology

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.

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

ggplot(tech_usa_2024_monthly_volume,    # Bắt đầu vẽ biểu đồ, sử dụng dữ liệu của ngành công nghệ Mỹ.
       aes(x = YearMonth,            
           y = Total_Volume,         
           fill = YearMonth)) +      
  geom_bar(stat = "identity") +         # Vẽ biểu đồ cột, chiều cao cột lấy trực tiếp từ giá trị của trục Y.
  geom_text(aes(label = format(Total_Volume, big.mark = ",", scientific = FALSE)),  # Thêm nhãn số liệu lên trên mỗi cột
            vjust = -0.5, 
            size = 4) +
  scale_y_continuous(labels = comma) + 
  labs(                                # Thêm tiêu đề và tên cho các trục.
    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))

  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ế.

12.1.16 3.1.16.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 %>%      # Bắt đầu chuỗi xử lý từ bảng 'd', gán kết quả cho biến mới.
  mutate(                                    # Tạo các cột mới để xử lý dữ liệu thời gian.
    Date = ymd_hms(Date),           
    Year = year(Date),              
    YearMonth = format(Date, "%Y-%m")
  ) %>%
  filter(                                    # Lọc dữ liệu với 3 điều kiện đồng thời.
    tolower(Country) == "usa",      
    Year == 2024,                   
    tolower(Industry_Tag) == "retail" 
  ) %>%
  group_by(YearMonth) %>%
  summarise(                                 # Tóm tắt dữ liệu cho mỗi nhóm (mỗi tháng).
    Total_Volume = sum(Volume, na.rm = TRUE),
    Industry_Tag = first(Industry_Tag), 
    .groups = 'drop' 
  )

print(retail_usa_2024_monthly_volume)
## # A tibble: 12 × 3
##    YearMonth Total_Volume Industry_Tag
##    <chr>            <dbl> <chr>       
##  1 2024-01      279069900 retail      
##  2 2024-02      237207700 retail      
##  3 2024-03      336455500 retail      
##  4 2024-04      260210300 retail      
##  5 2024-05      286981500 retail      
##  6 2024-06      266425593 retail      
##  7 2024-07      275380362 retail      
##  8 2024-08      343078669 retail      
##  9 2024-09      247927535 retail      
## 10 2024-10      247933162 retail      
## 11 2024-11      427928597 retail      
## 12 2024-12      363925569 retail
  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ư.

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

ggplot(retail_usa_2024_monthly_volume,  # Bắt đầu vẽ biểu đồ, sử dụng dữ liệu của ngành bán lẻ Mỹ.
       aes(x = YearMonth,            
           y = Total_Volume,         
           fill = YearMonth)) +      
  geom_bar(stat = "identity") +        # Vẽ biểu đồ cột, chiều cao cột lấy trực tiếp từ giá trị của trục Y.
  geom_text(aes(label = format(Total_Volume, big.mark = ",", scientific = FALSE)),
            vjust = -0.5, 
            size = 4) +
  scale_y_continuous(labels = comma) +           # Định dạng lại các nhãn số trên trục Y để có dấu phẩy ngăn cách hàng nghìn.
  labs(
    title = "Tổng Khối lượng giao dịch Ngành BÁN LẺ (Retail, 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))

  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ễ.

12.1.17 3.1.17.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 %>%      # Bắt đầu chuỗi xử lý từ bảng 'd', gán kết quả cho biến mới.
  mutate(
    Date = ymd_hms(Date),                         # Tạo các cột mới để xử lý dữ liệu thời gian.
    Year = year(Date),              
    YearMonth = format(Date, "%Y-%m")
  ) %>%
  filter(                                       # Lọc dữ liệu với 3 điều kiện đồng thời.
    tolower(Country) == "usa",      
    Year == 2024,                   
    tolower(Industry_Tag) == "healthcare" 
  ) %>%
  group_by(YearMonth) %>%                       # Tóm tắt dữ liệu cho mỗi nhóm (mỗi tháng).
  summarise(
    Total_Volume = sum(Volume, na.rm = TRUE),
    Industry_Tag = first(Industry_Tag), 
    .groups = 'drop' 
  )
print(healthcare_usa_2024_monthly_volume)
## # A tibble: 12 × 3
##    YearMonth Total_Volume Industry_Tag
##    <chr>            <dbl> <chr>       
##  1 2024-01      138190400 healthcare  
##  2 2024-02      158288200 healthcare  
##  3 2024-03      140389700 healthcare  
##  4 2024-04      175712200 healthcare  
##  5 2024-05      174612900 healthcare  
##  6 2024-06      146566262 healthcare  
##  7 2024-07      173752660 healthcare  
##  8 2024-08      177967190 healthcare  
##  9 2024-09      124474055 healthcare  
## 10 2024-10      146082724 healthcare  
## 11 2024-11      191947045 healthcare  
## 12 2024-12      221274816 healthcare

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ủ.

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

ggplot(healthcare_usa_2024_monthly_volume, # Bắt đầu vẽ biểu đồ, sử dụng dữ liệu của ngành healthcare Mỹ
       aes(x = YearMonth,                  # Định nghĩa các trục
           y = Total_Volume,         
           fill = YearMonth)) +     
  geom_bar(stat = "identity") +            # Vẽ biểu đồ cột, chiều cao cột lấy trực tiếp từ giá trị của trục Y.  
  geom_text(aes(label = format(Total_Volume, big.mark = ",", scientific = FALSE)),    # Thêm nhãn số liệu lên trên mỗi cột.
            vjust = -0.5, 
            size = 4) +
  scale_y_continuous(labels = comma) + 
  labs(                                     # Thêm tiêu đề và tên cho các trục.
    title = "Tổng Khối lượng giao dịch Ngành CHĂM SÓC SỨC KHỎE (Healthcare, USA, 2024)", 
    x = "Tháng (Year-Month)",
    y = "Tổng Khối lượng giao dịch (Total Volume)",
    fill = "Tháng"                           #  - Đổi tên của phần chú thích (legend) thành "Tháng".
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

  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.

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

monthly_france_2024_volume <- d %>%    # Bắt đầu chuỗi xử lý từ bảng 'd', gán kết quả cho biến mới.
  mutate(                               # Tạo các cột mới để xử lý dữ liệu thời gian.
    Date = ymd_hms(Date),           
    Year = year(Date),              
    YearMonth = format(Date, "%Y-%m")
  ) %>%
  filter(                                 # Lọc dữ liệu với 2 điều kiện đồng thời.
    Year == 2024,                   
    tolower(Country) == "france"    
  ) %>%
  group_by(YearMonth) %>%                # Gom nhóm các dòng dữ liệu đã lọc theo từng tháng.
  summarise(
    Total_Volume = sum(Volume, na.rm = TRUE),  # Tính tổng khối lượng ('volume') cho mỗi tháng, bỏ qua giá trị thiếu.
    .groups = 'drop' 
  )

print(monthly_france_2024_volume)
## # A tibble: 12 × 2
##    YearMonth Total_Volume
##    <chr>            <dbl>
##  1 2024-01        5736100
##  2 2024-02        4535000
##  3 2024-03        4607000
##  4 2024-04        4299400
##  5 2024-05        4279300
##  6 2024-06        5239817
##  7 2024-07       12049117
##  8 2024-08        8008934
##  9 2024-09       15502574
## 10 2024-10       15782740
## 11 2024-11       12819859
## 12 2024-12       14366913

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ồ.

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

ggplot(monthly_france_2024_volume,   # Bắt đầu vẽ biểu đồ, sử dụng dữ liệu từ 'monthly_france_2024_volume'.
       aes(x = YearMonth,            # Định nghĩa các trục
           y = Total_Volume)) +      
  geom_bar(stat = "identity", fill = "lightblue") +    # Vẽ biểu đồ cột (bar chart)
  geom_text(aes(label = format(Total_Volume, big.mark = ",", scientific = FALSE)),       # Thêm nhãn số liệu lên trên mỗi cột.
            vjust = -0.5, 
            size = 4) +
  scale_y_continuous(labels = comma) +  # Định dạng lại các nhãn số trên trục Y để có dấu phẩy ngăn cách hàng nghìn.
  labs(
    title = "Tổng Khối lượng giao dịch CỦA PHÁP theo Tháng (Năm 2024)", # <--- CẬP NHẬT TIÊU ĐỀ
    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))   # Tùy chỉnh chi tiết giao diện:

                                                  #  - axis.text.x: Nhắm vào các nhãn trên trục X.
                                                  #  - angle = 45: Xoay các nhãn 45 độ để không bị chồng chéo.
                                                  #  - hjust = 1: Căn lề cho các nhãn đã xoay.
  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ư.

12.1.19 3.1.19.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 %>% # Bắt đầu chuỗi xử lý từ bảng 'd', gán kết quả cho biến mới.

  mutate(                      # Tạo các cột mới để xử lý dữ liệu thời gian.
    Date = ymd_hms(Date),           
    Year = year(Date),              
    YearMonth = format(Date, "%Y-%m")
  ) %>%
  filter(                       # Lọc dữ liệu với 3 điều kiện đồng thời để lấy đúng phân khúc.
    tolower(Country) == "france",   
    Year == 2024,                   
    tolower(Industry_Tag) == "gaming" 
  ) %>%
  group_by(YearMonth) %>%
  summarise(
    Total_Volume = sum(Volume, na.rm = TRUE),   #   - Tính tổng khối lượng ('volume') cho mỗi tháng, bỏ qua giá trị thiếu.
    Industry_Tag = first(Industry_Tag), 
    .groups = 'drop'                           #   - Bỏ cấu trúc gom nhóm sau khi tính toán xong.
  )

print(gaming_france_2024_monthly_volume)
## # A tibble: 12 × 3
##    YearMonth Total_Volume Industry_Tag
##    <chr>            <dbl> <chr>       
##  1 2024-01         565700 gaming      
##  2 2024-02         735800 gaming      
##  3 2024-03         764500 gaming      
##  4 2024-04         525900 gaming      
##  5 2024-05        1070400 gaming      
##  6 2024-06         400292 gaming      
##  7 2024-07        2175283 gaming      
##  8 2024-08         727946 gaming      
##  9 2024-09        6456248 gaming      
## 10 2024-10        7706362 gaming      
## 11 2024-11        3808402 gaming      
## 12 2024-12        5551588 gaming
  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.

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

ggplot(gaming_france_2024_monthly_volume, # Bắt đầu vẽ biểu đồ, sử dụng dữ liệu của ngành gaming Pháp.
       aes(x = YearMonth,                   # Định nghĩa các trục
           y = Total_Volume,        
           fill = YearMonth)) +      
  geom_bar(stat = "identity") +           # Vẽ biểu đồ cột, chiều cao cột lấy trực tiếp từ giá trị của trục Y.
  geom_text(aes(label = format(Total_Volume, big.mark = ",", scientific = FALSE)),
            vjust = -0.5, 
            size = 4) +
  scale_y_continuous(labels = comma) +  # Định dạng lại các nhãn số trên trục Y để có dấu phẩy ngăn cách hàng nghìn.
  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))  # Xoay các nhãn trên trục X 45 độ để không bị chồng chéo.

  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.

12.1.20 3.1.20. 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' 
  )

print(luxury_france_2024_monthly_volume)
## # A tibble: 12 × 3
##    YearMonth Total_Volume Industry_Tag
##    <chr>            <dbl> <chr>       
##  1 2024-01        5170400 luxury goods
##  2 2024-02        3799200 luxury goods
##  3 2024-03        3842500 luxury goods
##  4 2024-04        3773500 luxury goods
##  5 2024-05        3208900 luxury goods
##  6 2024-06        4839525 luxury goods
##  7 2024-07        9873834 luxury goods
##  8 2024-08        7280988 luxury goods
##  9 2024-09        9046326 luxury goods
## 10 2024-10        8076378 luxury goods
## 11 2024-11        9011457 luxury goods
## 12 2024-12        8815325 luxury goods
  • 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.

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

ggplot(luxury_france_2024_monthly_volume, # --- Bắt đầu khối lệnh ggplot ---
       aes(x = YearMonth,           
           y = Total_Volume,         
           fill = YearMonth)) +      
  geom_bar(stat = "identity") +       # --- Các lớp (layers) của biểu đồ ---
  geom_text(aes(label = format(Total_Volume, big.mark = ",", scientific = FALSE)),
            vjust = -0.5, 
            size = 4) +
  scale_y_continuous(labels = comma) + # 5. Định dạng trục Y
  labs(
    title = "Tổng Khối lượng giao dịch Ngành HÀNG XA XỈ (Luxury Goods, France, 2024)", # 6. Đặt tên/tiêu đề
    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))

Giai đoạn đầu năm (Tháng 1 - Tháng 5): Khởi đầu tương đối trầm lắng * Thá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.

  1. 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.

13 3.2 vẽ biểu đồ động của volume theo quốc gia

yearly_country_volume <- d %>%
  mutate(
    Date = ymd_hms(Date),
    Year = year(Date)
  ) %>%
  group_by(Year, Country) %>%
  summarise(
    Total_Volume = sum(Volume, na.rm = TRUE),
    .groups = 'drop'
  ) %>%
  mutate(Year = as.character(Year))
animated_plot <- ggplot(
  yearly_country_volume,
  aes(
    x = reorder(Country, Total_Volume),
    y = Total_Volume,
    fill = Country
  )
) +
  geom_col() +
  geom_text(
    aes(label = comma(Total_Volume)), 
    hjust = -0.1,
    size = 4
  ) +
  labs(
    title = "Khối lượng giao dịch theo Quốc gia",
    subtitle = "Năm: {closest_state}",
    x = "Quốc gia",
    y = "Tổng Khối lượng giao dịch"
  ) +
  coord_flip() +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5, size = 16),
    legend.position = "none" 
  ) +
  scale_y_continuous(labels = comma) 
final_animation <- animated_plot +
  transition_states(
    Year,
    transition_length = 2,
    state_length = 1
  ) +
  ease_aes("cubic-in-out")

#final_animation
#print(yearly_country_volume)

14 PHẦN B: gIỚI THIỆU BỘ DỮ LIỆU VỀ CHỨNG KHOÁN BVS

15 I.Đọc dữ liệu

d2 <- read.csv("C:/Users/CHI LINH/Downloads/dl2_TMT .csv")
library(dplyr)
library(janitor)
library(tidyr)
library(readr)
library(gganimate)
library(gifski) 
library(transformr) 
## Error: package or namespace load failed for 'transformr' in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]):
##  there is no package called 'sf'
library(psych)
library(ggplot2)
library(ggcorrplot)
library(tidyverse)

15.1 1.1.Xem toan bo du lieu

View(d2)

15.2 1.2.Xem kiểu dữ liệu

str(d2)
## 'data.frame':    12 obs. of  23 variables:
##  $ Year                 : int  2024 2023 2022 2021 2020 2019 2018 2017 2016 2016 ...
##  $ Chi_tieu             : logi  NA NA NA NA NA NA ...
##  $ TSNH                 : num  5.08e+12 5.69e+12 3.65e+12 5.50e+12 3.06e+12 ...
##  $ CKCV                 : num  3.50e+12 3.21e+12 2.25e+12 3.37e+12 2.21e+12 ...
##  $ TSTC                 : num  5.07e+12 5.68e+12 3.65e+12 5.50e+12 3.06e+12 ...
##  $ TSTC_thong.qua.lai.lo: num  4.17e+11 7.33e+11 4.01e+11 7.38e+11 5.37e+11 ...
##  $ TSDH                 : num  5.48e+11 3.25e+10 2.06e+11 2.17e+11 3.56e+11 ...
##  $ TTS                  : num  5.63e+12 6.01e+12 3.86e+12 2.12e+10 3.41e+12 ...
##  $ NPT                  : num  3.15e+12 3.70e+12 1.68e+12 3.57e+12 1.54e+12 ...
##  $ VCSH                 : num  2.48e+12 2.31e+12 2.18e+12 2.14e+12 1.87e+12 ...
##  $ LNCPP                : num  8.10e+11 7.17e+11 6.71e+11 5.61e+10 3.99e+11 ...
##  $ DT_hoat_dong         : num  1.15e+11 1.12e+11 1.12e+11 1.10e+12 5.68e+11 ...
##  $ CP_hoat_dong         : num  9.91e+11 -7.09e+11 -6.99e+11 -6.24e+11 -3.18e+11 ...
##  $ CP_du_phong          : num  -8.59e+10 -4.99e+09 -9.90e+09 4.12e+11 -7.88e+09 ...
##  $ CP_tu.van_TC         : num  -9.08e+09 -1.03e+10 -1.48e+10 -1.40e+10 -1.63e+10 ...
##  $ CPLV                 : num  -1.35e+11 -1.23e+11 -1.35e+11 -1.09e+11 -3.27e+10 ...
##  $ TNK_va_CPK           : num  -1.46e+04 -1.24e+04 -9.00e+09 -5.69e+08 -4.16e+07 ...
##  $ LN_chua_thuc_hien    : num  -6.50e+09 4.29e+10 -7.73e+10 6.01e+10 2.99e+10 ...
##  $ CPTTNDN              : num  -4.10e+10 -3.95e+10 -3.41e+10 -6.81e+10 -2.20e+10 ...
##  $ LNSTTNDN             : num  2.00e+11 1.96e+11 1.47e+11 2.83e+11 1.32e+11 ...
##  $ CPTTNDN.hien.hanh    : num  -4.10e+10 -3.46e+10 -4.46e+10 -5.88e+10 -1.94e+10 ...
##  $ TNTTNDN.hoan.lai     : num  3.29e+07 -4.86e+09 1.05e+10 -9.32e+09 -2.51e+09 ...
##  $ PTK                  : num  1.30e+10 1.29e+10 1.30e+10 1.30e+10 1.80e+10 ...
# câu lệnh str(ten_doi_tuong) dùng để hiển thị cấu trúc nội bộ của một đối tượng.

từ kết quả trên ta có thể dễ dàng nắm bắt được một số thông tin như bộ dữ liệu này có 11 quan sát (năm) và có 23 biến , đồng thời ta cũng có thể dễ hàng nắm được kiểu dữ liệu của từng biến

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

year: Năm ghi nhận dữ liệu tsnh: Tài sản ngắn hạn ckcv: Chứng khoán kinh doanh và các khoản đầu tư nắm giữ đến ngày đáo hạn tstc: Tài sản tài chính tstc_thong_qua_lai_lo: Tài sản tài chính thông qua lãi/lỗ tsdh: Tài sản dài hạn tts: Tổng tài sản npt: Nợ phải trả vcsh: Vốn chủ sở hữu lncpp: Lợi nhuận chưa phân phối dt_hoat_dong: Doanh thu hoạt động cp_hoat_dong: Chi phí hoạt động cp_du_phong: Chi phí dự phòng cp_tu_van_tc: Chi phí tư vấn tài chính cplv: Chi phí lãi vay tnk_va_cpk: Thu nhập khác và chi phí khác ln_chua_thuc_hien: Lợi nhuận chưa thực hiện cpttndn: Chi phí thuế thu nhập doanh nghiệp lnsttndn: Lợi nhuận sau thuế thu nhập doanh nghiệp cpttndn_hien_hanh: Chi phí thuế thu nhập doanh nghiệp hiện hành tnttndn_hoan_lai: Thu nhập/chi phí thuế thu nhập doanh nghiệp hoãn lại ptk: Các khoản phải thu

15.4 1.4.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 summary(ten_doi_tuong) có tác dụng chính là cung cấp một cái nhìn tổng quan nhanh chóng và đầy đủ về các thống kê mô tả cơ bản của toàn bộ các biến (cột) trong dataframe

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ỷ ## 1.4.Xem tên cột

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"

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

d2[startsWith(names(d2), "T")]
##           TSNH        TSTC TSTC_thong.qua.lai.lo         TSDH           TTS
## 1  5.08099e+12 5.07465e+12           4.16564e+11 547665000000 5628660000000
## 2  5.68830e+12 5.68492e+12           7.32923e+11  32536688939 6013660000000
## 3  3.65201e+12 3.64781e+12           4.00962e+11 205640000000 3857650000000
## 4  5.50263e+12 5.49508e+12           7.37876e+11 216666000000   21178821110
## 5  3.05748e+12 3.05509e+12           5.37049e+11 355511000000 3412990000000
## 6  2.21677e+12 2.21375e+12           4.21328e+11 181087000000 2397850000000
## 7  2.54708e+12 2.54493e+12           2.52426e+11 380084000000 2927160000000
## 8  1.74090e+12 1.73958e+12           1.81752e+11 458059000000 2198950000000
## 9  1.36324e+12 1.35994e+12           1.13823e+11 516423000000 1879660000000
## 10 1.36324e+12 1.35994e+12           1.13823e+11 516423000000 1879660000000
## 11 1.38495e+12 1.38342e+12           1.55616e+11 282873000000 1667830000000
## 12 1.64493e+12 7.10556e+11           6.62321e+11   1914652686    -228000000
##     TNK_va_CPK TNTTNDN.hoan.lai
## 1       -14565         32874269
## 2       -12363      -4862215320
## 3  -8995173322      10454121395
## 4   -568757899      -9319929593
## 5    -41604882      -2512287910
## 6   -129341812       -291492977
## 7   -259757299       2490041825
## 8   -784070570      -2559202145
## 9   -760208708      -1721218538
## 10  -760208708      -1721218538
## 11           0      -2855073122
## 12   269310811      -3788915187
# names(d2): Lấy ra một vector chứa tất cả các tên cột của dataframe d2
# startsWith(names(d2), "T") kiểm tra xem các tên cột trong d2 có bắt đầu bằng chữ "T" hay không, trả về vector TRUE/FALSE.
# d2[...] (với vector logic ở vị trí cột) sẽ chọn các cột trong dataframe d2 có giá trị TRUE tương ứng trong vector logic đó.

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

d2[1:3, ]  
##   Year Chi_tieu        TSNH        CKCV        TSTC TSTC_thong.qua.lai.lo
## 1 2024       NA 5.08099e+12 3.50374e+12 5.07465e+12           4.16564e+11
## 2 2023       NA 5.68830e+12 3.20923e+12 5.68492e+12           7.32923e+11
## 3 2022       NA 3.65201e+12 2.25480e+12 3.64781e+12           4.00962e+11
##           TSDH         TTS         NPT        VCSH       LNCPP DT_hoat_dong
## 1 547665000000 5.62866e+12 3.15329e+12 2.47537e+12 8.09703e+11  1.14658e+11
## 2  32536688939 6.01366e+12 3.69889e+12 2.31478e+12 7.17444e+11  1.12357e+11
## 3 205640000000 3.85765e+12 1.67671e+12 2.18094e+12 6.70849e+11  1.11876e+11
##   CP_hoat_dong  CP_du_phong CP_tu.van_TC         CPLV  TNK_va_CPK
## 1  9.90556e+11 -85929246886  -9079808738 -1.34927e+11      -14565
## 2 -7.08765e+11  -4988971823 -10349920976 -1.23351e+11      -12363
## 3 -6.98765e+11  -9903307217 -14795922712 -1.34708e+11 -8995173322
##   LN_chua_thuc_hien      CPTTNDN    LNSTTNDN CPTTNDN.hien.hanh TNTTNDN.hoan.lai
## 1       -6503891935 -40975728123 1.99954e+11      -41008602392         32874269
## 2       42948603988 -39501123275 1.95723e+11      -34638907955      -4862215320
## 3      -77257229402 -34115869042 1.46888e+11      -44569990437      10454121395
##           PTK
## 1 13048922259
## 2 12926987489
## 3 13045316061

15.7 1.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
# sử dụng toán tử $ để truy cập một cột của dataframe

15.8 1.9.Kiểm tra giá trị NA

colSums(is.na(d2))
##                  Year              Chi_tieu                  TSNH 
##                     0                    12                     0 
##                  CKCV                  TSTC TSTC_thong.qua.lai.lo 
##                     0                     0                     0 
##                  TSDH                   TTS                   NPT 
##                     0                     0                     0 
##                  VCSH                 LNCPP          DT_hoat_dong 
##                     0                     0                     0 
##          CP_hoat_dong           CP_du_phong          CP_tu.van_TC 
##                     1                     0                     0 
##                  CPLV            TNK_va_CPK     LN_chua_thuc_hien 
##                     0                     0                     0 
##               CPTTNDN              LNSTTNDN     CPTTNDN.hien.hanh 
##                     0                     0                     0 
##      TNTTNDN.hoan.lai                   PTK 
##                     0                     0
# is.na(d2):Hàm này kiểm tra từng phần tử trong dataframe d2 xem có phải là giá trị thiếu (NA) hay không.Nó trả về một dataframe mới có cùng kích thước với d2, nhưng thay vì các giá trị gốc, nó chứa TRUE ở những vị trí có NA và FALSE ở những vị trí không có NA.
# colSums(...):Hàm này tính tổng các giá trị trong mỗi cột của ma trận hoặc dataframe được truyền vào.Khi áp dụng cho dataframe TRUE/FALSE từ is.na(d2), R coi TRUE là 1 và FALSE là 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.

15.9 1.10.Kiểm tra trùng lặp

so_trung_lap_d2 <- sum(duplicated(d2))
# duplicated(d2) xác định các hàng trùng lặp trong dataframe d2. Nó trả về TRUE cho những hàng nào trùng lặp , và FALSE cho các hàng duy nhất
show(so_trung_lap_d2)
## [1] 1

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

16 II.Sử lý dữ liệu thô

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

d2 <- clean_names(d2)
# clean_names() chuẩn hóa tên cột với các thao tác (Chuyển sang chữ thường, thay thế khoảng trắng/ký tự đặc biệt bằng dấu gạch dưới, loại bỏ ký tự không hợp lệ, xử lý tên trùng lặp bằng cách thêm số.)

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

d2 <- unique(d2)
# unique(d2):Hàm này nhận vào dataframe d2. Nếu một hàng hoàn toàn giống với một hàng khác đã được thấy trước đó, nó sẽ bị bỏ qua.

16.3 2.3.Loại bỏ cột CHi tieu vì nhiều giá trị NA

d2 <- d2 %>% select(-chi_tieu)
#%>% (toán tử Pipeline) Nó truyền kết quả từ vế trái sang làm đầu vào (thường là dữ liệu) cho hàm ở vế phải.
#select() là một hàm từ package dplyr dùng để chọn hoặc bỏ chọn các cột.

16.4 2.4.Xử lý giá trị NA của cột CP hoạt động

Tb <- d2 %>%
  filter(year %in% c(2015, 2016)) %>%
  # filter(year %in% c(2015, 2016)): Lọc dataframe d2 để chỉ giữ lại các hàng mà cột year có giá trị là 2015 hoặc 2016.
  summarise(tb = mean(cp_hoat_dong, na.rm = TRUE))
# Từ dataframe đã lọc, tạo một tóm tắt mới.
Tb <- Tb$tb
d2 <- d2 %>%
  mutate(cp_hoat_dong = if_else(is.na(cp_hoat_dong), Tb , cp_hoat_dong))
# mutate(...): Hàm này dùng để tạo cột mới hoặc thay đổi các cột hiện có.

##2.5.Phân tổ Tài sản, Nguồn vốn, Doanh thu & Chi phí, Lợi nhuận

assets_cols <- c("year", "tsnh", "ckcv", "tstc", "tstc_thong_qua_lai_lo", "tsdh") # tạo 1 vector mới với các biến 
capital_cols <- c("year", "tts", "npt", "vcsh") 
revenue_expenses_cols <- c("year", "dt_hoat_dong", "cp_hoat_dong", "cp_du_phong",
                            "cp_tu_van_tc", "cplv", "tnk_va_cpk")
profit_cols <- c("year", "lncpp", "ln_chua_thuc_hien", "cpttndn",
                 "lnsttndn", "cpttndn_hien_hanh", "tnttndn_hoan_lai")

# Tài sản (Assets)
df_assets_analysis <- d2 %>% 
  select(all_of(assets_cols)) %>%    # select(all_of(vector_ten_cot)) : Chọn các cột có tên nằm trong vector_ten_cot
  rowwise() %>% # rowwise() chuyển đổi dataframe để các phép tính tiếp theo sẽ được thực hiện trên từng hàng một cách độc lập.
  mutate(total_assets = sum(c_across(tsnh:tsdh), na.rm = TRUE)) %>%  # chọn các cột từ tsnh đến tsdh trong ngữ cảnh rowwise để tính tổng. na.rm = TRUE loại bỏ NA khi tính tổng.
  ungroup() %>% # ungroup(): Rất quan trọng để trả dataframe về trạng thái bình thường
  select(year, total_assets, tsnh, tsdh, ckcv)  # sắp xếp 
print("--- 1. PHÂN TỔ: TÀI SẢN (ASSETS) ---")
## [1] "--- 1. PHÂN TỔ: TÀI SẢN (ASSETS) ---"
print(df_assets_analysis)
## # A tibble: 11 × 5
##     year total_assets          tsnh         tsdh          ckcv
##    <int>        <dbl>         <dbl>        <dbl>         <dbl>
##  1  2024      1.46e13 5080990000000 547665000000 3503740000000
##  2  2023      1.53e13 5688300000000  32536688939 3209230000000
##  3  2022      1.02e13 3652010000000 205640000000 2254800000000
##  4  2021      1.53e13 5502630000000 216666000000 3374600000000
##  5  2020      9.21e12 3057480000000 355511000000 2205550000000
##  6  2019      6.55e12 2216770000000 181087000000 1514330000000
##  7  2018      7.41e12 2547080000000 380084000000 1682730000000
##  8  2017      5.24e12 1740900000000 458059000000 1116590000000
##  9  2016      4.09e12 1363240000000 516423000000  735873000000
## 10  2015      3.81e12 1384950000000 282873000000  604420000000
## 11  2014      3.02e12 1644930000000   1914652686    4973549015
cat("\n") # print() và cat("\n"): Dùng để in kết quả ra màn hình với các tiêu đề rõ ràng và thêm dòng trống cho dễ đọc.
# Nguồn vốn (Capital)
df_capital_analysis <- d2 %>% 
  select(all_of(capital_cols)) %>%
  mutate(
    debt_to_equity_ratio = npt / vcsh, 
    debt_to_asset_ratio = npt / tts     
  ) %>%
  mutate(across(c(debt_to_equity_ratio, debt_to_asset_ratio),
                ~replace(., is.nan(.) | is.infinite(.), 0)))
print("--- 2. PHÂN TỔ: NGUỒN VỐN (CAPITAL) ---")
## [1] "--- 2. PHÂN TỔ: NGUỒN VỐN (CAPITAL) ---"
print(df_capital_analysis)
##    year           tts          npt        vcsh debt_to_equity_ratio
## 1  2024 5628660000000 3.153290e+12 2.47537e+12           1.27386613
## 2  2023 6013660000000 3.698890e+12 2.31478e+12           1.59794451
## 3  2022 3857650000000 1.676710e+12 2.18094e+12           0.76880153
## 4  2021   21178821110 3.574850e+12 2.14445e+12           1.66702418
## 5  2020 3412990000000 1.538250e+12 1.87474e+12           0.82051378
## 6  2019 2397850000000 5.912200e+11 1.80663e+12           0.32725018
## 7  2018 2927160000000 1.235010e+12 1.69215e+12           0.72984664
## 8  2017 2198950000000 5.008510e+11 1.69810e+12           0.29494788
## 9  2016 1879660000000 3.119740e+11 1.56768e+12           0.19900362
## 11 2015 1667830000000 2.170870e+11 1.45074e+12           0.14963881
## 12 2014    -228000000 1.432218e+10 1.34121e+12           0.01067855
##    debt_to_asset_ratio
## 1            0.5602204
## 2            0.6150813
## 3            0.4346454
## 4          168.7936255
## 5            0.4507045
## 6            0.2465625
## 7            0.4219141
## 8            0.2277683
## 9            0.1659736
## 11           0.1301613
## 12         -62.8165750
cat("\n")
# Doanh thu & Chi phí (Revenue & Expenses)
df_revenue_expenses_analysis <- d2 %>% 
  select(all_of(revenue_expenses_cols)) %>%
  mutate(
    gross_operating_profit = dt_hoat_dong - cp_hoat_dong 
  )
print("--- 3. PHÂN TỔ: DOANH THU & CHI PHÍ ---")
## [1] "--- 3. PHÂN TỔ: DOANH THU & CHI PHÍ ---"
print(df_revenue_expenses_analysis)
##    year dt_hoat_dong  cp_hoat_dong  cp_du_phong cp_tu_van_tc          cplv
## 1  2024  1.14658e+11  990556000000 -85929246886  -9079808738 -134927000000
## 2  2023  1.12357e+11 -708765000000  -4988971823 -10349920976 -123351000000
## 3  2022  1.11876e+11 -698765000000  -9903307217 -14795922712 -134708000000
## 4  2021  1.09612e+12 -623633000000 412353000000 -13957589769 -108585000000
## 5  2020  5.68060e+11 -318404000000  -7877940311 -16325549109  -32741145600
## 6  2019  5.41264e+11 -284703000000  12674194138 -12491091723  -39502779067
## 7  2018  5.22954e+11 -322133000000   3268735583  -8908412506  -27617501931
## 8  2017  4.62044e+11 -240483000000  -6041989254 -12631941177   -8407790912
## 9  2016  2.75739e+11 -102566000000  22714561240 -10569303357   -6678986795
## 11 2015  2.87179e+11   -4219443989         1608 -12723403357   -4950182678
## 12 2014  3.05344e+11  -53392721995         1732 -14877503357    5519074890
##     tnk_va_cpk gross_operating_profit
## 1       -14565          -875898000000
## 2       -12363           821122000000
## 3  -8995173322           810641000000
## 4   -568757899          1719753000000
## 5    -41604882           886464000000
## 6   -129341812           825967000000
## 7   -259757299           845087000000
## 8   -784070570           702527000000
## 9   -760208708           378305000000
## 11           0           291398443989
## 12   269310811           358736721995
cat("\n")
#  Lợi nhuận (Profit)
df_profit_analysis <- d2 %>% 
  select(all_of(profit_cols)) %>%
  mutate(net_profit_margin = ifelse(d2$dt_hoat_dong != 0, lnsttndn / d2$dt_hoat_dong, 0))
print("--- 4. PHÂN TỔ: LỢI NHUẬN (PROFIT) ---")
## [1] "--- 4. PHÂN TỔ: LỢI NHUẬN (PROFIT) ---"
print(df_profit_analysis)
##    year        lncpp ln_chua_thuc_hien      cpttndn     lnsttndn
## 1  2024 809703000000       -6503891935 -40975728123 199954000000
## 2  2023 717444000000       42948603988 -39501123275 195723000000
## 3  2022 670849000000      -77257229402 -34115869042 146888000000
## 4  2021  56105947847       60062585261 -68083633071 282944000000
## 5  2020 399208000000       29863036428 -21952112634 132380000000
## 6  2019 358608000000        7871036467 -15653003473 135510000000
## 7  2018 264666000000      -30609961068 -18948177341 103532000000
## 8  2017 281475000000       12123537099 -29978875208 122445000000
## 9  2016 175811000000       15051652282 -17591785884 101714000000
## 11 2015  80757887200       40616169573  41094135434  95181923519
## 12 2014 -14295659417      342266000000 456712000000  86934648811
##    cpttndn_hien_hanh tnttndn_hoan_lai net_profit_margin
## 1       -41008602392         32874269         1.7439167
## 2       -34638907955      -4862215320         1.7419742
## 3       -44569990437      10454121395         1.3129536
## 4       -58763703478      -9319929593         0.2581323
## 5       -19439824724      -2512287910         0.2330388
## 6       -15361510496       -291492977         0.2503584
## 7       -21438219166       2490041825         0.1979753
## 8       -27419673063      -2559202145         0.2650072
## 9       -17591785884      -1721218538         0.3688778
## 11       41572101296      -2855073122         0.3314376
## 12      571158000000      -3788915187         0.2847105
cat("\n")

16.5 2.6.Phân tổ DT_hoat_dong theo năm

nguong_doanh_thu <- 400000000000 # Tạo một biến số để lưu giá trị ngưỡng (400 tỷ). 

df_phan_to_doanh_thu <- d2 %>%
  mutate( 
    doanh_thu_to = ifelse(dt_hoat_dong > nguong_doanh_thu, "To A", "To B")  # mutate(): Tạo một cột mới hoặc sửa đổi cột hiện có.
  ) %>%
  select(year, dt_hoat_dong, doanh_thu_to, everything()) %>% #sắp xếp cột 
  arrange(doanh_thu_to, desc(dt_hoat_dong)) # sắp xếp hàng 

print(df_phan_to_doanh_thu)
##    year dt_hoat_dong doanh_thu_to        tsnh         ckcv        tstc
## 1  2021  1.09612e+12         To A 5.50263e+12 3.374600e+12 5.49508e+12
## 2  2020  5.68060e+11         To A 3.05748e+12 2.205550e+12 3.05509e+12
## 3  2019  5.41264e+11         To A 2.21677e+12 1.514330e+12 2.21375e+12
## 4  2018  5.22954e+11         To A 2.54708e+12 1.682730e+12 2.54493e+12
## 5  2017  4.62044e+11         To A 1.74090e+12 1.116590e+12 1.73958e+12
## 6  2014  3.05344e+11         To B 1.64493e+12 4.973549e+09 7.10556e+11
## 7  2015  2.87179e+11         To B 1.38495e+12 6.044200e+11 1.38342e+12
## 8  2016  2.75739e+11         To B 1.36324e+12 7.358730e+11 1.35994e+12
## 9  2024  1.14658e+11         To B 5.08099e+12 3.503740e+12 5.07465e+12
## 10 2023  1.12357e+11         To B 5.68830e+12 3.209230e+12 5.68492e+12
## 11 2022  1.11876e+11         To B 3.65201e+12 2.254800e+12 3.64781e+12
##    tstc_thong_qua_lai_lo         tsdh           tts          npt        vcsh
## 1            7.37876e+11 216666000000   21178821110 3.574850e+12 2.14445e+12
## 2            5.37049e+11 355511000000 3412990000000 1.538250e+12 1.87474e+12
## 3            4.21328e+11 181087000000 2397850000000 5.912200e+11 1.80663e+12
## 4            2.52426e+11 380084000000 2927160000000 1.235010e+12 1.69215e+12
## 5            1.81752e+11 458059000000 2198950000000 5.008510e+11 1.69810e+12
## 6            6.62321e+11   1914652686    -228000000 1.432218e+10 1.34121e+12
## 7            1.55616e+11 282873000000 1667830000000 2.170870e+11 1.45074e+12
## 8            1.13823e+11 516423000000 1879660000000 3.119740e+11 1.56768e+12
## 9            4.16564e+11 547665000000 5628660000000 3.153290e+12 2.47537e+12
## 10           7.32923e+11  32536688939 6013660000000 3.698890e+12 2.31478e+12
## 11           4.00962e+11 205640000000 3857650000000 1.676710e+12 2.18094e+12
##           lncpp  cp_hoat_dong  cp_du_phong cp_tu_van_tc          cplv
## 1   56105947847 -623633000000 412353000000 -13957589769 -108585000000
## 2  399208000000 -318404000000  -7877940311 -16325549109  -32741145600
## 3  358608000000 -284703000000  12674194138 -12491091723  -39502779067
## 4  264666000000 -322133000000   3268735583  -8908412506  -27617501931
## 5  281475000000 -240483000000  -6041989254 -12631941177   -8407790912
## 6  -14295659417  -53392721995         1732 -14877503357    5519074890
## 7   80757887200   -4219443989         1608 -12723403357   -4950182678
## 8  175811000000 -102566000000  22714561240 -10569303357   -6678986795
## 9  809703000000  990556000000 -85929246886  -9079808738 -134927000000
## 10 717444000000 -708765000000  -4988971823 -10349920976 -123351000000
## 11 670849000000 -698765000000  -9903307217 -14795922712 -134708000000
##     tnk_va_cpk ln_chua_thuc_hien      cpttndn     lnsttndn cpttndn_hien_hanh
## 1   -568757899       60062585261 -68083633071 282944000000      -58763703478
## 2    -41604882       29863036428 -21952112634 132380000000      -19439824724
## 3   -129341812        7871036467 -15653003473 135510000000      -15361510496
## 4   -259757299      -30609961068 -18948177341 103532000000      -21438219166
## 5   -784070570       12123537099 -29978875208 122445000000      -27419673063
## 6    269310811      342266000000 456712000000  86934648811      571158000000
## 7            0       40616169573  41094135434  95181923519       41572101296
## 8   -760208708       15051652282 -17591785884 101714000000      -17591785884
## 9       -14565       -6503891935 -40975728123 199954000000      -41008602392
## 10      -12363       42948603988 -39501123275 195723000000      -34638907955
## 11 -8995173322      -77257229402 -34115869042 146888000000      -44569990437
##    tnttndn_hoan_lai          ptk
## 1       -9319929593 1.296750e+10
## 2       -2512287910 1.797412e+10
## 3        -291492977 2.727187e+10
## 4        2490041825 1.161584e+10
## 5       -2559202145 2.746264e+10
## 6       -3788915187 1.792690e+12
## 7       -2855073122 1.312976e+10
## 8       -1721218538 1.849085e+10
## 9          32874269 1.304892e+10
## 10      -4862215320 1.292699e+10
## 11      10454121395 1.304532e+10

16.6 2.7.Phân tổ tsnh theo năm

nguong_tsnh <- 3000000000000 # Tạo một biến số để lưu giá trị ngưỡng (3,000 tỷ)
df_phan_to_tsnh <- d2 %>%
  mutate(
    tsnh_to = ifelse(tsnh > nguong_tsnh, "To A", "To B") # mutate(): Tạo một cột mới hoặc sửa đổi cột hiện có.
  ) %>%
  select(year, tsnh, tsnh_to, everything()) %>% #sắp xếp cột 
  arrange(tsnh_to, desc(tsnh)) # sắp xếp hàng

print(df_phan_to_tsnh)
##    year        tsnh tsnh_to         ckcv        tstc tstc_thong_qua_lai_lo
## 1  2023 5.68830e+12    To A 3.209230e+12 5.68492e+12           7.32923e+11
## 2  2021 5.50263e+12    To A 3.374600e+12 5.49508e+12           7.37876e+11
## 3  2024 5.08099e+12    To A 3.503740e+12 5.07465e+12           4.16564e+11
## 4  2022 3.65201e+12    To A 2.254800e+12 3.64781e+12           4.00962e+11
## 5  2020 3.05748e+12    To A 2.205550e+12 3.05509e+12           5.37049e+11
## 6  2018 2.54708e+12    To B 1.682730e+12 2.54493e+12           2.52426e+11
## 7  2019 2.21677e+12    To B 1.514330e+12 2.21375e+12           4.21328e+11
## 8  2017 1.74090e+12    To B 1.116590e+12 1.73958e+12           1.81752e+11
## 9  2014 1.64493e+12    To B 4.973549e+09 7.10556e+11           6.62321e+11
## 10 2015 1.38495e+12    To B 6.044200e+11 1.38342e+12           1.55616e+11
## 11 2016 1.36324e+12    To B 7.358730e+11 1.35994e+12           1.13823e+11
##            tsdh           tts          npt        vcsh        lncpp
## 1   32536688939 6013660000000 3.698890e+12 2.31478e+12 717444000000
## 2  216666000000   21178821110 3.574850e+12 2.14445e+12  56105947847
## 3  547665000000 5628660000000 3.153290e+12 2.47537e+12 809703000000
## 4  205640000000 3857650000000 1.676710e+12 2.18094e+12 670849000000
## 5  355511000000 3412990000000 1.538250e+12 1.87474e+12 399208000000
## 6  380084000000 2927160000000 1.235010e+12 1.69215e+12 264666000000
## 7  181087000000 2397850000000 5.912200e+11 1.80663e+12 358608000000
## 8  458059000000 2198950000000 5.008510e+11 1.69810e+12 281475000000
## 9    1914652686    -228000000 1.432218e+10 1.34121e+12 -14295659417
## 10 282873000000 1667830000000 2.170870e+11 1.45074e+12  80757887200
## 11 516423000000 1879660000000 3.119740e+11 1.56768e+12 175811000000
##    dt_hoat_dong  cp_hoat_dong  cp_du_phong cp_tu_van_tc          cplv
## 1   1.12357e+11 -708765000000  -4988971823 -10349920976 -123351000000
## 2   1.09612e+12 -623633000000 412353000000 -13957589769 -108585000000
## 3   1.14658e+11  990556000000 -85929246886  -9079808738 -134927000000
## 4   1.11876e+11 -698765000000  -9903307217 -14795922712 -134708000000
## 5   5.68060e+11 -318404000000  -7877940311 -16325549109  -32741145600
## 6   5.22954e+11 -322133000000   3268735583  -8908412506  -27617501931
## 7   5.41264e+11 -284703000000  12674194138 -12491091723  -39502779067
## 8   4.62044e+11 -240483000000  -6041989254 -12631941177   -8407790912
## 9   3.05344e+11  -53392721995         1732 -14877503357    5519074890
## 10  2.87179e+11   -4219443989         1608 -12723403357   -4950182678
## 11  2.75739e+11 -102566000000  22714561240 -10569303357   -6678986795
##     tnk_va_cpk ln_chua_thuc_hien      cpttndn     lnsttndn cpttndn_hien_hanh
## 1       -12363       42948603988 -39501123275 195723000000      -34638907955
## 2   -568757899       60062585261 -68083633071 282944000000      -58763703478
## 3       -14565       -6503891935 -40975728123 199954000000      -41008602392
## 4  -8995173322      -77257229402 -34115869042 146888000000      -44569990437
## 5    -41604882       29863036428 -21952112634 132380000000      -19439824724
## 6   -259757299      -30609961068 -18948177341 103532000000      -21438219166
## 7   -129341812        7871036467 -15653003473 135510000000      -15361510496
## 8   -784070570       12123537099 -29978875208 122445000000      -27419673063
## 9    269310811      342266000000 456712000000  86934648811      571158000000
## 10           0       40616169573  41094135434  95181923519       41572101296
## 11  -760208708       15051652282 -17591785884 101714000000      -17591785884
##    tnttndn_hoan_lai          ptk
## 1       -4862215320 1.292699e+10
## 2       -9319929593 1.296750e+10
## 3          32874269 1.304892e+10
## 4       10454121395 1.304532e+10
## 5       -2512287910 1.797412e+10
## 6        2490041825 1.161584e+10
## 7        -291492977 2.727187e+10
## 8       -2559202145 2.746264e+10
## 9       -3788915187 1.792690e+12
## 10      -2855073122 1.312976e+10
## 11      -1721218538 1.849085e+10

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

d3 <- d2 %>%
  mutate(    
    # Lagged values for growth rate calculations
    dt_hoat_dong_prev = lag(dt_hoat_dong, n = 1, order_by = year),   # mutate(): Tạo một cột mới hoặc sửa đổi cột hiện có.
    lnsttndn_prev = lag(lnsttndn, n = 1, order_by = year),       
# Hàm lag() lấy giá trị của cột dt_hoat_dong từ hàng trước đó ( sau khi sắp xếp theo year. n=1 nghĩa là lấy giá trị của 1 hàng phía trước.
    # Tốc độ tăng trưởng doanh thu (Revenue Growth Rate)
    Revenue_Growth_Rate = ifelse(dt_hoat_dong_prev != 0, (dt_hoat_dong - dt_hoat_dong_prev) / dt_hoat_dong_prev, 0),
    # Tốc độ tăng trưởng lợi nhuận sau thuế (Net Income Growth Rate)
    Net_Income_Growth_Rate = ifelse(lnsttndn_prev != 0, (lnsttndn - lnsttndn_prev) / lnsttndn_prev, 0),
    # ROS (Return on Sales / Net Profit Margin)
    ROS = ifelse(dt_hoat_dong != 0, lnsttndn / dt_hoat_dong, 0),
    # ROA (Return on Assets)
    ROA = ifelse(tstc != 0, lnsttndn / tstc, 0),
    # ROE (Return on Equity)
    ROE = ifelse(vcsh != 0, lnsttndn / vcsh, 0),
    # EBIT (Earnings Before Interest and Taxes)
    EBIT = ln_chua_thuc_hien + cplv,
    # Tỷ suất lợi nhuận hoạt động (Operating Profit Margin - OPM)
    OPM = ifelse(dt_hoat_dong != 0, (dt_hoat_dong - cp_hoat_dong - cp_du_phong - cp_tu_van_tc) / dt_hoat_dong, 0),
    # Hệ số nợ trên tổng tài sản (Debt-to-Asset Ratio - D/A)
    DR = ifelse(tstc != 0, npt / tstc, 0),
    # Hệ số nợ trên vốn chủ sở hữu (Debt-to-Equity Ratio - D/E)
    Debt_to_Equity_Ratio = ifelse(vcsh != 0, npt / vcsh, 0),
    # LIQ (Liquidity): 
    LIQ = ifelse(npt != 0, tsnh / npt, 0),
    # Vòng quay tổng tài sản (Asset Turnover Ratio)
    Asset_Turnover_Ratio = ifelse(tstc != 0, dt_hoat_dong / tstc, 0),
    # COSR (Cost of Sales Ratio): Sử dụng cp_hoat_dong làm proxy cho giá vốn hàng bán
    COSR = ifelse(dt_hoat_dong != 0, abs(cp_hoat_dong) / dt_hoat_dong, 0)  # Hàm abs() tính giá trị tuyệt đối.
  ) %>%
  select(
    year,
    ROS, ROA, ROE, EBIT, OPM,
    DR, Debt_to_Equity_Ratio, LIQ,
    Asset_Turnover_Ratio, COSR,
    Revenue_Growth_Rate, Net_Income_Growth_Rate
  )   # sắp xếp cột 
print(d3)
##    year       ROS        ROA        ROE          EBIT       OPM        DR
## 1  2024 1.7439167 0.03940252 0.08077742 -141430891935 -6.810593 0.6213808
## 2  2023 1.7419742 0.03442845 0.08455361  -80402396012  7.444671 0.6506494
## 3  2022 1.3129536 0.04026745 0.06735078 -211965229402  7.466662 0.4596484
## 4  2021 0.2581323 0.05149042 0.13194246  -48522414739  1.205486 0.6505547
## 5  2020 0.2330388 0.04333097 0.07061246   -2878109172  1.603118 0.5035040
## 6  2019 0.2503584 0.06121287 0.07500706  -31631742600  1.525658 0.2670672
## 7  2018 0.1979753 0.04068167 0.06118370  -58227462999  1.626772 0.4852825
## 8  2017 0.2650072 0.07038768 0.07210706    3715746187  1.560892 0.2879149
## 9  2016 0.3688778 0.07479301 0.06488186    8372665487  1.327921 0.2294028
## 11 2015 0.3314376 0.06880190 0.06560922   35665986895  1.058998 0.1569205
## 12 2014 0.2847105 0.12234736 0.06481807  347785074890  1.223585 0.0201563
##    Debt_to_Equity_Ratio        LIQ Asset_Turnover_Ratio       COSR
## 1            1.27386613   1.611330           0.02259427 8.63922273
## 2            1.59794451   1.537840           0.01976404 6.30815170
## 3            0.76880153   2.178081           0.03066936 6.24588830
## 4            1.66702418   1.539262           0.19947298 0.56894592
## 5            0.82051378   1.987635           0.18593888 0.56051121
## 6            0.32725018   3.749484           0.24450096 0.52599656
## 7            0.72984664   2.062396           0.20548856 0.61598726
## 8            0.29494788   3.475884           0.26560664 0.52047640
## 9            0.19900362   4.369723           0.20275821 0.37196769
## 11           0.14963881   6.379700           0.20758627 0.01469273
## 12           0.01067855 114.851936           0.42972545 0.17486088
##    Revenue_Growth_Rate Net_Income_Growth_Rate
## 1          0.020479365             0.02161729
## 2          0.004299403             0.33246419
## 3         -0.897934533            -0.48085840
## 4          0.929584903             1.13736214
## 5          0.049506341            -0.02309793
## 6          0.035012640             0.30887069
## 7          0.131827272            -0.15446119
## 8          0.675657053             0.20381658
## 9         -0.039835782             0.06862728
## 11        -0.059490280             0.09486752
## 12                  NA                     NA

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

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.

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

d3 <- d3 %>%  ##%>% (toán tử Pipeline) Nó truyền kết quả từ vế trái sang làm đầu vào (thường là dữ liệu) cho hàm ở vế phải.
  mutate(   # mutate(): Tạo một cột mới hoặc sửa đổi cột hiện có.
    Revenue_Growth_Rate = replace_na(Revenue_Growth_Rate, mean(Revenue_Growth_Rate, na.rm = TRUE)),
    Net_Income_Growth_Rate = replace_na(Net_Income_Growth_Rate, mean(Net_Income_Growth_Rate, na.rm = TRUE))
  )

print(tail(d3))
##    year       ROS        ROA        ROE         EBIT      OPM        DR
## 6  2019 0.2503584 0.06121287 0.07500706 -31631742600 1.525658 0.2670672
## 7  2018 0.1979753 0.04068167 0.06118370 -58227462999 1.626772 0.4852825
## 8  2017 0.2650072 0.07038768 0.07210706   3715746187 1.560892 0.2879149
## 9  2016 0.3688778 0.07479301 0.06488186   8372665487 1.327921 0.2294028
## 11 2015 0.3314376 0.06880190 0.06560922  35665986895 1.058998 0.1569205
## 12 2014 0.2847105 0.12234736 0.06481807 347785074890 1.223585 0.0201563
##    Debt_to_Equity_Ratio        LIQ Asset_Turnover_Ratio       COSR
## 6            0.32725018   3.749484            0.2445010 0.52599656
## 7            0.72984664   2.062396            0.2054886 0.61598726
## 8            0.29494788   3.475884            0.2656066 0.52047640
## 9            0.19900362   4.369723            0.2027582 0.37196769
## 11           0.14963881   6.379700            0.2075863 0.01469273
## 12           0.01067855 114.851936            0.4297255 0.17486088
##    Revenue_Growth_Rate Net_Income_Growth_Rate
## 6           0.03501264             0.30887069
## 7           0.13182727            -0.15446119
## 8           0.67565705             0.20381658
## 9          -0.03983578             0.06862728
## 11         -0.05949028             0.09486752
## 12          0.08491064             0.15092082
colSums(is.na(d3))
##                   year                    ROS                    ROA 
##                      0                      0                      0 
##                    ROE                   EBIT                    OPM 
##                      0                      0                      0 
##                     DR   Debt_to_Equity_Ratio                    LIQ 
##                      0                      0                      0 
##   Asset_Turnover_Ratio                   COSR    Revenue_Growth_Rate 
##                      0                      0                      0 
## Net_Income_Growth_Rate 
##                      0
write.csv(d3, "d3_cleaned_financial_ratios.csv", row.names = FALSE)

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 # III. phân tích biến # 3.1 lập bảng thống kê mô tả của roa

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),  #psych::skew(ROA, na.rm = TRUE): Gọi hàm skew từ gói psych để tính độ xiên của cột ROA, bỏ qua các giá trị NA
    do_nhon = psych::kurtosi(ROA, na.rm = TRUE)  # Gọi hàm kurtosi từ gói psych để tính độ nhọn của cột ROA, bỏ qua các giá trị NA.
  ) 

print(thong_ke_mo_ta_roa)
##   so_quan_sat trung_binh   trung_vi do_lech_chuan gia_tri_nho_nhat
## 1          11  0.0588313 0.05149042    0.02543394       0.03442845
##   gia_tri_lon_nhat he_so_bien_thien  do_xien   do_nhon
## 1        0.1223474         43.23198 1.240435 0.7264662

ý 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_binh (ROA trung bình): Giá trị ROA trung bình trong 11 năm này cho thấy, trung bình, mỗi đồng tài sản đã tạo ra khoảng 5.7 xu lợi nhuận ròng. trung_vi (ROA trung vị): Giá trị trung vị (khoảng 0.040 hoặc 4.0%) thấp hơn giá trị trung bình. Điều này cho thấy có một số năm với ROA rất cao đã kéo giá trị trung bình lên, trong khi phần lớn các năm có ROA thấp hơn. Điều này gợi ý rằng hiệu suất sinh lời trên tài sản của công ty thường xuyên ở mức khiêm tốn, chỉ có một vài ngoại lệ tích cực. do_lech_chuan (Độ lệch chuẩn của ROA): Độ lệch chuẩn (khoảng 0.033) cho thấy sự biến động đáng kể của ROA qua các năm. Một độ lệch chuẩn tương đối lớn so với giá trị trung bình xác nhận rằng hiệu suất sử dụng tài sản để tạo lợi nhuận không ổn định, có năm rất tốt và có năm không tốt. gia_tri_nho_nhat (ROA thấp nhất - 0.0197): Năm 2023, ROA đạt mức thấp nhất là 0.0197 (1.97%), cho thấy đây là năm công ty kém hiệu quả nhất trong việc sử dụng tài sản để tạo ra lợi nhuận. Có thể do suy thoái kinh tế, cạnh tranh gay gắt, hoặc chi phí tăng cao. gia_tri_lon_nhat (ROA cao nhất - 0.1223): Năm 2014, ROA đạt đỉnh 0.1223 (12.23%). Đây là năm công ty sử dụng tài sản hiệu quả nhất, có thể do điều kiện thị trường thuận lợi, quản lý chi phí tốt, hoặc chu kỳ đầu tư mang lại quả ngọt. Sự chênh lệch lớn giữa min và max cho thấy hiệu suất rất không đồng đều. he_so_bien_thien (Hệ số biến thiên của ROA - khoảng 58.7%): Một CV cao như vậy (hơn 50%) nhấn mạnh rằng ROA của công ty rất biến động so với giá trị trung bình của nó. Điều này ngụ ý rằng các nhà đầu tư hoặc các bên liên quan cần cẩn trọng khi đánh giá hiệu suất ROA, vì nó không ổn định và khó dự đoán. Nó cũng cho thấy rủi ro cao hơn liên quan đến khả năng tạo lợi nhuận từ tài sản của công ty. do_xien (Độ xiên của ROA - khoảng 0.77): Độ xiên dương cho thấy phân phối ROA có một “đuôi” dài hơn về phía bên phải. Điều này có nghĩa là có nhiều năm ROA thấp hơn trung bình và một số ít năm có ROA rất cao (như năm 2014) đã kéo giá trị trung bình lên. Về mặt kinh tế, công ty thường xuyên hoạt động ở mức hiệu quả thấp hơn nhưng có những năm bùng nổ hiếm hoi. do_nhon (Độ nhọn của ROA - khoảng 0.01): Độ nhọn gần bằng 0 (hoặc dương nhẹ) cho thấy phân phối ROA có đỉnh hơi nhọn hơn và đuôi dày hơn một chút so với phân phối chuẩn. Điều này gợi ý rằng có một số năm hiệu suất ROA cực đoan (cả rất tốt và rất xấu) xuất hiện thường xuyên hơn dự kiến nếu ROA tuân theo phân phối chuẩn, đồng thời có nhiều năm ROA tập trung gần giá trị trung bình.

18 3.2 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)
  )

print(thong_ke_mo_ta_dr)
##   so_quan_sat trung_binh  trung_vi do_lech_chuan gia_tri_nho_nhat
## 1          11   0.393862 0.4596484     0.2141141        0.0201563
##   gia_tri_lon_nhat he_so_bien_thien   do_xien   do_nhon
## 1        0.6506494         54.36272 -0.233177 -1.469933

ý nghĩa kinh tế trung_binh (DR trung bình): Khoảng 34.75%. Điều này cho thấy, trung bình trong 11 năm qua, khoảng 34.75% tổng tài sản của công ty được tài trợ bằng nợ. Đây là một mức độ đòn bẩy tài chính vừa phải. Mức này cho thấy công ty không quá phụ thuộc vào nợ nhưng vẫn sử dụng nợ để tận dụng lợi ích của đòn bẩy. trung_vi (DR trung vị): Khoảng 45.96%. Giá trị trung vị cao hơn đáng kể so với giá trị trung bình. Điều này rất quan trọng về mặt kinh tế: nó cho thấy rằng trong phần lớn các năm, tỷ lệ nợ của công ty cao hơn mức trung bình tính toán. Giá trị trung bình bị kéo xuống bởi một hoặc một vài năm có tỷ lệ nợ cực kỳ thấp (như năm 2014 với 2.02%). Điều này ngụ ý rằng, mặc dù mức trung bình cho thấy đòn bẩy vừa phải, nhưng thực tế phần lớn thời gian công ty hoạt động với mức độ nợ cao hơn, tiềm ẩn rủi ro tài chính lớn hơn. do_lech_chuan (Độ lệch chuẩn của DR): 0.2186. Độ lệch chuẩn khá lớn (21.86%) so với giá trị trung bình (34.75%). Điều này cho thấy sự biến động đáng kể trong chính sách tài trợ nợ của công ty qua các năm. Công ty không duy trì một mức độ đòn bẩy tài chính ổn định, có những năm sử dụng rất ít nợ và có những năm sử dụng rất nhiều nợ. Sự thiếu nhất quán này có thể gây ra những rủi ro và cơ hội khác nhau trong quản lý vốn. gia_tri_nho_nhat (DR thấp nhất - 0.0202 hay 2.02%): Vào năm 2014, tỷ lệ nợ của công ty rất thấp, chỉ 2.02%. Đây là một năm mà công ty gần như không sử dụng nợ để tài trợ tài sản, có thể do lợi nhuận cao, khả năng tự tài trợ mạnh mẽ, hoặc chính sách tài chính cực kỳ thận trọng trong năm đó. gia_tri_lon_nhat (DR cao nhất - 0.6506 hay 65.06%): Vào các năm 2021 và 2023, tỷ lệ nợ đạt mức cao nhất là khoảng 65.06%. Mức này cho thấy hơn 2/3 tài sản của công ty được tài trợ bằng nợ, thể hiện một mức độ rủi ro tài chính cao. Điều này có thể xuất phát từ việc công ty cần vốn lớn để mở rộng, đầu tư, hoặc đang trải qua giai đoạn khó khăn về dòng tiền. Sự chênh lệch lớn giữa DR thấp nhất và cao nhất (từ 2% đến 65%) củng cố ý nghĩa về sự biến động cực lớn trong cấu trúc vốn. he_so_bien_thien (Hệ số biến thiên của DR - 62.89%): Một CV cao (62.89%) nhấn mạnh sự biến động cực lớn của tỷ lệ nợ so với giá trị trung bình của nó. Điều này ngụ ý rằng chính sách tài trợ nợ của công ty không ổn định và khó dự đoán. Các nhà đầu tư và chủ nợ sẽ cần phải đánh giá cẩn thận rủi ro liên quan đến sự thay đổi liên tục trong cấu trúc vốn này. do_xien (Độ xiên của DR - -0.2227): Độ xiên âm nhẹ cho thấy phân phối tỷ lệ nợ có xu hướng có nhiều năm với mức nợ cao hơn trung bình (đuôi về phía bên phải ngắn hơn), và một số ít năm với mức nợ rất thấp (đuôi về phía bên trái dài hơn) đã kéo giá trị trung bình xuống. Điều này xác nhận rằng mặc dù trung bình là 34.75%, công ty thường xuyên hoạt động ở mức độ nợ cao hơn. do_nhon (Độ nhọn của DR - -1.0264): Độ nhọn âm đáng kể cho thấy phân phối tỷ lệ nợ có đỉnh phẳng hơn và đuôi mỏng hơn so với phân phối chuẩn. Điều này có nghĩa là các giá trị tỷ lệ nợ được phân bố rộng hơn, ít tập trung quanh giá trị trung bình, và ít có các giá trị cực đoan hơn so với một phân phối chuẩn. Điều này phù hợp với sự biến động lớn mà độ lệch chuẩn và CV đã chỉ ra.

19 3.3.1 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")
# d3[, numeric_cols]: Chọn tất cả các hàng từ khung dữ liệu d3, nhưng chỉ bao gồm các cột có tên trong vector numeric_cols.
#cor(...): Hàm chính để tính tương quan.
#use = "pairwise.complete.obs": Đây là một cách xử lý các giá trị bị thiếu (NA)
print(correlation_matrix["ROA", ])
##                    ROS                    ROA                    ROE 
##            -0.49192299             1.00000000            -0.24579524 
##                    OPM                     DR   Debt_to_Equity_Ratio 
##            -0.12625299            -0.87042403            -0.71712326 
##                    LIQ   Asset_Turnover_Ratio                   COSR 
##             0.84804641             0.86001306            -0.54265641 
##    Revenue_Growth_Rate Net_Income_Growth_Rate 
##             0.15717485             0.09806534

ý nghĩa kinh tế ROA - ROS (0.436): Có mối tương quan dương vừa phải. Khi tỷ suất sinh lời trên doanh thu (ROS) tăng, ROA cũng có xu hướng tăng. Điều này hợp lý vì lợi nhuận trên doanh thu là một thành phần quan trọng để tạo ra lợi nhuận trên tổng tài sản. Một công ty có khả năng chuyển đổi doanh thu thành lợi nhuận tốt hơn (ROS cao hơn) sẽ có xu hướng đạt ROA cao hơn. ROA - ROE (0.656): Có mối tương quan dương khá mạnh. ROE (Return on Equity) là tỷ suất sinh lời trên vốn chủ sở hữu. Mối quan hệ này cho thấy khi công ty tạo ra lợi nhuận tốt hơn trên tổng tài sản, nó cũng có xu hướng tạo ra lợi nhuận tốt hơn cho các cổ đông (vốn chủ sở hữu). ROA - OPM (0.180): Tương quan dương yếu. Tỷ suất lợi nhuận hoạt động (OPM) đo lường khả năng sinh lời từ hoạt động kinh doanh cốt lõi. Mối tương quan yếu cho thấy mặc dù OPM có đóng góp tích cực, nhưng nó không phải là yếu tố chính giải thích sự biến động của ROA trong tập dữ liệu này. Có thể có các yếu tố khác ROA - DR (0.038) và Debt_to_Equity_Ratio (0.008): Tương quan gần như bằng 0 và dương rất yếu. DR (Debt Ratio) và Tỷ lệ nợ trên vốn chủ sở hữu (Debt_to_Equity_Ratio) đều là các chỉ số về đòn bẩy tài chính. Mối tương quan rất yếu này cho thấy trong trường hợp dữ liệu này, mức độ nợ dường như không có mối quan hệ tuyến tính đáng kể với ROA. Điều này có thể gây ngạc nhiên vì nợ thường ảnh hưởng đến chi phí lãi vay và do đó ảnh hưởng đến lợi nhuận ròng. Có thể do tác động của nợ không nhất quán hoặc bị ảnh hưởng bởi các yếu tố khác. ROA - LIQ (-0.052): Tương quan âm rất yếu. LIQ (Liquidity - Khả năng thanh toán) thường liên quan đến tài sản lưu động. Tương quan âm yếu có thể cho thấy một chút nghịch lý: các công ty có ROA cao hơn đôi khi có thể ít tài sản lưu động hơn (vì tài sản đang được sử dụng hiệu quả) hoặc việc giữ quá nhiều tiền mặt/tài sản dễ thanh khoản lại làm giảm ROA. Tuy nhiên, mức độ yếu của tương quan này không đáng để rút ra kết luận mạnh mẽ. ROA - Asset_Turnover_Ratio (0.849): Tương quan dương RẤT MẠNH. Asset Turnover Ratio (Vòng quay tổng tài sản) đo lường hiệu quả sử dụng tài sản để tạo ra doanh thu. Mối tương quan cực kỳ mạnh mẽ này cho thấy đây là yếu tố quan trọng nhất ảnh hưởng đến ROA trong tập dữ liệu . ROA - COSR (0.849): Tương quan dương RẤT MẠNH. COSR (Cost of Sales Ratio - Tỷ lệ giá vốn hàng bán trên doanh thu) đo lường mức độ chi phí hàng bán ảnh hưởng đến doanh thu. Mối tương quan mạnh này hơi bất ngờ nếu COSR được tính như tỷ lệ chi phí trên doanh thu. Tuy nhiên, nếu COSR là tỷ lệ doanh thu thuần trên doanh thu, tức là phần doanh thu còn lại sau khi trừ giá vốn, thì tương quan dương mạnh với ROA là hợp lý. Giả định rằng COSR là tỷ lệ phản ánh hiệu quả chi phí bán hàng. Nếu nó là tỷ lệ “doanh thu - giá vốn trên doanh thu” thì tương quan càng cao. ROA - Revenue_Growth_Rate (0.028): Tương quan dương rất yếu. Tốc độ tăng trưởng doanh thu không có mối quan hệ tuyến tính đáng kể với ROA trong giai đoạn này. Một công ty có thể tăng trưởng doanh thu nhanh chóng nhưng không nhất thiết cải thiện hiệu quả sử dụng tài sản để tạo lợi nhuận (ROA), có thể do chi phí tăng nhanh hơn, lợi nhuận biên thấp hơn hoặc đầu tư tài sản lớn. ROA - Net_Income_Growth_Rate (0.004): Tương quan dương cực kỳ yếu. Tốc độ tăng trưởng lợi nhuận ròng cũng không có mối quan hệ tuyến tính đáng kể với ROA. # 3.4.1 Tương quan riêng lẻ của ROA với ROS

cor_roa_ros <- cor(d3$ROA, d3 $ROS, use = "pairwise.complete.obs")
print(cor_roa_ros)
## [1] -0.491923

ý 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). # 3.5 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)  %>%   # mutate(): Tạo một cột mới hoặc sửa đổi cột hiện có.
  select(year, ROA, ROS, Asset_Turnover_Ratio, ROA_DuPont_Calculated)
print(du_pont_analysis)
##    year        ROA       ROS Asset_Turnover_Ratio ROA_DuPont_Calculated
## 1  2024 0.03940252 1.7439167           0.02259427            0.03940252
## 2  2023 0.03442845 1.7419742           0.01976404            0.03442845
## 3  2022 0.04026745 1.3129536           0.03066936            0.04026745
## 4  2021 0.05149042 0.2581323           0.19947298            0.05149042
## 5  2020 0.04333097 0.2330388           0.18593888            0.04333097
## 6  2019 0.06121287 0.2503584           0.24450096            0.06121287
## 7  2018 0.04068167 0.1979753           0.20548856            0.04068167
## 8  2017 0.07038768 0.2650072           0.26560664            0.07038768
## 9  2016 0.07479301 0.3688778           0.20275821            0.07479301
## 11 2015 0.06880190 0.3314376           0.20758627            0.06880190
## 12 2014 0.12234736 0.2847105           0.42972545            0.12234736

ý 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 . # 3.6 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 ) #lm(): Là hàm chính để tạo mô hình hồi quy tuyến tính.
print(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

ý 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.

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

lm_dr_roa <- lm(ROA ~ DR, data = d3 ) # lm(): Là hàm chính để tạo mô hình hồi quy tuyến tính.
print(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

ý 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 (ví dụ: 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ê.

21 3.8 Tính tỷ lệ giữa DR và LIQ

d3 <- d3 %>%
  mutate(
    DR_to_LIQ_Ratio = ifelse(LIQ != 0, DR / LIQ, NA) 
  )

print(d3 %>% select(year, DR, LIQ, DR_to_LIQ_Ratio))
##    year        DR        LIQ DR_to_LIQ_Ratio
## 1  2024 0.6213808   1.611330    0.3856322912
## 2  2023 0.6506494   1.537840    0.4230931381
## 3  2022 0.4596484   2.178081    0.2110336650
## 4  2021 0.6505547   1.539262    0.4226406992
## 5  2020 0.5035040   1.987635    0.2533180954
## 6  2019 0.2670672   3.749484    0.0712277170
## 7  2018 0.4852825   2.062396    0.2353003219
## 8  2017 0.2879149   3.475884    0.0828321357
## 9  2016 0.2294028   4.369723    0.0524982388
## 11 2015 0.1569205   6.379700    0.0245968498
## 12 2014 0.0201563 114.851936    0.0001754981

ý 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. # 3.9 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) # ~: "được giải thích bởi".
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

ý 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. # 3.10 Kiểm tra các giá trị ngoại lai (outliers) trong ‘ROS’

Q1_ros <- quantile(d3$ROS, 0.25) # quantile(...): Hàm R để tính các tứ phân vị
Q3_ros <- quantile(d3$ROS, 0.75)
IQR_ros <- Q3_ros - Q1_ros # IQR_ros <- Q3_ros - Q1_rosTính toán Khoảng cách giữa các tứ phân vị (IQR), là sự chênh lệch giữa Q3 và Q1
outliers_ros <- d3$ROS[d3$ROS < (Q1_ros - 1.5 * IQR_ros) | d3$ROS > (Q3_ros + 1.5 * IQR_ros)] # xác định các giá trị ngoại lai.
print(outliers_ros)
## [1] 1.743917 1.741974

ý 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 # 3.11 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) # pca_result <- prcomp(df_financial_subset_complete, scale. = TRUE) : prcomp(...): Đây là hàm chính trong R để thực hiện Phân tích thành phần chính
# scale. = TRUE: Tham số quan trọng này chỉ định rằng dữ liệu nên được chia tỷ lệ (scaling) (chuẩn hóa về trung bình 0 và độ lệch chuẩn 1) trước khi thực hiện PCA.
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

ý 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. # 3.12 Đá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)
print(opm_roa_contribution)
##    year       OPM        ROA OPM_to_ROA_Ratio
## 1  2024 -6.810593 0.03940252       -172.84663
## 2  2023  7.444671 0.03442845        216.23600
## 3  2022  7.466662 0.04026745        185.42674
## 4  2021  1.205486 0.05149042         23.41185
## 5  2020  1.603118 0.04333097         36.99706
## 6  2019  1.525658 0.06121287         24.92381
## 7  2018  1.626772 0.04068167         39.98783
## 8  2017  1.560892 0.07038768         22.17565
## 9  2016  1.327921 0.07479301         17.75462
## 11 2015  1.058998 0.06880190         15.39198
## 12 2014  1.223585 0.12234736         10.00091

ý 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. # 3.13 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)
print(equity_turnover)
##    year        ROE       ROS Equity_Turnover
## 1  2024 0.08077742 1.7439167      0.04631954
## 2  2023 0.08455361 1.7419742      0.04853895
## 3  2022 0.06735078 1.3129536      0.05129715
## 4  2021 0.13194246 0.2581323      0.51114272
## 5  2020 0.07061246 0.2330388      0.30300735
## 6  2019 0.07500706 0.2503584      0.29959870
## 7  2018 0.06118370 0.1979753      0.30904707
## 8  2017 0.07210706 0.2650072      0.27209469
## 9  2016 0.06488186 0.3688778      0.17588985
## 11 2015 0.06560922 0.3314376      0.19795346
## 12 2014 0.06481807 0.2847105      0.22766308

ý 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. # 3.14 Đá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 %>% # d3 %>% chuyển dataframe d3 làm đầu vào.
  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)
print(roe_dependency_analysis)
##    year ROA_to_ROE_Ratio DR_to_ROE_Ratio
## 1  2024        0.4877913       7.6925060
## 2  2023        0.4071790       7.6951115
## 3  2022        0.5978765       6.8246934
## 4  2021        0.3902491       4.9305940
## 5  2020        0.6136448       7.1305263
## 6  2019        0.8160949       3.5605609
## 7  2018        0.6649102       7.9315650
## 8  2017        0.9761552       3.9928808
## 9  2016        1.1527567       3.5356994
## 11 2015        1.0486620       2.3917450
## 12 2014        1.8875500       0.3109673

ý 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. # 3.15 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 # Dương nghĩa là OPM tăng nhanh hơn ROS
  ) %>%
  select(year, OPM_Pct_Change, ROS_Pct_Change, OPM_vs_ROS_Trend)
print(opm_ros_cost_efficiency)
##    year OPM_Pct_Change ROS_Pct_Change OPM_vs_ROS_Trend
## 1  2014             NA             NA               NA
## 2  2015    -13.4512245     16.4121432        -29.86337
## 3  2016     25.3942028     11.2963032         14.09790
## 4  2017     17.5440218    -28.1585345         45.70256
## 5  2018      4.2206120    -25.2943595         29.51497
## 6  2019     -6.2155782     26.4593916        -32.67497
## 7  2020      5.0771671     -6.9179446         11.99511
## 8  2021    -24.8036712     10.7679758        -35.57165
## 9  2022    519.3900232    408.6358890        110.75413
## 10 2023     -0.2945176     32.6759915        -32.97051
## 11 2024   -191.4827910      0.1115085       -191.59430

ý 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. #3.16 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)
print(growth_inflection_points)
##   year Revenue_Growth_Rate Rev_Growth_Change Net_Income_Growth_Rate
## 1 2016        -0.039835782        0.01965450             0.06862728
## 2 2017         0.675657053        0.71549283             0.20381658
## 3 2018         0.131827272       -0.54382978            -0.15446119
## 4 2019         0.035012640       -0.09681463             0.30887069
## 5 2020         0.049506341        0.01449370            -0.02309793
## 6 2021         0.929584903        0.88007856             1.13736214
## 7 2022        -0.897934533       -1.82751944            -0.48085840
## 8 2023         0.004299403        0.90223394             0.33246419
## 9 2024         0.020479365        0.01617996             0.02161729
##   Net_Inc_Growth_Change Rev_Inflection_Sign Net_Inc_Inflection_Sign
## 1           -0.02624024                TRUE                   FALSE
## 2            0.13518930               FALSE                    TRUE
## 3           -0.35827777                TRUE                    TRUE
## 4            0.46333187               FALSE                    TRUE
## 5           -0.33196861                TRUE                    TRUE
## 6            1.16046007               FALSE                    TRUE
## 7           -1.61822054                TRUE                    TRUE
## 8            0.81332259                TRUE                    TRUE
## 9           -0.31084690               FALSE                    TRUE

ý 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. # 3.17 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))
print(ebit_per_estimated_asset_volatility)
##   EBIT_per_Asset_Volatility
## 1                  3.738252

ý 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.

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

operating_leverage <- d3 %>%
  arrange(year) %>%
  mutate( # mutate(...): Tạo ra các cột mới dựa trên các cột hiện có:
    EBIT_Pct_Change = (EBIT - lag(EBIT)) / abs(lag(EBIT)) * 100, # abs(lag(EBIT)): Sử dụng giá trị tuyệt đối của EBIT năm trước để tránh lỗi khi chia cho 0 hoặc giá trị âm.

    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) 
#ilter(!is.na(Operating_Leverage_Ratio), !is.infinite(Operating_Leverage_Ratio)):Lọc bỏ các hàng mà Operating_Leverage_Ratio là NA (do không tính được) hoặc Inf (vô hạn, thường xảy ra khi % thay đổi doanh thu rất gần 0 và % thay đổi EBIT là một số khác 0). Điều này giúp làm sạch kết quả
print(operating_leverage)
##    year EBIT_Pct_Change Revenue_Pct_Change Operating_Leverage_Ratio
## 1  2015       -89.74482         -5.9490280               15.0856274
## 2  2016       -76.52479         -3.9835782               19.2100634
## 3  2017       -55.62051         67.5657053               -0.8232062
## 4  2018     -1667.04630         13.1827272             -126.4568608
## 5  2019        45.67556          3.5012640               13.0454491
## 6  2020        90.90120          4.9506341               18.3615267
## 7  2021     -1585.91293         92.9584903              -17.0604420
## 8  2022      -336.83982        -89.7934533                3.7512737
## 9  2023        62.06812          0.4299403              144.3645118
## 10 2024       -75.90383          2.0479365              -37.0635651

ý 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ẽ. # 3.19 Đá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(   # mutate(...): Tạo ra các cột mới dựa trên các cột hiện có:
    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)
print(net_inc_atr_growth_sustainability)
##    year Net_Income_Growth_Rate ATR_Pct_Change Growth_Sustainability_Gap
## 1  2014             0.15092082             NA                        NA
## 2  2015             0.09486752     -51.693280                 51.788148
## 3  2016             0.06862728      -2.325810                  2.394437
## 4  2017             0.20381658      30.996738                -30.792921
## 5  2018            -0.15446119     -22.634254                 22.479793
## 6  2019             0.30887069      18.985193                -18.676323
## 7  2020            -0.02309793     -23.951679                 23.928581
## 8  2021             1.13736214       7.278794                 -6.141432
## 9  2022            -0.48085840     -84.624805                 84.143946
## 10 2023             0.33246419     -35.557696                 35.890161
## 11 2024             0.02161729      14.320072                -14.298455

ý 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.

23 3.20 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)) %>%   # d3 %>% filter(...): Lọc các hàng (năm) đáp ứng một trong ba điều kiện sau:
  select(year, Revenue_Growth_Rate, Net_Income_Growth_Rate)
print(growth_imbalance_years)
##   year Revenue_Growth_Rate Net_Income_Growth_Rate
## 1 2020          0.04950634            -0.02309793
## 2 2018          0.13182727            -0.15446119
## 3 2016         -0.03983578             0.06862728
## 4 2015         -0.05949028             0.09486752

ý 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. # IV.Trực quan hóa

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

my_theme <- theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title = element_text(face = "bold", size = 12),
    axis.text = element_text(size = 10),
    panel.grid.minor = element_blank()
  )
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)") + 
  my_theme +
  annotate("text", x = min(d3$year), y = max(d3$ROS), label = "Trendline included", hjust = -0.1, vjust = 1.5, color = "darkgreen") 
# aes(x = year, y = ROS): Thiết lập các ánh xạ thẩm mỹ (aesthetic mappings). Nó chỉ định rằng cột year từ dataframe d3 sẽ được dùng cho trục hoành (x-axis) và cột ROS sẽ được dùng cho trục tung (y-axis).
# geom_line(color = "#1f77b4", size = 1):Tác dụng: Thêm một lớp (layer) biểu đồ đường vào p1. Tạo ra các đường nối giữa các điểm dữ liệu.
# geom_point(color = "#1f77b4", size = 3, shape = 21, fill = "white"):Tác dụng: Thêm một lớp biểu đồ điểm vào p1, đánh dấu rõ ràng từng điểm dữ liệu trên đường. Tạo ra các điểm dữ liệu.
# geom_smooth(method = "lm", se = FALSE, color = "red", linetype = "dashed"):Tác dụng: Thêm một đường xu hướng (trendline) vào biểu đồ.
#labs(title = "ROS Over Years", x = "Year", y = "Return on Sales (ROS)"):Tác dụng: Thêm các nhãn và tiêu đề cho biểu đồ.
# my_theme:Tác dụng: Áp dụng một chủ đề (theme) tùy chỉnh đã được định nghĩa trước
# annotate("text", x = min(d3$year), y = max(d3$ROS), label = "Trendline included", hjust = -0.1, vjust = 1.5, color = "darkgreen"):Tác dụng: Thêm một chú thích văn bản trực tiếp vào biểu đồ.

print(p1)

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).

25 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)") + 
  my_theme +
  annotate("text", x = min(d3$year), y = max(d3$ROA),
           label = "Trendline included", hjust = -0.1, vjust = 1.5, color = "darkgreen")

print(p2)

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") + # Layer 3: Màu sắc theo năm
  labs(title = "ROS vs ROA by Year", x = "Return on Sales (ROS)", y = "Return on Assets (ROA)") + 
  my_theme + 
  geom_text(aes(label = year), vjust = -1, size = 3) 
print(p3)

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)

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. Điểm đáng chú ý: 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)

p5 <- d3 %>%
  select(year, ROS, ROA) %>%
  tidyr::pivot_longer(cols = c(ROS, ROA), names_to = "Metric", values_to = "Value")
p5 <- ggplot(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") + 
  my_theme + 
  geom_text(aes(label = round(Value, 2)), vjust = -1, size = 3) 
print(p5)

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)

Biể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)

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.

26 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") + # Layer 4: 
  labs(title = "Revenue Growth vs Net Income Growth", x = "Revenue Growth Rate", y = "Net Income Growth Rate") + 
  my_theme 
#geom_point(size = 4, alpha = 0.8):Tác dụng: Thêm lớp điểm phân tán.
#scale_color_gradient(low = "yellow", high = "darkgreen"):Tác dụng: Điều chỉnh cách ánh xạ biến color (year) thành màu sắc.
#geom_hline(yintercept = 0, linetype = "dashed", color = "gray"):Tác dụng: Thêm một đường ngang tham chiếu tại y = 0.
# geom_vline(xintercept = 0, linetype = "dashed", color = "gray"):Tác dụng: Thêm một đường dọc tham chiếu tại x = 0.
print(p8)

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.

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

df_ros_roa_long <- d3 %>%
  select(year, ROS, ROA) %>%
  tidyr::pivot_longer(cols = c(ROS, ROA), names_to = "Metric", values_to = "Value")

p9 <- ggplot(df_ros_roa_long, 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") + 
  # my_theme + # Lỗi tiềm ẩn: 'my_theme' chưa được định nghĩa
  theme_light() + # Thay thế bằng theme có sẵn
  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")
#geom_vline(xintercept = 0, linetype = "dashed", color = "gray"):Tác dụng: Thêm một đường dọc tham chiếu tại x = 0.
#facet_wrap(~Metric, ncol = 1, scales = "free_y"):Tác dụng: Chia biểu đồ thành nhiều "facet" (khuôn mặt nhỏ) dựa trên biến Metric
print(p9)

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)") + 
  my_theme + 
  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)

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") + 
  my_theme + 
  geom_text(aes(label = year), vjust = -1, size = 2, check_overlap = TRUE) 

print(p11)

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_profitability_long <- 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_profitability_long, 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 by Year", x = "Year", y = "Proportion") + 
  # my_theme + # Lỗi tiềm ẩn: 'my_theme' chưa được định nghĩa
  theme_minimal() + # Thay thế bằng theme có sẵn
  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)

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_long <- d3 %>%
  select(year, DR, Debt_to_Equity_Ratio) %>%
  tidyr::pivot_longer(cols = c(DR, Debt_to_Equity_Ratio), names_to = "Metric", values_to = "Value")
p13 <- ggplot(df_debt_long, aes(x = year, y = Value, color = Metric)) +
  geom_line(size = 1.2) + 
  geom_point(size = 3, aes(shape = Metric)) + 
  scale_color_manual(values = c("DR" = "darkred", "Debt_to_Equity_Ratio" = "darkorange")) + 
  labs(title = "Debt Ratios Over Years", x = "Year", y = "Ratio Value") +
  my_theme + 
  geom_text(aes(label = round(Value, 2)), vjust = -1, size = 3, check_overlap = TRUE) 
print(p13)

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

p14 <- ggplot(d3) +
  geom_line(aes(x = year, y = Revenue_Growth_Rate, color = "Revenue Growth"), size = 1.2) + 
  geom_line(aes(x = year, y = Net_Income_Growth_Rate, color = "Net Income Growth"), size = 1.2, linetype = "dashed") + 
  geom_point(aes(x = year, y = Revenue_Growth_Rate), color = "darkblue", size = 3) + 
  geom_point(aes(x = year, y = Net_Income_Growth_Rate), color = "darkred", size = 3, shape = 17) + 
  scale_color_manual(name = "Growth Metric", values = c("Revenue Growth" = "darkblue", "Net Income Growth" = "darkred")) + 
  labs(title = "Revenue and Net Income Growth Over Years", x = "Year", y = "Growth Rate") + 
  my_theme # 
print(p14)

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 (ví dụ: 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/â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/â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") + 
  my_theme + 
  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)

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)

Đườ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)") +
  my_theme +
  geom_hline(yintercept = 2, linetype = "dashed", color = "red", size = 0.8) + # Thêm đường tham chiếu cho LIQ lý tưởng >=2
  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)

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

p18 <- ggplot(d3, aes(x = as.factor(year))) +
  geom_col(aes(y = COSR, fill = "COSR"), alpha = 0.8) + 
  geom_line(aes(y = Asset_Turnover_Ratio * 10, group = 1, color = "Asset_Turnover_Ratio"), size = 1.2) + 
  geom_point(aes(y = Asset_Turnover_Ratio * 10, color = "Asset_Turnover_Ratio"), size = 3) + 
  labs(title = "COSR và Tỷ lệ vòng quay tài sản theo năm",
       x = "Năm",
       y = "Giá trị",
       fill = "Chỉ số",
       color = "Chỉ số") + 
  scale_fill_manual(values = c("COSR" = "skyblue")) + 
  scale_color_manual(values = c("Asset_Turnover_Ratio" = "darkgreen")) + 
  scale_y_continuous(
    name = "COSR",
    sec.axis = sec_axis(~./10, name="Asset Turnover Ratio") 
  ) +
  theme_light() + 
  geom_text(aes(y = COSR, label = round(COSR, 1)), vjust = -0.5, size = 3, color = "black") + 
  geom_ribbon(aes(ymin = 0, ymax = Asset_Turnover_Ratio * 10, fill = "Asset_Turnover_Ratio"), alpha = 0.1) + 
  geom_vline(xintercept = "2020", linetype = "dashed", color = "red") 

print(p18)

Xu hướng: Giảm mạnh từ 2014 đến 2015: Từ mức khoảng 4.5 (giả định từ điểm ban đầu) vào năm 2014, giảm mạnh xuống khoảng 2.2 vào năm 2015. Dao động nhẹ 2015-2021: Duy trì dao động quanh mức 2.0 - 2.8 trong giai đoạn này. Giảm mạnh và gần như bằng 0 từ 2022-2024: Chỉ số này giảm đột ngột và mạnh mẽ xuống mức rất thấp, gần như bằng 0 (khoảng 0.05) từ năm 2022 đến 2024. Sự sụt giảm mạnh mẽ của tỷ lệ vòng quay tài sản từ năm 2022 cho thấy doanh nghiệp đã trở nên cực kỳ kém hiệu quả trong việc sử dụng tài sản của mình để tạo ra doanh thu. #đồ thị 19 : Biểu đồ Histogram về Biên lợi nhuận hoạt động (OPM)

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)

Biểu đồ này cho thấy OPM của doanh nghiệp (trong một khoảng thời gian nhất định, không được chỉ rõ) tập trung vào một số vùng giá trị khác nhau, chứ không phải là một mức ổn định. Vùng 1: OPM âm sâu (khoảng từ -6 đến -4) Tần suất: Có một cột tần suất nhỏ (khoảng 1) trong vùng này. Đường mật độ (đứt khúc màu đỏ) cũng cho thấy một đỉnh nhỏ ở đây. Ý nghĩa kinh tế: Điều này cực kỳ đáng báo động. Nó có nghĩa là trong một số giai đoạn, doanh nghiệp đã hoạt động thua lỗ nặng từ chính hoạt động kinh doanh cốt lõi của mình. Tổng doanh thu không đủ để bù đắp giá vốn hàng bán và các chi phí hoạt động khác. Nguyên nhân có thể: Giá vốn quá cao, chi phí hoạt động tăng đột biến, doanh thu sụt giảm nghiêm trọng, hoặc áp lực cạnh tranh gay gắt. Vùng 2: OPM dương thấp (khoảng từ 1 đến 3) Tần suất: Đây là cột tần suất cao nhất (khoảng 8). Đường mật độ cũng có đỉnh cao nhất ở vùng này. Ý nghĩa kinh tế: Đây là mức OPM phổ biến nhất mà doanh nghiệp đạt được. Doanh nghiệp có lợi nhuận từ hoạt động cốt lõi, nhưng biên lợi nhuận này khá thấp. Điều này cho thấy doanh nghiệp có thể đang gặp khó khăn trong việc tối ưu hóa chi phí hoặc tạo ra giá trị gia tăng cao từ sản phẩm/dịch vụ của mình. Nguyên nhân có thể: Áp lực về giá bán, chi phí sản xuất và hoạt động ở mức cao, thị trường cạnh tranh gay gắt khiến doanh nghiệp không thể đặt biên lợi nhuận cao. Vùng 3: OPM dương cao (khoảng từ 8 đến 10) Tần suất: Có một cột tần suất nhỏ (khoảng 2) trong vùng này. Đường mật độ cũng có một đỉnh nhỏ ở đây. Ý nghĩa kinh tế: Mặc dù ít phổ biến hơn, nhưng doanh nghiệp cũng có những giai đoạn đạt được hiệu quả hoạt động rất tốt, với biên lợi nhuận cao từ hoạt động cốt lõi. Nguyên nhân có thể: Các giai đoạn tăng trưởng doanh thu mạnh, kiểm soát chi phí hiệu quả, hoặc điều kiện thị trường thuận lợi. # Đồ thị 20 : vẽ đồ thị động theo ROS,ROA,ROE

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()
animated_plot <- p20 %>%
  ggplot(aes(x = year, y = Value, color = Metric, group = Metric)) + 
  geom_line(size = 1.2) +
  geom_point(size = 3) +
  geom_text(aes(label = Metric,  
                x = year + 0.5,  
                y = Value),
            data = p20 %>% 
              group_by(Metric) %>% 
              filter(year == max(year)),
            hjust = 0, 
            vjust = 0.5, 
            size = 5,
            show.legend = FALSE) + 
  labs(title = "Xu hướng Hiệu suất Tài chính theo Năm: {frame_time}",
       subtitle = "ROS, ROA, ROE",
       x = "Năm",
       y = "Giá trị (%)",
       color = "Chỉ số") +  
  scale_y_continuous(labels = scales::percent_format(accuracy = 0.01)) +
  theme_minimal(base_size = 14) +
  theme(legend.position = "bottom",
        plot.title = element_text(hjust = 0.5, face = "bold"),
        plot.subtitle = element_text(hjust = 0.5)) +
  transition_reveal(year) +
  view_follow(fixed_y = TRUE)

animated_plot

,rr

```