세조목

최종 프로젝트 25일차(24.04.22) 본문

데이터 분석 공부/프로젝트

최종 프로젝트 25일차(24.04.22)

세조목 2024. 4. 22. 21:42

최종 프로젝트 25일차입니다.

금일은 1) UI시안 수정  2) 군집별 라벨링 을 진행했습니다.

 

UI시안 수정

기존 시안의 경우 아래와 같았는데요,

기술 구현의 문제 및 해당 UI가 각종 포탈 사이트의 지도 UI와 너무 닮아있어서

UI를 수정할 필요가 있겠다고 판단했습니다.

팀원들과 얘기해본 결과 아래와 같이 메인 페이지에서 키워드(군집)를 선택하게끔 하고,

키워드를 클릭하면 해당 키워드(군집)에 속하는 점포들을 랜덤으로 출력하게끔 만듭니다.

점포 하나를 클릭하면 마지막 이미지와 같은 페이지로 이동해서

가게의 상세 정보를 나타내게끔 합니다.

이 시안으로 진행할 경우 기술 구현의 난이도가 훨씬 낮아지고,

UI면에서도 차별점을 가질 수 있습니다.

 

군집별 라벨링

금일 진행 작업 중 가장 많은 시간을 잡아먹은 '군집별 라벨링'입니다.

군집별로 라벨링을 해야하는 이유는 UI시안 파트 첫 번째 이미지에서와같이

군집별 버튼을 홈페이지에 넣어야하는데

군집 0, 군집 1 과같이 올려놓으면 사용자들은 이 군집이 어떤 특성을 가지고 있는지 알 수 없기 때문입니다.

군집을 라벨링하기위해서는 두 가지 과정을 거쳐야하는데요,

먼저 군집을 구성하는 컬럼(PC)의 특성을 정의하고,

컬럼 특성 정의가 끝나면 해당 컬럼들의 특성을 조합해서 군집의 특성을 정의합니다.

컬럼 특성을 조합해서 군집의 특성을 정의하는 이유는

하나의 군집의 n개의 컬럼으로 구성되어있기 때문입니다.

예를 들어 위 이미지에서 5번 군집은 pc1부터 pc6까지의 특성들로 이루어져있는데

pc1의 특성을 가장 많이 담고 있다고 볼 수 있습니다.

 

컬럼(PC)별 특성 정의

군집 라벨링의 첫 번째 단계인 컬럼(PC)별 특성 정의를 우선적으로 진행했습니다.

pca_com = pca.components_
pca_comdf = pd.DataFrame(pca_com, columns = df_anal.columns, index=[f'pca{idx+1}' for idx in range(pca_com.shape[0])])

pca.components_ 메서드를 활용해서

각 주성분에 대한 변수들의 기여도를 확인합니다.

한 눈에 확인하기위해 pca_comdf의 행열을 전환해줍니다.

feature_pca = pca_comdf.transpose().sort_values('pca1', ascending=False)

그러면 이런식으로 각 컬럼들이 축소된 차원에 어느정도 영향을 미치는지를 확인할 수 있습니다.

이 데이터를 라인 차트로 나타내면 아래와 같습니다.

이제 이 라인 차트를 보면서 각 컬럼(PC)별 특성을 정의하는데요,

저희는 각 차원이 두드러지는 지점들에 해당하는 특성들을 조합해서 컬럼별 특성을 정의했습니다.

예를 들어 위 그래프의 PC2의 경우 beverage와 friendly 에서 아래쪽으로 파여져있는 것을 확인할 수 있습니다.

음수값에 해당하기때문에 우리는 pc2의 특성을 '음료가 맛이없고 친절하지 않다' 라고 정의내려볼 수 있습니다.

이런식으로 정의 작업이 끝나면 다음 단계로 넘어갑니다.

 

군집별 특성 정의

저희는 군집 분석을 할 때 k-means 알고리즘을 사용했습니다.

# 군집 작업
kmeans = KMeans(n_clusters=6, random_state=0).fit(df_anal_pca)

# 중심점 구하기
df_centroids = pd.DataFrame(kmeans.cluster_centers_, columns = df_anal_pca.columns)

kmeans.cluster_centers_ 메서드로 각 군집별 중심점을 구할 수 있는데요,

이 중심점을 이용해서 컬럼(PC)과 군집간의 관계를 파악할 수 있습니다.

아래와 같이 말이죠.

앞 단계에서와 마찬가지로 이 데이터를 라인 그래프로 나타내면 아래와 같이 나타납니다.

이제 이 라인 그래프를 보고서 군집별 특성을 정의하면 되는데

라인별로 가장 두드러지는 지점의 컬럼(PC)을 해당 군집의 특성으로 보면 됩니다.

예를 들어 0군집의 경우 파란색 라인인데 PC1에서 가장 높이 솟아 있으므로

0군집의 주된 특성은 PC1이라고 할 수 있습니다.

그런데 만약 군집별로 컬럼(PC)가 동일하게 나타나면 어떻게 해석할까요?

0군집과 1군집이 바로 그 경우입니다.

이 경우에는 라인이 어느 방향으로 솟아있는지를 보고서 판단할 수 있습니다.

0군집의 경우 양의 방향으로 솟아있고, 1군집의 경우 음의 방향으로 하강하고 있는 것을 확인할 수 있는데

만약 PC1의 특성이 '빵이 맛없다.' 라고 한다면

0군집의 특성은 '빵이 맛없다.'로, 1군집의 특성은 반대인 '빵이 맛있다'로 해석할 수 있는 것입니다.

 


 

내일은 금일 정의내린 군집별 특성을 반영시킨 데이터셋을 가지고서

스트림릿 작업을 이어나갈 예정입니다.