산점도
고친 사람 github-actions[bot]
산점도는 두 값이 함께 움직이는지를 보여 줍니다. 한 건마다 두 값을 잽니다. 한 값은 가로 위치로, 다른 값은 세로 위치로 삼아 점을 찍습니다. 점 무리가 기운 방향을 보고 한 값이 늘 때 다른 값이 어떻게 변하는지를 읽습니다.
쉽고 빠른 이해
산점도는 두 값의 관계를 점으로 그려 줍니다. 요청 한 건마다 요청 크기를 가로에, 응답 시간을 세로에 놓고 점 하나를 찍는 식입니다.
이게 없으면 두 값이 함께 움직이는지 알기 어렵습니다. 숫자 표는 줄을 하나씩 읽어야 합니다. 평균 같은 요약은 요청 크기는 크기대로, 응답 시간은 시간대로 따로 줄여서 두 값의 짝을 잃습니다.
- 한 건마다 두 값을 잽니다
- 한 값은 가로 위치로, 다른 값은 세로 위치로 삼아 점 하나를 찍습니다
- 다 찍고 나서 점 무리의 모양을 봅니다. 비스듬한 띠인지, 흩어졌는지, 무리에서 떨어진 점이 있는지를 봅니다
대가는 두 가지입니다. 한 번에 두 값만 볼 수 있습니다. 점이 아주 많으면 서로 겹쳐서 어디에 몰렸는지가 안 보입니다.
읽을 때 조심할 것도 하나 있습니다. 두 값이 함께 움직인다고 한쪽이 다른 쪽의 원인인 것은 아닙니다.
상세
산점도(scatter plot)는 두 값을 가로축과 세로축에 놓고 한 건마다 점 하나를 찍는 그림입니다. 요청 한 건마다 요청 크기를 가로 위치로, 응답 시간을 세로 위치로 삼는 식입니다. 점이 수백 개 모이면 그 무리의 모양에서 두 값이 함께 움직이는지가 보입니다.
이 그림이 필요한 까닭은 두 값의 짝에 있습니다. 평균 같은 요약 통계는 요청 크기는 요청 크기대로, 응답 시간은 응답 시간대로 따로 줄입니다. 그러면 「이 요청은 컸고 오래 걸렸다」는 짝이 사라집니다. 산점도는 점 하나가 곧 한 건이라서 이 짝을 끝까지 들고 갑니다.
표를 점으로 옮긴 모습
이 소절은 요청 여덟 건을 표로 한 번, 산점도로 한 번 보입니다. 같은 수가 두 모양으로 놓였을 때 무엇이 달라지는지를 봅니다.
| 요청 | 요청 크기(킬로바이트) | 응답 시간(초) |
|---|---|---|
| 1 | 10 | 0.12 |
| 2 | 25 | 0.20 |
| 3 | 40 | 0.31 |
| 4 | 60 | 0.38 |
| 5 | 80 | 0.52 |
| 6 | 100 | 0.58 |
| 7 | 120 | 0.75 |
| 8 | 30 | 0.90 |
표로는 줄을 하나씩 읽으며 두 수를 견줘야 합니다. 여덟 줄이면 할 만하지만 팔천 줄이면 못 합니다. 아래는 같은 여덟 건을 점으로 찍은 그림입니다. 점 옆의 숫자가 표의 요청 번호입니다.
quadrantChart
x-axis "작은 요청" --> "큰 요청"
y-axis "짧은 응답 시간" --> "긴 응답 시간"
"1": [0.08, 0.12]
"2": [0.19, 0.20]
"3": [0.31, 0.31]
"4": [0.46, 0.38]
"5": [0.62, 0.52]
"6": [0.77, 0.58]
"7": [0.92, 0.75]
"8": [0.23, 0.90]
가로는 요청 크기입니다. 세로는 응답 시간입니다. 가운데 십자선과 칸의 색은 눈으로 읽기 쉽게 나눈 보조선이라 뜻이 없습니다.
점 일곱 개가 왼쪽 아래에서 오른쪽 위로 비스듬히 늘어섭니다. 요청이 클수록 오래 걸린다는 관계가 줄을 읽지 않아도 보입니다.
8번 점만 이 띠에서 멀리 위로 떨어져 있습니다. 작은 요청인데 가장 오래 걸렸습니다. 이렇게 무리에서 동떨어진 값을 이상치라고 부릅니다. 크기로는 설명이 안 되는 원인이 이 요청에 있었다는 신호입니다. 따로 들여다볼 만합니다.
여덟 건의 응답 시간 평균은 0.47초입니다. 이 수 하나에서는 8번이 튀었다는 것도, 크기와 시간이 함께 늘었다는 것도 안 보입니다.
점 무리의 모양
점을 다 찍고 나서 읽는 것은 점 하나하나가 아니라 무리의 모양입니다. 자주 만나는 모양은 다섯입니다. 아래 표는 모양마다 뜻과 백엔드에서 만나는 예를 짝지었습니다.
표의 예에는 캐시가 두 번 나옵니다. 캐시는 자주 찾는 값을 저장소보다 가까운 곳에 복사해 둔 것입니다. 캐시에 값이 있으면 저장소까지 다녀올 필요 없이 바로 답합니다.
| 모양 | 뜻 | 만나는 예 |
|---|---|---|
| 왼쪽 아래에서 오른쪽 위로 오르는 띠 | 한 값이 늘면 다른 값도 는다 | 요청 크기와 응답 시간 |
| 왼쪽 위에서 오른쪽 아래로 내리는 띠 | 한 값이 늘면 다른 값은 준다 | 캐시에서 바로 답한 비율과 응답 시간 |
| 모양 없이 고르게 흩어짐 | 두 값이 서로 상관없이 움직인다 | 사용자 번호와 응답 시간 |
| 휘어진 띠 | 관계는 있는데 곧은 선이 아니다 | 동시에 들어온 요청 수와 응답 시간 |
| 떨어진 두 무리 | 성격이 다른 두 묶음이 섞였다 | 캐시에 있던 요청과 없던 요청 |
둘째 줄의 비율은 캐시 적중률입니다. 요청 가운데 캐시에서 바로 답한 요청이 얼마인지를 나타냅니다. 이 비율이 높은 시간대일수록 저장소까지 다녀오는 요청이 적습니다. 그래서 적중률이 오를수록 점이 아래로 내려갑니다.
넷째 줄의 휘어진 띠는 부하를 걸어 보면 자주 봅니다. 동시에 들어온 요청이 적을 때는 응답 시간이 거의 안 변합니다. 서버가 감당하는 선을 넘으면 요청이 줄을 서기 시작해 응답 시간이 가파르게 치솟습니다.
다섯째 줄의 두 무리도 흔합니다. 캐시에 값이 있던 요청은 바닥 근처에 모입니다. 없어서 저장소까지 다녀온 요청은 그보다 높은 곳에 따로 무리를 짓습니다. 둘을 한 무리로 보고 평균을 내면 어느 무리에도 없는 값이 나옵니다.
상관관계와 상관 계수
한 값이 늘 때 다른 값도 늘거나 줄어드는 관계를 상관관계라고 부릅니다. 오르는 띠는 양의 상관관계, 내리는 띠는 음의 상관관계입니다. 산점도는 이 관계를 눈으로 보는 도구입니다.
이 관계의 세기를 수 하나로 줄인 것이 상관 계수입니다. -1 에서 1 사이의 값을 가집니다. 점들이 오르는 직선 위에 딱 붙으면 1, 내리는 직선 위에 붙으면 -1, 아무 모양이 없으면 0 에 가깝습니다.
흔히 쓰는 상관 계수는 직선 관계만 잽니다. 휘어진 띠나 떨어진 두 무리는 수 하나로 줄이면 모양이 사라집니다. 점 무리의 모양이 전혀 다른 데이터 묶음 여럿이 똑같은 상관 계수를 낼 수 있습니다. 그래서 수를 믿기 전에 그림을 먼저 봅니다.
점 무리 한가운데를 지나는 직선 하나를 그어 관계를 요약하기도 합니다. 이 직선이 추세선입니다. 추세선이 있으면 「요청이 10킬로바이트 커질 때 응답 시간이 얼마쯤 느는가」를 읽을 수 있습니다.
추세선은 보통 눈대중이 아니라 계산으로 긋습니다. 점들에 가장 잘 맞는 직선을 찾는 계산이 선형 회귀입니다.
상관관계와 인과관계
두 값이 함께 움직인다고 한쪽이 다른 쪽을 일으켰다는 뜻은 아닙니다. 한쪽이 다른 쪽을 일으키는 관계는 인과관계라고 따로 부릅니다. 산점도가 보여 주는 것은 상관관계까지입니다.
시간대마다 오류 수와 응답 시간을 찍으면 오르는 띠가 나올 수 있습니다. 오류가 응답을 느리게 만든 것처럼 보입니다. 그런데 그 시간대에 트래픽이 몰려서 둘이 함께 오른 것일 수도 있습니다.
이처럼 두 값을 함께 움직이게 하는 셋째 값을 교란 변수라고 부릅니다. 산점도에 찍지 않은 값이라 그림만 보고는 알 수 없습니다. 원인을 가리려면 트래픽을 고정해 놓고 다시 재는 식으로 따로 확인합니다.
점이 너무 많을 때
요청 로그 백만 건을 한 번에 찍으면 점이 서로 겹칩니다. 한 곳에 점이 천 개 쌓였는지 한 개 있는지가 똑같이 까만 얼룩으로 보입니다. 가장 많이 몰린 곳이 어디인지를 오히려 놓칩니다.
이럴 때 쓰는 방법은 셋입니다.
| 방법 | 하는 일 | 얻는 것 |
|---|---|---|
| 반투명 점 | 점을 옅게 찍는다 | 겹친 곳일수록 진해져서 몰린 정도가 보인다 |
| 일부만 찍기 | 전체에서 몇천 건만 골라 찍는다 | 겹침이 줄고 그리기도 빨라진다 |
| 칸으로 세기 | 평면을 칸으로 나눠 칸마다 점 수를 세고 색으로 칠한다 | 점이 아무리 많아도 칸 수만큼만 그린다 |
일부만 고르는 일을 표본 추출이라고 부릅니다. 무작위로 골라야 전체 무리의 모양이 유지됩니다. 특정 시간대만 고르면 그 시간대의 모양이 전체인 것처럼 보입니다.
칸마다 세어 색으로 칠한 그림은 히트맵의 한 종류입니다. 히스토그램이 값 하나의 범위를 구간으로 나눠 세듯이, 이 그림은 두 값이 만드는 평면을 칸으로 나눠 셉니다.
한쪽에 눌린 점과 로그 눈금
응답 시간은 대부분 짧습니다. 몇 건만 아주 깁니다. 이런 값을 고르게 벌린 눈금으로 찍으면 대부분의 점이 바닥에 한 줄로 눌려 붙습니다. 위쪽에는 드문 점 몇 개만 떠 있습니다.
이때는 축의 눈금을 0.01초, 0.1초, 1초, 10초처럼 한 칸마다 열 배씩 벌립니다. 이런 눈금을 로그 스케일이라고 부릅니다. 바닥에 눌렸던 점들이 위아래로 펴져서 무리의 모양이 드러납니다.
쓰는 때와 안 쓰는 때
산점도는 두 수치가 함께 움직이는지를 볼 때 씁니다. 무리에서 떨어진 이상치를 찾을 때도 씁니다.
데이터를 처음 받으면 어떤 모양인지부터 훑어봅니다. 이 일이 탐색적 자료 분석입니다. 이때 수치를 둘씩 짝지어 산점도로 찍어 보는 것이 흔한 첫걸음입니다.
보고 싶은 것이 다르면 다른 그림이 맞습니다.
| 보고 싶은 것 | 맞는 그림 |
|---|---|
| 값 하나가 어디에 몰렸나 | 히스토그램 |
| 한 값이 시간에 따라 어떻게 변했나 | 꺾은선 그래프 |
| 이름으로 나뉜 무리끼리 크기 비교 | 막대그래프 |
| 세 값 사이의 관계 | 점 크기에 셋째 값을 싣는 버블 차트 |
| 여러 값을 둘씩 짝지은 관계 전부 | 짝마다 산점도를 하나씩 그려 격자로 늘어놓은 산점도 행렬 |
관련 항목
산점도가 속하는 상위 분류
데이터 시각화 · 통계 그래픽 · 탐색적 자료 분석 · 기술 통계 · 통계
산점도로 읽어 내는 관계와 성질
상관관계 · 상관 계수 · 피어슨 상관 계수 · 스피어먼 순위 상관 계수 · 인과관계 · 교란 변수 · 이상치 · 군집
산점도 위에 긋는 선과 모형
추세선 · 선형 회귀 · 회귀 분석 · 최소 제곱법 · 잔차 · 국소 회귀
점이 많을 때 산점도를 대신하는 그림과 기법
히트맵 · 육각 빈 그림 · 2차원 히스토그램 · 표본 추출 · 커널 밀도 추정 · 로그 스케일
산점도를 넓혀 셋째 값을 싣는 그림
버블 차트 · 산점도 행렬 · 3차원 산점도 · 평행 좌표 그림
산점도와 쓰임이 갈리는 그림
히스토그램 · 상자 그림 · 꺾은선 그래프 · 막대그래프 · 줄기 잎 그림
산점도가 보완하는 요약 통계
요약 통계 · 평균 · 분산 · 공분산 · 표준편차 · 앤스컴 콰르텟
산점도로 살피는 백엔드 수치
다른 이름: scatter plot · scatter chart · scatter diagram · scatterplot