비율 시각화하기

우리는 종종 전체 데이터가 어떤 부분들로 구성되어 있는지, 즉 개별 요소가 전체에서 차지하는 비율(proportion)을 보여주고 싶어 합니다. 예를 들어 특정 집단의 남녀 성비, 선거에서 각 정당의 득표율, 혹은 기업들의 시장 점유율 같은 것들입니다. 이런 상황에서 가장 먼저 떠오르는 시각화 방식은 원형 차트(pie chart)일 것입니다. 원형 차트는 비즈니스 프레젠테이션 어디에나 등장할 만큼 대중적이지만, 데이터 과학자들 사이에서는 비판을 많이 받기도 합니다. 앞으로 살펴보겠지만, 구성 요소가 아주 많거나 시간의 흐름에 따른 비율 변화를 보여줘야 할 때는 비율 시각화가 생각보다 까다롭습니다. 모든 상황에 완벽하게 들어맞는 단 하나의 시각화 도구는 없습니다. 상황에 따라 어떤 시각화가 적절한지, 몇 가지 사례를 통해 알아보겠습니다.

기억하십시오. 항상 특정 데이터 세트에 가장 적합하고 보여주고 싶은 주요 데이터 특징을 강조하는 시각화를 선택해야 합니다.

원형 차트가 제격인 경우

1961년부터 1983년까지 독일 연방의회(Bundestag)는 CDU/CSU, SPD, FDP라는 세 개의 주요 정당으로 구성되었습니다. 이 기간 대부분 CDU/CSU와 SPD는 거의 대등한 의석을 가졌고, FDP는 상대적으로 적은 의석을 차지했습니다. 예를 들어 1976년부터 1980년까지의 제8대 의회에서 CDU/CSU는 243석, SPD는 214석, FDP는 39석으로 총 496석이었습니다. 이런 의회 구성 데이터는 보통 원형 차트로 시각화합니다(그림 Figure 12.1).

(ref:bundestag-pie) 1976년~1980년 제8대 독일 연방의회 정당 구성. 원형 차트를 통해 SPD와 FDP 연합이 야당인 CDU/CSU를 근소하게 앞질러 과반을 확보했음을 한눈에 알 수 있습니다.

Figure 12.1: (ref:bundestag-pie)

원형 차트는 전체 원을 조각으로 나누어, 각 조각의 면적이 실제 비율에 비례하도록 만듭니다. 같은 원리를 직사각형에 적용한 것이 누적 막대 그래프(stacked bar chart)입니다(그림 Figure 12.2). 막대의 방향에 따라 세로형(그림 Figure 12.2 (a))과 가로형(그림 Figure 12.2 (b))으로 나뉩니다.

(ref:bundestag-stacked-bars) 누적 막대 그래프로 표현한 의회 구성. (a) 세로형. (b) 가로형. 원형 차트에 비해 SPD와 FDP의 합이 CDU/CSU보다 많다는 사실이 직관적으로 와닿지 않습니다.

Figure 12.2: (ref:bundestag-stacked-bars)

막대들을 위로 쌓는 대신 옆으로 나란히 세울 수도 있습니다. 이 방식은 각 정당의 의석수를 직접 비교하는 데는 유리하지만, 데이터의 다른 중요한 측면을 가리게 됩니다(그림 Figure 12.3). 가장 큰 문제는 각 정당의 의석이 ’전체에서 차지하는 비중’이 시각적으로 명확히 드러나지 않는다는 점입니다.

(ref:bundestag-bars-side-by-side) 나란히 놓인 막대 그래프로 표현한 의회 구성. 누적 막대와 마찬가지로 SPD와 FDP의 합이 야당보다 많다는 사실을 파악하기 어렵습니다.

Figure 12.3: (ref:bundestag-bars-side-by-side)

많은 시각화 전문가들이 원형 차트를 단호하게 거부하며 막대 그래프를 대안으로 제시하곤 합니다. 하지만 저는 어떤 시각화가 무조건 더 낫다고 보지는 않습니다. 데이터의 어떤 특징을 강조하고 싶은지에 따라 최선의 선택이 달라지기 때문입니다. 독일 의회 사례의 경우 원형 차트가 가장 훌륭한 선택이라고 생각합니다. SPD와 FDP 연합이 CDU/CSU를 근소한 차이로 제치고 과반을 차지했다는 핵심적인 사실을 가장 명확하게 보여주기 때문입니다(그림 Figure 12.1).

일반적으로 원형 차트는 1/2, 1/3, 1/4처럼 단순한 비중을 강조하고 싶을 때, 혹은 범주의 개수가 아주 적을 때 잘 작동합니다. 반면 누적 막대 그래프는 여러 조건을 동시에 비교하거나 시간에 따른 변화를 보여줄 때 유용하고, 개별 항목들 간의 크기 차이를 정밀하게 비교하고 싶을 때는 나란히 놓인 막대 그래프가 좋습니다. 각 방식의 장단점을 요약하면 표 ?tbl-pros-cons-pie-bar와 같습니다.

Table 12.1: 비율 시각화에 대한 일반적인 접근 방식의 장단점: 원형 차트, 누적 막대 및 나란히 놓인 막대.
원형 차트 누적 막대 나 란히 놓인 막대
데이터를 전체의 비율로 명확하게 시각화 ✔ ✔
상대적 비율의 쉬운 시각적 비교 허용 ✖
1/2, 1/3, 1/4와 같은 단순 분수를 시각적으로 강조 ✖ ✖
매우 작은 데이터 세트에서도 시각 적으로 매력적으로 보 임 ✔ ✖ ✔
전체가 여러 조각으로 나뉘었을 때 잘 작동 ✖ ✖
여러 비율 집합 또는 비율 시계열 시각화에 잘 작동 ✔ ✖

나란히 놓인 막대가 유리한 경우

이제 원형 차트가 오히려 방해가 되는 사례를 보겠습니다. 다섯 개의 가상 회사 A, B, C, D, E가 시장 점유율 약 20% 내외로 비슷하게 경쟁하고 있다고 가정해 봅시다. 3년에 걸친 시장 점유율 데이터를 원형 차트로 그리면(그림 Figure 12.4), 정확히 어떤 변화가 일어나는지 파악하기가 매우 힘듭니다. 회사 A의 점유율이 조금 늘고 E는 줄어든 것 같다는 짐작 외에는, 회사들 간의 정확한 우열이나 연도별 변화 추이를 알아내기 어렵습니다.

(ref:marketshare-pies) 2015년~2017년 다섯 개 회사의 시장 점유율 변화. 원형 차트로는 연도 내 회사 간의 비중 차이나 연도별 점유율 변화를 정밀하게 비교하는 것이 거의 불가능합니다.

Figure 12.4: (ref:marketshare-pies)

누적 막대로 그리면 상황이 조금 나아집니다(그림 Figure 12.5). A의 증가와 E의 감소가 좀 더 눈에 잘 들어오기 때문입니다. 하지만 여전히 각 연도 내 회사들의 상대적인 크기를 비교하기는 쉽지 않습니다. 특히 중간에 끼어 있는 B, C, D 회사의 경우, 아래쪽 막대들의 크기가 변함에 따라 시작 높이가 계속 달라지기 때문에 연도별 변화를 순수하게 비교하기가 매우 어렵습니다. 이것이 제가 누적 막대 그래프를 함부로 권장하지 않는 핵심적인 이유입니다.

(ref:marketshare-stacked) 시장 점유율을 누적 막대로 표현한 경우. 중간에 위치한 B, C, D 회사는 기준선이 계속 바뀌기 때문에 연도별 점유율이 늘었는지 줄었는지 판단하기가 매우 까다롭습니다.

Figure 12.5: (ref:marketshare-stacked)

이 데이터 세트에서 가장 확실한 정답은 나란히 놓인 막대 그래프입니다(그림 Figure 12.6). A와 B는 점유율을 높여가고 있고 D와 E는 줄어들고 있다는 사실이 아주 명확하게 보입니다. 또한 각 연도 내에서 회사들이 어떤 순위로 자리 잡고 있는지도 한눈에 들어옵니다.

(ref:marketshare-side-by-side) 시장 점유율을 나란히 놓인 막대 그래프로 표현한 경우. 모든 회사의 연도별 변화를 가장 정밀하고 직관적으로 보여줍니다.

Figure 12.6: (ref:marketshare-side-by-side)

누적 밀도 시각화의 활용

앞서 중간에 낀 막대의 기준선이 이동하는 문제 때문에 누적 막대를 조심하라고 했지만, 구성 요소가 딱 두 개뿐이라면 이야기가 달라집니다. 기준선 이동 문제가 사라지면서 아주 명확한 시각화가 가능해지기 때문입니다. 아프리카 국가 르완다의 의회 내 여성 의원 비율을 예로 들어보겠습니다. 르완다는 2008년부터 여성이 과반인 의회를 유지해 왔으며, 2013년부터는 의원 3분의 2 가까이가 여성입니다. 시간의 흐름에 따른 르완다 의회의 성별 구성 변화를 누적 막대로 나타내면 그림 ?fig-women-parliament와 같습니다. 변화의 추이가 시각적으로 아주 강렬하게 다가옵니다. 특히 언제 ’과반’이 여성으로 바뀌었는지 독자가 바로 알 수 있도록 50% 지점에 점선을 추가하여 정보 전달력을 높였습니다.

(ref:women-parliament) 1997년부터 2016년까지 르완다 의회의 성별 구성 변화. 데이터 출처: 국제 의회 연맹(IPU), ipu.org.

Figure 12.7: (ref:women-parliament)

비율이 시간과 같은 ’연속 변수’에 따라 어떻게 변하는지 보여주고 싶을 때는 누적 막대를 더 잘게 쪼갠 극한 형태인 누적 밀도 그림(stacked density plot)을 활용할 수 있습니다.

예를 들어 나이에 따른 사람들의 건강 상태 변화를 시각화해 봅시다(그림 Figure 12.8). 네 단계의 건강 범주가 누적되어 있는데, 앞서 말한 복잡성 문제에도 불구하고 이 경우에는 전체적인 경향성을 보여주기에 충분히 효과적입니다. 나이가 들면서 전반적인 건강 수준은 낮아지지만, 노년층에 접어들어서도 인구의 절반 이상이 여전히 양호하거나 우수한 건강 상태를 유지한다는 핵심 사실을 잘 전달합니다.

(ref:health-vs-age) 일반 사회 조사(GSS)에서 보고된 연령별 건강 상태.

Figure 12.8: (ref:health-vs-age)

다만 이 방식에는 한계가 있습니다. 오직 ’비율’에만 집중하기 때문에, 노년층 인구가 젊은 층에 비해 훨씬 적다는 사실을 가려버립니다. 즉, 70대에서 건강이 ’매우 좋음’인 사람들의 비중(%)은 일정해 보일지 몰라도, 70대 인구 자체가 적기 때문에 건강한 노인의 ’절대적인 수’는 훨씬 적을 수밖에 없습니다. 이에 대한 대안적인 해결책을 다음 섹션에서 소개하겠습니다.

전체 속의 비중을 개별적으로 떼어보기

나란히 놓인 막대는 전체 속 비중을 보여주기 어렵고, 누적 막대나 누적 밀도는 비교가 힘들다는 단점이 있었습니다. 이를 해결하기 위해 각 항목을 별도의 그래프(패싯, facets)로 분리하되, 배경에 전체 분포를 함께 깔아주는 방식을 활용할 수 있습니다(그림 Figure 12.9). 회색 배경은 전체 인구의 연령 분포를, 파란색 영역은 각 건강 상태별 연령 분포를 나타냅니다. 이 시각화를 통하면, ’수치상’으로는 우수하거나 양호한 건강 상태의 인구수가 30~40세 이후 급격히 줄어드는 반면, ’보통’인 사람들의 수는 전 연령대에 걸쳐 상당히 일정하게 유지된다는 사실이 명확하게 드러납니다.

(ref:health-vs-age-facets) 연령대별 건강 상태를 전체 인구 대비 비중으로 나누어 본 모습. 파란색 영역은 해당 건강 상태인 사람들을, 회색 영역은 전체 응답자 분포를 나타냅니다.

Figure 12.9: (ref:health-vs-age-facets)

또 다른 예로 혼인 상태를 보겠습니다. 나이에 따른 혼인 상태의 변화는 매우 극적인데, 이를 누적 밀도 그림(Figure 12.10)으로 그리면 각 범주의 경계선이 너무 심하게 요동쳐서 정보를 제대로 읽을 수 없습니다. 그래서 이 그래프에는 “나쁨” 표시를 했습니다.

(ref:marital-vs-age) 혼인 상태별 연령 분포. 데이터가 급격히 변해 해석하기 어렵기 때문에 “나쁨”으로 표시했습니다.

Figure 12.10: (ref:marital-vs-age)

같은 데이터를 별개의 패싯으로 분리해 그리면(그림 Figure 12.11) 훨씬 명확해집니다. 기혼자는 30대 후반, 이혼자는 40대 초반, 사별한 사람은 70대 중반에 각각 정점을 찍는다는 사실을 쉽게 파악할 수 있습니다.

(ref:marital-vs-age-facets) 혼인 상태별 연령 분포를 전체 대비 비중으로 본 모습.

Figure 12.11: (ref:marital-vs-age-facets)

다만, 이 방식도 특정 시점에서의 ’상대적인 비율’을 한눈에 보기는 어렵습니다. 가령 “언제부터 기혼자가 전체의 절반을 넘는가?”라는 질문에 답하려면, y축을 비율(%)로 정규화한 그래프가 더 유리합니다(그림 Figure 12.12). 이 그래프를 통하면 기혼자는 20대 후반부터, 사별한 사람은 70대 중반부터 해당 집단 내에서 과반을 차지한다는 점을 바로 확인할 수 있습니다.

(ref:marital-vs-age-proportions) 혼인 상태별 비율을 연령에 따라 나눈 모습. 파란색은 해당 상태를, 회색은 그 외 다른 상태들의 합을 나타냅니다.

Figure 12.12: (ref:marital-vs-age-proportions)