HO CHi MINH ——ewlaw-—— TRUGNG DAI HOC NGAN HANG THANH PHO HO CHi MINH BAI TAP NHOM CUOI KY Mé6n hoc: KHOA HOC DU LIEU CHO KINH DOANH PHAN THUC HANH —- NHÓM 14 Giảng viên hướng dẫn
Trang 1
NGÂN HÀNG NHÀ NƯỚC VIETNAM BỘ GIÁO DỤC VÀ ĐÀO TẠO
DAI HOC NGAN HANG TP HO CHi MINH
——ewlaw-——
TRUGNG DAI HOC NGAN HANG THANH PHO HO CHi MINH
BAI TAP NHOM CUOI KY Mé6n hoc: KHOA HOC DU LIEU CHO KINH DOANH
PHAN THUC HANH —- NHÓM 14
Giảng viên hướng dẫn: ThS Huỳnh Đỗ Bảo Châu
Sinh viên thực hiện:
Hồ Võ Xuyến Chỉ : 050609211856
Nguyễn Trần Mỹ Chi: 050609211857 Nguyễn Hồng Đào : 050609211882
Trang 2
1) Mô tả về tập dữ liệu và mô tả bài toán cần thực hiện
# import các thư viện hàm đê” phân tích dữ Liệu
import numpy as np
import pandas as pd
def convert_date(x): # vié’t riêng 1 hàm định dạng ngày tháng
# Nạp dữ Liệu vào dataframe
data = pd.read_csv('garments_worker_productivity.csv',index_coL=09)
# Sao chép dữ Liệu gôc cu `a biê“n data ra biên mới
df = data
df = df.iloc[0:1000] #chon đoạn dữ liệu sã sư” dụng la 1000 dòng đâ`u tiên
print (df)
smv \
date
26.16
3.94
11.41
11.41
25.90
30.33
11.61
3.94
2.90
26.66
wip over_time incentive idle time idle men \ date
Trang 31/1/2015 968.0 3660 58 0.0 0
date
[1000 rows x 14 columns]
df.describe()
count 1000.00000 1000.000000 1000.000000 587.0600060
no_of_style_ change \
count 1000.000000 1000.000000 1000.000000 1000.00000
1000 600000
mean 4738.430000 26.56400080 0.860000 0.35700
0.149000
std 3463 450111 31.301369 13 900382 3.17831
0.439309
0.000000
25% 1440 800000 0.000000 0.000000 0.00000
0.000000
Trang 450% 4080 000000 0.000000 0.000000 0.00000
0.000000
75% 6960 000000 50.000000 0.000000 0.00000
0.000000
max 25920.000000 138.000000 300.000000 45 00000
2.000000
count 1000 000000 1000 000000
# M6 ta’ kié’u dit liéu
df.dtypes
###Mô tả ý nghĩa các thuộc tính 01 ngày: Ngày tính bằng MM-DD-YYYY 02 ngày : Ngày
trong tuần 03 quý : Một phần của tháng Một tháng được chia thành bốn quý 04 bộ phận:
Bộ phận liên kết với ví dụ 05 team_no : Liên kết số nhóm với phiên bản 06
no_of_ workers : Số lượng công nhân trong mỗi đội 07 no_of style_ change : Số lần thay đổi kiểu dáng của một sản phẩm cụ thể 08 targeted_productivity : Năng suất mục tiêu do Cơ quan đặt ra cho mỗi nhóm cho mỗi ngày 09 smv: Giá trị phút tiêu chuẩn, đó là thời gian
dang cho sản phẩm 11 over_time : Thể hiện số giờ làm thêm của mỗi đội tính bằng phút
12 khuyến khích : Đại diện cho số tiền khuyến khích tài chính cho phép hoặc thúc đẩy
một quá trình hành động cụ thể 13 idle_time : Lượng thời gian khi quá trình sẳn xuất bị
gián đoạn do một số lý do 14 idle_men : SỐ lượng công nhân nhàn rỗi do gián đoạn sản xuất 15 actual productivity : % năng suất thực tế được cung cấp bởi người lao động Nó
dao động từ 0-1
Trang 52) Tiền xử lý dữ liệu (Data Preprocessing)
# Đô'i tên dữ Liệu
ty':'ActuaLProduct'})
# Xu’ li dữ Liệu khuyê ˆt
from numpy.core.numeric import NaN
print (df1)
smv \
date
26.16
3.94
11.41
11.41
25.90
30.33
11.61
3.94
2.90
26.66
wip over_time incentive idle time idle men \ date
Trang 6date
1/1/2015
1/1/2015
1/1/2015
1/1/2015
1/1/2015
3/1/2015
3/1/2015
3/1/2015
3/1/2015
3/1/2015
no_of_style_ change NumWorkers
[1000 rows x 14 columns]
59
8
30
30
56
58
57
8
8
57
# Bo’ toan bé dong coé dit liéu null
df1.dropna()
date
1/1/2015
26.16
1/1/2015
11.41
1/1/2015
11.41
1/1/2015
25.90
1/1/2015
25.90
3/1/2015
21.82
3/1/2015
26.66
3/1/2015
30.33
3/1/2015
11.61
3/1/2015
26.66
date
quarter department
Quarter1
Quarter1
Quarter1
Quarter1
Quarterl
Quarter1
Quarter1
Quarter1
Quarter1
Quarterl
wip
1108.0
sweing sweing sweing sweing sweing
sweing sweing sweing sweing sweing over_time
7080
day
Thursday Thursday Thursday Thursday Thursday
Sunday Sunday Sunday Sunday Sunday incentive
98
ActualProduct
team
11
12
10
11
.940725 .886500
800570
800570 800382
0.683551 0.682433 0.673083 0.664583 0.600240
targeted_productivity
idle time idle men \
Trang 71/1/2015 968.0
1/1/2015 968.0
1/1/2015 1170.0
1/1/2015 984.0
3/1/2015 1393.0
3/1/2015 1578.0
3/1/2015 254.0
3/1/2015 347.0
3/1/2015 692.0
no_of_style_ change NumWorkers
date
1/1/2015
1/1/2015
1/1/2015
1/1/2015
1/1/2015
3/1/2015
3/1/2015
3/1/2015
3/1/2015
3/1/2015
[587 rows x 14 columns]
3660
3660
1920
6720
5640
6840
1800
0
6840
print ((dfl.describe()).transpose())
team
targeted_productivity
smv
wip
over_time
incentive
idle_time
idle_men
no_of_style_change
NumWorkers
ActualProduct
max
team
12 900000
targeted_productivity
0.800000
smv
54.560068
"30 0.0 "9
ActualProduct
52.0 0.700237
0
0
0
0
0
0
0
0
0
0
count
1000.0 6 1000.0 0 1000.0 15
587.0 1233
1000.0 4738
1000.0 26 1000.0 0 1000.0 0 1000.0 0 1000.0 35 1000.0 0 25%
3.000000 0.700000 3.940000
\
Trang 8wip 783.0006000 1047.000000 1262.000000
23122.000000
25920 000000
138 000000
300.000000
45 000000
2.000000
89 000000
1.120437
= True)
3) Phân tích dữ liệu khám phá (EDA - Exploratory Data Analysis)
Trực quan hoá dữ liệu
# import thu vién ham
import matplotlib.pyplot as plt
import numpy as np
df2= df1.head(106)
X2=[df2.NumWorkers]
print (X2)
Y2=[df2.ActuaLProduct]
print(Y2)
[date
1/1/2015 30
1/1/2015 30
1/1/2015 56
[date
Trang 91/1/2015 0.800570
plt.plot(X2, Y2, color = '#E1006A', linestyle = ' ', label = "X value", marker = 'D', markersize = 8)
plt.title('Do thi bien dong’)
plt.xlabel ('NumWorkes' )
plt.ylabel(‘ActualProduct')
plt.show()
Do thi bien dong
1.0 +
Sd
«Ẳ
0.4 4
Sd
NumWorkes
Trang 105) Huấn luyện mơ hình (Train Model)
Hồi quy tuyến tính với thư viện scikit-learn
# import thư viện hàm cu `a mơ hình
# import module hàm thực hiện chia tách tập dữ Liệu thành 2 phâ`n
from sklearn.model_selection import train_test_split
# import module ham xay dung m6 hinh tuyé’n tinh
from sklearn.linear_model import LinearRegression
# import cdc module hàm tính các chi” sơ“ đánh giá cu ”a mơ hình R^2,
MAE, MSE, MAPE
from sklearn.metrics import r2_score, mean_absolute error,
mean_squared_ error, mean_absolute_ percentage error,
explained variance score
predic = ['NumWorkers','smv','incentive','over_time']
out = 'ActualProduct'
X = dfll[predic]
Y = đf1[out]
train X, test X, train Y, test Y = train test spLit(X, Y, test size =
model_Working = LinearRegression()
model_Working fit(train_X, train_Y)
LinearRegression()
yfit = model_Working.predict(train_X)
r2 = r2_score(train_Y, yfit)
print('Các giá trị hệ sơLhợ quy riéng phan cBa biéb X')
print('Hãng sơLcBEa mơ hình (Tntercept):', modeL_Working.intercept_)
Gia tri R*2 = 0.24713568010795395
Các giá trị hệ sơLhơi quy riêng phân cBa biêh X
Biêh X Hệ sơLhơi quy
3_ over time -8 080006
Hang séLc@a mơ hình (Intercept): 0.7946094017410698
Trang 11Hồi quy tuyến tính với giải thuật giảm độ dốc
# import các thư viện hàm câ`n thiê “t
from skLearn.Linear _modeL import SGDRegressor
from sklearn.pipeline import make pipeLine
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import r2_score, mean_absolute percentage error,
mean_Ssquared_ error, mean_absolute error
outcome= ‘'ActualProduct'
X
Y
# Tach tập dữ Liệu phân tích cu'a biê“n X, Y thành 2 phâ`n: 60% dữ
liệu train mô hình, 40% dữ Liệu test mô hình
train_X, valid_X, train_Y, valid_Y = train test spLit(X, Y, test size
dfl[predictors] # la’y dỡ Liệu cu 'a 4 biê“n độc lap gán vào X
df1[outcome] # lây dữ liệu cu ”a biê“n phụ thuộc gán vào Y
reg = make_pipeline(StandardScaler(), SGDRegressor(max_iter = 1000,
tol = 0.001))
reg.fit(train_X, train_Y)
regressor = reg.steps[1][1]
regressor.coef_})) # in hệ sô“ hô`i quy riêng phâ`n cu`a biê“n
print('Giá trị R^2 =',r2)
Hang séLc@a m6 hinh: [0.74841934]
Giá trị R^2 = 0.24495960513609816
Actual product=0.74629145 — 0.025920* NumW orkers — 0.048929*smv+0.104721*inc entive—0.0:
6) Đánh giá mô hình (Evaluating the model)
# Mô hình 1
# Tính các chi” sô“ đánh giá mô hình huâ n tuyện (với phâ`n dữ Liệu
train)
# Tính giá trị dự báo cu`a Y bằng mô hình với phâ`n dữ Liệu train X
yfit = model_Working.predict(train_X)
# Tính các chi” sô“ đánh giá
“AE = mean_absotute_error(train Y, yfit)
“SE = mean_squared_error(train_Y, yfit)
Trang 12print('`AE =', `AE)
print('R`SE =', R`SE)
“AE = 15.935275064445507
“SE = 391.85901208711437
“APE = 23.405700258939728
R°SE = 19.795429070548444
C:\Users\Admin\anaconda3\lib\site-packages\sklearn\base py:493: FutureWarning: The feature names should match those that were passed
during fit Starting version 1.2, an error will be raised
Feature names must be in the same order as they were in fit
# M6 hinh 2
# Tính các chi” sô“ đánh giá mô hình huâ n tuyện (với phâ`n dữ Liệu test)
# Tính giá trị dự báo cu'`a Y bằng mô hình với phâ`n dữ Liệu test _X
yfit test = modeL Working.predict(test_X)
# Tính các chi” sô“ đánh giá
“AE = mean_absolute _error(test_Y, yfit_test)
“SE = mean_squared_error(test_Y, yfit_test)
APE = mean_absolute_percentage_error(test_Y, yfit_test)
R`SE = np.sqrt(`SE)
print('`SE =', `SE)
print('`APE =', `APE)
print('R`SE =', R`SE)
“AE = 0.11691611016458968
“SE = 0.02455837059308993
“APE = 0.21912857610667566
R°SE = 9.15671110551932793
Đánh giá các mô hình
Mô hình 1:
- _ MAE: là một phương pháp đo lường sự khác biệt (độ chênh lệch giá trị) giữa hai biến liên tục X và Y là hai biến liên tục thể hiện kết quả dự đoán của mô hình và kết quả thực tế độ chênh lệch càng thấp thì càng tốt nên mô hình 1
được xem là chưa tốt vì có giá trị chênh lệch trung bình tương đối cao
( 15.935275064445507)
—- MSE: la gid trị trung bình của bình phương sai số (hàm mất mát), là sự khác
biệt giữa các giá trị được mô hình dự đoán và giá trị thực nên mô hình 1
được xem là chưa tốt vì có giá trị trung bình của bình phương sai sỐ tương
Trang 13- MAPE: là phân trăm sai số trung bình tuyệt đối, là thước đo thống kê mức
độ chính xác của hệ thống dự báo nên mô hình 1 được xem là chưa tốt vì có
phần trăm sai số trung bình tuyệt đối tương đối cao (23.40570025893973)
- RMSE: 1a can bac hai ca gid trị trung bình các của các sai số bình phương (MSE) Thông th ường, ta th ườn dMng chỉ số này để xác định giá trị chênh
lệch trung bình giữa giá dự đoán và giá trị test ban đầu nên mô hình 1 được
xem là chưa tốt vì có căn bậc hai của giá trị trung bình các của các sai số bình
phương tương đối cao (19.795429070548444)
Mô hình 2:
- MAE: mô hình 2 được xem là tốt vì có giá trị chênh lệch trung bình tương đối
thấp (0.11691611016458928)
- MSE: mô hình 2 được xem là tốt vì có giá trị trung bình của bình phương sai
số tương đối thấp (0.02455837059308984)
- MAPE: mô hình 2 được xem là tốt vì có phần trăm sai số trung bình tuyệt đối tương đối thấp (0.21912857610667494)
- RMSE: mô hình 2 được xem là tốt vì có giá trị trung bình các của các sai số bình phương tương đối thấp (0.15671110551932763)
So sánh các mô hình
MAE (1) > MAE (2) nên mô hình 2 tốt hơn (15.935275064445507 >
0.11691611016458925)
MSE (1) > MSE (2) nên mô hình 2 tốt hơn (391.8590120871145 >
0.02455837059308984)
MAPE (1) > MAPE (2) nên mô hình 2 tốt hơn (23.40570025893973 >
0.21912857610667494)
RMSE (1) > RMSE (2) nên mô hình 2 tốt hơn (19.795429070548444 >
0.15671110551932763)
R^2 (1) > R^2 (2) nên mô hình 1 tốt hơn (0.24713568010795384 >
0.24668072096321714) => Mô hình 2 tốt hơn mô hình 1
Phân tích các kết quả cAa mô hình
Mô hình 1:
- _ Giữ tất cả các tính năng khác không đổi, khi tăng 1 đơn vị trong cột
Numworkers thì Actual Product sẽ giảm 0.001060 (don vi)
- Gitr tat ca cdc tính năng khác không đổi, khi tăng 1 đơn vị trong cột smv thì
Actual Product sé giam 0.004910 (don vi)
- _ Giữ tất cả các tính năng khác không đổi, khi tăng 1 đơn vị trong c6t incentive
thi Actual Product sé tang 0.003369 (don vi)
- Gitr tat ca cdc tinh nang khac khong d6i, khi tang 1 đơn vị trong cột
over_time thi Actual Product sé giam 0.000006 (don vi)
Mô hình 2:
- _ Giữ tất cả các tính năng khác không đổi, khi tăng 1 đơn vị trong cột
Trang 14- _ Giữ tất cả các tính năng khác không đổi, khi tăng 1 đơn vị trong cột smv thì
Actual Product sé giam 0.048929 (don vi)
- _ Giữ tất cả các tính năng khác không đổi, khi tăng 1 đơn vị trong c6t incentive
thi Actual Product sé tang 0.104721 (don vi)
- Gitr tat ca cdc tinh nang khac khong d6i, khi tang 1 don vi trong cét
over_time thi Actual Product sé giam 0.021362 (don vi)
7) T6i wu héa tham s6 mé hinh (Performing Hyper Parameter Tuning
on the model)
8) Diễn giải kết quả từ mô hình (Interpreting the model results)