데이터 과학

회귀 분석으로 행복 요건 찾기

나라의 행복 점수를 여섯 가지 값으로 맞혀 봅니다.
무엇이 가장 크게 걸려 있을까요?

학습 목표

  1. 하나의 데이터에 여러 분석 방법을 쓸 수 있음을 알고, 질문에 맞는 방법을 고를 수 있다.
  2. 여섯 속성으로 행복 점수를 예측하는 회귀 모델 세 가지를 만들 수 있다.
  3. 세 모델의 성능을 결정 계수와 오차로 비교해 어느 것이 나은지 판단할 수 있다.
  4. 다중 회귀의 결과를 읽을 때 무엇을 조심해야 하는지 설명할 수 있다.

한 데이터, 세 가지 질문

같은 자료도 여러 방법으로 살펴볼 수 있습니다.

회귀 · 군집 · 연관을 하나씩 익힐 때는 방법마다 그 방법에 꼭 맞는 데이터를 따로 쓰기 쉽습니다. 그러다 보면 「데이터를 보면 방법이 정해진다」고 오해하기 쉽습니다. 그렇지 않습니다.

회귀 — 무엇이 행복 점수를 설명하나 군집 — 어떤 나라들이 비슷한 처지인가 연관 — 무엇과 무엇이 함께 나타나나

데이터가 방법을 정하지 않습니다. 질문이 정합니다

같은 세계 행복 보고서 데이터를 놓고도 「무엇이 행복 점수를 설명하나」라고 물으면 회귀 분석이고, 「어떤 나라들이 서로 비슷한가」라고 물으면 군집 분석입니다. 분석을 시작하기 전에 무엇을 알고 싶은지부터 정하는 까닭입니다.

실습 순서 1 · 2 — 문제와 데이터

UN이 해마다 내는 세계 행복 보고서 자료입니다.

목표

국제 연합(UN)은 해마다 나라별 행복 점수와 그 점수를 설명하는 데 쓰이는 여섯 가지 속성을 함께 발표합니다. 여섯 속성으로 행복 점수를 얼마나 잘 맞힐 수 있는지, 그중 어느 속성이 크게 걸려 있는지 회귀 모델로 알아봅시다. 제목의 「행복 요건」은 행복 점수와 함께 움직이는 속성을 가리킵니다. 나라를 관찰한 자료이므로 무엇이 행복을 만드는 원인인지까지는 이 분석으로 말할 수 없습니다.

내려받을 데이터

137개 나라의 자료가 들어 있습니다. 건강 기대 수명에는 값이 빈 나라가 하나 있지만, 이 실습은 결측치와 이상치를 따로 처리하지 않고 137개를 그대로 씁니다.
kaggle.com/datasets/ajaypalsinghlo/world-happiness-report-2023
원자료 — UN 세계 행복 보고서 worldhappiness.report

쓸 속성 일곱 가지

여기서는 각 속성의 역할을 정합니다.

속성 한국어 이름 역할
Logged GDP per capita1인당 GDPfeature
(독립 변수)
Social support사회적 지지
Healthy life expectancy건강 기대 수명
Freedom to make life choices선택의 자유
Generosity관대함
Perceptions of corruption부패 인식
Ladder score행복 점수target
(종속 변수)

나머지 속성은 모두 skip으로 둡니다. 특히 Explained by로 시작하는 여섯 속성과 Dystopia + residual은 보고서가 행복 점수를 여섯 속성의 몫과 나머지로 나눠 적어 둔 값이라 모두 더하면 행복 점수가 그대로 나옵니다. 이것들을 독립 변수로 넣으면 답을 알려 주고 문제를 푸는 셈이 됩니다. 그런 모델은 R²가 1에 아주 가깝게 나와도 배운 것이 없습니다.

실습 순서 3 — 데이터를 나눕니다

모델을 만드는 데 쓸 몫과 채점에 쓸 몫을 나눠 둡니다.

File

역할을 정한다

Data Sampler

70%와 30%로 나눈다

모델 세 가지

각각 학습한다

File에 Data Sampler를 잇고 비율을 70%로 둡니다. 137개 나라 중 96개로 모델을 만들고, 남은 41개로 채점하게 됩니다.

어느 나라가 채점용이 될지는 무작위로 정해집니다

Data Sampler는 나라를 무작위로 나눕니다. 다만 처음 설정대로 Replicable (deterministic) sampling이 체크되어 있으면 같은 데이터에서는 늘 같은 나라들을 채점용으로 떼어 두므로, 옆 친구와 같은 값이 나오는 것이 보통입니다. 이 체크를 풀면 다시 누를 때마다 채점용 나라가 바뀌고 성능 값도 조금씩 흔들립니다. 고장이 아닙니다. 그때 결정 계수가 소수 둘째 자리에서 달라지는 것은 정상이고, 0.2씩 차이가 난다면 설정을 잘못했을 가능성이 큽니다.

채점용이 41개 나라뿐이라는 점도 기억해 두세요. 한두 나라만 바뀌어도 값이 눈에 띄게 움직일 만큼 적은 수입니다.

스스로 확인

왜 137개 전부로 모델을 만들지 않을까요? 모델을 만든 데이터로 다시 채점하면 점수가 어떻게 나올지 생각해 보세요.

실습 순서 4 — 모델 셋을 나란히 만듭니다

같은 훈련 데이터를 세 위젯에 나눠 줍니다.

Data Sampler 하나에 위젯 셋을 모두 잇습니다. 이렇게 해야 세 모델이 똑같은 나라들로 배우게 되어 나중에 성능을 비교할 때 공평합니다.

Linear Regression

여섯 속성에 계수를 하나씩 붙여 더하는 식을 만듭니다. Data Table을 이어 붙이면 계수와 절편을 볼 수 있습니다.

Tree

기준값으로 계속 나눠 마지막 칸의 평균을 답으로 냅니다. Tree Viewer를 이으면 어떤 속성으로 먼저 나눴는지 보입니다.

kNN

가장 비슷한 나라 다섯을 찾아 그 나라들의 행복 점수를 평균 냅니다. 이웃 수는 Number of neighbors에서 바꿉니다. 오렌지의 kNN은 속성을 정규화하지 않은 채 거리를 측정하므로, 값의 폭이 가장 넓은 건강 기대 수명이 거리를 크게 좌우합니다. 이 실습은 그대로 둡니다.

트리가 먼저 고른 속성을 눈여겨보세요

Tree Viewer에서 맨 위 갈림길을 보세요. 트리는 가장 잘 나눠 주는 속성부터 씁니다. 그러니 맨 위에 놓인 속성이 행복 점수와 가장 크게 얽힌 것이라고 짐작할 수 있습니다. 선형 회귀의 계수를 보기 전에 여기서 먼저 힌트를 얻는 셈입니다.

갈림길에는 기준값도 함께 적혀 있습니다. 「이 값보다 크면 이쪽, 작으면 저쪽」이라는 뜻이고, 그 아래 칸에 적힌 숫자가 그 칸에 모인 나라들의 행복 점수 평균입니다.

트리가 고른 속성을 적어 봅시다

갈림길 어떤 속성으로 나눴나 기준값
맨 위
둘째 단 왼쪽
둘째 단 오른쪽

실습 순서 5 — 셋 중 누가 나은가

남겨 둔 41개 나라로 채점합니다.

세 모델을 모두 Predictions에 잇고, Data Sampler가 남겨 둔 30% 쪽 출력도 함께 잇습니다. 아래쪽에 MSE · RMSE · MAE · R²가 모델별로 한 줄씩 나옵니다.

세 모델의 성적을 적어 봅시다

모델 MSE RMSE MAE R²
Linear Regression
Tree
kNN
다 적고 나서 열어 보세요 — 대략 이 언저리면 제대로 한 것입니다

선형 회귀의 R²가 0.8 안팎으로 가장 높게 나오고, kNN과 트리는 0.5에서 0.7 사이로 내려옵니다. 둘 가운데서는 트리가 더 낮은 경우가 많습니다. RMSE는 선형 회귀가 0.5 안팎, 나머지 둘이 0.7 안팎일 것입니다. 행복 점수가 0에서 10 사이의 값이니 선형 회귀로 맞히면 대략 0.5점쯤 빗나간다는 뜻입니다. R²가 1에 못 미치는 몫에는 여섯 속성이 담지 못한 사정과 조사 자체의 오차가 함께 들어 있습니다. 어느 나라가 채점용으로 떼어졌는지에 따라 값은 이 언저리에서 달라집니다. 순서까지 뒤바뀌었다면 Replicable (deterministic) sampling 체크를 풀고 몇 번 더 실행해 보세요.

행복 데이터에서는 대체로 선형 회귀가 이깁니다. 늘 그럴까요?

굽은 모양의 데이터에서는 결과가 뒤집힐 수 있습니다. 예를 들어 축구 선수의 가치는 잠재력이 높은 쪽에서 몇 배로 뛰는 굽은 모양이라, 잠재력으로 가치를 맞히는 모델을 같은 세 가지로 만들면 트리와 kNN이 선형 회귀보다 훨씬 높은 점수를 냅니다. 굽은 관계에 직선을 그으면 잘 맞을 리가 없습니다.

행복 데이터는 다릅니다. 1인당 GDP가 높은 나라는 대체로 행복 점수도 높고, 그 관계가 제법 곧게 늘어서 있습니다. 곧은 관계에는 직선이 잘 맞습니다.

언제나 이기는 모델은 없습니다. 데이터의 모양이 어느 모델이 이길지를 크게 좌우합니다. 그래서 여러 모델을 만들어 비교해 보는 것이지, 좋은 모델 하나를 외워 두는 것이 아닙니다.

그래서 무엇이 행복에 걸려 있나

여기서 말을 어떻게 고르느냐가 가장 중요합니다.

여섯 속성과 행복 점수의 상관계수를 구해 봅시다

File에 Correlations 위젯을 이으면 속성끼리의 상관계수를 한꺼번에 볼 수 있습니다. 행복 점수와 짝을 이룬 줄만 골라 적어 보세요.

속성 행복 점수와의 상관계수 순위
1인당 GDP
사회적 지지
건강 기대 수명
선택의 자유
관대함
부패 인식
다 적고 나서 열어 보세요

사회적 지지가 가장 높아 0.83 안팎, 그다음이 1인당 GDP로 0.78 안팎, 건강 기대 수명이 0.75 안팎입니다. 셋 다 강한 양의 관계입니다. 관대함은 0에 가까워 행복 점수와 직선 관계가 거의 보이지 않고, 부패 인식은 음수로 나옵니다. 부패가 널리 퍼져 있다고 느끼는 나라일수록 행복 점수가 낮은 경향이라는 뜻입니다. 트리가 맨 위 갈림길에서 사회적 지지를 골랐다면 그것과도 앞뒤가 맞습니다.

이렇게 말하면 안 됩니다

이렇게 쓰면 어떻게 읽히나
사회적 지지를 높이면 행복 점수가 오른다 원인과 결과로 읽힌다. 우리는 나라를 바꿔 가며 실험한 적이 없다
사회적 지지가 높은 나라가 행복 점수도 높은 경향이다 관찰한 그대로다. 함께 높다는 사실만 말한다

이 데이터는 해마다 각 나라를 조사해 적어 둔 것입니다. 어느 나라의 사회적 지지만 올려 놓고 행복 점수가 어떻게 되는지 지켜본 실험이 아닙니다. 그러니 「늘리면 오른다」고 말할 근거가 없습니다. 비교 화법으로 쓰는 습관을 들이세요.

계수 하나만 떼어 읽지 않습니다

선형 회귀가 내놓은 식에는 속성마다 계수가 하나씩 붙어 있습니다. 그런데 이 계수는 「나머지 다섯 속성이 그대로일 때」라는 전제 아래의 값입니다. 현실에서는 그런 일이 잘 일어나지 않습니다. 1인당 GDP가 높은 나라는 건강 기대 수명도 대체로 높기 때문입니다. 속성끼리 서로 얽혀 있으면 어느 쪽에 얼마를 나눠 줄지가 흔들립니다.

그래서 속성을 빼거나 더할 때마다 남은 계수들이 함께 움직입니다. 계수의 부호가 뒤집히는 일까지 생깁니다. 「계수가 크니까 이 속성이 가장 중요하다」고 곧바로 결론짓지 마세요. 여러 모델의 결과를 함께 보고 판단해야 합니다.

스스로 확인

행복 점수 상위권에는 북유럽 나라들이 몰려 있습니다. 이 나라들의 여섯 속성값을 Data Table에서 찾아 다른 나라들과 비교해 보세요. 어느 속성이 특히 높은가요?

핵심 정리

질문이 방법을 고른다

question first

  • 같은 데이터에 회귀 · 군집 · 연관을 모두 쓸 수 있다
  • 「무엇이 설명하나」를 물으면 회귀
  • 답을 미리 알려 주는 속성은 넣지 않는다

모델 비교하기

comparing models

  • 세 모델에 같은 훈련 데이터를 주어야 공평하다
  • 남겨 둔 41개 나라로 채점한다
  • 곧은 관계면 직선, 굽은 관계면 트리나 kNN이 유리하다
  • R²가 1에 아주 가깝다면 답을 알려 주는 속성이 섞였는지 의심한다

읽어 낸 것

what the models say

  • 결측치 · 이상치를 그대로 둔 137개 기준으로, 사회적 지지가 행복 점수와 강하게 얽혀 있다
  • 1인당 GDP와 건강 기대 수명이 뒤를 잇는다. 이 순서는 전처리를 달리하면 바뀔 수 있다
  • 부패 인식은 행복 점수와 음의 관계다
  • 설명되지 않은 몫에는 여섯 속성이 담지 못한 사정과 조사 자체의 오차가 함께 들어 있다

말 고르기

how to word it

  • 관찰한 데이터이므로 인과로 말하지 않는다
  • 「높이면 오른다」가 아니라 「높은 나라가 ~한 경향」
  • 속성끼리 얽혀 있어 계수 하나만 떼어 읽을 수 없다

확인 퀴즈

배운 내용을 확인해 봅시다.

Q1

Explained by로 시작하는 속성을 독립 변수에서 뺀 까닭은?

Q2

세 모델을 모두 같은 Data Sampler에 잇는 까닭은?

Q3

축구 선수 데이터에서는 트리가, 행복 데이터에서는 선형 회귀가 이겼습니다. 왜 그럴까?

Q4

분석 결과를 바르게 서술한 것은?

Q5

다중 회귀의 계수 하나만 떼어 읽으면 안 되는 까닭은?