F1 score là gì

  -  
1 Giới thiệu

Trong thời gian gần đây, Machine learning (ML) bắt đầu được ứng dụng phổ biến trong nghiên cứu y học lâm sàng. Các bác sĩ bắt đầu sử dụng những algorithm mới lạ, thí dụ SVM, Decision Tree, Random Forest,… ML cũng mang đến những quy trình mới, thí dụ cross validation, kiểm định độc lập và nhiều tiêu chí đánh giá, so sánh, lựa chọn mô hình mới. Tuy nhiên các bác sĩ vẫn gặp nhiều khó khăn khi tiếp thu dòng kiến thức cực lớn này. Một mặt, giới bác sĩ vẫn còn giữ quán tính rất lớn khi đi theo cách làm việc truyền thống và bị chi phối bởi cách suy nghĩ cũ theo trường phái thống kê y sinh. Thí dụ, khi nhắc đến việc dựng Mô hình, đa số bác sĩ thường chỉ nghĩ đến mục tiêu Diễn dịch (interpretive), họ chưa quen với mục tiêu tiên lượng. Trong các nghiên cứu y học, khái niệm mô hình gần như đồng nghĩa với Hồi quy tuyến tính, vì đây từng là công cụ phổ biến nhất mà môn thống kê hỗ trợ. Ngoài ra, việc kiểm tra đánh giá hiệu năng/phẩm chất của mô hình; so sánh mô hình, chọn lọc mô hình tối ưu… chưa được quan tâm đúng mức, và nếu có thực hiện cũng chỉ giới hạn trên dữ liệu hiện hành chứ không dùng dữ liệu độc lập. Bác sĩ cũng chưa quen với việc nhìn classifier đa biến như một test chẩn đoán để liên hệ chúng với những khái niệm đặc thù của ngành Y, thí dụ Likelihood ratios. Mặt khác vấn đề càng phức tạp hơn khi giữa ML và Thống kê có quá nhiều dị biệt về thuật ngữ (thậm chí có những điều cùng nguyên lý nhưng thuật ngữ cũng hoàn toàn khác nhau), ngăn cản bác sĩ học kiến thức từ Machine Learning và diễn đạt những tiêu chí đặc thù của ngành Y cho các data scientist bên ngoài.

Bạn đang xem: F1 score là gì

Việc đánh giá mô hình chắc chắn cần thiết, ngay cả khi mục tiêu của nghiên cứu không phải là tiên lượng. Khi đánh giá mô hình, ta mới có thể kiểm soát, điều chỉnh những algorithm đạt hiệu quả tối ưu, so sánh giữa nhiều mô hình và chọn ra mô hình chính xác nhất, và xác nhận điều này trên một dữ liệu độc lập. Tuy nhiên câu hỏi cần giải đáp: Kiểm tra bằng những tiêu chí nào ?

Do đó, Nhi viết bài thực hành này với hy vọng giải quyết càng nhiều càng tốt các vấn đề nêu trên, với 3 mục tiêu chính:

Liệt kê tất cả những chỉ số / tiêu chí có thể dùng để đánh giá hiệu năng, phẩm chất của một mô hình nhị phân, thí dụ Random Forest.

Phân tích các dị biệt về thuật ngữ giữa ML và Thống kê y học, và chuẩn hóa chúng cho ứng dụng lâm sàng.

Tính toán các chỉ số này trong R, theo cách hoàn toàn thủ công hoặc sử dụng các hàm viết sẵn từ các thư viện (R packages).


2 Thí dụ minh họa: Random Forest model

Để minh họa, ta phải có một mô hình. Nhi sẽ dùng lại bộ số liệu Heart disease. Đây là 1 tập hợp dữ liệu của hơn 600 bệnh nhân từ 4 bệnh viện (Cleveland,Budapest,Long Beach and Zurich). Ta sẽ dựng một mô hình tiên lượng cho bệnh Tim mạch dựa vào 14 biến số bao gồm Tuổi, Giới tính, Triệu chứng Đau ngực, cholesterol, fasting blood sugar test, và stress test gồm nhịp tim và đoạn ST của ECG. Algorithm được chọn là Random Forest. Công đoạn training sẽ được thực hiện bằng caret. Mô hình RF sẽ được huấn luyện trên 50% dữ liệu, 50% còn lại dùng để kiểm định độc lập. Quy trình huấn luyện do caret thực hiện tự động bằng cách tinh chỉnh tham số mtry, nhằm tối ưu hóa tiêu chí Accuracy.

library(tidyverse)va=read.table("https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.va.data", sep =",",na.strings="?",strip.white=TRUE, fill = TRUE)%>%as_tibble()hu=read.table("https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.hungarian.data", sep =",",na.strings="?",strip.white=TRUE, fill = TRUE)%>%as_tibble()sw=read.table("https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.switzerland.data", sep =",",na.strings="?",strip.white=TRUE, fill = TRUE)%>%as_tibble()cl=read.table("https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.cleveland.data", sep =",",na.strings="?",strip.white=TRUE, fill = TRUE)%>%as_tibble()df=rbind(va,hu,sw,cl)names(df)=c("Age","Sex","ChestPain", "RestBP","Chol","FBS", "RestECG","MaxHR","CPETAgina", "Oldpeak","Slope","CA","Thal","Class")data%filter(.,Chol!=0)%>%na.omit()data$Sex%%as.factor()%>% recode_factor(.,`0` = "Female", `1` = "Male")data$ChestPain%%as.factor()%>% recode_factor(.,`1` = "Typical", `2` = "Atypical", `3` = "Non_aginal", `4` = "asymptomatic" )data$FBS%%as.factor()%>% recode_factor(.,`0` = "No", `1` = "Yes")data$RestECG%%as.factor()%>% recode_factor(.,`0` = "Normal", `1` = "Abnormal_ST", `2` = "LVHypertrophy")data$CPETAgina%%as.factor()%>% recode_factor(.,`0` = "No", `1` = "Yes")data$Class%%as.factor()%>% recode_factor(.,`0` = "Negative", `1` = "Positive", `2` = "Positive", `3` = "Positive", `4` = "Positive")rm(cl,df,hu,sw,va)library(caret)set.seed(1234)idTrain=createDataPartition(y=data$Class, p=0.5,list=FALSE)trainset=datatestset=data<-idTrain,>#KRFControl=trainControl(method= "repeatedcv", number=5, repeats=5, classProbs=TRUE, summaryFunction=multiClassSummary)rfmod=caret::train(Class~., data=trainset, method = "rf", trControl=Control, tuneLength=5)Đầu tiên, ta có thể thấy việc đánh giá mô hình đã được caret áp dụng ngay từ công đoạn huấn luyện, caret lần lượt thử mtry=2,4,7,10… , mỗi lần như vậy mô hình được dựng trên 4 blocks dữ liệu và kiểm định trên block còn lại, lặp lại 5 lượt. Cuối cùng, tiêu chí Accuracy được chọn để quyết định mtry tối ưu=2.

Trong kết quả crossvalidation, ta cũng có thể thấy những chỉ số khác như AUC, Kappa, F1, Sensitivity, Specificity, Balanced accuracy. Chúng ta sẽ nói về chúng sâu hơn trong phần sau, các bạn kiên nhẫn.

*


3 Dữ liệu kết quả tiên lượng

Việc kiểm định mô hình sẽ được thực hiện độc lập trên dữ liệu testset (n=330), đầu tiên, chúng ta tạo ra một dataframe có nội dung như sau:

dfpred=data_frame(Truth=testset$Class, BinTruth=if_else(testset$Class=="Positive",1,0), ClassNeg=predict(rfmod,newdata=testset,type="prob")%>%.<<1>>, ClassPos=predict(rfmod,newdata=testset,type="prob")%>%.<<2>>, ClassLab=predict(rfmod,newdata=testset))dfpred%>%head()## # A tibble: 6 x 5## Truth BinTruth ClassNeg ClassPos ClassLab## ## 1 Negative 0 0.560 0.440 Negative## 2 Positive 1.00 0.0480 0.952 Positive## 3 Positive 1.00 0.100 0.900 Positive## 4 Negative 0 0.446 0.554 Positive## 5 Positive 1.00 0.592 0.408 Negative## 6 Negative 0 0.854 0.146 NegativeTruth: Giá trị thực tế quan sát được,dưới dạng factor.

BinTruth: Giá trị thực tế dưới dạng xác suất tuyệt đối: Positive=1, Negative=0.

ClassNeg: Xác suất tiên lượng cho nhãn Negative.

ClassPos: Xác suất tiên lượng cho nhãn Positive.

ClassLab: Kết quả phân loại của mô hình.

Từ dữ liệu này, chúng ta có thể xác định được tất cả các tiêu chí về phẩm chất mô hình.


4 Confusion matrix

Đầu tiên, ta bàn về một hình thức tóm tắt kết quả về hiệu năng mô hình rất lý thú: Confusion matrix hay error matrix. Confusion matrix là thuật ngữ của giới Machine learning, tương đương với khái niệm contingency table hay cross-table bên giới thống kê. Nó có bản chất là một bảng phân phối tần số 2 chiều (bảng chéo) cho phép trình bày tỉ lệ tương hợp và bất xứng giữa Thực tế và kết quả phân loại của quy luật cần kiểm tra (mô hình).Trong bài này, ta chỉ xét trường hợp đơn giản nhất của confusion matrix áp dụng cho bài toán nhị phân (Binary classification).Khi đó, Confusion matrix trình bày tần suất của 4 tổ hợp: TP (True Positive), TN (True Positive), FP (False positive) và FN (False negetive). True (Đúng) chỉ sự tương hợp, khi kết quả phân loại phù hợp với giá trị thực tế; False (Sai) chỉ sự bất xứng hay nhầm lẫn, khi mô hình phân loại nhầm so với thực tế.


*

Ý nghĩa quan trọng của confusion matrix là ở chỗ TP,TN,FP,FN là 4 chỉ số cơ bản, từ đó cho phép suy ra kết quả của hầu hết những chỉ số khác.

Confusion matrix có thể tính tự động từ caret:

cf=caret::confusionMatrix(reference=dfpred$Truth, data=dfpred$ClassLab, positive="Positive", mode="everything")cf$table## Reference## Prediction Negative Positive## Negative 139 32## Positive 34 125Tuy nhiên, ta có thể tự dựng confusion matrix thủ công như sau:

confmat=table(Classification=dfpred$ClassLab,Truth=dfpred$Truth)confmat## Truth## Classification Negative Positive## Negative 139 32## Positive 34 125Ta cũng có thể tính thủ công trực tiếp từng chỉ số một từ dữ liệu kiểm định:

TP=with(dfpred,sum(ClassLab==Truth & ClassLab=="Positive"))TN=with(dfpred,sum(ClassLab==Truth & ClassLab!="Positive"))FN=with(dfpred,sum(ClassLab!=Truth & Truth=="Positive"))FP=with(dfpred,sum(ClassLab!=Truth & Truth!="Positive"))cbind(TP,TN,FN,FP)## TP TN FN FP## <1,> 125 139 32 34Lưu ý: Positive/negative chỉ là tên gọi của 2 nhãn giá trị, mang tính quy ước và có ý nghĩa tương đối tùy theo mục tiêu của người dùng (Dương tính = điều ta quan tâm tìm kiếm và Âm tính = loại trừ (tất cả mọi) thứ còn lại).

Trong y học lâm sàng còn dịch là “Thật” và “Giả”, nhưng Nhi cho rằng phát biểu “Mô hình phân loại sai, mô hình chẩn đoán lầm, loại trừ nhầm” thì dễ hiểu hơn so với “kết quả âm tính giả/dương tính giả”. Khi áp dụng cho mục tiêu chẩn đoán, TP có thể dịch là “chẩn đoán/phát hiện đúng/trúng”, TN là “loại trừ đúng”, FP là “chẩn đoán nhầm/sai”, FN là “bỏ sót, loại trừ nhầm”.


5 Tính hữu dụng:

Đầu tiên, ta sẽ kiểm tra xem mô hình hữu dụng đến mức nào, thông qua các chỉ số như sau:

Sensitivity - Độ nhạy

True Positive rate (TPR) : tỉ lệ phân loại Positive đúng trên tổng số các trường hợp Positive:

\

Tỉ lệ TPR còn có tên gọi khác là Sensitivity (độ nhạy), hit rate (tỉ lệ trúng đích), và Recall. Do trên lâm sàng ta quen với khái niệm Sensitivity, Nhi sẽ sử dụng nó như thuật ngữ duy nhất. Recall là thuật ngữ ít thông dụng hơn nhưng có nhiều tài liệu sử dụng nó nên các bạn cần ghi nhớ.

Specificity: Độ đặc hiệu

True negative rate (TNR) : tỉ lệ loại trừ đúng trên tổng số các trường hợp Negative hay còn gọi là Specificity (độ đặc hiệu) trong y học lâm sàng.

\ Nhận xét:

Như đã nói ở trên, ý nghĩa của Positive/negative là tương đối, tương tự cho Sensitivity/Specificity. Nếu người bác sĩ đảo vị trí của mục tiêu phát hiện/loại trừ thì Sens/specs sẽ đổi vị trí cho nhau, nhưng chúng đều đo lường tính hữu dụng của mô hình (test chẩn đoán), hay khả năng cho phép đáp ứng mục tiêu phát hiện/loại trừ bệnh lý của người bác sĩ. Một mô hình có sensitivity cao cũng giống như một bác sĩ “can đảm” nói “Có” trước bệnh nhân, và specificity cao là sự can đảm nói “Không” khi loại trừ đối tượng không mắc bệnh.

Xem thêm: Game Thoát Khỏi Mỏ Hoang 3, Game Thoát Khỏi Mỏ Hoang 2, Game Tính Điểm

Sensitivity và Specificity luôn phải đi cặp với nhau, vì chúng bổ sung cho nhau. Mỗi chỉ số này chỉ mới kiểm tra 1 hàng trong Confusion matrix (1 ứng dụng : phát hiện/loại trừ) và do đó, độc lập với ứng dụng còn lại. Một vài mô hình có thể rất tốt cho ứng dung phát hiện nhưng kém cho ứng dụng loại trừ và ngược lại. Mặt khác, một mô hình “cực đoan” (null model) - luôn luôn trả lời “Có” hoặc “Không” sẽ cho ra giá trị zero cho Sensitivity hoặc Specificity. Khi một tác giả nào đó chỉ trình bày Sensitivity hoặc Specificity nhưng cố tình lờ đi chỉ số còn lại, anh ta/chị ta đang muốn che giấu sự thật, và một nửa sự thật không phải là sự thật.


6 Tính chính xác

Khái niệm “chính xác” rất khó để diễn đạt, vì ở đây ta có đến 2 nhãn giá trị, do đó ta có thể bàn về tính chính xác chung chung, tổng quát với chỉ số Accuracy:

Accuracy : (ACC)

Có thể tạm dịch thuật ngữ Acuracy như “độ chính xác tổng quát”, vì nó đơn giản là tỉ lệ của tất cả trường hợp phân loại Đúng (không phân biệt negative/positive) trên toàn bộ trường hợp trong mẫu kiểm định.

\

Đây là tiêu chí phổ biến nhất (thường được nghĩ đến đầu tiên) khi kiểm định hiệu năng của mô hình phân loại, tuy nhiên giá trị thực dụng của nó thường kém vì nó không đặc hiệu cho một mục tiêu nào cả.

Balanced accuracy:

Khi 2 nhãn Positive/Negative bị mất cân đối, một tiêu chí khác phù hợp hơn là Balanced accuracy (BAC) hay độ chính xác sau cân bằng:

\

Cho mục tiêu chuyên biệt hơn, ta có thể sử dụng:

Precision (độ chính xác) hay Positive predictive value (PPV):

Là tỉ lệ thực sự positive trên tổng số các trường hợp được mô hình dán nhãn “Positive”. Precision là một thuật ngữ bên Data science và trong y học nó tương đương với khái niệm « PPV ». Nó đo lường tính “xác định”, hay khả năng phân loại Positive chính xác của mô hình. Nhi thích dùng Precision hơn PPV, vì thuật ngữ “value” tuy chuyên biệt cho Positive, nhưng không nói lên ý nghĩa “khả năng” (performance), còn Positive hay Negative chỉ là tên gọi quy ước.

\ 4) Tương tự: Negative predictive value (NPV) đo lường khả năng loại trừ chính xác:

\

Lưu ý: Cẩn thận phân biệt giữa PPV/sensitivity và Recall/Precision. Precision đo lường tính “chuẩn xác”, Recall đo lường tính “hữu dụng”. Mẹo để nhớ là “Dám quyết định (Recall cao) và quyết định đúng (Precision cao)”. Cũng như cẩn thận khi dùng thuật ngữ “Độ chính xác” vì gây nhầm lẫn giữa Accuracy và Precision (Accuracy không phân biệt Positive/negative). Có thể dịch Precision là “Khả năng xác định”.

Precision không khảo sát mô hình môt cách độc lập, mà đặt mô hình vào một bối cảnh (dữ liệu). Do đó ta không nói chung chung:”mô hình chính xác”, mà là :” Mô hình chính xác đối với mẫu/dữ liệu hiện thời”.

F score

Do Recall (Sensitivity) và Precision là hai khái niệm khác nhau, ta có chỉ số F1 score cho phép đánh giá cân bằng giữa 2 phẩm chất này.

F1 score: Được định nghĩa như trung bình điều hòa (harmonic mean) giữa Precision và Recall (PPV và Sens) . \ \ Hoặc:

\

F1 là trường hợp đặc biệt của công thức tổng quát Fbeta:

\

Hay:

\

Từ công thức này ta còn tính được chỉ số F2 (đặt trọng số cao hơn cho Recall so với Precision) và F0.5 (trọng số cao hơn cho Precision so với Recall).

Như vậy F1 được dùng khi ta quan tâm đồng đều vai trò của cả Precision và Recall, nói cách khác ta muốn Mô hình (quy luật chẩn đoán) vừa Nhạy, vừa chính xác. Việc lựa chọn giữa Recall (Sensitivity) và Precision (PPV) tùy thuộc vào mục tiêu ứng dụng của mô hình: người bác sĩ muốn Tầm soát bệnh hay muốn Xác định bệnh ? Nếu xem cả 2 đều quan trọng như nhau thì F1 là tiêu chí thích hợp nhất khi kiểm định mô hình phân loại vì khi F1 đạt tối ưu thì cả Precision và Recall đều phải tối ưu, ngược lại chỉ cần một trong 2 có giá trị thấp thì F1 sẽ thấp.

G index:

Cũng liên quan đến sự kết hợp Precision và Recall, ta có G measure hay còn gọi là Fowlkes–Mallows index (1983). G sử dụng trung bình nhân:

\


7 Sai sót và nhầm lẫn

Một cách tiếp cận khác để đánh giá mô hình, đó là ta quan tâm đến nguy cơ nhầm lẫn, sai sót. Bạn có thể nghĩ đơn giản về sự bù trừ giữa chính xác/nhầm lẫn, nhưng quan hệ này phức tạp hơn cho những mục tiêu chuyên biệt, và bài toán phân loại nhiều nhãn giá trị, khi đó tính chính xác tổng quát không đảm bảovề tỉ lệ nhầm lẫn tối thiểu.Trong y học,nguy cơ phân loại nhầm là tiêu chí quan trọng cần kiểm tra .

Ngay từ Confusion matrix, ta đã có tần suất nhầm lẫn tuyệt đối : FN và FP. Từ đó, ta có thể tính tỉ lệ sai sót

False negative rate: Tỉ lệ loại trừ nhầm (FNR) và

False positive rate = Tỉ lệ phát hiện nhầm (FPR).

\

\

Một mô hình tốt cần có FNR và FPR thấp. Lưu ý là tầm quan trọng của FNR và FPR tùy thuộc vào bản chất của vấn đề. Trong bài toán xếp loại tín dụng, việc phân loại nhầm một hồ sơ vay vốn từ tốt thành xấu sẽ gây hậu quả ít nghiêm trọng hơn trường hợp ngược lại. Trong Y học thì khác, việc loại trừ nhầm lẫn một căn bệnh đôi khi sẽ gây hậu quả nghiêm trọng vì bệnh nhân có thể tử vong khi không được điều trị kịp thời, trong khi việc chẩn đoán nhầm người bình thường thành bệnh nhân thì hậu quả có thể ít nghiêm trọng hơn (do vẫn còn cơ hội kiểm chứng lại với những xét nghiệm bổ sung).

Hai chỉ số khác hiếm gặp hơn là:

False discovery rate (FDR), tỉ lệ phát hiện nhầm, có ý nghĩa nghịch với Precision (PPV).

\

False omission rate (FOR): tỉ lệ loại trừ nhầm

\

Lưu ý: tạm thời chúng ta tách khái niệm FPR, FNR, FDR ra khỏi khái niệm Sai lầm type I và Type II trong kiểm định giả thuyết thống kê, dù chúng có liên hệ với nhau. Thuật ngữ Sai lầm type I và II không giúp ích cho việc kiểm định mô hình phân loại.

Tương tự BAC, ta cũng có thể tính Balanced Error rate (tỉ lệ sai lầm sau cân bằng):

\

Brier score:

Điểm số Brier (BS) được giới thiệu bởi Glenn W. Brier vào năm 1950. BS được xác định như giá trị trung bình của các bình phương sai số giữa xác suất dự báo bởi mô hình và xác suất thực tế. Lưu ý: BS chuyên biệt cho từng nhãn giá trị, thí dụ nếu đặt Positive làm mục tiêu, thì xác suất thực tế của một trường hợp Positive sẽ = 1, và ngược lại trường hợp negative có xác suất thực tế =0. Nếu trên một cá thể Positive mà mô hình ước tính ra xác suất là 0.79 chẳng hạn, thì bình phương khác biệt cho case đó là (0.79-1)^2 = 0.0441.

Một mô hình tốt sẽ ước tính xác suất với sai biệt nhỏ nhất có thể, cho tất cả nhãn giá trị và tất cả trường hợp trong mẫu kiểm định, khi đó Brier score sẽ thấp. Giá trị tối ưu của BS là 0, và giá trị tồi tệ nhất là 1. Do đó Brier score được xem như 1 tiêu chí để đánh giá khả năng Sai lầm của mô hình (tương tự FNR và FPR).

Ta có thể tính BS hoàn toàn thủ công hoặc sử dụng hàm bierscore trong package scoring

Logarithmic loss

Một chỉ số khác là logloss, được sử dụng nhiều trong giới Machine learning, logloss được định nghĩa như trung bình của -log(xác suất dự báo).

Cho bài toán nhị phân, ta mặc định tính logloss theo xác suất cho nhãn Positive.

\

Logloss nhắm đến mục tiêu đo lường sai biệt của mô hình, giá trị tối thiểu (mô hình chính xác nhất) của logloss=0, nhưng không có ngưỡng cao nhất.

Tương tự, ta có chỉ số Logarithmic scoring rule (LSR)

\ LSR trái dấu với logloss nhưng ý nghĩa tương đương, mô hình càng chính xác thì LSR càng gần 0. Mô hình càng kém chính xác thì LSR tiến về -Inf

Một chỉ số khác có thể tính là SSR : Spherical Scoring Rule,

SSR được xác định bằng trung bình của tích xác suất tiên lượng của một nhãn cho mỗi trường hợp i và tổng xác suất tiên lượng cho (các) nhãn j còn lại cho trường hợp i này :

\

Giá trị SSR có thể được tính bởi hàm sphscore của package scoring.

Xem thêm: Human Là Gì - Human Beings Có Nghĩa Là Gì

Mean misclassification error (MMCE)

Cuối cùng: Nếu xem kết quả kiểm định mô hình là một biến logical: Y=1 nếu phân loại nhầm, Y=0 nếu phân loại đúng, ta sẽ thống kê được sai số trung bình: Mean misclassification error (MMCE) :

\


8 Mô hình như test chẩn đoán:

Một khái niệm khác, rất phổ biến trong thống kê y học nhưng không được quan tâm bên giới Machine learning, đó là Likelihood ratios (Positive và Negative), tức tỉ số khả dĩ Dương và Âm.

LR+ được xác định bằng độ nhạy (của test chẩn đoán) chia cho (1-độ đặc hiệu). LR- được tính bằng (1-độ nhạy) chia cho độ đặc hiệu:

\ \

Một cách tổng quát, LR đo lường mức độ liên hệ giữa quy luật chẩn đoán và trạng thái bệnh lý. Thí dụ, LR+ cao (>1) cho thấy kết quả xét nghiệm dương tính có liên quan đến sự hiện diện của bệnh lý. Cạnh đó, LR còn là phương tiện trung gian cho phép biện luận, so sánh hiệu