Giới thiệu Trong báo cáo này, nhóm tôi trình bày những phát hiện từ việc khám phá bộ dữ liệu lợi nhuận ròng của các công ty thuộc các nhóm ngành sản xuất, đo lường 3 biến số ảnh hưởng đế
Trang 1TRƯỜNG ĐẠI HỌC NGAN HANG THANH PHO HO CHi MINH
KHOA KE TOAN — KIEM TOAN
MON: PHAN TICH DU LIEU KE TOAN VOI PYTHON NANG CAO
BAO CAO PHAN TICH LOI NHUAN RONG GIUA CAC CÔNG TY TRONG NGANH SAN XUAT NOI CHUNG NIEM YET TREN THI
TRUONG CHUNG KHOAN VIET NAM Giáo viên: Đặng Đỉnh Tân
Thành viên nhóm:
Lớp: DAT7I1 231 9 L28
Thành phé H6 Chi Minh, Thang 01 2024
Trang 2
BANG PHAN CONG
Mô hình phân loại với hồi quy
logIstic
Phùng Huy Chương | Mô hình phân cụm với K-Means 100%
Trang 3
Mô hình hồi quy tuyến tính: . - 5-5 5252 S3 *x ve eErerkrkerrrrrrrrersrerrrere 4
2.1 Thực hiện phân tích dữ liệu khám phá BS + xxx EEEssseeseeeeses 4 2.2 Xử lý các giá trị ngoại lai các biến độc lập (Outlier) -s-s=es=s=z<zs+s 5
2.3 Trực quan đường hồi quy tuyến tính +2 + +s+s=+s+s+z+zEzkzezsezeetzsexezezsrxrs §
2.4 Trực quan hoá mối tương quan giữa các biẾn -+++s++s+s+sc+eeexeeesreescee 9
2.5 Thực hiện hồi quy tuyến tính với Seikit-learn 5-5-5 <5 +s5s=+<+s+e<<c=s2 10 2.6 Kt 1am o.eeeseceeseseceesesesececsesesececseseseeecseseeececaesesesscaeaesesecatansasecataneeseseeaneeseeeeaneesess 13
M6 hinh phn loai voi hoi quy logistic cccecsscsesesescseescessseseeseescatssenseceeneaseees 13 3.1 Thực hiện phân tich dif liu kham pha eee eeeeeeeee sees eeseeeeeeeeeeeseeeeceseeeeees 13 3.2 Phân tích khám phá số lượng các ngành trong danh mục “Ngành chung” 14
3.3 Phân tích khám phá phân phối của các thuộc tính: .- ¿ 55 «s++s+<£+s£z+s 15
3.4 Thực hiện phân tích mô hình hồi quy logistic voi Seikit-learn - 16 3.5 Thực hiện phân tích mô hình dự đoán - - - - SS + ke vrrrre 20
4.1 Thực hiện phân tích dữ liệu khám phá (EIDA) - - SĂSĂ se 21 4.2 Phân tích khám phá số lượng công ty theo từng nhóm ngành sản xuất chung 22 4.3 Phân tích khám phá phân phối của các biến kiểu số “Tông Doanh Thu”, “Tông
4.4 Xay dung mé hinh phan cum voi K-Means cececssscssccccceenneeeceeeeeeeeeeeeeeeeeeeeeees 24
9150800070 1 444 ,ÔỎ 32
Trang 4LỜI MỞ ĐẦU
1 Giới thiệu
Trong báo cáo này, nhóm tôi trình bày những phát hiện từ việc khám phá bộ dữ liệu lợi nhuận ròng của các công ty thuộc các nhóm ngành sản xuất, đo lường 3 biến số ảnh hưởng đến sự tăng giảm của lợi nhuận ròng cho hơn 290 công ty Doanh nghiệp có hiệu quả kinh doanh cao khi chỉ sô lợi nhuận ròng cao Nắm được lợi nhuận ròng giúp doanh nghiệp biệt được tỷ trọng lợi nhuận trong tông số doanh thu, từ đó đưa ra đánh giá hoạt động kinh doanh là lãi hay lỗ Lợi nhuận ròng là tỷ lệ phần trăm lợi nhuận ròng trên doanh thu, thê hiện khả năng sinh lời từ hoạt động kinh doanh của doanh nghiệp
2 Mục tiêu
Xác định các yếu tô dự đoán trong tập đữ liệu về Lợi nhuận ròng
Xây dựng các mô hình hồi quy, phân loại với hồi quy logistic, phân cụm với K-mean
có thể dự đoán lợi nhuận ròng của các công ty trong ngành sản xuất Từ đó xác định nhóm ngành sản xuất nào có lợi nhuận cao hơn, sau đó đánh giá xu hướng tiêu dùng của người tiêu dùng cho ngành sản xuất nào là nhiều nhất
Giải thích kết quả của mô hình và sử dụng mô hình đã được huấn luyện để suy ra lợi nhuận ròng/doanh thu của các công ty mới
Trang 51, Khám phá dữ liệu
1,1, Khai báo thư viện
In [1]: M # Khai bảo thư viện
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression, LogisticRegression from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score from sklearn.metrics import confusion_matrix, accuracy score, precision_score, recall score, f1 score from sklearn.metrics import classification_report
from sklearn.preprocessing import PolynomialFeatures from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
1.2 Khai pha dữ liệu
In [2]: Dl df = pd.read_csv('D:/PTDLKT/net_profit.csv')
In [3]: M df.head()
§TT Tông Doanh Thu Tông Chi Phí Thuẻ TNDN Lợi Nhuận Ròng Ngành chung Ngành sản xuất cụ thê
0 1 919.55 73.58 18.20 827.77 _ Ngành sản xuất khác Thiét bi, may méc
1 2 871 46 66.07 22.90 782 49 _ Ngành sản xuất khác Thiết bị, máy móc
2 3 894 60 77.79 14.70 802.11 Ngành sân xuất khác Thiết bị, máy móc
3 4 1044.38 81.87 14.21 948.30 Ngành sản xuất khác Thiết bị, máy móc
4 5 1251.89 106.00 15.67 1130.22 Ngành sản xuất khác Thiết bị, máy móc
In [4]: DW df.isnull().sum()
0ut[4]: STT
Tổng Doanh Thu
Tổng Chi Phi Thuế TNDN Loi Nhuan Rong Nganh chung
Bộ dữ liệu này chứa hơn 290 công ty , mỗi công ty có 6 (cột “STT” không có ảnh hưởng
gì đên lợi nhuận ròng) thuộc tính liên quan đên lợi nhuận ròng Bộ dữ liệu này không
có dữ liệu bị thiếu hay bị trùng lặp Vì thế dữ liệu đã sẵn sảng để thực hiện các mô hình
đã đặt ra trước đó
2 Mô hình hồi quy tuyến tính
2.1 Thực hiện phân tích dữ liệu khám phá
Trang 6Lợi Nhuận Rong Nganh chung
dtypes: float64(4), int64(1), object(2)
floate4 float64 object
Tổng Doanh Thu Tổng Chi Phí Thuế NDN Lợi Nhuận Rỏng
103
Dữ liệu được giữ lại các biến “Tông Doanh Thu”, “Tông Chi Phí”, “Thuế TNDN”, “Lợi
Nhuận Ròng” với mô hỉnh hỗi quy tuyến tính theo dạng như sau:
708400 11940000
751.820000 1461.620000
446 434915 3867.750000
Trang 7sns.histplot(data=df, x='Tổng Doanh Thu', kde=True, ax=ax[9]) sns.boxplot(data=df, x='Tổng Doanh Thu', ax=ax[1]) plt show()
II
„e ,
J 7 : - N : z = 7 =
0 cao sức XẾOC 1A ĐA MMC lẠOO 2603 “ ao = wo we wo uo We 2008
Neg Coaeh TH Tow Onan Te
In [51]: fig, ax = plt.subplots(1, 2, figsize = (29, 5))
sns.histplot(data=df, x="Téng Chi Phi’, kde = True, ax=ax[@]) sns.boxplot(data=df, x="Téng Chi Phi’, ax=ax[1])
và sẽ không ảnh hưởng đên kết quả mô hình hôi quy
In [52]: fig, ax = plt.subplots(1, 2, figsize = (20, 5))
sns.histplot(data=df, x="Thué TNDN’, kde = True, ax=ax[@]) sns.boxplot(data=df, x='Thuế TNDN', ax=ax[1])
plt.show()
*
“«
» 1< i | | we đP SP 66 68 6
” : = 7 x * AaS _= = * * : x ie x : = a x
Thuế TRƠN ed TRON,
Kết quả chạy đữ liệu phân tich trén biéu dé Hisplot va Boxplot cho thay bién déc lap
“Thuế TNDN” có các giá trị ngoại lai cao hơn (upper) Chính vì lý do đó phải tiễn hành loại bớt các outliers này vì sẽ có khả năng ảnh hưởng đến kết quả mô hình hồi quy không được chính xác Bên cạnh đó, loại bỏ những điểm đữ liệu outliers là một phần
6
Trang 8quan trọng trong quá trình làm sạch dữ liệu, để bảo đảm những phân tích đầu ra chính xác, từ đó đưa ra những đê xuât và quyết định kinh doanh có thê áp dụng cho các công
ty thuộc ngành sản xuất
Ta thấy trên hình có khá nhiều giá trị lẻ tẻ hướng về bên phải Do vậy ta cần đưa chúng
về giá trị cực tiêu hoặc cực đại của Boxplot
Trong thông kê, một ngoại lệ (outlier) là một điểm đữ liệu khác biệt đáng kê so với các quan sát khác Một ngoại lệ có thê là do sự thay đôi trong phép đo hoặc là lỗi và thông thường được loại trừ khỏi tập đữ liệu bởi nó có thê gây ra vấn đề nghiêm trọng trong phân tích thông kê
Để tìm ngoại lệ, ta dùng thêm khái niệm IQR
IQR (Interquartile Range) là một khái niệm trong thống kê mô tả, dùng đo lường độ phân tán của dữ liệu và được tính toán băng công thức:
IQR = Q3— Q1 Điểm ngoại lệ sẽ là những điểm nhỏ hơn QI—1.5xIQR và Q3+1.5xIQR:
© (QI-1.5xIQR): dai diện cho giá trị nhỏ nhất của tập dữ liệu
e (Q3+1.5xIQR): dai dién cho giá trị lớn nhật của tập dữ liệu
Sau khi cắt dữ liệu theo cực đại và cực tiểu của boxplot ta thấy răng dữ liệu đã đỡ lệch
đi Và ta không còn thấy các điểm ngoại lai năm ngoài cực đại và cực tiêu
Trang 9Dữ liệu được cắt bỏ các giá trị ngoại lai và dùng hàm s#zpe để kiểm tra xem liệu dữ liệu được cắt bỏ outliers hay chưa (từ 296 dòng 269 dòng)
2.3 Trực quan đường hồi quy tuyến tính
Lần lượt tạo đường hỗi quy (Regression Line) giữa biến phụ thuộc với các biến độc lập
đề biêu diễn môi quan hệ tuyên tính giữa chúng
In [83]:
In [58]:
fig, ax = plt subplots(1, 2, figsize=(19, 3)) sns.scatterplot(data-=df, x='Tổng Doanh Thu', y='Lợi Nhuận Ròng', ax=ax[9]) sns.regplot(data=df, x='Tổng Doanh Thu', y='Lợi Nhuận Ròng', ax=ax[1])
Trang 10sns.scatterplot(data=df, x='Thuế TNDN', y='Lợi Nhuận Ròng', ax=ax[@]) sns.regplot(data=df, x='Thuế TNDN', y='Lợi Nhuận Ròng', ax=ax[1])
Qua ba cặp bảng biểu đồ cho thấy trong ba biến độc lập “Tổng Doanh Thu”, “Tổng Chi
Phí”, “Thuế TNDN'” thì “Tông Doanh Thu” là biến có sự đồng nhất và khớp nhất đối
với “Lợi Nhuận Ròng” Trong khi đó biến “Tổng Chi Phí” và “Thuế TNDN” lại đồng
nhất thấp với đường hồi quy
2.4 Trực quan hoá mối tương quan giữa các biến
Mỗi quan hệ tương quan giữa các biên:
Biêu đồ phân tán Scatter mô tả môi liên quan giữa các biên:
Trang 11Tống Doanh Thu
10 20 Thuế TNDN 500
2.5 Thực hiện hồi quy tuyến tính với Scikit-learn
2.5.1 Phan tách dữ liệu
Trang 12((81, 3), (81,))
x_train.shape, y_train.shape ((188, 3), (188,))
Phân tách dữ liệu biến độc lập và biến phụ thuộc thành bộ tập đữ liệu thành đữ liệu huấn
luyện và dữ liệu kiểm tra với Scikit-learn
2.5.2 Chuẩn hoá bộ dữ liệu
X train_normalized = pd.Datarrame({'Tổng Doanh Thu': x_train normalized[:
"Tổng Chi Phi': x train normalized[:,1],
"Thuế TNDNW": x _train_normalized[:,2]})
x _test_normalized = scaler.fit_transform(x test)
¡ test_normalized = scaler.fit_transform(pd.DataFrame({ 'Lợi Nhuận Rông': y_test}))
x test _normalized = pd.DataFrame({ 'Tống Doanh Thu": x test _normalized[ : ,Ø],
"Tong Chi Phí": x_test_normalized[:,1],
"Thuế THDN": x test_normalized[ : ;2]})
x train_normalized.shape, y_train_normalized.shape ((488, 3), (188, 1))
x_test_normalized.shape, y_test_normalized shape
((81, 3), (81, 1))
Chuân hóa bộ đữ liệu huấn luyện và kiểm tra trước khi thực hiện hồi quy
Trong đó bộ dữ liệu huấn luyện gồm có 188 dòng và bộ đữ liệu kiểm tra có 81 dòng
11
Trang 13out[72]:
out [74]:
model_normalized.fit(x_train_normalized, y_train_normalized)
* LinearRegression LinearRegression() ]: model_normalized.score(x_train_normalized, y_train_normalized)
: 1.0
74}: model_normalized.score(x_test_normalized, y_test_normalized)
@.9998650244460858
Xác định mô hình hỏi quy tuyến tính với bộ dữ liệu huấn luyện được chuân hóa và ước
tính các tham số cho mô hình Hàm zmođel_normalized.seore cho thây điềm số về độ
chính xác của mô hỉnh đối với đữ liệu huấn luyện là 1 và đữ liệu kiếm tra là 0,99 Qua
đó cho thay bộ dữ liệu đã được chuẩn hóa có độ chính xác và tin cậy cao
2.5.3 Đánh giá mô hình hồi quy
1n [75]
In [76]:
in [77]:
0ut[77]
: y pred normalized = model normalized.predict(x test _normalized)
MSE = mean_squared_error(y_test_normalized, y pred normalized)
“RMSE': [RMSE],
R2':(R2],
"R2_adj':[R2_adj]})
model _normalized_metrics MSE RMSE MAE R2 R2 adj
0 0000135 0011618 000954 0999865 099986
Kết quả đánh giá của mô hình như sau:
MSE (Sai số bình phương trung bình): Là chỉ số được sử dụng nhiều nhất, là tổng các bình phương chênh lệch giữa giá trị thực thé va gid tri dự đoán chia cho
số điểm dữ liệu
RMSE (Độ lệch sai số bình phương trung bình): Căn bậc hai của MSE MAE (Sai số tuyệt đối trung bình): Là tông các giá trị tuyệt đối chênh lệch giữa giá trị thực tế và giá trị dự đoán chia cho số điểm dữ liệu
=> Kết quả cho thấy các chỉ số này rất nhỏ gần băng 0 => chênh lệch giữa các giá trị thực tế và dự đoán không quá lớn = Không tôn tại quá nhiễu sai sót
R2: Hệ số xác định hay còn được xem là mức độ phù hợp của hàm hồi quy, cho thay mirc dé thay déi của mô hình đối với biến phụ thuộc Nếu R2 nằm trong khoảng từ 0 đến I hoặc giá trị lớn hơn thì mô hình có sự phù hợp tốt hơn giữa giá trị dự đoán so với giá trị thực tế
=> Kết quả cho thấy chỉ số R2 cao đến 0,99 ~ I => Mô hình có sự phù hợp cao
Trang 14Kết luận: Qua bảng kết quả cho thấy mô hình hồi quy có độ tin cậy, chính xác và phù hợp cao là mô hinh tôt (khớp)
2.5.4 Sử dụng mô hình đề dự đoán Lợi Nhuận Ròng cho một công ty với các số liệu Tông Doanh Thu, Tông Chi Phí và Thuế TNDN
Lợi Nhuận Rông = 1.03"Tổng Doanh Thu + -8.1*Tổng Chỉ Phĩ + -0.02"Thuế TNDN + [-9.]
Như vậy ta có thê tính toán lợi nhuận ròng của một công ty bắt kỳ trong ngành sản xuất nói chung với hàm tính với model normalized.coef_ là hệ số độ đốc của đường hồi quy
và model_ normalized.intercept_ hệ sô chặn của mô hình hoi quy:
Thué TNDN trong giai đoạn từ 2015 đến 2020 Kết quả cho thấy sự ảnh hưởng đáng kế
của các biến độc lập này đối với lợi nhuận ròng Tổng Doanh Thu đã đóng vai trò quan trọng trong việc hỉnh thành Lợi Nhuận Ròng, với mức độ ảnh hưởng tương ứng được xác định thông qua các hệ số hồi quy Ngoài ra, Tông Chi Phí và Thuế TNDN cũng đóng góp vào sự biến động của Lợi Nhuận Ròng
Từ những kết quả này, doanh nghiệp có thể đưa ra chiến lược quản lý hiệu quả, tập trung vào việc tối ưu hóa doanh thu, giảm chỉ phí, và đồng thời đảm bảo mức thuế thu nhập doanh nghiệp hợp lý Sự hiểu biết sâu sắc về mô hình hồi quy tuyến tinh nay mang lại cơ hội để dự đoán và điều chỉnh mục tiêu lợi nhuận, từ đó nâng cao khả năng quản
lý và định hình chiến lược phát triển của doanh nghiệp trong tương lai
3 Mô hình phân loại với hồi quy logistic
3.1 Thực hiện phân tích dữ liệu khám phá
Trang 15Data columns (total 7 columns):
# Column Non-Null Count Dtype
1 Tổng Doanh Thu 296 non-null float64
2 Tổng Chi Phí 296 non-null float64
3 Thuế TNDN 296 non-null float64
4 Lợi Nhuận Ròng 296 non-null float64
5 Ngành chung 296 non-null object
6 Ngành sản xuất cụ thể 296 non-null object dtypes: float64(4), int64(1), object(2)
memory usage: 16.3+ KB Entrée [107]: df.isnull().sum()
Out [107]: STT
Téng Doanh Thu
Téng Chi Phi Thuế TNDN Lợi Nhuận Ròng Ngành chung
Entrée [109]: data = df.drop(columns='STT’, inplace=True)
Dữ liệu không tồn tại giá trị bị thiểu hay trùng lặp Các biến được giữ lại bao gồm: Tổng Doanh Thu, Tổng Chi Phí, Thuế TNDN, Lợi Nhuận Ròng, Ngành chung, Ngành sản xuất cụ thê
3.2 Phân tích khám phá số lượng các ngành trong danh mục “Ngành chung”
Trang 16Out[13]: Ngành sản xuất khác 171
Ngành sản xuất hàng gia dụng và thực phẩm đồ uống 125 Name: Ngành chung, dtype: int64
Entrée [110]: df['Ngành chung' ].value_counts().plot(kind='pie', autopct='%.1f%%' )
Out[11@]: «<Axes: ylabel='count'>
Ngành sản xuất khác
Ngành sản xuất hàng gia dụng và thực phẩm đồ uống
Chiếm tỷ trọng cao nhất là “Ngành sản xuất khác” với 57,8% Trong đó số lượng công
ty thuộc “Ngành sản xuât khác” là 171 Theo sau đó là “Ngành sản xuat hang gia dụng
và thực phâm đỗ uông” với 125 công ty, chiêm 42,2% trên tông sô ngành chung 3.3 Phân tích khám phá phân phối của các thuộc tính
fig, ax = plt.subplots(figsize=(19,4))
sns.histplot(df[ 'Tổng Doanh Thu'], bins=38, kde=True)
ax,set_title("Histplot cho Tổng Doanh Thu")
pIt.shox()
D:\anaconda3\Lib\site-packages\seaborn\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version Conve
rt inf values to NaN before operating instead
with pd.option_context("mode.use_inf_as_na', True):
Histplot cho Téng Doanh Thu
1000 1200 1400 Tổng Doanh Thu
Trang 17sns.boxplot(x="Nganh chung", y='Téng Doanh Thu", data=df)
3.4 Thực hiện phân tích mô hình hồi quy logistic với Scikit-learn
Hồi quy Logistic là một phương pháp thông kê được sử dụng để xây đựng các mô hình máy học trong đó biến phụ thuộc có dạng lưỡng phân (nhị phân), các biến độc lập có thê là biến định danh, thứ bậc hoặc khoảng Trong kinh doanh, việc phân tích hồi quy logistic có nhiều ứng dụng có thể liệt kê đến như phân tích rủi ro tín dụng, kiểm soát chất lượng, dự đoán mức độ rủi ro của người mua bảo hiểm nhân thọ trong một khoảng thời gian cu thé
3.4.1 Chuẩn hoá dữ liệu
# Chuẩn hóa đữ Liệu