MỤC LỤC MỤC LỤC HÌNH ẢNH MỤC LỤC BẢNG MỞ ĐẦU ...................................................................................................... 1 CHƯƠNG 1 : GIỚI THIỆU CHUNG....................................................... 2 1.1 Mục tiêu của đề tài................................................................................ 2 1.2 Phạm vi và giới hạn của đề tài ............................................................. 2 1.3 Cấu trúc.................................................................................................. 2 CHƯƠNG 2: TỔNG QUAN VỀ THƯ VIỆN SCIKIT – LEARN.......... 4 2.1 Giới thiệu Scikit-learn .......................................................................... 4 2.2 Cấu trúc và các module chính của Scikit-learn ................................. 5 2.2.1 Cấu trúc của Scikit-learn .................................................................. 5 2.2.2 Tiền xử lý dữ liệu bằng Scikit-Learn................................................ 8 2.3 Thuật toán máy học phổ biến trong Scikit-learn............................. 12 2.3.1 Decision Tree thuật toán phân lớp (classification)......................... 12 2.3.2 K – Means thuật toán phân cụm (clustering) ................................. 13 2.4 Mô hình học máy phổ biến................................................................. 15 2.4.1 Linear Regression ........................................................................... 15 2.4.2 Decision Tree Regressor................................................................. 17 CHƯƠNG 3: PHÂN TÍCH DỮ LIỆU CỦA WALMART.................... 20 3.1 Giới thiệu về Walmart........................................................................ 20 3.1.1 Walmart .......................................................................................... 20 3.1.2 Bộ dữ liệu Walmart ........................................................................ 22 3.2 Data Pre-processing ........................................................................... 23 3.3 Phân tích và khám phá dữ liệu từ tập dữ liệu Walmart ................. 26 3.3.1 Phân tích doanh số bán hàng hàng tuần theo các yếu tố ................ 26 3.3.2 Phân tích doanh số theo các yếu tố thời gian ................................ 31 3.4 Xây dựng mô hình dự đoán doanh thu Walmart ............................ 35 3.4.1 Data Standardization và data splitting............................................ 35 3.4.2 Mô hình dự đoán doanh thu............................................................ 36 CHƯƠNG 4: XÂY ỨNG DỤNG WEB SỬ DỤNG FLASK ................. 43 4.1 Giới thiệu về Flask .............................................................................. 43 4.1.1 Flask................................................................................................ 43 4.1.2 Khởi tạo ứng dụng Flask ................................................................ 44 4.2 Xây dựng ứng dụng web..................................................................... 48 4.2.1. Triển khai mô hình ML lên ứng dụng web.................................... 48 4.3 Thách thức ........................................................................................... 51 4.4 Kết luận................................................................................................ 52 TÀI LIỆU THAM KHẢO........................................................................ 53
GIỚI THIỆU CHUNG
Mục tiêu của đề tài
Nghiên cứu và triển khai các thuật toán máy học phổ biến bằng cách sử dụng thư viện Scikit-learn Bài tập trung vào việc áp dụng các thuật toán học máy cho bài toán dự đoán doanh số bán hàng của các cửa hàng Walmart từ đó xây dựng 1 ứng dụng web dự đoán nhanh doanh thu
Phạm vi và giới hạn của đề tài
Nghiên cứu thư viện Sklearn để triển khai các thuật toán máy học phổ biến, bao gồm các thuật toán classification, clustering và các mô hình học máy khác
Dữ liệu sử dụng trong nghiên cứu là tập dữ liệu Walmart Store Sales Prediction được cung cấp bởi M Yasser H trên Kaggle có chứa thông tin về doanh số bán hàng của các cửa hàng Walmart với các biến số như doanh thu, ngày và các thông tin liên quan khác Quá trình nghiên cứu sẽ bao gồm việc tiền xử lý dữ liệu và áp dụng các kỹ thuật khám phá dữ để hiểu rõ dữ liệu Bên cạnh đó xây dựng các mô hình dự đoán doanh thu của Walmart bằng cách sử dụng các thuật toán học máy đã được nghiên cứu từ Sklearn Cuối cùng, xây một ứng dụng web đơn giản sử dụng Flask dự báo doanh thu từ các mô hình học máy đã được huấn luyện
• Phạm vi dữ liệu: Giới hạn của nghiên cứu bao gồm việc chỉ sử dụng tập dữ liệu Walmart Store Sales Prediction từ Kaggle
• Công cụ và môi trường phát triển: Google Colab và VS Code
• Ứng dụng web: Xây ứng dụng web được phát triển chỉ là một phiên bản đơn giản, chủ yếu phục vụ cho mục đích minh họa và thử nghiệm chứ không phải là một sản phẩm hoàn chỉnh
Cấu trúc
3 Chương 2: Tổng quan về thư viện Scikit-learn Chương 3: Phân tích và khám phá dữ liệu Walmart Chương 4: Xây ứng dụng web sử dụng Flask
TỔNG QUAN VỀ THƯ VIỆN SCIKIT – LEARN
Giới thiệu Scikit-learn
Scikit-learn phát triển lần đầu tiên vào năm 2007 bởi người khởi xướng dự án David Cournapeau trong khuôn khổ dự án Google Summer of Code Từ đó, Scikit-learn đã không ngừng phát triển để trở thành một trong những thư viện học máy phổ biến nhất trong cộng đồng khoa học dữ liệu và học máy
Scikit-learn gọi tắt là sklearn là một thư viện mã nguồn mở dành cho machine learning trong ngôn ngữ lập trình Python Thư viện sở hữu một tập các công cụ xử lý các bài toán machine learning và statistical modeling bao gồm: classification, regression, clustering, và dimensionality reduction Scikit-learn được xây dựng dựa trên thư viện NumPy, SciPy và Matplotlib sự kết hợp này tạo ra một hệ sinh thái hoàn chỉnh cho các nhà khoa học dữ liệu và các kỹ sư học máy từ khâu tiền xử lý dữ liệu đến trực quan hóa đến triển khai mô hình
Scikit-learn có nhiều ưu điểm quan trọng cho các doanh nghiệp và thị trường, nhất là khi sử dụng dữ liệu để đưa ra các quyết định chiến lược Scikit-learn mang lại hỗ trợ cho doanh nghiệp không chỉ trong việc dự báo doanh thu, phân tích hành vi khách hàng và quản lý rủi ro tài chính mà còn giúp tối ưu hoá các hoạt động sản xuất Scikit-learn giúp tăng cường khả năng cạnh tranh, tiến bộ chất lượng sản phẩm và đồng thời khuyến khích sự đổi mới sáng tạo thông qua việc phân tích dữ liệu Tổng quát, Scikit-learn có một vai trò then chốt trong việc tinh chỉnh hoạt động kinh doanh, quản lý rủi ro và tăng cường khả năng cạnh tranh
Hình 2.1: Sklearn algorithm cheat sheet
Cấu trúc và các module chính của Scikit-learn
2.2.1 Cấu trúc của Scikit-learn
Cấu trúc chính của Scikit-learn có thể được chia thành ba thành phần chính: Estimators, Transformers, Predictors a Estimators
Trong Scikit-learn, Estimators là các đối tượng cốt lõi được sử dụng để train và predict từ data Mỗi thuật toán học máy và công cụ tiền xử lý trong
Scikit-learn được triển khai dưới dạng một Estimator tuân theo một giao diện nhất quán, cung cấp các phương thức tiêu chuẩn để huấn luyện mô hình và thực hiện dự đoán
Phương thức chính của Estimators:
Hình 2.2: Phương thức chính của Estimators b Transformers
Transformers là các estimators có khả năng biến đổi tập dữ liệu Chúng thường được sử dụng để tiền xử lý dữ liệu trước khi áp dụng các mô hình học máy Các transformers thường gặp bao gồm:
Chuẩn hóa dữ liệu (Normalization) về cùng một thang đo, giúp cải thiện hiệu suất của các thuật toán học máy
StandardScaler trong module preprocessing dùng để chuẩn hóa dữ liệu về phân phối chuẩn với trung bình 0 và phương sai 1
Mã hóa dữ liệu (Encoding) biến đổi dữ liệu phân loại thành các số liệu
LabelEncoder dùng để biến đổi các nhãn phân loại thành các giá trị số
Reduction) của dữ liệu để giảm bớt độ phức tạp tính toán
PCA là một phương pháp giảm số chiều phổ biến
Phương thức chính của Transformers:
Hình 2.3: Phương thức chính của Transformers c Predictors
Dự đoán kết quả dựa trên các mô hình đã được huấn luyện Các predictors bao gồm các thuật toán học máy cho cả phân loại (classification) và hồi quy (regression)
Bảng 2.2: Predictors cho phân loại nhị phân hoặc đa lớp & Predictors cho hồi quy (dự đoán giá trị liên tục)
Thuật toán Khi nào sử dụng
Khi dữ liệu có mối quan hệ tuyến tính giữa các đặc trưng và kết quả đầu ra
Khi cần một mô hình dễ hiểu và có thể trực quan hóa
Khi muốn tăng độ chính xác và giảm overfitting
Khi dữ liệu có biên phân loại rõ ràng và muốn tối đa hóa khoảng cách giữa các lớp
Dự đoán doanh thu : Walmart muốn biết doanh thu sẽ thế nào trong tương lai dựa trên số lượng khách ngày trong tuần
+ Doanh thu tăng đều khi khách hàng đông dùng Linear Regression để vẽ ra một đường thẳng thể hiện mối quan hệ
+ Nếu muốn dễ hình dung dùng Decision Tree Regressor để chia nhỏ các yếu tố là khách đông vào cuối tuần thành từng nhánh hiện trực quan yếu tố nào ảnh hưởng đến doanh thu nhất
Phân loại ngày bán hàng cao điểm: Walmart cũng muốn biết ngày nào thì bán đắt như tôm tươi để chuẩn bị hàng hóa, nhân viên,
+ Bài toán dùng Logistic Regression chia ngày thành hai nhóm: cao điểm và không cao điểm dựa trên những đặc điểm (ví dụ: ngày lễ, khuyến mãi) + Nếu chính xác hơn sử dụng Random Forest Classifier, nó cũng dùng nhiều cây quyết định nhưng lần này là để phân loại ngày thay vì dự đoán doanh thu
Hình 2.4: Phương thức chính của Predictors
2.2.2 Tiền xử lý dữ liệu bằng Scikit-Learn
9 Tiền xử lý dữ liệu là công đoạn vàng không thể thiếu trong Machine Learning dữ liệu là một phần rất quan trọng, ảnh hưởng trực tiếp tới việc Training Model Do vậy, tiền xử lý dữ liệu trước khi đưa nó vào model là rất quan trọng giúp xử lý giá trị thiếu, mã hóa biến phân loại và chia dữ liệu thành các tập huấn luyện và kiểm tra a Handling Missing Values & Encoding Categorical Variables
• Handling Missing Values sử dụng SimpleImputer: Thay thế các giá trị thiếu trong các cột bằng giá trị trung bình của cột đó from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_value= np.nan, strategy='mean') transformed_data = imputer.fit_transform(data)
• Encoding Categorical Variables sử dụng OneHotEncoder: Mã hóa cột thành các vector nhị phân from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder() transformed_data = encoder.fit_transform(data).toarray()
Từ dạng string thành vector dạng số học viết vào mô hình máy học có thể hiểu được xây dựng dựa trên những con số b Tách dữ liệu (dataset) thành training và test sets
10 Tập dữ liệu kiểm thử (testing set) độc lập đối với tập dữ liệu huấn luyện (training set) để đánh giá và ước lượng hiệu quả của mô hình Kỹ thuật này được sử dụng rộng rãi trong các ứng dụng học máy và khai thác dữ liệu from sklearn.model_selection import train_test_split
Tập huấn luyện (training set) là tập dữ liệu được sử dụng để huấn luyện mô hình Các thuật toán học máy sẽ xây dựng các mô hình từ tập huấn luyện này Thực tế, huấn luyện thường bao gồm các cặp vectơ đầu vào và vectơ đầu ra tương ứng, trong đó vector đầu ra thường gọi là nhãn (label hoặc target) Các thuật toán sẽ tìm cách tối ưu sai số dự đoán trên tập huấn luyện này đến mức đủ tốt Trong trường hợp overfitting sai số dự đoán trên tập huấn luyện có thể thấp, thậm chí có thể đạt đến mức 0%
Testing Set (Tập kiểm thử) vấn đề này chưa đủ vì mục tiêu của machine learning là xây dựng những mô hình có khả năng tổng quát hóa để dự đoán chính xác trên cả dữ liệu chưa thấy (nằm ngoài tập huấn luyện) để biết một thuật toán hay mô hình có thực sự tốt hay không, sau khi được huấn luyện cần được đánh giá hiệu quả thông qua bộ dữ liệu kiểm thử (testing set) Bộ dữ liệu này được sử dụng để tính độ chính xác hoặc sai số của mô hình dự đoán đã được huấn luyện Chúng ta biết nhãn thực của tất cả điểm trong tập hợp dữ liệu kiểm thử này, nhưng sẽ tạm thời giả vờ như không biết và đưa các giá trị đầu vào của tập vào mô hình dự đoán để nhận kết quả dự đoán đầu ra Sau đó nhìn vào các nhãn thực và so sánh nó với kết quả dự đoán của các đầu vào tương ứng này và xem liệu mô hình có dự đoán đúng hay không Tính tổng trung bình của tất cả sai số này có thể tính toán được lỗi dự đoán trên tập kiểm thử
Tập dữ liệu kiểm thử tốt là một tập dữ liệu độc lập với tập dữ liệu huấn luyện (để ngoài và không được tham gia vào quá trình huấn luyện) nhưng tuân theo cùng một phân phối xác suất như tập dữ liệu huấn luyện nhờ đó việc đánh giá không bị thiên vị
11 Tập dữ liệu nên được chia :
• Tỷ lệ chia phổ biến là 80-20 hoặc 70-30 c Đặc trưng hóa (Feature Scaling)
Feature Scaling (FS) là quá trình đưa tất cả feature về cùng một thang đo để ngăn chặn một đặc trưng nào đó chiếm ưu thế và các đặc trưng khác bị bỏ qua bởi mô hình học máy from sklearn.preprocessing import StandardScaler sc = StandardScaler()
* FS không cần phải áp dụng mọi lúc cho tất cả các mô hình học máy (như các mô hình hồi quy bội - Multi-Regression Models)
* Tại sao không cần FS cho Multi-Regression Models? Công thức của mô hình hồi quy bội là: y = b0 + b1 * x1 + b2 * x2 + b3 * x3 Do chúng ta có các hệ số (coefficients) (b0, b1, b2, b3) để bù đắp nên không cần FS
* Đối với các biến giả từ Categorical Features Encoding => không cần áp dụng FS
* FS phải được thực hiện sau khi chia tập dữ liệu thành tập huấn luyện và tập kiểm tra
• Tập kiểm tra phải được xem như một tập dữ liệu hoàn toàn mới không được làm việc chung với tập huấn luyện
• FS là kỹ thuật để lấy giá trị mean và median của các đặc trưng nhằm chuẩn hóa
Thuật toán máy học phổ biến trong Scikit-learn
2.3.1 Decision Tree thuật toán phân lớp (classification)
Phân lớp là một nhiệm vụ yêu cầu sử dụng các thuật toán học máy để học cách gán nhãn lớp cho các mẫu Một ví dụ dễ hiểu đó là phân loại khách hàng của Walmart thành hai nhóm: “có thể mua hàng” và “không” có khả năng mua hàng”
Cây quyết định (Decision Tree) là một thuật toán học máy thuộc nhóm học có giám sát (supervised learning) Trong classification, thuật toán này được sử dụng để phân loại các đối tượng vào các lớp khác nhau dựa trên features của chúng from sklearn.tree import DecisionTreeClassifier
Cây quyết định xây dựng một mô hình dựa trên cấu trúc cây để đưa ra quyết định phân loại Mỗi nút trong cây biểu diễn một đặc trưng của dữ liệu, mỗi cạnh (branch) biểu diễn một giá trị của đặc trưng đó và mỗi lá (leaf) biểu diễn một lớp hoặc một giá trị dự đoán
Hình 2.5: Phân loại tuần lễ Decision Tree
Các bước xây dựng cây quyết định:
Chọn đặc trưng: Tại mỗi nút, cây quyết định xem xét đặc trưng tốt nhất để phân chia dữ liệu Đặc trưng tốt nhất là đặc trưng mà khi chia, dữ liệu được phân loại tốt nhất theo tiêu chí nhất định như thông tin thu được (information gain), chỉ số Gini (Gini index), giảm tạp chất (impurity reduction)
Phân chia dữ liệu: Dữ liệu tại mỗi nút được phân chia dựa trên giá trị của đặc trưng được chọn Mỗi giá trị hoặc khoảng giá trị của đặc trưng tạo thành một nhánh con của cây
Lặp lại quá trình: Quá trình chọn đặc trưng tốt nhất và phân chia dữ liệu được lặp lại đệ quy cho mỗi nhánh con cho đến khi đạt điều kiện dừng Điều kiện dừng có thể là khi tất cả dữ liệu tại một nút thuộc cùng một lớp hoặc khi không còn đặc trưng nào để phân chia
2.3.2 K – Means thuật toán phân cụm (clustering)
14 Thuật toán phân cụm là một kỹ thuật trong học máy và khai phá dữ liệu được sử dụng để nhóm các đối tượng vào các cụm (clusters) sao cho các đối tượng trong cùng một cụm có nhiều đặc điểm giống nhau hơn so với các đối tượng trong các cụm khác
Phân cụm K – Means là thuật toán để gom dữ liệu thành k cụm khác nhau mà các điểm trong cụm tương đồng lẫn nhau from sklearn.cluster import KMeans
Các bước bao gồm sáu bước để thực hiện thuật toán phân cụm k-means như sau:
B1: Xác định số lượng ‘k’ của các cụm cần phân công
B2: Chọn ngẫu nhiên ‘k’ tập dữ liệu để ‘k’ điểm trung tâm
B4: Expectation: Gán mỗi điểm còn lại vào cụm dựa vào khoảng cách giữa điểm đó đến tâm cụm gần nhất
B5: Maximization: Tính toán tâm cụm mới (trung bình) của mỗi cụm B6: Cho đến khi vị trí của các tâm cụm không thay đổi
Hình 2.6: Minh họa K-Means để phân cụm dữ liệu khách hàng của
Phương pháp Elbow thu được một đồ thị với trục x là số lượng cụm (k) và trục y là tổng bình phương khoảng cách từ các điểm dữ liệu đến trọng tâm của các cụm (WCSS) Đồ thị này thường sẽ có dạng một “cánh tay” với giá trị của WCSS giảm dần khi k tăng nhưng tốc độ giảm bớt đi đột ngột tại một số giá trị của k Điểm mà tốc độ giảm bớt đi đột ngột này thường được gọi là “khuỷu tay” Số lượng cụm được chọn thường là giá trị của k tại điểm khuỷu tay
Phương pháp Silhouette tính toán điểm số Silhouette cho mỗi giá trị của k Điểm số Silhouette đo lường mức độ “đồng thuận” của mỗi điểm dữ liệu với cụm của nó so với các cụm khác Giá trị của Silhouette score dao động từ -1 đến 1, giá trị gần 1 cho thấy một phân cụm tốt, trong khi giá trị gần -1 cho thấy một phân cụm không tốt bằng cách chọn giá trị của k mà có Silhouette score cao nhất có thể chọn ra số lượng cụm tối ưu cho dữ liệu của mình Kết quả của quá trình là số lượng cụm tối ưu có thể sử dụng để phân cụm dữ liệu một cách hiệu quả nhất.
Mô hình học máy phổ biến
Hồi quy tuyến tính trong học máy là một thuật toán học có giám sát với đầu ra là giá trị liên tục và có hệ số góc là hằng số Thuật toán này được sử dụng để dự đoán các giá trị trong một khoảng liên tục ví dụ như doanh thu bán hàng thay vì học cách phân loại thành các danh mục riêng biệt ví dụ như khách hàng mới hay cũ Hồi quy tuyến tính dự báo giá trị của biến output từ các giá trị của các biến đầu vào
Phân loại hồi quy tuyến tính thành hai loại chính:
• Hồi quy tuyến tính đơn biến (Simple regression)
Sử dụng dạng đường chéo cơ bản, với m và b là những biến số trong thuật toán mà sẽ cố gắng “học” để dự đoán đầu ra một cách chính xác nhất có thể, 𝑥 ký hiệu dữ liệu đầu vào và 𝑦 ký hiệu cho dự đoán ở đầu ra y = mx + b
• Hồi quy tuyến tính đa biến (Multivariable regression)
Phức tạp hơn, trong đó w ký hiệu các hệ số hay trọng số (weight) mà mô hình cần học f(x,y,z) = w 1 x + w 2 y + w 3 z
Các biến số x,y,z ký hiệu các thuộc tính hay những số liệu riêng biệt mà có tại mỗi quan sát (observation) Ví dụ để dự đoán doanh thu các thuộc tính này có thể là số tiền mà công ty đầu tư vào quảng cáo lần lượt trên TikTok,
Doanh thu = w 1 TikTok + w 2 TV + w 3 News
Sử dụng thư viện scikit-learn dự đoán hồi quy tuyến tính thay vì tự tính theo công thức nên khai triển vì các thuật toán trong thư viện scikit-learn đã được đánh giá kĩ càng bởi các chuyên gia và được tối ưu về mặt tốc độ
Hình 2.7: Hồi quy tuyến tính sử dụng thư viện scikit-learn
17 Ưu điểm: Dễ triển khai và hiệu quả khi huấn luyện
Có thể giảm overfitting bằng cách điều chỉnh
Nhược điểm: Giả định rằng dữ liệu là độc lập, điều này hiếm khi xảy ra trong thực tế Dễ bị ảnh hưởng bởi nhiễu và overfitting đến kết quả Nhạy cảm với ngoại lệ
Decision Tree Regressor là một thuật toán học máy được sử dụng cho các bài toán hồi quy để dự báo các giá trị liên tục Thuật toán này dùng cấu trúc cây để chia dữ liệu thành các tập con nhỏ hơn dựa trên các thuộc tính của dữ liệu Mỗi nút trong cây quyết định một điều kiện dựa trên một thuộc tính nào đó và quá trình này tiếp tục cho đến khi đạt đến nút lá nơi giá trị dự báo được tính toán Decision Tree Regressor hoạt động bằng cách chia không gian đầu vào thành các vùng đồng nhất nhất có thể Mỗi lần chia không gian là một split và các vùng kết quả là leaves Mục tiêu của quá trình này là tạo ra một cấu trúc cây sao cho tại mỗi node, dữ liệu được chia thành các nhóm sao cho sai số dự đoán trong các nhóm là nhỏ nhất
Quá trình xây dựng cây quyết định
+ Chọn Split tốt nhất: Tại mỗi node của cây, thuật toán sẽ xem xét tất cả các thuộc tính và tất cả các giá trị có thể của các thuộc tính đó để tìm ra split tốt nhất Split tốt nhất là split mà sau khi chia, tổng sai số dự đoán trong các nhóm là nhỏ nhất Công thức Mean Squared Error sau:
18 n là số lượng mẫu trong tập dữ liệu yi là giá trị thực tế của mẫu thứ i y^i là giá trị dự đoán của mẫu thứ i
MSE đo lường độ lớn của sai số bình phương giữa giá trị dự đoán và giá trị thực Split tốt nhất là split mà sau khi chia MSE giảm đi nhiều nhất Điều này đảm bảo rằng mô hình sẽ tối ưu hóa việc dự đoán bằng cách chia dữ liệu sao cho sai số dự đoán trong mỗi nhóm nhỏ nhất
+ Tạo node con: Sau khi chọn split tốt nhất, dữ liệu được chia thành hai nhóm dựa trên giá trị của split Quá trình này được lặp lại đệ quy cho từng nhóm con, tạo ra các node con mới từ mỗi nhóm Mỗi node con sẽ tiếp tục chia dữ liệu cho đến khi đạt đến điều kiện dừng
+ Dừng chia nhánh: Quá trình chia nhánh dừng lại khi đạt đến điều kiện dừng Điều kiện dừng có thể là số lượng mẫu trong node con nhỏ hơn một ngưỡng nhất định, chiều cao của cây đạt đến giới hạn hoặc không còn split nào cải thiện sai số dự đoán Để tối ưu hóa mô hình Decision Tree Regressor một số tham số quan trọng cần điều chỉnh:
• criterion: Tiêu chí để đo lường chất lượng của split Mặc định là “mse” Ngoài ra, có thể sử dụng “friedman_mse” hoặc “mae” tùy thuộc vào bài toán cụ thể
• splitter: Chiến lược để chọn split Có thể là “best” (chọn split tốt nhất) hoặc “random” (chọn split ngẫu nhiên trong số các split tốt nhất)
• max_depth: Độ sâu tối đa của cây giới hạn độ sâu giúp tránh overfitting bằng cách hạn chế sự phức tạp của mô hình
• min_samples_split: Số lượng mẫu tối thiểu cần thiết để split một node tham số này giúp kiểm soát sự chia nhỏ quá mức của cây
• min_samples_leaf: Số lượng mẫu tối thiểu trong một node lá giúp tránh việc tạo ra các node lá quá nhỏ
• max_features: Số lượng thuộc tính tối đa được xem xét khi tìm split tốt nhất giảm tính ngẫu nhiên và cải thiện hiệu suất của mô hình
• random_state: Điều khiển tính ngẫu nhiên của thuật toán Thiết lập giá trị này giúp tái tạo kết quả trong các lần chạy khác nhau
Decision Tree Regressor Ưu điểm:
Cấu trúc cây quyết định dễ hiểu và dễ giải thích Mỗi nút trong cây đại diện cho một quyết định dựa trên một tiêu chí (ví dụ: nếu giá trị của thuộc tính a lớn hơn x thì đi sang nút con bên phải, ngược lại đi sang bên trái) Do đó, kết quả dự đoán có thể được dẫn đến từ một loạt các quyết định dựa trên các tiêu chí
Không yêu cầu chuẩn hóa dữ liệu hoặc biến đổi phức tạp
Xử lý tốt dữ liệu chứa cả biến số và biến phân loại mà không cần chuyển đổi
Cây quyết định có xu hướng overfit nếu không được kiểm soát tốt
Mô hình có thể hoạt động rất tốt trên dữ liệu huấn luyện nhưng kém trên dữ liệu kiểm tra
Sự thay đổi nhỏ trong dữ liệu có thể dẫn đến sự thay đổi lớn trong cấu trúc cây giảm tính ổn định và độ tin cậy của mô hình
Với dữ liệu rất lớn và phức tạp Decision Tree Regressor không hoạt động hiệu quả bằng các phương pháp khác như Random Forest hoặc Gradient Boosting
PHÂN TÍCH DỮ LIỆU CỦA WALMART
Giới thiệu về Walmart
Walmart là một trong những tập đoàn bán lẻ lớn nhất thế giới được thành lập vào năm 1962 tại trụ sở chính tại Bentonville, Arkansas, Hoa Kỳ Tập đoàn này nổi tiếng với chiến lược kinh doanh “Everyday Low Prices”, nhằm cung cấp giá trị tốt nhất cho khách hàng Mục tiêu của Walmart là cung cấp các sản phẩm chất lượng với giá cả phải chăng, phục vụ nhu cầu mua sắm của hàng triệu khách hàng mỗi ngày
Gã khổng lồ bán lẻ với 3 trụ cột quan trọng:
+ Walmart US : “ con gà đẻ trứng vàng” tập chung cửa hàng bán lẻ truyền thống chiếm 64% doanh thu
+ Walmart International: Góp phần 24% doanh thu là nhánh kinh doanh quốc tế
+ Sam's Club: là chuỗi cửa hàng bán lẻ theo mô hình khô cung cấp sản phẩm với số lượng lớn và giá ưu đãi cho các thành viên đăng kí chiếm 12% doanh thu Để hiểu rõ hơn về tình hình kinh doanh hiện tại của Walmart chúng ta đi sâu vào xem xét biểu đồ doanh thu qua các quý cung cấp cái nhìn tổng quan về xu hướng doanh thu
Hình 3.1: Báo cáo doanh thu hàng quý của Walmart từ Trading View
Nhìn vào dữ liệu trong 8 quý vừa qua, doanh thu có xu hướng tăng trưởng mức tăng trung bình khoảng 2% thể hiện sự ổn định và hiệu quả trong chiến lược kinh doanh của Walmart Đặc biệt doanh thu bùng nổ vào quý 4 hàng năm trùng với mùa mua sắm Giáng sinh là mùa vàng ngành bán lẻ, khách hàng sẵn sàng chi tiêu dịp lễ quan trọng Walmart biết tận dụng tung ra chương trình “12 Days of Christmas Deals” hấp dẫn thúc đẩy doanh thu Sau đợt mua sắm nhộn nhịp dịp lễ Giáng sinh, hoạt động mua sắm tại Walmart thường có xu hướng bình ổn trở lại vào quý 1
Dựa trên các số liệu dự đoán, doanh thu của Walmart dự kiến sẽ tiếp tục đà tăng trưởng trong năm 2024 và 2025 khoảng 1% Mặc dù tốc độ tăng trưởng này có phần khiêm tốn hơn so với quá khứ nhưng nó vẫn thể hiện kỳ vọng tích cực về tiềm năng phát triển và khả năng duy trì vị thế của Walmart trong bối cảnh thị trường bán lẻ ngày càng cạnh tranh gay gắt Walmart liên tục vượt qua dự đoán doanh thu kết quả cho thấy doanh thu thực tế thường cao hơn so với ước tính thể hiện khả năng vượt qua kỳ vọng của Walmart Ví dụ điển hình vào quý 4 năm 2022, doanh thu báo cáo đạt 164,05 tỷ USD vượt qua ước tính 159,76 tỷ USD ghi nhận mức tăng 2,68% Sự vượt trội này không chỉ củng cố niềm tin của các nhà đầu tư mà còn khẳng định vị thế vững chắc của Walmart trên thị trường bán lẻ toàn cầu
22 Nghiên cứu của tôi sử dụng bộ dữ liệu Walmart Dataset - Walmart Store Sales Prediction - Regression Problem của M Yasser H được lấy từ Kaggle để phân tích và dự đoán doanh thu của Walmart Mặc dù bộ dữ liệu này không phải là dữ liệu mới nhất và có thể không phản ánh chính xác tình hình hiện tại của công ty nhưng nó vẫn cung cấp những thông tin cơ bản kèm các mô hình dự đoán được xây dựng từ nó vẫn có giá trị tham khảo Bằng cách sử dụng bộ dữ liệu này, chúng ta có thể phân tích các yếu tố ảnh hưởng đến doanh thu của Walmart và áp dụng các kỹ thuật dự đoán để ước tính doanh thu trong tương lai, hỗ trợ Walmart đưa ra các chiến lược kinh doanh phù hợp
Bộ dữ liệu lịch sử của Walmart bao gồm thông tin về doanh số bán hàng từ ngày 05/02/2010 đến ngày 01/11/2012 Bộ dữ liệu này cung cấp các thông tin cần thiết để phân tích và dự đoán doanh thu cho các cửa hàng của Walmart
Dataset Link: Walmart Dataset (kaggle.com)
Bộ dữ liệu này chứa các thông tin chi tiết về doanh thu hàng tuần của các cửa hàng Walmart Dữ liệu này bao gồm nhiều biến số quan trọng ảnh hưởng đến doanh thu, chẳng hạn như ngày bán hàng, giá nhiên liệu, chỉ số giá tiêu dùng và tỷ lệ thất nghiệp Có 5 ngày lễ tuần lễ lớn như Super Bowl, Labour Day, Thanksgiving và Christmas, những tuần có chứa những ngày lễ lớn này được đánh trọng số cao hơn những tuần khác Chúng ta hiểu rõ hơn về tác động của các sự kiện này đến doanh thu
• Store: Số hiệu của cửa hàng
• Date: Tuần lễ bán hàng
• Weekly_Sales: Doanh thu hàng tuần của cửa hàng
• Holiday_Flag: Biến số đánh dấu tuần lễ đặc biệt (1 - Tuần lễ đặc biệt, 0 - Tuần lễ bình thường)
• Temperature: Nhiệt độ vào ngày bán hàng
• Fuel_Price: Giá nhiên liệu trong khu vực
• CPI: Chỉ số giá tiêu dùng hiện hành
• Unemployment: Tỷ lệ thất nghiệp hiện hành
• Super Bowl: 12-Feb-10, 11-Feb-11, 10-Feb-12, 8-Feb-13
• Labour Day: 10-Sep-10, 9-Sep-11, 7-Sep-12, 6-Sep-13
• Thanksgiving: 26-Nov-10, 25-Nov-11, 23-Nov-12, 29-Nov-13
• Christmas: 31-Dec-10, 30-Dec-11, 28-Dec-12, 27-Dec-13
Chuyển đổi cột ‘Date’ => datetime:
Hình 3.2: Định dạng cột Date
Data Pre-processing
Tiền xử lý dữ liệu đóng một vai trò quan trọng trong việc phát triển các mô hình học máy Ban đầu đã tải xuống các bộ dữ liệu và sau đó bắt tay vào hành trình tiền xử lý
Handling the Missing Values kiểm tra bất kỳ không giá trị bị thiếu
Hình 3.3: Kiểm tra dữ liệu thiếu
Handling the duplicate data không bị trùng lặp
Hình 3.4: Kiểm tra dữ liệu trùng lặp
Xác định và xử lý outliers trong data Dữ liệu ngoại lệ là những giá trị nằm ngoài khoảng giá trị bình thường của dữ liệu và có thể ảnh hưởng đến kết quả phân tích Các giá trị nằm ngoài khoảng [lb, ub] là các ngoại lệ sử dụng phương pháp IQR (Interquartile Range):
Hình 3.5: Xác định ngoại lệ
- Xử lý ngoại lệ trong cột ‘Holiday_Flag’
Hình 3.6: Kiểm tra ngoại lệ trong cột ‘Holiday_Flag’
Do ‘Holiday_Flag’ là cột phân loại không cần xử lý giá trị ngoại lệ vì mọi giá trị đều hợp lệ nếu thuộc về một trong các danh mục xác định trước
- Xử lý các ngoại lệ trong cột ‘Weekly_Sales’ và ‘Temperature’
Xác định giới hạn ngoại lệ (ub và lb) của IQR rồi thay thế các giá trị ub và lb bằn g giá trị trung vị của cột Tính toán và lưu trữ tỉ lệ phần trăm các giá trị ngoại lệ còn lại sau khi đã xử lý
Hình 3.7: Xử lý các ngoại lệ trong cột ‘Weekly_Sales’ và ‘Temperature’
- Xử lý ngoại lệ trong cột ‘Unemployment’
Hình 3.8: Xử lý ngoại lệ trong cột ‘Unemployment’
Số lượng giá trị ngoại lệ của ‘Unemployment’ ít và không ảnh hưởng đáng kể đến phân tích nên bỏ qua
Sau khi làm xử lý data từ 6435 mẫu còn 6329 mẫu để phân tích doanh thu Walmart
Hình 3.9: Kết quả xử lý
Phân tích và khám phá dữ liệu từ tập dữ liệu Walmart
3.3.1 Phân tích doanh số bán hàng hàng tuần theo các yếu tố a Weekly_Sales & Holiday_Flag
Câu hỏi 1: Trung bình doanh số bán hàng vào các ngày lễ và ngày thường là bao nhiêu?
Hình 3.10: Weekly_Sales & Holiday_Flag
Mặc dù số lượng tuần lễ có ngày lễ trong một năm ít hơn so với các tuần không có ngày lễ, doanh số bán hàng trong những tuần này lại vượt trội hơn đáng kể Mức tăng trung bình đạt 5%, với doanh số trung bình vào các tuần lễ có ngày lễ đạt 1.081.661 USD so với 1.029.665 USD của các tuần thường Tuy nhiên, cần lưu ý rằng đây chỉ là mức trung bình Doanh số bán hàng thực tế có sự biến động tùy thuộc vào từng cửa hàng, khu vực,…
Câu hỏi 2: Tổng doanh số bán hàng ở mỗi cửa hàng là bao nhiêu?
Hình 3.11: Weekly_Sales & Store
Về mối liên hệ giữa vị trí của cửa hàng và doanh thu là chìa khóa cho doanh thu bùng nổ đưa ra các quyết định chiến lược về việc mở cửa hàng mới và cải thiện các cửa hàng hiện tại
• Cửa hàng có doanh số cao nhất Store 20: 286,748,957 USD
• Cửa hàng có doanh số thấp nhất Store 33: 37,160,222 USD
Walmart nên tiến hành phân tích sâu về vị trí địa lý của các cửa hàng có doanh số cao xem xét các yếu tố như: mức độ dân cư, thu nhập trung bình của khu vực, tiện ích giao thông, sự cạnh tranh với các cửa hàng khác Đối với các cửa hàng có doanh số thấp nên khảo sát xem vị trí của họ có nằm ở khu vực kém phát triển, ít dân cư có những hạn chế về tiện ích giao thông nào c Weekly_Sales & Temperature
Câu hỏi 3: Sự tương quan giữa doanh số bán hàng ở những nhiệt độ khác nhau
Hình 3.12: Weekly_Sales & Temperature
Dữ liệu phân bố khá đều trên toàn bộ dải nhiệt độ từ 20 đến 100 độ Fahrenheit Các cửa hàng Walmart có thể duy trì doanh số bán hàng ổn định ở nhiều mức nhiệt độ khác nhau là do nhu cầu mua sắm tại Walmart không bị ảnh hưởng mạnh bởi điều kiện thời tiết d Weekly_Sales & Fuel_Price
Câu hỏi 4: Tác động của việc tăng giá nhiên liệu đến doanh số bán hàng như thế nào?
Hình 3.13: Weekly_Sales & Fuel_Price
29 Các điểm dữ liệu phân tán khá đều trên toàn bộ phạm vi giá nhiên liệu không có xu hướng tăng hoặc giảm rõ ràng nào trong doanh số bán hàng khi giá nhiên liệu thay đổi Giá nhiên liệu không phải là yếu tố quyết định lớn đến doanh số bán hàng của Walmart e Weekly_Sales & CPI
Câu hỏi 5: Liệu CPI có ảnh hưởng đến doanh số bán hàng và tình hình kinh tế của người tiêu dùng như thế nào?
Hình 3.14: Weekly_Sales & CPI
Doanh số bán hàng hàng tuần có xu hướng tập trung hơn ở các mức CPI thấp được giải thích bởi giá cả hàng hóa và dịch vụ ở mức thấp từ đó khuyến khích người tiêu dùng mua sắm nhiều hơn, trong khi đó doanh số giảm và phân tán ở các mức CPI cao dữ liệu trở nên rải rác thấy được sức mua của khách hàng giảm mạnh do giá cả tăng cao
Giá cả hàng hóa và dịch vụ tăng lên CPI cao thường biểu thị lạm phát làm giảm sức mua của khách hàng vì họ phải chi nhiều tiền hơn cho cùng một lượng hàng hóa và dịch vụ Mối quan hệ tiêu cực giữa CPI và doanh số bán hàng hàng tuần đi ngược nhau khi CPI tăng thì doanh số giảm Điều này gây ra nhiều thách thức cho Walmart phải duy trì và tăng trưởng doanh thu
30 Walmart có biện pháp điều chỉnh giá cả, quản lý chi phí trong bối cảnh kinh tế khó khăn Đề xuất: Thực hiện các chương trình điểm thưởng và tích lũy điểm cho khách hàng có thẻ thành viên f Weekly_Sales & Unemployment
Câu hỏi 6: Điều gì xảy ra với doanh số bán hàng dựa trên tỷ lệ thất nghiệp?
Hình 3.15: Weekly_Sales & Unemployment
Tỷ lệ thất nghiệp là một yếu tố kinh tế quan trọng ảnh hưởng đến doanh số bán hàng Điều này phản ánh tình trạng khó khăn của thị trường lao động cứ tỷ lệ thất nghiệp tăng chắc chắn doanh số bán hàng giảm Walmart cần phải nhạy bén với biến động của thị trường để điều chỉnh chiến lược kinh doanh
Mối tương quan rõ ràng nào giữa CPI và Tỷ lệ thất nghiệp không?
Hình 3.16: Mối quan hệ CPI và Unemployment
Biểu đồ cho thấy một đường hồi quy tuyến tính có xu hướng dốc xuống ngụ ý rằng có một mối tương quan nghịch giữa CPI và tỷ lệ thất nghiệp Hiểu rõ mối quan hệ này giúp Walmart không chỉ tối ưu hóa chiến lược giá đưa ra các quyết định chính xác về mở rộng thị trường bằng cách điều chỉnh chiến lược mở rộng theo điều kiện kinh tế giúp Walmart có thể duy trì sự ổn định và phát triển bền vững trong mọi hoàn cảnh kinh tế Đề xuất:
Tỷ lệ thất nghiệp tăng Walmart điều chỉnh lượng hàng tồn kho hạn chế tình trạng dư thừa hàng hóa ở những địa điểm bị ảnh hưởng đồng thời đẩy mạnh chương trình khuyến mãi để duy trì doanh thu tạm thời
3.3.2 Phân tích doanh số theo các yếu tố thời gian
Câu hỏi 7: Sự thay đổi đáng kể nào trong xu hướng doanh số theo thời gian
Hình 3.17: Xu hướng doanh số theo tháng & năm Walmart
“Xu hướng doanh số bán hàng hàng tuần theo năm” từ năm 2010 đến 2012, doanh số trung bình hàng tuần của Walmart giảm đáng kể có một sự sụt giảm lớn từ điểm dữ liệu đầu tiên trong năm 2010 đến điểm thứ hai Sau đó ổn định và dần dần phục hồi sau giai đoạn giảm cũng có thể cho thấy các biện pháp cải tiến hoặc điều chỉnh đã có hiệu quả
“Xu hướng doanh số bán hàng hàng tuần theo tháng” có một sự tăng vọt trong doanh số bán hàng hàng tuần vào tháng 12 do mùa mua sắm lễ hội Doanh số có xu hướng biến động theo từng tháng phản ánh ảnh hưởng của các yếu tố mùa vụ đến hành vi mua hàng
Câu 8: Tác động của các ngày lễ đặc biệt (gồm Super Bowl, Labour Day, Thanksgiving, Christmas) đến doanh số bán hàng khác nhau giữa các cửa hàng không? Liệu một số cửa hàng có doanh số tăng đột biến hơn so với các cửa hàng khác trong các ngày lễ này không?
Hình 3.18:Doanh số các ngày lễ đặc biệt
Lấy top 5 cửa hàng có doanh số bán hàng cao nhất
Hình 3.19: Top 5 cửa hàng có doanh số cao nhất các dịp lễ
Các ngày lễ đặc biệt có tác động mạnh đến doanh số bán hàng giữa các cửa hàng tăng đột biến rõ rệt trong doanh số bán hàng vào ngày lễ
Xây dựng mô hình dự đoán doanh thu Walmart
3.4.1 Data Standardization và data splitting
The code: from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression
36 from sklearn.tree import DecisionTreeRegressor from sklearn.metrics import mean_squared_error, r2_score features = ['Store’, 'Holiday_Flag', 'Temperature', 'Fuel_Price', 'CPI', 'Unemployment', 'weekday', 'month', 'year'] x = df[features] y = df['Weekly_Sales'] min_max_values = {col: (x[col].min(), x[col].max()) for col in x.columns}
# Chuẩn hóa dữ liệu scaler = StandardScaler() scaled_data = scaler.fit_transform(x)
# Chia dữ liệu thành tập huấn luyện và tập kiểm tra x_train, x_test, y_train, y_test = train_test_split ( scaled_data, y, test_size=0.2, random_stateP)
Chuẩn bị dữ liệu chọn các cột đặc trưng ảnh hưởng đến doanh thu hàng tuần của Walmart xong chuẩn hóa các giá trị của các cột Lưu trữ các giá trị của từng đặc trưng trong từ điển min_max_values cho việc kiểm tra giá trị đầu vào trong mô hình dự đoán chính xác và không xuất hiện giá trị bất thường gây ra dự đoán sai doanh thu
3.4.2 Mô hình dự đoán doanh thu a Linear Regression
# Huấn luyện Linear Regression lr = LinearRegression()
37 lr.fit(x_train, y_train) y_predict_lr = lr.predict(x_test)
# Đánh giá Linear Regression mse_lr = mean_squared_error(y_test, y_predict_lr) rmse_lr = np.sqrt(mse_lr) r2_lr = r2_score(y_test, y_predict_lr) print('{}{}\033[1m Evaluating Linear Regression Model
\033[0m{}{}\n'.format (''*3)) print('The coefficients of the regression model are:', lr.coef_) print('The intercept of the regression model is:', lr.intercept_) print('\nPerformance metrics:') print('Mean Squared Error (MSE):', mse_lr) print('Root Mean Squared Error (RMSE):', rmse_lr) print('R-squared (R^2):', r2_lr)
Hình 3.22: Comparison of Actual and Predicted Weekly Sales
Mô hình Linear Regression dự đoán doanh số R-squared chỉ khoảng 13.05% sự biến động trong doanh số hàng tuần Mô hình chưa nắm bắt được các yếu tố quan trọng ảnh hưởng đến doanh số Ngoài ra, giá trị RMSE 515,814.68 chỉ ra rằng sai số trung bình giữa giá trị dự đoán và thực tế còn lớn gây ảnh hưởng đến độ chính xác của mô hình
Các chấm vàng trên biểu đồ phân tán rộn thấy được sai lệch giá trị dự đoán và thực tế, đặc biệt đối với các giá trị doanh số cao hơn Linear Regression gặp khó khăn khi xử lý b Decision Tree Regressor
# Huấn luyện Decision Tree Regressor dt = DecisionTreeRegressor() dt.fit(x_train, y_train) y_predict_dt = dt.predict(x_test)
# Đánh giá Decision Tree Regressor mse_dt = mean_squared_error(y_test, y_predict_dt) rmse_dt = np.sqrt(mse_dt) r2_dt = r2_score(y_test, y_predict_dt) print('{}{}\033[1m Evaluating Decision Tree Regressor Model
\033[0m{}{}\n'.format(''*3)) print('\nPerformance metrics:') print('Mean Squared Error (MSE):', mse_dt) print('Root Mean Squared Error (RMSE):', rmse_dt) print('R-squared (R^2):', r2_dt)
Hình 3.23: Comparison of Actual and Predicted Weekly Sales DT
Mô hình Decision Tree Regressor thể hiện hiệu suất dự đoán doanh số hàng tuần vượt trội với R-squared đạt 90.83% với giá trị RMSE chỉ 167,533.53, mô hình đã giảm đáng kể sai số dự đoán so với mô hình Linear Regression, chỉ ra rằng sai lệch giữa giá trị dự đoán và giá trị thực tế là nhỏ hơn nhiều Biểu đồ phân cho thấy các điểm dữ liệu phần lớn tập trung xung quanh đường lý tưởng chứng tỏ độ chính xác của dự đoán cao Mô hình Decision Tree Regressor không chỉ giảm thiểu sự sai lệch mà còn cải thiện khả năng xử lý các giá trị doanh thu cao nó tạo ra các dự đoán gần với thực tế giúp Walmart đưa ra quyết định phát triển doanh nghiệp c Hàm dự doán doanh thu Walmart
Hàm predict_sales tạo ra để dự đoán doanh thu của Walmart dựa trên các thông số đầu vào Mọi người ước tính được doanh thu dựa trên các yếu tố
# Hàm dự đoán doanh thu walmart
40 def predict_sales(model, scaler, min_max_values, store, holiday_flag, temperature, fuel_price, cpi, unemployment, weekday, month, year):
# Kiểm tra giá trị hợp lệ input_data = {
'year': year } for feature, value in input_data.items(): if feature != 'year': min_val, max_val = min_max_values[feature] if not (min_val