단원 홈
3단원 · 7차시

정확도는 같은데 차별은 어디에
공정성을 숫자로 재기

2단원 3차시에서 우리는 “집단으로 갈라 재라”를 배웠습니다. 그런데 오늘 갈라 재 보면 두 집단의 정확도가 둘 다 83.0%로 똑같이 나옵니다. 같은 데이터에서 억울하게 떨어진 사람의 비율은 두 배 차이가 납니다. 이 두 문장이 동시에 참일 수 있을까요?

성취기준 12인기03-04
민감 속성대리변수 기저율공정성 세 정의 설명 가능한 인공지능(XAI)이의 제기
🎯 학습 목표
  • 민감 속성을 데이터에서 지워도 대리변수가 그 자리를 대신한다는 것을 복원 정확도라는 숫자로 확인하고, ‘지웠으니 공정하다’는 주장을 반박할 수 있다.
  • 공정성의 세 정의(선발률 · 오탈락률 · 정밀도를 맞추는 것)가 서로 다른 기준점을 가리킨다는 것을 시뮬레이터로 직접 찾아내고, 셋을 동시에 맞출 수 없다는 것을 전수 결과로 말할 수 있다.
  • 한 사람의 탈락 판정을 제거 기여도로 뜯어보고, 그 설명이 왜 이의 제기 절차의 출발점이 되는지를 1단원 12차시의 후향 추론과 견주어 설명할 수 있다.
🤔

여는 장면 — 갈라 쟀는데 똑같이 나오면

2단원 3차시의 마지막에 우리는 습관 하나를 챙겼습니다. “정확도 몇 %”라는 문장을 만나면 두 가지를 묻자고 했지요. 누구를 대상으로 잰 숫자인가, 그리고 집단으로 갈라 재면 어떻게 되는가. 그때는 갈라 재기만 하면 숨은 것이 드러났습니다. 전체 85.0% 뒤에 어두운 털 사진 20.0%가 숨어 있었으니까요.

그런데 오늘 다룰 표에서는 갈라 재도 아무것도 드러나지 않습니다. 두 집단의 정확도가 83.0%로 소수점까지 같습니다. 보고서에 한 줄만 쓴다면 여기서 끝났을 것입니다 — “집단 간 성능 차이 없음.” 그런데 같은 표에서 적격한데 떨어진 사람의 비율은 12.2%와 24.3%, 정확히 2.00배입니다.

📖 이미 한 번 만난 논쟁

2단원 3차시에서 재범 위험 점수 프로그램 이야기를 짧게 지나갔습니다. 언론이 집단별로 갈라 재 보니 실제로는 다시 죄를 짓지 않은 사람을 ‘위험함’으로 잘못 표시한 비율이 집단에 따라 크게 달랐고(거짓 음성 쪽은 반대 방향이었습니다), 만든 회사는 “두 집단에서 예측 정확도가 같으므로 편향이 아니다”라고 반박했습니다.

2단원 3차시는 여기까지 적고 넘어갔습니다 — “양쪽 다 자기 숫자를 정확히 계산했고, 서로 다른 ‘공정’을 말하고 있었을 뿐”이라고요. 오늘 이어받는 물음은 그다음입니다. 그 ‘서로 다른 공정’은 몇 가지이고, 왜 둘을 함께 맞출 수 없었나? 양쪽이 옳았다는 말은 논쟁의 끝이 아니라 시작입니다.

출처: ProPublica, “Machine Bias” (2016-05) / 개발사 반박은 Federal Probation 80(2). 구체 수치는 이 교과서가 원문을 확인하지 못해 방향만 적습니다.

“다른 공정성”이라는 말이 이상하게 들릴 것입니다. 공정한 것은 하나 아닌가요? 오늘 40분은 그 물음을 숫자로 쪼개는 시간입니다. 우리는 지원자 200명짜리 표를 직접 만들어, 기준점을 손으로 옮겨 가며 공정성의 세 가지 뜻이 서로 다른 자리를 가리키는 것을 눈으로 봅니다.

💭 오늘의 물음

모델이 ‘집단’이라는 열을 본 적조차 없는데 결과가 갈린다면, 무엇을 고쳐야 할까?
그리고 ‘공정하게 고쳤다’는 말은 정확히 무엇을 같게 만들었다는 뜻일까?

⚠️ 오늘 다루는 숫자에는 두 종류가 있습니다

① 사실 바깥 세상에서 실제로 일어난 일과 법 조문입니다. 이 교과서는 출처를 함께 적습니다.

② 계산 우리가 만든 지원자 200명 표에서 나온 값입니다. 세상의 채용 통계가 아닙니다. 이 교과서는 가정을 함께 적습니다. 둘을 섞어 읽으면 거짓말이 됩니다.

1

편향은 데이터 안에서만 생기지 않는다 — 앞뒤로 문이 더 있다

2단원 3차시는 편향이 데이터를 만드는 과정에서 들어온다고 했고, 들어오는 문 셋에 이름을 붙였습니다 — 표집 편향 · 이름표 편향 · 역사적 편향. 그 셋은 오늘도 그대로 참입니다. 오늘 하는 일은 그 문 앞뒤를 마저 여는 것입니다. 데이터가 만들어지기 전에 사람이 내린 결정과, 데이터가 만들어진 뒤에 우리가 기계에게 시킨 일이 남아 있기 때문입니다.

① 사람 무엇을 ‘적격’이라 부를지 정한다 어떤 열을 넣을지도 ② 데이터 누가 얼마나 기록됐나 표집 · 이름표 · 역사 (2단원 3차시) ③ 알고리즘 무엇을 최대로 만들라 시켰나 · 무엇으로 잘했다고 쟀나 판정 합격 · 탈락 한 사람의 한 해가 여기서 갈린다 되먹임 — 오늘의 판정이 내년의 데이터가 된다 뽑힌 사람의 결과만 확인된다. 떨어뜨린 사람이 잘했을지는 영영 기록되지 않는다. 그래서 이 고리는 스스로를 증명하는 쪽으로 돈다.
편향이 들어오는 자리는 셋이고, 그중 데이터는 가운데 하나일 뿐입니다. 처방이 저마다 다르기 때문에 갈라 두는 것입니다.

문 ① — 사람: 무엇을 ‘정답’이라 부를지 정하는 일

채용 모델을 만들려면 먼저 무엇을 맞혀야 하는지를 정해야 합니다. ‘좋은 지원자’는 데이터에 그대로 적혀 있지 않습니다. 그래서 사람이 대신할 것을 고릅니다 — 1년 뒤 재직 여부, 첫해 인사 평가 점수, 상사가 매긴 별점 같은 것들입니다.

이 고르는 일 자체가 판단입니다. 1년 뒤 재직 여부를 정답으로 삼으면, 육아나 간병으로 잠시 일을 쉰 사람은 자동으로 ‘나쁜 지원자’가 됩니다. 상사의 별점을 정답으로 삼으면, 그 상사가 가진 기준이 그대로 모델의 기준이 됩니다. 모델이 배우는 것은 세상의 진실이 아니라 우리가 진실이라고 부르기로 한 것입니다. 어떤 열을 넣을지, 어떤 열을 버릴지 정하는 것도 같은 자리에서 일어납니다.

문 ③ — 알고리즘: 무엇을 최대로 만들라고 시켰나

이쪽은 2단원 3차시가 다루지 않은 자리입니다. 학습이란 결국 어떤 숫자 하나를 가장 크게(또는 작게) 만드는 일이었지요. 그 숫자를 전체 정확도로 정하면 무슨 일이 생길까요?

전체 정확도는 사람 수로 저울질한 평균입니다. 100명 중 10명뿐인 집단은 그 평균에 10분의 1만큼만 들어갑니다. 그 10명을 다 맞히다가 통째로 틀리게 되어도 전체 정확도는 10%p밖에 떨어지지 않습니다. 그런데 나머지 90명에서 정확도를 12%p 올리면 전체는 0.9 × 12 = 10.8%p 오릅니다. 두 장부를 합치면 +0.8%p — 소수 집단을 통째로 버리는 쪽이 ‘더 잘한 것’으로 기록됩니다. 알고리즘은 나쁜 마음을 먹은 것이 아니라 시킨 일을 정확히 한 것입니다.

평가 지표도 같습니다. 완성된 모델을 정확도 하나로만 재면, 오늘 우리가 볼 표는 아무 문제 없이 통과합니다. 두 집단 모두 83.0%니까요. 마지막으로 기준점을 어디에 둘지도 사람이 정합니다. 2단원 12차시에서 기준점을 옮기면 정밀도와 재현율이 반대로 움직이는 것을 보았지요. 오늘은 그 손잡이가 집단 사이의 격차까지 움직인다는 것을 보게 됩니다.

파리 과학관 건물 앞 광장에 흩어져 모인 여러 연령대의 군중과, 한가운데 놓인 커다란 위키백과 지구본 모양 풍선
한 국제 행사 날, 파리의 과학관 앞 광장에 모여든 군중입니다. 나이도 옷차림도 저마다 다릅니다. 모델이 판정을 내리는 대상은 결국 이런 사람들입니다. ‘평균 정확도’라는 한 숫자는 이 사람들을 전부 한 줄에 눌러 담은 값입니다 — 누가 그 평균에 얼마만큼 들어갔는지는 그 숫자 안에서 보이지 않습니다. 출처: Nattes à chat, Wikimedia Commons (CC BY-SA 4.0)
2

같은 기준을 똑같이 적용했는데 — 지원자 200명의 표

이제 숫자로 들어갑니다. 오늘 쓰는 표는 서류 200장입니다. A집단 100명, B집단 100명이고, 사람마다 여덟 개의 열이 있습니다. 이 표가 어디서 왔는지 먼저 밝혀 두겠습니다.

⚠️ ② 계산 이 표는 우리가 만든 것입니다

실제 채용 통계가 아닙니다. 파이썬으로 씨앗 1401을 고정해 생성했고, 가정 다섯 개가 프로그램 안에 그대로 적혀 있습니다.

  • 가정 1 잠재 실력의 중심이 A는 0.55, B는 0.46이다.
  • 가정 2 거주구역은 집단과 강하게 얽혀 있고 실력과는 아무 상관이 없다.
  • 가정 3 경력공백도 B집단에 더 많다.
  • 가정 4 자격증만이 실력의 신호다.
  • 가정 5 지원분야는 집단과 무관하다 — 대조군으로 넣어 둔 열이다.

A집단 · B집단에 실제 이름을 붙이지 마세요. 성별이나 지역이나 출신 학교로 바꿔 읽는 순간, 이 표는 그 집단에 대한 주장이 됩니다. 우리는 그런 조사를 한 적이 없습니다.

모델은 점수를 이렇게 매깁니다. 다섯 항의 덧셈 하나가 전부입니다.

ℹ️ 모델 점수 공식

점수 = 0.34 + 0.15×자격증 − 0.006×경력공백(개월)
       − 0.030×(거주구역−1) ± 0.03(고교보정) + 잡음

★ 이 공식에 ‘집단’은 없습니다. 한 글자도 들어 있지 않습니다. 모델은 누가 A이고 누가 B인지 알지 못합니다. 그런데도 결과가 갈립니다 — 오늘 수업의 절반은 그 이유를 밝히는 일입니다.

그렇게 만든 표에서 두 열이 유난히 눈에 띕니다. 거주구역과 경력공백입니다.

집단거주구역경력공백
1구역2구역3구역4구역0개월3개월6개월12개월
A집단 100명5725126 7414111
B집단 100명6113251 37262116
② 계산 지원자 200명 표(씨앗 1401)의 분포입니다. 여기가 오늘의 씨앗입니다 — 집단 열은 지울 수 있어도, 이 두 줄은 남습니다.

이제 두 집단에 똑같은 기준점 0.50을 적용해 봅시다. 한쪽만 봐주지도 않고 한쪽만 깎지도 않습니다. 같은 자로 잽니다.

집단기저율 정확도선발률오탈락률정밀도
A집단74.0 %83.0 % 73.0 %12.2 %89.0 %
B집단37.0 %83.0 % 36.0 %24.3 %77.8 %
② 계산 기준점 0.50을 두 집단에 똑같이 적용한 결과입니다. 정확도는 83.0%로 소수점까지 같고, 오탈락률은 정확히 2.00배입니다.

2단원 12차시의 네 칸으로 다시 보면 더 또렷합니다. ‘뽑음/탈락’과 ‘적격/부적격’을 곱해 만든 그 표입니다.

TP — 뽑음 · 적격 A 65  /  B 28

제대로 뽑은 사람

FP — 뽑음 · 부적격 (오검출) A 8  /  B 8

헛짚어 뽑은 사람

FN — 탈락 · 적격 (오탈락) A 9  /  B 9

사람 수는 똑같이 9명입니다.

TN — 탈락 · 부적격 A 18  /  B 55

제대로 거른 사람

여기서 오늘의 첫 번째 뒤통수가 나옵니다. 억울하게 떨어진 사람은 9명과 9명으로 똑같습니다. 그런데 오탈락률은 12.2%와 24.3%로 두 배 차이가 납니다. 왜 그럴까요?

분모가 다르기 때문입니다. A집단에는 적격자가 74명, B집단에는 37명입니다. 같은 9명이라도 74명 중 9명과 37명 중 9명은 전혀 다른 이야기입니다. ‘몇 명’이 아니라 ‘몇 분의 몇’을 봐야 보이는 차별이 있습니다.

⚠️ 여기서 절대 하면 안 되는 읽기

기저율이 74%와 37%로 다릅니다. 이것을 보고 “B집단이 실제로 실력이 낮으니 덜 뽑히는 게 당연하다”고 읽으면 오늘 차시는 여기서 끝납니다. 그리고 그 읽기는 이 데이터가 확정하지 않은 주장입니다.

우리는 A와 B의 잠재 실력 중심을 다르게 두었습니다(가정 1). 그런데 그 차이가 어디서 왔는지 데이터는 말하지 않습니다. 타고난 것인지, 지금까지 누가 자격증을 딸 시간과 돈을 가졌는지의 결과인지는 데이터 밖의 물음입니다.

더 중요한 것은, 잠시 뒤 3절에서 그 읽기가 틀렸다는 것을 숫자로 확인한다는 점입니다. 기저율은 그대로 두고 대리변수 두 열만 점수에서 빼면, 오탈락률 격차가 2.00배에서 0.91배로 사라집니다. 격차를 만든 것은 기저율이 아니었습니다.

3

지웠는데 왜 남아 있나 — 대리변수

가장 먼저 떠오르는 처방이 있습니다. “민감한 열을 아예 빼 버리자.” 성별도 지역도 출신 학교도 모델에 넣지 않으면, 모델이 그것을 보고 차별할 방법이 없지 않을까요? 실제로 많은 곳에서 이 처방을 씁니다. 이름을 가리고, 사진을 떼고, 학교 이름을 지웁니다.

우리 표에서는 이미 그렇게 되어 있습니다. 점수 공식에 ‘집단’은 한 글자도 없습니다. 그런데도 오탈락률이 두 배 갈렸습니다. 무엇이 그 자리를 대신했을까요?

이렇게 확인해 봅시다. 집단 열을 통째로 지운 데이터를 놓고, 남은 열만 보고 그 사람이 A인지 B인지 맞혀 보는 것입니다. 맞힐 수 있다면, 집단 정보는 지워진 것이 아니라 다른 열에 옮겨 담긴 것입니다.

무엇으로 맞히나집단 복원 정확도기준선 대비
거주구역 한 열만82.5 %+32.5 %p
경력공백 한 열만68.5 %+18.5 %p
자격증 한 열만64.5 %+14.5 %p
고교유형 한 열만56.5 %+6.5 %p
지원분야 한 열만 (대조군)51.0 %+1.0 %p
거주구역 + 경력공백81.5 %+31.5 %p
남은 다섯 열 전부82.0 %+32.0 %p
기준선 — 무조건 한쪽으로 찍기50.0 %—
② 계산 집단 열을 지운 뒤 나머지 열만으로 집단을 맞힌 결과입니다. 방법은 세는 규칙(각 값에서 A와 B가 몇 명이었는지 세어 두고 더 그럴듯한 쪽을 고른다) + 2겹 교차검증입니다.

세 줄을 나란히 읽어야 이 표가 말을 합니다.

  • 거주구역 한 열만 남겨도 82.5%를 맞힙니다. 집단이라는 열은 지워졌지만, 그 정보는 거주구역 안에 거의 그대로 살아 있습니다.
  • 기준선은 50.0%입니다. 아무것도 안 보고 무조건 한쪽으로 찍어도 절반은 맞습니다. 82.5%는 이 50.0%와 견주어야 의미가 생깁니다. 2단원 12차시에서 배운 그 습관입니다 — 숫자는 언제나 기준선 옆에 놓아라.
  • 대조군인 지원분야는 51.0%입니다. 집단과 무관하게 만든 열(가정 5)은 정말로 못 맞힙니다. 이 줄이 있어야 82.5%가 방법의 착시가 아니라 데이터의 성질임을 알 수 있습니다.

이렇게 민감 속성 대신 그 자리를 채우는 열을 대리변수라고 부릅니다. 여기서 중요한 것은 마지막 줄입니다 — 열을 더 얹어도 82.0%로 거의 오르지 않습니다. 한 열이 이미 거의 다 하고 있기 때문입니다. “몇 개를 더 지워야 안전한가”라는 물음의 답은 ‘전부’이고, 전부를 지우면 예측할 것이 남지 않습니다.

📖 ① 사실 실제로 있었던 일

2단원 3차시에서 채용 서류 심사 AI 이야기를 역사적 편향의 예로 만났습니다. 오늘은 같은 사건을 다른 각도에서 봅니다.

한 기업이 2014년부터 이력서에 별점을 매기는 시스템을 개발했습니다. 10년치 이력서로 학습시켰는데 그 대부분이 남성의 것이었습니다. 결과적으로 이 시스템은 “women’s”라는 단어가 들어간 이력서나 여자대학 이름이 적힌 이력서를 감점했습니다. 회사는 그 표현들을 중립화해 보았지만 다른 데서 또 같은 일이 나올 수 있다는 우려 때문에 이 도구를 폐기했습니다.

여기서 ‘women’s’라는 단어와 여자대학 이름이 바로 대리변수입니다. 성별 열을 넣은 적이 없어도, 이력서의 낱말 하나하나가 그 자리를 대신했습니다. 회사가 표현을 지우고도 안심하지 못한 이유가 위 표의 마지막 줄과 같습니다 — 지울 열의 목록은 끝나지 않습니다.

출처: Jeffrey Dastin, Reuters (2018-10-10), “Amazon scraps secret AI recruiting tool that showed bias against women”

가상의 인물로 만든 영문 예시 이력서 첫 쪽 — 맨 위에 이름과 사는 도시·연락처, 아래로 전문 분야 목록과 경력 사항
가상 인물로 만든 예시 이력서입니다(실제 지원자의 서류가 아닙니다). 이 서류에는 성별 칸도 얼굴 사진도 없습니다. 그래도 남는 것이 있습니다 — 이름은 성별을, 맨 위의 사는 도시는 지역을, ‘25년 넘는 경력’이라는 문구는 나이를 짐작하게 합니다. 어느 것을 남기고 어느 것을 지울지가 오늘의 쟁점입니다. 출처: Colin8317a, Wikimedia Commons (CC BY-SA 4.0)

그러면 대리변수를 점수에서 빼면 어떻게 될까

대리변수가 정말 범인인지 확인하는 방법이 있습니다. 점수 공식에서 그 항의 가중치를 0으로 두고 다시 재는 것입니다. 다만 그렇게 하면 점수 전체가 위아래로 밀리므로, 뽑는 총 인원을 109명으로 맞춘 공통 기준점에서 비교합니다. 그러지 않으면 “덜 뽑아서 오탈락이 늘었다” 같은 착시가 생깁니다.

점수 공식공통 기준점총 선발 A 오탈락률B 오탈락률배수정확도 A / B
원래0.500109명 12.2 %24.3 %2.00배83.0 / 83.0
거주구역만 뺌0.539110명 13.5 %16.2 %1.20배85.0 / 84.0
경력공백만 뺌0.518109명 10.8 %24.3 %2.25배84.0 / 84.0
둘 다 뺌0.561109명 14.9 %13.5 %0.91배84.0 / 86.0
② 계산 가중치를 0으로 두고 총 선발 인원을 맞춘 뒤 다시 잰 값입니다.

읽을 것이 세 가지 있습니다.

① 둘 다 빼면 격차가 사라집니다. 2.00배가 0.91배가 됩니다. 2절 끝의 그 읽기 — “실력 차이니까 당연하다” — 를 이 한 줄이 반박합니다. 기저율은 74%와 37% 그대로인데 격차만 사라졌으니, 격차를 만든 것은 기저율이 아니었습니다.

② 그런데 정확도가 떨어지지 않습니다. 83.0/83.0이 84.0/86.0이 되었습니다. 거주구역은 예측에 아무 도움도 주지 못하면서 차별만 만들고 있었던 셈입니다. 다만 여기에는 큰 단서가 붙습니다 — 우리가 그렇게 만들었기 때문입니다(가정 2). 실제 데이터의 대리변수는 예측력을 조금은 가질 때가 많고, 그때는 공정성과 정확도가 진짜로 맞바꿈이 됩니다. 2단원 3차시에서 표집을 고치면 전체 정확도가 내려갔던 것이 그런 경우였습니다.

③ ‘경력공백만 뺌’ 줄을 보세요. 한 변수만 손봤더니 배수가 2.00배에서 2.25배로 오히려 커졌습니다. A집단의 오탈락률만 12.2%에서 10.8%로 내려갔기 때문입니다. 하나씩 고치는 처방이 늘 좋아지는 것은 아닙니다. 고치기 전에 재고, 고친 뒤에 다시 재야 하는 이유가 여기 있습니다.

4

공정성은 하나가 아니다 — 무엇을 같게 만들 것인가

대리변수를 다 지울 수 없다면, 남은 길은 결과를 맞추는 것입니다. “두 집단이 같은 대우를 받게 하자”는 말이지요. 그런데 여기서 문제가 생깁니다. ‘같은 대우’가 무슨 뜻인지부터 정해야 합니다. 후보가 셋 있고, 셋 다 그럴듯합니다.

① 선발률을 같게

(TP + FP) ÷ 전체

두 집단에서 같은 비율로 뽑는다. “100명 중 몇 명이 붙었나”를 맞춘다. 인구통계학적 동등성이라고 부른다.

② 오탈락률을 같게

FN ÷ (TP + FN)

적격자를 놓치는 비율을 같게 한다. “붙을 자격이 있었는데 떨어진 사람”의 몫을 맞춘다. 기회 균등이라고 부른다.

③ 정밀도를 같게

TP ÷ (TP + FP)

‘뽑았다’는 말의 뜻을 같게 한다. 합격 통보가 두 집단에서 같은 무게를 갖게 한다. 보정이라고 부른다.

셋 다 “공정하다”는 말의 정당한 뜻입니다. 그러면 셋을 다 맞추면 되겠지요. 실제로 해 봅시다. A집단의 기준점은 0.50에 두고, B집단의 기준점만 옮겨 가며 A의 값에 가장 가까워지는 자리를 찾습니다.

맞추려는 것B 기준점B 선발률 B 오탈락률B 정밀도B 정확도
(A집단의 값)0.5073.0 % 12.2 %89.0 %83.0 %
① 선발률을 맞추면0.3875.0 % 8.1 %45.3 %56.0 %
② 오탈락률을 맞추면0.4258.0 % 10.8 %56.9 %71.0 %
③ 정밀도를 맞추면0.588.0 % 81.1 %87.5 %69.0 %
② 계산 A는 0.50 고정, B의 기준점만 0.20~0.90 사이에서 옮겨 찾은 값입니다.

★ 세 기준점이 0.38 · 0.42 · 0.58로 전부 다릅니다. 하나를 맞추면 나머지 둘이 어긋납니다. 얼마나 어긋나는지 보세요.

  • 선발률을 맞추면(0.38) 정밀도가 89.0%에서 45.3%로 무너지고 정확도가 56.0%가 됩니다. B집단에서 뽑힌 75명 가운데 실제 적격자는 34명뿐입니다. 숫자는 맞췄는데, 그 집단의 합격 통보가 절반은 헛것이 되었습니다.
  • 정밀도를 맞추면(0.58) B에서 뽑히는 사람이 8명으로 줄고 오탈락률이 81.1%가 됩니다. ‘뽑았다’는 말의 뜻은 같아졌는데, 뽑히는 사람이 거의 없어졌습니다.
  • 오탈락률을 맞추면(0.42) 셋 중에서는 가장 온건합니다. 그래도 정밀도는 89.0%에서 56.9%로 내려가고, B에서 뽑은 58명 중 33명만 적격자입니다.

“그러면 셋 다 맞는 기준점 짝을 찾으면 되잖아요”라고 생각할 수 있습니다. 좋은 생각입니다. 그래서 전부 찾아보았습니다. A의 기준점과 B의 기준점을 각각 0.00부터 1.00까지 0.01씩 움직이면 101 × 101 = 10,201가지입니다. 하나도 빼지 않고 전부 셌습니다.

허용 오차선발률만오탈락률만정밀도만 둘씩(가장 많은 짝)셋 모두
1 %p 이내9 짝15 짝 2 짝0 짝0 짝
2 %p 이내24 짝46 짝 2 짝3 짝0 짝
3 %p 이내32 짝73 짝 5 짝5 짝0 짝
5 %p 이내63 짝92 짝 13 짝13 짝0 짝
② 계산 10,201짝 중 양쪽 모두 선발률이 10~90%인 552짝만 셌습니다. 그 바깥은 아래 상자를 보세요.

하나씩은 얼마든지 맞출 수 있습니다. 둘까지도 가끔 됩니다. 그런데 셋은 하나도 없습니다. 허용 오차를 5%p까지 늘려도 0짝이고, 15%p까지 늘려야 겨우 3짝이 나옵니다 — 그 정도면 이미 ‘같다’고 부를 수 없는 오차입니다.

⚠️ “찾았어요!”라고 할 때 가장 먼저 물어볼 것

위 표는 양쪽 모두 선발률 10~90%인 짝만 셌습니다. 이 제한을 풀면 10,201짝 중 1,064짝이 셋을 다 만족한 것처럼 나옵니다. 전부 함정입니다.

기준점을 1.00으로 올려 아무도 뽑지 않으면 두 집단의 선발률은 0%로 같고 오탈락률은 100%로 같습니다. 정밀도는 아예 정의되지 않습니다. 완벽하게 ‘공정’하지만 아무 의미가 없습니다. 그래서 물어야 할 것은 하나입니다 — “그 기준점에서 몇 명을 뽑았나요?”

ℹ️ ① 사실 이것은 우리가 못 찾은 것이 아니다

2017년에 발표된 한 논문이 이 문제를 수학으로 정리했습니다. 집단마다 기저율이 다르면, 위의 세 조건을 동시에 만족시키는 방법은 없다는 것입니다. 논문의 결론은 이렇게 적혀 있습니다 — “아주 제약된 특수한 경우를 빼면, 이 세 조건을 동시에 만족시키는 방법은 없다.”

우리가 얻은 552짝 중 0짝은 이 정리의 한 사례입니다. 더 열심히 찾으면 나오는 것이 아닙니다. 없는 것을 찾은 것입니다. ‘못 찾았다’가 오답이 아닙니다.

출처: Kleinberg, Mullainathan & Raghavan, Inherent Trade-Offs in the Fair Determination of Risk Scores, ITCS 2017.

2단원 3차시에서도 ‘1,040가지를 전부 돌렸더니 0가지’라는 모양을 만났습니다. 모양은 같지만 물은 것이 다릅니다. 그때는 데이터를 어떻게 배분할까를 훑었고, 오늘은 기준점을 어디에 둘까를 훑었습니다. 데이터를 고쳐도 안 되고, 기준점을 고쳐도 안 됩니다.

💡 그러면 기저율만 같게 만들면 되나요?

그럴듯한 생각이라 실제로 확인해 보았습니다. B집단의 잠재 실력 분포를 A와 가깝게 옮겨 기저율 차이를 37%p에서 7%p까지 좁혔더니, 셋 동시 만족은 여전히 0짝이었습니다. 200명이라는 유한한 수에서는 세 지표가 계단처럼 뛰기 때문입니다. 그러니 이 교과서가 말할 수 있는 것은 “기저율이 다르면 성립하지 않는다”까지입니다. “기저율만 같으면 성립한다”는 이 데이터에서 확인되지 않았습니다. (그리고 실력 분포를 같게 해도 오탈락률 격차는 1.60배로 남았습니다 — 대리변수가 그대로였으니까요.)

여기까지가 오늘의 뼈대입니다. 공정성은 계산이 아니라 선택입니다. 계산은 “셋 중 무엇을 맞출 수 있는가”까지만 답합니다. 무엇을 맞출 것인가와 그 대가를 누가 질 것인가는 사람이 정해야 합니다. 이 교과서는 여러분 대신 고르지 않겠습니다. 8차시의 토론이 그 자리입니다.

5

그래서 남는 일 — 설명하고, 이의를 제기할 수 있게

완벽하게 공정한 모델은 만들 수 없다는 것을 확인했습니다. 그렇다고 손을 놓을 수는 없습니다. 남는 길이 있습니다 — 판정마다 이유를 대게 하고, 그 이유를 걸고 다툴 수 있게 하는 것입니다.

1단원 12차시를 떠올려 봅시다. 규칙 기반 시스템에서 prove("펭귄이다")를 부르면 여섯 줄짜리 사슬이 찍혔습니다. “펭귄이라고 본 까닭은 새이면서 헤엄치기 때문이고, 새라고 본 까닭은 깃털이 있기 때문” — 프로그램이 실제로 밟은 경로가 그대로 설명이었습니다. 그 설명에는 빠뜨린 근거가 없고, 어디가 바닥인지 알 수 있었지요. 규칙 기반에서 설명은 공짜였습니다.

오늘의 점수 모델에는 그런 사슬이 없습니다. 덧셈 하나가 전부이고, “왜 떨어졌느냐”고 물으면 “0.483점이라서” 말고는 할 말이 없습니다. 그러면 설명을 밖에서 만들어야 합니다. 방법은 의외로 단순합니다 — 한 특성만 ‘보통 값’으로 바꿔 다시 계산하고, 점수가 얼마나 움직이는지 재는 것입니다. 이 값을 제거 기여도라고 부르겠습니다.

1단원 12차시 — 설명이 모델 안에 있다 ? 펭귄이다 <- 규칙 '새다 AND 헤엄친다' ? 새다 <- 규칙 '깃털이 있다' O 깃털이 있다 (아는 사실) O 새다 (규칙으로 밝혀짐) O 헤엄친다 (아는 사실) O 펭귄이다 (규칙으로 밝혀짐) 밟은 사슬을 그대로 읽으면 설명이 된다. 묻는 것: 무엇을 알려 주면 판정이 바뀌나 3단원 7차시 — 설명을 밖에서 만든다 점수 0.483 — 탈락 모델은 아무 말도 하지 않는다. 거주구역만 3→1 경력공백만 12→0 +0.060 → 합격 +0.072 → 합격 묻는 것: 무엇을 바꾸면 판정이 바뀌나
같은 ‘설명’이라는 말을 쓰지만 만들어지는 자리가 다릅니다. 설명이 안에 있는 모델과 밖에서 만들어야 하는 모델은 이의 제기의 난이도가 다릅니다.

실제로 한 사람에게 해 보겠습니다. 우리 표에서 적격인데 떨어진 B집단 사람은 9명이고, 그중 대리변수 때문에 가장 많이 깎인 사람이 116번 지원자입니다. 점수 0.483으로 기준 0.50에 못 미쳐 탈락했습니다 (거주구역 3 · 경력공백 12개월 · 자격증 2개 · 고교유형 나 · 지원분야 개발).

특성이 사람의 값보통 값 바꾸면 점수제거 기여도판정이 뒤집히나
거주구역31 0.543+0.060뒤집힌다 → 합격
경력공백12개월0개월 0.555+0.072뒤집힌다 → 합격
자격증2개2개 0.483+0.000그대로 탈락
고교유형나나 0.483+0.000그대로 탈락
둘 다 고치면—— 0.615+0.132뒤집힌다 → 합격
지원분야 (대조군)개발운영 0.483+0.000그대로 (공식에 없는 열)
② 계산 ‘보통 값’은 200명 중 가장 흔한 값으로 잡았습니다 — 거주구역 1 · 경력공백 0개월 · 자격증 2개.

이 표가 말하는 것 셋입니다.

  • 결정적인 이유가 하나가 아닙니다. 거주구역 하나만 바꿔도 합격, 경력공백 하나만 바꿔도 합격입니다. “무엇 때문에 떨어졌나”에 답이 둘이고, 둘 다 이유이며 둘 다 결정적입니다. 이의 제기 절차를 설계할 때 바로 걸리는 문제입니다 — 회사가 “경력공백 때문”이라고만 답해도 거짓말은 아닙니다.
  • 지원분야의 기여도는 정확히 0입니다. 공식에 없는 열이니까요. 설명은 모델이 실제로 쓴 것만 짚어야 합니다. 그럴듯한 이유를 지어 붙이는 것은 설명이 아닙니다.
  • ‘보통 값’을 무엇으로 잡느냐가 설명을 바꿉니다. 고교유형은 가 66명 · 나 64명 · 다 70명으로 거의 같아서, 최빈값 ‘다’를 쓰면 이 사람의 고교유형 기여도가 −0.030이 되고, 가운데 등급 ‘나’를 쓰면 0이 됩니다. XAI가 내놓는 설명은 객관적 사실이 아니라 ‘무엇과 비교했는가’에 달린 계산입니다.

개별 설명이 모이면 집단 통계가 된다

같은 계산을 200명 전원에게 돌려 봅시다. ‘거주구역 때문에 점수가 깎인 사람’과, ‘그 감점만 없었다면 합격했을 사람’을 세는 것입니다.

집단거주구역 때문에 감점 그 감점만 없었다면 합격그 집단 탈락자 중
A집단43명 / 100명6명27명 중 22.2 %
B집단94명 / 100명17명64명 중 26.6 %
② 계산 거주구역만 1구역으로 바꿔 다시 계산한 결과입니다.

이런 이의 제기가 200명 중 23건 나옵니다. 그리고 그 23건 중 17건이 B집단입니다. 한 사람이 “제 주소 때문에 떨어졌습니다”라고 말하면 개인의 사정입니다. 그런데 23건이 모이면 제도의 결함이 됩니다. 설명이 있어야 셀 수 있고, 세어야 고칠 수 있습니다. 이것이 설명 가능한 인공지능(XAI)을 이의 제기 절차와 묶어야 하는 이유입니다.

비어 있는 유럽인권재판소 법정 — 반원형으로 둘러선 판사석과 그 앞에 놓인 당사자 책상들
법정이 하는 일의 핵심은 ‘누가 옳은지 가리는 것’만이 아닙니다. 결정에 근거를 대게 하고, 그 근거를 걸고 다툴 수 있게 하는 것입니다. 자동으로 내려진 판정에도 같은 것이 필요합니다. 출처: Adrian Grycuk, Wikimedia Commons (CC BY-SA 3.0 PL)
ℹ️ ① 사실 우리나라 법에 이미 들어 있는 권리

개인정보 보호법 제37조의2는 ‘자동화된 결정에 대한 정보주체의 권리’를 정하고 있습니다(법률 제19234호, 2024년 3월 15일 시행). 담긴 것은 넷입니다 — 거부권, 설명요구권, 사람이 개입해 다시 처리하게 할 의무, 그리고 기준과 절차를 공개할 의무입니다.

오늘 우리가 만든 116번 지원자의 표는 이 조문 중 ‘설명요구권’에 답하려면 회사가 무엇을 준비해야 하는지를 보여 주는 한 예입니다. 그리고 ‘결정적 이유가 둘’이라는 발견은 그 답변이 왜 어려운지를 보여 줍니다.

한편 「대한민국 인공지능 윤리원칙」은 7대 원칙을 두고 있고, 그 가운데 하나가 ‘공정성·포용성’입니다(나머지는 인간중심성 · 프라이버시 보호 · 책임성 · 안전성 · 신뢰성 · 투명성). 오늘 배운 대로라면, 이 원칙을 지키겠다고 선언하는 것만으로는 아무것도 정해지지 않습니다. 어떤 뜻의 공정성인지를 정해야 비로소 지킬 수 있습니다.

출처: 개인정보 보호법 제37조의2 / 과학기술정보통신부·정보통신정책연구원 보도참고자료(2026-08-24). 앞의 조문은 이 교과서가 2차 출처로만 확인했으므로, 인용할 때는 국가법령정보센터에서 조문을 다시 확인하세요.

💭 오늘 이 교과서가 하지 않는 말

“그러므로 채용에 AI를 쓰면 안 된다”는 결론은 여기 없습니다. 사람이 서류를 볼 때도 편향은 들어옵니다. 다만 사람의 편향은 한 사람 한 사람마다 다르고 세기 어렵고, 모델의 편향은 200명 전체에 똑같이 적용되지만 그 대신 숫자로 잴 수 있습니다. 오늘 우리가 한 일이 바로 그 ‘재는 일’입니다. 무엇을 어떻게 쓸지는 이 표들을 손에 쥐고 8차시에서 여러분이 정합니다.

💻

손으로 ① — 공정성 저울

이제 여러분이 직접 돌릴 차례입니다. 아래 저울은 파이썬을 부르지 않고 브라우저가 그 자리에서 계산합니다. 계산에 쓰는 200명은 본문의 그 200명이고, 결과도 본문의 표와 소수점까지 같습니다.

손잡이는 기준점 두 개입니다. A집단의 기준점과 B집단의 기준점을 따로 움직입니다. 곡선 셋은 B의 기준점을 옮길 때 B의 세 지표가 어떻게 변하는지를 보여 주고, 가로 점선 셋은 지금 A의 값입니다. 곡선이 자기 색 점선을 만나는 자리가 ‘맞추는 자리’입니다. 그 자리 셋이 어디에 찍히는지를 보는 것이 오늘의 전부입니다.

⚖️ 공정성 저울 — 하나를 맞추면 둘이 어긋난다 INTERACTIVE

먼저 두 기준점을 0.50 / 0.50인 기본값 그대로 두고 본문의 표(83.0% · 12.2% · 24.3%)가 그대로 나오는지 확인하세요. 확인이 되면 그다음부터 나오는 숫자를 믿을 수 있습니다. [▶ B 기준점 훑기]를 누르면 B의 기준점이 0.20에서 0.90까지 저절로 지나가면서 세 곡선 위의 점이 함께 움직입니다.

B 선발률 B 오탈락률 B 정밀도 A집단의 값(가로 점선) 지금 B 기준점
A집단 100명 — 기준점 0.50
뽑은 인원73명
선발률73.0 %
오탈락률12.2 %
정밀도89.0 %
정확도83.0 %
B집단 100명 — 기준점 0.50
뽑은 인원36명
선발률36.0 %
오탈락률24.3 %
정밀도77.8 %
정확도83.0 %
두 집단의 격차 — 작을수록 ‘맞춘 것’
선발률 차37.0 %p
오탈락률 차12.2 %p
정밀도 차11.3 %p
셋 중 가장 큰 차37.0 %p
지금까지 가장 가까이37.0 %p
—
🗑️ 민감 속성 열을 지워 본다 — 그래도 남아 있을까

아래 ‘집단 열 지우기’를 켜면 모델에서 집단이라는 열이 사라집니다. 그 상태에서 남겨 둘 열을 골라 보세요. 그 열들만으로 집단을 얼마나 되살릴 수 있는지 그 자리에서 계산합니다(세는 규칙 + 2겹 교차검증).

집단 복원 정확도82.5 %
기준선(한쪽으로 찍기)50.0 %
기준선 대비+32.5 %p
[안내] 기준점을 밀어 보세요. 기본값 0.50 / 0.50 에서 본문의 표가 그대로 나옵니다.

과제 ① — 세 자리를 표에 옮겨 적는다

A집단 기준점을 0.50에 고정하고, 위의 [📌] 단추 셋을 차례로 눌러 B의 기준점이 어디로 가는지, 그때 나머지 지표가 어떻게 되는지 적으세요. 마지막 칸에는 “이 자리에서 B집단 지원자에게 무슨 일이 생기는가”를 한 줄로 씁니다.

맞추려는 것B 기준점B 선발률B 오탈락률 B 정밀도B가 뽑은 인원B집단에 무슨 일이
① 선발률
② 오탈락률
③ 정밀도

과제 ② — 두 기준점을 같이 옮기며 배수를 잰다

이번에는 두 기준점을 늘 같은 값으로 두고 함께 밀어 보세요. “같은 자로 재면 공평하다”는 주장이 어디까지 맞는지 확인하는 과제입니다. 배수는 B 오탈락률 ÷ A 오탈락률입니다. 두 값은 저울의 A집단 칸과 B집단 칸에 그대로 찍혀 있습니다(격차 칸은 뺄셈이라 배수가 아닙니다). 소수 첫째 자리까지 읽은 값으로 나누므로 배수는 어림값입니다.

기준점(둘 다)A 오탈락률B 오탈락률배수A 정확도B 정확도
0.40
0.45
0.50
0.55
0.60

다 채웠으면 두 가지를 확인하세요. ① 배수가 1.00보다 작아지는 자리가 한 군데라도 있나요? ② ‘정확도가 두 집단에서 똑같은’ 자리는 몇 군데인가요?

과제 ③ — 반례를 만들어 본다

💡 이 과제의 답은 ‘못 찾았다’일 수 있습니다

두 기준점을 자유롭게 움직여 세 격차가 모두 3%p 이내인 짝을 찾아보세요. 찾지 못하는 것이 정상이고, 그것이 오답이 아닙니다. 못 찾았다면 가장 가까이 간 짝(A 기준점 · B 기준점 · 가장 큰 차)과 그때 두 집단이 각각 몇 명을 뽑았는지를 적으세요. 저울이 ‘지금까지 가장 가까이’ 칸에 여러분의 최고 기록을 남겨 줍니다.

함정 하나를 미리 알려 드립니다. 기준점을 0.90 근처로 올리면 뽑는 사람이 거의 없어져 세 격차가 갑자기 작아집니다. 그때 저울은 “극단 구간 — 여기는 세지 않습니다”라는 경고를 띄웁니다. 친구가 “찾았어!”라고 하면 “몇 명 뽑았는데?”라고 먼저 물어보세요.

과제 ④ — 몇 개를 지워야 안전한가

저울 아래쪽의 [집단 열 지우기]를 켠 채로 남길 열을 골라 가며 복원 정확도를 적으세요. 마지막 줄은 스스로 조합을 정해 채웁니다.

남겨 둔 열집단 복원 정확도기준선(50.0%) 대비
거주구역만
지원분야만 (대조군)
거주구역 + 경력공백
다섯 열 전부
내가 고른 조합 — 무엇?

모든 열을 끄면 복원 정확도가 기준선인 50.0%로 내려갑니다. 그런데 그 상태에서는 모델이 볼 것도 아무것도 남지 않습니다. “안전하게 지우기”와 “쓸모 있게 남기기” 사이 어디에 선을 그을지 — 이것도 계산이 대신 정해 주지 않습니다.

💻

손으로 ② — 지표를 직접 정의해서 재 본다

저울은 이미 계산이 끝난 값을 보여 줍니다. 이번에는 그 계산을 직접 씁니다. 빈칸 넷을 채워야 프로그램이 돌아갑니다. 하나라도 남아 있으면 실행되지 않습니다.

⚠️ 빈칸 ②③ 는 틀려도 오류가 나지 않습니다
  • ① 선발률 — 분모는 그 집단 전체, 분자는 뽑힌 사람 전부(TP + FP)입니다. TP / n으로 쓰면 ‘맞게 뽑은 비율’이 되어 선발률이 아닙니다.
  • ② 오탈락률 — 분모는 적격자 전체(TP + FN)입니다. 실수로 오검출률 FP / (FP + TN)을 쓰면 A가 30.8%, B가 12.7%가 되어 “A집단이 더 불리하다”로 결론이 통째로 뒤집힙니다. 가장 위험한 오답입니다.
  • ③ 정밀도 — 분모는 뽑은 사람 수(TP + FP)입니다. 재현율 TP / (TP + FN)로 쓰면 89.0%가 87.8%가 되어 차이가 1~2%p뿐이라 눈에 띄지 않습니다. 반드시 분모를 검산하세요.
  • ④ 셋 동시 만족 — 세 조건을 and로 이어야 합니다. or로 쓰면 0짝이 26짝이 되어 “셋을 동시에 맞출 수 있다”는 반대 결론이 나옵니다.

제대로 채웠다면 정확도 83.0% / 83.0%, 오탈락률 12.2% / 24.3%, 복원 82.5%, 552짝 중 0짝이 찍힙니다. 저울과 같은 값입니다.

바꿔 볼 것 — 차별의 손잡이를 직접 돌린다

맨 위의 W_ZONE = 0.030은 거주구역이 한 칸 멀어질 때 깎이는 점수입니다. 이 값 하나만 바꾸고 다시 실행해 보세요. 오탈락률 배수가 어떻게 움직이는지 표에 적습니다.

W_ZONEA 오탈락률B 오탈락률배수A 정확도 / B 정확도
0.000
0.015
0.030 (기본)
0.045

한 항의 가중치 하나가 ‘차별의 크기’를 조절하는 손잡이라는 것이 보일 것입니다. 그리고 그 손잡이는 누군가 코드에 적어 넣은 숫자입니다. 하늘에서 떨어진 값이 아닙니다.

💻

손으로 ③ — 한 사람의 탈락에 이유를 붙인다

마지막 실습입니다. 116번 지원자에게 “당신은 왜 떨어졌습니다”라고 답장을 써야 한다면, 무엇을 근거로 쓸 수 있을까요? 빈칸은 하나뿐이고, 그 하나가 이 실습의 전부입니다.

💡 빈칸 ⑤ — 부호를 조심하세요

제거 기여도는 바꾼 뒤 점수 − 원래 점수입니다. 순서를 뒤집어 s - s2로 쓰면 부호가 전부 뒤집혀 점수를 깎고 있던 특성이 점수를 올린 것처럼 보입니다. 표에 −0.060 같은 값이 나오면 순서를 되짚어 보세요.

맨 아래 COMMON의 "고교유형"을 "다"로 바꾸고 다시 실행해 보세요. 같은 사람, 같은 모델인데 설명이 달라집니다. 고교유형의 기여도가 0에서 −0.030으로 바뀌지요. XAI가 내놓는 설명은 ‘무엇과 비교했는가’에 달린 계산이라는 것을 직접 손으로 확인하는 자리입니다.

ℹ️ 세 실습이 어떻게 이어지는가

저울(손으로 ①)은 기준점을 옮기면 무엇이 어긋나는지를 보여 주었고, 파이썬 ②는 그 지표를 직접 정의해 전수로 훑는 일을 했으며, 파이썬 ③는 한 사람에게 이유를 돌려주는 일을 했습니다. 세 결과가 모두 8차시 토론의 근거 자료입니다. 출력을 지우지 말고 남겨 두세요.

📖

정리 — 오늘 손에 남은 것

물음오늘의 답근거가 된 숫자
정확도가 같은데 불공정할 수 있나 그렇다. 정확도는 네 칸을 뭉뚱그린 값이라 오류의 종류가 갈리는 것을 못 잡는다 83.0 % / 83.0 %
오탈락률 12.2 % / 24.3 %
억울한 탈락이 A와 B에서 몇 명이었나 똑같이 9명. 그런데 적격자 수가 달라 비율이 두 배가 된다 FN 9 / 9
적격자 74명 / 37명
민감 속성을 지우면 공정해지나 아니다. 거주구역 한 열이 집단을 거의 되살린다. 지운 것은 이름표지 정보가 아니다 복원 82.5 %
대조군 51.0 % · 기준선 50.0 %
그러면 대리변수를 빼면 되나 이 데이터에서는 격차가 사라진다. 다만 한 변수만 빼면 더 나빠질 수도 있다 2.00배 → 0.91배
경력공백만 빼면 2.25배
공정성은 무엇을 같게 하는 것인가 후보가 셋이고, 셋이 서로 다른 기준점을 가리킨다 0.38 · 0.42 · 0.58
셋을 다 맞출 수는 없나 없다. 우리가 못 찾은 것이 아니라 없는 것이다(2017년 논문이 증명) 552짝 중 0짝
5 %p 로 늘려도 0짝
그러면 무엇을 할 수 있나 판정마다 이유를 대게 하고, 그 이유를 걸고 다툴 수 있게 한다 기여도 +0.060 / +0.072
이의 제기 23건 중 17건
그래서 무엇이 옳은가 계산은 여기까지밖에 못 한다. 무엇을 맞출지와 대가를 누가 질지는 사람이 정한다 — (8차시 토론)
가운뎃줄의 숫자는 전부 ② 계산입니다 — 씨앗 1401로 만든 지원자 200명 표에서 나온 값이고, 세상의 채용 통계가 아닙니다.
📖 오늘 얻은 습관 하나

2단원 3차시에서 “정확도 몇 %”를 만나면 두 가지를 묻기로 했습니다. 오늘 세 번째 물음이 붙습니다.

① 누구를 대상으로 잰 숫자입니까?
② 집단으로 갈라 재면 어떻게 됩니까?
③ 갈라 재도 같다면, 무엇이 같고 무엇이 다른 것입니까?

셋째 물음이 오늘 배운 것입니다. ‘같다’는 말은 무엇을 같게 했는지를 밝히기 전까지는 아무 뜻이 없습니다.

⚠️ 오늘 표를 밖에서 인용할 때

위의 숫자는 우리가 만든 200명에서 나온 값입니다. 씨앗을 바꾸면 값이 달라집니다 — 다른 씨앗에서는 정확도가 76%와 82%처럼 갈리기도 했습니다. 다만 오탈락률 배수는 어느 씨앗에서도 2.0배에서 3.8배 사이로, B쪽이 늘 더 컸습니다. “정확도가 딱 같다”는 이 데이터의 성질이고, “격차의 방향”은 우연이 아닙니다. 인용할 때는 반드시 “우리가 만든 200명 표에서”를 붙이세요.

✅

확인 문제

✍️ 문제마다 답을 쓰고 제출하기를 누르세요. 제출하면 모범 답안이 열리고, 제출한 답은 선생님께 전달됩니다.

1. 어떤 회사가 “우리 채용 모델은 두 집단의 정확도가 같으므로 공정합니다”라고 발표했습니다. 이 발표만으로는 공정하다고 말할 수 없는 까닭을, 지표 이름 두 개 이상을 들어 설명하세요.
📖 모범 답안

정확도는 네 칸(TP·FP·FN·TN)을 하나로 뭉뚱그린 값이라 오류의 ‘종류’가 집단마다 다르게 갈리는 것을 잡지 못합니다. 오늘 표에서 두 집단의 정확도는 83.0%로 같았지만 오탈락률은 12.2%와 24.3%(2.00배), 정밀도는 89.0%와 77.8%, 선발률은 73.0%와 36.0%로 전부 달랐습니다.

그러므로 물어야 할 것은 “정확도가 같은가”가 아니라 “어떤 지표를 같게 만들었는가”입니다. 실제로 재범 위험 점수 프로그램을 둘러싼 논쟁에서도 회사는 정확도를, 언론은 오류의 종류를 근거로 삼았고 양쪽 주장이 모두 참이었습니다.

2. 오늘 저울에서 직접 확인한 것 — A집단 기준점을 0.50에 고정하고 세 개의 [📌] 단추를 눌렀을 때 B의 기준점은 각각 얼마였습니까? 그리고 선발률을 맞추는 자리에서 B집단이 뽑은 사람 수와 그중 실제 적격자 수는 몇 명이었습니까?
📖 모범 답안

세 기준점은 선발률 0.38 · 오탈락률 0.42 · 정밀도 0.58로 전부 다릅니다. 선발률을 맞추는 자리(0.38)에서 B집단은 75명을 뽑았고 그중 적격자는 34명이었습니다 (정밀도 45.3%).

이 숫자가 중요한 이유는 ‘맞췄다’는 말의 대가를 보여 주기 때문입니다. 선발률이라는 한 지표는 A와 거의 같아졌지만(73.0% 대 75.0%), B집단의 합격 통보는 절반 넘게 헛것이 되었고 정확도는 83.0%에서 56.0%로 떨어졌습니다. 반대로 정밀도를 맞추는 자리(0.58)에서는 뽑히는 사람이 8명뿐이고 오탈락률이 81.1%가 됩니다. 어느 쪽이 옳은지는 계산이 답하지 않습니다.

3. 오늘 저울에서 직접 확인한 것 — [집단 열 지우기]를 켠 채 거주구역만 남겼을 때와 지원분야만 남겼을 때의 집단 복원 정확도는 각각 얼마였습니까? 이 두 값을 반드시 나란히 놓고 봐야 하는 까닭도 함께 쓰세요.
📖 모범 답안

거주구역만 남기면 82.5%, 지원분야만 남기면 51.0%입니다. 기준선(무조건 한쪽으로 찍기)은 50.0%입니다.

나란히 놓아야 하는 까닭은 82.5%가 큰 수인지 아닌지를 혼자서는 말할 수 없기 때문입니다. 지원분야는 집단과 무관하게 만든 열(가정 5)이고 실제로 51.0%밖에 못 맞힙니다. 이 대조군이 있어야 82.5%가 방법의 착시가 아니라 데이터의 성질임을 알 수 있습니다. 대조군이 90%쯤 나왔다면, 82.5%는 ‘대리변수’의 증거가 아니라 계산이 잘못됐다는 증거가 됩니다.

4. 저울에서 두 기준점을 자유롭게 움직여 세 격차가 모두 3%p 이내인 짝을 찾아보았습니까? 결과를 적고, 못 찾았다면 가장 가까이 간 짝과 그때 두 집단이 각각 몇 명을 뽑았는지 쓰세요.
📖 모범 답안

찾을 수 없습니다. 그것이 정답입니다. 극단 구간(선발률 10~90% 바깥)을 뺀 552짝을 전부 훑어도 3%p 이내인 짝은 0짝이고, 5%p로 늘려도 0짝입니다.

가장 가까이 간 짝은 A 0.61 / B 0.51이고, 그때 세 격차 중 가장 큰 것이 14.0%p입니다(선발률 45.0%와 31.0%, 오탈락률 44.6%와 35.1%, 정밀도 91.1%와 77.4%). 뽑은 인원은 A 45명 · B 31명입니다.

그런데 이 짝을 ‘가장 공정한 자리’라고 부르기는 어렵습니다. 두 집단 모두 적격자의 서너 할을 떨어뜨리고 있기 때문입니다. 공정에 가까운 자리가 좋은 자리는 아닙니다.

⚠ 만약 “찾았다”고 나왔다면 기준점부터 확인하세요. 0.90 근처에서는 뽑는 사람이 거의 없어져 세 지표가 형식적으로 같아집니다. 그 제한을 풀면 10,201짝 중 1,064짝이 ‘공정’해 보이지만 전부 함정입니다. 먼저 물어야 할 것은 하나입니다 — “그 자리에서 몇 명을 뽑았나요?”

5. 어떤 회사가 두 가지 처방을 놓고 고민합니다. (가) 민감 속성 열을 데이터에서 지운다. (나) 집단마다 기준점을 다르게 둔다. 각 처방의 이득과 대가를 한 줄씩 쓰고, 오늘 표에서 근거가 되는 숫자를 하나씩 대세요.
📖 모범 답안

(가) 민감 속성을 지운다. 이득 — 모델이 그 열을 직접 보고 차별할 길이 막히고, 절차상 설명하기도 쉽습니다. 대가 — 대리변수가 그 자리를 대신하므로 차별은 남습니다. 근거: 집단 열을 지워도 거주구역 한 열로 82.5%를 복원할 수 있고, 열을 더 지워도 82.0%로 거의 그대로입니다. 지울 열의 목록이 끝나지 않습니다.

(나) 집단마다 기준점을 다르게 둔다. 이득 — 목표로 삼은 지표 하나는 실제로 맞출 수 있습니다. 근거: B의 기준점을 0.42로 두면 오탈락률이 10.8%가 되어 A의 12.2%와 거의 같아집니다. 대가 — 나머지 지표가 어긋나고, 두 사람을 다른 자로 재게 됩니다. 근거: 그 자리에서 B의 정밀도는 89.0%에서 56.9%로 내려갑니다. “같은 점수인데 왜 나만 떨어졌느냐”는 물음에 답할 준비가 따로 필요합니다.

덧붙일 것: 이 데이터에서는 대리변수 둘을 함께 빼면 격차가 2.00배에서 0.91배로 사라졌고 정확도도 떨어지지 않았습니다. 다만 그것은 거주구역을 실력과 무관하게 만든 우리 가정 때문입니다. 그리고 경력공백 하나만 빼면 배수가 2.25배로 오히려 커졌습니다 — 부분 처방은 재 보기 전에는 좋아졌는지 알 수 없습니다.

6. [O/X] “공정성 지표를 모두 동시에 만족시키는 모델을 만들면 이 문제는 해결된다.” O인지 X인지 고르고 까닭을 쓰세요. 그리고 그렇다면 무엇을 해야 하는지를 편향이 들어오는 세 지점(사람 · 데이터 · 알고리즘)에 맞춰 한 줄씩 제안하세요.
📖 모범 답안

X입니다. 집단마다 기저율이 다르면 세 지표를 동시에 만족시키는 방법은 없습니다. 2017년 논문(Kleinberg 외)이 “아주 제약된 특수한 경우를 빼면 세 조건을 동시에 만족시키는 방법은 없다”고 정리했고, 우리 실습의 552짝 중 0짝이 그 한 사례입니다. 더 좋은 모델을 만들면 되는 문제가 아니라, 무엇을 맞출지 골라야 하는 문제입니다.

세 지점에서 할 수 있는 일(예시)

  • 사람 — 무엇을 ‘적격’이라 부를지 문서로 못 박고, 그 정의가 누구를 자동으로 불리하게 만드는지 먼저 따진다. 어떤 열을 쓸지도 여기서 정한다.
  • 데이터 — 집단별로 갈라 재고(2단원 3차시), 대리변수 후보를 복원 정확도로 실제로 재 본다. 지웠다고 끝내지 않는다.
  • 알고리즘 — 전체 정확도 하나만 최대로 만들라고 시키지 않는다. 어떤 공정성을 목표로 삼았는지 문서에 적고, 그 지표를 집단별로 함께 보고한다.

그리고 어느 쪽을 골랐든 판정에 이유를 대게 하고 이의를 제기할 길을 열어 두어야 합니다. 개인정보 보호법 제37조의2가 자동화된 결정에 대해 거부권 · 설명요구권 · 사람의 재처리 · 기준 공개를 정해 둔 것도 같은 이유입니다.

🔁 되돌아보기

오늘 우리는 정확도가 같은 두 집단에서 오탈락률 2.00배를 찾아냈고, 민감 속성을 지워도 거주구역 한 열이 집단을 82.5% 되살린다는 것을 확인했으며, 공정성의 세 정의가 0.38 · 0.42 · 0.58이라는 서로 다른 자리를 가리켜 552짝 중 0짝이라는 답에 닿았습니다. 마지막으로 한 사람의 탈락을 제거 기여도로 뜯어보고, 그 설명 23건이 모이면 제도의 결함이 된다는 것을 보았습니다.

다음 시간에는 여기까지 모은 숫자를 들고 토론을 합니다. 오늘의 세 기준점 표와 ‘0짝’은 “어느 공정성을 고를 것인가”라는 논제의 핵심 근거 자료가 됩니다. 답이 계산에 없다는 것이 그 토론이 성립하는 이유입니다.

🔎

더 알아보기

오늘의 ‘0짝’이 나온 논쟁의 현장, 그 뒤에 있는 한 줄짜리 식, 그리고 선발률을 재는 일을 직업으로 하는 사람들

야자수 사이로 보이는 여러 층짜리 건물, 벽에 BROWARD COUNTY JUDICIAL COMPLEX라는 글자가 붙어 있다
역사

브로워드 카운티 — 데이터가 공개되자 논쟁이 수학이 되었다

여는 장면의 재범 위험 점수 논쟁은 미국 플로리다주 브로워드 카운티에서 시작되었습니다. 사진은 그 카운티의 법원 건물입니다. 언론사 ProPublica는 2013~2014년에 이곳에서 체포된 사람 수천 명의 위험 점수를 모으고, 그 뒤 2년 동안 실제로 다시 죄를 지었는지를 기록과 맞춰 보았습니다. 오늘 우리가 만든 표의 ‘점수’와 ‘실제 적격 여부’에 해당하는 두 열을 현실에서 짝지은 셈입니다.

이 기사에서 중요한 것은 결론만이 아닙니다. ProPublica는 분석에 쓴 데이터와 코드를 함께 공개했습니다. 그래서 다른 사람들이 같은 표를 놓고 회사 쪽 계산(정밀도가 같다)과 언론 쪽 계산(오류의 종류가 다르다)을 둘 다 다시 해 볼 수 있었고, 둘 다 맞다는 것을 확인했습니다.

그러자 물음이 바뀌었습니다. “누가 계산을 틀렸나”가 아니라 “왜 둘이 동시에 맞을 수 없나”로요. 2016년 가을부터 이듬해 사이에 이 물음에 답한 논문들이 나왔고, 4절 상자의 Kleinberg 등의 논문이 그중 하나입니다. 숫자를 공개해야 다툼이 계산이 되고, 계산이 되어야 정리가 나옵니다.

사진: 브로워드 카운티 법원 단지(미국 플로리다주 포트로더데일) · 출처: Georgia Guercio, Wikimedia Commons (CC BY-SA 3.0)

오검출률 = ① × ② × ③ ① 기저율 몫 p ÷ (1 − p) ② 헛뽑음 몫 (1 − 정밀도) ÷ 정밀도 ③ 붙잡은 몫 1 − 오탈락률 ① ② ③ 오검출률 A 74/26 8/65 65/74 30.8 % B 37/63 8/28 28/37 12.7 % ①이 2.85와 0.59로 다르면, ②와 ③을 같게 맞출수록 오검출률은 반드시 그만큼 벌어진다.
원리 더 깊이

‘0짝’의 정체 — 네 칸이 한 줄의 식으로 묶여 있다

오늘 우리는 10,201짝을 전부 훑어 ‘셋을 동시에 맞출 수 없다’를 확인했습니다. 전수 조사 없이도 그 까닭을 볼 수 있는 식이 있습니다. 네 칸(TP·FP·FN·TN)을 늘어놓고 나눗셈을 다시 묶으면, 오검출률(부적격인데 뽑힌 비율, FP ÷ (FP + TN))이 그림처럼 세 수의 곱으로 정확히 쪼개집니다. 통계학자 Alexandra Chouldechova가 2017년 논문에서 바로 이 재범 위험 점수 자료를 분석하며 이 식을 내세웠습니다.

오늘 표의 값을 넣어 보면 A는 8/26 = 30.8%, B는 8/63 = 12.7%로, 손으로 ②의 경고 상자에 나온 그 숫자가 그대로 나옵니다. 식의 ①은 모델이 손댈 수 없는 데이터의 성질입니다. A는 74 ÷ 26 ≈ 2.85, B는 37 ÷ 63 ≈ 0.59로 다섯 배쯤 차이가 납니다.

그러면 정밀도(②)와 오탈락률(③)을 두 집단에서 똑같이 맞췄다고 해 봅시다. 남는 ①의 차이가 고스란히 오검출률의 차이가 됩니다. 셋 중 둘을 맞추면 나머지 하나는 식이 정해 버리는 것입니다. 오늘 세 정의 가운데 선발률 대신 오검출률이 들어간 짝이지만 모양은 같습니다 — 기저율이 다르면 계산을 아무리 잘해도 빠져나갈 구멍이 없습니다.

100 50 0 73.0% 36.0% 58.4 A집단 B집단 점선 = A의 80% 선발률 비율 36.0 ÷ 73.0 = 0.49 0.8에 못 미치면 불리한 영향이 있다는 신호로 본다 오늘 만든 200명 표 · 기준점 0.50
진로

선발률을 재는 직업 — 알고리즘 편향 감사

오늘의 세 정의 가운데 ① 선발률은 법과 제도가 가장 먼저 붙잡은 숫자입니다. 미국은 1978년 「고용 선발 절차에 관한 통일 지침」에서 5분의 4 규칙을 두었습니다. 한 집단의 선발률이 가장 많이 뽑힌 집단의 80%에 못 미치면 불리한 영향이 있다는 신호로 보고 따져 보는 것입니다. 곧바로 위법이라는 뜻은 아니고, 더 살펴볼 까닭이 생겼다는 경험 법칙입니다. 오늘 표에 대 보면 36.0 ÷ 73.0 = 0.49로 이 선에 크게 못 미칩니다.

이 숫자는 이제 인공지능에도 요구됩니다. 미국 뉴욕시는 2023년 7월부터 채용이나 승진에 자동화된 판단 도구를 쓰는 고용주에게 해마다 독립적인 편향 감사를 받고 그 요약을 공개하게 했습니다. 감사 보고서에는 집단별 선발률과, 그것을 가장 높은 집단의 선발률로 나눈 영향 비율이 들어갑니다 — 그림의 0.49가 바로 그 값입니다.

이런 감사를 맡는 일은 새 직무가 되었습니다. 필요한 것은 오늘 한 일 그대로입니다 — 집단으로 갈라 재고, 지표의 분모를 검산하고, 대리변수를 의심하는 일. 다만 5분의 4 규칙은 선발률 하나만 봅니다. 선발률은 비슷한데 오탈락률에서 격차가 나는 경우는 이 규칙만으로 잡히지 않으니, 좋은 감사자는 어떤 공정성을 쟀는지부터 밝힙니다.