[노코드머신러닝]밀도를 기반으로 비슷한 것끼리 묶는다고요?👥

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


오늘도 어김없이 돌아온 <노코드 머신러닝의 이해> 5️⃣번째 시간! 어려운 프로그래밍 대신 평소에 자주 사용하는 엑셀로 머신러닝을 이해해 볼 텐데요! 여러분, 다음의 2가지 문제를 어떻게 해결하면 좋을지 함께 생각해보아요. 제조업 현장에 있는 수많은 기계 설비들 중 불량이 자주 일어난 기계들의 밀집 구역을 선정할 수 있을까요?🤷🏻‍♀️ 서울에 위치한 수많은 대중교통 정류장을 접근하기 편한 정류장끼리 묶어 군집화할 수 있을까요?🤷🏻‍♂️ 질문에 대한 답변을 하기 전, 2가지 문제의 공통점을 생각해 보아요. 정답은 바로 특정한 공간인 ‘제조업 현장’이나 ‘서울’의 데이터라는 것인데요. 즉, 앞선 2가지 상황의 문제점은 특정 공간 내의 데이터 밀도 차이를 이용한 클러스터링인 DBSCAN(디비스캔)으로 해결할 수 있다고 해요! 데이터 밀도 차이를 바탕으로 서로 다른 군집을 구분하는 DBSCAN (밀도 기반 클러스터링)의 작동원리, 엑셀로 파헤쳐 볼까요?


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

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

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

👸🏻 : ‘나도 어디서 DBSCAN 해봤어~’ 라고 자랑하고 싶으신 분!

- 리사 드림 💌




클러스터링 복습하기!😋


여러분, 지난 <노코드 머신러닝의 이해> 3탄에서 살펴본 클러스터링의 개념, 기억하시나요? (기억이 안 난다면, 여기 클릭!) 클러스터링(Clustering)이란, 서로 유사한 속성을 갖는 데이터를 같은 군집으로 묶어주는 작업이었는데요. 클러스터링은 분류와는 다르게 사전 정보가 존재하지 않는 비지도 학습이죠! (비지도 학습이 궁금하다면, 여기 클릭!) 이러한 클러스터링은 유사한 데이터들을 차례로 묶어 계층적으로 결합하는 ‘계층적 클러스터링’과 다양한 기준으로 중심점을 수정하며 집단을 재분류하는 ‘분할적 클러스터링’으로 구분되는데요. 두 개의 클러스터링 중 이번 시간에는 ‘분할적 클러스터링’에 초점을 맞춰보도록 할게요.




분할적 클러스터링은 크게 ‘중심 기반’(Center-based) 방법과 ’밀도 기반’(Density-based) 방법으로 나눌 수 있습니다. 먼저 중심 기반 방법의 경우 같은 클러스터링의 데이터는 특정 중심을 기준으로 분포한다고 가정하며, 대표적인 중심 기반 알고리즘으로는 지난번 살펴본 ‘K-평균 클러스터링’이 있어요. (K-평균 클러스터링이 궁금하다면, 여기 클릭!) 반면 밀도 기반 방법의 경우, 같은 클러스터링의 데이터는 서로 근접하게 분포한다고 가정하며 대표적인 밀도 기반 알고리즘으로는 오늘 살펴볼 ‘DBSCAN’(디비스캔)이 있죠!




DBSCAN이 뭔가요? 🔎


그렇다면, DBSCAN을 자세히 알아보도록 해요! DBSCAN이란 Density-Based Spatial Clustering of Applications with Noise의 약어인데요. 즉, DBSCAN(디비스캔)은 보통 관측된 데이터의 범위에서 많이 벗어난 값인 이상치(노이즈)가 있는 대규모 데이터에 적용할 수 있는 밀도 기반의 클러스터링입니다. 이러한 DBSCAN은 동일한 집단의 데이터는 서로 근접하게 분포할 것이라는 가정하에 분석을 시작합니다. (마치 비슷한 것들끼리 무리를 이루는 유유상종처럼요🤗) 이때, 특정 공간 내에서 데이터 밀도 차이를 바탕으로 서로 다른 군집을 구분하는데요. 따라서 상대적으로 더 밀집된 데이터들은 하나의 군집으로 설정되죠!


여러분께서 DBSCAN을 활용하기 위해서는 2가지 값을 지정해야 하는데요. 바로 epsilon(입실론, 반경의 크기)과 min points(민 포인트, 최소 군집의 크기)입니다. 

먼저 epsilon(입실론, 반경의 크기)이란, 개별 데이터의 반경인 원의 반지름을 나타내는 값으로 해당 반경 안에 속하는 데이터는 이웃으로 정의해 줍니다. 위 사진에서도 알 수 있듯이 개별 데이터 A의 epsilon은 3cm인데요. 따라서 반지름이 3cm인 보라색 원이 데이터 A의 반경이 되며 이러한 반경 안에 속하는 데이터 B는 이웃으로, 반경 안에 속하지 않는 데이터 C는 이웃이 아니라고 정의하는 것이죠! 


min points(민 포인트, 최소 군집의 크기)란, 개별 데이터가 군집으로 정의되기 위해 필요한 최소한의 이웃 수를 말해요. (이때, 자기 자신도 이웃의 수에 포함을 시켜줍니다.) 만약, min points를 4라고 가정해 보도록 하겠습니다. 즉, 개별 데이터가 군집으로 정의되기 위해서 필요한 최소한의 이웃의 수는 4라는 의미죠. 왼쪽 그림의 경우 A 데이터의 이웃의 수는 총 6개(A 데이터도 포함)로 min points를 만족하기 때문에 군집으로 인정받을 수 있어요. 하지만 오른쪽 그림을 보면, A 데이터의 이웃 수는 총 3개로 min points인 4보다 작기 때문에 군집으로 인정받을 수 없죠. 




DBSCAN 점들의 역할은? 👀


앞서 살펴본 2가지 개념인 epsilon(반경의 크기)과 min points(최소 군집의 크기)를 데이터에 적용하면, 각 데이터들의 역할을 Core(중심점), Border(경계점), Noise(잡음/이상치)로 구분할 수 있습니다. 여러분, 직관적인 이름 덕분에 각 점의 역할이 무엇인지 감이 오시나요? 🤷🏻‍♀️🤷🏻‍♂️

Core(중심점)란, 우리가 지정한 epsilon(반경의 크기) 내에 min points(최소 군집의 크기) 이상의 점이 존재하는 중심점을 의미해요. 즉, 내가 설정한 반경 안에 군집이 되기 위해 필요한 데이터의 개수와 같거나 더 많은 데이터를 가지고 있는 점을 말하죠! Border(경계점)란, 군집의 중심점이 되지는 못하지만, 군집에 속해있는 점을 의미하는데요. 즉 최소 군집의 크기를 만족하지는 않지만, 중심점을 이웃의 점으로 가지고 있는 점이랍니다. 마지막으로 Noise(잡음/이상치)는 군집에 포함되지 못하는 점으로 중심점과 경계점이 아닌 점이죠. (잘 이해가 가지 않는다면, 아래 내용을 통해 다시 한번 복습해요.😏)




DBSCAN의 과정은? 🧐 


그렇다면, DBSCAN의 과정을 함께 살펴보도록 해요. 이때, 그림을 활용하여 앞서 공부한 Core(중심점), Border(경계점), Noise(잡음/이상치)도 복습하겠습니다!

여러분, 잠시만요! 뭔가 잊으신 거 없으신가요? 🙋🏻‍♀️🙋🏻‍♂️ 바로 DBSCAN을 하기 위해서는 epsilon(반경의 크기)과 min points(최소 군집의 크기)를 정해줘야 하죠! 이번 예시에서는 개별 데이터의 반경인 epsilon을 2cm, 개별 데이터가 군집으로 정의되기 위해 필요한 최소한의 이웃 수인 min points를 3으로 결정하도록 하겠습니다. 그럼 DBSCAN 시작!

① 데이터 A를 중심으로 2cm 반경(epsilon) 안의 이웃의 수가 3인데요. (데이터 A,B,C가 있죠.)  군집으로 정의되기 위해 필요한 최소한의 이웃 수를 만족하기 때문에 군집 (A,B,C)가 생성 되죠. 이때 데이터 A는 우리가 지정한 epsilon(반경의 크기)인 2cm 내에 min points(최소 군집의 크기)인 3을 만족하기 때문에 ‘Core(중심점)’라고 말할 수 있어요. (Core는 노란색🟨으로 표시해 줄게요.)

 

② 데이터 B를 중심으로 2cm 반경 안의 이웃의 수가 4인데요. (데이터 A,B,C,D가 있죠.) 군집으로 정의되기 위해 필요한 최소한의 이웃 수인 3보다 크기 때문에 군집이 생성됩니다. 이때, 데이터 B가 속했던 군집 (A,B,C)에 새로운 데이터 D가 추가 되어 군집 (A,B,C,D)가 만들어지죠. 데이터 B의 경우, ①단계와 같은 원리로 ‘Core(중심점)’🟨라고 부를 수 있어요. 

 

③ 데이터 D를 중심으로 2cm 반경 안의 이웃의 수가 2입니다. 이러한 값은 군집으로 정의되기 위해 필요한 최소한의 이웃 수인 3보다 작기 때문에 원래는 군집이 될 수 없습니다. 하지만, Core인 데이터 B를 이웃으로 가지고 있기 때문에 해당 경계에서 확장을 멈추고, 데이터 D는 기존의 군집에 포함시켜 줍니다. 이때 데이터 D의 경우, 이웃의 수가 2로 최소 군집의 크기인 3을 만족하지는 않지만, Core를 이웃의 점으로 가지고 있는 ‘Border(경계점)’가 됩니다. (Border는 파란색🟦으로 표시해 줄게요.)

 

④ 데이터 C를 중심으로 2cm 반경 안의 이웃의 수는 3이기 때문에 군집으로 정의되기 위해 필요한 최소한의 이웃 수를 만족합니다. 따라서 데이터 C의 경우, ‘Core(중심점)’🟨가 되죠!

 

⑤  데이터 E를 중심으로 2cm 반경 안의 데이터가 존재하지 않는데요. 이웃의 수가 0으로 군집으로 정의되기 위해 필요한 최소한의 이웃 수인 3보다 작고, Core(중심점)를 이웃으로 갖는 Border(경계점)도 아니기 때문에 어느 군집에도 속하지 못한 ‘Noise(잡음/이상치)’가 되죠! (Noise는 회색⬜으로 표시해요.)


지금까지 살펴본 ①단계에서부터 ⑤단계를 정리한 그림은 아래와 같습니다. 최종적으로 생성된 군집은 (A,B,C,D)이며, E는 이상치/잡음인 ‘Noise’⬜로 나타났습니다. 또한 데이터 A,B,C의 경우는 중심점인 ‘Core’🟨이며, 데이터 D는 경계점인 ‘Border’🟦이죠!


그렇다면, 지난 시간에 배운 ‘K-평균 클러스터링’과 DBSCAN은 어떠한 차이점이 있을까요? ‘K-평균 클러스터링’은 군집의 개수를 사전에 지정해야 하지만, DBSCAN은 군집의 개수를 자동으로 찾아준다는 것이 유용하죠. 또한, ‘K-평균 클러스터링’의 경우, 이상치 역시 평균 계산에 사용되어 새로운 군집의 중심점이 왜곡될 수 있는데요. 반면, DBSCAN은 이상치를 구분해서 제외함으로써 의미가 없는 군집이 생성되는 것을 막아줍니다. 

그뿐만 아니라 DBSCAN은 ‘밀도’를 활용하여 복잡하거나 기하학적인 형태를 가진 데이터에도 클러스터링을 적용할 수 있다는 장점이 있죠. 하지만, 데이터의 밀도가 다양한 경우(밀도가 오밀조밀한 클러스터링과 듬성듬성한 클러스터링이 함께 존재)에는 DBSCAN이 부적합합니다. 또한, 많은 연산이 필요하여 결과 처리의 속도가 느리다는 단점이 있죠. 지금까지 DBSCAN의 원리와 과정, 장점과 단점까지 알아보았는데요! 마지막으로 엑셀을 활용하여 밀도 기반 클러스터링인 DBSCAN을 하는 방법까지 공부하면 미션 클리어 😎



Data Mining - DBSCAN / Ples Ramadar

 

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


지금 이 콘텐츠 공유하기👇