대외활동/Brightics 서포터즈

[Brightics | 프로젝트] 서울시 건강 고위험 지역 군집화 (2) 계층적 군집화(Hierarchical Clustering)

케이와이엠 2021. 9. 27. 23:47

지난 시간, 서울시 건강 고위험군 지역을 군집화하기 위해서

지표 선정을 위한 데이터를 수집해주었는데요 !

해당 포스팅은 아래 링크에서 확인하실 수 있습니다 :_:

 

[Brightics | 프로젝트] 서울시 건강 고위험 지역 군집화 (1) 나만의 위험군 지표 선정하기

​ 이번 시간은 개인프로젝트의 PART 2 ! 서울시 건강 고위험 최상위 지역군을 군집화해보는 시간이에요 . ​ ​ 먼저 건강 적신호의 최상위 군집을 군집화하기 위해선, '건강 고위험군'이 뭔지 !

uumini.tistory.com

그럼 이제 본격적으로 지역 군집화 과정을 진행해보도록 할게요!


들어가기 전에 한 가지 아쉬운 소식이 있는데요 ㅜㅜㅜ

지표 중 하나로 쓰기로 마음 먹었던 <주요질환 연령 표준화 사망률> 데이터가 아직까지 업로드 되지 않았더라구요 ...

분명 제 계산이 맞다면 9월 넷째 주 화요일에 사망원인통계를 발표하고 있는 것 같은데 말이죵

 

일주일 내내 확인했지만 글을 쓰고 있는 이 시점까지 올라오지 않아서 

2020 연령 표준화 사망률 지표는 사용하기 힘들 것 같아요 

 

그래서 제가 갖고 있는 9가지 feature들과 region(서울시 구 이름) 칼럼으로 이루어진 데이터셋으로

쭉 진행해보겠습니다.

 


군집화(Cluster) 란 ?

군집화는 비지도학습의 대표적인 방법으로, 주어진 데이터 셋에서 유사한 그룹으로 나누는 과정을 의미합니다.

비슷한 특성으로 나뉘어진 집단을 클러스터(cluster)라고 부르며,

데이터 속 속성만을 활용하여 그룹을 완성시켜줍니다.

군집화를 하는 기법은 매우 다양한데요,

대표적으로 계층적 군집화, 분할 군집화, 모델 기반 군집화가 있어요.

계층적 군집화

(Hierarchical Clustering)

계층적 군집화는 거리(distance), 또는 유사도(similarity)을 기반으로 개별 개체들을 순차적으로, 그리고 계층적으로 유사한 그룹을 통합하는 알고리즘입니다. 이때 우리가 흔히 알고 있는 k-means 군집화와는 다르게 군집 수를 사전에 정해주지 않아도 된다는 특징을 갖고 있습니다.

이는 트리 모형을 이용하기에 트리형태 구조인 덴드로그램(Dendrogram) 덕분인데요,

출처 :  https://ratsgo.github.io/machine%20learning/2017/04/18/HC/

 

 

위와 같은 덴드로그램을 생성한 다음에, 특정한 threshold를 기준으로 트리를 잘라가며 군집을 나눌 수 있을 것입니다.

따라서 클러스터 개수를 원하는 수준 만큼 정해서 군집을 만들 수 있다는 장점이 있죠 !

 

군집화 기법

계층적 군집화 기법에는

1. 군집들 사이의 거리를 계산하여 가장 가까운 개체들을 차례로 묶는 병합적 방법

2. 큰 군집에서 시작하여 먼 거리에 있는 개체들을 분리시켜버리는 분할적 방법이 있습니다.

연결법

이때 군집 간의 거리를 계산하기 위해서 여러가지 연결법이 사용되는데요,

단일연결법, 완전연결법, 평균연결법, 중심연결법, 와드연결법 등이 있어요.

출처 : https://dataaspirant.com/ ​

 

1. 단일 연결법 (최단 연결법, Single linkage)

각각의 군집에서 하나씩 선택한 개체를 연결했을 때 가장 짧은 거리

2. 완전 연결법 (최장 연결법, Complete linkage)

각각의 군집에서 하나씩 선택한 개체를 연결했을 때 가장 긴 거리

 

 

3. 평균 연결법 (Average linkage)

각각의 군집에서 하나씩 선택한 개체를 연결한 전체 거리의 평균

 

 

4. 중심 연결법 (Centroid linkage)

각각의 군집 내에서 개체의 중간에 해당하는 점(Center)를 연결한 거리

 

 

 

5. ward 연결법 (Ward linkage)

각각의 군집 내에서 개체의 중간에 해당하는 점(Center)과 각각의 개체 사이의 거리를 제곱하여 합한 값과(Level 1), 군집을 하나로 묶을 때 모든 개체의 중간에 해당하는 점(Center)과 각각의 개체 사이의 거리를 제곱하여 합한 값(Level 2)를 더한 거리

우리의 브라이틱스 구동 화면에서도 이렇게 연결법을 고르는 선택지가 나온답니다.

 

 

 

 

 

더 자세한 설명은 아래의 링크 추천드려요 !

http://www.datamarket.kr/xe/board_mXVL91/980

 

데이터분석

List of Articles 번호 제목 글쓴이 날짜 조회 수 8 8.군집분석[H-cluster] 바키똥 2015.09.22 69610 7 군집분석[K-means] 뀐뀐 2015.09.19 64901 6 6. K 근접이웃 알고리즘 1 통계돌이 2015.08.16 59871 5 5. 나이브 베이즈 분

www.datamarket.kr

 


그럼 이제 계층적 군집화를 사용하여 본격적으로 데이터를 나눠보도록 할게요 !

정규화 Normalization

군집화 기법은 위에서 설명했듯이, 거리를 기반으로 군집을 나누게 되는데요,

이때 군집을 나누는데 사용하는 feature들 간에 단위 차이가 발생한다면 결과에도 영향이 미칠 수 있습니다.

따라서 우리는 데이터들을 minmaxscaler / standardscaler 등의 방식으로 정규화 작업을 거치곤 하죠 !

 

input columns에 들어가는 변수들에 대해 StandardScaler로 표준화를 하였습니다.

 

계층적 군집화(Hierarchical Clustering)

이제 브라이틱스 스튜디오에 내장된 Hierarchical Clustering 함수를 꺼내볼 시간이에요!

저는 와드연결법과 유클리디안 거리를 이용해서 군집화해주었습니다.

그 결과 위와 같은 덴드로그램이 완선됩니다 !

우리는 이제 덴드로그램에서 제공하는 모양을 통해 합리적인 군집 개수가 추론 가능하겠죠 ?

저는 너무 적지도, 너무 많지도 않게끔 4개의 군집으로 나누어보기로 했습니다 !!

군집화 사후 처리(Hierarchical Clustering Post Process)

 

덴드로그램으로 군집의 개수를 정했다면, 군집을 실제로 나누는 작업이 필요합니다.

cluster의 개수로 '4'를 지정하여 주면, 마지막 칼럼에 cluster가 나오는 걸 볼 수 있죠 !

chart 로 군집 분포를 보아하니 4번 군집에 많은 구들이 포함되어있네요!

양적으로 균형있게 들어갔으면 좋았을텐데 내심 .. 아쉽네요 .. 흑

 

💡 Insight ! 💡

다음으로 군집에 해당하는 지역들을 정리 해보았습니다.

아직은 구 이름들만으로 군집 특성을 유추하긴 역시 불가능이죠 ? 허허

각 군집별로 어떤 비슷한 패턴​을 보이고 있는지

우리의 든든한 친구 summary와 함께 대략적인 결론을 내려보았답니다 !!

1번 군집부터 4번 군집까지의 주요 특성을 짚어보자면

* 1번 군집 : 우울증 경험 1위 / 비만율 제일 낮다+고르게 / 증등도 이상 신체활동 극1위지만 분산정도가 심함 /

기대수명 최상위

ㄴ 1번 군집에는 ​소득 수준이나 주택 가격이 높은 강남 3구가 함께 묶였어요. (신기하지만 납득이 가는 결과죠 ㅎㅎ)

여기서 여러가지를 생각해볼 수 있겠는데요,

지역 내에서 형성된 지리적 사회환경, 문화환경이 인구집단의 건강행태에 영향을 끼쳤을 거라 유추해 볼 수 있겠네요

술, 담배를 덜하고 비만율도 낮은 강남3구지만, 우울증 경험률은 압도적으로 높다는 점이 참 많은 점을 시사하고 있다고 느껴지네요.

* 2번 군집 : 우을증 경험 현저히 낮음 / 주관적 건강수준 매우 양호 / 걷기 실천율 매우 높음

ㄴ 2번 군집은 전반적으로 주관적 건강상태가 매우 좋은 군집끼리 묶인 것을 확인할 수 있었어요.

* 3번 군집 : 고위험 음주 전 지역 고르게 1위 높아/ 비만율 고르게 1위 / 흡연율 극 1위 / 스트레스 극 1위 / 주관적 인식 수준 매우 낮음 고르게 / 기대수명 최하위

ㄴ 허허 ... 눈물이 자동으로 흐르는 결과였어요 ....

음주율, 흡연율이 극단적으로 높았고, 주관적 건강상태도 4개의 구에서 고르게 낮게 나왔답니다.

여기서도 확인할 수 있는 것이 강북구, 중랑구 등 강북 외곽 지역의 건강지표가 대부분 최하위로 나왔다는 사실이에요.

* 4번 군집 : 그 외

=> 이처럼 지역 간 건강 지표 격차가 크게 발생하고 있었습니다

특히 기대수명 격차가 뚜렷했는데요,

1위인 서초구는 2020년 기준 84.36세인 반면

강북구는 2020년 기준 81.51로 3년 가량의 차이를 보였습니다.

저는 이걸 보면서

다시 한 번 (T.P.P) 3개의 역학적 변수 중에서 특히 place(지역)의 영향력을 깨달을 수 있었어요

역학 공부한 걸 .. 직접 손으로 실현해보다니 .. 역학 공부한 보람있네요 ㅜㅅㅜ

위치 변수를 직접 사용하지 않았음에도 불구하고 유사한 지역끼리 묶였다는 점에서

지리적 환경, 지역간 문화적 특성, 지역간 사회경제적 격차 등등 어떤 점이 건강수준 최하위/최상위라는 결과를 낳았는지 궁금해지네요

 


자자 이렇게 오늘 진행한 함수들이 쭉 완성됐습니다 !

여기까지 저와 함께 계층적 군집화(Hierarchical Clustering) 기법에 대해 공부해봤는데요

다음 시간에는 분할 군집화(partitional clustering), 그중 k-means, k-median 방법을 다뤄보려고 했는데

그 전에 먼저 ! 위치와의 연관성을 입증하기 위해서 !! 지도로 시각화 를 해볼까합니다 ㅎㅎ


*해당 게시글은 Brightics 서포터즈 활동의 일환으로 작성된 포스팅 입니다.

게시글 관련 문의 및 소통을 원하신다면 아래 댓글로 남겨주세요

브라이틱스 사용 중 문의사항은

brightics@samsung.com으로 연락주세요 :)