You are on page 1of 76

BÁO CÁO TIỂU LUẬN

Tên môn học : Thiết kế kiến trúc và phần mềm


Lớp: E17CN2
Tên sinh viên : Lê Quang Đạo
Mã sinh viên : B17DCCN103
Tên đề tài: Thiết kế hệ thống BoEC

1
MỤC LỤC

Mục lục
Mục lục .................................................................................................2
Lời cam kết ........................................................................................... 3
I. Giới thiệu hệ thống BoEC.......................................................... 4
II. Phân tích hệ thống ......................................................................5
III. Thiết kế hệ thống ......................................................................34
IV. Lập trình.................................................................................... 40
V. Tối ưu hóa cơ sở dữ liệu........................................................... 47
VI. Phân tích ý kiến và hành vi khách hàng ................................ 50
VII. Kết luận ..................................................................................... 72

2
LỜI CAM KẾT

Tôi – Lê Quang Đạo – cam đoan tài liệu này do cá nhân tự chỉnh sửa, cập
nhật từ bài tập nhóm của mình. Các biểu đồ, code tôi tự làm thêm đều có
chú thích rõ ràng. Nếu copy từ các bạn, tôi không những tự thấy hổ thẹn
mà còn xấu hổ với bạn bè, thầy giáo và ngôi trường PTIT yêu quý của tôi.
Tôi xin hoàn toàn chịu trách nhiệm với dù chỉ một sao chép vi phạm quy
chế của giảng viên và nhà trường.
Hà Nội, ngày 19 tháng 06 năm 2021
Sinh viên
Lê Quang Đạo

3
I. Giới thiệu hệ thống BoEC
Hệ thống quản lý bán hàng BoEC với nhiều mặt hàng ( Book , Clothes ,
Electronics ) dành cho nhân viên bán hàng hoặc quản lý cửa hàng , khách
hàng . Khảo sát các trang thương mại điện tử để xác định yêu cầu chức
năng , hệ thống cho phép khách hàng comment và rating sau khi mua sản
phẩm .
Hệ thương mại điện tử BoEC cho phép Nhân viên nhập kho, Nhân viên
kinh doanh, Nhân viên bán hàng, Nhân viên hệ thống, Nhân viên
marketing và Khách hàng (là người dùng hoặc khách vãng lai) sử dụng:
- Người dùng: có thể đăng nhập, đăng xuất, sửa thông tin tài khoản.
- Nhân viên nhập kho: là người dùng, có thể thực hiện Quản lý kho
hàng.
- Nhân viên kinh doanh: là người dùng, có thể Quản lý các mặt hàng
trên web và Quản lý các khuyến mại.
- Nhân viên bán hàng: là người dùng, có thể Quản lý đơn hàng, Xử lý
các vấn đề khách hàng.
- Nhân viên hệ thống: là người dùng, có thể Quản lý tài khoản truy cập
hệ thống.
- Nhân viên marketing: là người dùng, có thể Quản lý marketing.
- Khách hàng: có thể là người dùng hoặc khách vãng lai, có thể Đăng ký
làm người dùng, Phản hồi và Đặt hàng.
Hệ thống đảm bảo các chức năng:
- Quản lý kho hàng: Nhân viên nhập kho có thể Tìm kiếm hàng, thêm,
sửa, xóa mặt hàng trong kho.
- Quản lý các mặt hàng trên web: Nhân viên kinh doanh có thể tìm
kiếm, thêm, sửa, xóa mặt hàng.
- Quản lý khuyến mại: Nhân viên kinh doanh có thể thêm, sửa, xóa
khuyến mại.

4
- Quản lý đơn hàng: Nhân viên bán hàng có thể cập nhật, chuyển bộ
phận, xác nhận đơn và thống kê đơn hàng.
- Xử lý các vấn đề khách hàng: Nhân viên bán hàng có thể đọc ý kiến,
trả lời bình luận, trả lời tin nhắn của khách hàng.
- Quản lý tài khoản truy cập hệ thống: Nhân viên hệ thống có thể
thêm, sửa, xoá tài khoản người dùng.
- Quản lý marketing: Nhân viên marketing có thể xem thống kê thu chi
của các chiến dịch marketing, xem thông số cụ thể và tạo chiến dịch
marketing mới.
- Đăng ký là người dùng: Khách hàng vãng lai có thể đăng ký trở thành
thành viên của hệ thống thuận tiện hơn cho việc mua bán.
- Phản hồi: Khách hàng có thể nhắn tin phản hồi, hoặc bình luận, đánh
giá sao sau khi mua đặt hàng.
- Đặt hàng: Khách hàng có thể xác nhận việc đặt, thêm hàng vào giỏ,
tìm kiếm mặt hàng, xem giỏ hàng và thực hiện việc thanh toán hoặc huỷ
đặt và thêm vào wishlist.
II. Phân tích
1. Khảo sát các trang thương mại điện tử
Trang thương mại điện tử : Shopee.vn
Giao diện chính :

5
Các chức năng chính :
S Tên Giao diện mô tả
T
T
chức
năng
1 Tìm
kiếm
mặt
hàng

2 Cart

6
3 Mua
ngay

4 Đánh
giá sản
phẩm

7
5 Chat
với
Shop

6 Xem
Shop

8
7 Sắp xếp

8 Giao
diện
profile

9 Rating

9
2. Xác định các chức năng
Tác nhân :
- Nhân viên bán hàng : Xử lý đơn hàng , phản hồi khách hàng
- Nhân viên nhập kho : Quản lý kho hàng
- Quản lý : Quản lý các mặt hàng trên web , các sự kiện khuyến mãi , quản
lý tài khoản truy cập hệ thống
- Nhân viên Marketing : Quản lý Marketing
- Khách hàng : Đăng ký làm người dùng , sử dụng trang Web
Module Chức năng :
- Thêm sản phẩm vào kho hàng : Nhân viên nhập kho đăng nhập vào hệ
thống – Hệ thống hiển thị giao diện của nhân viên nhập kho – Nhân viên
chọn them sản phẩm vào kho hàng – Hệ thống hiển thị giao diện thêm sản
phẩm – Nhân viên nhập thông tin sản phẩm cần thêm và ấn nút OK – Hệ
thống thông báo thêm thành công và quay lại giao diện của người quản lý
kho
- Sửa sản phẩm ở kho hàng : Nhân viên nhập kho đăng nhập vào hệ
thống – Hệ thống hiển thị giao diện của nhân viên nhập kho – Nhân viên
chọn tìm kiếm sản phẩm – Hệ thống hiển thị giao diện tìm kiếm – Nhân
viên nhập tên sản phẩm cần sửa và ấn Tìm kiếm – Hệ thống hiển thị danh
sách sản phẩm khớp với từ khóa cần tìm kiếm – Nhân viên chọn nút Sửa
ở trên sản phẩm cần sửa – Hệ thống hiển thị thông tin sản phẩm cần sửa
lên các Textfield – Nhân viên thay đổi các thông số và ấn Update – Hệ
thống thông báo sửa thành công
- Xóa sản phẩm ở kho hàng : Nhân viên nhập kho đăng nhập vào hệ
thống – Hệ thống hiển thị giao diện của nhân viên nhập kho – Nhân viên
chọn tìm kiếm sản phẩm – Hệ thống hiển thị giao diện tìm kiếm – Nhân
viên nhập tên sản phẩm cần sửa và ấn Tìm kiếm – Hệ thống hiển thị danh
sách sản phẩm khớp với từ khóa cần tìm kiếm – Nhân viên chọn Xóa ở

10
trên sản phẩm – Hệ thống hiển thị thông báo confirm – Nhân viên xác
nhận OK – Hệ thống thông báo xóa thành công
- Xem toàn bộ danh sách sản phẩm trên Kho : Nhân viên nhập kho đăng
nhập vào hệ thống – Hệ thống hiển thị giao diện của nhân viên nhập kho
– Nhân viên chọn xem tất cả - Hệ thống hiển thị tất cả sản phẩm
- Các chức năng như Xóa , Sửa , Thêm , Tìm kiếm ,Xem tất cả , Thêm
giá khuyến mãi sản phẩm trên web thì thao tác tương tự như trên
- Duyệt đơn hàng : Nhân viên bán hàng đăng nhập vào hệ thống – hệ
thống hiển thị giao diện của nhân viên bán hàng – Nhân viên bán hàng
chọn Đơn hàng chờ xét duyệt – Giao diện hiển thị danh sách các đơn
hàng đang chờ xét duyệt - Nhân viên chọn mục tìm kiếm – Giao diện tìm
kiếm hiện ra – Nhân viên nhập tên đơn hàng hoặc mã đơn hàng rồi ấn tìm
kiềm – Hệ thông trả lại danh sách kết quả - Nhân viên click chọn đơn
hàng cần duyệt và ấn duyệt ( trước đó nhân viên phải gọi điện thoại cho
khách hàng để xác nhận lại trước khi ấn xét duyệt ) – Hệ thống thông báo
thành công ( Chức năng này chỉ dùng cho khách hàng thanh toán bằng
tiền mặt , khách hàng thanh toán qua Visa hoặc Airpay thì hệ thống tự xét
duyệt )
- Xem các đơn hàng đang được vẩn chuyển : Nhân viên bán hàng đăng
nhập vào hệ thống – hệ thống hiển thị giao diện của nhân viên bán hàng –
Nhân viên chọn đơn hàng đang được vận chuyển – Giao diện hiển thị các
đơn hàng đang được vẩn chuyển – Nhân viên chọn tìm kiếm – Giao diện
tìm kiếm hiển ra – Nhân viên nhập mã đơn hàng hoặc tên đơn hàng rồi ấn
Tìm kiếm – Hệ thống hiển thị danh sách đơn hàng ứng với từ khóa tìm
kiếm
- Xem các đơn hàng đã được giao thành công : Thao tác tương tư như
xem các đơn hàng đang được vẩn chuyển
- Xem các đơn hàng bị hủy : Thao tác tương tự như xem các đơn hàng
đang được vẩn chuyển

11
- Xóa đơn hàng : Nhân viên bán hàng đăng nhập vào hệ thống – hệ thống
hiển thị giao diện của nhân viên bán hàng – Nhân viên bán hàng chọn
Đơn hàng chờ xét duyệt – Giao diện hiển thị danh sách các đơn hàng
đang chờ xét duyệt - Nhân viên chọn mục tìm kiếm – Giao diện tìm kiếm
hiện ra – Nhân viên nhập tên đơn hàng hoặc mã đơn hàng rồi ấn tìm kiềm
– Hệ thông trả lại danh sách kết quả - Nhân viên chọn Hủy đơn hàng cần
xóa trên danh sách đơn hàng – Hệ thống hiển thị thông báo xác nhận –
Nhân viên xác nhân hủy đơn hàng – Hệ thống thông báo thành công
- Xem thống kê sản phẩm được mua nhiều : Nhân viên quản lý đăng
nhập vào hệ thống – hệ thống hiển thị giao diện nhân viên quản lý – Nhân
viên quản lý chọn xem thống kê – Giao diện xem thống kê hiện lên –
Nhân viên chọn xem thống kê sản phẩm – Hệ thống hiển thị giao diện
xem thống kê sản phẩm – nhân viên nhập các mốc thời gian và ấn Xem –
Hệ thống hiển thị danh sách sản phẩm và số lần mua trong khung thời
gian thống kê
- Xem thống kê doanh thu theo thời gian : Nhân viên quản lý đăng nhập
vào hệ thống – hệ thống hiển thị giao diện nhân viên quản lý – Nhân viên
quản lý chọn xem thống kê – Giao diện xem thống kê hiện lên – Nhân
viện chọn xem thống kê doanh thu – Giao diện xem thống kê doanh thu
hiện lên – Nhân viên chọn xem thống kê doanh thu theo thời gian – Hệ
thống hiện thị giao diện xem thống kê doanh thu theo thời gian – Nhân
viên nhập các mốc thời gian cần xem và ấn xem – Hệ thống hiển thị
doanh thu từng ngày theo mốc thời gian
- Thêm voucher khuyến mãi : Nhân viên quản lý đăng nhập vào hệ thống
– Hệ thống hiển thị giao diện – Nhân viên chọn quản lý voucher- Giao
diện quản lý voucher hiện ra – Nhân viên chọn thêm voucher – Giao diện
them voucher hiện ra – Nhân viên nhập thông tin voucher mới vào và ấn
OK – Hệ thống thông báo them voucher thành công

12
- Sửa voucher : Nhân viên quản lý đăng nhập vào hệ thống – Hệ thống
hiển thị giao diện – Nhân viên chọn quản lý voucher- Giao diện quản lý
voucher hiện ra – Nhân viên chọn tìm kiếm voucher – Giao diện tìm kiếm
hiện ra – Nhân viên nhập tên voucher và ấn tìm kiếm – Hệ thống hiển thị
danh sách voucher – Nhân viên chọn sửa voucher – Hệ thống hiển thị
thông tin voucher vào các textfield – Nhân viên sửa thông tin và xác nhận
OK – Hệ thống thông báo sửa thành công
- Xóa voucher : Nhân viên quản lý đăng nhập vào hệ thống – Hệ thống
hiển thị giao diện – Nhân viên chọn quản lý voucher- Giao diện quản lý
voucher hiện ra – Nhân viên chọn tìm kiếm voucher – Giao diện tìm kiếm
hiện ra – Nhân viên nhập tên voucher và ấn tìm kiếm – Hệ thống hiển thị
danh sách voucher – Nhân viên chọn xóa voucher – Hệ thống hiển thị
thông báo xác nhận – Nhân viên xác nhận thông báo – Hệ thống hiển thị
thông báo xóa thành công
- Sắp xếp voucher theo sản phẩm :
Nhân viên quản lý đăng nhập vào hệ thống – Hệ thống hiển thị giao diện
– Nhân viên chọn quản lý voucher- Giao diện quản lý voucher hiện ra –
Nhân viên chọn (Book , Clothes , Electronics ) trên thành Spiner và ấn
sắp xếp – Hệ thống hiển thị lại danh sách theo Tag đã chọn .
- Đăng ký người dùng : ở giao diện đăng nhập của trang web , khách hàng
chọn đăng ký – Giao diện đăng ký hiện ra – Khách hàng nhập thông tin
cá nhân và ấn đăng kí – Hệ thống thông báo đăng ký thành công và tự
động đăng nhập cho khách hàng
- Thêm sản phẩm vào Cart : Khách hàng đăng nhập vào trang Web –
giao diện web hiện ra – Khách hàng nhập tên sản phẩm cần mua trên
thanh tìm kiếm và ấn tìm kiếm – Giao diện tìm kiếm hiện ra với danh
sách sản phẩm ứng với từ khóa – Khách hàng click ‘Add to Cart’ – Hệ
thống hiển thị thông báo thêm thành công

13
- Xóa sản phẩm ở Cart : Khách hàng đăng nhập vào trang Web – giao
diện web hiện ra – Khách hàng click My Cart – Giao diện cart hiện ra
gồm danh sách sản phẩm đã thêm – Khách hàng chọn sản phẩm cần xóa
và ấn xóa – hệ thống thông báo xóa thành công
- Thanh toán sản phẩm ở Cart : Khách hàng đăng nhập vào trang Web –
giao diện web hiện ra – Khách hàng click My Cart – Giao diện cart hiện
ra gồm danh sách sản phẩm đã thêm- Khách hàng chọn ‘Mua hàng ’ –
Giao diện thanh toán hiện ra – Khách hàng chọn phương thức thanh toán
và mã voucher nếu có và ấn đặt hàng – Giao diện hiện thông báo đặt hàng
thành công ( Nếu khách hàng chọn thanh toán qua Visa hoặc Airpay còn
nếu thanh toán bằng Cash thì xác hiện ra thông báo đợi xác nhận )
- Comment và rating sản phẩm : Khách hàng đăng nhập vào trang Web –
giao diện web hiện ra – Khách hàng chọn vào My profile – Giao diện
Profile hiện ra – Khách hàng chọn đơn hàng – Giao diện đơn hàng hiện ra
– Khách hàng chọn đơn hàng đã mua – Giao diện đơn hàng đã mua hiện
ra – Khách hàng chọn vào đánh giá vào đơn hàng mà khách hàng muốn
đánh giá – Giao diện đánh giá hiện ra – Khách hàng chọn rating cho sản
phẩm kèm Comment ( Chỉ có sản phẩm mình đã mua mới được đánh giá
chứ không mua mà đòi đánh giá sẽ có những shop đối thủ vào comment
dìm hàng ) và ấn OK – Hệ thống thông báo và quay lại giao diện đơn
hàng
- Phản hồi khách hàng : Nhân viên bán hàng đăng nhập vào hệ thống – hệ
thống hiển thị giao diện của nhân viên bán hang – Nhân viên chọn phản
hồi của khách hàng – Hệ thống hiển thị danh sách phản hồi của khách
hàng ( được sắp xếp theo date – có thể thay đổi theo Sản phẩm ) – Nhân
viên chọn 1 phản hồi của khách hàng – Hệ thống hiển thị giao diện phản
hồi của nhân viên – Nhân viên nhập phản hồi và ấn Submit – Hệ thống
thông báo thành công

14
- Quản lý marketing : Nhân viên marketing chọn Quản lý marketing. Hệ
thống hiển thị giao diện gồm xem thống kê thu chi quảng cáo, xem các
chỉ số marketing, lên lịch và tạo chiến dịch marketing mới. Nhân viên
marketing chọn xem thống kê hoặc xem các chỉ số marketing để xem các
thống kê cụ thể liên quan; chọn tạo chiến dịch mới để chuyển hướng đến
các trang quản lý chiến dịch quảng cáo.
3. Xây dựng biểu đồ
Biểu đồ Use-case

Scenario
Tên use-case Người dùng đăng nhập
Tác nhân Người dùng hệ thống
Mục đích Cho người dùng đăng nhập vào hệ thống
Tiền điều kiện Người dùng đã có tài khoản và mật khẩu hệ thống
Mô tả các bước 1) Người dùng truy cập vào hệ thống
2) Hệ thống hiển thị giao diện

15
3) Người dùng nhập tài khoản và mật khẩu của
mình
4) Hệ thống kiểm tra tính hợp lệ của tài khoản và
mật khẩu và hiển thị giao diện hệ thống tương
ứng với phần quyền của tài khoản

Hậu điều kiện Người dùng đăng nhập thành công


Ngoại lệ 4.1Hệ thống thông báo tài khoản hoặc mật khẩu nhập
sai yêu cầu người dùng nhập lại

Tên use-case Thêm sản phẩm vào kho hàng


Tác nhân Nhân viên quản lý kho hàng
Mục đích Cho người quản lý them sản phẩm vào kho hàng
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên quản lý chọn thêm sản phẩm
2. Hệ thống hiển thị giao diện
3. Người dùng nhập các thông tin của sản phẩm và
số lượng sản phẩm và ấn Thêm
4. Hệ thống kiểm tra sản phẩm và thông báo thêm
thành công và quay về giao diện chính

Hậu điều kiện Người dùng thêm thành công


Ngoại lệ 4.1. Hệ thống thông báo sản phẩm đã tồn tại yều
cầu nhân viên nhập lại

Tên use-case Update sản phẩm ở kho hàng

16
Tác nhân Nhân viên quản lý kho hàng
Mục đích Cho người quản lý them sản phẩm vào kho hàng
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên quản lý chọn tìm kiếm sản phẩm
2. Hệ thống hiển thị giao diện
3. Người dùng nhập tên sản phẩm và ấn tìm kiếm
4. Hệ thống tìm kiếm sản phẩm ứng với từ khóa và
hiển thị 1 danh sách sản phẩm
5. Nhân viên chọn 1 sản phẩm và ấn Update
6. Hệ thống hiển thị giao diện sửa sản phẩm
7. Nhân viên sửa sản phẩm và ấn Update
8. Hệ thống kiểm tra tính hợp lệ và thông báo sửa
thành công

Hậu điều kiện Người dùng sửa thành công


Ngoại lệ 8.1. Hệ thống thông báo sản phẩm đã tồn tại yều
cầu nhân viên nhập lại
8.2. Hệ thống thông báo không được để trống
Loại sản phẩm

Tên use-case Xóa sản phẩm ở kho hàng


Tác nhân Nhân viên quản lý kho hàng
Mục đích Cho người quản lý kho hàng xóa sản phẩm khỏi kho
hàng
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên quản lý chọn xóa sản phẩm
2. Hệ thống hiển thị giao diện

17
3. Người dùng nhập tên sản phẩm vào ô tìm kiếm
và ấn tìm kiếm
4. Hệ thống hiện thị danh sách kết quả ứng với
danh sách tìm kiếm
5. Nhân viên chọn sản phẩm cần xóa và ấn Xóa
6. Hệ thống hiển thị thông báo xác nhận
7. Nhân viên xác nhận ấn OK
8. Hệ thống thông báo xóa thành công

Hậu điều kiện Người dùng thêm thành công


Ngoại lệ

Tên use-case Duyệt đơn hàng


Tác nhân Nhân viên bán hàng
Mục đích Nhân viên duyệt đơn hàng
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên bán hàng chọn quản lý đơn hàng
2. Hệ thống hiển thị giao diện quản lý đơn hàng
3. Nhân viên chọn đơn hàng đang chờ duyệt
4. Hệ thống hiển thị giao diện
5. Nhân viên nhập tên đơn hàng và ấn tìm kiếm
6. Hệ thống hiện thị danh sách đơn hàng ứng với
từ khóa
7. Nhân viên chọn đơn hàng cần duyệt và ấn duyệt
8. Hệ thống thông báo duyệt đơn hàng thành công

Hậu điều kiện Nhân viên duyệt đơn hàng thành công

18
Ngoại lệ

Tên use-case Hủy đơn hàng


Tác nhân Nhân viên bán hàng
Mục đích Nhân viên hủy đơn hàng
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên bán hàng chọn quản lý đơn hàng
2. Hệ thống hiển thị giao diện quản lý đơn hàng
3. Nhân viên chọn đơn hàng đang chờ duyệt
4. Hệ thống hiển thị giao diện
5. Nhân viên nhập tên đơn hàng và ấn tìm kiếm
6. Hệ thống hiện thị danh sách đơn hàng ứng với
từ khóa
7. Nhân viên chọn đơn hàng cần duyệt và ấn hủy
8. Hệ thống thông báo duyệt đơn hàng thành công

Hậu điều kiện Nhân viên hủy đơn hàng thành công
Ngoại lệ

Tên use-case Xem chi tiết đơn hàng đang vận chuyển
Tác nhân Nhân viên bán hàng
Mục đích Nhân viên xem danh sách đơn hàng đang vận chuyển
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên bán hàng chọn quản lý đơn hàng
2. Hệ thống hiển thị giao diện quản lý đơn hàng
3. Nhân viên chọn đơn hàng đang vận chuyển

19
4. Hệ thống hiển thị giao diện danh sách đơn hàng
đang được vẩn chuyển
5. Nhân viên nhập tên đơn hàng và ấn tìm kiếm
6. Hệ thống hiện thị danh sách đơn hàng ứng với
từ khóa
7. Nhân viên click và đơn hàng cần xem
8. Hệ thống hiển thị chi tiết đơn hàng cho nhân
viên

Hậu điều kiện Nhân viên xem chi tiết đơn hàng thành công
Ngoại lệ

Tên use-case Xem chi tiết đơn hàng đã giao thành công
Tác nhân Nhân viên bán hàng
Mục đích Nhân viên duyệt đơn hàng
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên bán hàng chọn quản lý đơn hàng
2. Hệ thống hiển thị giao diện quản lý đơn hàng
3. Nhân viên chọn đơn hàng đã giao
4. Hệ thống hiển thị giao diện
5. Nhân viên nhập tên đơn hàng và ấn tìm kiếm
6. Hệ thống hiện thị danh sách đơn hàng ứng với
từ khóa
7. Nhân viên double click vào đơn hàng cần xem
8. Hệ thống hiển thị giao diện gồm chi tiết đơn
hàng cần xem

20
Hậu điều kiện Nhân viên xem chi tiết đơn hàng đã giao
Ngoại lệ

Tên use-case Xem thống kê sản phẩm được mua nhiều


Tác nhân Nhân viên quản lý
Mục đích Xem thống kê sản phẩm được mua nhiều
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên chọn xem thống kê
2. Hệ thống hiển thị giao diện xem thống kê
3. Nhân viên xem thống kê sản phẩm
4. Hệ thống hiển thị giao diện
5. Nhân viên nhập các mốc thời gian và ấn xem
thống kê
6. Hệ thống hiện thị danh sách sản phẩm và số lượt
mua trong mốc thời gian được sắp xếp theo số
lượt mua giảm dần
Hậu điều kiện Nhân viên xem thống kê thành công
Ngoại lệ

Tên use-case Xem thống kê doanh thu theo thời gian


Tác nhân Nhân viên quản lý
Mục đích Xem thống kê doanh thu theo mốc thời gian cụ thể
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên chọn xem thống kê
2. Hệ thống hiển thị giao diện xem thống kê
3. Nhân viên xem thống kê doanh thu

21
4. Hệ thống hiển thị giao diện
5. Nhân viên chọn xem thống kê doanh thu theo
thời gian
6. Hệ thống hiển thị giao diện xem thống kê doanh
thu theo thời gian
7. Nhân viên nhập mốc thời gian cần tìm và ấn
Xem
8. Hệ thống hiển thị danh sách doanh thu các ngày
trong mốc thời gian
Hậu điều kiện Nhân viên xem thống kê thành công
Ngoại lệ

Tên use-case Thêm voucher


Tác nhân Nhân viên quản lý
Mục đích Thêm voucher
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên chọn quản lý voucher
2. Hệ thống hiển thị giao diện ql voucher
3. Nhân viên chọn thêm voucher
4. Hệ thống hiển thị giao diện thêm voucher
5. Nhân viên nhập thông tin voucher và ấn Thêm
6. Hệ thống kiểm tra tính hợp lệ của voucher và
thông báo thêm thành công
Hậu điều kiện Thêm voucher thành công
Ngoại lệ 6.1. Hệ thống thông báo voucher đã tồn tại và yêu
cầu nhập lại

22
Tên use-case Update Voucher
Tác nhân Nhân viên quản lý
Mục đích Update voucher
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Nhân viên chọn quản lý voucher
2. Hệ thống hiển thị giao diện ql voucher
3. Nhân viên chọn Update Voucher
4. Hệ thống hiển thị giao diện update voucher
5. Nhân viên nhập tên voucher và tìm kiếm
6. Hệ thống hiện thị danh sách voucher ứng với từ
khóa tìm kiếm
7. Nhân viên click và voucher cần update
8. Hệ thống hiển thị thông tin voucher lên các
input text
9. Nhân viên thay đổi thông tin và ấn xác nhận
10.Hệ thống thông báo update thành công
Hậu điều kiện Update voucher thành công
Ngoại lệ 10.1. Hệ thống thông báo tên voucher không được
để trống
10.2. Hệ thống thông báo %discount không được
để trống

Tên use-case Xóa Voucher


Tác nhân Nhân viên quản lý
Mục đích Xóa
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công

23
Mô tả các bước 1. Nhân viên chọn quản lý voucher
2. Hệ thống hiển thị giao diện ql voucher
3. Nhân viên chọn Xóa Voucher
4. Hệ thống hiển thị giao diện update voucher
5. Nhân viên nhập tên voucher và tìm kiếm
6. Hệ thống hiện thị danh sách voucher ứng với từ
khóa tìm kiếm
7. Nhân viên click và voucher cần xóa
8. Hệ thống hiển thị thông báo xác nhận xóa
9. Nhân viên xác nhận và ấn OK
10.Hệ thống thông báo xóa thành công
Hậu điều kiện Xóa voucher thành công
Ngoại lệ

Tên use-case Thêm sản phẩm vào Cart


Tác nhân Khách hàng
Mục đích Thêm sản phẩm vào Cart thành công
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Khách hàng nhập tên sản phẩm cần mua và ấn
tìm kiếm trên giao diện
2. Hệ thống hiển thị giao diện tìm kiếm và kết quả
tìm kiếm
3. Khách hàng chọn ‘Add to Cart’ trên sản phẩm
minh cần mua
4. Hệ thống hiển thị thêm thành công
Hậu điều kiện Thêm vào Cart thành công
Ngoại lệ

24
Tên use-case Xóa sản phẩm khỏi Cart
Tác nhân Khách hàng
Mục đích Xóa sản phẩm khỏi Cart
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Khách hàng chọn My cart trên giao diện chính
2. Hệ thống hiển thị giao hiện Cart
3. Khách hàng chọn Remove ở sản phầm mà minh
muốn xóa bỏ
4. Hệ thống hiển thị thông báo thành công
Hậu điều kiện Xóa sản phẩm khỏi Cart thành công
Ngoại lệ

Tên use-case Order sản phẩm


Tác nhân Khách hàng
Mục đích Order sản phẩm thành công
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Khách hàng chọn My cart trên giao diện chính
2. Hệ thống hiển thị giao hiện Cart
3. Khách hàng chọn Mua hàng ở giao diện Cart
4. Hệ thống hiển thị giao diện Order
5. Khách hàng nhập Voucer ( Nếu có ) và Chọn
phương thức thanh toán và ấn Thanh toán
6. Hệ thống hiển thị thông báo thành công
Hậu điều kiện Order sản phẩm thành công
Ngoại lệ

25
Tên use-case Đăng ký làm hội viên
Tác nhân Khách hàng
Mục đích Đăng ký làm hội viên
Tiền điều kiện Người dùng đã có tài khoản và mật khẩu định đăng ký
Mô tả các bước 1. Khách hàng chọn Đăng ký trên giao diện đăng
nhập
2. Hệ thống hiển thị giao hiện Đăng ký
3. Khách hàng nhập thông tin cần đăng ký và ấn
đăng ký
4. Hệ thống hiển thị thông báo thành công
Hậu điều kiện Đăng ký thành công
Ngoại lệ 4.1. Hệ thống thông báo tài khoản đã tồn tại
4.2. Hệ thống thông báo mật khẩu không khớp
4.3. Hệ thống thông báo mật khẩu quá ngắn
4.4. Hệ thống thông báo mật khẩu không được
chứ kí tự đặc biệt

Tên use-case Comment và rating


Tác nhân Khách hàng
Mục đích Comment và rating sản phẩm thành công
Tiền điều kiện Người dùng đã đăng nhập vào hệ thống thành công
Mô tả các bước 1. Khách hàng chọn My Profile ở giao diện chính
2. Hệ thống hiển thị giao diện My Profile
3. Khách hàng chọn Đơn hàng của tôi
4. Giao diện đơn hàng hiển thị

26
5. Khách hàng chọn Đơn hàng đã mua
6. Hệ thống hiển thị danh sách sản phẩm đã mua
7. Khách hàng chọn 1 sản phẩm và click đánh giá
8. Giao diện đánh giá hiện ra
9. Khách hàng chọn rating và nhập comment và ấn
Comment
10.Hệ thống thông báo đánh giá thành công
Hậu điều kiện Comment và rating thành công
Ngoại lệ 7.1. Hệ thống thông báo sản phẩm đã được đánh giá
yêu cầu đánh giá sản phẩm khác
Acceptance criteria
User story Acceptanve criteria
Là 1 nhân viên nhập kho , tôi muốn - Tìm kiếm sản phẩm
quản lý các mặt hàng trong kho của - Có giao diện xem chi tiết 1 mặt
mình hàng
- Cho phép thêm , sửa , xóa mặt
hàng
Là 1 nhân viên quản lý , tôi muốn - Tìm kiếm sản phẩm có trên
quản lý tài khoản của tất cả người web
dùng , mặt hàng có trên web , - Thêm ,sửa , xóa sản phẩm
voucher , xem thống kê - Có giao diện xem chi tiết 1 sản
phẩm
- Xem thống kê doanh thu theo
tháng , quý , năm , mốc thời
gian
- Xem chi tiết doanh thu 1 tháng
, quý , năm

27
- Xem thống kê sản phẩm được
mua nhiều theo thời gian
- Xem chi tiết voucher
- Thêm , sửa , xóa voucher
- Thêm , Xóa , Sửa tài khoản
người dung
- Có giao diện quản lý tài khoản
người dùng
Là 1 nhân viên bán hàng , tôi muốn - Có giao diện quản lý đơn hàng
quản lý đơn hàng của khách hàng , xử - Cho phép phê duyệt , hủy đơn
lý phản hồi của khách hàng hàng
- Xem danh sách , chi tiết các
đơn hàng đang được vẩn
chuyển hoặc đã giao
- Có giao diện xem phản hồi của
khách hàng
- Có thông báo khi khách hàng
phản hồi
- Cho phép phản hồi khách hàng
Là 1 nhân viên Marketing , tôi mong - Có giao diện biểu đồ để xem
muốn được quản lý Marketing thống kê thu chi từ việc
marketing.
- Liệt kê chi tiết các chỉ số.
Là 1 khách hàng , tôi muốn được đặt - Có giao diện giỏ hàng
hàng trên hệ thống , sử dụng voucher - Thêm sản phẩm vào giỏ hàng
, phản hồi và đánh giá sản phẩm khi - Xóa sản phẩm khỏi giỏ hàng
đã mua hàng , Sửa thông tin cá nhân - Phần hồi sản phẩm đã mua và
và đăng kí tài khoản mới đánh giá

28
- Sử dụng voucher khi mua hàng
- Có giao diện profile
- Sửa profile
- Đăng kì tài khoản mới

4. Xây dựng biểu đồ lớp phân tích

Biểu đồ lớp phân tích

7 Class em thêm vào là các class đã tô đỏ


5. Xây dựng biểu đồ hoạt động
• Biểu đồ đăng nhập

29
• Biểu đồ thêm sản phẩm trên web

• Biểu đồ xóa sản phẩm trên web

30
• Biểu đồ update sản phẩm trên web

• Biểu đồ thêm vào cart

• Biểu đồ Order sản phẩm

31
• Biểu đồ comment và rating

• Biểu đồ đăng kí

32
• Biểu đồ duyệt hóa đơn

6. Xây dựng mô hình dữ liệu Logic

33
III. Thiết kế
1. Xây dựng kiến trúc tổng thể

Vì hệ thống được triển khai trên nền tảng Django, nên chúng ta thiết kế theo
mô hình MVT (Model – View – Template). Yêu cầu cần có sự phân chia

34
thành các app (folder) để thực hiện chuyên biệt mỗi nhóm chức năng được
đề ra. Hệ thống vẫn đảm bảo có đủ 3 tầng (3-layer): Tầng presentation là
folder template, chứa các file giao diện front-end của hệ thống; tầng business
logic chứa các lớp controller thực hiện nghiệp vụ chức năng của hệ thống
(lưu ý: trong mô hình MVT của Django, lớp DAO thường thấy được thay thế
bằng các lớp VIEW, chức năng tương tự như một controller bình thường.
VIEW có 2 dạng tiếp cận là class-based và function-based. Ở hệ thống này,
em xây dựng dưới dạng functionbased để không mất các đặc điểm tổng quát
như thiết kế với lớp DAO bên MVC); tầng data (model) chứa các model
tương ứng với CSDL, được “use” bởi các VIEW để thực hiện thao tác và
truy vấn tới các bản ghi.
2. Tiến hành thiết kế chi tiết các gói và sử dụng Pattern
2.1. Package User View
Lớp UserView thực hiện liên kết tới các package ở tầng data như hình
vẽ để đảm nhiệm các chức năng: Đăng nhập theo phân quyền, sửa
thông tin cá nhân, nhắn tin, đọc thông báo, bình luận, lấy các thông tin
về điểm thưởng, phòng ban. Lớp UserView có áp dụng Facade Design
Pattern để quản lý sub-system - cây kế thừa của User. UserView cũng
thực nhận thông báo – kết quả của luật kết hợp để đề xuất các mặt
hàng cho khách hàng.

35
Biểu đồ lớp thiết kế được tạo từ model
2.2. Pacekage Order View

36
Lớp OrderView thực hiện liên kết tới các package ở tầng data như
hình vẽ để đảm nhiệm các chức năng: Tạo order, tạo bill, chọn
payment/shipment, lấy thông tin trong giỏ hàng, xử lí đơn hàng. Lớp
OrderView có áp dụng Factory Design Pattern để hỗ trợ việc lấy
thông tin của các loại payment 1 cách nhanh nhất. Lớp
PaymentFactory sẽ hỗ trợ get các kiểu tương ứng của payment về cho
Order. Bên cạnh đó, Order Builder sẽ hỗ trợ khách hàng trong việc tạo
các hoá đơn thông qua các “item” thành phần của Order. Quá trình
này sẽ diễn ra trong suốt với người dùng và lớp Builder cũng chỉ cần
các thành phần của Order để trả về đối tượng Order cho chính
OrderView.

37
Các kiểu Payment
2.3. Package Product View

Lớp ProductView thực hiện liên kết tới các package ở tầng data như
hình vẽ để đảm nhiệm các chức năng: Hiển thị bình luận cho từng mặt
hàng, giúp quản lý tạo mặt hàng và đưa thông tin mặt hàng lên hệ
thống, chạy thuật toán phân tích ý kiến, cảm tình lấy thông tin liên
quan đến mặt hàng và cập nhật mặt hàng. Lớp ProductView có áp
dụng Factory Design Pattern để hỗ trợ việc lấy thông tin của các loại

38
Product và Price 1 cách nhanh nhất. Lớp ProductFactory sẽ hỗ trợ get
các kiểu tương ứng của Product về cho Order

Biểu đồ lớp thiết kế cho Product


2.4. Package Cart View

Lớp CartView thực hiện liên kết tới các package ở tầng data như hình vẽ để
đảm nhiệm các chức năng: Tạo giỏ hàng, lấy thông tin từ giỏ hàng, tạo các
item

39
3. Physical data model và CSDL

Physical data model được sinh ra từ Model


IV. Lập trình
1. Code Dijango để phát triển phần giao dịch web của khách hàng
Trang chủ của trang web

40
Home page Electronics

Home page Book

Home page Clothes

41
Giao diện thêm vào giỏ hàng

Giao diện đăng nhập

42
Giao diện thanh toán

2. Phát triển module nhân viên nhập sản phẩm

43
Module này có sẵn trong Django admin . Admin chính có thể phân quyền
cho các admin còn lại có quyền sử dụng và truy cập đến dữ liệu nào của
database
3. Phát triển module nhân viên xử lý đơn hàng

Module này có sẵn trong Django admin . Admin chính có thể phân quyền
cho các admin còn lại có quyền sử dụng và truy cập đến dữ liệu nào của
database
4. Phát triển module comment và rating

ảnh giao diện comment và rating

44
Code :

5. Code bổ xung
Model Promotion :

45
Code lấy promotion theo ID product

Model Department

46
Model Department
Code lấy giữ liệu Derpartment theo User

Model Notification

47
Code lấy thông báo theo ID User

V. Tối ưu hóa cơ sở dữ liệu


1. Chọn Engine phù hợp với database
Cần 4 nguồn là CPU, disk, memory, network để tạo ra chức năng của cơ
sở dữ liệu. Nếu bất kì nguồn tài nguyên nào không hoạt động đúng sẽ gây
ảnh hưởng tới máy chủ cơ sở dữ liệu và dẫn tới hiệu suất kém. Trong hầu
hết các trường hợp việc nâng cấp phần cứng có thể cải thiện được hiệu
năng của hệ thống.
Chọn Engine phù hợp với mục đích sử dụng database cũng là 1 cách để
cải thiện , tối ưu hóa cơ sở dữ liệu

48
Ở đây , chúng ta sẽ chọn kiểu Engine là InnoDB :

• Hỗ trợ giao dịch (ACID) commit , rollback


• Hỗ trợ khóa mức ròng (row-level locking) , tăng hiệu năng , đa người
dung
• Hỗ trợ toàn ràng buộc tham thiếu khóa ngoài FOREIGN KEY. InnoDB
là kiểu lưu trữ ngầm định từ MySQL 5.5.5

2. Xem thông tin các luồng đang thi hành


Có thể xem những công việc MySQL servert đang thi hành để xác định
các điểm tắc. Kiểm tra danh sách các luồng đang thi hành trong server:

Để hủy một tiến trình đang thi hành không hiệu quả ta có thể sử dụng câu
lệnh : Kill <<ID_PROCESS>>
3. Đưa cơ sở dữ liệu về dạng chuẩn BCNF hoặc cao hơn
- Dạng chuẩn 1NF ( First Normal Form - 1NF) : Mỗi quan hệ trong đó
mỗi giá trị thuộc tính đều ở dạng nguyên tố , không chứ thuộc tính đa trị ,
không chứa thuộc tính dẫn xuất thì quan hệ đó ở dạng chuẩn 1NF

49
Thuộc tính Address có thể dẫn xuất từ location trong Des → Bỏ thuộc
tính Address

Thuộc tính date trong Rating có thể dẫn xuất từ date trong Comment nên
→ Bỏ date trong Rating
- Chuẩn hóa 2NF : CSDL ở dạng 1NF và mọi thuộc tính không khoá đều
phụ thuộc hàm đầy đủ vào mọi khoá của quan hệ.
Cơ sở dữ liệu thiết kế mỗi bảng đều có 1 khóa chính riêng nên mọi dữ liệu
đều phụ thuộc đầy đủ vào khóa chính nên luôn thỏa mã 2NF
- Chuẩn 3NF : CSDL ở dạng 2NF và không có thuộc tính không khoá nào
phụ thuộc hàm bắc cầu vào một khoá của quan hệ.

50
Cơ sở dữ liệu được thiết kế mỗi bảng 1 khóa chính riêng biệt và không có
thuộc tính nào ở bảng này có thể tình bắc cầu hay phụ thuộc bắc cầu qua
thuộc tính ở bảng khác nên luôn thỏa mãn 3NF
- Chuẩn BCNF ( 3,5NF) : Nếu 1 lược đồ cơ sở dữ liệu nằm trong BCNF
thì tất cả sự dư thừa dựa trên sự phụ thuộc hàm đã được loại bỏ , mặc dù
các loại dự phòng khác vẫn có thể tồn tại . Mội lược đồ quan hệ R ở dạng
bình thường BoyceTHER Cod khi và chỉ khi với mỗi 1 phụ thuộc của nó
X → Y ít nhất 1 trong các điều kiện sau đây :
o X→Y là 1 phụ thuộc hàm tầm thường (Y ⊆ X)
o X là 1 siêu khóa cho lược đồ R

Cơ sở dữ liệu được thiết kế cho mỗi bảng đều có 1 siêu khóa đó là khóa
chính , mọi phụ thuộc hàm ví dụ : idBook → Name là 1 phụ thuộc hàm
tầm thường ( Name ⊆ idBook ) và idBook là 1 siêu khóa nên luôn thỏa
mãn chuẩn BCNF
VI. Phân tích ý kiến và hành vi khách hàng
1. Phân tích ý kiến cho social marketing
1.1. Các kỹ thuật trong Machine Learning cho Social Media
Marketing trong phân tích ý kiến/cảm tình của khách hàng
a) Giám sát phương tiện truyền thông xã hội
Giám sát mạng xã hội là một trong những công cụ mang tính truyền thống
hơn cho các doanh nghiệp muốn quản lý tài khoản mạng xã hội của họ. Một
số nền tảng như Twitter và Instagram có các công cụ phân tích tích hợp có
thể đo lường mức độ thành công của các bài đăng trước đây, bao gồm số lượt
thích, nhận xét, số lần click vào liên kết hoặc lượt xem cho video. Các công
cụ của bên thứ ba như Iconosquare (dành cho Instagram và Facebook) cũng
có thể cung cấp các dịch vụ quản lý và thông tin chi tiết về phương tiện
truyền thông xã hội tương tự. Những công cụ này cũng có thể cho các doanh

51
nghiệp biết nhiều điều về khán giả của họ, bao gồm thông tin nhân khẩu học
và thời gian cao điểm khi những người theo dõi của họ hoạt động tích cực
nhất trên nền tảng. Các thuật toán truyền thông xã hội thường ưu tiên các bài
đăng gần đây hơn các bài đăng cũ hơn, vì vậy với dữ liệu này, các doanh
nghiệp có thể lên lịch cho các bài đăng của họ vào hoặc một vài phút trước
thời gian cao điểm.
b) Phân tích cảm xúc cho Social Media Marketing
Phân tích cảm xúc, còn được gọi là AI khai thác ý kiến hoặc cảm xúc,
đang đánh giá ý kiến của một văn bản. Quá trình sử dụng cả xử lý ngôn
ngữ tự nhiên (NLP) và học máy để ghép nối dữ liệu truyền thông xã hội
với các nhãn được xác định trước như tích cực, tiêu cực hoặc trung tính.
Sau đó, máy có thể phát triển các tác nhân học cách hiểu được tình cảm
bên trong các thông điệp mới.
Các doanh nghiệp có thể áp dụng phân tích tình cảm trên phương tiện
truyền thông xã hội và hỗ trợ khách hàng để thu thập phản hồi về một sản
phẩm hoặc thiết kế mới. Tương tự, các doanh nghiệp có thể áp dụng phân
tích cảm xúc để khám phá cảm nhận của mọi người về đối thủ cạnh tranh
của họ hoặc các chủ đề xu hướng của ngành.
c) Nhận dạng hình ảnh cho Social Media Marketing
Tính năng nhận dạng hình ảnh sử dụng công nghệ học máy để huấn luyện
máy tính nhận dạng logo thương hiệu hoặc ảnh của một số sản phẩm nhất
định mà không cần bất kỳ văn bản nào kèm theo. Điều này có thể hữu ích
cho các doanh nghiệp khi khách hàng của họ tải lên ảnh sản phẩm mà
không đề cập trực tiếp đến thương hiệu hoặc tên sản phẩm trong văn bản.
Khách hàng tiềm năng cũng có thể tải lên ảnh sản phẩm của bạn với chú
thích “Tôi có thể mua cái này ở đâu?” Nếu các doanh nghiệp có thể nhận
thấy thời điểm điều đó xảy ra, họ có thể sử dụng nó như một cơ hội để
gửi các khuyến mãi được nhắm mục tiêu đến người đó hoặc chỉ cần bình
luận trên bài đăng để nói lời cảm ơn vì đã mua hàng của họ, điều này

52
chắc chắn có thể dẫn đến sự trung thành của khách hàng tăng lên. Ngoài
ra, khách hàng có thể cảm thấy được khuyến khích đăng nhiều ảnh hơn
về sản phẩm của bạn trong tương lai, điều này dẫn đến việc quảng bá
thương hiệu hơn nữa.
Các doanh nghiệp có thể được hưởng lợi từ việc chú ý lắng nghe khi mọi
người đăng ảnh sản phẩm của họ, vì các bài đăng trên mạng xã hội có
hình ảnh thường nhận được sự tham gia của người dùng cao hơn so với
các bài đăng hoàn toàn là văn bản. Người dùng Facebook có khả năng
thích hoặc bình luận trên các bài đăng có hình ảnh cao gấp 2,3 lần và
người dùng Twitter có khả năng đăng lại bài đăng có hình ảnh cao hơn
1,5 lần. Điều này rất quan trọng đối với hoạt động tiếp thị vì các thuật
toán truyền thông xã hội thường được thiết kế để các bài đăng có mức độ
tương tác cao, được đo lường bằng số lượng người dùng đã tương tác với
một bài đăng, chẳng hạn như bằng cách thích, nhận xét hoặc chia sẻ bài
đăng đó với những người dùng khác, hiển thị ở đầu nguồn cấp dữ liệu của
người dùng.
d) Chatbot cho Social Media Marketing
Chatbot là một ứng dụng của AI để bắt chước các cuộc trò chuyện thực.
Chúng có thể được nhúng vào các trang web, chẳng hạn như cửa hàng
trực tuyến hoặc thông qua nền tảng nhắn tin của bên thứ ba như Facebook
Messenger và nhắn tin trực tiếp của Twitter và Instagram. Chatbot cho
phép các doanh nghiệp tự động hóa dịch vụ khách hàng mà không yêu
cầu sự tương tác của con người, trừ khi khách hàng yêu cầu cụ thể nói
chuyện hoặc trò chuyện với đại diện của con người. Đối với các doanh
nghiệp có cơ sở khách hàng nói chung là trẻ, chatbot có nhiều khả năng
làm tăng sự hài lòng của khách hàng. Việc sử dụng chatbot không giới
hạn trong các trường hợp khi khách hàng có câu hỏi hoặc khiếu nại cụ
thể. Estee Lauder sử dụng một chatbot được nhúng trong Facebook
Messenger, sử dụng tính năng nhận dạng khuôn mặt để chọn ra màu nền

53
phù hợp cho khách hàng của mình và Airbnb đã sử dụng Amazon Alexa
để chào đón khách và giới thiệu họ đến các điểm tham quan và nhà hàng
ở địa phương
e) Nhận dạng tiếng nói cho Social Media Marketing
Có thể đủ khó để hiểu các bài đăng xã hội khác nhau có nghĩa là gì nếu
chỉ đọc từng bài một. Sarcasm, nghĩa kép và từ đồng nghĩa đã để lại
những phân tích tự động cũ hơn.
Mặc dù con người hiển nhiên có thể xác định ý nghĩa của một từ trong
ngữ cảnh hoặc xác định giọng điệu nếu ai đó đang mỉa mai (để phân tích
tình cảm), đây không phải là nhiệm vụ hiển nhiên đối với máy tính.
Nhưng học máy hiện cung cấp cho chúng ta các phân tích tự động có độ
chính xác cao. Các mô hình phức tạp có thể được thiết kế để hiểu ý nghĩa
thực sự được thể hiện trong các bài đăng mà không thể nắm bắt được
bằng các phương pháp dựa trên quy tắc truyền thống.
f) Phát hiện các chủ đề và xu hướng mới nổi
Học máy rất hữu ích để nhận dạng các mẫu trong ngôn ngữ, hình ảnh
hoặc trong siêu dữ liệu. Và bây giờ chúng ta có thể dựa vào các mẫu này
để sắp xếp các bài đăng thành các danh mục được xác định trước. Tuy
nhiên, các mẫu này cũng có thể được sử dụng để phát hiện các xu hướng
hoặc chủ đề mới không phù hợp với bộ giá trị đã có từ trước. Thuật toán
tìm kiếm các cấu trúc thú vị và cố gắng nhóm các ví dụ tương tự. Các kỹ
thuật học máy này được gọi là “không giám sát” và chúng làm nổi bật
như một công cụ khám phá hoặc khi kết quả mới nằm ngoài dự kiến
g) Đề xuất nội dung
Cũng giống như các thương hiệu thuê toàn bộ những người được cho là
làm việc dựa trên sự trung thành và giữ chân khách hàng, mạng xã hội
cũng tập trung vào việc khiến mọi người luôn trực tuyến và tận hưởng
thời gian họ dành cho các trang web hoặc ứng dụng cụ thể.

54
Các đề xuất về nội dung được cá nhân hóa là nguyên nhân cho bản chất
gây nghiện của mạng xã hội. Các mạng đầu tư ngân sách khổng lồ vào
các công nghệ học máy tạo nguồn cấp dữ liệu phương tiện dựa trên
những gì người dùng thích, tìm kiếm và - quan trọng nhất - có thể thích.
Một ví dụ tuyệt vời là tab Khám phá Instagram, phân tích những bài đăng
nào thu hút sự quan tâm của bạn để đóng gói tab Khám phá của bạn với
các bức ảnh tương tự. Ngoài ra, Instagram áp dụng học máy không chỉ để
hiển thị nội dung cho mọi người mà còn ẩn nó.
Sau khi bạn báo cáo một hình ảnh bạn không thích (và nó không phải là
bất cứ điều gì bị cấm bởi nền tảng, chỉ là một hình ảnh mà cá nhân bạn
thấy đáng lo ngại), ứng dụng sẽ vô hiệu hóa các bài đăng đó khỏi nguồn
cấp dữ liệu của bạn hoặc ít nhất sẽ hỏi bạn có chắc chắn bạn muốn xem
bài viết.
h) Phiên dịch nơ-ron
Để cố gắng làm cho các phương tiện truyền thông xã hội cởi mở và thống
nhất hơn, vào năm 2017, Facebook đã giới thiệu một cách tiếp cận mới
đối với phiên dịch nơ-ron (nơron thế giới chỉ ra sự tham gia của học máy
trong toàn bộ sự việc). Kiến trúc dịch mới mà họ cung cấp, đại diện cho
việc dịch theo ngữ cảnh, không giống như các phương pháp hoạt động
trước đó. Ngày nay, người dùng thưởng thức nhiều bài đăng trên mạng xã
hội bằng ngôn ngữ mẹ đẻ của họ và có tùy chọn giao tiếp với bất kỳ ai
trực tuyến với mức độ hiểu biết ấn tượng.
i) Mật độ dân số
Dựa trên dữ liệu vị trí địa lý của người dùng theo thời gian thực,
Facebook tạo ra các bản đồ hiển thị mật độ dân số chính xác và cập nhật
nhất. Điều này có vẻ không quan trọng cho đến khi việc tìm ra nhiệm vụ
tạo ra một bản đồ như vậy trong thời gian thực là thực tế không thể hoàn
thành trong quá khứ. Đối với ngày nay, nó đang tiến gần đến việc cung
cấp cho chúng ta phạm vi phủ sóng trên toàn thế giới (ngoại trừ những

55
khu vực không có hoặc rất ít dân số). Các bản đồ được sử dụng cho các
vấn đề an toàn và chăm sóc sức khỏe, như các hoạt động cứu hộ trong
trường hợp thiên tai hoặc lập kế hoạch và thực hiện tiêm chủng hoặc để
thống kê, nhìn nhận một cách trực quan hơn về độ phổ biến
1.2. Các kỹ thuật trong Machine Learning cho Social Media
Marketing trong dự đoán hành vi khách hàng
a) Dự đoán các xu hướng trong hành vi mua của khách hàng
Bất kỳ sản phẩm hoặc dịch vụ nào, dù tốt đến đâu về chất lượng, nếu
không phù hợp với nhu cầu và mong muốn của khách hàng, đều là thất
bại. Không chỉ vị trí địa lý mà văn hóa, tôn giáo, quốc tịch và môi
trường cũng ảnh hưởng đến hành vi của khách hàng. Các công cụ AI
khai thác dữ liệu từ các phương tiện truyền thông xã hội và tin tức cho
đến các đợt bán hàng và đánh giá trước đây để cho biết khách hàng
đang mong đợi điều gì hoặc họ sẵn sàng chi thêm tiền vào hàng hóa
nào. Các công cụ này cũng tính đến điều kiện kinh tế và khả năng chi
tiêu của khách hàng. Điều tốt nhất về các công cụ này là chúng đáng
tin cậy vì nó đã được chứng minh rằng chúng dự đoán cung và cầu
trong tương lai với mức độ chính xác cao nhất. Các công ty có thể tận
dụng những thông tin chi tiết có giá trị này để cung cấp hàng hóa và
dịch vụ được cá nhân hóa cho các khu vực được nhắm mục tiêu.
b) Giúp đỡ trong việc phát triển các chiến dịch tiếp thị hiệu quả
Bên cạnh việc dự đoán chính xác hành vi của khách hàng, các công cụ
AI cũng có lợi trong việc đưa ra các chiến lược tiếp thị hiệu quả. Dữ
liệu trực tuyến dưới dạng đánh giá trước đây, tìm kiếm trực tuyến và
số lượt xem là vàng cho các nhà tiếp thị. Không thể tưởng tượng được
đối với bất kỳ doanh nghiệp nào muốn duy trì tính cạnh tranh trong
thế giới kinh doanh, nếu không tận dụng sức mạnh của AI để đưa ra
chiến lược tiếp thị của mình. Với sự trợ giúp của AI, các nhà tiếp thị

56
có thể xác định phương thức tiếp thị nào nhận được nhiều sự tham gia
hơn từ khách hàng. Dựa trên điều này, các nhà tiếp thị có thể chọn
phương tiện đó cho các quảng cáo trong tương lai để tạo ra nhiều
doanh số hơn.
c) Tiếp thị nội dung
AI đã thay đổi hoàn toàn tiếp thị nội dung bằng cách thay đổi cách
nội dung xuất hiện trên các kết quả hàng đầu của các công cụ tìm kiếm
như Google. Trước đây, Google dựa vào từ khóa để xếp hạng nội
dung, tuy nhiên sau sự bùng nổ của AI, điều đó không còn phụ thuộc
vào chúng nữa. Điểm yếu chính của chiến lược từ khóa là rất nhiều
nội dung sao chép và giả mạo cuối cùng lại xếp hạng trên cùng bên
cạnh nội dung chính hãng. Với trí tuệ nhân tạo, Google cũng đang
chuyển đổi chiến lược xếp hạng nội dung của mình. Các thuật toán
học máy được Google sử dụng sẽ tự động khai thác dữ liệu và xác
định nội dung tốt nhất và nguyên bản về chủ đề cụ thể và xếp hạng nó
cho phù hợp. Việc tạo ra nội dung có thể hành động nhắm đến đúng
đối tượng là yếu tố cơ bản cho sự thành công của doanh nghiệp. Các
công ty đang tận dụng AI để sản xuất nội dung tự động, giao tiếp với
khách hàng bằng chatbots và tạo nội dung được cá nhân hóa cho
khách hàng. Các nhà tiếp thị cũng có thể có được những hiểu biết có
giá trị về nội dung xếp hạng cao nhất bằng cách sử dụng các công cụ
AI. Hơn nữa, họ có thể nhận được các đề xuất về cách nâng cao nội
dung hiện có của họ và kênh nào sẽ dẫn đến bán hàng nhiều hơn.
d) Định hình lại trải nghiệm của khách hàng thông qua giao tiếp nâng
cao
Tiếp thị qua email đã được chứng minh là tạo ra nhiều doanh số bán
hàng hơn cho một số sản phẩm so với các phương tiện khác. Email,
Facebook Messenger và Whatsapp đã xóa bỏ rào cản giao tiếp giữa

57
khách hàng và doanh nghiệp. Khách hàng ngay lập tức liên hệ với các
công ty để đăng ký khiếu nại của họ hoặc để bày tỏ sự hài lòng của họ
từ các dịch vụ kinh doanh. Trả lời mọi tin nhắn là không thực tế vì
những tin nhắn này có thể lên đến hàng nghìn. Ở đây, một chatbot
được hỗ trợ bởi AI đã cứu các công ty khỏi sự phiền toái này bằng
cách gửi tin nhắn văn bản đến khách hàng bằng ngôn ngữ của con
người. Nó cũng phản hồi các truy vấn chung của họ, do đó dẫn đến sự
hài lòng của khách hàng cao hơn.
e) Hỗ trợ phân tích cảm xúc của khách hàng
Phương tiện truyền thông xã hội là công cụ tuyệt vời nhất để phân tích
cảm xúc của khách hàng về hàng hóa và dịch vụ. Phân tích cảm xúc sử
dụng kỹ thuật phân tích văn bản để giải mã cảm xúc của khách hàng
(tích cực, tiêu cực và trung tính) đối với hàng hóa và dịch vụ cụ thể.
Các công cụ AI có thể phân tích hơn 10.000 đánh giá trực tuyến về
sản phẩm của bạn để giúp bạn xác định xem khách hàng có hài lòng
với chất lượng và giá cả sản phẩm của bạn hay không. Việc diễn giải
cảm xúc của mọi người là điều cần thiết cho sự thành công của doanh
nghiệp. Khách hàng không chỉ đăng bài đánh giá mà còn thảo luận về
từng khía cạnh của sản phẩm và dịch vụ, từ chất lượng đến giá cả và
dịch vụ khách hàng, trên phương tiện truyền thông xã hội. Bên cạnh
đó, các công cụ này cũng giúp xác định kỳ vọng của khách hàng đối
với doanh nghiệp. Dựa trên những thông tin chi tiết hữu ích này, các
doanh nghiệp có thể đưa ra các quyết định cấp thiết để cải thiện chất
lượng, khả năng chi trả và dịch vụ khách hàng của mình trong tương
lai.
f) Dự đoán sự chuyển nhượng của khách hàng
Customer churn, còn được gọi là sự luân chuyển khách hàng, đề cập
đến một tỷ lệ phần trăm khách hàng đã ngừng kinh doanh với một

58
công ty. Đối với bất kỳ công ty nào, sự chuyển nhượng của khách
hàng là một trải nghiệm khá đáng sợ. Các công ty muốn giữ lại cơ sở
khách hàng hiện tại của họ bằng mọi giá bởi vì họ biết rằng có được
một khách hàng mới sẽ không phải là một nhiệm vụ dễ dàng. Do đó,
việc dự đoán sự rời bỏ của khách hàng và xác định nguyên nhân gốc
rễ là rất quan trọng đối với các công ty vì bằng cách này, họ có thể chủ
động thực hiện các bước để cứu doanh nghiệp của mình. Các công ty
có thể sử dụng thuật toán học máy để không chỉ dự đoán khách hàng
nào sẽ ngừng sử dụng sản phẩm của họ mà còn giải mã lý do đằng sau
hành vi này. Các thuật toán học máy được sử dụng để tạo ra các hệ
thống sử dụng dữ liệu lịch sử của khách hàng để tiết lộ thông tin chi
tiết hữu ích về hành vi của khách hàng.
2. Phân tích hành vi khách hàng – Neighborhood-Based Collaborative
Filtering
2.1. Giới thiệu
Trong Content-based Recommendation Systems, chúng ta đã làm quen với một
Hệ thống gợi ý sản phẩm đơn giản dựa trên đặc trưng của mỗi item. Đặc điểm của
Content-based Recommendation Systems là việc xây dựng mô hình cho
mỗi user không phụ thuộc vào các users khác mà phụ thuộc vào profile của
mỗi items. Việc làm này có lợi thế là tiết kiệm bộ nhớ và thời gian tính toán. Đồng
thời, hệ thống có khả năng tận dụng các thông tin đặc trưng của mỗi item như
được mô tả trong bản mô tả (description) của mỗi item. Bản mô tả này có thể
được xây dựng bởi nhà cung cấp hoặc được thu thập bằng cách yêu
cầu users gắn tags cho items. Việc xây dựng feature vector cho mỗi item thường
bao gồm các kỹ thuật Xử lý ngôn ngữ tự nhiên (Natural Language Processing -
NLP).
Cách làm trên có hai nhược điểm cơ bản. Thứ nhất, khi xây dựng mô hình cho
một user, các hệ thống Content-based không tận dụng được thông tin từ
các users khác. Những thông tin này thường rất hữu ích vì hành vi mua hàng của
các users thường được nhóm thành một vài nhóm đơn giản; nếu biết hành vi mua
hàng của một vài users trong nhóm, hệ thống nên suy luận ra hành vi của
những users còn lại. Thứ hai, không phải lúc nào chúng ta cũng có bản mô tả cho
mỗi item. Việc yêu cầu users gắn tags còn khó khăn hơn vì không phải ai cũng
sẵn sàng làm việc đó; hoặc có làm nhưng sẽ mang xu hướng cá nhân. Các thuật

59
toán NLP cũng phức tạp hơn ở việc phải xử lý các từ gần nghĩa, viết tắt, sai chính
tả, hoặc được viết ở các ngôn ngữ khác nhau.
Những nhược điểm phía trên có thể được giải quyết bằng Collaborative
Filtering (CF). Trong bài viết này, tôi sẽ trình bày tới các bạn một phương pháp
CF có tên là Neighborhood-based Collaborative Filtering (NBCF). Bài tiếp theo
sẽ trình bày về một phương pháp CF khác có tên Matrix Factorization
Collaborative Filtering. Khi chỉ nói Collaborative Filtering, chúng ta sẽ ngầm
hiểu rằng phương pháp được sử dụng là Neighborhood-based.
Ý tưởng cơ bản của NBCF là xác định mức độ quan tâm của một user tới
một item dựa trên các users khác gần giống với user này. Việc gần giống
nhau giữa các users có thể được xác định thông qua mức độ quan tâm của
các users này tới các items khác mà hệ thống đã biết. Ví dụ, A, B đều thích
phim Cảnh sát hình sự, tức đều rate bộ phim này 5 sao. Ta đã biết A cũng
thích Người phán xử, vậy nhiều khả năng B cũng thích bộ phim này.
Các bạn có thể đã hình dung ra, hai câu hỏi quan trọng nhất trong một hệ thống
Neighborhood-based Collaborative Filtering là:

• Làm thế nào xác định được sự giống nhau giữa hai users?
• Khi đã xác định được các users gần giống nhau (similar users) rồi, làm thế
nào dự đoán được mức độ quan tâm của một user lên một item?

Việc xác định mức độ quan tâm của mỗi user tới một item dựa trên mức độ quan
tâm của similar users tới item đó còn được gọi là User-user collaborative
filtering. Có một hướng tiếp cận khác được cho là làm việc hiệu quả hơn là Item-
item collaborative filtering. Trong hướng tiếp cận này, thay vì xác định user
similarities, hệ thống sẽ xác định item similarities. Từ đó, hệ thống gợi ý
những items gần giống với những items mà user có mức độ quan tâm cao.
Cấu trúc của bài viết như sau: Mục 2.2 sẽ trình bày User-user Collaborative
Filtering. Mục 3 sẽ nêu một số hạn chế của User-user Collaborative Filtering và
cách khắc phục bằng Item-item Collaborative Filtering. Kết quả của hai phương
pháp này sẽ được trình bày qua ví dụ trên cơ sở dữ liệu MovieLens 100k trong
Mục 2.4. Một vài Tài liệu tham khảo được cho trong Mục 2.5
2.2. User-User Collaborative Filtering
2.2.1. Similarity functions
Công việc quan trọng nhất phải làm trước tiên trong User-user Collaborative
Filtering là phải xác định được sự giống nhau (similarity) giữa hai users. Dữ
liệu duy nhất chúng ta có là Utility matrix YY, vậy nên sự giống nhau này
phải được xác định dựa trên các cột tương ứng với hai users trong ma trận này.
Xét ví dụ trong Hình 1.

60
Hình 1: Ví dụ về utility matrix dựa trên số sao một user rate cho một item. Một
cách trực quan, hành vi của u0 giống với u1 hơn là u2,u3,u4,u5,u6. Từ đó có thể
dự đoán rằng u0 sẽ quan tâm tới i2 vì u1 cũng quan tâm tới item này.

Giả sử có các users từ u0 đến u6 và các items từ i0 đến i4 trong đó các số trong
mỗi ô vuông thể hiện số sao mà mỗi user đã rated cho item với giá trị cao hơn
thể hiện mức độ quan tâm cao hơn. Các dấu hỏi chấm là các giá trị mà hệ thống
cần phải đi tìm. Đặt mức độ giống nhau của
hai users ui,ujui,uj là sim(ui,uj)sim(ui,uj).

Quan sát đầu tiên chúng ta có thể nhận thấy là các u0,u1 thích i0,i1,i2 và không
thích i3,i4 cho lắm. Điều ngược lại xảy ra ở các users còn lại. Vì vậy,
một similiarity function tốt cần đảm bảo:

sim(u0,u1)>sim(u0,ui), ∀i>1.sim(u0,u1)>sim(u0,ui), ∀i>1.

Từ đó, để xác định mức độ quan tâm của u0 lên i2, chúng ta nên dựa trên hành
vi của u1 lên sản phẩm này. Rất may rằng u1 đã thích i2inên hệ thống
cần recommend i2 cho u0.
Câu hỏi đặt ra là: hàm số similarity nào là tốt? Để đo similarity giữa hai users,
cách thường làm là xây dựng feature vector cho mỗi user rồi áp dụng một hàm
có khả năng đo similarity giữa hai vectors đó. Chú ý rằng việc xây dựng feature
vector này khác với việc xây dựng item profiles như trong Content-based
Recommendation Systems. Các vectors này được xây dựng trực tiếp dựa trên
Utility matrix chứ không dùng dữ liệu ngoài như item profiles. Với mỗi user,
thông tin duy nhất chúng ta biết là các ratings mà user đó đã thực hiện, tức cột
tương ứng với user đó trong Utility matrix. Tuy nhiên, khó khăn là các cột này
thường có rất nhiều mising ratings vì mỗi user thường chỉ rated một số lượng rất
nhỏ các items. Cách khắc phục là bằng cách nào đó, ta giúp hệ thống điền các giá
trị này sao cho việc điền không làm ảnh hưởng nhiều tới sự giống nhau giữa hai

61
vector. Việc điền này chỉ phục vụ cho việc tính similarity chứ không phải là suy
luận ra giá trị cuối cùng.
Vậy mỗi dấu ‘?’ nên được thay bởi giá trị nào để hạn chế việc sai lệch quá nhiều?
Một lựa chọn bạn có thể nghĩ tới là thay các dấu ‘?’ bằng giá trị ‘0’. Điều này
không thực sự tốt vì giá trị ‘0’ tương ứng với mức độ quan tâm thấp nhất. Một
giá trị an toàn hơn là 2.5 vì nó là trung bình cộng của 0, mức thấp nhất, và 5, mức
cao nhất. Tuy nhiên, giá trị này có hạn chế đối với những users dễ tính hoặc khó
tính. Với các users dễ tính, thích tương ứng với 5 sao, không thích có thể ít sao
hơn 1 chút, 3 sao chẳng hạn. Việc chọn giá trị 2.5 sẽ khiến cho các items còn lại
là quá negative đối với user đó. Điều ngược lại xảy ra với những user khó tính
hơn khi chỉ cho 3 sao cho các items họ thích và ít sao hơn cho những items họ
không thích.
Một giá trị khả dĩ hơn cho việc này là trung bình cộng của
các ratings mà user tương ứng đã thực hiện. Việc này sẽ tránh được
việc users quá khó tính hoặc dễ tính, tức lúc nào cũng có những items mà
một user thích hơn so với những items khác.
Hãy cùng xem ví dụ trong Hình 2a) và 2b).

Chuẩn hoá dữ liệu:

62
Hàng cuối cùng trong Hình 2a) là giá trị trung bình của ratings cho mỗi user. Giá
trị cao tương ứng với các user dễ tính và ngược lại. Khi đó, nếu tiếp tục trừ từ
mỗi rating đi giá trị này và thay các giá trị chư a biết bằng 0, ta sẽ
được normalized utility matrix như trong Hình 2b). Bạn có thể thắc mắc tại sao
bước chuẩn hoá này lại quan trọng, câu trả lời ở ngay đây:

• Việc trừ đi trung bình cộng của mỗi cột khiến trong trong mỗi cột có những
giá trị dương và âm. Những giá trị dương tương ứng với việc user thích
item, những giá trị âm tương ứng với việc user không thích item. Những
giá trị bằng 0 tương ứng với việc chưa xác định được liệu user có
thích item hay không.
• Về mặt kỹ thuật, số chiều của utility matrix là rất lớn với hàng
triệu users và items, nếu lưu toàn bộ các giá trị này trong một ma trận thì
khả năng cao là sẽ không đủ bộ nhớ. Quan sát thấy rằng vì số
lượng ratings biết trước thường là một số rất nhỏ so với kích thước của
utility matrix, sẽ tốt hơn nếu chúng ta lưu ma trận này dưới dạng sparse
matrix, tức chỉ lưu các giá trị khác không và vị trí của chúng. Vì vậy, tốt
hơn hết, các dấu ‘?’ nên được thay bằng giá trị ‘0’, tức chưa xác định
liệu user có thích item hay không. Việc này không những tối ưu bộ nhớ mà
việc tính toán similarity matrix sau này cũng hiệu quả hơn.

Sau khi đã chuẩn hoá dữ liệu như trên, một vài similiraty function thường được
sử dụng là:
Cosine Similarity:
Đây là hàm được sử dụng nhiều nhất, và cũng quen thuộc với các bạn nhất. Nếu
các bạn không nhớ công thức tính coscos của góc giữa hai vector u1,u2trong
chương trình phổ thông, thì dưới đây là công thức:

Trong đó u1,2u1,2 là vectors tương ứng với users 1, 2 đã được chuẩn hoá như
ở trên.
Có một tin vui là python có hàm hỗ trợ tính toán hàm số này một cách hiệu quả.
Độ similarity của hai vector là 1 số trong đoạn [-1, 1]. Giá trị bằng 1 thể hiện hai
vector hoàn toàn similar nhau. Hàm số coscos của một góc bằng 1 nghĩa là góc
giữa hai vector bằng 0, tức một vector bằng tích của một số dương với vector còn
lại. Giá trị coscos bằng -1 thể hiện hai vector này hoàn toàn trái ngược nhau. Điều
này cũng hợp lý , tức khi hành vi của hai users là hoàn toàn ngược nhau
thi similarity giữa hai vector đó là thấp nhất.
63
Ví dụ về cosine_similarity của các users trong Hình 2b) được cho trong Hình 2c).
Similarity matrix SS là một ma trận đối xứng vì coscos là một hàm chẵn, và
nếu user A giống user B thì điều ngược lại cũng đúng. Các ô màu xanh trên đường
chéo đều bằng 1 vì đó là coscos của góc giữa 1 vector và chính nó,
tức cos(0)=1cos(0)=1. Khi tính toán ở các bước sau, chúng ta không cần quan
tâm tới các giá trị 1 này. Tiếp tục quan sát các vector hàng tương ứng
với u0,u1,u2, chúng ta sẽ thấy một vài điều thú vị:

• u0gần với u1và u5 (độ giống nhau là dương) hơn các users còn lại.
Việc similarity cao giữa u0 và u1 là dễ hiểu vì cả hai đều có xu hướng quan
tâm tới i0,i1,i2 hơn các items còn lại. Việc u0 gần với u5 thoạt đầu có vẻ
vô lý vì u5 đánh giá thấp các items mà u0u0 đánh giá cao (Hình 2a)); tuy
nhiên khi nhìn vào ma trận utility đã chuẩn hoá ở Hình 2b), ta thấy rằng
điều này là hợp lý. Vì item duy nhất mà cả hai users này đã cung cấp thông
tin là i1i1 với các giá trị tương ứng đều là tích cực.
• u1 gần với u0 và xa các users còn lại.
• u2 gần với u3,u4,u5,u6 và xa các users còn lại.
Từ similarity matrix này, chúng ta có thể phân nhóm các users ra làm hai
nhóm (u0,u1) và (u2,u3,u4,u5,u6). Vì ma trận SS này nhỏ nên chúng ta có thể dễ
dàng quan sát thấy điều này; khi số users lớn hơn, việc xác định bằng mắt
thường là không khả thi. Việc xây dựng thuật toán phân nhóm các users (users
clustering) rất có thể sẽ được trình bày ở một trong các bài viết tiếp theo.
Có một chú ý quan trọng ở đây là khi số lượng users lớn, ma trận SS cũng rất lớn
và nhiều khả năng là không có đủ bộ nhớ để lưu trữ, ngay cả khi chỉ lưu hơn một
nửa số các phần tử của ma trận đối xứng này. Với các trường hợp đó, mới
mỗi user, chúng ta chỉ cần tính và lưu kết quả của một hàng của similarity matrix,
tương ứng với việc độ giống nhau giữa user đó và các users còn lại.
Trong bài viết này, tôi sẽ sử dụng similarity function này.

2.2.2. Rating prediction


Việc xác định mức độ quan tâm của một user lên một item dựa trên các users gần
nhất (neighbor users) này rất giống với những gì chúng ta thấy trong Bài 6: K-
nearest neighbors. Khi làm việc với large-scale problems, chúng ta sẽ thấy thêm
rằng phương pháp lười học K-nearest neighbors (KNN) được sử dụng rất nhiều
vì tính đơn giản của nó. Tất nhiên, chúng ta không thể trực tiếp sử dụng KNN mà
còn cần phải làm thêm nhiều bước trung gian nữa.
Tương tự như KNN, trong Collaborative Filtering, missing rating cũng được xác
định dựa trên thông tin về kk neighbor users. Tất nhiên, chúng ta chỉ quan tâm
tới các users đã rated item đang xét. Predicted rating thường được xác định
là trung bình có trọng số của các ratings đã chuẩn hoá. Có một điểm cần lưu ý,
64
trong KNN, các trọng số được xác định dựa trên distance giữa 2 điểm, và
các distance này là các số không âm. Trong khi đó, trong CF, các trọng số được
xác định dựa trên similarity giữa hai users, những trọng số này có thể nhỏ hơn 0
như trong Hình 2c).
Công thức phổ biến được sử dụng để dự đoán rating của u cho I là:

(sự khác biết so với trung bình có trọng số là mẫu số có sử dụng trị tuyệt đối để
xử lý các số âm).
trong đó N(u,i)N(u,i) là tập hợp kk users trong neighborhood (tức
có similarity cao nhất) của uu mà đã rated ii.
Hình 2d) thể hiện việc điền các giá trị còn thiếu trong normalized utility matrix.
Các ô màu nền đỏ thể hiện các giá trị dương, tức các items mà có thể
users đó quan tâm. Ở đây, tôi đã lấy ngưỡng bằng 0, chúng ta hoàn toàn có thể
chọn các ngưỡng khác 0.
Một ví dụ về việc tính normalized rating của u1 cho i1 được cho trong Hình 2e)
với số nearest neighbors là k=2k=2. Các bước thực hiện là:
1. Xác định các users đã rated i1, đó là u0,u3,u5.
2. Xác định similarities của u1 với các user này ta nhận được 0.83, -0.4,-0.23,.
Hai (k=2) giá trị lớn nhất là 0.83 và -0.23 tương ứng với u0, u5 .
3. Xác định các normalized ratings của u0,u5 cho i1, ta thu được hai giá trị
lần lượt là 0.750.75 và 0.50.5.
4. Dự đoán kết quả:

Việc quy đổi các giá trị ratings đã chuẩn hoá về thang 5 có thể được thực hiện
bằng cách cộng các cột của ma trận Y với giá trị rating trung bình của
mỗi user như đã tính trong Hình 2a).
Việc hệ thống quyết định recommend items nào cho mỗi user có thể được xác
định bằng nhiều cách khác nhau. Có thể sắp xếp unrated items theo thứ tự tự lớn
đến bé của các predicted ratings, hoặc chỉ chọn các items có normalized
predicted ratings dương - tương ứng với việc user này có nhiều khả năng thích
hơn.

65
Trước khi vào phần lập trình cho User-user CF, chúng ta cùng xem xét Item-item
CF.

2.3. Item-Item Collaborative Filtering


Một số hạn chês của User-user CF:
• Trên thực tế, số lượng users luôn lớn hơn số lượng items rất nhiều. Kéo
theo đó là Similarity matrix là rất lớn với số phần tử phải lưu giữ là hơn 1
nửa của bình phương số lượng users (chú ý rằng ma trận này là đối xứng).
Việc này, như đã đề cập ở trên, khiến cho việc lưu trữ ma trận này trong
nhiều trường hợp là không khả thi.
• Ma trận Utility YY thường là rất sparse. Với số lượng users rất lớn so với
số lượng items, rất nhiều cột của ma trận này sẽ rất sparse, tức chỉ có một
vài phần tử khác 0. Lý do là users thường lười rating. Cũng chính vì việc
này, một khi user đó thay đổi rating hoặc rate thêm items, trung bình cộng
các ratings cũng như vector chuẩn hoá tương ứng với user này thay đổi
nhiều. Kéo theo đó, việc tính toán ma trận Similarity, vốn tốn nhiều bộ nhớ
và thời gian, cũng cần được thực hiện lại.
Ngược lại , nếu chúng ta tính toán Similarity giữa các item rồi recommend
những item gần giống với item yêu thích của 1 User thì nó sẽ có những lợi ích
sau đây:
• Vì số lượng items thường nhỏ hơn số lượng users, Similarity matrix trong
trường hợp này cũng nhỏ hơn nhiều, thuận lợi cho việc lưu trữ và tính toán
ở các bước sau.
• Vì số lượng phần tử đã biết trong Utility matrix là như nhau nhưng số hàng
(items) ít hơn số cột (users), nên trung bình, mỗi hàng của ma trận này sẽ
có nhiều phần tử đã biết hơn số phần tử đã biết trong mỗi cột. Việc này
cũng dễ hiểu vì mỗi item có thể được rated bởi nhiều users. Kéo theo đó,
giá trị trung bình của mỗi hàng ít bị thay đổi hơn khi có thêm một
vài ratings. Như vậy, việc cập nhật ma trận Similarity Matrix có thể được
thực hiện ít thường xuyên hơn.
Cách tiếp cận thứ hai này được gọi là Item-item Collaborative Filtering. Hướng
tiếp cận này được sử dụng nhiều trong thực tế hơn.
Quy trình dự đoán missing ratings cũng tương tự như trong User-user CF. Hình
3 mô tả quy trình này với ví dụ nêu ở phần trên.

66
Có một điểm thú vị trong Similarity matrix ở Hình 3c) là có các phần tử trong hai
hình vuông xanh và đỏ đều là các số không âm, các phần tử bên ngoài là các số
âm. Việc này thể hiện rằng các items có thể được chia thành 2 nhóm rõ rệt với
những items có similarity không âm vào 1 nhóm. Như vậy, một cách vô tình,
chúng ta đã thực hiện việc item clustering. Việc này sẽ giúp ích rất nhiều trong
việc dự đoán ở phần sau.
Kết quả về việc chọn items nào để recommend cho mỗi user được thể hiện bởi
các ô màu đỏ trong Hình 3d). Kết quả này có khác một chút so với kết quả tìm
được bởi User-user CF ở 2 cột cuối cùng tương ứng với u5,u6u5,u6. Dường như
kết quả này hợp lý hơn vì từ Utility Matrix, có hai nhóm users thích hai
nhóm items khác nhau. (Bạn có nhận ra không?)

Về mặt tính toán, Item-item CF có thể nhận được từ User-user CF bằng cách
chuyển vị (transpose) ma trận utility, và coi như items đang rate users. Sau
khi tính ra kết quả cuối cùng, ta lại chuyển vị một lần nữa để thu được kết
quả.
Phần 3 dưới đây sẽ mô tả cách lập trình cho Collaborative Filtering trên python.
Chú ý rằng thư viện sklearn tôi vẫn dùng không có các modules cho
Recommendation Systems.

2.4. Code trên Python


67
Trong bày này, tôi lập trình theo hướng Hướng Đối Tượng cho class
CF. Class này được sử dụng chung cho cả User-user và Item-item CF. Trước hết,
chúng ta sẽ thử nghiệm với ví dụ nhỏ trong bài, sau đó sẽ áp dụng vào bài toán
với cơ sở dữ liệu MovieLens.
Dưới đây là file ex.dat mô tả dữ liệu đã biết cho ví dụ. Thứ tự của ba cột
là user_id, item_id, và rating. Ví dụ, hàng đầu tiên nghĩa là u_0 rates i_0 số sao
là 5.
Khi làm việc với Item-item CF, chúng ta chỉ cần đổi vị trí của hai cột đầu tiên để
nhận được ma trận chuyển vị.

2.4.1. Class CF
Khởi tạo class CF
Dữ liệu đầu vào của hàm khởi tạo class CF là ma trận Utility Y_data được lưu
dưới dạng một ma trận với 3 cột, k là số lượng các điểm lân cận được sử dụng để
dự đoán kết quả. dist_func là hàm đó similarity giữa hai vectors, mặc định
là cosine_similarity được lấy từ sklearn.metrics.pairwise. Bạn đọc cũng có thể
thử với các giá trị k và hàm dist_func khác nhau. Biến uuCF thể hiện việc đang
sử dụng User-user CF (1) hay Item-item CF(0).

68
Khi có dữ liệu mới, cập nhận Utility matrix bằng cách thêm các hàng này vào
cuối Utility Matrix. Để cho đơn giản, giả sử rằng không có users hay items mới,
cũng không có ratings nào bị thay đổi.

Tính toán normalized utility matrix và Similarity matrix

Thực hiện lại 2 hàm phía trên khi có thêm dữ liệu.

69
Dự đoán kết quả:
Hàm __pred là hàm dự đoán rating mà user u cho item i cho trường hợp User-
user CF. Vì trong trường hợp Item-item CF, chúng ta cần hiểu ngược lại nên
hàm pred sẽ thực hiện đổi vị trí hai biến của __pred. Để cho API được đơn giản,
tôi cho __pred là một phương thức private, chỉ được gọi trong class CF; pred là
một phương thức public, thứ tự của biến đầu vào luôn là (user, item), bất kể
phương pháp sử dụng là User-user CF hay Item-item CF.

Tìm tất cả các items nên được gợi ý cho user u trong trường hợp User-user CF,
hoặc tìm tất cả các users có khả năng thích item u trong trường hợp Item-item CF

70
In toàn bộ kết quả:

Source code cho class này có thể được tìm thấy ở đây.
2.4.2. Áp dụng vào ví dụ
Chúng ta sẽ thử với User-user CF trước:

Kết quả:

71
Với Item-item Collaborative Filtering:

Kết quả:

2.4.3. Áp dụng lên MovieLens 100k


Chúng ta cùng quay lại làm với cơ sở dữ liệu MoiveLens 100k như trong Content-
based Recommendation Systems. Nhắc lại rằng kết quả của phương pháp này có
trung bình lỗi là 1.2 sao với mỗi rating.
Chúng ta cùng xem kết quả với User-user CF và Item-item CF.
Trước hết, ta cần load dữ liệu.

Kết quả với User-user CF:

72
Kết quả với Item-item CF:

Từ đó ta nhận thấy Item-item CF cho lỗi nhỏ hơn (0.987) so với User-user CF
(0.995) và tốt hơn so với Content-based Recommendation Systems ở bài trước
(1.2).
Các bạn cũng có thể thay _neighborhood size k bằng các giá trị khác và so sánh
kết quả

2.5. Tài liệu tham khảo


[1] Recommendation Systems - Stanford InfoLab
[2] Collaborative Filtering - Stanford University
[3] Recommendation systems - Machine Learning - Andrew Ng
[4] Ekstrand, Michael D., John T. Riedl, and Joseph A. Konstan. “Collaborative
filtering recommender systems.” Foundations and Trends® in Human–Computer
Interaction 4.2 (2011): 81-173.
VII. Kết luận

73
Facebook, Instagram, Twitter, Shopee, Amazon,… chúng ta đang sống giữa
thời đại công nghệ 4.0, nơi có biết bao các sàn giao dịch, thương mại điện tử
đang dần trở nên quan trọng và không thể thiếu trong cuộc sống thường nhật
của mỗi con người. Con người không cần phải đến tận cửa hàng mà vẫn có
trong tay những món hàng mà mình muốn. Việc tự thu thập cho bản thân những
kiến thức về thương mại điện tử trong thời đại này là vô cùng cần thiết và hữu
ích.
Phát triển Hệ thống Thương mại điện tử là một môn học không chỉ thú vị về
cách tiếp cận mà còn rất cần thiết với các sinh viên ngành Công nghệ thông tin
vì tính thực tiễn và cập nhật xu hướng của nó. Thông qua môn học, em đã trực
tiếp được tiếp thu và nâng cao những kỹ năng của bản thân về Thiết kế kiến trúc
phần mềm (N-layer package design), phân tích ý kiến/cảm tình khách hàng
(Sentiment Analysis), phân tích hành vi khách hàng (Customer-Product Data
warehouse, Association rules and User interest) và thực hành lập trình hệ thống
bằng nền tảng Django.
Mặc dù quá trình thực hiện các bài tập lớn và tiểu luận rất vất vả, kết quả chưa
được như mong đợi, nhưng lượng kiến thức và kinh nghiệm mà cá nhân em thu
được quả thật không thể dễ dàng gì đánh đổi bằng tiền bạc.
Em xin gửi lời cảm ơn sâu sắc và chân thành nhất tới người thầy mà em vô cùng
yêu quý và kính trọng, thầy Quế. Cảm ơn thầy đã luôn đôn đốc, kỳ vọng và tạo
điều kiện học tập cho em và cả nhóm. Những gì thầy dành cho chúng em trong
suốt năm học vừa qua, chúng em xin phép ghi nhớ mãi. Và em cũng xin gửi lời
cảm ơn của mình đến những người bạn trong nhóm, những người bạn tâm
huyết, sôi nổi và luôn cố gắng hết mình để đạt được kết quả cao nhất của môn
học: bạn Dũng chăm chỉ, bạn Đạt và bạn Nam vừa học giỏi vừa giàu có , luôn
hỗ trợ em trong những lúc khó khăn về mặt tinh thần lẫn tài chính, bạn Khánh
luôn tham vọng và cầu tiến , bậc thầy tán gái .

74
Quãng thời gian 4 năm rưỡi sắp kết thúc, thời sinh viên sắp trôi qua. Hiện tại cá
nhân em đang rất háo hức đón chờ ngày được đi thực tập và báo cáo đồ án, đón
nhận trên tay tấm bằng kỹ sư đỏ rực, điều đáng tiếc rằng em đã không trân trọng
quãng thời gian 5 năm đại học khi nhìn lại nó đã trôi qua rất nhanh nhưng tất cả
đều là những kí ức tươi đẹp mà khi nào có con em sẽ bảo nó tránh xa những thứ
em đã từng trải nghiệm , bài học ngu người .
Cảm ơn tất cả những gì tốt đẹp nhất mà mọi người và ngôi trường PTIT thân
yêu đã mang lại cho tôi. Cảm ơn gia đình đã luôn là chỗ dựa vững chắc, luôn hỗ
trợ quá trình học tập của tôi. Tôi xin cảm ơn và ghi nhớ tất cả trong trái tim của
mình. Hy vọng với những kiến thức và kỹ năng thu thập được khi còn ngồi trên
ghế nhà trường sẽ giúp tôi trở thành 1 kỹ sư Công nghệ thông tin năng động và
thành công trong sự nghiệp sau này , nhận lương tháng 10,000 usd để không
phụ công của thầy

LỜI KẾT
Cảm ơn thầy và các bạn đã giúp đỡ em để có thể hoàn thành một cách tốt nhất
bài tiểu luận này. Nếu có thiếu sót nào trong quá trình thực hiện, em mong nhận
được sự góp ý thẳng thắn từ thầy để có thể rút kinh nghiệm cho sau này. Phát
triển Hệ thống Thương mại điện tử thực sự là một môn học hay và rất có ý
nghĩa với chúng em.
Chúc thầy luôn mạnh khoẻ, vui vẻ và thành công hơn nữa trong sự nghiệp của
mình, chúc các bạn học tập thật tốt!
Hà đông , ngày 20 tháng 6 năm 2021
Học sinh của thầy
Dao

75
Lê Quang Đạo

76

You might also like