MLOpsgiáo trình tự học
Chương 919 phút đọcGiám sát và huấn luyện lại

9Dịch chuyển phân phối#

Một giả định ngầm của mọi phương pháp học có giám sát là dữ liệu lúc sử dụng có cùng phân phối với dữ liệu lúc huấn luyện. Trong sản xuất, giả định đó chỉ đúng trong một thời gian. Người dùng thay đổi, sản phẩm thay đổi, thị trường thay đổi, và dữ liệu đi vào mô hình khác dần với dữ liệu nó đã học. Hiện tượng này gọi là dịch chuyển phân phối (distribution shift). Để phát hiện và xử lý nó, trước hết cần phân biệt các loại dịch chuyển, vì chúng có hậu quả rất khác nhau và không phải loại nào cũng phát hiện được bằng cùng một cách.

9.1Các loại dịch chuyển#

Mô hình học quan hệ giữa đầu vào XX và nhãn YY từ phân phối chung P(X,Y)P(X, Y). Theo quy tắc nhân của xác suất, phân phối chung có thể tách theo hai cách:

P(X,Y)  =  P(Y∣X) P(X)  =  P(X∣Y) P(Y).P(X, Y) \;=\; P(Y \mid X)\,P(X) \;=\; P(X \mid Y)\,P(Y).

Mỗi cách tách cho một cách mô tả sự thay đổi (Quiñonero-Candela và cộng sự, 2009). Theo cách tách thứ nhất, có thể chỉ P(X)P(X) thay đổi trong khi P(Y∣X)P(Y \mid X) giữ nguyên; trường hợp này gọi là covariate shift. Ví dụ, một chiến dịch quảng cáo thu hút nhiều khách hàng trẻ hơn: quan hệ giữa tuổi và hành vi mua hàng không đổi, chỉ có tỉ lệ người trẻ trong dữ liệu tăng lên. Cũng theo cách tách đó, có thể P(Y∣X)P(Y \mid X) thay đổi; trường hợp này gọi là concept drift. Ví dụ, ngân hàng thay đổi chính sách tín dụng, nên cùng một hồ sơ khách hàng giờ được đánh giá rủi ro khác trước. Theo cách tách thứ hai, có thể chỉ P(Y)P(Y) thay đổi trong khi P(X∣Y)P(X \mid Y) giữ nguyên; trường hợp này gọi là label shift (hay prior probability shift). Ví dụ, tỉ lệ giao dịch gian lận tăng gấp đôi trong dịp lễ, nhưng một giao dịch gian lận vẫn có đặc điểm như trước.

Vì covariate shift và concept drift là hai thành phần của cùng một cách tách, còn label shift thuộc cách tách kia, câu hỏi "đây là covariate shift hay label shift" không phải lúc nào cũng có câu trả lời duy nhất. Nó phụ thuộc vào việc ta coi XX gây ra YY, như đặc điểm khách hàng quyết định hành vi, hay YY gây ra XX, như bệnh gây ra triệu chứng. Trong thực tế, nhiều loại dịch chuyển thường xảy ra cùng lúc.

9.2Phát hiện dịch chuyển khi chưa có nhãn#

Trong sản xuất, đầu vào XX có ngay khi mô hình nhận yêu cầu, còn nhãn YY thường đến muộn hoặc không bao giờ đến (Mục 3.5). Vì vậy câu hỏi thực tế là: chỉ nhìn vào XX, ta phát hiện được loại dịch chuyển nào? Thí nghiệm trong code/mlops/experiments.py trả lời câu hỏi đó.

Dữ liệu có hai đặc trưng, X∼N(0,I)X \sim \mathcal N(0, I), và nhãn sinh theo mô hình logistic với trọng số w=(1,5; −1,0)w = (1{,}5;\ -1{,}0). Một hồi quy logistic được huấn luyện trên 4 000 mẫu, rồi được đánh giá trên ba tập dữ liệu mới, mỗi tập 4 000 mẫu, ứng với ba loại dịch chuyển. Với covariate shift, XX được lấy từ N(1,2; 1)\mathcal N(1{,}2;\ 1) trên mỗi trục, còn nhãn vẫn sinh theo quy tắc cũ. Với label shift, dữ liệu được lấy mẫu lại sao cho 80% mẫu có nhãn dương thay vì khoảng 50%, giữ nguyên P(X∣Y)P(X \mid Y). Với concept drift, XX có cùng phân phối như lúc huấn luyện nhưng nhãn sinh theo trọng số mới w=(−1,0; 1,5)w = (-1{,}0;\ 1{,}5). Với mỗi tập, ta đo hai đại lượng: độ chính xác của mô hình, cần có nhãn; và p-value của kiểm định Kolmogorov–Smirnov (KS) hai mẫu trên từng đặc trưng so với dữ liệu huấn luyện, không cần nhãn. Một dịch chuyển được coi là phát hiện được nếu p-value nhỏ nhất trong hai đặc trưng dưới 10−310^{-3}.

Hình 10
Hình 10. Dữ liệu huấn luyện (xám), dữ liệu mới (màu) và biên quyết định của mô hình trong ba trường hợp. Ở hai trường hợp đầu, đám mây dữ liệu dịch chuyển và nhìn thấy được. Ở trường hợp concept drift, đám mây không đổi, chỉ có nhãn thay đổi, và độ chính xác giảm mạnh.
Trường hợp Độ chính xác p-value KS trên x1x_1 p-value KS trên x2x_2 Phát hiện được chỉ từ XX
Không dịch chuyển 75,6%
Covariate shift 76,4% ≈0\approx 0 ≈0\approx 0 có
Label shift 75,1% 1,2×10−291{,}2\times10^{-29} 2,2×10−72{,}2\times10^{-7} có
Concept drift 26,9% 0,480{,}48 0,0430{,}043 không

Bảng kết quả cho thấy hai điều trái ngược nhau. Ở hai trường hợp giữa, kiểm định KS phát hiện thay đổi rất rõ, với p-value gần như bằng 0, nhưng độ chính xác gần như không đổi. Với covariate shift, lý do là mô hình logistic có dạng đúng với quy tắc sinh nhãn, nên dữ liệu dịch sang vùng khác không làm nó sai; covariate shift chỉ gây hại khi mô hình phải ngoại suy sang vùng có ít dữ liệu huấn luyện mà nó mô tả sai. Với label shift, XX thay đổi vì XX mang thông tin về YY: tỉ lệ nhãn thay đổi thì phân phối của XX cũng thay đổi theo. Nếu hệ thống cảnh báo dựa trên thay đổi của XX, cả hai trường hợp này đều thành báo động giả, đúng loại khó khăn được nhắc nhiều nhất ở Mục 3.2.

Ở dòng cuối thì ngược lại: độ chính xác giảm từ 75,6% xuống 26,9%, thấp hơn cả đoán ngẫu nhiên, trong khi các kiểm định trên XX không thấy gì bất thường. Giá trị p=0,043p = 0{,}043 trên x2x_2 chỉ là dao động ngẫu nhiên, vì phân phối của XX không hề đổi; nếu dùng ngưỡng 0,05 quen thuộc, nó sẽ bị tính là phát hiện được, một ví dụ của vấn đề kiểm định nhiều lần mà Mục 9.3 sẽ bàn.

Kết quả này không phải ngẫu nhiên mà suy ra được từ định nghĩa: concept drift có thể giữ nguyên P(X)P(X), nên không phép kiểm tra nào chỉ dựa trên XX phát hiện được nó. Muốn phát hiện concept drift phải có tín hiệu về nhãn: nhãn thật, nhãn đến trễ, nhãn thay thế, hoặc phản hồi gián tiếp của người dùng. Đây là lý do Mục 3.5 nói độ trễ nhãn quyết định khả năng giám sát của hệ thống: nó quyết định ta có phát hiện được loại dịch chuyển gây hại nhiều nhất hay không.

9.3Các kiểm định thống kê#

Với dữ liệu thật, có nhiều cách so sánh phân phối hiện tại với phân phối tham chiếu. Kiểm định Kolmogorov–Smirnov hai mẫu dùng cho biến liên tục một chiều; nó không giả định dạng phân phối và cho p-value, nhưng với cỡ mẫu rất lớn thì những khác biệt nhỏ không đáng kể cũng thành có ý nghĩa thống kê. Kiểm định khi bình phương dùng cho biến rời rạc hoặc đã chia bin; nó có lý thuyết rõ ràng nhưng phụ thuộc vào cách chia bin và kém chính xác khi có bin ít mẫu. PSI, trình bày ở Mục 9.4, cho một con số dễ báo cáo nhưng không có p-value. Với dữ liệu nhiều chiều có MMD (maximum mean discrepancy), đo khoảng cách giữa hai phân phối qua một hàm kernel và kiểm định bằng hoán vị, và cách dùng một bộ phân loại miền (domain classifier): huấn luyện một mô hình phân biệt dữ liệu cũ với dữ liệu mới; nếu nó làm tốt hơn đoán ngẫu nhiên thì dữ liệu đã thay đổi, và AUC của nó đo mức độ thay đổi.

Rabanser và cộng sự (2019) so sánh có hệ thống các phương pháp này và thấy một cách đơn giản cho kết quả tốt: áp dụng kiểm định KS lên đầu ra của mô hình (xác suất dự đoán cho từng lớp) thay vì lên từng đặc trưng đầu vào, kèm hiệu chỉnh Bonferroni. Đầu ra có ít chiều hơn đầu vào nhiều, và tập trung đúng vào những thay đổi có ảnh hưởng tới dự đoán. Mục 10.3 sẽ dùng một ý tưởng gần với cách này.

Khi áp dụng các kiểm định trên cho nhiều đặc trưng, cần nhớ hai điều. Điều thứ nhất là kiểm định nhiều lần: chạy KS trên 200 đặc trưng ở mức α=0,01\alpha = 0{,}01 thì trung bình có 2 đặc trưng báo động ở mỗi lần kiểm tra dù không có gì thay đổi, nên cần hiệu chỉnh (Bonferroni, Benjamini–Hochberg) hoặc dùng một phép kiểm tra nhiều chiều. Điều thứ hai là nhiều dịch chuyển nằm ở quan hệ giữa các đặc trưng chứ không ở từng đặc trưng: mỗi đặc trưng vẫn giữ phân phối cũ nhưng tương quan giữa chúng thay đổi, và chỉ các phép kiểm tra nhiều chiều mới phát hiện được.

9.4Chỉ số PSI#

Trong các phép đo dịch chuyển, PSI (population stability index) được dùng rộng rãi nhất trong công nghiệp, đặc biệt trong lĩnh vực chấm điểm tín dụng nơi nó ra đời. PSI được tính trên hai phân phối đã chia thành kk bin. Gọi BjB_j là tỉ lệ mẫu rơi vào bin jj trong tập tham chiếu và TjT_j là tỉ lệ đó trong tập hiện tại:

PSI  =  ∑j=1k(Tj−Bj) ln⁡TjBj.\mathrm{PSI} \;=\; \sum_{j=1}^{k} (T_j - B_j)\,\ln\frac{T_j}{B_j}.

Công thức này có một cách hiểu gọn hơn. Tách tổng thành hai phần:

PSI=∑jTjln⁡TjBj+∑jBjln⁡BjTj=DKL(T ∥ B)+DKL(B ∥ T).\begin{aligned} \mathrm{PSI} &= \sum_j T_j \ln\frac{T_j}{B_j} + \sum_j B_j \ln\frac{B_j}{T_j} \\ &= D_{\mathrm{KL}}(T \,\|\, B) + D_{\mathrm{KL}}(B \,\|\, T). \end{aligned}

Vậy PSI là tổng hai chiều của phân kỳ KL, còn gọi là phân kỳ Jeffreys; khác với phân kỳ KL, nó đối xứng giữa hai phân phối. Chẳng hạn với hai bin, tập tham chiếu chia đều B=(0,5; 0,5)B = (0{,}5;\ 0{,}5) còn tập hiện tại là T=(0,6; 0,4)T = (0{,}6;\ 0{,}4): PSI bằng 0,1ln⁡1,2+(−0,1)ln⁡0,8=0,0182+0,0223=0,04050{,}1 \ln 1{,}2 + (-0{,}1)\ln 0{,}8 = 0{,}0182 + 0{,}0223 = 0{,}0405, và cũng bằng tổng của DKL(T ∥ B)=0,0201D_{\mathrm{KL}}(T \,\|\, B) = 0{,}0201 và DKL(B ∥ T)=0,0204D_{\mathrm{KL}}(B \,\|\, T) = 0{,}0204. Một thay đổi 10 điểm phần trăm ở mỗi bin vẫn nằm dưới ngưỡng 0,10 thường dùng. Vì có ln⁡(Tj/Bj)\ln(T_j/B_j), PSI không xác định khi một bin không có mẫu nào, nên các cài đặt thường thay tỉ lệ 0 bằng một số dương rất nhỏ.

Đi kèm PSI là một bộ ngưỡng quy ước được trích dẫn rất nhiều: PSI dưới 0,10 coi như phân phối ổn định, từ 0,10 tới 0,25 là có dịch chuyển nhỏ nên xem xét, trên 0,25 là dịch chuyển đáng kể cần hành động. Mục tiếp theo cho thấy vì sao không nên dùng thẳng bộ ngưỡng này.

9.5Ngưỡng của PSI#

Ba ngưỡng 0,10 và 0,25 là quy tắc kinh nghiệm, không phải kết quả thống kê. Yurdakul và Naranjo (2020) chỉ ra rằng khi hai mẫu có cùng phân phối, PSI nhân với một hệ số phụ thuộc cỡ mẫu có phân phối tiệm cận khi bình phương, và đề xuất dùng giá trị tới hạn tính từ phân phối đó thay cho quy tắc kinh nghiệm, vì giá trị tới hạn phụ thuộc cả vào cỡ mẫu lẫn số bin.

Có thể thấy điều này bằng một mô phỏng đơn giản. Lấy hai mẫu từ cùng một phân phối chuẩn, tức không có dịch chuyển nào, chia bin theo phân vị của mẫu tham chiếu, rồi tính PSI; lặp lại 300 lần và lấy trung bình:

Hình 11
Hình 11. PSI trung bình khi hai mẫu cùng phân phối, theo cỡ mẫu, với 5, 10 và 20 bin. Đường chấm là giá trị lý thuyết 2(k−1)/n2(k-1)/n; hai đường ngang là các ngưỡng 0,10 và 0,25.
nn mỗi mẫu k=5k = 5 k=10k = 10 k=20k = 20 Lý thuyết 2(k−1)/n2(k-1)/n, k=10k = 10
200 0,0399 0,0943 0,2050 0,0900
500 0,0164 0,0353 0,0795 0,0360
1 000 0,0080 0,0179 0,0381 0,0180
5 000 0,0015 0,0037 0,0076 0,0036
20 000 0,0004 0,0009 0,0019 0,0009

PSI trung bình bám sát giá trị 2(k−1)/n2(k-1)/n. Có thể giải thích con số này như sau. Khi hai mẫu cùng phân phối, TjT_j và BjB_j đều gần xác suất thật pjp_j của bin jj, và chênh lệch giữa chúng có độ lớn cỡ 1/n1/\sqrt n. Dùng xấp xỉ ln⁡(Tj/Bj)≈(Tj−Bj)/pj\ln(T_j/B_j) \approx (T_j - B_j)/p_j, ta được

PSI≈∑j(Tj−Bj)2pj.\mathrm{PSI} \approx \sum_j \frac{(T_j - B_j)^2}{p_j}.

Với hai mẫu độc lập cùng cỡ nn, Var⁡(Tj−Bj)=2pj(1−pj)/n\operatorname{Var}(T_j - B_j) = 2p_j(1-p_j)/n, nên n2 PSI\tfrac{n}{2}\,\mathrm{PSI} có phân phối xấp xỉ khi bình phương với k−1k-1 bậc tự do, đúng với kết quả tiệm cận nêu trên. Lấy kỳ vọng hai vế:

E[PSI∣khoˆng coˊ dịch chuyển]  ≈  2(k−1)n.\mathbb{E}[\mathrm{PSI} \mid \text{không có dịch chuyển}] \;\approx\; \frac{2(k-1)}{n}.

Hai đầu của bảng cho thấy vấn đề của ngưỡng cố định. Với n=200n = 200 và 20 bin, PSI trung bình là 0,205 khi không có dịch chuyển nào, đã rất gần ngưỡng 0,25. Với n=20 000n = 20\,000, PSI trung bình chỉ là 0,0009, nên ngưỡng 0,25 khó bị vượt ngay cả khi có dịch chuyển thật. Cùng một ngưỡng vì thế vừa gây báo động giả ở mẫu nhỏ, vừa bỏ sót dịch chuyển ở mẫu lớn.

Thí nghiệm tiếp theo đo trực tiếp hai hiện tượng đó. Với mỗi cỡ mẫu nn và mỗi độ dịch chuyển δ\delta (mẫu mới có trung bình dịch đi δ\delta lần độ lệch chuẩn), ta lặp lại 400 lần và đếm tỉ lệ số lần mỗi quy tắc báo động. Quy tắc thứ nhất là PSI lớn hơn 0,25 với 10 bin; quy tắc thứ hai là kiểm định KS với p<0,01p < 0{,}01.

Hình 12
Hình 12. Tỉ lệ báo động theo độ dịch chuyển thật δ\delta. Trái: quy tắc PSI > 0,25. Phải: kiểm định KS với p<0,01p < 0{,}01.

Mỗi ô ghi tỉ lệ báo động của quy tắc PSI, rồi của kiểm định KS:

nn δ=0\delta = 0 (không dịch chuyển) δ=0,1\delta = 0{,}1 δ=0,3\delta = 0{,}3
50 73% / 0% 78% / 1% 82% / 5%
100 24% / 1% 24% / 2% 54% / 24%
200 0% / 0% 0% / 5% 17% / 49%
1 000 0% / 2% 0% / 22% 0% / 100%
10 000 0% / 0% 0% / 100% 0% / 100%

Cột δ=0\delta = 0 là tỉ lệ báo động giả. Với n=50n = 50, quy tắc PSI báo động 73% số lần dù không có gì thay đổi, còn kiểm định KS giữ tỉ lệ báo động giả quanh mức danh nghĩa 1% ở mọi cỡ mẫu. Hai cột còn lại là độ nhạy. Với n=1 000n = 1\,000 và dịch chuyển thật 0,3 độ lệch chuẩn, quy tắc PSI không báo động lần nào, trong khi KS báo động ở cả 400 lần. Ở cỡ mẫu nhỏ, tỉ lệ báo động của PSI gần như không phụ thuộc vào việc có dịch chuyển hay không: 73% khi không có dịch chuyển, 78% với δ=0,1\delta = 0{,}1.

Từ đó có ba cách làm tốt hơn, theo thứ tự ưu tiên. Cách tốt nhất là dùng kiểm định có p-value (KS, khi bình phương, MMD với kiểm định hoán vị) kèm hiệu chỉnh cho kiểm định nhiều lần; ngưỡng khi đó tự điều chỉnh theo cỡ mẫu. Nếu buộc phải dùng PSI, chẳng hạn vì quy định của ngành hoặc vì báo cáo đã quen dùng, hãy tính ngưỡng theo đúng nn và kk của mình. Với hai mẫu cùng cỡ nn, kết quả ở trên cho ngưỡng ở mức ý nghĩa α\alpha là 2n χk−1, 1−α2\tfrac{2}{n}\,\chi^2_{k-1,\,1-\alpha}. Ví dụ với k=10k = 10 và α=0,01\alpha = 0{,}01, χ9; 0,992=21,67\chi^2_{9;\,0{,}99} = 21{,}67, nên ngưỡng là 0,217 khi n=200n = 200, 0,043 khi n=1 000n = 1\,000 và 0,0043 khi n=10 000n = 10\,000. Cũng có thể xác định ngưỡng bằng mô phỏng: lấy nhiều cặp mẫu từ dữ liệu tham chiếu, tính PSI và dùng phân vị 99% làm ngưỡng. Cuối cùng, dù dùng cách nào, cần giữ cố định nn và kk giữa các lần đo; nếu cỡ lô thay đổi theo ngày thì PSI của hai ngày không so sánh được với nhau.

9.6Cửa sổ thời gian và tập tham chiếu#

Mọi phép kiểm tra dịch chuyển đều so sánh dữ liệu trong một cửa sổ hiện tại với một tập tham chiếu, và cả hai đều phải được chọn.

Cửa sổ hiện tại ngắn, ví dụ một giờ, cho phép phát hiện thay đổi nhanh nhưng nhiễu lớn và sinh nhiều báo động giả. Cửa sổ dài, ví dụ một tuần, ổn định hơn nhưng làm loãng các thay đổi đột ngột và phát hiện chúng muộn.

Với tập tham chiếu, nếu dùng cố định dữ liệu huấn luyện, phép kiểm tra trả lời đúng câu hỏi "dữ liệu hiện tại đã khác dữ liệu huấn luyện tới đâu", nhưng sẽ tiếp tục báo động cả khi dịch chuyển đã ổn định thành trạng thái bình thường mới. Nếu dùng tham chiếu trượt, ví dụ 30 ngày gần nhất, phép kiểm tra thích ứng với trạng thái bình thường mới, nhưng không phát hiện được dịch chuyển chậm, vì tập tham chiếu trôi theo dữ liệu. Điều này nguy hiểm, vì Chương 11 sẽ cho thấy dịch chuyển chậm có thể gây thiệt hại lớn. Cách làm hợp lý là dùng cả hai: tham chiếu cố định để biết dữ liệu đã cách xa dữ liệu huấn luyện bao nhiêu, tham chiếu trượt để phát hiện thay đổi đột ngột.

Một khó khăn khác là tính mùa vụ. Lưu lượng ngày thứ Bảy khác ngày thứ Ba, tháng Chạp khác tháng Ba. So dữ liệu thứ Bảy với tham chiếu tính trên các ngày thường sẽ báo động đều đặn mỗi tuần mà không có ý nghĩa gì. Cách xử lý tối thiểu là so sánh cùng kỳ, chẳng hạn thứ Bảy với các thứ Bảy trước.

9.7Tóm tắt#

Dịch chuyển phân phối có ba loại chính: covariate shift thay đổi P(X)P(X), label shift thay đổi P(Y)P(Y), và concept drift thay đổi P(Y∣X)P(Y \mid X). Chỉ hai loại đầu phát hiện được khi chỉ có XX, và trong thí nghiệm ở Mục 9.2, chúng gần như không làm giảm độ chính xác; concept drift làm độ chính xác giảm từ 75,6% xuống 26,9% mà không phép kiểm tra nào trên XX nhận ra. Để đo dịch chuyển nên dùng kiểm định có p-value kèm hiệu chỉnh cho kiểm định nhiều lần; ngưỡng PSI 0,25 không dùng được cho mọi cỡ mẫu vì PSI trung bình khi không có dịch chuyển xấp xỉ 2(k−1)/n2(k-1)/n. Cửa sổ thời gian và tập tham chiếu cũng cần được chọn cẩn thận để không bỏ sót dịch chuyển chậm.

Phát hiện dịch chuyển chỉ là một phần của việc theo dõi mô hình trong sản xuất. Chương 10 đặt các phép kiểm tra này vào một hệ thống giám sát đầy đủ.


Tự kiểm tra

7 câu. Chọn đáp án để xem ngay lời giải thích.

  1. 1Loại dịch chuyển nào không phát hiện được bằng cách chỉ giám sát XX?

  2. 2Vì sao label shift phát hiện được qua phân phối của XX?

  3. 3PSI là đại lượng gì?

  4. 4Vì sao không nên dùng ngưỡng PSI 0,25 cho mọi cỡ mẫu?

  5. 5Với hai mẫu cùng cỡ n=1 000n = 1\,000 và k=10k = 10 bin, ngưỡng PSI ở mức ý nghĩa 1% xấp xỉ bằng bao nhiêu?

  6. 6Theo Rabanser và cộng sự (2019), một cách đơn giản mà hiệu quả để phát hiện dịch chuyển là gì?

  7. 7Dùng tham chiếu trượt 30 ngày để phát hiện dịch chuyển có nhược điểm gì?

Đã trả lời 0/7