Bài viết này được viết bởi Sarah Khatry và Haniyeh Mahmoudian, các nhà khoa học dữ liệu tại DataRobot.
Câu hỏi về thiên lệch trong các mô hình học máy đã thu hút rất nhiều sự chú ý trong những năm gần đây. Những câu chuyện về mô hình hoạt động sai lệch thường lên báo, và các luật sư nhân đạo, chính trị gia, nhà báo đều góp tiếng nói vào cuộc thảo luận về các nguyên tắc đạo đức và giá trị mà chúng ta muốn phản ánh trong các mô hình mình xây dựng.
Trong khi thiên lệch của con người là vấn đề nan giải và không phải lúc nào cũng dễ định nghĩa, thì thiên lệch trong học máy, xét cho cùng, là toán học. Có nhiều loại kiểm tra khác nhau mà bạn có thể thực hiện trên mô hình để xác định các dạng thiên lệch khác nhau trong dự đoán. Việc chọn bài kiểm tra nào chủ yếu phụ thuộc vào điều bạn quan tâm và bối cảnh sử dụng mô hình.
Một trong những bài kiểm tra có tính ứng dụng rộng rãi nhất là trạng thái công bằng thống kê (statistical parity), và hướng dẫn thực hành này sẽ đưa bạn đi qua từng bước. Lưu ý, thiên lệch luôn được đánh giá tương quan giữa các nhóm người khác nhau được xác định bởi một thuộc tính được bảo vệ trong dữ liệu của bạn, ví dụ: chủng tộc, giới tính, tuổi, xu hướng tính dục, quốc tịch, v.v.
Với trạng thái công bằng thống kê, mục tiêu của bạn là đo lường liệu các nhóm khác nhau có xác suất ngang nhau để đạt được kết quả thuận lợi hay không. Ví dụ kinh điển là một mô hình tuyển dụng, nơi bạn muốn đảm bảo rằng ứng viên nam và nữ có xác suất được tuyển ngang nhau. Trong một mô hình thiên lệch, bạn sẽ thấy một nhóm được ưu ái với xác suất cao hơn được tuyển, trong khi nhóm còn lại bị bất lợi.
Để minh họa cách thức hoạt động trong thực tế, trước tiên chúng ta sẽ tạo dữ liệu tổng hợp với mức thiên lệch được xác định sẵn, sau đó xác nhận qua phân tích rằng dữ liệu phản ánh đúng tình huống mong muốn, và cuối cùng áp dụng bài kiểm tra trạng thái công bằng thống kê.
Tạo dữ liệu tổng hợp
Trong hướng dẫn này, chúng ta sẽ dùng gói pandas trong Python, nhưng mọi bước trong quy trình cũng có thể tái hiện bằng R.
Để tạo dữ liệu tổng hợp với một thuộc tính được bảo vệ và các dự đoán của mô hình, trước hết ta cần chỉ định một số đầu vào: tổng số bản ghi, thuộc tính được bảo vệ (ở đây là hai giá trị chung A và B), và giá trị dự đoán gắn với kết quả thuận lợi, trong ví dụ này là giá trị 1.
num_row =1000# number of rows in the data
prot_att ='prot_att'# column name for protected attribute
model_pred_bin ='prediction'# column name for predictions
pos_label =1# prediction value associated to positive/favorable outcome
prot_group =['A','B']# two groups in our protected attributeĐược hỗ trợ bởi
Như ngoài đời thực, các nhóm A và B có thể không phân bố đồng đều trong dữ liệu. Trong đoạn mã dưới đây, chúng tôi quyết định 60% dân số trong dữ liệu thuộc nhóm được ưu ái B, những người có 30% khả năng nhận kết quả thuận lợi. Nhóm bất lợi A chiếm 40% còn lại và chỉ có 15% xác suất đạt kết quả thuận lợi.
priv_g ='B'# privileged group
priv_g_rate =60# 60% of the population is from group B
priv_p_rate =30# 30% of the predictions for group B was for favorable outcome 1
unpriv_p_rate =15# 15% of the predictions for group A was for favorable outcome 1
biased_list_priv =[prot_group[0]]*(100- priv_g_rate)+[prot_group[1]]* priv_g_rate
biased_list_pos_priv =[0]*(100- priv_p_rate)+[1]* priv_p_rate
biased_list_pos_unpriv =[0]*(100- unpriv_p_rate)+[1]* unpriv_p_rate
Được hỗ trợ bởi
Với mỗi bản ghi dữ liệu, chúng ta gán ngẫu nhiên một nhóm được bảo vệ và một dự đoán, sử dụng các trọng số thiên lệch đã chỉ định trước đó, rồi tạo một dataframe từ danh sách bản ghi.
list_df =[]# empty list to store the synthetic recordsfor i inrange(0, num_row):# generating random value representing protected groups with bias towards B
prot_rand = random.choices(biased_list_priv)[0]if prot_rand == priv_g:
prot_g = priv_g
# generating random binary value representing prediction with bias towards 0
pred = random.choices(biased_list_pos_priv)[0]# adding the new record to the list
list_df.append([prot_g,pred])else:
prot_g = prot_group[0]
pred = random.choices(biased_list_pos_unpriv)[0]
list_df.append([prot_g,pred])# create a dataframe from the list
df = pd.DataFrame(list_df,columns=['prot_att','prediction'])Được hỗ trợ bởi
Diễn giải dữ liệu
Bây giờ khi đã có dữ liệu tổng hợp, hãy phân tích những gì chúng ta đã xây dựng. Với mỗi nhóm, A so với B, xác suất phân lớp để đạt kết quả thuận lợi hoặc bất lợi là bao nhiêu?
df_group =(df.groupby([prot_att])[model_pred_bin].value_counts()/ df.groupby([prot_att])[
model_pred_bin].count()).reset_index(name='probability')print(df_group)
prot_att prediction probability
0 A 00.8494901 A 10.1505102 B 00.7138163 B 10.286184Được hỗ trợ bởi
Quan sát bảng, không khó để thấy nhóm B có khả năng đạt kết quả thuận lợi gần như gấp đôi, với xác suất 28,6%. Dữ liệu tổng hợp của chúng ta được thiết kế với xác suất 30%, vậy là đã khá sát. Sau đó, chúng ta lưu các xác suất này vào một từ điển.
Vì được tạo ngẫu nhiên, mã của bạn có thể cho kết quả hơi khác.
prot_att_dic ={}for att in prot_group:
temp = df_group[(df_group[prot_att]== att)&(df_group[model_pred_bin]== pos_label)]
prob =float(temp['probability'])
prot_att_dic[att]= prob
Được hỗ trợ bởi
Bài kiểm tra trạng thái công bằng thống kê
Với mỗi nhóm, trạng thái công bằng thống kê trả về tỷ lệ giữa xác suất đạt kết quả thuận lợi của nhóm đó so với xác suất đạt kết quả thuận lợi của nhóm được ưu ái. Chúng ta lặp qua từ điển các nhóm được bảo vệ cùng xác suất kết quả thuận lợi để xây dựng các tỷ lệ.
prot_test_res ={}for k in prot_att_dic.keys():
res =float(prot_att_dic[k]/ prot_att_dic[priv_g])
prot_test_res[k]= res
for key in prot_test_res.keys():
value = prot_test_res[key]print(key,' : ', value)
A :0.5259207131128314
B :1.0Được hỗ trợ bởi
Với nhóm được ưu ái B, điểm trạng thái công bằng thống kê là 1, đúng như kỳ vọng. Với nhóm còn lại A, điểm là 0,526, cho thấy họ có khả năng đạt kết quả thuận lợi xấp xỉ bằng một nửa so với nhóm B.
Bài kiểm tra thiên lệch thống kê cung cấp một cách đánh giá đơn giản về mức độ khác biệt của các kết quả dự đoán giữa những nhóm được chọn trong dữ liệu của bạn. Mục tiêu của việc đo lường thiên lệch là hai mặt. Một mặt, bài kiểm tra này cho ra một chỉ số minh bạch, giúp việc truyền đạt trở nên dễ dàng và cụ thể hơn. Nhưng lý tưởng nhất, việc nhận diện thiên lệch là bước đầu để bắt đầu giảm thiểu nó trong mô hình của bạn. Đây là một lĩnh vực nghiên cứu sôi động trong học máy, với nhiều kỹ thuật đang được phát triển để xử lý các dạng thiên lệch và cách tiếp cận mô hình khác nhau.
Với sự kết hợp phù hợp giữa các kỹ thuật kiểm tra và giảm thiểu, bạn có thể cải thiện mô hình theo hướng lặp, giảm thiên lệch và vẫn giữ được độ chính xác. Bạn có thể thiết kế các hệ thống học máy không chỉ học từ kết quả lịch sử mà còn phản ánh các giá trị của bạn trong quyết định tương lai.
Tìm hiểu cách xây dựng AI đáng tin cậy với DataRobot.
Bài viết này được viết bởi Sarah Khatry và Haniyeh Mahmoudian, các nhà khoa học dữ liệu tại DataRobot.
Câu hỏi về thiên lệch trong các mô hình học máy đã thu hút rất nhiều sự chú ý trong những năm gần đây. Những câu chuyện về mô hình hoạt động sai lệch thường lên báo, và các luật sư nhân đạo, chính trị gia, nhà báo đều góp tiếng nói vào cuộc thảo luận về các nguyên tắc đạo đức và giá trị mà chúng ta muốn phản ánh trong các mô hình mình xây dựng.
Trong khi thiên lệch của con người là vấn đề nan giải và không phải lúc nào cũng dễ định nghĩa, thì thiên lệch trong học máy, xét cho cùng, là toán học. Có nhiều loại kiểm tra khác nhau mà bạn có thể thực hiện trên mô hình để xác định các dạng thiên lệch khác nhau trong dự đoán. Việc chọn bài kiểm tra nào chủ yếu phụ thuộc vào điều bạn quan tâm và bối cảnh sử dụng mô hình.
Một trong những bài kiểm tra có tính ứng dụng rộng rãi nhất là trạng thái công bằng thống kê (statistical parity), và hướng dẫn thực hành này sẽ đưa bạn đi qua từng bước. Lưu ý, thiên lệch luôn được đánh giá tương quan giữa các nhóm người khác nhau được xác định bởi một thuộc tính được bảo vệ trong dữ liệu của bạn, ví dụ: chủng tộc, giới tính, tuổi, xu hướng tính dục, quốc tịch, v.v.
Với trạng thái công bằng thống kê, mục tiêu của bạn là đo lường liệu các nhóm khác nhau có xác suất ngang nhau để đạt được kết quả thuận lợi hay không. Ví dụ kinh điển là một mô hình tuyển dụng, nơi bạn muốn đảm bảo rằng ứng viên nam và nữ có xác suất được tuyển ngang nhau. Trong một mô hình thiên lệch, bạn sẽ thấy một nhóm được ưu ái với xác suất cao hơn được tuyển, trong khi nhóm còn lại bị bất lợi.
Để minh họa cách thức hoạt động trong thực tế, trước tiên chúng ta sẽ tạo dữ liệu tổng hợp với mức thiên lệch được xác định sẵn, sau đó xác nhận qua phân tích rằng dữ liệu phản ánh đúng tình huống mong muốn, và cuối cùng áp dụng bài kiểm tra trạng thái công bằng thống kê.
Tạo dữ liệu tổng hợp
Trong hướng dẫn này, chúng ta sẽ dùng gói pandas trong Python, nhưng mọi bước trong quy trình cũng có thể tái hiện bằng R.
Để tạo dữ liệu tổng hợp với một thuộc tính được bảo vệ và các dự đoán của mô hình, trước hết ta cần chỉ định một số đầu vào: tổng số bản ghi, thuộc tính được bảo vệ (ở đây là hai giá trị chung A và B), và giá trị dự đoán gắn với kết quả thuận lợi, trong ví dụ này là giá trị 1.
Như ngoài đời thực, các nhóm A và B có thể không phân bố đồng đều trong dữ liệu. Trong đoạn mã dưới đây, chúng tôi quyết định 60% dân số trong dữ liệu thuộc nhóm được ưu ái B, những người có 30% khả năng nhận kết quả thuận lợi. Nhóm bất lợi A chiếm 40% còn lại và chỉ có 15% xác suất đạt kết quả thuận lợi.
Với mỗi bản ghi dữ liệu, chúng ta gán ngẫu nhiên một nhóm được bảo vệ và một dự đoán, sử dụng các trọng số thiên lệch đã chỉ định trước đó, rồi tạo một dataframe từ danh sách bản ghi.
Diễn giải dữ liệu
Bây giờ khi đã có dữ liệu tổng hợp, hãy phân tích những gì chúng ta đã xây dựng. Với mỗi nhóm, A so với B, xác suất phân lớp để đạt kết quả thuận lợi hoặc bất lợi là bao nhiêu?
Quan sát bảng, không khó để thấy nhóm B có khả năng đạt kết quả thuận lợi gần như gấp đôi, với xác suất 28,6%. Dữ liệu tổng hợp của chúng ta được thiết kế với xác suất 30%, vậy là đã khá sát. Sau đó, chúng ta lưu các xác suất này vào một từ điển.
Vì được tạo ngẫu nhiên, mã của bạn có thể cho kết quả hơi khác.
Bài kiểm tra trạng thái công bằng thống kê
Với mỗi nhóm, trạng thái công bằng thống kê trả về tỷ lệ giữa xác suất đạt kết quả thuận lợi của nhóm đó so với xác suất đạt kết quả thuận lợi của nhóm được ưu ái. Chúng ta lặp qua từ điển các nhóm được bảo vệ cùng xác suất kết quả thuận lợi để xây dựng các tỷ lệ.
Với nhóm được ưu ái B, điểm trạng thái công bằng thống kê là 1, đúng như kỳ vọng. Với nhóm còn lại A, điểm là 0,526, cho thấy họ có khả năng đạt kết quả thuận lợi xấp xỉ bằng một nửa so với nhóm B.
Bài kiểm tra thiên lệch thống kê cung cấp một cách đánh giá đơn giản về mức độ khác biệt của các kết quả dự đoán giữa những nhóm được chọn trong dữ liệu của bạn. Mục tiêu của việc đo lường thiên lệch là hai mặt. Một mặt, bài kiểm tra này cho ra một chỉ số minh bạch, giúp việc truyền đạt trở nên dễ dàng và cụ thể hơn. Nhưng lý tưởng nhất, việc nhận diện thiên lệch là bước đầu để bắt đầu giảm thiểu nó trong mô hình của bạn. Đây là một lĩnh vực nghiên cứu sôi động trong học máy, với nhiều kỹ thuật đang được phát triển để xử lý các dạng thiên lệch và cách tiếp cận mô hình khác nhau.
Với sự kết hợp phù hợp giữa các kỹ thuật kiểm tra và giảm thiểu, bạn có thể cải thiện mô hình theo hướng lặp, giảm thiên lệch và vẫn giữ được độ chính xác. Bạn có thể thiết kế các hệ thống học máy không chỉ học từ kết quả lịch sử mà còn phản ánh các giá trị của bạn trong quyết định tương lai.
Tìm hiểu cách xây dựng AI đáng tin cậy với DataRobot.