ĐẠI HỌC QUỐC GIA HÀ NỘI 
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ 
HOÀNG ANH DŨNG 
PHÂN TÍCH HÀNH VI SỬ DỤNG DỊCH VỤ VIỄN THÔNG 
CỦA KHÁCH HÀNG DỰA TRÊN 
THUẬT TOÁN PHÂN CỤM ĐƯA RA CHÍNH SÁCH 
KHUYẾN MẠI VỀ SẢN PHẨM VÀ THEO PHÂN KHÚC 
KHÁCH HÀNG 
Ngành: Công Nghệ Thông Tin 
Chuyên ngành: Khoa Học Máy Tính 
Mã Số: 8480101.01 
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN 
NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. TRẦN TRÚC MAI 
 TS. NGUYỄN ĐÌNH HÓA 
Hà nội – 2020
2 
LỜI CẢM ƠN 
Trước tiên tôi xin dành lời cảm ơn châ
                
              
                                            
                                
            
 
            
                
81 trang | 
Chia sẻ: huong20 | Lượt xem: 717 | Lượt tải: 0
              
            Tóm tắt tài liệu Luận văn Phân tích hành vi sử dụng dịch vụ viễn thông của khách hàng dựa trên thuật toán phân cụm đưa ra chính sách khuyến mại về sản phẩm và theo phân khúc khách hàng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
n thành và sâu sắc đến thầy giáo, 
TS Trần Trúc Mai, người đã định hướng về mục tiêu và cách thức thực hiện đề 
tài. TS Nguyễn Đình Hóa – người đã hướng dẫn, khuyến khích, chỉ bảo và tạo 
cho tôi những điều kiện tốt nhất từ khi bắt đầu cho tới khi hoàn thành nhiệm 
vụ và đề tài của mình. 
Tôi xin dành lời cảm ơn chân thành tới các thầy cô giáo khoa Công nghệ 
thông tin, trường Đại học Công nghệ, ĐHQGHN đã tận tình đào tạo, cung cấp 
cho tôi những kiến thức vô cùng quý giá và đã tạo điều kiện tốt nhất cho tôi 
trong suốt quá trình học tập, nghiên cứu tại trường. 
Đồng thời tôi xin cảm ơn tất cả những người thân yêu trong gia đình tôi 
cùng toàn thể bạn bè những người đã luôn giúp đỡ, động viên tôi những khi 
vấp phải những khó khăn, bế tắc. 
Cuối cùng, tôi xin chân thành cảm ơn các đồng nghiệp của tôi tại Trung 
Tâm Phân Tích Dữ Liệu – Viettel, đã giúp đỡ, tạo điều kiện thuận lợi cho tôi 
học tập và nghiên cứu chương trình thạc sĩ tại Đại học Công nghệ, Đại học 
Quốc Gia Hà Nội. 
3 
LỜI CAM ĐOAN 
Tôi xin cam đoan rằng luận văn thạc sĩ công nghệ thông tin “PHÂN 
TÍCH HÀNH VI SỬ DỤNG DỊCH VỤ VIỄN THÔNG CỦA KHÁCH 
HÀNG DỰA TRÊN THUẬT TOÁN PHÂN CỤM ĐƯA RA CHÍNH 
SÁCH KHUYẾN MẠI VỀ SẢN PHẨM VÀ THEO PHÂN KHÚC 
KHÁCH HÀNG” là công trình nghiên cứu của riêng tôi, không sao chép lại 
của người khác. Trong toàn bộ nội dung của luận văn, những điều đã được 
trình bày hoặc là của chính cá nhân tôi hoặc là được tổng hợp từ nhiều nguồn 
tài liệu. Tất cả các nguồn tài liệu tham khảo đều có xuất xứ rõ ràng và hợp 
pháp. 
Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo 
quy định cho lời cam đoan này. 
Hà Nội, ngày . tháng  năm .. 
.. 
4 
Mục Lục 
LỜI CẢM ƠN ....................................................................................................................... 2 
LỜI CAM ĐOAN ................................................................................................................. 3 
Chương 1: Giới thiệu ....................................................................................................... 7 
Chương 2: Công cụ, nền tảng, thuật toán sử dụng và ứng dụng Phân tích dữ liệu .......... 9 
2.1. Các công cụ nền tảng .............................................................................................. 9 
2.1.1. Big Data ......................................................................................................... 9 
2.1.2. Giới thiệu về Hadoop ................................................................................... 13 
2.1.3. Các ứng dụng trên nền tảng Apache Hadoop .............................................. 14 
2.1.4. HDFS ........................................................................................................... 16 
2.1.5. Đọc ghi dữ liệu trên HDFS .......................................................................... 17 
2.1.6. Map-Reduce ................................................................................................. 19 
2.1.7. SPARK, nền tảng công cụ và ứng dụng ...................................................... 20 
2.2. Giới thiệu về học máy ........................................................................................... 26 
2.2.1. Một số khái niệm cơ bản .............................................................................. 27 
2.2.2. Các vấn đề trong quá trình thực hiện đề tài ................................................. 30 
Chương 3: Spark và giải thuật rừng ngẫu nhiên song song (Parallel Random Forest - 
PRF) ..................................................................................................................... 32 
3.1. Thuật toán rừng ngẫu nhiên .................................................................................. 33 
3.2. Giải thuật xử lý song song rừng ngẫu nhiên cho dữ liệu lớn trong nền tảng Spark .. 
 ............................................................................................................................... 36 
3.2.1. Tối ưu hóa xử lý dữ liệu đồng thời. ............................................................. 37 
3.2.2. Tối ưu hóa xử lý tiến trình đồng thời ........................................................... 44 
3.2.3. Phân tích phương pháp xử lý task đồng thời ............................................... 49 
3.3. Kmeans, tối ưu hóa xử lý Kmeans với Spark. ...................................................... 52 
Chương 4: Triển khai thực nghiệm ................................................................................ 57 
4.1. Cơ sở dữ liệu Khách hàng 360 độ ......................................................................... 57 
4.2. Mô hình ứng dụng ................................................................................................. 60 
4.2.1. Quá trình Phân cụm dữ liệu huấn luyện: ..................................................... 63 
4.2.2. Lựa chọn ngẫu nhiên các thuộc tính và đánh giá: ........................................ 67 
4.2.3. Thực hiện huấn luyện dữ liệu với mô hình Parallel RandomForest ............ 67 
4.3. Đánh giá hiệu suất: ................................................................................................ 73 
4.3.1. Đánh giá thời gian xử lý với nhóm dữ liệu .................................................. 73 
4.3.2. Đánh giá thời gian xử lý với từng cụm ........................................................ 73 
4.4. Đánh giá hiệu quả thực tế: .................................................................................... 74 
KẾT LUẬN VÀ ĐỊNH HƯỚNG NGHIÊN CỨU TIẾP THEO ........................................ 77 
TÀI LIỆU THAM KHẢO ................................................................................................... 80 
5 
DANH MỤC HÌNH VẼ 
Hình 2.1. Kiến trúc HDFS .............................................................................. 16 
Hình 2.2. Luồng đọc dữ liệu trên HDFS ........................................................ 18 
Hình 2.3. Luồng ghi dữ liệu trên HDFS ......................................................... 18 
Hình 2.4. Mô hình Map-Reduce...................................................................... 19 
Hình 2.5. Cơ chế Map-Reduce ........................................................................ 20 
Hình 2.6. thành phần của Spark ..................................................................... 22 
Hình 2.7. Cơ chế hoạt động của Spark ........................................................... 23 
Hình 2.8. Cơ chế hoạt động của Spark và RDD ............................................. 25 
Hình 2.9. Zeppelin và phương thức hoạt động ............................................... 26 
Hình 2.10. Mô hình học có giám sát ............................................................... 28 
Hình 2.11. Mô hình học bán giám sát ............................................................ 30 
Hình 3.1. Đồ thị vòng DAG được hình thành khi xử lý dữ liệu song song trên 
Spark UI. ......................................................................................................... 32 
Hình 3.2. Quá trình xây dựng thuật toán rừng ngẫu nhiên RandomForest ... 34 
Hình 3.3. Quá trình phân chia dữ liệu theo chiều dọc của các RDDs trong 
Spark ............................................................................................................... 38 
Hình 3.4. Quá trình xử lý ghép dữ liệu đồng thời của PRF ........................... 40 
Hình 3.5. Ví dụ về 3 kịch bản khi phân chia dữ liệu....................................... 42 
Hình 3.6. Ví dụ của task DAG cho một cây quyết định của PRF ................... 46 
Hình 3.7. Hình dạng cụm dữ liệu được khám phá bởi k-means ..................... 53 
Hình 3.8. Thuật toán Kmeans trong Spark ..................................................... 54 
Hình 4.1. Quá trình kết hợp K-Means và RandomForest .............................. 60 
Hình 4.2. Tỷ lệ độ đo theo ROC của các tập train, test và validation ........... 69 
Hình 4.3. Important Feataures v1 .................................................................. 70 
Hình 4.4. ROC - Receiver operating characteristic ....................................... 71 
Hình 4.5. Cumulative Gain ............................................................................. 71 
Hình 4.6. Tỷ lệ độ chính xác trung bình của các mô hình cây khác ............... 72 
Hình 4.7. Phương pháp đo lường kết quả trong thực tế ................................. 74 
Hình 4.8. So sánh tỷ lệ triển khai thực tế TG và MHO .................................. 75 
Hình 4.9. So sánh tỷ lệ triển khai thực tế MHO và HO .................................. 76 
6 
DANH MỤC BẢNG 
Bảng 3-1: Ví dụ về DSI của PRF .................................................................... 40 
Bảng 4-1: Danh mục thuộc tính đánh giá xây dựng C360 ............................. 59 
Bảng 4-2: Danh mục thuộc tính được sử dụng ............................................... 63 
Bảng 4-3: Giá trị DaviesBouldin .................................................................... 64 
Bảng 4-4: Kết quả phân cụm .......................................................................... 64 
Bảng 4-5: Phân nhóm khách hàng trên 40 tuổi và dưới 40 tuổi ..................... 66 
Bảng 4-6: So sánh tỷ lệ Accuracy giữa Precision, Recall .............................. 69 
Bảng 4-7: So sánh thời gian chạy giữa KNN và PRF. ................................... 70 
7 
Chương 1: Giới thiệu 
Trong thời đại ngày nay, để phát triển một doanh nghiệp, ngoài vốn và 
nhân lực, “dữ liệu” (data) được coi là nguồn lực không thể thiếu được. Ai cũng 
đã từng ngạc nhiên nhận thấy khi mua sắm trực tuyến trên các trang thương 
mại điện tử như eBay, Amazon, Sendo hay Tiki, các trang thương mại điện tử 
sẽ gợi ý một loạt các sản phẩm có liên quan và phù hợp với nhu cầu của bạn. 
Ví dụ khi xem điện thoại, trang mua sắm trực tuyến sẽ gợi ý cho bạn mua thêm 
ốp lưng, pin dự phòng; hoặc khi mua áo thun thì sẽ có thêm gợi ý quần jean và 
thắt lưng 
Bí ẩn đằng sau các trang web thông minh này là mọi sự chào mời sản 
phẩm đều dựa trên các nghiên cứu về sở thích, thói quen của khách hàng cũng 
như phân loại được các nhóm khách hàng khác nhau... Vậy những thông tin để 
phân tích này có được từ đâu và có tác động thế nào đến việc sản xuất kinh 
doanh của doanh nghiệp? Thứ nhất, dữ liệu khổng lồ về khách hàng có thể có 
từ các thông tin mà các doanh nghiệp thu thập trong lúc khách hàng ghé thăm, 
tương tác hay mua sắm trên website của mình; dữ liệu này cũng có thể được 
mua lại từ các công ty chuyên cung cấp dữ liệu khách hàng. Các thông tin này 
không chỉ giúp nhà cung ứng hàng hóa, dịch vụ tăng lợi nhuận cho chính họ 
mà còn tăng trải nghiệm mua sắm của người dùng. Một mặt, nhờ quá trình tìm 
hiểu, phân tích khách hàng, doanh nghiệp có thể tạo ra các sản phẩm đáp ứng 
nhu cầu của khách hàng, cũng như xây dựng chính sách phân phối và bán sản 
phẩm đến tay người tiêu dùng một cách có hiệu quả nhất. Mặt khác, bản thân 
người tiêu dùng có thể tiết kiệm thời gian và yên tâm trong trải nghiệm mua 
sắm của mình. Hơn thế nữa, ở tầm ngành và vĩ mô, ứng dụng dữ liệu lớn (Big 
Data) có thể giúp các tổ chức và chính phủ dự đoán được tỉ lệ thất nghiệp, xu 
hướng nghề nghiệp của tương lai để đầu tư cho những hạng mục đó, hoặc cắt 
giảm chi tiêu, kích thích tăng trưởng kinh tế... thậm chí là ra phương án phòng 
ngừa trước một dịch bệnh nào đó. 
Việc xây dựng và ứng dụng nền tảng Big Data nếu được khai thác hiệu 
quả sẽ đem lại những lợi thế cạnh tranh và hiệu quả to lớn trong nhiều lĩnh vực, 
đặc biệt trong bối cảnh thị trường dịch vụ tài chính đang bão hòa, trên cơ sở đó 
phân tích những ứng dụng của Big Data và các điều kiện nhằm ứng dụng Big 
Data cùng với phân tích dữ liệu để sử dụng nguồn tài nguyên hợp lý và tối đa 
hóa doanh thu cũng như đưa các mục tiêu kinh doanh gắn liền với hành vi 
8 
khách hàng, nhằm mang lại cho doanh nghiệp phương án kinh doanh hiệu quả 
nhất. 
Việc sử dụng và khai thác dữ liệu lớn như một nguồn tài nguyên tương 
tự như dầu khí, hay các nguồn tài nguyên khác là phương án để đưa doanh 
nghiệp tiếp cận đến người dùng một cách hiệu quả nhất, kết hợp với mục tiêu 
kinh doanh để hoàn thiện hơn các chính sách, tối đa hóa lợi ích cho người dùng 
và tăng trưởng doanh thu bền vững cho doanh nghiệp. 
Với đề tài “Phân Tích Hành Vi Sử Dụng Dịch Vụ Viễn Thông 
Của Khách Hàng Dựa Trên Thuật Toán Phân Cụm Đưa Ra Chính 
Sách Khuyến Mại Về Sản Phẩm Và Theo Phân Khúc Khách Hàng” 
nhằm mục tiêu đưa ứng dụng Phân tích dữ liệu lớn vào khai thác nguồn tài 
nguyên đặc biệt – Big Data. Sử dụng các công cụ khai thác Big Data, các công 
cụ được sử dụng để lưu trữ và vận hành hệ thống Big Data - Hadoop, các công 
cụ xử lý học máy, xử lý dữ liệu lớn như Spark, Zeppelin (Spark ML), ứng dụng 
hệ khuyến nghị, học máy và các kỹ thuật phân tích hành vi khách hàng nhằm 
đưa ra kết quả phù hợp nhất với từng nhóm đối tượng khách hàng sử dụng dịch 
vụ. 
Phần còn lại của luận văn được trình bày theo cấu trúc như sau. 
Chương 2 trình bày các khái niệm cơ bản phục vụ cho nghiên cứu của 
đề tài, Big Data, các công cụ được sử dụng trong quá trình thực hiện đề tài, 
phương thức xây dựng hệ cơ sở dữ liệu khách hàng 360 – là bộ khung dữ liệu 
sử dụng xuyên suốt quá trình xây dựng các mô hình học máy và sử dụng để 
đánh giá các mô hình học máy, các thuật toán sẽ sử dụng trong quá trình thực 
hiện. Tính ứng dụng khi sử dụng thư viện Spark ML và các điểm ưu việt của 
Spark khi sử dụng để xây dựng và ứng dụng cho giải thuật rừng ngẫu nhiên 
song song. 
Chương 3 sẽ trình bày về quá trình thực hiện, các phiên bản xây dựng 
mô hình và kết quả thực nghiệm. 
Cuối cùng sẽ là phần kết luận, ý nghĩa phương pháp triển khai, các kết 
quả đạt được và định hướng nghiên cứu tiếp theo. 
9 
Chương 2: Công cụ, nền tảng, thuật toán sử dụng 
và ứng dụng Phân tích dữ liệu 
2.1. Các công cụ nền tảng 
Với sự xuất hiện liên tục của nhiều phương thức phổ biến thông tin mới, 
cùng sự gia tăng của công nghệ điện toán đám mây và Internet vạn vật (IoT), 
dữ liệu không ngừng tăng lên với tốc độ cao. Quy mô dữ liệu toàn cầu liên tục 
tăng với tốc độ 2 lần sau mỗi hai năm [1]. Giá trị ứng dụng của dữ liệu trong 
mọi lĩnh vực đang trở nên quan trọng hơn bao giờ hết. Tồn tại một lượng lớn 
thông tin đáng giá trong dữ liệu có sẵn. Sự xuất hiện của thời đại dữ liệu lớn 
cũng đặt ra những vấn đề và thách thức nghiêm trọng bên cạnh những lợi ích 
rõ ràng. Do nhu cầu kinh doanh và áp lực cạnh tranh, hầu hết mọi doanh nghiệp 
đều có yêu cầu cao về xử lý dữ liệu theo thời gian thực và hợp lệ [2]. Do đó, 
vấn đề đầu tiên là làm thế nào để khai thác thông tin có giá trị từ dữ liệu khổng 
lồ một cách hiệu quả và chính xác. Đồng thời, dữ liệu lớn nắm giữ các đặc 
điểm như số chiều cao, độ phức tạp và nhiễu. Dữ liệu khổng lồ thường chứa 
các thuộc tính được tìm thấy trong các biến đầu vào khác nhau ở hàng trăm 
hoặc hàng nghìn cấp, trong khi mỗi một trong số chúng có thể chứa một ít 
thông tin. Vấn đề thứ hai là chọn các kỹ thuật thích hợp có thể dẫn đến hiệu 
suất phân loại tốt cho tập dữ liệu chiều nhiều chiều. Xem xét các sự kiện nói 
trên, khai thác và phân tích dữ liệu cho dữ liệu quy mô lớn đã trở thành một 
chủ đề nóng trong học thuật và nghiên cứu công nghiệp. Tốc độ khai thác và 
phân tích dữ liệu đối với dữ liệu quy mô lớn cũng đã thu hút nhiều sự quan tâm 
của cả giới học thuật và công nghiệp. Các nghiên cứu về khai thác dữ liệu phân 
tán và song song dựa trên nền tảng điện toán đám mây đã đạt được nhiều thành 
tựu thuận lợi [3],[4]. Hadoop [5] là một nền tảng đám mây nổi tiếng được sử 
dụng rộng rãi trong khai thác dữ liệu. 
2.1.1. Big Data 
Khái niệm Big Data 
Big Data (Dữ liệu lớn) là thuật ngữ mô tả quá trình xử lý dữ liệu trên 
một tập dữ liệu lớn bao gồm cả dữ liệu có cấu trúc hay không có cấu trúc. Big 
Data rất quan trọng với các tổ chức, doanh nghiệp thì dữ liệu ngày một lớn và 
càng nhiều dữ liệu sẽ giúp các phân tích càng chính xác hơn. Việc phân tích 
10 
chính xác này sẽ giúp doanh nghiệp đưa ra các quyết định giúp tăng hiệu quả 
sản xuất, giảm rủi ro và chi phí. 
Những dữ liệu này tới từ mọi nơi – ví dụ như từ những chiếc cảm biến 
để thu thập thông tin thời tiết, những thông tin được cập nhật trên các trang 
web mạng xã hội, những bức ảnh và video kỹ thuật số được đưa lên mạng, dữ 
liệu giao dịch của các hoạt động mua sắm trên mạng... – dưới mọi hình thức 
khác nhau (có cấu trúc, phi cấu trúc, bán cấu trúc). Đó chính là dữ liệu lớn. 
Big Data là thuật ngữ dùng để chỉ một tập hợp dữ liệu rất lớn và hỗn tạp 
đến nỗi những công cụ, ứng dụng xử lí dữ liệu truyền thống khó có thể nào 
đảm đương được. Bằng việc tổng hợp một lượng thông tin lớn từ các nguồn 
khác nhau khiến cho Big Data trở thành một công cụ rất mạnh cho việc ra các 
quyết định kinh doanh, nhận diện hành vi và xu hướng nhanh hơn và tốt hơn 
rất nhiều so với cách thức truyền thống. Big Data được nhận diện trên ba khía 
cạnh chính: Dữ liệu (Data), Công nghệ (Technology), Quy mô (Size). Thứ 
nhất, dữ liệu (data) bao gồm các dữ liệu thuộc nhiều định dạng khác nhau như 
hình ảnh, video, âm nhạc trên Internet [6]; gồm các dữ liệu thu thập từ các 
hệ thống cung ứng dịch vụ công nghệ thông tin có kết nối với hệ thống máy 
chủ; dữ liệu của khách hàng ở các ứng dụng thông minh và các thiết bị có kết 
nối mạng; dữ liệu của người dùng để lại trên các nền tảng của mạng xã hội, 
việc ứng dụng khai phá dữ liệu lớn sẽ tạo thành quy trình khép kín, việc bổ 
sung dữ liệu và huấn luyên được diễn ra liên tục [7]. Do các dữ liệu được cập 
nhật qua các thiết bị kết nối mạng từng giờ, từng phút, từng giây và đến từ 
nhiều nguồn khác nhau nên khối lượng dữ liệu này là rất lớn (Big). Hiện nay, 
Big Data được đo lường theo đơn vị Terabytes (TB), Petabytes (PB) và 
Exabytes (EB). Có thể dễ dàng lấy một vài ví dụ như Walmart xử lý hơn 1 triệu 
giao dịch của khách hàng mỗi giờ, dữ liệu nhập vào ước tính hơn 2,5 PB; 
Facebook có hơn 1.9 tỷ người dùng đồng thời, có hàng trăm server xử lý và 
lưu trữ dữ liệu [8]. Twitter là một hệ thống mạng xã hội với 1,3 tỷ người dùng 
đang hoạt động và trong giai đoạn đầu [9]. Yếu tố nhận diện thứ hai của Big 
Data là công nghệ (technology). Công nghệ thường được thiết kế và hình thành 
một hệ sinh thái từ dưới đi lên để có khả năng xử lý các dữ liệu lớn và phức 
tạp. Một trong những hệ sinh thái mạnh nhất hiện nay phải kể đến Hadoop với 
khả năng xử lý dữ liệu có thể được tăng lên cùng mức độ phức tạp của dữ liệu, 
năng lực này là một công cụ vô giá trong bất kỳ ứng dụng Big Data nào. Yếu 
tố nhận diện thứ ba của Big Data là quy mô dữ liệu. Hiện nay vẫn chưa có câu 
11 
trả lời chính xác cho câu hỏi dữ liệu thế nào gọi là lớn. Theo ngầm hiểu thì khi 
dữ liệu vượt quá khả năng xử lý của các hệ thống truyền thống thì sẽ được xếp 
vào Big Data. 
Việc bản thân các doanh nghiệp cũng đang sở hữu Big Data của riêng 
mình đã trở nên phổ biến. Chẳng hạn, như trang bán hàng trực tuyến eBay thì 
sử dụng hai trung tâm dữ liệu với dung lượng lên đến 40 petabyte để chứa 
những truy vấn, tìm kiếm, đề xuất cho khách hàng cũng như thông tin về hàng 
hóa của mình. Hay nhà bán lẻ online Amazon.com phải xử lí hàng triệu hoạt 
động mỗi ngày cũng như những yêu cầu từ khoảng nửa triệu đối tác bán hàng. 
Tương tự, Facebook cũng phải quản lí 50 tỉ bức ảnh từ người dùng tải lên [10], 
YouTube hay Google thì phải lưu lại hết các lượt truy vấn và video của người 
dùng cùng nhiều loại thông tin khác có liên quan. Theo kết quả khảo sát được 
thực hiện bởi Qubole - công ty hàng đầu về cung cấp giải pháp, nền tảng quản 
lí dữ liệu hạ tầng đám mây phục vụ phân tích - và bởi Dimensional Research - 
một tổ chức nghiên cứu thị trường công nghệ, lĩnh vực chăm sóc khách hàng, 
kế hoạch công nghệ thông tin, quy trình bán hàng và hoạt động tài chính là các 
lĩnh vực thu lợi nhiều nhất từ Big Data. Qua đó, thấy được là mục đích khai 
thác Big Data của các nhà cung ứng hàng hóa, dịch vụ toàn cầu là hướng đến 
chăm sóc khách hàng, phân tích dữ liệu khách hàng để phát triển sản phẩm, 
dịch vụ; ứng dụng thông minh để tăng trải nghiệm của khách hàng và giữ chân 
khách hàng khi sự cạnh tranh ngày càng gay gắt giữa các nhà cung ứng ở hầu 
hết các lĩnh vực kinh doanh. Với các công cụ phân tích, đặc biệt là công cụ 
phân tích dự báo (Predictive Analytics) và khai thác dữ liệu (Data mining) [19], 
Big Data giúp các doanh nghiệp đo lường, phân tích các vấn đề liên quan đến 
sản phẩm, phát hiện các cơ hội và nguy cơ rủi ro, đồng thời, dự báo doanh thu 
từ hoạt động kinh doanh hàng ngày. 
Big Data có thể bao gồm những kiểu dữ liệu sau: 
Dữ liệu của các hệ thống doanh nghiệp truyền thống bao gồm các dữ 
liệu từ hệ thống quản lý khách hàng, các giao dịch của hệ thống tài chính doanh 
nghiệp, các dữ liệu kế toán, thông tin giao dịch của khách hàng và doanh 
nghiệp... 
12 
Dữ liệu sinh tự động hoặc do cảm biết: Bao gồm dữ liệu thông tin khách 
hàng sử dụng dịch vụ, lịch sử truy cập các trang web, các dữ liệu ghi lịch sử 
thiết bị sử dụng 
Dữ liệu mạng xã hội- bao gồm các dữ liệu được sinh ra từ quá trình sử 
dụng mạng xã hội của người dùng như ảnh, video, thông tin trên Facebook, 
Twitter, Instagram 
Đặc điểm của Big Data 
Ba đặc điểm chính của Big Data bao gồm Dung lượng (volume), Tốc độ 
(velocity), Tính đa dạng (variety). Dung lượng của Dữ liệu lớn đang tăng lên 
mạnh mẽ từng ngày [10].Theo thông tin được Google công bố, cứ mỗi 1 giây, 
87000 từ khóa tìm kiếm được thực hiện, hàng petabyte dữ liệu được tạo ra trên 
toàn thế giới. Về Tốc độ (Velocity) phản ánh tốc độ mà tại đó dữ liệu được 
phân tích bởi các công ty để cung cấp một trải nghiệm người dùng tốt hơn. Với 
sự ra đời của các kỹ thuật, công cụ, ứng dụng lưu trữ, nguồn dữ liệu liên tục 
được bổ sung với tốc độ nhanh chóng. Về Tính đa dạng (Variety) của dữ liệu, 
việc đa dạng hóa các nguồn dữ liệu đầu vào, từ dữ liệu có cấu trúc, bán cấu 
trúc cho đến dữ liệu không có cấu trúc, từ các loại dữ liệu dạng giao dịch cho 
đến các dữ liệu dạng văn bản sinh ngẫu nhiên trên internet. 
Độ lớn dữ liệu (volume): Dữ liệu sinh ra tự động (machine-generated 
data) có số lượng nhiều hơn rất nhiều so với dữ liệu truyền thống. Dữ liệu có 
thể sinh ra hàng TB trong thời gian ngắn và dữ liệu lưu trữ có thể lên đến 
Petabytes. Cách đây vài năm, việc lưu trữ dữ liệu lớn là một vấn đề khó khăn. 
Tuy nhiên hiện nay, với việc phần cứng ngày càng rẻ cộng thêm công nghệ lưu 
trữ đám mây thì việc xác định giá trị cần thiết từ tập dữ liệu lớn mới là vấn đề 
cốt yếu. 
Tốc độ xử lý dữ liệu (velocity): Dữ liệu lớn không đồng nghĩa với xử lý 
chậm. Ngày nay các hệ thống media cần xử lý nhanh và có phản hồi chấp nhận 
được với người dùng. Trong việc xử lý dữ liệu lớn ta luôn cần quan tâm đến 
Tốc độ xử lý dữ liệu 
Tính đa dạng dữ liệu (variety): Với việc thu thập từ nhiều nguồn dữ liệu 
khác nhau (web, mobile), Big Data không chỉ có dữ liệu kiểu truyền thống 
dạng schema mà ngày nay còn có nhiều loại dữ liệu khác như dạng image, 
13 
video, cấu trúc dữ liệu phức tạp khác Big Data có thể xử lý dữ liệu có cấu 
trúc, phi cấu trúc và bán cấu trúc. 
Để đáp ứng được về các tính chất đó của Big Data, các công ty lớn trên 
thế giới như Amazon, Google, FaceBook đều sử dụng nền tảng Hadoop làm 
công cụ lưu trữ và xử lý dữ liệu. 
2.1.2. Giới thiệu về Hadoop 
Apache Hadoop [11] là một framework cho phép xử lý phân tán một tập 
dữ liệu lớn qua cụm (cluster) các máy tính bằng việc sử dụng mô hình lập trình 
đơn giản. Được thiết kế để có thể giãn nở thực hiện trên một đến hàng nghìn 
máy tính là nơi tính toán và lưu trữ cục bộ. Một điểm mới của Apache Hadoop 
là thay vì thiết đặt cơ chế sẵn sàng cao (High Availability - HA) bằng phần 
cứng thì bản thân Hadoop được thiết kế để phát hiện và quản lý lỗi tại tầng ứng 
dụng, do đó sẽ đưa ra dịch vụ có tính sẵn sàng cao HA tại cụm các máy tính 
nơi có thể xảy ra lỗi bằng cách thiết đặt thêm một ứng dụng (node) dưới dạng 
hoạt động hoặc chế độ chờ (active/standby). 
Apache Hadoop được tạo bởi 2 thành phần bao gồm một hệ thống file 
phân tán Hadoop Distributed Filesystem (HDFS) và một layer để tính toán theo 
mô hình xử lý Map Reduce. Hadoop là một open source cho phép xử lý dữ liệu 
theo lô và có khả năng xử lý khối lượng dữ liệu cực lớn. 
Hadoop sử dụng một cụm các server thông thường để lưu trữ, tính toán. 
Việc tính toán trên Hadoop Distributed Filesystem (HDFS) được thực hiện một 
cách song song và trừu tượng với các developer giúp họ tránh được việc lập 
trình mạng và xử lý bài toán đồng bộ phức tạp. Không giống như nhiều hệ 
thống phân tán khác, Hadoop cung cấp việc xử lý logic trên nơi lưu dữ liệu mà 
không phải lấy dữ liệu từ các máy khác giúp tăng hiệu năng một cách mạnh 
mẽ. 
Hadoop bao gồm những module sau: 
Hadoop Common: Các tiện ích cơ bản hỗ trợ Hadoop 
Hadoop Distributed File System (HDFS™): Hệ thống file phân tán 
cung cấp khả năng truy vấn song song tối đa hóa theo đường truyền truy cập 
bởi ứng dụng 
14 
Hadoop YARN: Framework quản lý lập lịch tác vụ và tài nguyên trên 
cụm. 
Hadoop MapReduce: Hệ thống YARN-based để xử lý tập dữ liệu lớn. 
2.1.3. Các ứng dụng trên nền tảng Apache Hadoop 
Apache phát triển một số ứng dụng để việc sử dụng MapReduce một 
cách dễ dàng hơn đồng thời hỗ trợ việc ghi và lấy dữ liệu trên HDFS được đơn 
giản. Sau đây là một số ứng dụng thông dụng chúng ta cần quan tâm đến: 
Apache Hive 
Hive tạo ra một cơ sở dữ liệu quan hệ dạng trừu tượng cho phép các 
developer có thể truy vấn dữ liệu bằng SQL. Thực chất đây là việc thi hành 
một hoặc nhiều job MapReduce trên các cụm. 
Hive thực hiện việc tạo ra một schema dạng bảng trên tập các file đang 
tồn tại trên HDFS và quản lý các bản ghi được trích xuất khi chạy một query. 
Bản thân dữ liệu trên đĩa không thay đổi mà chỉ được lấy ra tại thời điểm query. 
Các câu lệnh HiveQL được dịch và thực thi trên các lớp map và reduce có sẵn 
tương ứng với câu lệnh SQL đó. 
Apache Pig 
Giống như Hive, Apache Pig được tạo ra để đơn giản việc sử dụng 
MapReduce job, mà không cần thiết phải viết Java Code. Thay vào đó, người 
dùng sẽ viết các job xử lý dữ liệu trên ngôn ngữ high-level script mà Pig đã 
xây dựng. Trong trường hợp cần thao tác xử lý dữ liệu đặc biệt mà Pig chưa hỗ 
trợ chúng ta có thể hoàn toàn mở rộng Pig script bằng Java. 
Apache Sqoop 
Việc chuyển đổi dữ liệu từ dữ liệu quan hệ sang dữ liệu trên Hadoop là 
một trong vấn đề quan trọng và phổ biến hiện nay. Sqoop viết tắt của “SQL to 
Hadoop” thực hiện chuyển đổi dữ liệu 2 chiều giữa Hadoop và hầu hết các cơ 
sở dữ liệu sử dụng JDBC driver. Sử dụng MapReduce, Sqoop thực hiện các 
hoạt động một cách song song mà không cần phải viết code. Sqoop hỗ trợ các 
plugin cho từng loại database cụ thể cung cấp các đặc tính cơ bản của hệ quản 
trị cơ sở dữ liệu quan hệ đó. Hiện nay Sqoop có hỗ trợ sẵn các khai kết nối 
15 
connectors (hỗ trợ trực tiếp) cho MySQL và PostgreSQL và kèm theo một số 
connector free cài đặt thêm để hỗ trợ Teradata, Netezza, SQL server và Oracle. 
Apache Flume 
Apache Flume là một hệ thống để tập hợp các dữ liệu streaming được 
thiết kế để truyền khối lượng lớn dữ liệu vào hệ thống ví dụ như Hadoop. Nó 
hỗ trợ kết nối và ghi dữ liệu trực tiếp tới HDFS. 
Apache Oozie 
 Trong thực tế, sẽ có rất nhiều job Map Reduce được chạy do đó Apache 
Oozie được sinh ra với mục đích trở thành một workflow engine để điều phối 
các job này trên các Hadoop cluster. Workflow có thể hoạt động dựa trên cơ 
chế thời gian hoặc cơ chế sự kiện. Oozie là một REST service để quản lý 
workflow và trạng thái hoạt động của luồng. 
Apache Whirr 
Apache Whirr được xây dựng để đơn giản hóa việc tạo và deploy các 
clusters trên môi trường cloud ví dụ như Amazon’s AWS. 
Apache HBase 
Apache HBase là cơ sở dữ liệu phân tán (non relational), độ trễ thấp 
được xây dựng trên nền HDFS. HBase đưa ra một mô hình dữ liệu linh hoạt 
có các thuộc tính scale-out với API rất đơn giản. Dữ liệu trên HBase được lưu 
trữ dưới dạng bán cột (semi-columnar) phân chia bởi các hàng trong các region. 
Các bảng trên HBase có thể lên tới hàng trăm terabyte hoặc một số trường hợp 
lên đến petabytes. Hiện nay, HBase được sử dụng để phục vụ một khối lượng 
lớn dữ liệu trong các hệ thống real-time. 
Apache ZooKeeper 
Apache ZooKeeper hỗ trợ các tính năng của hệ thống phân tán. Trong 
thực tế nhiều dự án sử dụng Hadoop có sử dụng ZooKeeper để hỗ trợ các tính 
năng cần thiết cho hệ thống phân tán (leader election, locking, group 
membership, service location, config-uration services) 
16 
Apache HCatalog 
Apache HCatalog là một dịch vụ cung cấp khả năng chia sẻ schema và 
các dịch vụ truy cập dữ liệu giữa các ứng dụng trong cùng một hệ thống. Về 
lâu dài, HCatalog sẽ cung cấp việc kết hợp các tool ví dụ như Hive và Pig để 
chúng có thể chia sẻ các thông tin về dataset và metadata. 
2.1.4. HDFS 
Hadoop Distributed File System (HDFS) [12] là một hệ thống file phân 
tán được thiết kế để chạy trên phần cứng thông thường. HDFS cũng tương tự 
những hệ thống file phân tán hiện có. Tuy nhiên, sự khác biệt ở đây là HDFS 
có khả năng chịu lỗi cao (fault-tolerant) và được thiết kế để deploy trên các 
phần cứng rẻ tiền. HDFS cung cấp khả năng truy cập high throughput từ ứng 
dụng và thích hợp với các ứng dụng có tập dữ liệu lớn. 
Hình 2.1. Kiến trúc HDFS 
HDFS có kiến trúc master-worker, (Hình 2.1). Một cụm HDFS (HDFS 
cluster) bao gồm các Namenode và Datanode. Dữ liệu được lưu trên các block. 
17 
Một cụm HDFS bao gồm hai loại nút (node) hoạt động theo mô hình nút chủ - 
nút thợ (master-worker): 
Một cụm HDFS có 1 namenode (master – nút chủ) 
Một cụm HDFS có một hoặc nhiều các datanode (worker - nút thợ) 
Namenode quản lý các namespace filesystem. Nó quản lý một filesystem 
tree và c...ết quả thử nghiệm mở rộng cho thấy 
tính ưu việt của PRF và lợi thế đáng kể so với các thuật toán khác về độ chính 
xác và hiệu suất phân loại cũng được cải thiện. 
Các nội dung chi tiết trong phần này được tóm tắt như sau: 
Phương pháp ứng dụng giảm chiều dữ liệu trong quá trình huấn luyện 
và phương pháp gán trọng số trong quá trình trong quá trình dự đoán nhãn. 
37 
Phương pháp tiếp cận và xử lý song song của PRF, kết hợp tối ưu hóa 
xử lý dữ liệu song song và các tiến trình xử lý thuật toán đồng thời. Xử lý dữ 
liệu theo chiều dọc và phương pháp đánh giá cân bằng trọng số (weighted vote). 
Cách thức hoạt động của Spark khi xử lý dữ liệu, tối ưu khi ứng dụng để 
xử lý. Cách thức xử lý dữ liệu của Spark, các bước huấn luyện theo DAG của 
PRF dựa theo các bước xử lý mô hình dữ liệu – sử dụng RDDs, các tiến trình 
được thực lập lịch và thực thi trong các bước đã được lập sẵn theo biểu đồ 
DAG. Việc thực hiện trên song song trên ram giữa các cụm Spark, xử lý đồng 
thời các tác vụ giúp giảm thiểu chi phí đường truyền, chi phí đọc ghi dữ liệu 
giữa các cụm của Spark, giúp cho cân bằng dữ liệu và tối ưu hóa thời gian xử 
lý. 
3.2.1. Tối ưu hóa xử lý dữ liệu đồng thời. 
Spark áp dụng Phương pháp tối ưu hóa xử lý dữ liệu đồng thời cho thuật 
toán PRF, bằng cách sử dụng phương pháp phân chia các vùng dữ liệu theo 
chiều dọc và phương pháp ghép dữ liệu đồng thời – chia và gộp. 
Đầu tiên, căn cứ theo thuộc tính của thuật toán RF với các thuộc tính 
(features) đặc trưng độc lập và yêu cầu về tài nguyên của các tiến trình xử lý 
dữ liệu, một phương pháp về phân chia dữ liệu theo chiều dọc được sử dụng 
cho tập dữ liệu huấn luyện. Tập dữ liệu huấn luyện được chia nhỏ làm nhiều 
tập dữ liệu con với các thuộc tính độc lập, mỗi tập thuộc tính đó được phân bổ 
lại theo các cụm Spark để xử lý đồng thời theo phương pháp phân bổ dữ liệu 
tĩnh. Thứ hai, để giải quyết vấn đề về sự tăng trưởng khối lượng dữ liệu tuyến 
tính với sự gia tăng quy mô của RF, phương pháp ghép dữ liệu đồng thời được 
sử dụng thay cho phương pháp lấy mẫu thông thường. Phương pháp tối ưu hóa 
xử lý dữ liệu đồng thời cho thấy việc giảm khối lượng dữ liệu cần xử lý nhờ 
vào phân chia ra các cụm và việc Spark xử lý trên ram tối ưu hóa quá trình đọc 
ghi và không làm giảm độ chính xác của giải thuật. Việc gia tăng quy mô của 
PRF không làm thay đổi về kích thước và các vùng nhớ lưu trữ dữ liệu. 
a. Phương pháp phân chia dữ liệu chiều dọc. 
Trong quá trình xử lý PRF, quá trình xử lý các thuộc tính (features) dữ 
liệu chiếm phần lớn thời gian huấn luyện. 
38 
Tập dữ liệu huấn luyện 
Hình 3.3. Quá trình phân chia dữ liệu theo chiều dọc của các RDDs trong 
Spark 
Tuy nhiên, quá trình này chỉ sử dụng giá trị thuộc tính của tập huấn luyện 
và giá trị thuộc tính của tập mục tiêu. Do đó, để giảm khối lượng dữ liệu và 
giảm chi phí đọc ghi, truyền dữ liệu trong môi trường phân tán, phương pháp 
phân chia dữ liệu theo chiều dọc cho PRF sử dụng tính độc lập của các thuộc 
tính và yêu cầu về tài nguyên khi xử lý đồng thời tại các cụm Spark. Các tập 
dữ liệu với các thuộc tính ban đầu sẽ được chia thành các tập dữ liệu nhỏ hơn 
với các thuộc tính độc lập. 
Giả sử kích thước của tập dữ liệu huấn luyện S là N, có M thuộc tính 
(features) với mỗi bản ghi. y0 ~ yM-2 là số lượng thuộc tính đầu vào, yM-1 là 
thuộc tính mục tiêu. Với mỗi thuộc tính yi và biến thuộc tính yM-1 của tất cả các 
bản ghi được chọn và tạo thành một tập con thuộc tính đặc trưng FSj, được biểu 
diễn dưới dạng: 
39 
𝐹𝑠𝑗 =
[
,
,
 ,
,
 ,
]
Trong đó, i là chỉ số của mỗi bản ghi của tập dữ liệu huấn luyện S, và j 
là chỉ số của các thuộc tính hiện tại. Theo cách đó, tập S được phân tách thành 
( M-1 ) tập con với thuộc tính đặc trưng trước khi đưa vào xử lý giảm chiều dữ 
liệu. Với mỗi tập dữ liệu con, sẽ được Spark đưa vào một đối tượng dạng RDD 
và độc lập với các tập dữ liệu con khác. Quá trình phân chia các vùng dữ liệu 
theo chiều dọc được mô tả theo hình 2.14. 
b. Phương pháp ghép dữ liệu đồng thời. 
Việc tăng trưởng dữ liệu về cả khối lượng và thuộc tính đầu vào luôn là 
vấn đề lớn đối với mọi thuật toán bao gồm cả thuật toán rừng ngẫu nhiên, việc 
tăng trưởng dữ liệu dẫn đến việc thuật toán RF cũng sẽ tăng trưởng về độ sâu, 
độ rộng của rừng. Để giải quyết vấn đề tăng trưởng về khối lượng dữ liệu mẫu 
khi huấn luyện, Spark sử dụng cơ chế ghép dữ liệu đồng thời để xử lý thay cho 
phương pháp lấy mẫu truyền thống. Trong mỗi chu kỳ lấy mẫu, thay vì sao 
chép lại toàn bộ dữ liệu mẫu, tiến trình xử lý sẽ lưu lại chỉ mục của tập dữ liệu 
mẫu vào bảng Data-Sampling-Index (DSI). Sau đó bảng DSI sẽ phân bổ lại 
cho tất cả các nút phụ (slave node) cùng với tập con thuộc tính (features). Các 
công việc tính toán xử lý trong quá trình huấn luyện của mỗi cây quyết định sẽ 
tải dữ liệu tương ứng từ một tập con thuộc tính thông qua bảng DSI. Do đó, 
với mỗi tập con thuộc tính sẽ được sử dụng lại một cách hiệu quả và độ lớn của 
tập dữ liệu đầu vào khi huấn luyện sẽ không bị ảnh hưởng tại mỗi node, trong 
khi quy mô của RF vẫn được mở rộng. 
Chỉ mục dữ liệu của tập dữ liệu huấn luyện 
S
ố
 l
ần
 l
ấy
 m
ẫu
Mẫui 1 3 8 5 10 0  
Mẫu1 2 4 1 9 7 8  
Mẫu2 9 1 12 92 2 5  
Mẫu3 3 8 87 62 0 2  
40 
Mẫuk-1 9 1 4 43 3 5  
Bảng 3-1: Ví dụ về DSI của PRF 
Đầu tiên, một bảng DSI được tạo để lưu các chỉ mục dữ liệu được tạo 
trong tất cả các lần lấy mẫu. Như đã đề cập trong Phần 2.3.1, số cây của mô 
hình RF là k. Cụ thể, sẽ có k lần lấy mẫu cho tập dữ liệu huấn luyện và N chỉ 
mục dữ liệu được ghi lại trong mỗi lần lấy mẫu. Một ví dụ về bảng DSI của 
PRF được trình bày trong Bảng sau: 
Thứ hai, bảng DSI được sử dụng đồng thời cho tất cả các nút phụ (slave 
node) của cụm Spark với toàn bộ các thuộc tính con. Trong quá trình huấn 
luyện tiếp sau, độ đo Gain Ratio được sử dụng để tính toán và đánh giá sự khác 
biệt giữa các cây có cùng thuộc tính, sau đó chuyển lại giá trị đó cho các slaves 
nơi đang lưu trữ các tập dữ liệu con. 
Hình 3.4. Quá trình xử lý ghép dữ liệu đồng thời của PRF 
Thứ ba, mỗi Gain Ratio sẽ được tiến trình Spark sử dụng để truy cập các 
chỉ mục dữ liệu liên quan từ bảng DSI và lấy các bản ghi thuộc tính từ cùng 
T
ập
 t
h
u
ộ
c 
tí
n
h
 c
o
n
F
ea
tu
re
 s
u
b
se
t 
G
ai
n
 R
at
io
M
ô
 h
ìn
h
 h
u
ấn
lu
y
ện
 P
R
F
41 
một nhóm các thuộc tính theo các chỉ mục này. Quá trình ghép dữ liệu đồng 
thời này được mô tả trong hình 15. 
Trong hình trên, mỗi RDDFS được đưa vào một đối tượng thuộc tính con 
RDD, và với mỗi TGR được để tính gain-ratio. VD, Spark phân bổ các công 
việc (tasks) {TGR1.1, TGR1.2, TGR1.3} vào node Slave1 với tập thuộc tính con 
RDDFS1, phân bổ công việc {TGR2.1, TGR2.2, TGR2.3} vào node Slave2 với tập thuộc 
tính con RDDFS2 và phân bổ công việc {TGR3.1, TGR3.2, TGR3.3} vào node Slave3 
với tập thuộc tính con RDDFS3. Theo thuật toán cây quyết định, các công việc 
thực thi trên cùng một nút phụ sẽ thuộc về các cây khác nhau. VD: các công 
việc thực thi trên Slave1 là TGR1.1, TGR1.2 và TGR1.3 sẽ thuộc về “Decision Tree1”, 
“Decision Tree2”, và “Decision Tree3” theo một cách tương đối. Các đầu 
công việc này (tasks) thực hiện thu thập từ tập con các thuộc tính (features 
subset) theo các chỉ số tương ứng trong bảng DSI và tính toán gain-ratio của 
tập thuộc tính cho các cây quyết định khác nhau. Sau đó kết quả trung gian của 
các đầu công việc (tasks) này được chuyển sử dụng làm đầu vào cho các công 
việc tiếp theo tương ứng để xây dựng, tạo nên xu thế cây chung của các quyết 
định. Kết quả của các đầu công việc tasks {TGR1.1, TGR2.1, TGR3.1} được kết hợp 
và sử dụng cho quá trình phân nhánh của cây quyết định “Decision Tree1”, và 
kết quả của các đầu công việc tasks {TGR1.1, TGR2.2, TGR3.2} được kết hợp và sử 
dụng cho quá trình phân nhánh của cây quyết định “Decision Tree2”. 
c. Cơ chế phân bổ dữ liệu tĩnh 
Để đạt được một cơ chế cân bằng khi lưu trữ và xử lý các đầu công việc, 
sau khi phân bổ dữ liệu theo chiều dọc, một cơ chế phân bổ dữ liệu tĩnh được 
sử dụng cho các tập thuộc tính con. Cụ thể, các tập con được lưu trữ vào một 
cụm Spark phân tán trước khi được đưa vào xử lý huấn luyện cho mô hình 
PRF. Hơn nữa, do sự khác nhau về kiểu dữ liệu và dung lượng của mỗi nhóm 
thuộc tính con, số lượng các tiến trình xử lý, khối lượng công việc xử lý tiếp 
sau cũng sẽ khác nhau. Như đã biết, cụm Spark được cấu thành bởi một nốt 
chính – master node và các node phụ - slave node. Spark ML sẽ sử dụng chức 
năng phân chia dữ liệu thành các tập con và giao lại cho từng nodes dựa theo 
khối lượng và độ lớn dữ liệu. Hình dưới sẽ trình bày về cơ chế phân bổ dữ liệu 
trong Spark: 
42 
Hình 3.5. Ví dụ về 3 kịch bản khi phân chia dữ liệu 
Trong hình trên, trường hợp (a) kho khối lượng dữ liệu của tập thuộc 
tính con lớn hơn dung lượng đang có hiện tại của nút phụ, tập dữ liệu con này 
sẽ được phân chia vào nhiều slaves có đường dẫn tương tự. (b) Khi dung lượng 
của tập thuộc tính con tương đương với dung lượng đang có của nút phụ, thì 
tập con sẽ được cấp phát và lưu trữ trong một node. (c) Khi kích thước của một 
tập con nhỏ hơn dung lượng lưu trữ của một nút, nút đó sẽ được phân bổ chứa 
nhiều tập thuộc tính con. Trong trường hợp (a), việc tính toán gain-ratio sẽ 
được thực thi tại các nút phụ lưu trữ dữ liệu các tập thuộc tính con. Việc xử lý 
dữ liệu này là cục bộ trên toàn bộ các nút phụ có cùng một tập con thuộc tính 
dữ liệu lưu trữ, nhưng không phải là xử lý toàn bộ. Trong trường hợp (b) và 
(c), không có hoạt động giao tiếp của các tiến trình giữa các nút phụ khác nhau 
trong khi xử lý tính toán gain-ratio. Các bước phân chia dữ liệu theo chiều dọc 
và lưu trữ dữ liệu tính được trình bày trong mục 2.3.1. 
Trong quá trình xử lý ứng dụng đã giới thiệu ở trên, đầu tiên, RDD0 được 
chia thành (M-1) đối tượng RDDFS thông qua xử lý phân chia dữ liệu theo chiều 
dọc – sử dụng key và các thuộc tính con. Sao đó, mỗi RDDFS được phân chia 
về các nút phụ với dung lượng để lưu trữ và xử lý tùy thuộc vào độ phù hợp 
của dữ liệu và nút phụ. Để sử dụng lại tập dữ liệu huấn luyện đã qua xử lý, mỗi 
đối tượng RDD của tập các thuộc tính con sẽ được phân bổ và cấp phát cho 
cụm Spark thông qua một hàm dataAllocation() và một hàm xử lưu trữ kết quả 
xử lý tạm thời persist(). 
Giải thuật 1: Phân vùng dữ liệu theo chiều dọc và phân bổ dữ liệu tĩnh 
của PRF: 
43 
Input: 
RDDo: một đối tượng RDD nguyên thủy của bộ dữ liệu ban đầu S 
Output: 
LFS: một danh sách các chỉ số danh mục của mỗi nhóm đối tượng thuộc 
tính con RDD và các nút phụ đã được phân bổ. 
1: for j=0 to (M-2) do 
2: RDDFSj  RDDo.map 
3:  RDDo.verticalPartition(j); 
4: end map.collect() 
5: slaves  findAvailableSlaves().sortbyIP(); 
6: if RDDFSj.size < slaves[0].availablesize then 
7: dataAllocation(RDDFSj , slaves[0]); 
8: slaves[0].availablesize  slaves[i]. availablesize - 
RDDFSj.size; 
9: LFS  ; 
10: else 
11: while RDDFSj ≠ null do 
12: (𝑅𝐷𝐷𝐹𝑆𝑗
′ , 𝑅𝐷𝐷𝐹𝑆𝑗
′′ )  dataPartition(RDDFSj, 
slaves[i].availablesize)); 
13: dataAllocation(RDDFSj , slaves[i]); 
14: 𝑅𝐷𝐷𝐹𝑆𝑗
′ .persist(); 
15: slaves[i].availabelsize  slaves[i]. availablesize - 
𝑅𝐷𝐷𝐹𝑆𝑗
′ .size; 
16: slavesids  slaves[i]:nodeid; 
17: RDDFSj  𝑅𝐷𝐷𝐹𝑆𝑗
′′ 
18: i  i+1 
19: end while 
20: LFS  
21: else if 
22: end for 
23: return LFS. 
44 
3.2.2. Tối ưu hóa xử lý tiến trình đồng thời 
Mỗi cây quyết định PRF dược xây dựng độc lập với nhau và mỗi nút con 
trong cây quyết định cũng được phân tách độc lập. Kiến trúc của mô hình PRF 
và cây quyết định giúp cho quá trình tính toán các đầu công việc trở nên đồng 
thời. Dựa trên kết quả của việc tối ưu hóa xử lý dữ liệu đồng thời, đề xuất 
phương án ứng dụng xử lý đồng thời các đầu việc của PRD và triển khai thông 
qua nền tảng Spark. Một tiến trình song song đồng thời được sử dụng trong 
quá trình huấn luyện PRF, và giản đồ công việc DAG cũng được khởi tạo theo 
các bước một cách song song hóa đồng thời các tiến trình xử lý và phụ thuộc 
vào các đối tượng RDD. Sau đó các tiến trình lập lịch được gọi để thực hiện 
các bước đã được tạo thành trên giản đồ DAG. 
a. Quá trình xử lý đồng thời của PRF 
Trong quá trình tối ưu các công việc xử lý đồng thời (task-parallel), 
SparkML sử dụng một phương pháp xử lý song song đồng thời để huấn luyện 
trong quá trình xây dựng PRF. Trong quá trình huấn luyện và xây dựng nhánh 
cây quyết định, ở mức đầu tiên, k cây quyết định của mô hình PRF được xây 
dựng cùng lúc. Và trong quá trình huấn luyện mô hình tiếp theo, (M-1) thuộc 
tính đặc trưng trong mỗi cây quyết định tiếp tục được tính toán đồng thời để 
tạo thêm ra các nút phân nhánh ở mức thứ hai. 
Các task được tính toán xây dựng cây quyết định trong quá trình huấn 
luyện PRF. Căn cứ theo yêu cầu về tài luyện càn thiết và chi phí thực thi tính 
toán, các task thực thi sẽ được chia làm hai loại, các tác vụ tính toán gain-ratio 
và các task phân chia node, và được định nghĩa dưới đây. 
Định nghĩa: Các tác vụ tính toán gain – ratio (Gain-ratio-computing 
task: TGR) là một tập hợp các tác vụ được sử dụng để tính toán gain-ratio từ các 
thuộc tính của một tập con các thuộc tính tương ứng, bao gồm một chuỗi các 
phép toán thực thi với mỗi thuộc tính đặc trưng, bao gồm tính entropy, quá 
trình tự phân tách thông tin, mức tăng trưởng bội quá thông tin và tỷ lệ tăng 
trưởng thông tin. Kết quả thực thi tác vụ TGR được gửi đến các nút con tương 
ứng. 
Định nghĩa: các tác vụ phân chia nút (Node-splitting task: TNS) là một 
nhóm các tác vụ được sử dụng và thu thập kết quả của các tác vụ TGR và tách 
45 
ra thành các nodes của cây quyết định, bao gồm các phương thức tính toán cho 
mỗi nút của cây quyết định, như việc lựa chọn giá trị biến tốt nhất với gain-
ratio cao nhất và sử dụng biến đó để phân tách nút cho cây. Sau quá trình phân 
chia node, kết quả của task TNS sẽ được phân chia cho từng nút phụ (slave) để 
bắt đầu bước tiếp theo của quá trình huấn luyện của PRF. 
Các bước trong quá trình huấn luyện đồng thời của mô hình PRF được 
diễn giải giải thuật sau: 
Giải thuật 2: quá trình huấn luyện đồng thời của mô hình PRF. 
Input: 
k: số cây quyết định của mô hình PRF; 
TDSI: bảng đồ thị các bước thực hiện DSI của PRF; 
LFS: danh sách các chỉ mục tập hợp các thuộc tính con của đối 
tượng RDD và các nút phụ được phân chia. 
Đầu ra: 
PRFtrained: mô hình PRF sau khi huấn luyện1. 
1: for i = 0 to (k - 1) do 
2: for j = 0 to (M - 2) do 
3: load features subset RDDFSj  loadData(LFS[i]) 
 //TGR: 
4: RDD(GR;best)  sc.parallelize(RDDFSj).map 
5: load dữ liệu mẫu RDD(i;j)  (TDSI[i], RDDFSj); 
6: tính toán gain-ratio GR(i;j)  GR(RDD(i;j)); 
7: end map 
//TNS: 
 8: RDD(GR;best).collect().sorByKey(GR).top(1); 
 9: for với mỗi giá trị y(j,v) in RDD(GR;best) do 
 10: tách node cây Nodej  ; 
 11: gắn thêm Nodej vào Ti; 
 12: end for 
 13: end for 
 14: PRF 
15: end for 
16: return PRFtrained. 
46 
(a) Giản đồ DAG của một cây quyết định trong PRF (b) một mô hình cây quyết định. 
Hình 3.6. Ví dụ của task DAG cho một cây quyết định của PRF 
Trong quá trình huấn luyện của mô hình PRF, phụ thuộc vào mỗi đối 
tượng RDD, mỗi job của quá trình huấn luyện PRF sẽ được chia nhỏ thành các 
bước, và sinh ra một giản đồ DAG phụ thuộc vào các bước đó. Đánh giá ví dụ 
của cây quyết định PRF, một giản đồ DAG của quá trình huấn luyện dữ liệu 
được hình thành, theo hình 2.17. 
Trong một số task thực thi theo các bước của DAG, tương ứng với các 
phân cấp của mô hình cây quyết định. Trong bước 1, sau khi giảm chiều dữ 
liệu, có (m-1) TGR task được tạo (TGR1.0 ~ TGR1.(m-2)) cho (m-1) thuộc tính 
(features) đầu vào. Các TGR này sẽ tính toán gain ratio của biến thuộc tính, và 
đưa kết quả cho TNS1. TNS1 sẽ tìm các biến phân tách tốt nhất và thực hiện phân 
chia ra nút đầu tiên của nhánh cây quyết định. Giả sử với y0 là biến phân tách 
tốt nhất tại bước hiên tại, và giá trị của y0 nằm trong khoảng của {v01, v02, 
v03}, do đó, nút cây đầu tiên sẽ được xây dựng bởi y0 và 3 nút con được tách 
ra từ nhóm các node, theo hình 2.17(b). Sau khi phân tách các nút của cây, các 
kết quả trung gian của TNS1 sẽ được phân bổ về toàn bộ các nút phụ của Spark. 
Kết quả bao gồm thông tin của các biến phân tách và dữ liệu chỉ mục của danh 
sách {v01, v02, v03}. 
47 
Trong bước 2, vì y0 là một thuộc tính phân tách, nên sẽ không có task 
TGR cho FS0. Quá trình phân chia công việc ẩn sau vấn đề này sẽ được thảo 
luận trong phần thực hành. Một task TGR được tạo thành cho toàn bộ các thuộc 
tính con khác theo kết quả của TNS1. Do danh sách chỉ mục của nhóm nút này 
là {v01, v02, v03}, không tồn tại quá 3 tasks TGR cho mỗi nhóm thuộc tính con. 
Ví dụ, task TGR2:11, TGR2:12, và TGR2:13 được tính toán cho dữ liệu FS1 với dach 
sách chỉ mục tương ứng với v01, v02 và v03. Và điều kiện tương tự trong task 
cho FS2 ~ FS(m-2). Sau đó kết quả của tasks {TGR2.11, TGR2.21, TGR2.(m-2)1} được 
chuyển cho task TNS2.1 cho các cây con được phân tách giống nhau. Tasks của 
các nodes cây khác và các bước khác được thực hiện tương tự. Theo cách này, 
với mỗi giản đồ DAG của quá trình huấn huyện của mỗi cây mô hình quyết 
định được xây dựng. Thêm vào đó, có k giản đồ DAGs được xây dựng tương 
ứng với k cây quyết định trong mô hình PRF. 
b. Lập lịch xử lý đồng thời 
Sau khi xây dựng được biểu đồ task DAG của tất cả các cây quyết định, 
các bước tác vụ thực hiện (tasks) trong giảm đồ DAGs được đưa vào tiến trình 
lập lịch Spark. Có hai loại tác vụ tính toán trong DAG, một để xử lý trao đổi 
thông tin lấy tài nguyên theo yêu cầu, và một để xử lý song song hóa. Và để 
cải thiện hiệu năng của PRF một cách hiệu quả và giảm thiểu chi phí tài nguyên 
truyền dữ liệu của các task trong môi trường phân tán, Spark sử dụng hai bộ 
lập lịch đồng thời để thực hiện các task này, được gọi là nhóm các tiến trình 
lập lịch xử lý đồng thời. Tiến trình lập lịch xử lý đồng thời danh sách chỉ mục 
của mỗi nhóm các thuộc tính (features) con của đối tượng RDD và phân chia 
về các nút phụ. 
Trong Spark, module Task-Scheduler-Listener giám sát các công việc 
đã được gửi lên, chia công việc thành các bước thực hiện với các nhiệm vụ 
khác nhau, sau đó gửi các nhiệm vụ này cho module Task-Scheduler. Module 
Task-Scheduler nhận các nhiệm vụ, phân bổ và thực thi thông qua các tiến trình 
xử lý công việc phù hợp (Spark - executor). Căn cứ theo các loại công việc cần 
thực hiện, Task-Scheduler bao gồm 3 module con là LocalScheduler (xử lý dữ 
liệu tại một nút có 1 driver – 1 executor), ClusterScheduler (module với cơ chế 
xử lý phân tán; lưu trữ vật lý theo từng nút của cụm và có 1 driver và 1 nút 
chứa nhiều executor), và MessosScheduler (module với cơ chế sử dụng cho 
PTDL lớn – mỗi cụm có nhiều executor và mỗi nút được chia 1 executor, trong 
48 
đó có 1 executor được sử dụng làm nút driver), với các phân bổ khác nhau, 
module Task-Scheduler sẽ xử lý khác nhau sử dụng các module con. Và sẽ có 
5 cơ chế xử lý trong Spark như sau PROCESS LOCAL, NODE LOCAL, NO 
PREF, PACK LOCAL, và ANY. Quá trình sử dụng LocalScheduler cho các task 
TGR và ClusterScheduler thực hiện task TNS được trình bày sau đây. 
(1) LocalScheduler với các task TGR. 
Module LocalScheduler là một luồng tiến trình hoạt động cục bộ trên 
một máy, toàn bộ các task được đưa lên bởi DAGScheduler được thực thi trong 
các luồng tiến trình, và kết quả sẽ được trả về cho DAGScheduler. Việc gán 
thuộc tính cục bộ cho mỗi TGR là NODE_LOCAL và đưa chúng cho một module 
LocalScheduler. Trong LocalScheduler, toàn bộ TGR task của PRF sẽ được 
phân cho các nút phụ (slave nodes) nơi chứa các tập thuộc tính con tương ứng. 
Các task này là độc lập với nhau và không có sự đồng bộ phức tạp nào giữa 
các tiến trình. Và nếu một tập con thuộc tính được phân bổ cho nhiều nút phụ, 
task TGR tương tự với quá trình của mỗi cây quyết định phân chia các nút của 
cây. Và các tác vụ sẽ thực thi các hoạt động giao tiến về dữ liệu cục bộ xung 
quanh các nút này. Nếu một hoặc nhiều thuộc tính con được phân bổ cho một 
nút phụ, và các tác vụ TGR sẽ tăng lên tương ứng tại các nút hiện tại. Và sẽ 
không có hoạt động giao tiếp dữ liệu nào giữa các nút đang thực thi và các nút 
khác trong quá trình tính toán tiếp theo. 
(2) ClusterScheduler với các task TNS. 
Module ClusterScheduler giám sát quá trình cấp phát tài nguyên máy và 
các task trong toàn bộ cụm Spark và phân chia các task phù hợp cho các 
workers. Như đã đề cập ở trên, task TNS sẽ thu thập kết quả của các tác vụ TGR 
tương ứng và phân tách các nút của cây quyết định. Task TNS là độc lập với 
toàn bộ các tập con thuộc tính và có thể lập lịch và phân bổ các thuộc tính cho 
toàn bộ cụm Spark. Ngoài ra, các tác vụ TNS căn cứ theo kết quả của các tác vụ 
TGR tương ứng, do đó, sẽ có quá trình đợi và đồng bộ kết quả dữ liệu của các 
task này. Vì vậy module ClusterScheduler được sử dụng để thực thi tác vụ TNS. 
Đặt giá trị thuộc tính cục bộ của mỗi TNS là ANY và đưa lên một module 
ClusterScheduler. Lược đồ task lập lịch đồng thời (task-parallel) được mô tả 
trong Giải thuật 3. Sơ đồ lập lịch cho các task trong DAG được thể hiện trong 
hình 17. 
49 
Giải thuật 3: Lập lịch Task-parallel cho các task TNS. 
Input: 
TSNS: một tập các nhiệm vụ của TNS được đưa lên thông qua 
DAGScheduler. 
Output: 
 ERTS: kết quả thực thi của TSNS. 
1: khởi tạo manager  new TaskSetManager(TSNS); 
2: thêm vào trình quản lý task activeTSQueue  manager; 
3: if hasReceivedTask == false then 
4: create starvationTimer  scheduleAtFixedRate(newTimerTask); 
5: đánh thứ tự độ ưu tiên của TS2  activeTSQueue.FIFO(); 
6: for each task Ti in TS2 do 
7: lấy thông tin về worker executora đang khả dụng từ workers; 
8: ERTS  executora.launchTask(Ti.taskid); 
9: end for 
10: end if 
11: return ERTS. 
3.2.3. Phân tích phương pháp xử lý task đồng thời 
Nội dung phần này sẽ đánh giá về phương pháp tối ưu hóa các mô hình 
đồng thời với 5 khía cạnh được đề cập theo 5 phần dưới. Khi so sánh Spark-
MLRF với các phương pháp xử lý đồng thời khác, mô hình lai tối ưu hóa đồng 
thời kết hợp PRF đạt kết quả về hiệu suất, cân bằng tải, và có khả năng mở 
rộng. 
50 
Hình 2.17b. Quá trình lập lịch và thực thi task đồng thời dựa theo hình 2.17 
a. Đánh giá độ phức tạp tính toán 
Độ phức tạp khi tính toán đồng thời được với giải thuật PRF cải tiến sử 
dụng cơ chế giảm chiều dữ liệu có độ phức tạp ban đầu là O(k(MN+mNlogN)). 
Sau khi thực hiện song song hóa giải thuật PRF trên Spark, M thuộc tính của 
tập dữ liệu huấn luyện được tính toán đồng thời trong quá trình thực hiện giảm 
chiều dữ liệu, và k cây được huấn luyện đồng thời. 
Theo đó, độ phức tạp tính toán theo lý thuyết của thuật toán PRF là: 
𝑂 (
𝑘(𝑀𝑁+𝑚𝑁𝑙𝑜𝑔𝑁)
𝑘 × 𝑀
) ≈ 𝑂(𝑁(𝑙𝑜𝑔𝑁 + 1)) 
51 
b. Đánh giá khối lượng dữ liệu 
Tận dụng phương pháp ghép kênh dữ liệu (data-multiplexing), dữ liệu 
sử dụng cho quá trình huấn luyện được sử dụng lại một cách hiệu quả. Giả sử 
khối lượng dữ liệu ban đầu là (N x M) và thang đo của mô hình RF là k, khối 
lượng của tập dữ liệu mẫu ban đầu của RF và Spark-MLRF khi xử lý theo 
phương pháp thông thường là (N x M x k). Trong quá trình huấn luyện đồng 
thời PRF, với khối lượng dữ liệu mẫu giữ nguyên, khối lượng dữ liệu cần xử 
lý trong quán trình huấn luyện là (𝑁 × 2 × (𝑀 − 1)) ≈ (2𝑁𝑀). Hơn nữa, 
việc tăng trưởng quy mô của PRF không làm thay đổi về kích thước dữ liệu 
hay bộ nhớ lưu trữ. Do đó, so với việc lấy mẫu của phương pháp RF cơ bản, 
phương pháp ứng dụng PRF giúp giảm tổng khối lượng cần xử lý trong quá 
trình huấn luyện cho PRF. 
c. Đánh giá hiệu năng đường truyền dữ liệu 
Trong PRF có một số tiến trình truyền tải dữ liệu phục vụ cho quá trình cấp 
phát tài nguyên và quá trình huấn luyện mô hình, hoạt động trong cụm dữ liệu 
Spark và giữa các slave. Giả sử có n slave trong cụm Spark, và khối lượng dữ 
liệu huấn luyện mẫu là (2NM). Trong quá trình cấp phát tài nguyên, chi phí cho 
đường truyền trung bình sẽ là 
2𝑀𝑁
𝑛
 . Trong quá trình huấn luyện mô hình PRF, 
nếu một tập con thuộc tính được phân chia cho các nút trong cụm, sẽ có quá 
trình giao tiếp dữ liệu cục bộ của các task tính toán giữa các nút trong cụm. 
Nếu một hoặc vài tập thuộc tính con được phân chia vào cùng một nút, sẽ 
không có tiến trình giao tiếp của các task tính toán giữa các nút. Sẽ có một 
lượng nhỏ chi phí tài nguyên đường truyền được sử dụng để truyền tải thông 
tin cho các kết quả trung gian trong mỗi bước của quá trình huấn luyện cây 
quyết định. Việc phân vùng dữ liệu theo chiều dọc và phân chia dữ liệu tĩnh 
giúp tối ưu hóa đường truyền, giảm lượng dữ liệu cần truyền tải trong môi 
trường của cụm Spark, và khắc phục tình trạng nghẽn cổ chai của phương pháp 
xử lý song song truyền thống. 
d. Đánh giá cân bằng tải và tài nguyên 
Cơ chế huấn luyện của PRF trên toàn cụm Spark, sử dụng phương pháp tối ưu 
hóa đồng thời đã đạt được sự cân bằng về xử lý tài nguyên trong quá trình lưu 
trữ và phân chia công việc. Một lý do là đối với tập con các thuộc tính có kích 
thước khác nhau, sẽ có các task TGR với từng tập con. Sau đó việc phân phối 
công việc cho cụm Spark tùy thuộc vào khối lượng dữ liệu của từng tập con 
52 
thuộc tính. Một tập con thuộc tính với khối lượng dữ liệu lớn hơn khối lượng 
dữ liệu cho phép theo cấu hình của Spark executor sẽ được phân chia ra xử lý 
trên nhiều nút phụ (slave nodes). Và sẽ có TGR task tương đồng được lập lịch 
song song với các nút này. Một tập con thuộc tính với khối lượng dữ liệu nhỏ 
sẽ được phân bổ vào một nút phụ. Và cũng sẽ có TGR task tương đồng được lập 
lịch trên nút đó. 
Một lý do khác nữa là với việc phân tách các nút của cây, tại các nút phụ (slave 
nodes) phân tách thuộc tính con sẽ đưa vào trạng thái chờ. Mỗi tập con thuộc 
tính được chia sẻ và sử dụng lại giữa các nút bởi tất cả các cây quyết định. Việc 
phân chia dữ liệu từ các cây quyết định cũng được chia đều cho các slave để 
thực thi, cho phép lưu trữ và dùng lại. Giúp cho việc cân bằng tải và tối ưu hóa 
về tài nguyên và thời gian trong quá trình xử lý. 
e. Đánh giá khả năng mở rộng của thuật toán 
Tính ổn định và khả năng mở rộng của giải thuật PRF được đánh giá 
theo 3 khía cạnh. (1) Việc xử lý dữ liệu với phương pháp ghép kênh dữ liệu 
của PRF giúp cho quá trình huấn luyện có thể sử dụng lại tối đa và hiệu quả. 
Khi PRF mở rộng, cụ thể là tăng trưởng về số lượng cây quyết định, dữ liệu và 
vùng lưu trữ không tăng lên. Sẽ chỉ có sự tăng trưởng về số task tính toán cho 
các cây mới và chi phí cho một lượng dữ liệu nhỏ để sử dụng cho quá trình 
tổng hợp và truyền dữ liệu giữa các bước trung gian của các task. (2) khi cụm 
Spark mở rộng, chỉ có một số tập con thuộc tính chiếm nhiều dung lượng cần 
san sang các nút (nodes) máy tính mới để đảm bảo cân bằng tải về tiến trình 
xử lý và lưu trữ. (3) khi quy mô của tập dữ liệu tăng lên, chỉ cần tách các tập 
thuộc tính con đặc trưng từ dữ liệu mới theo cùng một cách phân vùng dữ liệu 
theo chiều dọc và đưa thêm vào tập dữ liệu ban đầu tương ứng. Do vậy, PRF 
tối ưu hóa khi xử lý song song, có độ ổn định và khả năng mở rộng tốt. 
3.3. Kmeans, tối ưu hóa xử lý Kmeans với Spark. 
Thuật toán K-means cũng là một thuật toán quan trọng và được sử dụng 
phổ biến trong kỹ thuật phân cụm. Tư tưởng chính của nó là tìm cách phân 
nhóm các đối tượng ( objects ) cho trước vào K cụm ( K là số cụm và được xác 
định trước ) sao cho tổng bình phương khoảng cách giữa các đối tượng đến 
tâm nhóm ( centroid ) là nhỏ nhất. 
53 
Hình 3.7. Hình dạng cụm dữ liệu được khám phá bởi k-means 
Nội dung thuật toán cụ thể như sau: 
Cho trước mạng lưới gồm N nút và số cụm k. 
Bước 1. Khởi tạo: Chọn ra ngẫu nhiên k nút làm trọng tâm {ci} i = 1, ..., k. 
Bước 2. Với mọi nút, tính khoảng cách giữa nó với các trọng tâm của các cụm. 
Gán nó vào cụm có trọng tâm gần nó nhất. 
Bước 3. Cập nhật lại các trọng tâm mới. 
𝑐𝑖
(𝑡+1) =
1
|𝑆𝑖
(𝑡)|
∑ 𝑥𝑗
𝑥𝑗∈𝑆𝑖
(𝑡)
Bước 4. Lặp lại bước 2 và 3 cho đến khi không có sự thay đổi giữa các cụm 
Thuật toán k-means trên được chứng minh là hội tụ và có độ phức tạp tính 
toán là: 𝑂((3𝑛𝑘𝑑)τ𝑇𝑓𝑙𝑜𝑝) 
Trong đó, n là số đối tượng dữ liệu, k là số cụm dữ liệu, d là số chiều, τ là 
số vòng lặp, Tflop là thời gian để thực hiện một phép tính cơ sở như phép tính nhân, 
chia,... Như vậy, do k-means phân tích phân cụm đơn giản nên có thể áp dụng đối 
với tập dữ liệu lớn.Tuy nhiên, nhược điểm của k-means là chỉ áp dụng với dữ liệu 
có thuộc tính số và khám phá ra các cụm có dạng hình cầu, k-means còn rất nhạy 
cảm với nhiễu và các phần tử ngoại lai trong dữ liệu. Hơn nữa, chất lượng phân 
cụm dữ liệu k của thuật toán k-means phụ thuộc nhiều vào các tham số đầu vào 
như: số cụm k và k trọng tâm khởi tạo ban đầu. Trong trường hợp các trọng tâm 
khởi tạo ban đầu mà quá lệch so với các trọng tâm cụm tự nhiên thì kết quả phân 
cụm của k-means là rất thấp, nghĩa là các cụm dữ liệu được khám phá rất lệch so 
với các cụm trong thực tế. Trên thực tế chưa có một giải pháp tối ưu nào để chọn 
các tham số đầu vào, giải pháp thường được sử dụng nhất là thử nghiệm với các 
giá trị đầu vào k khác nhau rồi sau đó chọn giải pháp tốt nhất. 
54 
Hình 3.8. Thuật toán Kmeans trong Spark 
Khi xử lý phân cụm, dữ liệu đầu vào được đưa lên các RDDs , các RDDs 
này tương ứng được phân chia đồng thời vào các tasks và xử lý. Sau đó tính 
toán độc lập các tâm cụm với nhau và cập nhật lại tâm cụm. Việc cập nhật lại 
tâm của k cụm được thực hiện đồng thời và riêng biệt giữa các RDDs, sau đó, 
sẽ có một giản đồ DAGs được hình thành, với các bước cần thực hiện, khi có 
có quả tổng hợp, dữ liệu được xáo trộn và tính toán lại giữa các cụm được 
chuyển về cho Spark master, Spark master thực hiện tính toán lại tâm cụm và 
chuyển lại các task tính toán dữ liệu cho các Spark slave, quá trình nà...payment Số lần đóng cước trước Numeric 
avg_amt_prepaid_payment Trung bình số tháng đóng cước trước Numeric 
no_month_last_prepaid_payment Số tháng đóng cước trước gần nhất Numeric 
amt_last_prepaid_paymnet Số tiền đóng cước trước gần nhất Numeric 
reserve_prepaid_charge Số tháng tiền đóng cước trước còn lại Numeric 
no_month_prom_last_payment 
Số tháng khuyến mại cho lần đóng cước 
trước gần nhất 
Numeric 
Hành 
vi 
CSKH 
và 
phản 
ánh 
reserve_days_to_block 
Số ngày nợ cước đến ngày bị chặn 1 
chiều 
Numeric 
no_days_to_churn Số ngày nợ cước đến ngày bị cắt dịch vụ Numeric 
no_report_cskh_n 
Số lần phản ánh tới hệ thống CSKH 
trong tháng 
Numeric 
no_call_cskh_n Số lần gọi điện tới CSKH trong tháng Numeric 
no_staff_n 
Số lần gọi điện tới nhân viên phát triển 
khách hàng trong tháng 
Numeric 
no_reason_n Nội dung phản ánh nhiều nhất Numeric 
Hành 
vi sử 
dụng 
hạ tầng 
flag_change_province flag đã từng thay đổi địa chỉ lắp đặt Binominal 
flag_change_techonology flag đã từng nâng cấp hạ tầng Binominal 
flag_change_ftth_product 
flag đã từng thay đổi gói sản phẩm ftth 
đang sử dụng 
Binominal 
flag_change_th_product 
flag đã từng thay đổi gói sản phẩm th 
đang sử dụng 
Binominal 
flag_fmc_product flag đang sử dụng sản phẩm FMC Binominal 
63 
flag_churn_order flag yêu cầu hủy dịch vụ Binominal 
reason_id_churn Lí do hủy dịch vụ. Numeric 
fmc_product Sản phẩm FMC sử dụng Numeric 
flag_use_duration_12month flag khách hàng đã sử dụng trên 12 tháng Binominal 
no_modem_active Số ngày Modem bật trong tháng Numeric 
Hành 
vi 
đóng 
cước 
prepaid_last_datetime Tháng hết hạn đóng cước Numeric 
prepaid_last_datetime_prom 
Tháng hết hạn đóng cước trước + tháng 
được khuyến mại 
Numeric 
flag_prepaid_1month flag đã từng đóng trước chu kì 1 tháng Binominal 
flag_prepaid_3month flag đã từng đóng trước chu kì 3 tháng Binominal 
flag_prepaid_6month flag đã từng đóng trước chu kì 6 tháng Binominal 
flag_prepaid_12month flag đã từng đóng trước chu kì 12 tháng Binominal 
flag_sms_prepaid 
Flag có nhận được tin nhắn báo hết cước 
dịch vụ 
Binominal 
flag_call_prepaid 
Flag có nhận được cuộc gọi báo hết cước 
dịch vụ 
Binominal 
flag_nv_prepaid Flag có nhân viên đến thu cước dịch vụ Binominal 
Bảng 4-2: Danh mục thuộc tính được sử dụng 
Trong đó, mã thuê bao là id định danh của 1 bản ghi. Với mục tiêu tìm 
ra tập khách hàng có nguy cơ rời mạng, đánh giá và đưa ra chính sách phù hợp 
với từng phân nhóm khách hàng. 
4.2.1. Quá trình Phân cụm dữ liệu huấn luyện: 
Toàn bộ quá trình thực hiện thử nghiệm được thực hiện trên nền tảng 
Spark, với một cụm Spark gồm 1 nút (node) chính (Master) và 100 nút (node) 
phụ (Slaves). Cấu hình tại mỗi nút: 
Hệ điều hành: Ubuntu 12.04.4 và Mỗi nút thực thi được cấu hình một 
CPU Pentium (R) Dual-Core 3,20GHz và bộ nhớ Ram 8GB. Tất cả các nút 
được kết nối bằng mạng Gigabit tốc độ cao và được cấu hình với Hadoop 2.5.0 
và Spark 2.0.2. Thuật toán và giải thuật được thực hiện xây dựng trên nền tảng 
Scala 2.10.4. Sử dụng Zeppelin để tạo viết code, script và lấy thuộc tính, tăng 
tính linh hoạt trong quá trình xây dựng, sử dụng và tái sử dụng dữ liệu. 
64 
a. Phân nhóm/cụm khách hàng 
Trong quá trình thực hiện phân nhóm khách hàng sử dụng KMeans, sử 
dụng độ đo DaviesBouldin để đánh giá số cụm phù hợp nhất, với số cụm tối 
thiểu là 4 (do nhóm khách hàng cơ bản ban đầu cần đánh giá nằm ở 4 phân 
khúc khách hàng). Với E là số cụm tối ưu. 
E = evalclusters(X,'kmeans','DaviesBouldin','klist',[1:12]) 
Các thuộc tính sẽ căn cứ theo kinh nghiệm để lựa chọn ra các thuộc 
tính cho lần đầu tiên khi phân cụm, sau khi có thuộc tính lần đầu tiên; ta sử 
dụng thuộc tính được xếp hạng từ các cụm chạy mô hình rừng ngẫu nhiên để 
đánh giá. 
Căn cứ theo đánh giá khi sử dụng độ đo Davies – Bouldin (DB), thực 
hiện thử nghiệm lần lượt với số cụm và sử dụng độ đo DB đã nêu ở chương 3 
ta có bảng sau: 
K 2 3 4 5 6 7 8 9 10 11 12 
Davies–Bouldin 0.63 0.74 0.89 0.91 0.88 0.94 1.00 0.99 0.88 1.09 1.09 
Bảng 4-3: Giá trị DaviesBouldin 
Sau khi sử dụng độ đo DaviesBouldin đánh giá với các giá trị thuộc tính 
dữ liệu đầu vào, thử nghiệm lần lượt từng số cụm, kết quả số cụm phù hợp nhất 
ứng dụng giải thuật K-Means là 10. Với việc đánh giá số lượng cụm và số 
lượng dữ liệu cần đánh giá – là số bản ghi của KH phát triển mới trong tháng 
tại mỗi cụm được chia như sau: 
Cụm 0 1 2 3 4 5 6 7 8 9 
Số 
lượng 
thuê bao 
rời 
mạng 
34876 1201 2107 1769 517 101 2337 4947 704 416 
SLTB 
đang sử 
dụng 
dịch vụ 
2583267 32302 82032 61519 11711 1725 106359 281188 20002 21584 
Bảng 4-4: Kết quả phân cụm 
b. Đánh giá kết quả phân cụm: 
65 
Việc đánh giá kết quả phân cụm sẽ căn cứ theo các thuộc tính đã sử dụng 
để phâm cụm, sau đó hỗ trợ đưa ra các đặc điểm chung giữa các cụm để có các 
chính sách gắn tương ứng với các cụm. Đánh giá ngẫu nhiên các thuộc tính có 
tại mỗi cụm bằng cách so sánh các tâm cụm và độ tuổi trung bình, ta tạm chia 
độ tuổi ra làm 2 nhóm KH. 
Nhóm KH dưới 40 tuổi: 
Giá trị trung bình các 
thuộc tính ngẫu nhiên: 
Cluster_0 Cluster_1 Cluster_2 Cluster_3 Cluster_9 
usage_day_n 3.48 0.35 5.33 4.03 4.57 
non_usage_day_n 1.18 0.62 0.35 1.43 0.97 
usage_night_n 2.59 6.34 4.3 1.25 7.15 
no_prepaid_payment 6.49 2.67 2.03 3.38 1.08 
avg_amt_prepaid_payment 7,799.01 1.38 1.99 5,141.49 7,015.60 
no_month_last_prepaid_payment 15.04 0.74 0.38 13.23 20.13 
amt_last_prepaid_paymnet 60,003.98 65,645.89 76,525.54 120,106.92 134,622.28 
reserve_prepaid_charge 60,268.09 65,782.48 76,731.32 118,093.22 133,608.60 
no_month_prom_last_payment 5.01 4.74 5.65 3.13 6.02 
reserve_days_to_block 1.10 0.01 0.01 7.91 1.10 
no_days_to_churn 47.27 45.61 52.92 57.87 62.27 
no_report_cskh_n 63.28 32.23 24.72 35.44 73.28 
no_call_cskh_n 34.98 0.17 0.68 1.65 25.68 
flag_change_province 0.96 0.04 0.41 0.02 0.05 
flag_change_techonology 0.39 0.21 0.14 0.08 0.07 
flag_change_ftth_product 0.05 0.01 0.01 0.05 0.05 
flag_change_th_product 0.02 0.04 0.04 0.01 0.02 
flag_fmc_product 0.01 0.00 0.00 0.01 0.01 
flag_churn_order 0.74 0.28 0.21 0.75 0.77 
no_modem_active 2.36 1.47 1.54 4.92 1.24 
age 28.50 29.24 36.40 32.70 32.90 
SL bản ghi 2618143 33503 84139 63288 22000 
Nhóm KH có độ tuổi trên 40 tuổi 
66 
Giá trị trung bình các 
thuộc tính ngẫu nhiên: Cluster_4 Cluster_5 Cluster_6 Cluster_7 Cluster_8 
usage_day_n 2.63 3.44 3.05 3.18 2.71 
non_usage_day_n 
1.20 0.82 1.56 0.71 1.91 
non_usage_day_n 
1,527.45 7,954.27 1.29 1,401.84 5.12 
no_prepaid_payment 
5,938.54 23,788.83 224.35 2,727.05 14.33 
avg_amt_prepaid_payment 
270.19 159.32 261.83 74.32 98.01 
no_month_last_prepaid_payment 
8.38 2.47 6.20 2.01 6.34 
amt_last_prepaid_paymnet 
68,504.44 69,128.46 69,802.66 12,822.42 72,465.80 
reserve_prepaid_charge 
68,600.89 69,144.72 69,938.38 1.02 72,878.50 
no_month_prom_last_payment 
44,698.14 46,532.31 43,894.30 0.00 48,446.43 
reserve_days_to_block 
16 47 10 70 10 
no_days_to_churn 
55.65 90.13 95.63 124.22 55.84 
no_report_cskh_n 
5,834.13 23,586.71 258.35 2,670.96 0.65 
no_call_cskh_n 1,680.95 14,147.57 0.06 1,435.56 0.98 
no_staff_n 3,695.27 4,495.25 3,643.28 690.90 4,300.80 
no_reason_n 40,672.46 38,309.58 35,767.14 8,197.68 46,575.51 
flag_change_province 
4,908.36 10,200.93 12,944.46 1,555.15 18.07 
flag_change_techonology 
14,360.23 11,546.19 12,296.76 1,418.13 14,332.91 
flag_change_ftth_product 
0.25 0.05 0.05 0.02 0.03 
flag_change_th_product 
0.24 0.04 0.04 0.04 0.07 
flag_fmc_product 
0.03 0.01 0.01 0.01 0.01 
flag_churn_order 0.02 0.54 0.75 0.32 0.70 
no_modem_active 
6,221.33 12,953.91 16,688.80 1,952.86 3.24 
age 44.50 54.80 58.60 46.70 42.50 
SL bản ghi 12228 1826 108696 286135 20706 
Bảng 4-5: Phân nhóm khách hàng trên 40 tuổi và dưới 40 tuổi 
Các thuộc tính trong Bảng 4-5: Phân nhóm khách hàng trên 40 tuổi và 
dưới 40 tuổi là kết quả các thuộc tính đến hiện tại khi đưa vào đánh giá phân 
67 
cụm và thực hiện lặp lại nhiều lần mô hình ứng dụng kết hợp giữa K-Means và 
rừng ngẫu nhiên xử lý song song 
Các cụm cơ bản cho thấy nhóm hành vi phân bổ theo độ tuổi và phân 
nhóm theo hành vi người dùng. Đánh giá thêm về số tháng đóng trước và đánh 
giá sự liên quan đến hành vi đóng trước của KH theo từng tháng. 
4.2.2. Lựa chọn ngẫu nhiên các thuộc tính và đánh giá: 
Việc sử dụng ngẫu nhiên các thuộc tính đánh giá nội dung thực hiện sẽ 
bao gồm việc đánh giá các đặc trưng mỗi cụm, đánh giá các thuộc tính 
(features) ảnh hưởng đến kết quả dữ liệu đầu ra đầu ra của việc phân nhóm 
khách hàng. 
VD: khách hàng có độ tuổi lớn hơn hoặc bằng 58 (thuộc nhóm 6) tuổi 
sẽ có ít khả năng rời bỏ dịch vụ hơn các nhóm còn lại, có hành vi ổn định theo 
thời gian, sử dụng dịch vụ và đóng cước dài hạn, ít các dịch vụ phát sinh như 
đăng ký phim ngoài hoặc mua thêm các chương trình như K+. 
Việc đánh giá các cụm dữ liệu đưa vào cây quyết định cần rõ ràng về 
nhãn sử dụng, rõ ràng về ngữ nghĩa dữ liệu và không bị mất cân bằng nhãn. Cụ 
thể - loại bỏ cụm dữ liệu cụm 0 do cụm này đang chưa thể hiện rõ rệt về thuộc 
tính dữ liệu. 
Thực hiện đánh giá các thuộc tính có ảnh hưởng trên cụm 4 (12228), 
cụm 5 (1826), cụm 8 (20706) và cụm 9 (22000) do có số lượng bản ghi ít, thuộc 
tính hành vi khá rõ ràng, có thể đưa ra chính sách trực tiếp khi căn cứ vào kinh 
nghiệm triển khai thực tiễn. VD: Độ tuổi trung bình của cụm cụm 8 là độ tuổi 
42, với số tháng đóng trước thấp, nhỏ hơn 6 tháng, số tháng đóng trước trung 
bình là 6 tháng. Với cụm 4, cụm 5, đã hết cước, cần đưa cho kinh doanh đánh 
giá hình thức tác động, đánh giá thêm một số thuộc tính có trọng số cao để hỗ 
trợ đưa ra quyết định. 
Tiếp tục ứng dụng mô hình học máy và cắt ngưỡng triển khai với các 
cụm 2, cụm 3, cụm 6 và cụm 7. 
4.2.3. Thực hiện huấn luyện dữ liệu với mô hình Parallel 
RandomForest 
68 
Việc huấn luyện dữ liệu sẽ được thực hiện đồng thời với toàn bộ các 
cụm dữ liệu đầu vào, sử dụng ma trận - confusion matrix để đánh giá và biểu 
đồ ROC để thể hiện. 
Kết quả huấn luyện với các cụm như sau: 
Cụm 2: 
Cụm 3: 
Cụm 6 
Cụm 7 
69 
Hình 4.2. Tỷ lệ độ đo theo ROC của các tập train, test và validation 
Các biểu đồ thể hiện độ ROC theo hình 3.2. Cho thấy tỷ lệ giữa Precision 
và Recall của mỗi cụm. 
Tổng thời gian huấn luyện là 1.5 tiếng cho toàn bộ quá trình, bao gồm 
quá trình huấn luyện, kiểm định và đánh giá lại mô hình, sau đó ghi kết quả 
đầu ra tổng hợp. 
Giải thuật Accuracy Precision Recall 
Mạng Neural 75.61% 81.86% 88.89% 
PRF 74.22% 78.30% 88.45% 
KNN 72.21% 76.80% 86.74% 
Bảng 4-6: So sánh tỷ lệ Accuracy giữa Precision, Recall 
Việc đánh giá thời gian huấn luyện sẽ đánh giá theo 2 chiều, đầu tiên, 
đánh giá về thời gian huấn luyện một mô hình chạy đơn lẻ, sau đó đo thêm 
trung bình thời gian huấn luyện đồng thời toàn bộ các mô hình, và độ chênh 
lệch thời gian giữa các mô hình. 
Các mô hình KNN và PRF được thực hiện trên cùng một môi trường có 
cài đặt Spark, đối với mạng Neural, cài đặt Python trên một máy có cấu hình 
tương đương: Ram 32GB; CPU 3.2 ghz trên một máy. Việc so sánh về thời 
gian và cấu hình tương đương với Mạng Neuron là không hợp lý, do việc xây 
dựng, cài đặt và cấu hình cho giải thuật không tương đồng, môi trường không 
tương đồng, do mạng Neural xử lý trên một máy. Với Mạng Neural, chạy trên 
một máy với 1 cụm là 3240s, đồng thời toàn bộ các cụm là 24486s, độ chênh 
lệch giữa các lần thử là 190s. 
Giải thuật 
Chạy 1 
cụm 
Chạy 
toàn bộ 
các cụm 
Độ 
chênh 
lệch 
70 
PRF 2378s 4898s 358s 
KNN 2488s 6898s 482s 
Bảng 4-7: So sánh thời gian chạy giữa KNN và PRF. 
Việc xử lý dữ liệu của cụm Spark tính theo khả năng xử lý đồng thời có 
thể lên đến 800GB (100 nút phụ - slave node, 8GB Ram/node). Giúp cho quá 
trình tính toán cũng như đảm bảo đầu ra sản phẩm khi đưa vào triển khai thực 
tế. 
Kết quả thực hiện lần 1 với mô hình học máy sử dụng rừng ngẫu nhiên 
để đánh giá mức độ cắt ngưỡng phù hợp chung với toàn bộ các mô hình: 
Tỷ lệ nhãn 0/1: 21.693/15.917.905 
Sử dụng toàn bộ thuộc tính của C360 để huấn luyện và đưa ra tập kết 
quả. Tương đương 1,2T dữ liệu xử lý đồng thời. 
Hình 4.3. Important Feataures v1 
Hình 3.3 cho thấy kết quả huấn luyện phân loại thuộc tính ban đầu; được 
sử dụng để phân loại thuộc tính và đánh giá nhóm các cụm thuộc tính. Gồm 
nhóm 30 thuộc tính có điểm trọng số ảnh hưởng lớn nhất đối với mỗi Key Id. 
71 
Hình 4.4. ROC - Receiver operating characteristic 
Biểu đồ theo hình 3.4 đánh giá độ chính xác theo biểu đồ ROC thể hiện 
độ phù hợp tập dữ liệu đầu ra sau quá trình huấn luyện. 
Hình 4.5. Cumulative Gain 
Biểu đồ AUROC – Cumulative Gain hình 3.5 cho thấy tính hiệu quả và 
độ phủ của model. Biểu đồ này sử dụng để đánh giá hiệu năng triển khai và 
đánh giá độ phủ sau triển khai. Sử dụng đánh giá về độ phủ và đánh giá về 
nhóm tiềm năng. 
3.1. Đánh giá độ chính xác phân loại cho mô hình cây 
khác nhau. 
72 
Để minh họa cho độ chính xác phân loại (accuracy) của PRF, các thí 
nghiệm được thực hiện cho các thuật toán khác nhau, bao gồm 3 thuật toán 
được so sánh: PRF,DRF (Dinamic Random Forest) [16], và RF, SparkLib 
MLRF [22]. Mỗi trường hợp liên quan đến độ đo khác nhau của cây quyết định. 
Kết quả thử nghiệm được trình bày trong hình 26. 
Hình 4.6. Tỷ lệ độ chính xác trung bình của các mô hình cây khác 
Hình 3.6 cho thấy độ chính xác phân loại trung bình của tất cả các thuật 
toán so sánh không cao khi số lượng cây quyết định bằng 10. Khi số lượng cây 
quyết định tăng lên, độ chính xác phân loại trung bình của các thuật toán này 
tăng dần và có xu hướng hướng tới một sự hội tụ. Độ chính xác phân loại của 
PRF trung bình cao hơn RF 8,9% và cao hơn 10,6% trong trường hợp tốt nhất 
khi số lượng cây quyết định bằng 1500. Cao hơn DRF trung bình 6,1% và cao 
hơn 7,3% trong trường hợp tốt nhất khi số lượng cây quyết định bằng 1300. 
Độ chính xác phân loại của PRF cao hơn so với Spark-MLRF trung bình 4,6% 
và 5,8% trong trường hợp tốt nhất khi số lượng cây quyết định bằng 1500. Do 
đó, so với RF, DRF và Spark-MLRF, PRF cải thiện độ chính xác phân loại 
đáng kể. 
Độ chính xác phân loại của PRF trong tất cả các trường hợp đều cao hơn 
so với RF, DRF và Spark-MLRF rõ ràng cho từng quy mô dữ liệu. Độ chính 
xác phân loại của PRF cao hơn DRF trung bình 8,6% và cao hơn 10,7% trong 
trường hợp tốt nhất khi số lượng mẫu bằng 3.000.000. Độ chính xác phân loại 
của PRF cao hơn trung bình là 8,1% của Spark-MLRF và cao hơn 11,3% trong 
trường hợp tốt nhất khi số lượng mẫu bằng 3.000.000. Đối với Spark-MLRF, 
do phương pháp lấy mẫu cho từng phân vùng của tập dữ liệu, khi kích thước 
0
0.02
0.04
0.06
0.08
0.1
0.12
0.14
0.16
0.18
0.2
10 30 50 70 90 200 400 600 800 1000 1200 1400 1600 1800 2000 2200 2400
PRF SpartLib DRF RF
Decision tree 
A
v
er
ag
e 
A
cc
u
ra
cy
73 
của tập dữ liệu tăng lên, tỷ lệ lựa chọn ngẫu nhiên của tập dữ liệu tăng và độ 
chính xác của Spark-MLRF chắc chắn sẽ giảm. Do đó, so với RF, DRF và 
Spark-MLRF, PRF cải thiện độ chính xác phân loại đáng kể cho các quy mô 
khác nhau của bộ dữ liệu 
4.3. Đánh giá hiệu suất: 
Nhiều thí nghiệm khác nhau được xây dựng để đánh giá hiệu suất của 
PRF bằng cách so sánh với các thuật toán RF và Spark-MLRF về thời gian 
thực hiện, tốc độ xử lý, khối lượng dữ liệu và chi phí đường truyền trong quá 
trình huấn luyện dữ liệu. 
4.3.1. Đánh giá thời gian xử lý với nhóm dữ liệu 
Khi kích thước dữ liệu nhỏ (ví dụ: dưới 1,0GB), thời gian thực thi của 
PRF và Spark-MLRF cao hơn của RF. Lý do là cần có một thời gian cố định 
để gửi các thuật toán đến cụm Spark và cấu hình các chương trình. Khi kích 
thước dữ liệu lớn hơn 1,0GB, thời gian thực thi trung bình của PRF và Spark-
MLRF nhỏ hơn của RF trong bốn trường hợp. Ví dụ: trong trường hợp dữ liệu 
lấy mẫu có tính rải rác, khi kích thước dữ liệu tăng từ 1,0 lên 500,0 GB, thời 
gian thực thi trung bình của RF tăng từ 19,9 lên 517,8 giây, trong khi của Spark-
MLRF tăng từ 24,8 lên 186,2 giây và thời gian thực thi của PRF tăng từ 23,5 
đến 101,3 giây. Do đó, thuật toán PRF trong quá trình thử nghiệm đạt được tốc 
độ xử lý nhanh hơn RF và Spark-MLRF. Khi kích thước dữ liệu tăng lên, hiệu 
quả càng dễ nhận thấy, đặc biệt là chi phí huấn luyện về dữ liệu và thời gian. 
Tận dụng tối ưu hóa việc xử lý đồng thời kết hợp song song, PRF đạt được 
những điểm mạnh đáng kể so với Spark-MLRF và RF về hiệu suất và thời gian 
xử lý. 
4.3.2. Đánh giá thời gian xử lý với từng cụm 
Hiệu suất của PRF trên nền tảng Spark đối với các quy mô khác nhau 
của các nút phụ được xem xét. Số lượng nút phụ (slave nodes) được tăng dần 
từ 10 lên 100. Do kích thước dữ liệu và nội dung dữ liệu huấn luyện khác nhau, 
thời gian Xử lý PRF trong mỗi trường hợp là khác nhau. Khi số lượng nút phụ 
tăng từ 10 lên 50, thời gian thực thi trung bình của PRF trong mọi trường hợp 
giảm đi một cách rõ rệt. Ví dụ, thời gian thực hiện trung bình của PRF giảm từ 
405,4 xuống 182,6 giây trong trường hợp của cụm 7 và từ 174,8 xuống 78,3 
giây trong trường hợp cụm 6. Để so sánh, thời gian thực thi trung bình của PRF 
74 
trong các trường hợp khác giảm ít rõ ràng hơn khi số lượng nút phụ (slave 
nodes) tăng từ 50 lên 100. Ví dụ: thời gian thực thi trung bình của PRF giảm 
từ 182,4 xuống 76,0 giây trong trường hợp cụm 3 và từ 78,3 xuống 33,0 giây 
trong trường hợp cụm 2. Điều này là do khi số lượng Spark Slaves lớn hơn số 
lượng thuộc tính của tập dữ liệu huấn luyện, mỗi tập hợp con tính năng có thể 
được phân bổ cho nhiều nút phụ, dẫn đến việc xử lý dữ liệu và trao đổi thông 
tin giữa các nút phụ tăng lên, ảnh hưởng đến thời gian thực thi PRF cũng tăng. 
4.4. Đánh giá hiệu quả thực tế: 
Việc sử dụng kết quả triển khai ứng dụng vào thực tế là điều cần thiết, 
thay vì chỉ đo dựa trên các chỉ số precision, hay recall. 
Hình 4.7. Phương pháp đo lường kết quả trong thực tế 
Theo [21], thực hiện chia các tập thử nghiệm ra làm 4 nhóm TB từ tập 
sau khi huấn luyện, Tiếp tục phân chia thành các nhóm như hình 3.7: 
MODEL HOLD OUT 
CONTROL 
HOLD OUT 
Thực hiện 
truyền 
thông 
Có huấn luyện 
Chọn ngẫu nhiên; nhận được tin 
nhắn truyền thông 
Đánh giá tỷ lệ phản hồi truyền 
thông không có mô hình 
Không huấn luyện 
Chọn bởi mô hình; nhận được 
tin nhắn truyền thông 
Đánh giá tỷ lệ phản hồi truyền 
thông qua mô hình 
Chọn ngẫu nhiên; không nhận 
được tin nhắn truyền thông 
Sử dụng đánh giá tỷ lệ phản hồi 
tự nhiên. 
Chọn bởi mô hình; không nhận 
được tin nhắn truyền thông 
Sử dụng đánh giá tỷ lệ phản hồi 
tự nhiên của tập được chọn bởi 
mô hình. 
Không 
truyền 
thông 
TARGET 
75 
Lấy ra hai tập Control Group và Hold Out: sử dụng để triển khai, theo 
dõi tỷ lệ tự nhiên, so sánh giữa việc áp dụng model vào triển khai so với chỉ số 
thực tế: 
• Tập CG (Control Group): Tập lấy ngẫu nhiên số lượng 10% các cụm 
triển khai để thử nghiệm 
• Tập HO (hold out): lấy ra khối lượng ngẫu nhiên với cụm 2 – lấy ra 
mẫu 10% từ các cụm triển khai để đánh giá hiệu quả chương trình 
triển khai so với tỷ lệ tự nhiên 
Với 2 tập Target và tập Model hold out: là tập tối ưu nhất của cụm – 
sử dụng 3 nhóm dữ liệu đánh giá tiềm năng là cụm 3, cụm 6, cụm 7 có chỉ số 
ROC tốt nhất để triển khai sau khi có phân tích và đánh giá, lấy theo tỷ lệ phản 
hồi (TakeUpRate) cắt ngưỡng theo lift charge – hình 24; cắt ngưỡng triển khai 
là 28%, tương đương với 896 nghìn, không bao gồm nhóm đã cắt bỏ riêng: 
• Tập TG (target): sử dụng top 90% của tập 896 nghìn để đánh giá hiệu 
quả mô hình trong thực tế. 
• Tập MHO (model hold out): sử dụng top 10% của tập 896 nghìn để tách 
riêng theo dõi tỷ lệ tự nhiên. 
Hình 4.8. So sánh tỷ lệ triển khai thực tế TG và MHO 
76 
Hình 4.9. So sánh tỷ lệ triển khai thực tế MHO và HO 
So sánh MHO và TG: Đánh giá hiệu quả của chương trình truyền thông 
với nhóm có điểm cao được chọn bởi mô hình. 
So sánh Control và TG: Đánh giá hiệu quả mô hình giữa việc thực hiện 
truyền thông và không truyền thông. 
Tỷ lệ triển khai trong thực tế đã chứng minh hiệu quả của mô hình kết 
hợp, theo Hình 4.8. So sánh tỷ lệ triển khai thực tế TG và MHO và Hình 4.9. 
So sánh tỷ lệ triển khai thực tế MHO và HO; hỗ trợ và đánh giá được kết quả 
của mô hình ứng dụng, kết quả triển khai khi áp dụng vào thực tế và hiệu quả 
khi thực hiện một chương trình. Tỷ lệ triển khai hơn so với nhóm không triển 
khai 1.7 lần. Ngoài ra cũng cho thấy việc đưa thông tin về nhóm thuộc tính 
quan trọng có hiệu quả, giúp cho việc triển khai trong thực tế đạt kết quả tốt. 
77 
KẾT LUẬN VÀ ĐỊNH HƯỚNG NGHIÊN CỨU 
TIẾP THEO 
Trong luận văn đã đề xuất mô hình kết hợp giữa thuật toán phân cụm và 
rừng ngẫu nhiên song song. Với mục tiêu xử lý các vấn đề gặp phải trong quá 
trình khai phá dữ liệu lớn trong điều kiện thực tế, giải quyết vướng mắc gặp 
phải khi ứng dụng học máy vào quá trình sản xuất kinh doanh. Quá trình thực 
hiện ứng dụng mô hình học máy vào triển khai được lặp lại, trước tiên, thực 
hiện phân dữ liệu ra các cụm, sau đó, đưa dữ liệu các cụm vào mô hình PRF, 
kết hợp tối ưu hóa song song dữ liệu và xử lý đồng thời được thực hiện với nền 
tảng Apache Spark. Tận dụng lợi thế của việc tối ưu hóa song song dữ liệu, tập 
dữ liệu huấn luyện được sử dụng lại và khối lượng dữ liệu xử lý tại mỗi bước 
được giảm đáng kể. Kết quả mang lại từ việc tối ưu hóa xử lý đồng thời, chi 
phí đường truyền dữ liệu được giảm xuống một cách hiệu quả và hiệu suất của 
thuật toán được cải thiện rõ rệt. Sau khi thử nghiệm cho thấy tính ưu việt và 
điểm mạnh đáng chú ý của mô hình kết hợp giữa xử lý phân cụm và phân nhóm 
PRF so với các thuật toán khác về độ chính xác phân loại, hiệu suất và khả 
năng mở rộng. 
1) Tính sáng tạo và khoa học: 
Sử dụng các mô hình, giải thuật học máy để giải quyết các vấn đề gặp 
phải trong thực tế. Kết hợp các mô hình để đưa ra mô hình học máy ứng dụng 
kết hợp giữa phân cụm và phân lớp dữ liệu, tìm ra nhóm dữ liệu có đặc trưng 
tương đồng, đánh giá dữ liệu dựa vào thuộc tính sau khi sử dụng kết hợp các 
mô hình học máy, nhằm nâng cao kết quả khi triển khai ứng dụng thực tế. 
2) Tính ứng dụng: 
Sau khi có kết quả huấn luyện các mô hình, phân loại được nhóm dữ liệu 
tối ưu, từ đó ứng dụng vào quá trình thử nghiệm. Việc sử dụng kết quả mô hình 
ứng dụng vào thực tế đã được đánh giá, việc ứng dụng triển khai sẽ được lặp 
lại qua mỗi chu kỳ để đánh giá và nâng cao hiệu quả mô hình, loại bỏ các thuộc 
tính dữ liệu dư thừa không cần thiết, bổ sung dữ liệu và phân cụm khách hang 
chính xác hơn. Tìm ra nhóm khách hàng tiềm năng và đưa ra các nhóm dữ liệu 
tiềm năng để triển khai. 
3) Tính hiệu quả: 
78 
Sau khi triển khai, mô hình được đánh giá là mang lại được kết quả rõ 
rệt, đặc biệt là việc tìm ra nhóm dữ liệu tiềm năng để triển khai, trả lời được 
thuộc tính của nhóm dữ liệu ít tiền năng, bổ sung vào phân tích và đánh giá, 
đưa dữ liệu cho nhóm kinh doanh để đánh giá và phân tích, bổ sung được thuộc 
tính dữ liệu mới để tối ưu hóa kết quả triển khai trong các chu kỳ sau. Tính 
hiệu quả của mô hình được trả lời bằng kết quả triển khai thực tế khi so sánh 
tỷ lệ phản hồi của mỗi nhóm: Target; Model Hold Out; Control; Hold Out được 
đề cập đến trong chương 3, mục 3.4. 
4) Tính hoàn thiện: 
Việc hoàn thiện giải thuật nâng cao hiệu quả triển khai trong thực tế, 
được lặp đi lặp lại, quá trình thực hiện đề tài có thể đánh giá là toàn trình phát 
triển, xây dựng, tối ưu cho đến việc đánh giá kết quả. Cho phép tối ưu kết quả 
qua mỗi chu kỳ, các nhóm dữ liệu căn cứ theo tỷ lệ triển khai thực tế tốt, và 
các nhóm chưa tốt, đưa ra được phương án tối ưu cho các lần triển khai tiếp 
sau. 
5) Nhược điểm: 
Các mô hình ứng dụng chưa phải là tối ưu, do vẫn có một số bước chưa 
sử dụng được mô hình và vẫn phải dựa vào ý kiến chủ quan của người có kinh 
nghiệm. Việc ứng dụng cũng chưa phủ được toàn bộ các nhóm dữ liệu và cần 
có nhân sự tham gia. Cần tối ưu hóa kết quả và nâng cao hiệu năng hơn. 
Đối với giải thuật, việc tối ưu giải thuật khi sử dụng KMeans và 
RandomForest vẫn chưa thực sự đạt kết quả tốt khi chia nhóm, khi xây dựng 
ra bộ thuộc tính tối ưu. Cần đề xuất ra một giải thuật để lựa chọn thuộc tính có 
trọng số thay cho phương án lựa chọn bởi số đông, đặc biệt khi dữ liệu bị mất 
cân bằng. Chưa tái sử dụng được dữ liệu của các cây quyết định, và phải huấn 
luyện lại ở mỗi cụm dẫn đến chưa tối ưu được thời gian triển khai trong thực 
tế. 
Chưa sử dụng được các mô hình học sâu để tối ưu kết quả triển khai 
cũng là một nhược điểm. Việc trả lời khi sử dụng mô hình ứng dụng được đánh 
giá bằng hiệu năng về thời gian, xử lý dữ liệu lớn và liên tục, tối ưu kết quả 
trong thực tế. 
6) Định hướng phát triển: 
79 
Đối với công việc trong tương lai, việc nghiên cứu sẽ tập trung vào thuật 
toán rừng ngẫu nhiên song song gia tăng cho các luồng dữ liệu trong môi 
trường đám mây và cải thiện cơ chế phân bổ dữ liệu và lập lịch tác vụ cho thuật 
toán trên môi trường phân tán và xử lý đồng thời. Tự động hóa quá trình huấn 
luyện và gán nhãn để tăng hiệu suất trong thực tế. Đánh giá và bổ sung phương 
án lựa chọn có trọng số, đánh giá phương thức tối ưu dùng lại dữ liệu theo cơ 
chế cache trong khi huấn luyện và đánh giá thuộc tính nhằm tối ưu thời gian 
xử lý trong quá trình huấn luyện đồng thời. Xa hơn nữa, đánh giá việc ứng 
dụng học sâu và triển khai các mô hình học sâu, nhằm tối đa hóa được hiệu 
năng, ứng dụng và nâng cao kết quả và phải cân bằng được chi phí thời gian 
và hiệu suất khi đưa ứng dụng vào thực tế. 
80 
TÀI LIỆU THAM KHẢO 
Tiếng Anh 
[1] U. Sivarajah, M. Kamal, Z. Irani and V. Weerakkody, "Critical analysis of Big 
Data challenges and analytical methods", Journal of Business Research, vol. 
70, no.1, pp.263-286, Jan 2017. 
[2] A. Azar and A. Hassanien, "Dimensionality reduction of medical big data using 
neural-fuzzy classifier", Soft Computing, vol. 19, no. 4, pp. 1115-1127, June 
2014. 
[3] A. Nega and A. Kumlachew, "Data Mining Based Hybrid Intelligent System 
for Medical Application", International Journal of Information Engineering 
and Electronic Business, vol. 9, no. 4, pp. 38-46, 2017. 
[4] P. K. Ray, S. R. Mohanty, N. Kishor, and J. P. S. Catalao, “Optimal feature and 
decision tree-based classification of power quality disturbances in distributed 
generation systems,” Sustainable Energy, IEEE Transactions on, vol. 5, no. 1, 
pp. 200–208, January 2014. 
[5] T. White, “Hadoop: The Definitive Guide.” O’Reilly Media Inc./Yahoo 
Press, 2012. 
[6] J. Corbett, P. Hochschild, W. Hsieh, S. Kanthak, E. Kogan, H. Li, A. Lloyd, 
et al., “Spanner: Google’s globally distributed database,” ACM Transactions 
on Computer Systems, vol. 31, no. 3, pp. 1-22, 2013. 
[7] Gordon S. Linoff, Michael J. A. Berry (2011): “Data Mining Techniques - For 
Marketing, Sales, and Customer Relationship Management 3rd”. pp. 23-29. 
[8] L. Abraham, S. Subramanian, J. Wiener, O. Zed, J. Allen, O. Barykin, et al., 
“Scuba: Diving into data at FaceBook,” Proceedings of the VLDB 
Endowment, vol. 6, no. 11, pp. 1057-1067, 2013. 
[9] G. Lee, J. Lin, C. Liu, A. Lorek, and D. Ryaboy, “The unified logging 
infrastructure for data analytics at Twitter,” Proceedings of the VLDB 
Endowment, vol. 5, no.12, pp.1771-1780, 2012 
[10] Sam B. Siewert: “Big data in the cloud - Data velocity, volume, variety and 
veracity”. pp. 2-8 (2013). 
[11] Eric Sammer: “Hadoop Operations”, CHAPTER 1, pp.1 – 6. September 2012. 
[12] Eric Sammer: “Hadoop Operations”, CHATER 2. HDFS, pp.7 – 23. September 
2012. 
[13] Eric Sammer: “Hadoop Operations”, CHATER 3. MAPREDUCE, pp.25 – 37. 
September 2012. 
[14] L. Breiman, “Random forests,” Machine Learning, vol. 45, no. 1, pp. 5–32, 
October 2001. 
81 
[15] Eréndira Rendón, Itzel Abundez, Alejandra Arizmendi and Elvia M. Quiroz 
(2011): Internal versus External cluster validation indexes. Issue 1, Volume 5. 
27-33. 
[16] S. Bernard, S. Adam, and L. Heutte (September 2012): “Dynamic random 
forests,” Pattern Recognition Letters, vol. 33, no. 12, pp. 1580–1586. 
[17] Darius Pfitzner, Richard Leibbrandt, David M. W. Powers (2009): 
Characterization and evaluation of similarity measures for pairs of clusterings. 
Knowl. Inf. Syst. 19(3): 361-394. 
[18] Maria Halkidi, Yannis Batistakis, Michalis Vazirgiannis (2001): “On 
Clustering Validation Techniques.”, J. Intell. Inf. Syst. 17(2-3): 107-145. 
[19] Frank, Eibe Hall, Mark A. Pal, Christopher J. Witten, Ian H (2017): “Data 
mining, practical machine learning tools and techniques”. pp.7-9. 
[20] Aurélien Géron (2017): “Hands-On Machine Learning with Scikit-Learn & 
TensorFlow - Concepts, Tools, And Techniques To Build Intelligent Systems”, 
Chapter 1. The Machine Learning Landscape, pp 7-14. 
[21] Gordon S. Linoff, Michael J. A. Berry (2011): “Data Mining Techniques: For 
Marketing, Sales, and Customer Relationship Management 3rd”, Figure 5.13, 
pp. 137-141 
[22] A. Spark, “Spark mllib - random forest,” Website, June 2016, 
[23] Aurélien Géron (2017): “Hands-On Machine Learning with Scikit-Learn & 
TensorFlow - Concepts, Tools, And Techniques To Build Intelligent Systems”, 
Chapter 1. The Machine Learning Landscape, Overfitting the Training Data, 
Underfitting the Training Data, pp 26-28. 
[24] Holden Karau, Andy Konwinski, Patrick Wendell, and Matei Zaharia: 
“Learning Spark: Lightning-Fast Big Data Analysis”, pp 1 - 7. 
[25] Hien Luu: “Beginning Apache Spark 2: With Resilient Distributed Datasets, 
Spark SQL, Structured Streaming and Spark Machine Learning library”, 
Chapter 3 Resilient Distributed Datasets, pp 51-55. 
[26] Bill Chambers and Matei Zaharia: “Spark: The Definitive Guide”, pp 20 – 28 
[27] Hien Luu: “Beginning Apache Spark 2: With Resilient Distributed Datasets, 
Spark SQL, Structured Streaming and Spark Machine Learning library”, 
Chapter 1: Introduction to Apache Spark, pp 1-11. 
            Các file đính kèm theo tài liệu này:
luan_van_phan_tich_hanh_vi_su_dung_dich_vu_vien_thong_cua_kh.pdf