Giới thiệu bài toán Phân khúc khách hảng là một trong những chiến lược quan trọng của các công ty khi mà họ sẽ phân nhóm khách hàng của mình và có các kế hoạch quảng cáo, chăm sóc khách
Trang 1
TRUONG DAI HOC NGUYEN TAT THANH KHOA CONG NGHE THONG TIN
NGUYEN TAT THANH
DO AN MON HOC DU LIEU LON
SU DUNG PYSPARK DE PHAN KHUC KHACH HANG DUA
TREN K-MEANS
Sinh viên thực hiện: NGUYÊN HOÀNG PHÚC
Trang 2LOI NOI DAU
Trang 3LOI CAM ON
Trước tiên với tình cảm sâu sắc và chân thành nhất, cho phép em được bày tỏ lòng biết ơn đến tất cả các cá nhân và tổ chức đã tạo điều kiện hỗ trợ, giúp đỡ em trong suốt quá trình học tập và nghiên cứu đề tài này Trong suốt thời gian học tập vừa qua, em đã nhận được rất nhiều sự quan tâm, giúp đỡ của quý Thầy Cô và bạn
bè Với lòng biết ơn sâu sắc, em xin gửi đến quý Thầy Cô ở Khoa CNTT đặc biệt là Thầy Hồ Khôi đã truyền đạt vốn kiến thức quý báu cho chúng em trong suốt thời gian học tập tại trường Nhờ có những lời hướng dẫn, dạy bảo của các thầy cô nên
đề tài nghiên cứu của em mới có thể hoàn thiện tốt đẹp Một lần nữa, em xin chân thành cảm ơn thầy Khôi — người đã trực tiếp giúp đỡ, quan tâm, hướng dẫn em hoản thành tốt bài báo cáo này trong thời gian qua Bước đầu đi vào thực tế của em còn
hạn chế và còn nhiều bỡ ngỡ nên không tránh khỏi những thiếu sót trong quá trình
làm đồ án, em rất mong nhận được những ý kiến đóng góp quý báu của Thầy để kiến thức của em được hoàn thiện hơn đồng thời có điều kiện bô sung, nâng cao ý thie cua minh Em xin chan thành cảm ơn!
Sinh viên thực hiện NGUYÊN HOÀNG PHÚC
NGUYÊN NGỌC NAM
Trang 4BM-ChT-
PHIEU CHAM THI
Môn thi: Công nghệ khoa học đữ liệu
Lớp học phần: 20DTHID
Nhóm sinh viên thực hiện :
1.Nguyễn Hoàng Phúc Tham gia đóng góp: 30%
2.Nguyễn Ngọc Nam Tham gia đóng góp: 70%
Dé tai tiéu luan/bao cao cua sinh vién :
Phan danh gia cua giang vién (can cir trén thang rubrics cua môn học):
Tiéu chi (theo Đánh giá của GV Điểm tối | Điểm đạt
Trang 6LLL Dax la nh 16
a Data Analysis Expressions 0 cccccccccceseceseesseeseeceenscensestsessessseenssees 16
b Tầm quan trọng của DAX trong Power BU cccccccscccccseceeseseesesessesees 17
c Yếu tô cơ bản của DAX 2s 21 2212211221211211271222211222212 xe 17
d _ So sánh: DAX (Power BỊ) và HÀM (Excel) 52 5c s22 czx rrrrre 17
0a 18
b Val trÒ CỦa F€ĐOY 2 1201201221111 1111 1121211011 1111111 1011121111111 1 11 xkg 18
c Các bước xây dựng TepOF( 2 2211211121121 111111111 111211 re 18 Chương2 Phân tích độ tuôi các nhà vô địch boxing hạng nặng khi họ lần đầu lấy đai của WBC & WBO à tt n1 gn 1121112111 n trường 19
IV TBIT) 0ï 84: sEđaIiaaiiiađẳđđẳẳđáẳẳảẳááiảÝảỶắảÝ 31
Trang 7DANH MỤC HÌNH
Hình L6 Chỉnh sửa và kết opp dit An h S 6
(08/0/71 nh 7
(80m 9/, 7.1.2 07 e 7
Finh 1.9 Privot COMMAS nen e 8
(00/06 85h ee ọ (0n 1 na sen e 10
(808/61 n 6 8m e 10
Hình 1 13 Các công thúc truy VẤN Ì 222k il Hinh 1.14 Cde cong thite try van 20 ccc ccc 0 2222k il Hinh 1.15 Bang dashboard chin loc ccccccccccccccccccescescescsssssessessessesesssesessesssssesseseesessessneseeees 13 8/008 ốn ng nốố ố.ee 14
r0 7 na an na ốố ốố.ốe 14
(08.1 .09 a nan na e 17
Hình 2.1 Chia hạng cân Quyên Anh nghiệp đự à c HH1 2121212221221 2ï Hình 2.2 Chia hạng cân Quyền Anh chuyên nghiệp à c2 22 Hirth 820.18 1 -00800NậậT/ 24
0500 4,16 24
Flinh 2.5 Die liu AG that thai Lice 25
00000928, 8, 088 25
00771.010.807 e 26
FTirnh 2.8 Xt li Ait EU 0085 26 Finn 2.9 Xt li Ait HEU 3 cocci cece cect eneectesenesesesesecseaeacenessenesssnesusesesseaeeeseaeeacensensesnesnees 27 Eira 2.10 Xt li dit QU Aces cece ete netesteneeesesnensecnsensssessstessnesueesceeesensseaeeseneeeeeeeeeeees 27 ETirnh 2.11 Xte li dit QU Sec cec ec cceeecceeccteeete sete sete sncnccnsnsesassessstessiesusescnesseneseaeeseneeeeeeeesees 28 Eira 2.12 Xt li it QUO cece cece enennetesnesesesesnensensesensesessseessnesuseseneeseeessaeesaneeeeseseesees 28
ETinh 2.14 Muhammad Aliciccccccccccccccceccecetestenssnsesensnsenssessnessnssueeceaeesenessenesienesueesenansenaseeas 29
Vi
Trang 8ki HIEU CAC CUM TU VIET TAT
WBO (Tô chức Quyên Anh Thê gid1) A r À K ore
International Boxing Federation IBF (Liên đoàn Quyền Anh Quốc Tế)
vn
Trang 9CHUONG 1 YEU CAU BAI TOAN
1.1 Giới thiệu bài toán
Phân khúc khách hảng là một trong những chiến lược quan trọng của các công
ty khi mà họ sẽ phân nhóm khách hàng của mình và có các kế hoạch quảng cáo, chăm sóc khách hàng phù hợp với từng nhóm đối tượng mua hàng
Giả sử bạn ghé vào cửa hàng quần áo X vào mỗi địp đầu tháng, có thé ban được xếp vào nhóm những người tiêu tiền đầu tháng, nghèo cuối tháng, hay lương được trả vào cuối tháng, thích mua sắm hàng tháng, thích mua quân âu Khi đó, công ty X sẽ có những quảng cáo với mác "Chỉ dành riêng cho bạn" hay "Duy nhất trong ngày hôm nay" và những quảng cáo này sẽ xuất hiện cho những người cùng nhóm với bạn, xuât hiện vào đầu tháng, các mặt hàng sale chủ yêu là quân au,
1.2 Mục đích bài toán
Dựa vào dữ liệu khách hàng mua sản phẩm mà phân loại họ theo các nhóm
khác nhau Từ đó tìm ra tính đặc trưng mua hàng của mỗi nhóm khách hàng như
mua vào thời gian nào, mặt hàng thường mua để có các biện pháp thu hút các nhóm khách hàng tiềm năng và cải thiện phục vụ các nhóm khác
1.3 Phương pháp làm bài toán
Nhắc đến phân cụm, ta sẽ nghĩ ngay đến K-means Và trong bài nay, ta sẽ áp dụng K-means cùng với PySpark trên nền tang Google Colad đề giải quyết bài toán Giải quyết bài toán chia làm các bước lớn như sau :
e© Phân tích dữ liệu
© Tiền xử lí đữ liệu
© Chuẩn hóa đữ liệu
¢ Machine learning
Trang 101.4 Sơ lược về thuật toán và công cụ thực hiện
a.Spark là gì ? Spark la mét framework xtr ly phan tan va tinh toan lớn được phát triển trên nén tang Apache Hadoop
Spark được thiết kế để hoạt động cùng với Hadoop và sử dụng Hadoop Distributed File System (HDFS) để lưu trữ dữ liệu Nó cũng tích hợp với Hadoop YARN để quản lý tài nguyên và phân phối các tác vụ tính toán trên các nodes trong cụm Hadoop
Spark được thiết kế để giải quyết các hạn chế của MapReduce vả cung cấp một cách tiếp cận hiệu quả hơn đề xử lý các tác vụ phức tạp
b.PySpark ? PySpark là một giao diện cho Apache Spark bằng Python Với PySpark, bạn
có thể viết các lệnh giống "sự lai ghép" giữa Python và SQL để truy vấn và phân tích dữ liệu trong môi trường xử lý phân tán
Spark hỗ trợ thư viện cho một vài ngôn ngữ lập trình như R, Scala, Java, Python Với việc dùng Python để viết mã lệnh và chạy trên Google Colad nên thực
x
Att
hành với PySpark cho tiện, bởi nó cũng đã được tích hợp trên "Gu gồ" rồi
c Thuật toán K-means K-means là một thuật toán phân cụm đơn giản thuộc loại học không giám sát(tức là đữ liệu không có nhãn) và được sử dụng đề giải quyết bài toán phân cụm
Ý tưởng của thuật toán phân cụm k-means la phan chia 1 bộ dữ liệu thành các cụm khác nhau Trong đó số lượng cụm được cho trước là k Công việc phân cụm được xác lập dựa trên nguyên lý: Các điểm dữ liệu trong cùng 1 cụm thì phải có cùng 1
số tính chất nhất định Tức là giữa các điểm trong cùng 1 cụm phải có sự liên quan lẫn nhau Đối với máy tính thì các điểm trong 1 cụm đó sẽ là các điểm dữ liệu gần nhau
Thuật toán phân cụm k-means thường được sử dụng trong các ứng dụng cỗ máy tìm kiếm, phân đoạn khách hàng, thống kê dữ liệu,
Trang 11CHUONG 2 GIAI QUYET BAI TOAN
2.1 Sơ lược về bộ dữ liệu
A B c D E F 6 H woiceNo StockCode Description Quantity InvoiceDate UnitPrice CustomerID Country
536365 85123A WHITE HANGING H 6 01/12/2010 8:26 2.55 17850 United Kingdom
536365 71053 WHITE METAL LAN” 6 01/12/2010 8:26 3.39 17850 United Kingdom
536365 84406B CREAM CUPID HEAI 8 01/12/2010 8:26 2.75 17850 United Kingdom
536365 84029G KNITTED UNION FL 6 01/12/2010 8:26 3.39 17850 United Kingdom
536365 84029E RED WOOLLY HOTT 6 01/12/2010 8:26 3.39 17850 United Kingdom
536365 22752 SET 7 BABUSHKA N 2 01/12/2010 8:26 7.65 17850 United Kingdom
536365 21730 GLASS STAR FROST 6 01/12/2010 8:26 4.25 17850 United Kingdom
536266 22633 HAND WARMER US 6 01/12/2010 8:28 1.85 17850 United Kingdom
536366 22632 HAND WARMER RE 6 01/12/2010 8:28 1.85 17850 United Kingdom
536267 84879 ASSORTED COLOUF 32 01/12/2010 8:34 1.69 13047 United Kingdom
538367 22745 POPPY'S PLAYHOUS 6 01/12/2010 8:34 2.1 13047 United Kingdom
536367 22748 POPPY'S PLAYHOUS 6 01/12/2010 8:34 2.1 13047 United Kingdom
536367 22749 FELTCRAFT PRINCE 8 01/12/2010 8:34 3.75 13047 United Kingdom
536367 22310 IVORY KNITTED MU 6 01/12/2010 8:34 1.65 13047 United Kingdom
536367 84969 BOX OF 6 ASSORTE 6 01/12/2010 8:34 4.25 13047 United Kingdom
536367 22623 BOX OF VINTAGE JI 3 01/12/2010 8:34 4.95 13047 United Kingdom
536367 22622 BOX OF VINTAGE A 2 01/12/2010 8:34 3.95 13047 United Kingdom
536367 21754 HOME BUILDING BL 3 01/12/2010 8:34 5.95 13047 United Kingdom
536367 21755 LOVE BUILDING BLC 3 01/12/2010 8:34 5.95 13047 United Kingdom
536367 21777 RECIPE BOX WITH " 4 01/12/2010 8:34 7.95 13047 United Kingdom
536367 48187 DOORMAT NEW ER 4 01/12/2010 8:34 7.95 13047 United Kingdom
536368 22960 JAM MAKING SET V 6 01/12/2010 8:34 4.25 13047 United Kingdom
536368 22913 RED COAT RACK PA 3 01/12/2010 8:34 4.95 13047 United Kingdom
536368 22912 YELLOW COAT RAC 3 01/12/2010 8:34 4.95 13047 United Kingdom
536368 22914 BLUE COAT RACK P 3 01/12/2010 8:34 4.95 13047 United Kingdom
536369 21756 BATH BUILDING BLC 3 01/12/2010 8:35 5.95 13047 United Kingdom
536370 22728 ALARM CLOCK BAK 24 01/12/2010 8:45 3.75 12583 France
536370 22727 ALARM CLOCK BAK 24 01/12/2010 8:45 3.75 12583 France
536370 22726 ALARM CLOCK BAK 12 01/12/2010 8:45 3.75 12583 France
536370 21724 PANDA AND BUNN 12 01/12/2010 8:45 0.85 12583 France
536370 21883 STARS GIFT TAPE 24 01/12/2010 8:45 0.65 12583 France
536370 10002 INFLATABLE POLIT! 4ã 01/12/2010 8:45 0.85 12583 France
536370 21791 VINTAGE HEADS Ar 24 01/12/2010 8:45 1.25 12583 France
536370 21035 SET/2 RED RETROSE 18 01/12/2010 8:45 2.95 12583 France
536370 22326 ROUND SNACK BO) 24 01/12/2010 8:45 2.95 12583 France
536370 22629 SPACEBOY LUNCH E 24 01/12/2010 8:45 1.95 12583 France
536370 22659 LUNCH BOX I LOVE 24 01/12/2010 8:45 1.95 12583 France
536370 22631 CIRCUS PARADE LU 24 01/12/2010 8:45 1.95 12583 France
Hinh 1 Sơ lược đữ liệu Tập đữ liệu trên bao gồm các đơn đặt hàng được thực hiện ở các quốc gia khác nhau từ tháng 12 năm 2010 đến tháng 12 năm 2011 Trong đó:
® InvoiceNo: ID của đơn hàng, nếu ID bắt đầu bằng chữ "c" thế hiện đơn hàng đó bị hủy (Cancel)
¢ StockCode: Ma san pham
¢ Description: Tén san pham
¢ Quantity: S6 lvong san pham trén don dat hang
¢ InvoiceDate: Ngay va g10 khi đơn hàng được tạo
¢ UnitPrice: Giá sản phẩm trên mỗi don vi, tinh bang pound
® CustomerID: ID của khách hàng
Trang 12© Country: Quốc gia nơi khách hàng cư trú
df = pd.DataFrame(pd.read_csv
df head
Hình 2 Chuyên định dạng file đữ liệu bằng Python
Dé bat dau các thao tác dữ liệu với PySpark, chúng ta cần khởi tạo session với SparkSession Nó xây dựng một khung dữ liệu trong PysPark để chúng ta có thể sử dụng các chức năng của PysPark lên dữ liệu của mình
Hình 3 Khoi tao session voi SparkSession
Đọc dữ liệu trong file CSV vita convert bang PySpark
Hinh 4 Doc dit liéu CSV
Ngoài ra, còn có một số câu lệnh truy vấn khác như:
e© Đếm số lượng dòng của dữ liệu: df.count()
e - Đếm số lượng khách hàng: df.select('CustomerID').distinct().count()
® - Ngày có đơn hàng gần nhất: dfselect(max("date")).show()
e - Ngày đầu tiên có đơn hàng: d£select(min("date")).show()
Trang 132.3 Tiền xử lí dữ liệu
Có thể thấy trong file đữ liệu có tới 7 trường dữ liệu, không phải trường đữ liệu nào cùng có ích cho phân cụm, thậm chí còn có trường dữ liệu không dùng được
REM (bao gồm Recency (Tần suất mua hang gan day), Frequency (Tan suat mua hang), va Monetary (Giá trị đặt hàng)) là một phương pháp phân tích khách hàng được sử dụng rộng rãi trong lĩnh vực tiếp thị để đánh giá giá trị của khách
hàng dựa trên hành vi mua hang cua ho
¢ Recency: do thoi diém mà khách hàng đã mua hàng lần cuối Khách hàng mới mua hang gan đây được xem là có giá trị cao hơn so với khách hàng mua hàng lâu đến không mua hàng nữa
e Frequency: đo tần suất mà khách hàng mua hàng trong một khoảng thời gian nhất định Khách hàng mua hàng thường xuyên được xem là có giá trị hơn so với những khách hàng mua hảng ít lần
® Monetary: do giá trị đặt hàng của khách hàng Khách hàng đặt hang có gia tri cao hơn được xem là có giá trị cao hơn so với những khách hàng đặt hàng có giá trị thấp
a Recency Mục tiêu là tính toán ra một giá trị đại diện cho việc thời điểm khách hàng mua lần cuối so với 1 mốc 0 nhất định (ở đây ta chọn mốc 0 là thời gian đầu tiên có đơn hàng đã tính ra bên trên) Sau đó lấy thời gian gần nhất khách hàng đặt đơn trừ
đi mốc thời pian đó, ta sẽ có 1 giá trị dai dién cho Recency Gia tn nay cang lớn
chứng tỏ khách hảng cảng mua gần đây Việc tính toán này sẽ thông qua 1 số bước
Trang 14© Lấy giá trị thời gian mua của từng đơn hàng trừ đi om_ date, ta sẽ biết đơn hàng đo được đặt cách mốc thời gian 0 là bao nhiêu (theo đơn vị timestamp), giá trị sẽ được lưu tại cột 'recency!
„withColumn
Hình 6 Tìm gid tri c6t recency
® Moi khach hang c6 thé mua nhieu lân vào nhieu moc thời gian khác
nhau, chúng ta chỉ quan tâm lân cuôi cùng họ mua, vì vậy cân xử lý lại cột recency'
Hình 8 Tỉnh tần suất khách hàng mua món hàng nào đó
Lúc này frequency dataframe của ta chỉ có 2 cột đứng riêng lẻ, chúng ta sẽ nối
nó vào dataframe đang làm việc đề thông nhất, cũng như kiểm tra lại xem mình truy