Chương I: Tổng Quan Đề Tài 1. Giới thiệu đề tài Ngày nay, mạng Internet là một trong những công cụ cần thiết trong cuộc sống hiện đại, là nền tảng cho sự truyền tải và trao đổi thông tin trên toàn cầu. Cùng với sự phát triển nhảy vọt của công nghệ thông tin, Internet đang dần chiếm giữ vai trò quan trọng trong mọi mặt của đời sống, giúp con người làm việc với độ chính xác cao, quản lý và tổ chức công việc hiệu quả, cũng như nhanh chóng cập nhật thông tin một cách chính xác. Vì vậy, thương mại điện tử ngày càng phát triển và đem lại bước đột phá mới cho công tác quản lý bán hàng.
Nó giúp doanh nghiệp dễ dàng nắm bắt thông tin, dữ liệu về người tiêu dùng, hàng hóa và các đơn đặt hàng một cách nhanh chóng. Cùng với đó là sự phát triển của việc phân tích dữ liệu khách hàng, giúp cho quản lý doanh nghiệp có cái nhìn tổng quát về tình hình bán hàng của doanh nghiệp, khai thác được những thông tin hữu ích từ bộ dữ liệu mả họ đang có để từ đó đưa ra những chính sách bán hàng hiệu quả. Mục tiêu nghiên cứu - Tìm ra những kết hợp sản phẩm có khả năng thường xuyên được bán cùng nhau nhất để từ đó biết được mối liên hệ giữa các sản phẩm và có thể đưa ra các chiến lược thúc đẩy khả năng bán chéo giữa các sản phẩm đó. - Phân tích chuỗi thời gian bán hàng tiềm năng để phát hiện ra được tính xu hướng và chu kỳ của tập dữ liệu khách hàng, từ đó đưa ra các chiến dịch quảng bá sản phẩm phù hợp theo từng mùa.
- Phân khúc khách hàng theo vị trí địa lý và hành vi mua hàng, xem xét những gì khách hàng mua, mức giá, tần suất và số lượng họ mua hàng để từ đó có thể đưa ra các chiến dịch tiếp thị phù hợp với từng nhóm khách hàng. Phương pháp nghiên cứu: EDA : Sử dụng các biểu đồ vẽ nhằm tương quan cũng như làm rõ mục đích nghiên cứu đề tài, sự liên kết với nhau giữa các biến. FP-Growth: Sử dụng FP-Growth để tìm ra các mặt hàng thường được bán chung với nhau (trong cùng 1 hóa đơn) và khoảng thời gian mà các mặt hàng được bán chạy nhất giúp tối ưu hóa lượng hàng được bán ra. Vì giới hạn về mặt phần cứng (nếu áp dụng FP-Growth trên dataset Online Retail đã qua tiền xử lý sẽ phát sinh một số lượng tập kết hợp quá lớn (lên đến gần 33000 tập kết hợp) khiến việc tính toán dựa vào các thiết bị thông thường là gần như không thể.
Vì thế ở đây, ta bắt đầu với việc lấy mẫu ngẫu nhiên 350000 dòng dữ liệu (sau khi thử nghiệm thì 350000 dòng dữ liệu là số dòng dữ liệu 1 được lấy từ bộ dữ liệu gốc có thể thực hiện thuật toán FP-Growth mà không bỏ quá nhiều dữ liệu, chỉ bỏ khoảng 5% dữ liệu) từ bộ dữ liệu gốc sau tiền xử lý. Tài nguyên sử dụng: - Ngôn ngữ lập trình: Python. - Bộ dữ liệu “Online Retails Sale Data” được lấy từ Kaggle. Chương II: Tổng Quan Bộ Dữ Liệu 1.
Tổng quan bộ dữ liệu thu thập - Bộ dữ liệu “Online Retails Sale Data” chứa các giao dịch từ ngày 12/01/2010 đến 12/09/2011 của một công ty bán lẻ trực tuyến có trụ sở tại UK. Bao gồm 10 thuộc tính, số dòng của bộ dữ liệu là 541909 dòng 2. Các thuộc tính của bộ dữ liệu Tên thuộc Mô tả Ghi chú tính InvoiceNo Mã đơn hàng cho Bao gồm 25900 mã đơn hàng mỗi order thành khác nhau công InvoiceDate Ngày đặt hàng Từ ngày 12 tháng 1 năm 2010 đến ngày 10 tháng 12 năm 2011 InvoiceTime Thời gian đặt hàng Phụ thuộc vào vị trí địa lí của từng khách hàng StockCode Mã sản phẩm Bao gồm 4070 mã sản phẩm khác nhau Description Mô tả sản phẩm Bao gồm 4224 mô tả, trong đó có các sản phẩm bị lỗi, hư hỏng, bị trả về, thất lạc Quantity Số lượng mỗi sản Số lượng của mỗi đơn vị sản phẩm phẩm được bán ra trong 1 đơn hàng. 2 UnitPrice Giá bán mỗi đơn vị Giá của 1 sản phẩm, mỗi sản sản phẩm phẩm sẽ có mức giá khác nhau.
Totalsale Doanh thu từ mỗi Totalsale = Quantity * UnitPrice sản phẩm trong 1 đơn hàng. CustomerID Mã khách hàng Mỗi khách hàng sẽ được cấp 1 mã duy nhất. Country Quốc gia của Căn cứ vào vị trí địa lý của khách đặt hàng khách hàng. Chương III: Tiền xử lý dữ liệu 1.
Exploratory Data Analysis (EDA) a. Tổng quan bộ dữ liệu nguyên bản - Để thăm dò bộ dữ liệu, ta cần biết được tổng quan các thông tin về: số dòng, số cột, có tồn tại giá trị bị thiếu hay không, nếu có thì ở dòng nào, thuộc cột nào và chiếm bao nhiêu phần trăm của bộ dữ liệu. - Xem số dòng, số cột hiện có của bộ dữ liệu nguyên bản để nắm được các thông tin sơ lược trước khi tiến hành tiền xử lý: 3 - Tiến hành kiểm tra các dòng chứa giá trị bị thiếu: - Kết quả trả về: Nhận xét: Bộ dữ liệu trên có 10 cột, số dòng dữ liệu là 541909, tồn tại cột CustomerID với số giá trị bị thiếu là 135080, tức xấp xỉ 25% bộ dữ liệu tồn tại giá trị bị thiếu ở cột này. Vì vậy ta sẽ xử lý các giá trị thiếu này ở bước sau.
- Để khám phá dữ liệu, chúng ta sẽ đưa ra số đơn hàng của từng nước, để tiện trong việc chọn các phân cụm clustering sau này 4 - Nhận thấy United Kingdom chiếm rất nhiều trong số đơn hàng (> 90%/ tổng số quốc gia), điều này giúp ta định hướng rằng, chúng ta sẽ tạo nhãn có thuộc tính country thành 2 loại : United Kingdom và các quốc gia khác. Biểu diễn dữ liệu nguyên bản: - Tiếp theo, việc phác hoạ biểu đồ tương quan giữa các biến làm nổi bật target của vấn đề. Qua biểu đồ cũng như các công thức liên quan, nhận thấy target 5 của bộ dữ liệu này có thể sử dụng được biến Quantity, Totalsale cũng như UnitPrice như nhau - Quá trình vẽ biểu đồ này sẽ tốn khoảng vài phút và vì bộ dữ liệu khá lớn nên phần biểu diễn biểu sẽ có những điểm đen dày đặc ở phần dưới mỗi biểu đồ. - Dưới đây là biểu đồ tương quan giữa 4 biến, điểm số càng tiệm cận 1 chứng tỏ độ tương thích giữa chúng càng cao, và ngược lại, nếu điểm số về 0 hoặc bé hơn 0 thì chúng có tương quan ngược.
6 7 - Nhận xét: EDA là bước giúp chúng ta định hình được các phương pháp mà chúng ta sẽ sử dụng sau này, ngoài ra với bộ dữ liệu này, nó giúp ta nhận thấy, muốn phân tích các trend theo thời gian, chúng ta cần phải tạo thêm các cột như tuần/ tháng hay gộp dữ liệu các ngày lại với nhau; Cần chỉnh dạng dữ liệu để hợp lý hoá các thông tin cần dùng - Kiểm tra xem bộ dữ liệu có tồn tại Outliers : 2. Chỉnh dạng dữ liệu a. Thêm cột - Thêm vào cột Month: - Lý do: Với mục tiêu phân loại các hóa đơn theo mùa, ta cần sắp xếp thời gian của các hoá đơn theo tháng (thay vì sắp xếp theo ngày) để thuận tiện cho việc phân loại. Nếu sắp xếp theo ngày thì không có ý nghĩa phân tích nhiều như tháng vì các ngày sẽ có sự trùng lặp rất nhiều.
- Thêm vào cột Year: - Lý do: Bộ dữ liệu bao gồm thời gian bán hàng của năm 2010 và 2011, ta cần phân loại hoá đơn dựa theo năm để phục vụ cho việc so sánh 2 năm, từ đó biết được xu hướng mua hàng của người mua tập trung vào loại sản phẩm nào. - Thêm vào cột Season: - Lý do: Để phục vụ cho mục tiêu nghiên cứu ở mục 2: tìm ra các sản phẩm bán chạy theo mùa. Ta cần thêm vào bộ dữ liệu cột Season nhằm sắp xếp các hoá đơn có tháng 1/2/3 vào mùa xuân, tháng 4/5/6 vào mùa hè, tháng 7/8/9 vào 8 mùa thu và các tháng 10/11/12 vào mùa đông. Như vậy, ở phần phân tích dữ liệu sẽ dễ dàng thực hiện hơn.
Xoá cột: - Loại bỏ cột InvoiceTime. - Lý do: Dữ liệu thời gian của tệp dữ liệu này không nhất quán giữa các khách hàng. Phụ thuộc vào mỗi vị trí địa lý khác nhau nên múi giờ đặt hàng sẽ có sự chênh lệch. Vì vậy, để khách quan và bao quát hơn, nhóm chỉ sử dụng dữ liệu dạng ngày của cột InvoiceDate 3.
Xử lý dữ liệu bị thiếu (Missing Values) - Tiến hành kiểm tra số lượng dòng chứa giá trị bị thiếu của mỗi cột: 9 - Quan sát từ kết quả, ta thấy rằng chỉ có cột CustomerID là còn tồn lại missing values. Ta tiến hành loại bỏ luôn các dòng này ra khỏi bộ dữ liệu: - Kiểm tra lại bộ dữ liệu sau khi xử lý: 10 - Nhận xét: Sau khi đã bỏ đi các dòng chứa giá trị bị thiếu của cột CustomerID, bộ dữ liệu đã không còn missing values ở bất kỳ cột nào. Xử lý outliers của các biến định lượng a. Biến Totalsale - Để quan sát trực quan dữ liệu của biến Totalsale, ta sẽ sử dụng biểu đồ hộp Boxplot để thể hiện các phân phối dữ liệu, nghĩa là giúp chúng ta biết được độ dàn trải của các điểm dữ liệu như thế nào, dữ liệu có đối xứng không, phân bố rộng hay hẹp, giá trị nhỏ nhất, lớn nhất và các điểm ngoại lệ.
- Nhận xét: Dựa vào Boxplot phía trên, ta thấy giá trị Max = 150000 và Min = -150000 lần lượt là giá trị lớn nhất và bé nhất để một phần tử được xem là 11 không phải Outliers. Vậy để xác định được Outliers của biến Total Sale, ta chỉ cần tìm các phần tử vượt quá 2 giá trị này. - Xác định giá trị của các tứ phân vị nhằm kiểm soát tác động của những giá trị ngoại lệ (Outliers) ở 2 đầu mút. Ở đây ta chỉ cần xác định giá trị của tứ phân vị thứ 1 và 3: - Sau khi đã có Q1 và Q3, ta tiếp tục xác định giá trị biên của biến Total Sale, nếu giá trị của 1 phần tử bất kì nằm trong khoảng lower và upper thì gọi là expected data, ngược lại gọi là Outliers.
Tạo 2 mảng chứa các index của phần tử là Outliers. 12 - Sau khi đã có index của các outliers, tiến hành loại bỏ outliers dựa trên index được lưu trong 2 array upper và lower. - Sau khi đã xử lý các outliers, sử dụng Boxplot để quan sát bộ dữ liệu.