나뭇잎 교과서

산출물 평가와 공유

프로그램이 돌아간다고 프로젝트가 끝난 것은 아닙니다. 누구에게 잘 동작하고 누구에게는 그렇지 않은지, 다른 사람의 권리를 침해하지 않는지 따져 보고, 다른 사람이 쓰고 이어 고칠 수 있게 공유해야 마무리됩니다.

본문

산출물 평가와 공유

본문

한 모둠이 손글씨로 쓴 급식 신청서를 사진으로 찍으면 이름과 메뉴를 읽어 주는 앱을 만들었다. 시험해 보니 전체 정확도가 93%였다. 발표에서 박수를 받았지만, 정작 왼손잡이 학생들과 흘림체를 쓰는 학생들은 앱이 자기 글씨를 셋 중 하나꼴로 틀린다고 불평했다. 평균 93%인데 왜 누군가에게는 이렇게 자주 틀릴까? 프로그램이 돌아간다고 프로젝트가 끝난 것일까? 산출물을 어떻게 평가하고, 어떻게 공유해야 할까?

그림 1. 다수 집단에서 96%, 소수 집단에서 70% 맞히는 앱의 집단별 정확도와 전체 평균. 소수 집단이 작을수록 전체 평균이 높게 나와 문제가 가려진다.
먼저 알아야 할 것테스트와 디버깅(테스트와 디버깅), 오픈소스와 라이선스(오픈소스로 협력 개발), 가중 평균(수학).

4.5.1평균에 가려진 집단

전체 정확도는 집단별 정확도를 집단의 크기로 가중 평균한 값이다. 사용자의 대부분을 차지하는 집단에서 잘 맞으면, 작은 집단에서 많이 틀려도 평균은 높게 나온다. 그래서 산출물을 평가할 때는 전체 평균만 보지 말고, 사용자를 나누어 집단별로 성능을 재야 한다. 글씨체, 나이, 장애의 유무, 사용하는 기기, 말투 같은 기준으로 나누어 볼 수 있다. 시험 자료를 모을 때부터 여러 집단의 사람들을 고르게 넣어야 이런 차이가 드러난다. 개발자 자신과 비슷한 사람들만으로 시험하면 다른 사람들의 불편을 보지 못한다.

정리 4.5.1 집단별 평가

사용자 가운데 비율 \(s\)인 소수 집단의 정확도가 \(a_1\), 나머지 다수 집단의 정확도가 \(a_0\)이면 전체 정확도는 \[a = (1 - s)\,a_0 + s\,a_1\]이다. \(s\)가 작으면 \(a\)는 \(a_0\)에 가까워 \(a_1\)이 아무리 낮아도 잘 드러나지 않는다. 그래서 집단별 정확도를 따로 보고하고, 가장 낮은 집단의 성능도 기준으로 삼는다.

그림 1에서 소수 집단의 비율을 바꾸어 보자. 소수 집단이 10%이면 전체 정확도는 \(0.9 \times 96 + 0.1 \times 70 = 93.4\)%로 높아 보인다. 그런데 그 10%의 학생에게 앱은 세 번 가운데 한 번꼴로 틀린다. 소수 집단이 5%라면 평균은 94.7%로 더 높아지지만, 그 학생들의 불편은 그대로이다. 즉 평균이 높다는 것은 모두에게 잘 동작한다는 뜻이 아니다. 그래서 산출물 평가 보고서에는 집단별 결과와 함께, 어떤 사람들로 시험했는지를 밝힌다.1

4.5.2권리를 지키며 공유하기

산출물을 공유하기 전에는 다른 사람의 권리를 침해하지 않는지 따진다. 시험에 쓴 손글씨 사진과 이름은 개인 정보이므로, 동의를 받았는지, 공유할 때 지웠는지 확인한다. 다른 사람이 만든 코드, 그림, 글꼴을 썼다면 그 라이선스의 조건을 지키고 출처를 밝힌다. 그리고 다른 사람이 쓰고 이어 고칠 수 있도록 설명서(README)에 무엇을 하는 프로그램인지, 어떻게 설치하고 쓰는지, 어떤 한계가 있는지 적고, 내 코드에도 라이선스를 붙인다. 알려진 한계와 잘 동작하지 않는 집단을 숨기지 않고 적는 것이 정직한 공유이다.

확인할 것급식 신청 앱에서 집단별 성능흘림체, 왼손잡이 글씨의 정확도를 따로 보고 개인 정보와 저작권시험 사진의 동의, 빌려 쓴 코드의 라이선스 이어 쓰기 쉽게설명서, 알려진 한계, 내 코드의 라이선스
그림 2. 프로젝트는 누구에게 잘 동작하는지 따지고, 권리를 지키며 공유할 때 마무리된다.

4.5.3예제 풀이

예제 4.5.2

앱을 학생 500명이 쓴다. 그 가운데 50명은 흘림체를 써서 앱이 70% 맞히고, 나머지 450명에게는 96% 맞힌다. 학생마다 하루 한 장씩 신청서를 찍는다면, 하루에 잘못 읽히는 신청서는 집단별로 몇 장인가? 흘림체의 정확도를 90%로 높이면 전체 정확도와 하루의 오류는 어떻게 변하는가?

흘림체 집단은 \(50 \times 0.30 = 15\)장, 다른 집단은 \(450 \times 0.04 = 18\)장이 틀린다. 전체 정확도는 \((500 - 33) \div 500 = 93.4\)%이다. 학생 수는 10%인 흘림체 집단에서 오류의 45%가 나온다. 한 명이 겪는 오류로 따지면 흘림체 학생은 다른 학생보다 7.5배 자주 틀린 결과를 받는다.

흘림체의 정확도를 90%로 높이면 그 집단의 오류는 5장으로 줄어, 하루 오류가 33장에서 23장이 된다. 전체 정확도는 95.4%로 2%p만 오르지만, 가장 불편하던 학생들의 오류는 3분의 1로 준다. 즉 평균의 작은 변화 뒤에 특정 집단의 큰 개선이 숨어 있을 수 있다. 그래서 개선 방향을 정할 때도 집단별 결과를 보고, 가장 낮은 집단부터 끌어올리는 것이 모두를 위한 산출물을 만든다.

아래 탐구 카드에서 프로젝트 산출물을 여러 사용자 집단으로 평가하고, 다른 사람이 쓰고 이어 고칠 수 있게 공유해 보자.

  1. 2018년의 한 연구는 상용 얼굴 인식 시스템들이 밝은 피부의 남성은 1% 안쪽으로 틀리지만, 어두운 피부의 여성은 최대 35%까지 틀린다는 것을 보였다. 시험 자료에 그 집단이 적게 들어 있었기 때문이다.
마무리

전체 정확도는 집단별 정확도의 가중 평균이라, 작은 집단에서 많이 틀려도 높게 나와 문제를 가린다. 그래서 산출물은 사용자 집단을 나누어 평가하고, 가장 낮은 집단의 성능과 시험한 사람들을 밝히며, 개인 정보와 저작권을 지키고 설명서와 라이선스를 붙여 공유한다. 처음 질문의 앱은 평균 93%이지만 흘림체를 쓰는 10%의 학생에게는 세 번에 한 번꼴로 틀려, 그 학생들에게는 쓸모가 없다.

탐구 1

이름을 지운 자료로도 나를 찾아낼 수 있을까?

빅데이터와 개인 정보 · 재식별 · 범주화
공개 항목
범주화
혼자뿐인 사람 (재식별 위험)
—
5명 미만 무리에 속한 사람
—
연구에 쓸모 (세밀함)
—

가상 도시로, 주민 10,000명, 동 20개, 나이 0~89세가 고르게 분포한다. 미국 연구(Sweeney, 2000)에서는 우편번호, 생년월일, 성별 세 가지만으로 인구의 약 87%를 한 사람으로 좁힐 수 있었다.

  1. 질문병원이 연구를 위해 환자 자료를 내놓으면서 이름과 주민 등록 번호는 지웠다. 남은 것은 성별, 생일, 사는 동네 정도이다. 이 자료로 특정한 사람을 알아낼 수 있을까?
  2. 복원빅데이터는 여러 곳에서 모인 많은 자료를 결합해 새로운 정보를 얻는다. 그래서 결합할수록 쓸모가 커지지만, 한 사람에 대한 정보도 그만큼 촘촘해진다.
  3. 설명항목 하나하나는 흔하지만, 여러 개를 겹치면 조합은 금세 드물어진다. 생일 365가지, 성별 2가지, 동 20개만 겹쳐도 14,600가지라서, 주민 1만 명 대부분이 "그 조합에 혼자뿐인 사람"이 된다. 그러면 이름이 없어도 SNS의 생일이나 주소 같은 다른 자료와 맞춰 보며 누구인지 알아낼 수 있다(재식별).
  4. 연결그래서 공개 자료는 나이를 10년 단위로, 동을 구로 묶는 것처럼 값을 넓게 묶는 범주화를 해서 같은 조합에 여러 명이 있도록 만든다. 대신 자료가 덜 세밀해져 연구에 쓸모는 줄어든다. 개인 정보 보호와 데이터 활용 사이의 균형이 필요한 까닭이다.
  5. 적용항목을 하나씩 켜 보며 "혼자뿐인 사람"의 비율이 어떻게 뛰는지 보자. 그다음 범주화를 써서, 연구 쓸모를 지키면서 위험을 1% 아래로 낮추는 조합을 찾아보자.
  6. 판단"이름을 지웠으니 익명"은 오해이다. 우리나라 개인정보 보호법도 다른 정보와 쉽게 결합해 알아볼 수 있으면 개인 정보로 본다. 그래서 공공 데이터를 쓸 때는 출처와 처리 방법을 확인하고, 내가 올리는 생일, 위치, 학교 정보가 다른 자료와 합쳐질 수 있다는 것도 생각해야 한다.

확인재식별 위험

공개 자료의 재식별 위험을 줄이면서 연구에 쓸 수 있게 하는 방법으로 가장 알맞은 것은?

탐구 2

정확도 95 %인 프로그램은 모두에게 잘 동작할까?

산출물 평가 · 기능적 평가와 윤리적 평가
전체 정확도
—
A 집단 정확도
—
B 집단 정확도
—

모둠이 만든 음성 명령 인식 프로그램을 가정한 모식이다. A는 학습 자료에 많이 들어 있는 말투의 사용자, B는 적게 들어 있는 말투(예를 들어 지역 방언, 고령 화자)의 사용자이다. 정확도와 학습 자료 비율의 관계는 경향만 보이도록 만든 가상의 값이다.

  1. 질문모둠이 만든 음성 명령 인식 프로그램을 평가 자료 100건으로 시험했더니 정확도가 95 %였다. 발표 자료에 “정확도 95 %”라고 쓰면 이 프로그램을 충분히 평가한 것일까?
  2. 복원프로그램이 명세대로 동작하는지는 테스트로 확인한다. 기계 학습으로 만든 프로그램은 학습 자료에 많이 들어 있는 경우를 잘 처리하고, 드문 경우에는 잘 틀린다.
  3. 설명산출물은 기능적 관점(정확성, 효율성, 사용하기 쉬운가, 다양한 환경과 자료에서도 잘 동작하는가)과 윤리적 관점(특정 집단에 불리하지 않은가, 개인 정보를 지키는가, 저작권과 라이선스를 지켰는가, 오용될 위험은 없는가)으로 함께 평가한다. 전체 정확도는 집단별 정확도를 평가 자료의 구성 비율로 가중 평균한 값이라, 수가 적은 집단의 낮은 정확도를 가려 버린다.
  4. 연결그래서 평가 결과는 집단별, 상황별로 나누어 보고한다. 평가 자료가 실제 사용자를 대표하지 못하면 평가 점수 자체가 틀린 정보가 된다. 문제를 찾으면 학습 자료를 보강하거나, 프로그램이 확신하지 못할 때는 사람에게 넘기는 등 설계를 고친다.
  5. 적용처음 상태에서 전체 정확도와 B 집단의 정확도를 비교해 보자. 평가 자료 중 B 비율만 50 %로 올리면 프로그램은 그대로인데 전체 정확도는 어떻게 되는가? 학습 자료 중 B 비율을 올리면 두 집단의 정확도는 어떻게 바뀌는가?
  6. 판단“평균이 높으니 공정하다”는 판단은 틀릴 수 있다. 반대로 집단별 정확도를 똑같이 맞추는 것만이 공정함의 유일한 기준도 아니어서, 어떤 기준을 택했는지 밝히는 것이 중요하다. 이 카드의 숫자는 모식이며, 실제 시스템에서 어느 집단이 얼마나 불리한지는 그 시스템을 직접 평가해야 알 수 있다.

확인조건이 달라지면

A 집단 정확도 98 %, B 집단 정확도 60 %인 프로그램을 평가 자료로 시험한다. 평가 자료가 A 95건, B 5건이면 전체 정확도는 약 몇 %일까?

읽기 3

완성한 프로그램은 무엇을 점검하고 어떻게 공유할까?

읽기 · 기능적·윤리적 평가표, 결과 공유

프로젝트 마감일에 프로그램이 돌아간다. 그런데 “돌아간다”는 것만으로 좋은 산출물이라 할 수 있을까? 다른 사람이 쓰거나 이어서 고치려면 무엇이 더 필요할까?

1산출물 평가표

관점점검할 질문근거로 남길 것
기능적정확성, 명세대로 답을 내는가? 경계값과 예외 경우는?테스트 목록과 통과 결과
효율성, 자료가 10배 늘어도 쓸 만한 시간 안에 끝나는가?알고리즘의 빅오, 자료 크기별 측정 시간
일반성, 다른 자료, 다른 컴퓨터, 다른 사용자에게도 잘 동작하는가?새 자료로 다시 실행한 결과, 집단별 성능
사용성, 처음 쓰는 사람이 설명 없이 쓸 수 있는가?친구에게 써 보게 하고 받은 의견
윤리적개인 정보, 이름, 학번, 위치처럼 사람을 알아볼 수 있는 정보를 모으거나 공개하지 않는가?수집 항목 목록, 동의서, 비식별 처리 방법
공정성, 특정 집단에 불리하게 동작하지 않는가?집단별 평가 결과
저작권, 사용한 코드, 라이브러리, 그림, 자료의 출처와 라이선스를 지켰는가?README의 출처·라이선스 목록
영향, 잘못 쓰이거나 틀렸을 때 누가 어떤 피해를 입는가?한계와 주의 사항 문서

2결과를 공유하는 방법

README

해결하려는 문제, 설치와 실행 방법, 사용 예, 사용한 라이브러리와 자료의 출처, 알려진 한계, 라이선스를 쓴다.

저장소 공개

GitHub 같은 곳에 코드를 올리면 다른 사람이 실행해 보고 이슈나 풀 리퀘스트로 의견을 줄 수 있다. 올리기 전에 비밀번호, API 키, 개인 정보가 담긴 파일이 들어 있지 않은지 확인하고, .gitignore로 그런 파일을 제외한다. 한 번 커밋한 비밀 정보는 나중에 지워도 이력에 남는다.

발표와 시연

문제 → 해결 방법 → 결과 → 평가 → 한계와 다음 계획 순서로 말하고, 실제로 실행하는 모습을 보여 준다. 잘 안 된 점도 숨기지 않고 원인과 함께 말한다.

피드백 반영

받은 의견을 이슈로 정리해 다음 개선 목록으로 남긴다.

판단평가표의 모든 칸에 “잘했음”만 쓰는 평가는 쓸모가 없다. 근거가 있는 한계를 밝히는 것이 산출물의 신뢰를 높인다. 또 윤리적 평가는 완성한 뒤에 한 번 하는 것이 아니라 자료를 모으기 전, 설계할 때부터 함께 해야 한다. 이미 모은 개인 정보는 되돌리기 어렵기 때문이다.

확인조건이 달라지면

모둠이 반 친구 30명의 설문(이름, 통학 시간, 사는 동네)으로 등굣길 추천 프로그램을 만들었고, 코드를 공개 저장소에 올리려 한다. 가장 먼저 점검할 것은?

AI 출제 문항연습문제 풀어보기11문항
Esc

↑↓ 고르기Enter 열기