Blog
14 phút đọc

Outlier là gì? Cách xác định và loại bỏ Outlier chuẩn nhất trong MySQL

Outlier còn được gọi là dữ liệu ngoại lai – một thuật ngữ khá phổ biến trong lĩnh vực phân tích dữ liệu. Việc loại bỏ Outlier trong Dataset sẽ làm tăng độ chính xác cho kết quả phân tích của dữ liệu. Vậy Outlier là gì? Bài viết sau đây Mastering DA sẽ tổng hợp kiến thức về thuật ngữ Outlier cũng như cách xác định và loại bỏ Outlier trong MySQL một cách chuẩn nhất.

Outlier (dữ liệu ngoại lai) là gì?

Để hiểu rõ về bản chất của Outlier là gì, trước tiên bạn nên xem qua các hình tham khảo bên dưới và chú ý điểm khác biệt với các điểm còn lại trong hình.

Outlier (dữ liệu ngoại lai) là gì?

Outlier (dữ liệu ngoại lai) là gì?

Có thể thấy, trong hình sẽ có một điểm khác biệt so với các điểm khác, người ta gọi đó là điểm bất thường hoặc điểm ngoại lai. Như vậy, dữ liệu ngoại lai (Outlier) là các giá trị dữ liệu đơn lẻ hoặc không tuân theo mô hình chung của tập dữ liệu. Giải thích một cách đơn giản thì Outlier là một hoặc nhiều cá thể có đặc điểm, giá trị khác hẳn so với các thành phần còn lại trong nhóm. Sự khác biệt này xuất hiện có thể do nhiều yếu tố khác nhau như giá trị hoặc thuộc tính.

Ví dụ: Giả sử bạn đang nghiên cứu thu nhập của người dân trong một thành phố. Hầu hết người dân có thu nhập từ 20.000 đến 100.000 đô la mỗi năm, nhưng có một người có thu nhập lên tới 1 triệu đô la mỗi năm. Khi đó, người này được coi là một Outlier (Dữ liệu ngoại lai) vì thu nhập của họ vượt xa so với phân phối chung của tập dữ liệu.

Khi nào chúng ta cần loại bỏ Outlier?

Trên thực tế, khi chúng ta làm báo cáo hoặc xây dựng model, sẽ rất khó để đạt được giá trị tuyệt đối. Trong hầu hết các trường hợp, luôn tồn tại các dữ liệu xấu hoặc bất thường. Những dữ liệu này tồn tại do nhiều nguyên nhân khác nhau, phụ thuộc vào từng hoàn cảnh và mô hình kinh doanh.

Trường hợp cần loại bỏ Outlier là gì?

Trường hợp cần loại bỏ Outlier là gì?

Một số trường hợp cần loại bỏ outlier là:

  • Khi Outlier là lỗi phát sinh trong quá trình đo lường, nhập liệu hoặc xử lý dữ liệu. Ví dụ: Một cân điện tử bị hỏng ghi nhầm trọng lượng của một vật là 1000 kg thay vì 10 kg.
  • Khi Outlier làm sai lệch phân bố của dữ liệu và ảnh hưởng đến các thống kê mô tả như trung bình, phương sai, phân vị,… Ví dụ: Một nhóm học sinh có điểm trung bình là 7, nhưng trong đó có 1 học sinh có điểm 10 và 1 học sinh có điểm là 0.
  • Khi Outlier làm giảm hiệu quả của các phương pháp học máy như hồi quy tuyến tính, phân loại logistic, phân cụm k-means,… Ví dụ: Một tập dữ liệu về chiều cao và cân nặng của người, nhưng có một điểm dữ liệu là chiều cao 2m và cân nặng 40kg.

Như vậy, Outlier có thể gây ảnh hưởng xấu đến kết quả phân tích và mô hình hóa dữ liệu, do đó cần được xác định và loại bỏ một cách hợp lý. Tuy nhiên, không phải lúc nào chúng ta cũng nên loại bỏ Outlier, bởi trong một số trường hợp Outlier sẽ mang đến những thông tin, giá trị và ý nghĩa quan trọng cho quá trình nghiên cứu.

Vậy nên việc loại bỏ outlier hay không còn phụ thuộc vào nguyên nhân, ý nghĩa và tác động của Outlier đối với dữ liệu là gì. Chúng ta cần xem xét kỹ lưỡng trước khi đưa ra quyết định loại bỏ Outlier để không làm mất đi các thông tin quan trọng hoặc làm sai lệch kết quả phân tích và mô hình hóa dữ liệu.

Hướng dẫn xác định dữ liệu ngoại lai chuẩn nhất

Để xác định Outlier thì chúng ta cần phải dựa vào từng loại Outlier. Tuy nhiên, vì có rất nhiều loại Outlier khác nhau nên bài viết này chỉ tập trung vào một loại Outlier là những Data Point có tổng giá trị quá cao hoặc quá thấp so với phần lớn dữ liệu.

Đầu tiên bạn cần phải phác họa dữ liệu. Đây là cách nhanh nhất để bạn có thể phát hiện dữ liệu của mình có xuất hiện Outlier hay không. Nếu như dữ liệu của bạn hoàn toàn bình thường thì bạn không cần phải thao tác thêm gì nữa. Tuy nhiên, nếu như dữ liệu có dấu hiệu bất thường thì bạn cần thực hiện thêm các bước sau để xác định Outlier:

Bước 1: Trực quan hóa dữ liệu

Tìm tổng giá trị của mỗi order. Các bạn có thể thay đổi giá trị cần tính tùy theo Dataset mà các bạn làm việc. Ví dụ như số lượng khách hàng mới hoặc số lượng hợp đồng được ký trong ngày,…

Bước 2: Tính trung bình và độ lệch chuẩn

Tính giá trị trung bình (Average/Mean) và độ lệch chuẩn (Standard Deviation) của tổng giá trị order theo từng Sub-Category. Các giá trị này sẽ cho biết giá trị trung tâm (Average), sau đó chúng ta sẽ sử dụng giá trị trung tâm để kiểm tra xem độ phân tán của dữ liệu như thế nào dựa trên giá trị của độ lệch chuẩn (Standard Deviation).

Nếu bộ dữ liệu có độ phân tán bình thường thì với 3 Standard Deviation (STD), chúng ta sẽ bao phủ được khoảng >99% của dữ liệu. Vậy nên những dữ liệu nằm ngoài 3 STD thường sẽ là Outlier.

Độ lệch chuẩn và phân bố dữ liệu

Độ lệch chuẩn và phân bố dữ liệu

Bước 3: Tính giá trị biên Upper/Lower Whisker

Upper/lower whisker đại biểu cho 2 giá trị cực đại/cực tiểu giúp chúng ta xác định dữ liệu chuẩn (Expected) và giá trị ngoại lai (Outlier). Giá trị biên phía ngọn (Upper Whisker) và gốc (Lower Whisker) theo công thức:

Upper_whisker = AVG + STDV*Steps

Lower_whisker = AVG – STDV*Steps

Trong đó Steps là một dãy số tự nhiên mà chúng ta tự đặt ra tùy theo độ phân tán của dữ liệu. Phần lớn các trường hợp, Steps = 3 (tương đương với 3 Standard Deviations) sẽ bao phủ khoảng >90% tổng số dữ liệu. Các bạn có thể bắt đầu với Steps = 3 trong phần lớn trường hợp.

Bước 4: Xác định Outlier dựa trên giá trị biên

Ở bước này, chúng ta chỉ cần thực hiện so sánh giá trị của Order với Upper Whisker và Lower Whisker. Nếu giá trị của Order nằm bên trong đoạn từ Upper đến Lower thì sẽ là dữ liệu chuẩn, còn lại sẽ là Outlier. Chúng ta có công thức:

If Sum_sale > Upper_whisker or Sum_sale < Lower_whiske

then ‘Outlier’ else ‘Expected’

Theo như xác định phía trên là mọi giá trị nằm ngoài vùng biên đều là dữ liệu ngoại biên.

Bước 5: Thực hiện tính toán khi đã loại bỏ Outlier

Sau khi đã xác định được Outlier thì việc cần làm tiếp theo là thực hiện các phép tính cần thiết với điều kiện để loại bỏ các Outlier. Ở đây chúng ta sẽ thực hiện lại việc tính giá trị trung bình của mỗi hóa đơn tại mỗi State.

Bước 6: Kiểm tra và điều chỉnh giá trị Steps

Sau khi đã có được kết quả mới, chúng ta cần so sánh với kết quả trước đó để xem sự khác biệt như thế nào. Lúc này chúng ta cũng cần quan tâm đến một giá trị khác là số lượng dữ liệu mà chúng ta còn lại sau khi loại bỏ Outlier.

Việc này rất quan trọng cho kết quả cuối cùng. Tùy thuộc vào mục đích sử dụng mà chúng ta có thể chọn giá trị khác nhau. Lúc này bạn cần tính tổng số lượng data (order) còn lại so với dữ liệu gốc là bao nhiêu. Với số lượng dữ liệu như vậy đã đủ chưa hay là quá nhiều?

Nếu muốn tăng số lượng dữ liệu thì chúng ta tăng giá trị của Steps lên và ngược lại. Chúng tôi khuyến khích là mỗi lần chỉ nên tăng hoặc giảm đi 0,5. Sau đó chúng ta sẽ quay lại bước 3 và thực hiện lặp lại cho đến khi có kết quả mà bạn cảm thấy hài lòng.

Cách loại bỏ dữ liệu ngoại lai là gì?

Sau đây sẽ là đoạn mã dùng để xác định và loại bỏ Outlier bằng SQL chi tiết. Lưu ý phần này sử dụng SQL CTE (lệnh with).

Bước 1: Tổng giá trị mỗi order

with sales_per_order as (

select Order_ID

, state

, sum(Sales) as total_order_sales

from superstore.orders

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

,std(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

ở đây 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

Chúng ta đang kiểm tra giá trị của mỗi order

Nên những giá trị &lt;0 đều sẽ là lỗi

, 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à Outlier

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.std_sales

, ulh.avg_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 ulh.state = spo.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 Outlier (chỉ giữ lại Expected)

select state

— toàn bộ order của state

, number_of_orders

, std_sales

, upper_whisker

, lower_whisker

, avg_sales

, avg(total_order_sales) as avg_sales_no_outliers

số order sau khi đã loại bỏ Outlier

, count(*) as new_number_of_orders

tỉ lệ phần trăm dữ liệu còn lại

, count(*)/number_of_orders*100 as remaining_data

from find_outliers where outlier_status = ‘Expected’

group by state,number_of_orders

ở đây khi Steps=3 đã có được phần lớn dữ liệu (>95%) cộng với việc khi visualise đã loại bỏ được khá nhiều Outlier vậy nên mình không thay đổi Steps nữa.

Sau khi chạy đoạn mã code trên, các bạn sẽ thấy được rất nhiều tiểu ban có giá trị trung bình mỗi hóa đơn giảm hơn rất nhiều so với ban đầu.

Nếu đã có kết quả, bạn có thể quay trở lại Dashboard để kiểm tra và so sánh cũng như kiểm tra xem những Outlier đã bị loại bỏ là những order nào.

Như vậy, MDA đã cung cấp cho bạn những thông tin về khái niệm Outlier là gì và cách xác định Outlier nhằm loại bỏ chúng một cách chính xác và hiệu quả. Thực tế, trong các bài test đầu vào của những vị trí như DA hoặc BI, việc biết cách xác định và xử lý Outlier cũng sẽ là một điểm cộng cho bạn trong mắt nhà tuyển dụng. Để xác định Outlier nhanh chóng và chuẩn xác bạn có thể tham khảo qua khóa học Phân tích Dữ liệu Kinh doanh của MDA. Nội dung khóa học có lồng ghép các nội dung hướng dẫn học viên xác định Outlier chính xác khi đối mặt với các dataset. Liên hệ với Mastering Data Analytics để được tư vấn ngay hôm nay nhé!