Dữ Liệu Ngoại Lai (Outliers) và Cách Xử Lý Hiệu Quả: Hướng Dẫn Chi Tiết Cho Người Việt

Trong thế giới dữ liệu rộng lớn, việc xác định và xử lý dữ liệu ngoại lai (outliers) đóng vai trò then chốt để đảm bảo tính chính xác và độ tin cậy của các mô hình dự đoán cũng như các báo cáo kinh doanh. Bài viết này sẽ cung cấp một cái nhìn toàn diện về outliers, tầm quan trọng của việc xử lý chúng và các phương pháp thực tiễn để loại bỏ outliers, đặc biệt với việc sử dụng MySQL.

Outliers (Dữ liệu ngoại lai) là gì?

Outliers là những điểm dữ liệu khác biệt đáng kể so với phần lớn các điểm dữ liệu còn lại trong tập dữ liệu. Sự khác biệt này có thể thể hiện qua giá trị hoặc thuộc tính. Để dễ hình dung, hãy xem xét các ví dụ sau:

  • Dữ liệu 2 chiều:

Ví dụ về Outliers cho dữ liệu 2 chiềuVí dụ về Outliers cho dữ liệu 2 chiều

Alt text: Biểu đồ phân tán thể hiện dữ liệu ngoại lai (outliers) trong không gian hai chiều.

  • Dữ liệu 1 chiều:

Ví dụ về Outliers cho dữ liệu 1 chiềuVí dụ về Outliers cho dữ liệu 1 chiều

Alt text: Phân bố dữ liệu một chiều minh họa các giá trị ngoại lai nằm ngoài phạm vi phân bố chính.

Ví dụ thực tế:

  • Trong một lớp học, hầu hết học sinh đạt điểm từ 5 đến 7, nhưng có một học sinh đạt điểm 1 và một học sinh đạt điểm 10. Điểm 1 và 10 là outliers.
  • Một công ty B2B có nhiều khách hàng, nhưng có một khách hàng đến từ nước ngoài với hành vi mua hàng khác biệt. Khách hàng này có thể xem là một outlier về thuộc tính khách hàng.

Outliers dựa thuộc tính của dữ liệuOutliers dựa thuộc tính của dữ liệu

Alt text: Minh họa dữ liệu ngoại lai dựa trên sự khác biệt về thuộc tính trong tập dữ liệu.

Tại sao cần xác định và loại bỏ outliers?

Dữ liệu ngoại lai có thể xuất hiện do nhiều nguyên nhân khác nhau:

  • Lỗi nhập liệu: Sai sót trong quá trình nhập hoặc chỉnh sửa dữ liệu (ví dụ: thêm/thiếu số 0).
  • Dữ liệu ảo: Giá trị được tạo ra để thử nghiệm hoặc làm mồi nhử (ví dụ: giá nhà ảo).
  • Sự kiện bất thường: Các yếu tố bên ngoài ảnh hưởng đến dữ liệu (ví dụ: doanh số tăng đột biến do sự kiện cộng đồng).

Việc xử lý outliers phụ thuộc vào nguyên nhân và mục đích sử dụng dữ liệu:

  • Loại bỏ: Cần thiết để tăng độ chính xác của mô hình/báo cáo khi outliers là do lỗi hoặc dữ liệu ảo.
  • Giữ lại: Có thể hữu ích để phát hiện tiềm năng mới (ví dụ: phân tích nguyên nhân doanh số tăng đột biến).

Phương pháp xác định Outliers: Extreme Value Analysis

Trong bài viết này, chúng ta tập trung vào việc xác định outliers dựa trên giá trị quá cao hoặc quá thấp so với phần lớn dữ liệu. Phương pháp được sử dụng là Extreme Value Analysis, xác định các điểm dữ liệu có giá trị cực trị so với giá trị trung bình.

Ví dụ: Sử dụng bộ dữ liệu SuperStore Sales để tìm outliers dựa trên tổng giá trị hóa đơn tại mỗi bang.

Ví dụ về Outliers cho dữ liệu 1 chiềuVí dụ về Outliers cho dữ liệu 1 chiều

Alt text: Mô tả phương pháp phân tích giá trị cực trị (Extreme Value Analysis) trong việc xác định outliers.

Các bước xác định Outliers

  1. Phác họa dữ liệu (Visualize/plot data): Sử dụng biểu đồ để phát hiện outliers (ví dụ: dashboard Tableau).

  2. Tính tổng giá trị (Sum): Tính tổng giá trị cần phân tích (ví dụ: tổng giá trị mỗi order).

  3. Tính giá trị trung bình (Average/Mean) và độ lệch chuẩn (Standard Deviation): Xác định giá trị trung tâm và độ phân tán của dữ liệu.

    Outliers dựa thuộc tính của dữ liệuOutliers dựa thuộc tính của dữ liệu

    Alt text: Giải thích mối quan hệ giữa độ lệch chuẩn (Standard Deviation) và phân bố dữ liệu.

  4. Tính giá trị biên (Upper/Lower whisker): Xác định ngưỡng trên và ngưỡng dưới để phân biệt dữ liệu chuẩn và outliers.

    • Upper_whisker = AVG + STDV * Steps
    • Lower_whisker = AVG – STDV * Steps

    Trong đó, Steps là một số tự nhiên, thường bắt đầu với 3 (tương đương 3 độ lệch chuẩn).

  5. Xác định outliers: So sánh giá trị của mỗi điểm dữ liệu với giá trị biên. Nếu nằm ngoài khoảng giữa Upper và Lower whisker, đó là outlier.

    • If Sum_sale > Upper_whisker or Sum_sale < Lower_whisker then ‘Outlier’ else ‘Expected’
  6. Tính toán sau khi loại bỏ outliers: Thực hiện lại các phép tính cần thiết sau khi đã loại bỏ outliers.

  7. Kiểm tra và điều chỉnh giá trị Step: So sánh kết quả trước và sau khi loại bỏ outliers, đồng thời xem xét số lượng dữ liệu còn lại. Điều chỉnh giá trị Steps để tăng/giảm số lượng dữ liệu nếu cần thiết.

Hướng dẫn xác định và loại bỏ outliers bằng SQL

Đoạn mã SQL dưới đây minh họa cách xác định và loại bỏ outliers bằng MySQL, sử dụng CTE (Common Table Expression):

-- Bước 0: Sử dụng Tableau dashboard để trực quan hóa dữ liệu (đã thực hiện)

-- Bước 1: Tính tổng giá trị mỗi order
WITH sales_per_order AS (
    SELECT
        Order_ID,
        State,
        SUM(Sales) AS total_order_sales
    FROM
        your_table  -- Thay 'your_table' bằng tên bảng của bạn
    GROUP BY
        Order_ID,
        State
),
-- Bước 2: Tính avg và standard deviation dựa trên total_order_sales và State
avg_std AS (
    SELECT
        State,
        SUM(total_order_sales) AS sum_sales,
        COUNT(*) AS number_of_orders,
        AVG(total_order_sales) AS avg_sales,
        STDDEV(total_order_sales) AS std_sales
    FROM
        sales_per_order
    GROUP BY
        State
),
-- Bước 3: Tính Upper whisker và Lower whisker mỗi state
-- upper_whisker = avg + std * steps
-- lower_whisker = avg - std * steps
-- Mặc định steps = 3
upper_lower_whisker AS (
    SELECT
        State,
        std_sales,
        avg_sales,
        number_of_orders,
        (avg_sales + std_sales * 3) AS upper_whisker,
        CASE
            WHEN (avg_sales - std_sales * 3) < 0 THEN 0
            ELSE (avg_sales - std_sales * 3)
        END AS lower_whisker
    FROM
        avg_std
),
-- Bước 4: Xác định order là outliers
-- So sánh total_order_sales với upper và lower
find_outliers AS (
    SELECT
        spo.Order_ID,
        spo.State,
        spo.total_order_sales,
        ulh.number_of_orders,
        ulh.avg_sales,
        ulh.std_sales,
        ulh.upper_whisker,
        ulh.lower_whisker,
        CASE
            WHEN spo.total_order_sales > ulh.upper_whisker OR spo.total_order_sales < ulh.lower_whisker THEN 'Outlier'
            ELSE 'Expected'
        END AS Outlier_status
    FROM
        sales_per_order AS spo
    LEFT JOIN
        upper_lower_whisker AS ulh
    ON
        spo.State = ulh.State
)
-- Bước 5: Tính lại giá trị trung bình của mỗi order sau khi loại bỏ các outliers (chỉ giữ lại Expected)
SELECT
    State,
    number_of_orders,
    std_sales,
    upper_whisker,
    lower_whisker,
    avg_sales,
    AVG(total_order_sales) AS avg_sales_no_outliers,
    COUNT(*) AS new_number_of_orders,
    (COUNT(*) / number_of_orders) * 100 AS remaining_data
FROM
    find_outliers
WHERE
    Outlier_status = 'Expected'
GROUP BY
    State,
    number_of_orders;

Sau khi chạy đoạn mã trên, bạn sẽ thấy giá trị trung bình mỗi hóa đơn giảm đáng kể ở nhiều bang sau khi loại bỏ outliers. Bạn có thể kiểm tra và so sánh kết quả với dashboard Tableau để xác định những order nào đã bị loại bỏ.

Tổng kết và thực hành

Bài viết này đã cung cấp kiến thức cơ bản về outliers, tầm quan trọng của việc xử lý chúng và các bước thực tế để xác định và loại bỏ outliers bằng phương pháp Extreme Value Analysis và SQL.

Bài tập thực hành:

Sử dụng bộ dữ liệu SuperStore Sales, hãy thực hiện phân tích outliers với câu hỏi sau:

“Tính trung bình tổng giá trị mỗi order của mỗi tháng trong năm.”

Chúc bạn thành công!