반응형

얼굴인식, 얼굴인증 등 얼굴관련 인공지능 모델 개발에 필요한 데이터 셋 들의 리스트입니다. 인공지능, 특히 딥러닝을 통한 모델 개발시 유용하게 사용될수 있습니다.


http://vis-www.cs.umass.edu/lfw/#resources

LFW Face Database : Main

vis-www.cs.umass.edu


http://shuoyang1213.me/WIDERFACE/

WIDER FACE: A Face Detection Benchmark

News 2017-03-31 The new version of evaluation code and validation resultsis released. 2017-03-31 Add text version ground truth and fix rounding problem of bounding box annotations. 2016-08-19 Two new algorithms are added into leader-board. 2016-04-17 The f

shuoyang1213.me




1| Flickr-Faces-HQ Dataset (FFHQ)

CELEBA-HQ데이터셋 보다 연령, 민족, 그리고 배경에서 더 다양한 이미지를 가지고 있음. 그리고 안경, 선그라스, 모자 등 악세사리 의 경우에도 더 많은 것을 커버함. Flicker로 부터 수집되어 자동으로 편집된 이미지.
Size: The dataset consists of 70,000 high-quality PNG images at 1024×1024 resolution and contains considerable variation in terms of age, ethnicity and image background.
Projects: This dataset was originally created as a benchmark for generative adversarial networks (GAN).
Publication Year: 2019
Download here.

2| Tufts-Face-Database

일반 이미지, 적외선이미지, 비디오 3D 등 다양함
Size: The dataset contains over 10,000 images, where 74 females and 38 males from more than 15 countries with an age range between 4 to 70 years old are included.
Projects: This database will be available to researchers worldwide in order to benchmark facial recognition algorithms for sketches, thermal, NIR, 3D face recognition and heterogamous face recognition.
Publication Year: 2019
Download here.

3| Real and Fake Face Detection

진짜/가짜 얼굴 데이터

Size: The size of the dataset is 215MB
Projects: This dataset can be used to discriminate real and fake images.
Publication Year: 2019
Download here.

4| Google Facial Expression Comparison Dataset

얼굴 표정 데이타 This dataset by Google is a large-scale facial expression dataset that consists of face image triplets along with human annotations that specify, which two faces in each triplet form the most similar pair in terms of facial expression.
Size: The size of the dataset is 200MB, which includes 500K triplets and 156K face images.
Projects: The dataset is intended to aid researchers working on topics related to facial expression analysis such as expression-based image retrieval, expression-based photo album summarisation, emotion classification, expression synthesis, etc.
Publication Year: 2018
Download here.

5| Face Images With Marked Landmark Points

Face Images with Marked Landmark Points is a Kaggle dataset to predict keypoint positions on face images.
Size: The size of the dataset is 497MP and contains 7049 facial images and up to 15 key points marked on them.
Projects: This dataset can be used as a building block in several applications, such as tracking faces in images and video, analysing facial expressions, detecting dysmorphic facial signs for medical diagnosis and biometrics or facial recognition.
Publication Year: 2018
Download here.

6| Labelled Faces in the Wild Home (LFW) Dataset

얼굴과 이름이 정의된 데이터, 얼굴인식과 얼굴인증을 위한 데이터셋
Size: The size of the dataset is 173MB and it consists of over 13,000 images of faces collected from the web.
Projects: The dataset can be used for face verification and other forms of face recognition.
Publication Year: 2018
Download here.

7| UTKFace Large Scale Face Dataset

UTKFace dataset is a large-scale face dataset with long age span, which ranges from 0 to 116 years old. The images cover large variation in pose, facial expression, illumination, occlusion, resolution and other such.
Size: The dataset consists of over 20K images with annotations of age, gender and ethnicity.
Projects: The dataset can be used on a variety of task such as facial detection, age estimation, age progression, age regression, landmark localisation, etc.
Publication Year: 2017
Download here.

8| YouTube Faces Dataset with Facial Keypoints

This dataset is a processed version of the YouTube Faces Dataset, that basically contained short videos of celebrities that are publicly available and were downloaded from YouTube. There are multiple videos of each celebrity (up to 6 videos per celebrity).
Size: The size of the dataset is 10GB, and it includes approximately 1293 videos with consecutive frames of up to 240 frames for each original video. The overall single image frames are a total of 155,560 images.
Projects: This dataset can be used to recognising faces in unconstrained videos.
Publication Year: 2017
Download here.

9| Large-scale CelebFaces Attributes (CelebA) Dataset

CelebFaces Attributes Dataset (CelebA) is a large-scale face attributes dataset with more than 200K celebrity images, each with 40 attribute annotations. The images in this dataset cover large pose variations and background clutter.
Size: The size of the dataset is 200K, which includes 10,177 number of identities, 202,599 number of face images, and 5 landmark locations, 40 binary attributes annotations per image.
Projects: The dataset can be employed as training and testing sets for the following computer vision tasks: face attribute recognition, face detection, landmark (or facial part) localisation, and face editing & synthesis.
Publication Year: 2015
Download here.

10| Yale Face Database

15명의 증명사진 같은 이미지, 인당 11장, 다양한 얼굴표현
Size: The size of the dataset is 6.4MB and contains 5760 single light source images of 10 subjects each seen under 576 viewing conditions.
Projects: The dataset can be used for facial recognition, doppelganger list comparison, etc.
Publication Year: 2001
Download here

10개 데이터셋에 대한 원본 글(https://analyticsindiamag.com/10-face-datasets-to-start-facial-recognition-projects/)

반응형
반응형

 

Precision@k, Recall@k, MAP는 랭킹 성능평가에서 많이 쓰입니다. Precision@k, P@k, Prec@k, Precision-at-k 등 다양하게 사용됩니다. 간단히 말하면 @k의 의미는 k 번째까지의 예측을 가지고 지표를 산정하는 것을 말합니다. 물론  MRR(Mean Reciprocal, Rank), nDCG(Normalized Discounted Cumulative Gain), DCG 등 다른 Ranking 지표도 있습니다. 이번에는 Precision@k, Recall@k, MAP에 대해서 알아보도록 하겠습니다.

Presion@3라면 3개까지의 예측/제안 결과 중에서 몇 개의 TP(특징 발견이 있다고-관련문서라고 맞춘 경우의 수)와 FP(특징이 발견되었다고-관련문서라고 예측했지만 실제로는 없는 경우의 수)를 가지고 계산할 수 있습니다.  Precision = TP / (TP+FP) 이니까요.

검색 엔진을 예로 들어 보겠습니다. 검색창에 '베이징 올림픽 대한민국'(질의1) 이라고 입력했을 때와 '대한민국 베이징 올림픽'(질의2)이라고 입력했을 때(2가지 질의에 대해서) 관련된 검색 결과를 잘 보여주는지 아닌지 평가한다고 가정해보겠습니다. 예를 드는 것이니 관련된 문서가 5개만 있다고 가정하겠습니다.

다시 말하면 질의에 적합한 문서들과 모델에서 순서대로 제안한 문서들을 가지고 계산할 수 있습니다. 정밀도(Precision)는 가져온 것 중에 얼마나 정확한 것이 많은가 를 측정하는 것이고 재현률(Recall)은 가져와야 할 문서 중에 얼마나 많이 가져왔는가를 측정하는 것입니다.

관련된 문서의 id = 1, 2, 3, 4, 5

질의1이 가져온 문서 id = 9, 2, 1

질의2가 가져온 문서 id = 1, 7, 8

 

@1에 대해서(즉, 가져온 1개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 0 / 1 = 0 = 0%

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 0 / 5 = 0 = 0%

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 1 = 1 = 100%

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2 = 20%

 

@2에 대해서(즉, 가져온 2개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9, 2

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 2 = 0.5

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1, 7

Precision@1 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1 / 2 = 0.5

Recall@1 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2

 

마지막으로 @3에 대해서(즉, 가져온 3개까지에 대해서) 정말도와 재현율을 구해보겠습니다.

질의 1이 가져온 문서 id = 9, 2, 1

Precision@3 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 2(2하고 1) / 3 = 0.6

Recall@3 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 2 / 5 = 0.4 

그럼 질의2에 대해서 계산해 보겠습니다.

질의 2가 가져온 문서 id = 1, 7, 8

Precision@3 = 가져온 문서중 관련된 문서 수 / 가져온 문서수 = 1(1번 문서) / 3 = 0.3 

Recall@3 = 가져온 문서중 관련된 문서 수 / 전체 관련된 문서수 = 1 / 5 = 0.2 = 20%

 

@k의 숫자에 따라, 즉, @1, @2, @3에 따라 Precision과 Recall 값이 바뀌는 것을 볼 수 있습니다. 3개 중에서 관련된 문서를 몇 개 가져왔는지 계산하는 것과 10개 중에서 관련된 문서를 몇 개 가져왔는지를 계산하는 것은 당연히 달라져야겠습니다. 이 문서 개수는 기본적으로 검색 결과 첫 화면에 몇 건이 보일 것이냐에 따라 기준이 달라질 것 같습니다.

설명의 편의를 위해서 관련 문서가 동일한 경우로 가정했지만 실제로는 질의별로 관련 문서가 다를 수 있으니 변경해서 산출하면 됩니다.

 

 

Average Precision

위 내용을 이용해서 각 질의에 대한 Average Precision을 구해보면 아래와 같습니다.

Average Precision = (정확한 문서를 가져왔을 경우 Precision 값)의 모든 합 / 정확한 문서를 가져온 횟수

질의 1의 Average Precision => ( 0 + 0.5 + 0.6 ) / 맞은 개수 = 1.1 / 2 = 0.55

질의 2의 Average Precision => (1 + 0.5 + 0.3 ) / 맞은 개수 = 1 / 1 = 1

 

Mean Average Precision(MAP)

mAP는 모델에 대한 성능을 나타냅니다. 즉 모든 테스트 질의 별 Average Precision을 가지고 계산합니다.

질의 별 Average Precision의 총합 / 질의 건수 = (0.55 + 1) / 2 = 0.775

 

같은 방법으로 다른 모델의 테스트 결과를 계산함으로써 다른 모델과 성능을 비교할 수 있습니다.

 

반응형
반응형


지난 포스팅에서는 인공지능/기계학습에 대한 기본적인 정의와 이해에 대해서 알아보았습니다. 학습방법에 따라 지도 학습, 비지도 학습, 강화 학습으로 나눌 수 있다고 말씀드렸었습니다.
https://bigdatamaster.tistory.com/108?category=990312

인공지능 기계학습 용어 상식 - 지도학습/비지도학습/강화학습

인공지능 쉽게말하면, 말 그대로 인공적인 지능을 말한다. 지능이란 인간이 지니는 지적인 능력으로, 합리적으로 생각하고 처리하는 능력이라고 할 수 있다. 인간이 가지는 특징인 지능을 인공

bigdatamaster.tistory.com

이번에는 가벼운 마음으로 인공지능의 역사와 연구분야에 대해 알아 보고자 합니다. 결론부터 말씀드려보면, 인공지능이 처음부터 인기가 많았던 것은 아니었지만 혁신적인 기술과 노력으로 인해 전환점이 되는 계기가 있었습니다. 연구분야의 경우 여러 가지의 방법으로 나눌 수 있겠지만 보통 시각인지 분야(Computer Vision/Multimedia), 언어인지 분야(Natural Language Processing), 그리고 음성/신호 처리 분야로 나눌 수 있을 것 같습니다. 먼저 개괄적인 내용과 인공지능의 역사, 그리고 학회를 통해 알아본 연구분야를 살펴보겠습니다. 이러한 역사와 연구 분야를 알아봄으로써 배경지식을 넓히고 이를 통해 인공지능과 기계학습을 사용할 수 있는 영역을 찾는데 도움이 되길 바랍니다. 물론 창의력을 발휘하여 새로운 영역은 언제든지 만들 수 있습니다. 다만 조금 어려울 뿐이지요.

인공지능 혁신의 시작

인공지능은 1940년대부터 연구된 분야이고 중간에 많은 우여 곡절도 있었고 기호 처리, 전문가 시스템 등 꼭 신경망이 아니라도 다른 여러 가지의 방법으로 인공지능을 만들기 위해 연구해 왔습니다. (너무 내용이 많아서 이 내용은 별도로 이야기하겠습니다.) 현재 우리가 보고 있는 인공지능 혁신의 시작점은 2012년 AlexNet이라는 모델과 2015년 ResNet이라는 모델이라고 할 수 있겠습니다.
먼저 최근 인공지능관련 연구에서 빼놓을 수 없는 분들이 있습니다. 그들은 2018년 튜링 어워드를 수상한 제프리 힌튼(Geoffrey Hinton), 얀 르쿤(Yann LeCun), 조슈아 벤지오(Yoshua Bengio) 입니다. AlexNet은 바로 제프리 힌튼 교수님이 쓴 "ImageNet classification with deep convolutional neural networks" 논문에서 2012년에 발표된 모델입니다. 이 모델이 놀라웠던 이유는 먼저, 기존에 사용되던 모델과 비교해서 우수한 성능 향상을 가져왔다는 것과 또 하나는 신경망의 특징을 찾아냈다는 것일 것 같습니다. 성능은 기존 모델 대비 10.8%의 에러를 줄였고 신경망의 깊이가 깊을수록 좋은 성능을 낼 수 있다는 것을 밝혀냈습니다. 깊은 학습(Deep Learning)을 발견한 것이지요. 그리고 기술적으로는 처음은 아니지만 GPU의 사용과, 얀 르쿤 교수님이 제안한 역전파(Backpropagation) 알고리즘, Max-pooling, ReLU 등을 이용했습니다.
2015년에 ResNet은 더 놀라운 성과를 이루어 냅니다. 바로 사람보다 이미지 분류를 더 잘해 낸 것이지요. 사람은 5%의 에러로 분류했는데 ResNet 모델은 3.57%의 에러로 분류했습니다. 그러니 많은 사람들이 놀랄 수 밖에 없었지요. 그래서 이후에 많은 사람들에게 관심을 받기 시작했습니다. 기술적으로는 말 그대로 딥~네트워크(무려 152층의 신경망 네트워크)를 만들었습니다. 그리고 스킵 컨넥션(Skip-connection), ReLU, Batch normalization을 적용했습니다.

ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
이미지 데이터를 가지고 모델을 학습시켜서 이미지 내 물체를 분류해내고 위치를 찾는 문제를 위한 모델 성능을 평가하는 챌린지

이후로 딥러닝이 여러 분야와 문제에 적용되면서, 그리고 새로운 기술이 적용되면서 많은 확산이 이루어졌습니다. 더불어, 2016년 다보스포럼에서 클라우스 슈바프가 4차산업혁명의 핵심 기술로서 인공지능을 발표하여 세계 많은 사람들의 관심을 증가시켰고, 2016년 3월에는 딥마인드에서 개발한 알파고와 이세돌 기사의 대국으로 인해 국내에서는 더 많은 관심과 주목을 받았습니다. 그래서 더욱 많은 사람들이 인공지능에 대해서 생각하게 되었고 정부나 학계, 그리고 기업에서도 지원을 늘리기 시작했습니다. 현재에는 대학과 기업의 많은 연구소에서 많은 사람들이 많은 연구분야에 대해 활발하게 연구하고 있습니다.

인공지능 연구분야와 지능

인공지능이 해결하고자하는 문제나 연구분야를 고민하기 전에 일반적인 사람의 지능을 어떻게 나눌 수 있는지 생각해보면 좋을 것 같습니다. 인공지능 연구가 지능 연구와 비슷할 수 있으니까요. 위키에서는 지능을 아래와 같이 말하고 있습니다.
지능(智能) 또는 인텔리전스(영어: intelligence)는 인간의 지적 능력을 말한다. 지능은 심리학적으로 새로운 대상이나 상황에 부딪혀 그 의미를 이해하고 합리적인 적응 방법을 알아내는 지적 활동의 능력으로 정의할 수 있다.[1]

지능 - 위키백과, 우리 모두의 백과사전

지능(智能) 또는 인텔리전스(영어: intelligence)는 인간의 지적 능력을 말한다. 지능은 심리학적으로 새로운 대상이나 상황에 부딪혀 그 의미를 이해하고 합리적인 적응 방법을 알아내는 지적 활동

ko.wikipedia.org

핵심을 보면 지능을 "새로운 대상이나 상황에 부딪혀 그 의미를 이해하고 합리적인 적응 방법을 알아내는 지적 활동의 능력"라고 정의할 수 있겠네요.

나무 위키에서는 아래와 같이 나와 있어서 정확히 정의할 수 없겠네요.

"지능이라는 개념은 이 복잡한 현상을 확인하고 명확화하려는 시도이다. 일부 영역에서 상당한 명확성이 달성되었지만, 아직 모든 중요한 질문에 대한 답을 찾은 것은 아니며 완전히 의견 일치가 이루어진 것도 아니다." <미국 심리학 협회의 1995년 보고서>


(위의 정의들을 보고 나니 인공지능이라는 말은 정말 정의하기 어려운 말인 것 같습니다. ^^)

 

나무 위키 말고 그냥 위키의 내용을 기반으로 한번 생각해보시지요. 사람이 새로운 대상이나 상황에 부딪혀 그 의미를 이해하기 위해서 어떻게 하나요? 직설적으로 말씀드리면 보고, 듣고, 느끼고 생각하는 것을 통해 그 의미를 이해할 수 있다고 하겠습니다. 즉, 감각기관을 통해 외부 현상을 받아들이고 과거의 경험, 지식 등을 통해 그 의미를 알 수 있게 되는 것이지요. 아주 간단한 예로는 고양이를 보고 (강아지가 아니라) 고양이인 것을 알고, 휴대폰 벨소리를 듣고 (초인종이 아니라) 전화가 온 것을 알 수 있는 것이지요. 따라서 지능이 있다는 것은 인지능력이 있는 것을 의미한다고 할 수 있겠습니다. '인지'라는 말은 간단히 말하면 고양이와 휴대폰 예에서 처럼 '안다'는 것입니다. (설명하다 보니 '안다'라는 게 참 애매한 의미인 것 같습니다. 말장난 같이 들린 수 있지만 안다는 것은 깊이와 넓이의 한계로 결국에는 정확히(?) 알 수 있는 것은 아무것도 없을 것 같다는 생각이 드네요.^^) 사람에게는 너무나 당연한 예를 들어서 오히려 이상할 수 있겠지만 컴퓨터가 이러한 일을 (사람 수준으로) 할 수 있게 된 것은 불과 10년도 안됩니다. 그럼 이러한 인지영역에는 어떤 것들이 있을까요? 시각을 통해 알아내는 시각인지, 언어를 통해 그 의미를 알 수 있는 언어인지, 소리를 통해 의미를 알 수 있는 사운드인지 등이 있을 것 같습니다. 촉감을 통한 인지도 있을 수 있겠네요.

학회를 통해 알아본 영역

인공지능 관련 주요 학회로는ICCV(International Conference of Computer Vision), CVPR(Conference on Computer Vision and Pattern Recognition), ECCV(European Conference on Computer Vision) 등 시각인지를 다루는 Multimedia(Computer vision) 관련 학회가 있습니다. 그리고 ACL(Association for Computational Linguistics (ACL)), NeurIPS(Neural Information Processing Systems), 등 언어인지를 주로 다루는 NLP(Natural Language Processing) 관련 학회가 있습니다. 기계학습과 관련해서는 ICML(International Conference on Machine Learning), ICMI(International Conference on Multimodal Interaction)등의 학회가 있습니다. 음성/신호 처리 관련해서는 ICASSP(International Conference on Acoustics, Speech, and Signal Processing)가 있습니다. 물론 인공지능과 조금 거리가 있는, 이전부터 있었던 WWW, KDD, SIGMOD 등 인터넷, 데이터 마이닝, 데이터베이스와 관련된 학회도 있습니다. 인공지능이 'AI'라는 단어에 대한 불신이 팽배했던, 그래서 연구에 지원을 못 받았던, 그래서 연구가 활발하지 못했던 시기인 'AI Winter' 시절을 마치고 인기를 끌게 된 시작점이 Computer Vision 분야이기 때문에 관련된 연구와 학회가 가장 먼저 많이 확산되었다고 할 수 있습니다. 이후 자연어 처리나 신호처리 등으로 관련 연구와 실험이 확대되어 많은 성과물은 만들게 되지요.

이제는 연구소에서만 인공지능을 만드는 것이 아닌 상황입니다. 잘 아시는 것처럼 연구뿐만 아니라 이미 실생활에서도 많이 쓰이는 제품/서비스들이 만들어지고 있습니다.(물론 말만 인공지능이라고 가져다 붙인 제품/서비스도 많지만요.) 특히, 오픈 소스 프로젝트의 발달에 따라서 많은 개발과 관리가 더욱 적은 비용과 노력으로 가능하게 되고 있습니다. (물론 발달은 끝이 없을 것 같습니다.) 이러한 움직임은 특히 소프트웨어 거대 기업의 주도로 더욱 활발하게 이루어지고 있습니다. Facebook(Meta), Amazon, Apple, Netflex, Google, Microsoft 등이 대표적인 기업입니다. 아, 하드웨어 기업이긴 하지만 엔비디아(Nvidia)의 역할도 언급을 안 할 수는 없겠군요. GPU(Graphics processing unit)라는 반도체 칩을 생산하는 회사로 이 칩의 대중화로 인해 딥러닝을 실제로 만들 수 있게 되었다고 할 수 있겠습니다. GPU가 없었다면 딥러닝 훈련에 몇 달, 몇 년이 소요됐을 텐데 GPU를 통해 많은 시간을 혁신적으로 단축할 수 있게 되었습니다.

인공지능의 혁신을 불러온 AlexNet과 ResNet을 포함한 간단한 인공지능의 역사에 대해서 이야기했고 주요 학회들을 통해 Computer Vision, NLP, 음성/신호 처리 등의 연구분야가 있다는 것을 알아보았습니다.

기계학습에 대한 분류는 아래 스탠포드 강의를 참고해주세요.
https://bigdatamaster.tistory.com/142

스탠포드 기계학습 강의 Lecture 1 - Stanford CS229: Machine Learning - Andrew Ng (Autumn 2018)

오래된(?) 강의지만 다시 봐도 참 좋은 강의입니다. 앤드류 응 교수님의 스탠포드 컴퓨터 사이언스 과목의 299번 과목의 첫 번째 강의입니다. 앤드류 응 교수는 MIT에서 석사, UC버클리에서 박사를

bigdatamaster.tistory.com

반응형
반응형

ML 실무(Work, Life, Future)

이 글의 목적은 ML 엔지니어가 현업에서 일하면서 겪게 되는 일과 주변 환경, 마주하게 되는 문제, 그리고 해결방법 등의 다양한 경험과 노하우를 공유함으로써 ML 분야에 관심 있는 사람들이 실무에 대한 이해도를 높이고 업무에 적응하는데 도움이 되는 정보를 제공하는 것입니다. 최대한 쉽게 설명할 수 있도록 노력하겠습니다. (이해가 잘 안 되는 부분이나 잘못된 부분이 있으면 댓글, 메일로 알려주세요.)

왜 ML Metric(성능지표)가 필요한가?

이미지 안에 고양이가 들어있는지 아닌지를 구분하는 모델을 만들었다고 생각해봅시다. 잘 만들었다고 자랑하고 싶은데 어떻게 자랑해야 할까요? 쉽게 생각나는 방법이 다른 모델과 비교하는 것입니다. 100 장의 이미지 중에 10장의 고양이 사진이 있는데 내가 만든 모델에서는 10장 모두 찾았고 다른 사람의 모델에서는 9장만 찾았다면 내가 만든 모델이 더 좋은 모델이라고 할 수 있을 것입니다. 내 모델은 10개 중에 10개를 다 찾아서 100%이고, 다른 사람의 모델은 10개 중에 9개만 찾았으니 90% 맞추었다고 할 수 있으니까요. 동의하시나요?
그런데
만약에 내가 만든 모델에서는 100장 중에서 고양이가 있다고 판단한 이미지가 20장이고 다른 사람의 모델에서는 9장이라면 어떨까요? 즉, 내 모델에서는 20장이 고양이가 들어가 있다고 판단했지만 실제로는 10장만 있었고 다른 사람의 모델에서는 9장을 고양이가 들어있다고 판단했고 실제로 9장이 고양이가 들어가 있던 것입니다. 내 모델은 20번 있다고 했는데 10번만 있었으니 50% 맞추었다고 할 수 있고 다른 사람의 모델에서는 9번 있다고 했는데 9번 모두 있었으니 100% 맞추었다고 할 수 있겠네요. 이렇게 생각해보니 다른 사람의 모델이 더 좋은 것 같습니다.
위에서 설명드린 것처럼 단순히 있다/없다로 분류하는 문제에서도 여러 종류의 지표로 그 성능을 평가할 수 있습니다. 이것은 어떤 모델을 선택해서 사용하는 것이 더 좋은지 판단 기준이 되기 때문에 적합한 성능 지표를 산출하고 비교하는 것은 매우 중요합니다. 따라서 분류 문제에 있어서 많이 쓰이는 다양한 성능평가 지표를 알아보고 언제 어떤 지표로 평가/비교하는 게 좋은지 알아보도록 하겠습니다. 그리고 마지막으로는 이해 내용을 확인하는 퀴즈를 풀어보겠습니다. 자 그럼 먼저, 실제 데이터 분류 유형(고양이 있음/없음)과 모델의 추정 분류 경우(고양이가 있다고 추정/없다고 추정한 경우)를 기반으로 각각 발생한 결과수를 정리해서 혼돈 행렬(Confusion Matrix)을 만들어보고 이를 이용한 다양한 성능지표에 대해서 알아보겠습니다.

혼돈 행렬(Confusion Matrix)

위에서 말씀드린 것처럼 혼돈 행렬은 실제 데이터의 분류 유형과 모델의 추정 분류 유형으로 구분됩니다. 그래서 아래와 같은 행렬/표를 만들 수 있습니다.

  추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) TP: True Positive FN: False Negative
실제 분류(고양이 없음) FP: False Positive TN: True Negative

내가 만든 모델의 경우에서 Positive의 의미는 "고양이가 있다"를 나타 냅니다.
TP: True Positive는 모델이 있다고 판단해서 맞은 개수입니다.(실제로 고양이가 있는 이미지를 모델이 있다고 판단한 경우)
FN: False Negative는 모델이 없다고 판단해서 틀린 개수입니다.
FP: False Positive는 모델이 있다고 판단해서 틀린 개수입니다.
TN: True Negative는 모델이 없다고 판단해서 맞은 개수입니다.
"맞추었다"를 True로, "틀렸다"를 False로, "있다"를 Positive로, "없다"를 Negative로 기억하면 좋을 것 같습니다.
위의 표를 앞에서 설명한 '내가 만든 모델'의 결과로 혼돈 행렬을 만들어 보면 아래와 같습니다.

전체 테스트 데이터수 100 건 추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) 10 (모델이 있다고 판단해서 맞은 갯수) 0 (모델이 없다고 판단해서 틀린 갯수)
실제 분류(고양이 없음) 10 (모델이 있다고 판단해서 틀린 갯수) 80 (모델이 없다고 판단해서 맞은 갯수)

처음에 예를 설명하면서 했던 내용들이 깔끔하게 정리되어 보이는 것 같습니다.
(잠시 아래를 보지 말고 '다른 사람이 만든 모델'의 혼돈 행렬을 직접 만들어 보세요.)
'다른 사람이 만든 모델'의 결과로 채워 보면 아래와 같습니다. 9건만 고양이로 분류하고 나머지는 모두 고양이 없음으로 분류한 경우이지요.

  추정 분류(고양이 있음) 추정 분류(고양이 없음)
실제 분류(고양이 있음) 9 1
실제 분류(고양이 없음) 0 90

자, 지금까지 모델의 출력 결과에 따른 혼돈 행렬을 만들어 보았습니다. 그럼 이제부터는 이 행렬을 이용하여 다양한 성능 지표를 만들어 보겠습니다.

정확도(Accuracy)

말 그대로 모델의 정확도를 나타내는 지표입니다. 그래서 True 부분에 집중해서 계산됩니다. 모델이 맞춘 숫자와 실제 데이터 숫자의 비율로 계산할 수 있습니다. 즉, True로 시작하는 TP와 TN의 합을 전체 추정 개수(또는 총 실제 분류 건수:위의 예시에서는 총 데이터 수 100건)로 나누어 주면 됩니다. 아래는 내가 만든 모델에 대한 Accuracy를 계산한 내용입니다.
내가 만든 모델의 Accuracy = (TP + TN) / 총 실제 분류 건수 = (10 + 80) / 100 = 0.9 (= 90%)
(아래를 보지 말고 다른 사람이 만든 모델의 Accuracy를 계산해 보시지요.)
다른 사람이 만든 모델의 Accuracy = (TP + TN) / 총 실제 분류 건수 = (9 + 90) / 100 = 0.99 (= 99%)
Accuracy 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

정밀도(Precision)

모델이 얼마나 정밀하게 Positive를 찾아내는지 평가하는 지표입니다. 그래서 이 지표는 모델의 Positive 결과에 집중해서 계산됩니다. 즉, 전체 Positive라고 추정한 건수 중에 얼마나 맞추었는지를 평가합니다. 다시 말하면, TP 값을 전체 Positive건수(TP + FP)로 나누어서 계산합니다.
내가 만든 모델의 Precision = TP / (TP + FP) = 10 / (10+10) = 0.5 (= 50%)

(아래를 보지 말고 다른 사람이 만든 모델의 Precision를 계산해 보시지요.)
다른 사람이 만든 모델의 Precision = TP / (TP + FP) = 9 / (9 + 0) = 1 (= 100%)
Precision 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

재현율(Recall)

모델이 얼마나 많은 Positive Case를 찾아내는지 평가하는 지표입니다. 그래서 이 지표는 실제 분류 Case 중 Positive를 집중해서 계산됩니다. 즉, 실제 분류 Positive 건수 중에서 얼마나 많은 건수를 맞추었는지를 평가합니다. 다시 말하면, TP 값을 전체 실제 분류 Positive건수(TP + FN)로 나누어서 계산합니다.
내가 만든 모델의 Recall = TP / (TP + FN) = 10 / (10+0) = 1 (= 100%)
(아래를 보지 말고 다른 사람이 만든 모델의 Recall을 계산해 보시지요.)
다른 사람이 만든 모델의 Recall = TP / (TP + FN) = 9 / (9 + 1) = 0.9 (= 90%)
Recall 관점에서 보면 내가 만든 모델이 더 좋은 성능으로 나타납니다.

F1 Score

일반적으로 정밀도와 재현율이 모두 중요한 경우가 많이 있습니다. 즉, 모델이 정밀하게 Positive를 찾아내는 것도 중요하고 많은 최대한 많은 Positive Case를 찾아내는 것도 중요한 경우이지요. 이러한 경우 사용하는 성능지표가 F1 Score입니다. F1 score는 조화 평균의 일종으로 Precision과 Reacall 값을 이용하여 산출됩니다. 공식은 F1 Score = 2 * (Precision * Recall) / (Precision + Recall)입니다. 이를 바탕으로 각 모델의 F1 Score 값을 만들어 보겠습니다.
내가 만든 모델의 F1 score = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (0.5 * 1) / (0.5+1) = 0.66 (= 66%)
(잠시 아래를 보지 말고 '다른 사람이 만든 모델'의 F1 score를 직접 계산해 보세요.)
다른 사람이 만든 모델의 F1 score = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (1 * 0.9) / (1+0.9) = 0.94 (= 94%)
F1 score 관점에서 보면 다른 사람이 만든 모델이 더 좋은 성능으로 나타납니다.

성능 지표 선택

위의 지표들을 보면 어떤 것은 '내가 만든 모델'의 성능이 더 좋고 어떤 것은 '다른 사람이 만든 모델'의 성능이 더 좋게 나옵니다. 이런 경우 어떤 모델을 사용해야 할까요? 중간에 F1 Score 설명할 때 말씀드린 것처럼 모델을 사용하는 목적에 맞는 성능 지표를 사용하는 것이 좋습니다. 직설적으로 말씀드리면 무조건 고양이가 있는 사진을 최대한 많이 찾고 싶으면 Recall을, 고양이가 있는 사진만 잘 골라내고 싶은 경우(즉, 고양이가 없는 사진을 있는 것으로 잘못 찾아내는 것을 최소화하는 경우) Precision을, 두 경우 모두 중요할 경우 F1 score를 사용하는 것이 좋겠습니다.
모두 이해하셨나요? 그럼 질문드려보겠습니다. 아래의 질문을 읽고 어떤 성능지표가 적합한지 맞추어 보세요.

1. 제품 생산 라인에서 품질 이상을 발견하는 정상/불량 판정 모델을 만들었다고 가정하겠습니다. 고객의 품질 요구 수준이 많이 높습니다. 그래서 모델이 불량품을 판별하면 생산 라인이 멈추고 해당 불량품과 관련된 라인에서 1시간 전 이후로 생산된 제품에 대해서 전체 수작업 검사를 진행합니다. 이후 불량품을 제거하고 공정을 재시작합니다. 이러한 경우 어떤 성능 지표로 평가하는 것이 좋을 까요? 그 이유는 무엇인가요?
2. 보험 사기를 적발하는 사기 탐지 모델(Frud Detection Model)을 만들었다고 가정하시죠. 이미 고객센터에서 사기로 의심되는 경우 고객에게 전화하거나 데이터 검토를 통해 사기 여부를 검토하는 업무를 하고 있습니다. 그리고 평균 사기 금액이 크기 때문에 회사는 사기로 인한 잘못된 보험금 지출을 최대한 막기 위해 핵심 사업/과제로 추진하는 상황입니다. 이러한 경우 만들어진 모델을 어떤 성능 지표로 평가하는 것이 좋을 까요? 그 이유는 무엇인가요?
3. X-ray, CT 등 이미지 데이터를 분석해서 암 발생(보유) 유무를 판단하는 모델을 만들었다고 가정하시죠. 이 모델을 평가하는데 적합한 성능 지표는 무엇일까요? 선택하신 성능지표가 적합한 이유가 무엇인가요?
힌트: 활용과 해석이 중요합니다.
각 질문에 대한 답과 이유를 이메일이나 댓글로 남겨주시면 제가 생각한 답을 알려드리겠습니다.
theyellowlionking@gmail.com

마지막으로 AUC/Roc Curve에 대해서 알아보겠습니다.

위키 이미지

위의 그림에서 처럼 True Positive rate 와 False Positive rate를 가지고 그려진 그래프를 Roc Curve(Receiver operating characteristic curve)라고 합니다.
Roc Curve 를 그리게 되면 오른쪽아래 지역과 왼쪽 위 지역으로 나누어지는대 이때 오른쪽 아래 지역을 AUC(Area under the curve)라고 합니다. 이 지역이 넓으면 넓을 수록 모델의 성능이 좋은 것을 알 수 있습니다.

https://en.wikipedia.org/wiki/Receiver_operating_characteristic#/media/File:Roc_curve.svg



감사합니다.

1. 높은 품질 수준을 원하기 때문에 모두 찾아내야 하는 Recall이 중요하고요, 잘못 찾아낸 경우 막대한 손해가 있으니 Precision 도 중요합니다. 따라서 F1 Score를 쓰는 게 좋겠네요.
2. 이미 고객센터에서 고객에게 전화를 걸어 확인하는 단계가 있으므로 모델에서 잘못 찾아내도(정상 고객을 사기라고 찾아내도) 고객센터에서 거를 수 있어서 현재는 Precision 이 낮아도 문제가 되지는 않을 것 같습니다. 그리고 사기 보험금 지출을 최대한 막는 것이 핵심 사업이라고 했으니 모든 사기를 탐지해내는 것이 중요합니다. 따라서 Recall을 사용하는 것이 좋겠네요.
3. 이유만 잘 맞으면 모두 정답입니다.

반응형

+ Recent posts