Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 53 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
53
Dung lượng
2,03 MB
Nội dung
TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN KHAI PHÁ DỮ LIỆU LỚN XÂY DỰNG BÀI TOÁN KHAI PHÁ DỮ LIỆU KHÁCH HÀNG TẠI KHU TRUNG TÂM MUA SẮM Giảng viên hướng dẫn: Hồ Ngọc Trung Kiên Sinh viên thực hiện: Trang Gia Bảo MSSV: 2000002273 Khố: 2020 Ngành/ chun ngành: TRÍ TUỆ NHÂN TẠO Tp HCM, tháng năm 2022 i TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN KHAI PHÁ DỮ LIỆU LỚN XÂY DỰNG BÀI TOÁN KHAI PHÁ DỮ LIỆU KHÁCH HÀNG TẠI KHU TRUNG TÂM MUA SẮM Giảng viên hướng dẫn: Hồ Ngọc Trung Kiên Sinh viên thực : Trang Gia Bảo MSSV: 2000002273 Khố: 2020 Ngành/ chun ngành: TRÍ TUỆ NHÂN TẠO Tp HCM, tháng năm 2022 ii LỜI CẢM ƠN Trước hết, em xin chân thành cảm ơn thầy Hồ Ngọc Trung Kiên hỗ trợ, truyền tải cho chúng em kiến thức chất lượng, thiết thực môn Khai Phá Dữ Liệu Lớn mà thầy đảm nhận ba tháng vừa qua Em xin cảm ơn tất thầy, cô trường đại học Nguyễn Tất Thành hỗ trợ chúng em mặt, em trân trọng điều Cảm ơn ba mẹ, người xung quanh ủng hộ em, động viên em đường trưởng thành mình, vinh dự học tập tồn sống trải nghiệm thứ, trải qua bao khó khăn điều mà khơng phải em phải trân trọng Cảm ơn không đủ thứ xảy sống điều mà em muốn phải cố gắng để khơng phụ lịng người Em xin chân thành cảm ơn người lần Tp Hồ Chí Minh, tháng năm 2022 Sinh viên ký tên I BM-ChTTRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH KỲ THI KẾT THÚC HỌC11PHẦN TRUNG TÂM KHẢO THÍ HỌC KỲ NĂM HỌC 2022 PHIẾU CHẤM THI TIỂU LUẬN/ĐỒ ÁN Môn thi: KHAI PHÁ DỮ LIỆU LỚN Lớp học phần: 20DTH1C Nhóm sinh viên thực :Nhóm 20 Trang Gia Bảo 2000002273 20DTH1A Tham gia đóng góp:100% đồ án Tham gia đóng góp: Tham gia đóng góp: Tham gia đóng góp: Tham gia đóng góp: Tham gia đóng góp: Tham gia đóng góp: Tham gia đóng góp: Ngày thi: Phòng thi: Đề tài tiểu luận/báo cáo sinh viên : XÂY DỰNG BÀI TOÁN KHAI PHÁ DỮ LIỆU KHÁCH HÀNG TẠI KHU TRUNG TÂM MUA SẮM Phần đánh giá giảng viên (căn thang rubrics mơn học): Tiêu chí (theo CĐR HP) Cấu trúc báo cáo Nội dung - Các nội dung thành phần - Lập luận Điểm tối đa Đánh giá GV Điểm đạt - Kết luận Trình bày TỔNG ĐIỂM Giảng viên chấm thi (ký ghi rõ họ tên) II MỤC LỤC LỜI MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI 1.1 CƠ SỞ LÝ THUYẾT 1.1.1 Data Clustering 1.1.2 Các loại phương pháp gom cụm phổ biến 1.1.3 Các phương pháp đánh giá chất lượng gom cụm 1.1.4 THUẬT TOÁN K-MEANS DỰA TRÊN PHÂN HOẠCH 1.1.5 GIẢI THUẬT AGGLOMERATIVE DỰA TRÊN PHÂN CẤP 1.2 NỘI DUNG ĐỀ TÀI 1.2.1 Phân cụm khách hàng 1.3 MỤC TIÊU NGHIÊN CỨU 1.3.1 Nhu cầu đời sống 1.3.2 Lợi ích cho doanh nghiệp 1.4 ĐỐI TƯỢNG NGHIÊN CỨU 1.5 KẾT QUẢ MONG ĐỢI CHƯƠNG 2: BÀI BÁO LIÊN QUAN 2.1 TRONG NƯỚC 2.2 NGOÀI NƯỚC 2.3 TRONG VÀ NGOÀI NƯỚC 10 CHƯƠNG 3: MƠ HÌNH THỰC NGHIỆM 12 3.1 QUI TRÌNH GOM CỤM DỮ LIỆU 12 3.2 THU THẬP DỮ LIỆU 12 3.3 MƠ HÌNH THUẬT TOÁN K-MEANS 14 3.3.1 Ý tưởng 14 III 3.3.2 Mơ hình thuật tốn 15 3.3.3 Thuật toán 15 3.4 Cơng thức tốn học 16 3.5 THỰC NGHIỆM VỚI DỮ LIỆU MẪU 17 3.6 ỨNG DỤNG 20 3.7 ĐÁNH GIÁ KẾT QUẢ 40 CHƯƠNG 4: KẾT LUẬN 42 4.1 NHỮNG KIẾN THỨC ĐÃ TIẾP THU TỪ MÔN HỌC 42 4.2 HƯỚNG PHÁT TRIỂN 42 IV DANH MỤC BẢNG Bảng 2.1 Tập liệu báo nước Bảng 3.1 Thông tin khách hàng khu trung tâm mua sắm thu thập từ thi KAGGLE 13 Bảng 3.2 Bảng thực nghiệm với dịng từ liệu gốc chưa chuẩn hóa 17 Bảng 3.3 Vòng lặp thứ tính khoảng cách 18 Bảng 3.4 Vòng lặp phân cụm 18 Bảng 3.5 Vòng lặp thứ tính khoảng cách 19 Bảng 3.6 Vòng lặp phân cụm 19 Bảng 3.7 Vịng lặp thứ tính khoảng cách 20 Bảng 3.8 Vòng lặp phân cụm 20 Bảng 3.9 Tập liệu phân cụm 40 Bảng 3.10 Bảng so sánh thuật toán 40 V DANH MỤC HÌNH Hình 1.1 Phương pháp gom cụm liệu Hình 2.1 Bài báo nước phân cụm khách hàng Hình 2.2 Bài báo nước phân cụm khách hàng Hình 2.3 Bảng liệu báo nước Hình 2.4 Tìm số k cụm Elbow báo Hình 2.5 Tìm số k cụm hệ số Silhouette báo Hình 2.6 Bài báo cộng sinh phân cụm khách hàng 10 Hình 2.7 Kết phân cụm báo 11 Hình 3.1 Gom cụm liệu 12 Hình 3.2: Flow chart giải thuật K-means 15 Hình 3.3 bảng liệu 21 Hình 3.4 So sánh tỉ lệ (Male)nam , Female(nữ) thuộc tính Gender 22 Hình 3.5 Thơng tin Age, Annual Income (k$), Spending Score (1-100) 22 Hình 3.6 Hệ số tương quan 23 Hình 3.7 Số liệu thống kê 24 Hình 3.8 Số liệu thống kê 24 Hình 3.9 Sự phân bố liệu thuộc tính 25 Hình 3.10 Mối quan hệ Age, Annual Income (k$), Spending Score (1-100) 26 Hình 3.11 Độ xác thuật toán K-means với cụm 27 Hình 3.12 Tìm k cụm với phương pháp Elbow 29 Hình 3.13 Số cluster tâm cụm 30 Hình 3.14 Tìm k cụm với phương pháp Silhouette Coefficient 31 Hình 3.15 Độ xác thuật tốn cụm 31 Hình 3.16 Biểu diễn liệu phân cụm với k = 33 Hình 3.17 Phân bố liệu gom cụm 34 Hình 3.18 Danh sách điểm liệu mang thuộc tính CustomerID 35 Hình 3.19 Dự đốn số cụm thuộc dựa input 36 Hình 3.20 Tìm k với thư viện yellowbrick sử dụng phương pháp elbow 37 VI Hình 3.21 Cây phân cấp tập liệu với số 38 Hình 3.22 Mơ hình so sánh liệu với thuật tốn khác 39 VII KÍ HIỆU CÁC CỤM TỪ VIẾT TẮT Chữ viết tắt Ý nghĩa ETL Extract – Tranform - Load VIII Hình 3.12 Tìm k cụm với phương pháp Elbow Ta thấy từ điểm số cụm trở inertia gần khơng thay đổi hay cịn gọi hội tụ Sau xác định số k cụm, việc tiến hành xây dựng model thuật toán với số cụm 5: K_5 = KMeans(n_clusters=5, init='k-means++', n_init=20, max_iter=400, algorithm='lloyd', random_state=42) K_5.fit(X) result = K_5.labels_ print(result) print(K_5.cluster_centers_) Output: 29 Hình 3.13 Số cluster tâm cụm n_clusters: hàm truyền tham số cụm Mặc định init = ‘k-means++’: chọn trọng tâm cụm ban đầu cách sử dụng lấy mẫu dựa phân phối xác suất theo kinh nghiệm đóng góp điểm vào quán tính(inertia) tổng thể Kỹ thuật tăng tốc độ hội tụ n_init: Số lần thuật toán k-means chạy với centroid seed khác Kết cuối đầu tốt n_init lần chạy liên qn tính Mặc định 10 algorithm='lloyd': thuật tốn k-means sử dụng để giải tốn ngồi cịn có elkan max_iter: Số lần lặp tối đa thuật toán k-means cho lần chạy mặc định 300 random_state: cố định kết lần chạy thường người ta cho 0, 42 Nếu việc tìm k cụm với phương pháp Elbow khơng đáng tin cậy ta thêm hàm đánh giá chất lượng gom cụm nội với phương pháp Silhouette Score: S = metrics.silhouette_score(X, result, metric='euclidean') print(S) k_values = [] silhouette_score_values = [] for i in range(2, 11): kmeanss = KMeans(n_clusters=i) y_pred = kmeanss.fit_predict(X) k_values.append(i) 30 silhouette_score_values.append(metrics.silhouette_score(X, y_pred, metric='euclidean')) res = pd.DataFrame({'Giá trị k cụm': k_values, 'silhouette score': silhouette_score_values}) res.plot.line(x='Giá trị k cụm', y='silhouette score') plt.show() Output: Hình 3.14 Tìm k cụm với phương pháp Silhouette Coefficient Tương tự ta đánh giá chất lượng cụm rate2 = metrics.silhouette_score(X_std, results, metric='euclidean') print("Đánh giá theo phương pháp Silhouette Score với k=5: ", rate2) Output: Hình 3.15 Độ xác thuật tốn cụm Trực plt.figure(figsize=(10,8)) quan đồ thị gom cụm sử dụng thư viện matplotlib: plt.scatter(X_std[results == 0, 0], X_std[results == 0, 1], c = 'lightgreen', marker= 's', edgecolors='black', label='cluster 1') 31 plt.scatter(X_std[results == 1, 0], X_std[results == 1, 1], c = 'orange', marker= 'o', edgecolors='black', label='cluster 2') plt.scatter(X_std[results == 2, 0], X_std[results == 2, 1], c = 'lightblue', marker= 'v', edgecolors='black', label='cluster 3') plt.scatter(X_std[results == , 0], X_std[results == 3, 1], c = 'yellow', marker= 'd', edgecolors='black', label='cluster 4') plt.scatter(X_std[results == , 0], X_std[results == 4, 1], c = 'black', marker= 'x', label='cluster 5') plt.scatter(model.cluster_centers_[:,0], model.cluster_centers_[:,1], c = 'red', s=300, marker= '*', edgecolors='black', label='centroids') plt.xlabel('Spending Score (1-100)') plt.ylabel('Annual Income (k$)') plt.legend(scatterpoints=1) # Chú thích biểu đồ plt.grid() # Bỏ qua khung caro plt.show() print("[Trục X Trục Y]\n",kmean_5.cluster_centers_) Output: 32 Hình 3.16 Biểu diễn liệu phân cụm với k = Tạo tập liệu tương tự df = dataset[['CustomerID', 'Gender', 'Age', 'Annual Income (k$)', 'Spending Score (1100)']] print(df) Gán cụm phân cụm vào tập liệu df['Cluster'] = results data = df.to_csv('Results_Clustering_K-means.csv') Biểu diễn phân bố liệu dựa liệu tạo plt.figure(figsize=(10,6)) sns.scatterplot(x = 'Annual Income (k$)', y = 'Spending Score (1-100)', hue='Cluster', palette=['green', 'orange','brown','dodgerblue','red'], legend='full', data=df, s=60) plt.xlabel('Annual Income (k$)') plt.ylabel('Spending Score (1-100)') plt.title('Spending Score (1-100) vs Annual Income (k$)') plt.show() Output: 33 Hình 3.17 Phân bố liệu gom cụm Tạo danh sách tổng điểm cụm mã số khách hàng cụ thể cụm riêng lẻ C1 = df[df['Cluster']==0] print('Số lượng khách hàng cụm là: ', len(C1)) print('Mã số khách hàng lần lượt= ', C1['CustomerID'].values) print(' -') C2 = df[df['Cluster']==1] print('Số lượng khách hàng cụm là: ', len(C2)) print('Mã số khách hàng lần lượt= ', C2['CustomerID'].values) print(' -') C3 = df[df['Cluster']==2] print('Số lượng khách hàng cụm là: ', len(C3)) print('Mã số khách hàng lần lượt= ', C3['CustomerID'].values) print(' -') C4 = df[df['Cluster']==3] print('Số lượng khách hàng cụm là: ', len(C4)) print('Mã số khách hàng lần lượt= ', C4['CustomerID'].values) print(' -') 34 C5 = df[df['Cluster']==4] print('Số lượng khách hàng cụm là: ', len(C5)) print('Mã số khách hàng lần lượt= ', C5['CustomerID'].values) print(' -') Output: Hình 3.18 Danh sách điểm liệu mang thuộc tính CustomerID Để dự đốn kết cụm dựa input ta tạo hàm Predict_clusters def Predict_clusters(model, thunhap, diemso): arr = np.array([[thunhap, diemso]]) pred = model.predict(arr) if (diemso = -1 & thunhap =-2): return df[df['Cluster'] == pred[0]].sample(5) else: return print("Sai số liệu nhập!") Vì liệu tích chọn Annual Income Spending Score ta chuẩn hóa liệu nên giá trị khác nhiều với Annual Income - thunhap cao nhỏ -1 Spending Score - diemso cao nhỏ -2 Hàm trả dòng liệu đầu tương ứng với giá trị Annual Income với Spending Score 35 thunhap = 2, diemso = Predict_clusters(model, thunhap, diemso) Output: Hình 3.19 Dự đốn số cụm thuộc dựa input Trong đó: Cụm gồm khách hàng có mức thu nhập cao điểm tiêu thấp (high - low) Cụm gồm khách hàng có mức thu nhập trung bình điểm tiêu trung bình (normal - normal) Cụm gồm khách hàng có mức thu nhập cao điểm tiêu cao (high - high) Cụm gồm khách hàng có mức thu nhập thấp điểm tiêu cao (low - high) Cụm gồm khách hàng có mức thu nhập thấp điểm tiêu thấp (low - low) Để kết khả quan em thực việc so sánh thuật toán K-MEANS với thuật toán gom cụm khác dựa phân cấp Agglomerative Trước tiên ta phải cài đặt thư viện biểu diễn kết tìm số k cụm phương pháp elbow tương tự K-MEANS Vì sử dụng jupyter notebook visual code nên cách thức cài đặt thư viện có chút khác biệt !pip install yellowbrick 36 Thuật toán phân cụm đa phần dựa số k cụm để định kết gom cụm nên việc tiên toán ta phải xác định phương pháp nhiều để tìm số k cụm Trong tốn em sử dụng phương pháp cù trỏ (elbow) from sklearn.cluster import AgglomerativeClustering from yellowbrick.cluster import KElbowVisualizer model = AgglomerativeClustering() visualizer = KElbowVisualizer(model, k=(2,11), timings=False) visualizer.fit(X_std) _ = visualizer.show() Output: Hình 3.20 Tìm k với thư viện yellowbrick sử dụng phương pháp elbow Sau xác định số cụm tối ưu với điểm tin cậy 67% ta tiến hành ứng dụng giải thuật vào tập liệu trích chọn chuẩn hóa trước algorithms = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') k_5 = algorithms.fit(X_std) model2 = k_5.labels_ Affinity hàm tính khoảng cách cụm mặc định euclidean, linkage=’ward’ hàm tiêu chí liên kết xác định khoảng cách sử dụng nhóm quan sát Thuật toán hợp 37 cặp cụm tối thiểu hóa tiêu chí này, phương pháp ‘ward’ giảm thiểu phương sai cụm hợp Thuật toán ward linkage sử dụng điều kiện giả định quan sát nằm không gian euclidean Biểu diện phân cụm phân cấp import scipy.cluster.hierarchy as sch plt.figure(1, figsize = (16 ,8)) plt.grid(b=None) _ = dend = sch.dendrogram(sch.linkage(X_std, method='ward')) plt.axhline(y=8, linestyle=' ', color='orange') plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euclidean distances') plt.show() Output: Hình 3.21 Cây phân cấp tập liệu với số Cây cụm: phân cấp cụm thường tạo cụm hay gọi dendrogram Các biểu diễn đối tượng riêng lẻ Các nút biểu diễn cụm Lưu liệu lại thành dataset với thuộc tính thêm vào Clusters gom cụm sử dụng thuật toán Agglomerative dựa phân cấp 38 df2 = dataset[['CustomerID', 'Gender', 'Age', 'Annual Income (k$)', 'Spending Score (1100)']] df2['Clusters'] = model2 df2.to_csv('Results_Clustering_Aggolomerative.csv') Cuối ta biểu diễn so sánh tập liệu với thuật toán K-MEANS AGGLOMERATIVE với xem xét thay đổi fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5)) sns.scatterplot(ax=axes[0], data=df, x = 'Annual Income (k$)', y = 'Spending Score (1100)', hue='Cluster', legend='full', s=60, palette=['green','orange','brown','dodgerblue','red']).set_title('Phân cụm với k-means') sns.scatterplot(ax=axes[1], data=df2, x = 'Annual Income (k$)', y = 'Spending Score (1100)', hue='Clusters', legend='full', s=60, palette=['green','orange','brown','dodgerblue','red']).set_title('Phân cụm với Agglomerative') plt.show() Output: Hình 3.22 Mơ hình so sánh liệu với thuật tốn khác Có thể thấy thuật toán Agglomerative gom cụm liệu đạt chất lượng tốt Kmeans nhiều chưa phải giải thuật tốt để đánh giá Tập liệu lưu sau áp dụng thuật toán Agglomerativ 39 CustomerID Gender Age Spending Annual Income Score (k$) Clusters (1 – 100) 139 140 Female 35 74 72 140 141 Female 57 75 141 142 Male 32 75 93 142 143 Female 28 76 40 143 144 Female 32 76 87 144 145 Male 25 77 12 145 146 Male 28 77 97 146 147 Male 48 77 36 147 148 Female 32 77 74 148 149 Female 34 78 22 Bảng 3.9 Tập liệu phân cụm 3.7 ĐÁNH GIÁ KẾT QUẢ K-MEANS AGGLOMERATIVE Loại Phân hoạch Phân cấp Số k cụm cụm cụm Tính khoảng cách Euclidean Euclidean Độ phức tạp 𝑂((3𝑛𝑘𝑑 )𝑡𝑇𝑓𝑙𝑜𝑝) 𝑂((𝑛3 𝑘𝑑 )𝑡𝑇𝑓𝑙𝑜𝑝) Điểm tin cậy 55% 67% Bảng 3.10 Bảng so sánh thuật toán => Dựa liệu phân khúc khách hàng với hai thuộc tính Annual Income (k$) Spending Score (1-100) chuẩn hóa liệu dựa thống kê sử dụng hàm StandardScaler sklearn, thuật toán phân cụm dựa phân cấp Agglomerative cho kết gom cụm tối ưu chưa thể khẳng định thuật toán tối ưu Việc đòi hỏi ta phải kiên nhẫn thời gian để thử nghiệm nhiều phương pháp giải thuật phân cụm khác để đưa định cuối cho toán 40 LINK CODE MẪU: https://drive.google.com/drive/folders/1x2QZYF8fImh6hbYloTa81IUaXvG0YDh?usp=share_link 41 CHƯƠNG 4: KẾT LUẬN 4.1 NHỮNG KIẾN THỨC ĐÃ TIẾP THU TỪ MÔN HỌC Trong trình học hỏi nghiên cứu ứng dụng môn KHAI PHÁ DỮ LIỆU LỚN em tiếp thu phần kiến thức cần thiết cho tương lai sau này: * Hiểu qui trình khai phá tri thức cho liệu có giám sát khơng có giám sát * Biết cách thu thập, phân tích xử lý liệu thơ * Vận dụng tốn học để khai phá tri thức tìm ẩn liệu 4.2 HƯỚNG PHÁT TRIỂN - So sánh nhiều thuật toán phân cụm để đưa kết gom cụm tốt cho tập liệu - Tìm hiểu thêm phương pháp tính khoảng cách khác ngồi euclidean phương pháp đánh giá chất lượng gom cụm khác - Cải tiến chương trình chạy tảng website cho việc trực quan hóa kết phân cụm phân tích liệu để dễ dàng giám sát đánh giá 42 DANH MỤC TÀI LIỆU THAM KHẢO [1] Bùi Tiến Đức, Tác giả, Slide môn Khai Phá Dữ Liệu Và Ứng Dụng [Performance] Nguyễn Tất Thành university, 2022 [2] Đ T T Hiền, Tác giả, Cluster Analysis [Performance] Viện nghiên cứu cao cấp Toán (VIASM), 2015 [3] Hồ Ngọc Trung Kiên, Tác giả, Slide môn Khai Phá Dữ Liệu Lớn [Performance] Nguyễn Tất Thành university, 2022 [4] Ankita Banerji, "K-Mean: Getting The Optimal Number Of Clusters," Analytics Vidhya, 18 May 2021 [Online] Available: https://www.analyticsvidhya.com/blog/2021/05/k-mean-getting-the-optimalnumber-of-clusters/ [Accessed 30th November 2022] [5] Prateek Majumder, "K-Means clustering with Mall Customer Segmentation Data," Analytics Vidhya, 25 May 2021 [Online] Available: https://www.analyticsvidhya.com/blog/2021/05/k-means-clustering-with-mallcustomer-segmentation-data-full-detailed-code-and-explanation/ [Accessed 25 May 2021] [6] V H Tiep, "K-means Clustering," machinelearningcoban, 01 January 2017 [Online] Available: https://machinelearningcoban.com/2017/01/01/kmeans/#ham-mat-mat-va-baitoan-toi-uu [Accessed 01 January 2017] [7] Nguyen Thi Hop, "Hierarchical clustering - Phân cụm liệu," Viblo, 18 02 2020 [Online] Available: https://viblo.asia/p/hierarchical-clustering-phancum-du-lieu-maGK7q2elj2 [Accessed 18 02 2020] 43