[노코드머신러닝]다수결의 원칙이 적용되는 머신러닝이 있다고요?

뉴스레터 콘텐츠로 바로 가기! 📚


오늘도 어김없이 돌아온 <노코드 머신러닝의 이해> 6️⃣번째 시간! 어려운 프로그래밍 대신 평소에 자주 사용하는 엑셀로 머신러닝을 이해해 볼 텐데요! 여러분께 한가지 질문을 드리도록 하겠습니다. 작년, Z가방 회사👜에서는 모바일 앱을 론칭하였고, 다양한 프로모션을 진행하여 현재 많은 고객의 관심을 받고 있습니다. 이러한 Z가방 회사👜는 앱로그 분석을 위해 많은 고객들의 ‘앱 방문 횟수’와 ‘상품 클릭 횟수’에 대한 데이터를 보유하고 있는데요. 그렇다면 Z가방 회사👜는 고객인  A씨👩🏻‍의 ‘앱 방문 횟수’와 ‘상품 클릭 횟수’로 가방을 구매할지 여부를 파악할 수 있을까요? 정답은 파악할 수 있다는 것인데요. 🙆🏻‍♀️🙆🏻‍♂️ 바로 A씨와 비슷한 앱 방문 횟수나 상품 클릭 횟수를 가진 고객들의 구매여부를 파악하고, 다수 고객들의 데이터 특성을 따라가는 것이죠! 즉, 이러한 상황은 가장 가까운 K개의 이웃 데이터를 활용하여 새로운 데이터를 분류하고 예측하는 K-최근접 이웃으로 해결할 수 있다고 해요! 그렇다면 K-최근접 이웃의 작동원리, 엑셀로 파헤쳐 볼까요?


이 뉴스레터를 보면 좋은 사람은?

👶🏻 : 러닝머신? 머신러닝? 머신러닝을 처음 들어보는 왕왕왕초보!

👲🏻 : 실무에서 사용하는 엑셀로 노코드 머신러닝 하고 싶으신 분!

👸🏻 : ‘나도 어디서 K-최근접 이웃 해봤어~’ 라고 자랑하고 싶으신 분!

-에이블런 리사 드림💌




다수결의 원칙이 적용된 K-최근접 이웃! 👨‍👩‍👦‍👦


여러분, 다수결의 원칙이 무엇인지 알고 계시나요? 만약 회의에서 모두가 동의하는 방향성을 찾지 못하고 서로 다른 의견이 나온 경우, 차선책으로써 다수의 의견을 따르는 원칙인데요. 이러한 다수결의 원칙이 적용된 머신러닝 기법이 있다고 해요! 바로 K-최근접 이웃이죠! K-최근접 이웃(K-Nearest Neighbor, KNN)은 영어에서도 알 수 있듯이 가장 가까운 K개의 이웃 데이터를 활용하여 새로운 데이터를 분류하고 예측하는 머신러닝 기법입니다.  이때, 다수결의 원칙은 새로운 데이터 근처에 인접한 ‘이웃 데이터’를 활용할 때 적용되는데요. 바로, 다수결의 원칙과 같이 새로운 데이터가 다수의 이웃 데이터 패턴을 따라가는 것이죠! (더욱 자세한 내용은 조금 뒤에 나오는 그림으로 확인해요😙)

이러한 K-최근접 이웃과 기존의 모델에는 큰 차이점이 있는데요. 바로 K-최근접 이웃은 상당히 게으르다는 것이죠. 앗, 그런데 머신러닝이 게으를 수가 있나요? 🙄 여기서 ‘게으르다’는 의미는 별도의 모델을 만들지 않는다는 것입니다. 기존에 배웠던 모델들의 경우, 사전에 분류나 예측을 위한 모델을 만들어 두는데요. (서포트 벡터 머신의 모델이 궁금하시다면, 여기 클릭!) 반면, K-최근접 이웃은 별도의 모델을 생성하지 않아요. 대신 기존 데이터의 패턴을 보고, 새로운 데이터가 어떠한 패턴에 가장 가까울지를 분류하고 예측하죠! 즉, 모델을 별도로 학습하지 않고, 새로운 데이터가 들어와야 작동하는 게으른 머신러닝(Lazy Learning)이랍니다. 



분류와 예측에 사용해요! 


게으른 머신러닝인 K-최근접 이웃은 별도로 모델을 생성하지 않았는데요. 그렇다면, 모델이 없음에도 불구하고 어떻게 분류와 예측을 할 수 있을까요? 🤷🏻‍♀️🤷🏻‍♂️ 바로 앞서 살펴본 다수결의 원칙을 활용해서요! 재미있는 예시로  다수결의 원칙이 활용된 K-최근접 이웃의 분류 방법과 예측 방법을 살펴보기 전, 한 가지 알아야 하는 것이 있는데요.  K-최근접 이웃의 ‘K’는 새로운 데이터와 가장 가깝게 근접한 이웃의 수라는 것이죠! 만약 K를 1로 설정한 ‘1-최근접 이웃’이라면, 새로운 데이터와 가장 가깝게 근접한 하나의 이웃을 정의합니다. 마찬가지로 K를 3으로 설정한 ‘3-최근접 이웃’이라면, 새로운 데이터와 가장 가깝게 근접한 세 개의 이웃을 정의해 주죠. 


그럼 먼저 분류 사례를 살펴보도록 하겠습니다. 여러분은 영화의 어떤 장르를 좋아하시나요? 영화에는 로맨스, 추리, 호러, 코미디 등 다양한 장르가 있는데요. 이때, 여러분께서는 추리 영화와 호러 영화에 관심이 많다고 가정해 보도록 하겠습니다. 


따라서 산점도를 활용하여 X축에는 ‘귀신의 등장 횟수’👻를 Y축에는 ‘살인사건의 횟수’👤를 배치하여 여러분께서 지금까지 시청한 영화들을 점으로 표시해 주었습니다. 산점도를 살펴본 결과, 아무래도 ‘귀신 등장 횟수’👻가 많을수록 호러 영화(초록색 점들)일 가능성이 높고, ‘살인사건의 횟수’👤가 많을수록 추리 영화(노란색 점들)일 가능성이 높다는 것을 알 수 있었죠. 이때, 새로운 영화인 New🔴가 등장하는데요. New 영화의 경우, ‘귀신의 등장 횟수’👻와 ‘살인사건의 횟수’👤에 큰 차이를 보이지 않아 호러 영화와 추리 영화 중 어떤 것으로 구분해야 할지 어려움을 겪고 있습니다. 이때, 여러분께서 좋은 아이디어를 하나 내주셨는데요. 바로 K-최근접 이웃을 활용하여 분류를 진행하는 것이죠. 


여기서 K란, 새로운 New🔴 데이터와 가장 가깝게 근접한 이웃의 수를 의미하는데요. 먼저, 왼쪽 사진은  K를 1로 설정했습니다. 즉, 새로운 New 데이터와 가장 가까운 하나의 이웃을 정의한 것이죠. 이때, 회색 점선 안의 이웃으로는 1개의 추리 영화🟡가 있어요. 따라서 K가 1인 경우, 다수결의 원칙에 따라 새로운 New 영화를 추리 영화라고 판단해 주죠. 이번에는 오른쪽 사진과 같이 K를 3으로 설정해 보도록 하겠습니다. 즉, 새로운 New 데이터와 가장 가까운 세 개의 이웃을 정의한 것인데요. 이때, 회색 점선 안의 이웃으로는 1개의 추리 영화🟡와 2개의 공포 영화🟢가 있어요. 따라서 K가 3인 경우, 다수결의 원칙을 적용하여 새로운 New 영화를 공포 영화라고 판단해 주죠. (만약 K가 짝수인 경우 다수결의 원칙이 어렵기 때문에 K는 홀수로 설정해 주는 것이 좋아요😏)


이번에는 예측의 사례를 살펴보도록 해요. 앞선 분류의 경우에는 데이터가 어느 범주에 속하는지에 관심을 가졌는데요. (추리 영화인지 공포영화인지 분류해주는 것처럼요!) 이번에 살펴볼 예측은 데이터가 어떠한 값을 가질지를 예측한답니다. 조금 더 쉬운 이해를 위해 여러분을 직장인 영화 소모임의 부원이라고 가정해보겠습니다. 영화 소모임에서는 다양한 영화를 함께 감상하고, 영화에 대한 평점(5점 만점)을 매기는데요. 여러분과 다른 부원들은 영화 <셜록홈즈>와 <컨저링>을 함께 시청하고, 이에 대한 평점을 매겼습니다. 

이때, 산점도를 활용하여 X축에는 ‘컨저링 평점’을 Y축에는 ‘셜록홈즈 평점’을 배치하여 여러분과 다른 부원들의 평점을 점으로 표시해 주었습니다. (여러분의 영화 평점 데이터를 빨간색으로 표시할게요.) 그 후, 다음 소모임의 일정은 영화 <자백>를 함께 시청하는 것이었는데요. 하지만 여러분께서는 일정이 맞지 않아 아쉽게도 영화 <자백> 감상에는 참여하지 못하셨습니다.😢 반면, 다른 부원들은 <자백>을 함께 감상한 후, 평점까지 매겼는데요. 산점도의 각 데이터에 <자백>의 평점을 흰색 숫자로 표시해 주었습니다. 여러분은 <자백>을 보지 못하셨기 때문에 <자백>에 대한 평점을 알 수 없어 New라고 작성해 주었죠.


그런데, <자백>을 보지 않으신 여러분께서도 영화 <자백>에 매길 평점을 예측할 수가 있다고요? 🤷🏻‍♀️🤷🏻‍♂️ 네, 바로 K-최근접 이웃을 활용하는 것이죠! 이때, <컨저링>과 <셜록홈즈>의 평점을 *|FNAME|*님과 비슷하게 매긴 사람들의 데이터를 활용하여 <자백>의 평점을 예측합니다.




예측에서의 K-최근접 이웃 진행 방식은 분류 모델과 비슷합니다. 먼저, 왼쪽 사진은 K를 1로 설정했는데요. 즉, 새로운 New 데이터와 가장 가까운 하나의 이웃을 정의한 것이죠. 이때, 회색 점선 안의 이웃으로는 1개의 4점 평점이 있어요. 따라서 K가 1인 경우, 여러분께서 <자백>에 매길 평점을 4점이라고 예측해 주죠. 이번에는 오른쪽 사진과 같이 K를 3으로 설정해 보도록 하겠습니다. 즉, 새로운 New 데이터와 가장 가까운 세 개의 이웃을 정의한 것인데요. 이때, 회색 점선 안의 이웃으로는 각각 3점, 4점, 2점의 평점이 있어요. 따라서 K가 3인 경우, 이웃들의 평균값인 (3+4+2)/3인 3을 이용하는데요. 따라서 여러분께서 <자백>에 매길 평점을 3점이라고 예측해요. (연구자 분들이 많은 연구를 한 결과, 평균값을 활용하는 것이 가장 예측이 잘 되었다고 합니다.😉)



K값에 따른 과대적합과 과소적합?


지금까지 K-최근접 이웃의 개념과 활용 방법에 대해 살펴보았습니다. 그렇다면, 새로운 데이터와 가장 가깝게 근접한 이웃의 수인 K는 몇 개 정도로 설정하면 좋을까요? 이러한 질문의 답을 얻기 위해서는 K의 값에 따라 어떠한 결과가 나오는지를 알아보아야 하는데요. 결론을 먼저 이야기하면 K가 너무 작을 경우 데이터를 과하게 학습하는 과대적합(Overfitting, 오버피팅)이 되며, K가 너무 클 경우 데이터를 충분히 설명하지 못하는 과소적합(Underfitting, 언더피팅)이 됩니다. 자세한 내용은 앞서 살펴본 추리 영화와 공포 영화의 분류로 알아볼게요. (예측도 동일한 원리로 생각해 주면 됩니다.😚)



왼쪽 사진과 같이 새로운 데이터와 가장 가깝게 근접한 이웃의 수인 K를 1로 설정한 경우를 가정해보도록 하겠습니다. 즉, K가 극단적으로 작은 상황이죠. 이웃의 수가 매우 작다면 그만큼 시야가 좁아지고, 데이터 하나하나에 영향을 받는 과대적합(Overfitting, 오버피팅) 문제가 발생합니다. 이번엔 오른쪽 사진과 같이 새로운 데이터와 가장 가깝게 근접한 이웃의 수인 K를 11로 설정한 경우를 가정해볼게요. 즉, K가 극단적으로 많은 상황이죠. 이웃의 수가 매우 많다면 그만큼 다른 범주의 데이터를 포함할 확률이 높아지기 때문에, 잘못 분류를 할 위험성이 커지는 과소적합(Underfitting, 언더피팅) 문제가 발생합니다.


그렇다면, 이러한 2가지 문제점을 최소한으로 줄이는 K를 선택하는 방법은 무엇일까요? 바로 K개의 개수를 1부터 전체 데이터 수까지 조정하며, 가장 좋은 예측 결과를 보이는 값을 선정하면 되는데요. 일반적으로는 총 데이터 수의 제곱근 값을 사용한다고 해요. 




거리를 구하는 방법은?


그렇다면 여러분, 새로운 데이터와 근접한 이웃의 거리는 어떻게 측정할까요? 거리를 구하는 다양한 방법이 있지만, 이번 시간에는 유클리드 거리(Euclidean Distance)와 맨해튼 거리(Manhattan Distance)를 알아보아요. 

우리의 관심사는 새로운 데이터와 근접한 이웃 데이터의 거리를 구하는 것인데요. 새로운 데이터를 빨간색🔴 New로, 근접한 이웃 데이터를 회색⚪으로 표시했어요. 각각의 거리는 보라색 직선을 나타내죠! 먼저, 유클리드 거리(Euclidean Distance)는 우리가 흔하게 사용하는 거리의 측도로, 두 관측치 사이의 최단거리인 직선을 의미하죠!  (마치, 빌딩 등의 장애물이 없는 하늘에서 비행기를 타고 이동하는 경우처럼요!) 하지만, 도로에서는 빌딩이 있어 이러한 경로가 불가능한데요. 따라서 맨해튼 거리(Manhattan Distance)를 적용하죠. 맨해튼 거리는 바둑판처럼 가로와 세로가 일정한 간격으로 직각 형태의 도로인 맨해튼 거리에서 착안했는데요. 격자를 따라서 이동할 때, 계산되는 거리를 말해요. 




엑셀로 따라 하는  K-최근접 이웃!

지금까지 K-최근접 이웃의 원리를 차근차근 이해해 보았는데요. 이러한 K-최근접 이웃의 장점은 단순하여 다른 알고리즘에 비해 구현하기 쉽다는 것입니다. 또한, 새로운 데이터에서 가장 가까운 K개의 데이터만 활용하기 때문에 관측되는 데이터의 범위에서 많이 벗어나는 이상치에 둔감해요. 하지만, 모델을 생성하지 않기 때문에 특징을 이해하는데 제한적인 면이 있고, 데이터의 양이 많아진다면 분류의 과정이 오래 걸린다는 단점이 있죠. 마지막으로 엑셀을 활용하여 K-최근접 이웃을 하는 방법까지 공부하면 미션 클리어 😎


kNN Machine Learning Algorithm - Excel

Jalayer Academy


지금까지 자세한 작동원리로 알아본 K-최근접 이웃, 엑셀로 해보고 싶으시다고요? 그럼 위에 있는 유튜브 사진을 클릭해 주세요! 🔼🔼🔼


유튜브에 베이즈 정리가 적용된다고?😲

베이즈 정리가 순진하다고요?🥴

데이터를 유사한 속성으로 묶어준다고요? 📊

서포트 벡터 머신, 가보자고! ✊🏻

밀도를 기반으로 비슷한 것끼리 묶는다고요?👥


지금 이 콘텐츠 공유하기👇