단원 홈

Ⅱ. 데이터 준비와 분석8차시

단위가 다른 다섯 줄을
한 장의 그림에

정규화는 무엇을 살리고 무엇을 지우나

서울 2024년의 기온 · 강수 · 습도 · 풍속 · 일조를 달마다 모으면 12달 × 5요소 = 60칸 표가 됩니다. 그대로 색칠하면 강수 한 칸이 그림을 다 가져갑니다. 단위를 맞추면 계절이 보이지만, 그 대신 무엇이 지워지는지를 오늘 손으로 확인합니다.

  • [12데과02-02]
  • 50분네 정거장
  • 새 도구MinMaxScaler · StandardScaler
  • 자료ASOS 서울 2024 366일 · 따릉이 2024
Ⅱ 단원 지도8 / 14차시
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14

학습 목표

  1. 개념에서

    정규화가 살리는 것(열 안의 모양)과 지우는 것(열 사이 크기 · 변화 폭 · 기준 기간)을 가려 말할 수 있다.

  2. 손으로

    MinMaxScaler·StandardScaler를 fit 과 transform 두 단계로 나눠 쓰고, 도구가 기억한 값을 읽을 수 있다.

  3. 확인에서

    정규화한 그림 옆에 무엇을 함께 적어야 하는지를 근거와 함께 한 줄로 쓸 수 있다.

1
여는 장면 · 5분

한 장에 다섯 줄을 담으려다 — 강수만 남은 그림

기상청이 잰 서울 2024년 366일을 달마다 모으면 표 한 장이 됩니다. 기온은 달 평균, 강수는 달 합계, 습도와 풍속은 달 평균, 일조는 달 합계 — 열두 줄에 다섯 열, 모두 60칸입니다.

이 다섯 줄을 한 장의 그림에 담으려면 열지도가 빠릅니다. 칸마다 값이 클수록 진하게 칠하면 열두 달의 계절이 한눈에 보일 것 같지요. 그런데 표를 그대로 칠하면 그림 1 처럼 됩니다.

Ⅱ-7 에서 가져옴같은 자료라도 축을 바꾸면 다른 이야기가 된다. 오늘 바꾸는 것은 축이 아니라 자 — 값을 재는 눈금 그 자체다.

생활 · 가상 기사

서울의 2024년은 "거의 변화가 없는 해"였다 — 열두 달 날씨를 한 장에 그려 보니

기상청 종관기상관측 일자료로 작성 · 이 기사는 수업을 위해 지어낸 것입니다
표 1서울 2024 · 달마다 다섯 가지기온·습도·풍속은 달 평균, 강수·일조는 달 합계
월기온
°C
강수
mm
습도
%
풍속
m/s
일조
hr
1월-0.518.966.62.3177.4
2월3.874.772.92.5109.3
3월7.029.957.22.7190.6
4월16.333.256.22.4209.2
5월18.5125.163.22.4262.0
6월24.6115.960.52.2285.6
7월26.6557.381.02.596.3
8월29.372.872.62.1179.0
9월25.5143.971.82.3166.9
10월16.774.069.62.0166.4
11월9.760.062.42.0182.9
12월0.85.756.22.2206.3
가장 작게-0.55.756.22.096.3
가장 크게29.3557.381.02.7285.6
폭29.8551.624.80.7189.3

열마다 숫자의 크기가 다릅니다 — 강수는 세 자리, 풍속은 한 자리. 열마다 단위도 다릅니다(mm · m/s · °C · % · hr). 같은 표 한 장인데 열마다 다른 자로 잰 셈입니다. 자료: 기상청 종관기상관측(ASOS) 서울(108) 2024년 일자료 ../data/asos_seoul_2024.csv — 3정거장 코드 ①이 찍는 값과 같다(원장 실측)

그림 1표를 그대로 칠하면60칸 전부를 같은 자 하나로 — 가장 작은 값이 0, 가장 큰 값이 1
표 전체를 한 자로 칠한 60칸색이 진할수록 큰 값기온강수습도풍속일조1월4월7월10월12월7월 강수 557.3mm — 이 한 칸이 자를 혼자 정한다열마다 그 자 위에서 차지하는 자리0 = 1월 기온(−0.5) · 1 = 7월 강수(557.3)기온0.00~0.05강수0.01~1.00습도0.10~0.15풍속0.00~0.01일조0.17~0.51강수만 자를 거의 다 쓴다 — 나머지 넷은 바닥에 깔린다표 전체를 한 자로 칠한 60칸색이 진할수록 큰 값기온강수습도풍속일조1월4월7월10월12월7월 강수 557.3mm — 이 한 칸이 자를 혼자 정한다열마다 그 자 위에서 차지하는 자리0 = 1월 기온(−0.5) · 1 = 7월 강수(557.3)기온0.00~0.05강수0.01~1.00습도0.10~0.15풍속0.00~0.01일조0.17~0.51강수만 자를 거의 다 쓴다 — 나머지 넷은 바닥에 깔린다

보이는 것은 7월 강수 한 칸뿐입니다. 기온 줄은 열두 달이 모두 0.00~0.05 안에 눌려 여름과 겨울이 같은 색이 되었고, 풍속 줄은 아예 백지처럼 보입니다. "변화가 없는 해"가 아니라 변화를 못 보이는 그림인 것입니다. 자료: 표 1 과 같다 — 칸의 진하기는 (값 − 전체 최솟값) ÷ 전체 폭 (원장 계산)

먼저 예측

그림 1 에서 계절을 읽을 수 있나요? 못 읽는다면 무엇을 바꿔야 읽히게 될지 한 문장으로 적어 두세요. 3정거장의 시뮬레이터와 코드 ③이 여러분의 답과 맞대어 볼 네 가지 판을 보여 줍니다.

체크포인트 1

한 자로 칠한 그림이 왜 거의 백지가 되었는지 말할 수 있고, 무엇을 바꾸면 될지 한 문장으로 적어 두었다.

다음 정거장 · 개념 15분 →
2
개념 · 15분

자를 바꾸는 네 가지 방법과, 그때마다 지워지는 것

2-1한 자로 칠하면 큰 단위가 이긴다

정규화는 단위가 다른 값들을 견줄 수 있는 눈금으로 옮기는 일입니다. 그림 1 이 한 것도 정규화이긴 했습니다 — 다만 표 전체에 자 하나를 걸었지요. 그 자의 양 끝은 60칸 가운데 가장 작은 값(1월 기온 −0.5)과 가장 큰 값(7월 강수 557.3)입니다.

그러니 자의 길이가 557.8입니다. 기온 열이 한 해 동안 움직인 폭은 29.8°C뿐이라, 그 자 위에서는 0.05 도 못 채웁니다. 숫자가 큰 열이 자를 혼자 정하고, 나머지 열은 그 자의 바닥에 깔립니다.

서울 2024열마다 폭
열마다 폭(최댓값 − 최솟값)강수551.6일조189.3기온29.8습도24.8풍속0.7풍속 0.7 = 강수 551.6 의 800분의 1 쯤(551.6 ÷ 0.7 = 788)
가장 넓은 열 강수가장 좁은 열 풍속

자료: 표 1 — 폭은 코드 ①이 찍는 값이다

그래서 열마다 자를 따로 잡습니다. 그러면 열 안의 모양은 살아납니다. 다만 그 순간 열 사이의 크기 비교는 사라집니다 — 어느 열이든 0 과 1 사이를 꽉 채우게 되니까요.

그 대가는 생각보다 큽니다. 폭이 29.8°C 인 기온 열도, 폭이 0.7 m/s 뿐인 풍속 열도 똑같이 0 과 1 사이를 꽉 채웁니다. 옆의 반례가 그 자리입니다.

규칙정규화한 그림 옆에는 열마다의 원래 범위를 함께 적는다.

2-2옮기는 법 셋 — min-max · z 점수 · 순위

열마다 자를 잡는 방법은 하나가 아닙니다. 가장 흔한 셋을 같은 열(강수)에 걸어 보면 그림 2 처럼 갈립니다.

min-max 는 양 끝을 0 과 1 에 못 박습니다. 한 달이 크게 튀면 그 달이 1 을 차지하고 나머지가 바닥에 몰립니다 — 7월(557.3mm) 때문에 나머지 열한 달이 0.00~0.25 안에 들어갑니다. z 점수 는 “평균에서 표준편차 몇 개만큼 떨어졌나”로 바꿉니다. 튀는 값에 덜 끌리지만 아주 안 끌리지는 않습니다 — 7월 강수는 z 로도 3.17 입니다. 순위 는 간격을 통째로 버리고 차례만 남깁니다. 튀는 값에 가장 덜 흔들리지만, 7월이 “얼마나” 많았는지는 완전히 사라집니다.

그림 2같은 강수 열, 자를 넷으로주황 막대가 7월(557.3mm) — 자를 바꿀 때마다 7월이 차지하는 자리가 달라진다
강수 열두 달 — 자를 바꾸면주황 막대가 7월(557.3mm)표 전체 한 자0 ~ 11.00열마다 min-max0 ~ 11.001월4월7월10월12월같은 열두 달 — 자를 더 바꾸면주황 막대가 7월(557.3mm)열마다 z−0.73 ~ 3.173.17열마다 순위1/12 ~ 12/121.001월4월7월10월12월강수 열두 달 — 자를 바꾸면주황 막대가 7월(557.3mm)표 전체 한 자0 ~ 11.00열마다 min-max0 ~ 11.001월4월7월10월12월같은 열두 달 — 자를 더 바꾸면주황 막대가 7월(557.3mm)열마다 z−0.73 ~ 3.173.17열마다 순위1/12 ~ 12/121.001월4월7월10월12월

표 전체 한 자에서는 7월만 솟고 나머지 열한 달이 바닥에 붙습니다. 열마다 min-max 에서는 7월이 1.00, 나머지가 0.25 아래입니다. z 에서는 7월이 3.17 이고, 순위에서는 열두 달이 고른 계단이 됩니다 — 7월이 “유난히 많았다”는 사실까지 평평해진 것입니다. 위 두 줄이 서로 닮은 것은 강수 열이기 때문입니다 — 표 전체의 자를 정한 것이 바로 이 열의 7월이라, 강수 열에서만은 두 자가 거의 같은 그림을 냅니다. 기온이나 풍속 열로 바꾸면 두 줄이 전혀 달라집니다(코드 ③). 자료: 표 1 의 강수 열 — 네 값 모두 코드 ①·②·③의 식과 같다(원장 계산)

표 2무엇을 살리고 무엇을 지우나같은 열에 걸 수 있는 자 넷
자하는 일튀는 값에지우는 것되살리려면
표 전체 한 자 60칸 전체를 0~1 로 가장 세게 끌린다 작은 단위 열의 모양 전부 숫자 2개
열마다 min-max 열마다 최솟값 0, 최댓값 1 세게 끌린다 열 사이 크기 · 열의 원래 폭 숫자 10개
열마다 z 점수 평균 0, 표준편차 1 덜 끌린다 열 사이 크기 · 원래 단위 숫자 10개
열마다 순위 차례만 1/12 ~ 12/12 로 거의 안 끌린다 간격 전부 — 얼마나 큰지 숫자 60개

맨 오른쪽 칸이 오늘의 핵심입니다. 그림 옆에 몇 개를 적어야 원래 표가 되살아나는가 — 그 수가 곧 그 그림이 지운 양입니다. 가장 고르고 보기 좋은 순위 판이 60개, 곧 표 전체를 지웠습니다. 되살리는 숫자 수는 3정거장 시뮬레이터의 ‘봉인 칩’ 과 같은 값이다 — 판이 화면에서 다시 센다

2-3자를 만드는 일(fit)과 재는 일(transform)

scikit-learn 은 이 일을 두 단계로 나눠 놓았습니다. fit 은 자를 만드는 일입니다 — 주어진 자료에서 열마다 최솟값·최댓값(또는 평균·표준편차)을 재어 기억합니다(data_min_·data_max_). transform 은 그 자로 재는 일입니다.

둘을 같은 자료에 쓰면 값이 얌전히 0~1 에 들어갑니다. 그런데 자를 만든 자료와 재는 자료가 다르면 어떻게 될까요? 상반기(1~6월)로만 자를 만들고 하반기(7~12월)를 그 자로 재면, 30칸 가운데 12칸이 0~1 밖으로 나갑니다. 가장 멀리 나간 칸은 7월 강수 5.07 입니다 — 상반기에는 장마가 없었기 때문입니다.

이것은 계산이 틀린 것이 아닙니다. 자를 어느 기간으로 만들었는지가 달랐을 뿐입니다. 그러니 정규화한 그림에는 자를 만든 기간을 적어야 합니다. Ⅲ 단원에서 모델에 넣을 때 자를 훈련 자료로만 만드는 까닭도 같습니다 — 시험 자료로 자를 만들면 아직 보면 안 될 것을 미리 본 셈이 됩니다.

규칙정규화한 그림 옆에는 자를 만든 기간을 적는다 — 예: “기준: 2024년 1~6월”.

그림 3자를 만든 기간 밖으로 나간 열두 칸청록 띠가 0~1 — 띠 밖의 마름모는 자를 만든 기간에 없던 값이다
상반기 자로 하반기를 재면● 자를 만든 1~6월 ◆ 그 자로 잰 7~12월주황 = 0~1 밖으로 나간 칸기온−0.5~24.6°C강수18.9~125.1mm7월 5.07습도56.2~72.9%010~1 밖으로 나간 칸 12개 / 30칸나머지 두 열도 같다● 자를 만든 1~6월 ◆ 그 자로 잰 7~12월주황 = 0~1 밖으로 나간 칸풍속2.2~2.7m/s일조109.3~285.6hr01자를 만든 기간 밖의 값이다상반기 자로 하반기를 재면● 자를 만든 1~6월 ◆ 그 자로 잰 7~12월주황 = 0~1 밖으로 나간 칸기온−0.5~24.6°C강수18.9~125.1mm7월 5.07습도56.2~72.9%010~1 밖으로 나간 칸 12개 / 30칸나머지 두 열도 같다● 자를 만든 1~6월 ◆ 그 자로 잰 7~12월주황 = 0~1 밖으로 나간 칸풍속2.2~2.7m/s일조109.3~285.6hr01자를 만든 기간 밖의 값이다

1 을 넘은 여섯 칸은 7·8·9월 기온, 7·9월 강수, 7월 습도이고, 0 아래로 내려간 여섯 칸은 8·10·11·12월 풍속, 7월 일조, 12월 강수입니다. 거꾸로 하반기로 자를 만들어 상반기를 재면 밖으로 나간 칸이 7칸으로 줄고 자리도 바뀝니다 — ‘이상해 보이는 달’은 자료가 아니라 내가 고른 기준 기간이 정합니다. 자료: 표 1 — 코드 ④가 찍는 값과 같다(원장 실측 run/l08/l08_c4.txt)

2-40 이 ‘없음’ 일 때만 — 기준 시점 = 100 지수

자를 바꾸는 또 한 가지 방법이 지수입니다. 어느 한 시점을 100 으로 놓고 나머지를 그 배로 적는 것이지요. 소비자물가지수(2020 = 100)가 그렇습니다. 크기가 아주 다른 두 양의 자라는 속도를 견줄 때 좋습니다 — 따릉이 대여 건수(수백만 건)와 일조 시간(수백 시간)을 한 그림에 놓을 수 있습니다.

다만 지수는 나눗셈입니다. 나누는 자리가 ‘없음’ 이어야 ‘몇 배’ 가 뜻을 가집니다. 강수량 0mm 는 비가 한 방울도 없었다는 뜻이고, 대여 0건은 아무도 안 탔다는 뜻입니다 — 이런 양을 비율 척도라 합니다. 그런데 섭씨 0°C 는 ‘기온이 없음’ 이 아니라 물이 어는 자리일 뿐입니다(등간 척도).

서울 2024 의 1월 평균기온은 −0.5°C 입니다. 1월을 100 으로 놓으면 7월 기온 지수는 −5,460, 8월은 −6,022 가 됩니다. 폭발한 것이 아니라 부호가 통째로 뒤집힌 것입니다. 기온은 지수가 아니라 차이(°C) 로 견줍니다.

그림 40 이 ‘없음’ 인가나누는 자리가 눈금의 끝인지 가운데인지가 지수를 쓸 수 있는지를 가른다
0 이 '없음' 인 양지수(기준 = 100)는 나눗셈이다 — 나누는 자리가'없음' 이어야 '몇 배' 가 뜻을 가진다강수 합mm0 mm0mm = 비가 한 방울도 없었다쓸 수 있다일조 합hr0 hr0hr = 해가 한 번도 안 났다쓸 수 있다0 이 '없음' 이 아닌 양지수(기준 = 100)는 나눗셈이다 — 나누는 자리가'없음' 이어야 '몇 배' 가 뜻을 가진다상대습도%0 %0% = 수증기가 없다쓸 수 있다평균기온°C0 °C0°C = 물이 어는 자리일 뿐쓸 수 없다1월 평균기온 −0.5°C —7월 기온 지수는 −5,460 이다0 이 '없음' 인 양지수(기준 = 100)는 나눗셈이다 — 나누는 자리가'없음' 이어야 '몇 배' 가 뜻을 가진다강수 합mm0 mm0mm = 비가 한 방울도 없었다쓸 수 있다일조 합hr0 hr0hr = 해가 한 번도 안 났다쓸 수 있다0 이 '없음' 이 아닌 양지수(기준 = 100)는 나눗셈이다 — 나누는 자리가'없음' 이어야 '몇 배' 가 뜻을 가진다상대습도%0 %0% = 수증기가 없다쓸 수 있다평균기온°C0 °C0°C = 물이 어는 자리일 뿐쓸 수 없다1월 평균기온 −0.5°C —7월 기온 지수는 −5,460 이다

강수·일조·습도는 0 이 눈금의 왼쪽 끝이라 “두 배”가 뜻을 가집니다. 섭씨 기온은 0 이 눈금 가운데라 “두 배 따뜻하다”가 성립하지 않습니다. 같은 기온을 절대온도(K)로 적으면 0 이 다시 끝이 되지만, 그때 나오는 “1.09배”는 우리가 알고 싶은 이야기가 아닙니다. 자료: 표 1 의 기온 열 — 기온 지수는 코드 ⑤의 도전이 찍는 값이다(원장 실측)

여기까지를 같아야 할 두 숫자가 다른 자리 넷으로 묶어 둡니다. 차이가 곧 자가 한 일입니다.

풍속 · 원래 폭과 min-max 뒤의 폭
0.7원래 폭(m/s)
→
1.00min-max 뒤 폭

폭 29.8°C 인 기온도 똑같이 1.00 — 폭의 차이가 지워진다.

같은 이름 z 점수 · 두 도구의 값
1.0000pandas .std()
vs
1.0445StandardScaler

분모가 n−1 이냐 n 이냐 — √(12/11) 만큼 어긋난다.

7월 강수 · 어느 기간으로 만든 자인가
1.00한 해 전체로 만든 자
vs
5.07상반기로 만든 자

같은 557.3mm 다 — 기준 기간만 바뀌었다.

기온 · 1월을 100 으로 놓으면
1001월 지수
→
−5,4607월 지수

1월이 −0.5°C 라 부호가 통째로 뒤집힌다.

자료: 네 쌍의 숫자는 모두 3정거장 코드 ①·②·④·⑤가 찍는 값이다(기상청 ASOS 서울 2024).

정규화한 그림 옆에 적을 넷

  1. 어떤 자표 전체 한 자인가, 열마다인가 — min-max · z · 순위 · 지수 중 무엇인가
  2. 기준 기간자를 어느 기간으로 만들었나 — “기준: 2024년 1~6월”
  3. 원래 범위열마다 원래 얼마부터 얼마까지였나 — 풍속 2.0~2.7m/s
  4. 0 의 뜻지수를 썼다면 0 이 ‘없음’ 인 양인가 — 기온에는 쓰지 않는다

이 넷이 없으면 같은 그림을 내는 다른 세상이 얼마든지 있습니다. 3정거장 시뮬레이터가 그 다른 세상을 직접 빚어 보입니다.

체크포인트 2

자 넷이 저마다 무엇을 살리고 무엇을 지우는지 말할 수 있고, 그림 옆에 적을 넷을 안다. 이제 그 ‘다른 세상’을 직접 만들어 본다.

다음 정거장 · 손으로 20분 →
3
손으로 · 20분

같은 그림을 내는 다른 세상을 만들어 보고, 도구로 자를 만든다

오늘의 장비

scikit-learn 의 Scaler — 자를 만들고, 그 자로 잰다

지금까지 정규화는 pandas 식 한 줄이었습니다. 오늘은 같은 일을 scikit-learn 의 MinMaxScaler·StandardScaler 로 한 번 더 해 보고, 같은 것과 다른 것을 가릅니다. 처음 실행은 몇 초 멈춥니다 — 고장이 아니라 꾸러미를 처음 받는 중이에요(쪽마다 한 번).

부르는 모양

from sklearn.preprocessing import MinMaxScaler

sc = MinMaxScaler().fit(M)   # 자를 만든다
X  = sc.transform(M)         # 그 자로 잰다
sc.data_min_                 # 자가 기억한 값

오늘 쓰는 것 넷

fit
자를 만든다 — 열마다 최솟값·최댓값(또는 평균·표준편차)을 기억
transform
그 자로 잰다 — 자를 만든 자료가 아니어도 된다
data_min_ · data_max_
자가 기억한 값 — 그림 옆에 적을 숫자
StandardScaler
z 점수판 — 표준편차를 n 으로 나눈다

pandas 식과 다른 셋

  1. 자가 남는다한 줄 식은 계산하고 끝이지만 Scaler 는 data_min_ 을 들고 있다
  2. 두 단계로 갈린다fit 과 transform 을 다른 자료에 쓸 수 있다 — Ⅲ 의 훈련·시험
  3. 분모가 다르다StandardScaler 는 n, pandas .std() 는 n−1(Ⅱ-3 에서 손으로 본 그 자리)

대가 — 식이 눈에서 사라집니다. StandardScaler 라고만 적으면 분모가 무엇인지 문서를 봐야 압니다.

1

그림은 못 박고, 세상을 빚는다 — 같은 그림을 내는 다른 해 만들기

9분

여는 장면에 적어 둔 내 예측입니다. 자를 바꾸면 계절이 보일 것 같다고 적었다면 — 맞습니다. 그런데 그 대가는 무엇일까요? 아래 작업대는 거꾸로 묻습니다: 그림을 못 박아 두고, 그 그림과 똑같은 그림을 내는 다른 해(세상)를 만들 수 있는지.

기본 주문 넷을 차례로 받습니다. 주문마다 먼저 가능 / 불가능을 잠그고(예측 잠금), 그다음 작업대에서 세상을 빚어 보세요. 마지막 편집장 자리에서 “그림 옆에 적을 숫자”를 세어 봅니다. 도전 셋을 풀면 카드가 스스로 닫힙니다.

시뮬레이터

그림 위조 작업대

그림은 못 박고 세상을 빚는다 — 같은 그림을 내는 다른 해가 몇 개나 있나

  1. 1주문을 읽고 가능 / 불가능을 잠근다
  2. 2작업대에서 열 하나를 밀고 · 늘이고 · 점을 끈다
  3. 3같은 자로 다시 칠해 예순 칸이 그대로인지 본다
증거 그림의 자(판)
작업대에 올릴 열
내 예측 — 잠가야 작업대가 열린다
손잡이 — 열 전체를 한꺼번에
단위 칩 · 되돌리기
덤 — 고정 범위로 칠해 보기
주문 3 — 같은 주문을 min-max 판에 내면
편집장 — 봉인 칩 붙이기
단계
증거 읽기증거 그림은 끝까지 움직이지 않는다

위조 성공 = 내가 빚은 세상을 같은 자로 다시 칠했을 때 예순 칸이 모두 그대로(칸마다 0.005 안) · 현실 검사 = 음수 강수 · 100% 넘는 습도 · 절대영도 아래 기온이 있으면 제출이 막힌다

봉인 칩 = 그림 옆에 함께 적어 두면 원래 표가 되살아나는 숫자 꾸러미 · 위조범 봇 = 그 칩만으로 되살아나는지 판마다 식으로 따져 보는 판정기(후보를 뒤지지 않으므로 늘 정확하다)

그대로인 칸60/ 60
증거의 자—
봉인에 드는 숫자—
현실 검사—
지금 단계—
점수0
도전 1

주문 1 — 강수 열을 늘이기 한 번으로만 움직여 8월 강수를 10mm 로 만들고, min-max 판 예순 칸을 그대로 두어라.

도전 2

주문 3 — 순위 판에서 9월만 150mm 로 올려 통과시킨 뒤, 같은 주문이 min-max 판으로 오면 [거절한다]를 눌러라.

도전 3

주문 4 — 먹통표 스물다섯 칸을 모두 옳게 칠해라. 단위를 다시 적었을 때 무너지는 판은 몇 줄인가?

자료: 기상청 종관기상관측(ASOS) 서울(108) 2024년 일자료로 만든 월별 5요소 60칸 + 따릉이 2024 월별 대여 건수 12칸 — 쪽 안에 실었다(.json 파일은 배포에서 빠지므로 쪽이 한 번의 요청으로 다 선다). 코드 ①~⑤ 가 ../data/asos_seoul_2024.csv·bike_daily_2024.csv 에서 만드는 표와 같은 값이다.

가장 고르고 보기 좋던 판이 되살리는 데 개를 요구했다. 그러니 “잘 보이는 그림”과 “많이 지운 그림”은 . 그림 옆에는 를 적어야 한다.

확인 문제 6에 적어 제출 →
2

월별 표를 만들고, 열마다 min-max 를 두 가지 방법으로

2분

코드 ①은 366일을 달마다 모아 표 1 을 다시 만듭니다. 실행하기 전에 다섯 열의 값 범위를 어림해 적어 보세요 — 어느 열이 가장 큰 숫자를 가질까요? 그리고 가장 좁은 열은?

기본 빈칸 ①을 채워 ▶ 실행하세요. pandas 식과 MinMaxScaler 의 차이가 0.000000 으로 나오면 맞습니다.

도전 M.min() 을 0 으로 바꿔 ‘0~최댓값’ 판을 만들어 보세요 (mm0 = M / M.max()). 무엇이 살아나고 무엇이 지워집니까?

탐구 다섯 열 가운데 0 이 ‘없음’ 인 열과 아닌 열을 갈라 보세요. 코드 ⑤의 지수를 쓸 수 있는 열은 어느 것입니까?

풍속의 원래 폭은 m/s 뿐인데 min-max 그림에서는 기온만큼 요란하다. 까닭은 이고, 그래서 그림 옆에 를 적어야 한다.

확인 문제 1에 적어 제출 →
3

같은 이름 다른 식(z), 그리고 네 판을 한 장에

3분

코드 ②는 같은 ‘z 점수’를 pandas 와 StandardScaler 로 각각 구해 견줍니다. 둘이 다르다면 어느 쪽이 더 클까요? 몇 배쯤일까요? 그리고 코드 ③의 네 판 가운데 ‘표 전체 한 자’ 에서는 어느 열이 색을 다 가져갈지도 미리 적어 두세요.

기본 빈칸 ②를 채워 코드 ②를 실행하세요. 차이가 0.000000 이 되면 분모를 맞춘 것입니다.

기본 코드 ③은 채워져 있습니다. 그대로 ▶ 실행해 네 판을 한 장에서 견주고, 여는 장면의 그림 1 과 맞대어 보세요.

도전 네 칸 가운데 하나를 M / M.max()(열마다 0~최댓값) 판으로 바꿔 그려 보세요 — 0 이 ‘없음’ 인 열에서만 뜻이 있는 판입니다. 그리고 12달이 아니라 366일로 z 를 만들면 두 값의 비가 얼마가 될까요(√(366/365) ≈ 1.0014)?

탐구 이 표를 처음 보는 사람에게 네 판 가운데 한 장만 보여 준다면 어느 것을 고르겠습니까? 고른 까닭과 함께, 그 판에서 ‘기온’과 ‘강수’ 가운데 어느 쪽이 손해를 보는지도 적어 보세요.

7월 한 달이 나머지 열한 달을 옅게 만든 까닭은 이고, 덜 받으려면 판이나 판을 쓴다. 한편 같은 이름 z 점수가 도구마다 다른 값을 내는 까닭은 이다.

확인 문제 2에 적어 제출 → 확인 문제 3에 적어 제출 →
4

자를 만드는 일과 재는 일을 갈라 놓는다

4분

상반기(1~6월)로만 자를 만들고 하반기(7~12월)를 그 자로 재면, 0~1 밖으로 나가는 칸이 있을까요? 있다면 30칸 가운데 몇 칸쯤일까요? 숫자 하나를 짐작해 적어 두세요.

기본 빈칸 ③을 채워 실행하세요 — 자를 상반기로만 만듭니다.

도전 fit 을 M.loc[7:12](하반기)로 바꿔 상반기를 재 보세요. 밖으로 나간 칸이 12 → 7 로 줄고 자리도 바뀝니다 — 자를 어느 기간으로 만드느냐가 ‘이상해 보이는 달’을 정합니다.

탐구 Ⅲ 단원에서 모델에 넣을 때 자를 훈련 자료로만 만드는 까닭을 이 칸의 결과로 설명해 보세요. 시험 자료로 자를 만들면 무엇을 미리 본 셈입니까?

1 을 넘은 값은 계산이 . 달라진 것은 뿐이므로, 그림 옆에는 를 적어야 한다.

확인 문제 4에 적어 제출 →
5

1월을 100 으로 — 크기가 다른 둘의 ‘자라는 속도’

2분

따릉이 대여 건수는 수백만 건, 일조 시간은 수백 시간입니다. 1월을 100 으로 놓으면 6월 따릉이 지수는 얼마쯤일까요? 일조 지수는? 두 숫자를 먼저 적어 두세요.

기본 빈칸 ④를 채워 실행하세요 — 1월을 100 으로 놓습니다.

도전 idx 에 "기온": M["기온"] 을 더해 그려 보세요. 서울 2024 의 1월 평균기온은 −0.5°C 라 2월 지수가 −784, 8월이 −6,022 가 됩니다. 기준이 영하면 지수의 부호가 통째로 뒤집힙니다 — 주문 4 에서 본 그 일입니다.

탐구 기준 달을 1월 대신 7월로 바꾸면 무엇이 달라지고 무엇이 그대로입니까? (소비자물가지수의 기준 연도를 바꾸는 일과 같습니다 — 더 알아보기 ③)

이 그림으로 말할 수 있는 것은 이고, 말할 수 없는 것은 와 다. 기온에 같은 지수를 쓸 수 없는 까닭은 이다.

확인 문제 5에 적어 제출 →
체크포인트 3

같은 그림을 내는 다른 세상을 직접 만들어 보았고, 도구로 자를 만들고(fit) 재는(transform) 일을 갈라 보았다. 이제 그림 옆에 무엇을 적을지 정한다.

다음 정거장 · 정리·확인 10분 →
4
정리·확인 · 10분

오늘의 탐험 일지

  1. 찾은 것

    정규화는 자를 떼어 내는 일이다. 떼어 낼수록 열 안의 모양은 또렷해지지만, 같은 그림을 내는 다른 세상도 함께 늘어난다.

  2. 도구의 한계

    같은 이름의 z 점수도 도구마다 분모가 다르고(1.0445배), fit 을 어느 기간에 했느냐가 값을 바꾼다(7월 강수 5.07).

  3. 보고의 규칙

    정규화한 그림 옆에 넷을 적는다 — 어떤 자 · 기준 기간 · 원래 범위 · 0 의 뜻.

✍️ 문제마다 답을 쓰고 제출하기를 누르세요. 제출하면 모범 답안이 열리고, 제출한 답은 선생님께 전달됩니다.

1. 열마다 min-max 로 칠한 판에서 풍속 줄이 기온 줄만큼 진하게 오르내립니다. 이 그림만 보고 “풍속도 기온처럼 계절 따라 크게 변한다”고 말하면 틀리는 까닭을 쓰고, 그림 옆에 무엇을 함께 적어야 하는지 쓰시오.
📖 모범 답안

min-max 는 열마다 최솟값을 0, 최댓값을 1 로 늘린다. 그러니 그 열이 원래 얼마나 넓게 움직였는지와 상관없이 어느 열이든 0~1 전체를 쓰게 된다. 풍속 열이 한 해 동안 움직인 폭은 0.7 m/s(2.0~2.7)뿐이고 기온 열은 29.8°C(−0.5~29.3)인데, 그림에서는 둘 다 폭 1.00 이 된다.

다시 말해 ‘변화가 작다’는 사실 자체가 min-max 그림에서 지워진다. 그림이 보여 주는 것은 “풍속이 열두 달 가운데 언제 상대적으로 셌나”(모양)이지 “얼마나 셌나”(크기)가 아니다.

그래서 정규화한 그림 옆에는 열마다의 원래 범위를 적는다 — 예: “풍속 2.0~2.7 m/s · 기온 −0.5~29.3°C (열마다 min-max, 기준: 2024년 1~12월)”.

2. 가장 비가 많은 달(7월 557.3mm) 하나 때문에 min-max 판에서 나머지 열한 달의 강수가 0.00~0.25 에 몰립니다. ① 까닭을 식으로 설명하고, ② 이를 덜 받는 방법을 두 가지 적은 뒤, ③ 각 방법이 대신 무엇을 지우는지 쓰시오.
📖 모범 답안

① min-max 의 식은 (값 − 최솟값) ÷ (최댓값 − 최솟값) 이다. 7월 하나가 분모를 키운다 — 강수 열의 분모는 557.3 − 5.7 = 551.6 이다. 나머지 열한 달은 5.7~143.9mm 안에 있으므로 분자가 아무리 커도 138.2 ÷ 551.6 = 0.25 를 넘지 못한다. 한 칸이 자를 혼자 정한 것이다.

② ③ 순위 — 간격을 버리고 차례만 남기므로 7월에 거의 흔들리지 않는다. 대신 “7월이 얼마나 많았는지”가 통째로 사라진다 (열두 달이 고른 계단이 된다). z 점수 — 평균(109.3mm)과 표준편차(141.2mm)로 옮기므로 나머지 열한 달이 −0.73~0.25 로 퍼진다. 다만 7월은 z 로도 3.17 이라 여전히 끌린다. 대신 0~1 이라는 읽기 쉬운 범위를 잃는다.

(그 밖에) 7월을 튀는 값으로 따로 표시하고 나머지 열한 달로만 칠한 뒤, 그림 옆에 7월의 실제 값을 적는 방법도 있다 — Ⅱ-5 에서 정한 대로 지우지 않고 드러내는 쪽이다.

3. 같은 이름 ‘z 점수’인데 StandardScaler 가 pandas 의 z 보다 1.0445배 큽니다. ① 까닭을 쓰고, ② 366일로 z 를 만들면 이 비가 얼마가 될지 식과 함께 답하시오. ③ 그리고 이런 일이 생기지 않게 하려면 도구를 쓸 때 무엇을 해야 하는지 한 줄 덧붙이시오.
📖 모범 답안

① 표준편차의 분모가 다르다. pandas .std() 는 기본이 ddof=1 이라 n−1 로 나누고, StandardScaler 는 n 으로 나눈다. n 으로 나눈 표준편차가 더 작으므로 그것으로 나눈 z 는 더 크다. 달이 12개이니 비는 √(12/11) ≈ 1.0445 이고, 실제로 찍힌 값도 1.0445 다. M.std(ddof=0) 으로 맞추면 차이가 0.000000 이 된다(Ⅱ-3 에서 손으로 본 n 과 n−1 이 도구 안에서 다시 나온 것이다).

② √(366/365) ≈ 1.0014. n 이 커질수록 n 과 n−1 의 차이가 작아져 비는 1 에 가까워진다. 12달처럼 n 이 작을 때만 눈에 띄는 차이가 된다.

③ 같은 이름을 믿지 말고 두 결과를 맞대어 보고, 문서에서 식을 확인한다. 보고서에는 “z 점수(표준편차 분모 n)”처럼 어느 식인지까지 적는다.

4. 상반기(1~6월)로 fit 한 MinMaxScaler 로 7월 강수를 재니 5.07 이 나왔습니다. ① 계산이 잘못된 것인지 답하고 그 값이 나온 식을 쓰시오. ② 그림 옆에 무엇을 적어야 하는지 쓰시오. ③ 그리고 Ⅲ 단원에서 모델에 넣을 때 자를 훈련 자료로만 만드는 까닭을 이 결과로 설명하시오.
📖 모범 답안

① 잘못이 아니다. 자는 1~6월의 최솟값·최댓값으로 만들어졌고, 강수 열의 그 값은 18.9~125.1mm 다(1월과 5월). 7월 강수 557.3mm 는 그 범위 밖이므로 (557.3 − 18.9) ÷ (125.1 − 18.9) = 538.4 ÷ 106.2 = 5.07 이 된다. 상반기에는 장마가 없었다는 사실이 숫자로 나온 것이다.

② 그림 옆에 자를 만든 기간을 적는다 — “기준: 2024년 1~6월”. 그 한 줄이 없으면 5.07 을 본 사람이 계산 오류로 읽는다. 거꾸로 하반기로 자를 만들면 밖으로 나간 칸이 12 → 7칸으로 줄고 자리도 바뀐다 — ‘이상해 보이는 달’은 자료가 아니라 내가 고른 기준 기간이 정한다.

③ 모델을 만들 때 시험 자료까지 넣어 fit 하면, 자가 시험 자료의 최솟값·최댓값을 이미 안다. 7월 강수 557.3mm 가 자에 들어가면 7월은 얌전한 1.00 이 되어 “처음 보는 값”이라는 사실이 사라진다. 그러면 시험 점수가 실제보다 좋게 나온다 — 아직 보면 안 될 것을 미리 본 셈이다. 그래서 fit 은 훈련 자료에만, transform 은 양쪽에 쓴다.

5. 따릉이 지수와 일조 지수를 한 꺾은선 그림에 놓았습니다(1월 = 100). ① 이 그림으로 말할 수 있는 것과 말할 수 없는 것을 각각 쓰시오. ② 그리고 같은 방식으로 “1월 기온을 100 으로 하면 7월 기온 지수는 −5,460 이다”라고 적으면 그 문장이 뜻이 없는 까닭을 쓰고, 기온은 무엇으로 견주어야 하는지 쓰시오.
📖 모범 답안

① 말할 수 있는 것 — 1월 대비 몇 배로 늘고 줄었는지(자라는 속도)다. 따릉이는 6월에 245 까지 치솟고, 일조는 7월에 54 로 내려앉는다(장마). 7월에 두 줄이 엇갈린다 — 따릉이 188 · 일조 54.

말할 수 없는 것 — ㉠ 두 양의 절대 크기다. 지수로는 따릉이가 수백만 건이고 일조가 수백 시간이라는 것을 알 수 없다. ㉡ 인과다. 두 줄이 같이 오르내린다고 “해가 나서 따릉이를 더 탔다”고 말할 수 없다(기온·방학·행사 같은 다른 까닭이 있다). ㉢ 기준 달(1월)이 특별한 달이었는지도 이 그림만으로는 알 수 없다.

② 지수는 나눗셈이라 나누는 자리가 ‘없음’ 이어야 뜻을 가진다(비율 척도). 섭씨 0°C 는 ‘기온이 없음’ 이 아니라 물이 어는 자리일 뿐이다(등간 척도). 게다가 서울 2024 의 1월 평균기온은 −0.5°C 라 나누는 값이 음수가 되어 부호가 통째로 뒤집힌다 (2월 −784 · 7월 −5,460 · 8월 −6,022). “−5,460” 은 크기도 방향도 읽을 수 없는 숫자다.

기온은 차이(°C) 로 견준다 — “7월이 1월보다 27.1°C 높다”처럼. 또는 평년값과의 편차로 적는다.

6. 시뮬레이터의 지운 것 지도를 보면 판마다 되살리는 데 드는 숫자가 다릅니다 (한 자 2 · 지수 5 · min-max 10 · z 10 · 순위 60). ① 가장 고르고 보기 좋던 판이 어느 것이었고 되살리는 데 몇 개가 들었는지 쓰고, ② “잘 보이는 그림”과 “많이 지운 그림”의 관계를 한 문장으로 쓰시오. ③ 끝으로 “정규화한 그림 옆에는 __ 를 적는다. 왜냐하면 __” 을 완성하시오.
📖 모범 답안

① 순위 판이다. 열두 달이 고른 계단이라 가장 읽기 편했는데, 되살리려면 60개 — 곧 원래 표 전체를 옆에 적어야 한다. 순위는 간격을 통째로 버리기 때문이다. 반대로 ‘표 전체 한 자’ 판은 2개(전체 최솟값·최댓값)면 되살아난다. 거의 아무것도 안 지웠지만, 그래서 거의 아무것도 안 보였다.

② 보기 좋아진 만큼 지운 것이다. 정규화는 자를 떼어 내는 일이고, 떼어 낼수록 열 안의 모양은 또렷해지지만 같은 그림을 내는 다른 세상도 그만큼 늘어난다. 작업대에서 본 그대로 — 강수를 통째로 0.137배 해도, 풍속 폭을 0.7 에서 27 로 펴도 min-max 그림은 예순 칸이 그대로였다.

③ 예: “정규화한 그림 옆에는 어떤 자를 썼는지 · 자를 만든 기간 · 열마다의 원래 범위 · (지수라면) 0 이 ‘없음’ 인 양인지 를 적는다. 왜냐하면 그 넷이 없으면 같은 그림을 내는 다른 세상이 얼마든지 있어서, 읽는 사람이 원래 표로 되돌아갈 수 없기 때문이다.”

(더 짧게) “자와 기준 기간과 원래 범위를 적는다. 그 숫자들이 곧 그림이 지운 것이고, 그것만 있으면 원래 표가 되살아나기 때문이다.”

+
더 알아보기

자를 바꾸는 일이 세상에서 하는 일 셋

한 줄이 한 칸 — 숫자도 축도 없는 그림서울 2024 · 달마다 연평균 14.9°C 와의 차이를 색 하나로 옮겼다정규화가 그림의 전부가 된 자리1월4월7월12월청록 = 연평균보다 따뜻한 달 · 주황 = 찬 달 · 진할수록 차이가 크다가장 큰 차이 8월 +14.5°C · 1월 −15.4°C
현장

기후 줄무늬 — 숫자도 축도 없앤 그림

영국 레딩 대학교의 기후과학자 에드 호킨스는 2018년에 한 해를 세로줄 하나로 바꾼 그림을 내놓았습니다. 기준 기간의 평균보다 따뜻한 해는 붉게, 찬 해는 푸르게 칠하고 숫자도 축도 범례도 지웠습니다. 남은 것은 ‘기준과 얼마나 다른가’ 하나뿐이지요. 이 그림은 #ShowYourStripes 라는 이름으로 퍼져 나라·도시마다 제 줄무늬를 갖게 되었습니다.

오늘 배운 말로 하면 이것은 기준 시점을 정하고 차이만 남긴 정규화입니다. 그래서 이 그림에는 반드시 기준 기간을 적어야 합니다 — 기준을 옮기면 같은 자료도 “대체로 따뜻한 100년”이 되었다가 “대체로 찬 100년”이 되니까요. 그림 옆의 한 줄이 곧 그림의 절반입니다.

도해: 같은 방식을 서울 2024년 열두 달에 적용해 보았다. 달 평균기온이 연평균 14.9°C 와 얼마나 다른지를 청록(따뜻)과 주황(차가움)의 진하기로만 그렸다 — 가장 큰 차이는 8월 +14.5°C, 1월 −15.4°C. 숫자는 기상청 ASOS 서울 2024 일자료에서 계산했다. · 착안: Ed Hawkins(University of Reading), Warming Stripes, 2018

색표도 자다 — 밝기가 고르게 오르는가가로: 값 0 → 1 · 세로: 그 색의 밝기(CIE L*)점선 = 무지개(jet) · 굵은 선 = viridis0255075100여기서 되돌아선다같은 눈금을 흑백으로 — 진하기만 남기면무지개(jet)viridis무지개는 가운데가 가장 옅어 큰 값과 작은 값이 같은 진하기로 섞인다viridis 는 한 방향으로만 옅어진다 — 흑백으로 찍어도 순서가 남는다
방법 더 깊이

색표도 자다 — 무지개가 만드는 가짜 경계

열지도는 값을 색으로 옮깁니다. 그러니 색표 자체가 하나의 자입니다. 오래 쓰인 무지개 색표(jet) 는 값이 커질수록 파랑 → 청록 → 노랑 → 빨강으로 갑니다. 그런데 사람 눈이 느끼는 밝기는 이 순서대로 오르지 않습니다 — 가운데(노랑)에서 가장 밝아졌다가 다시 어두워집니다. 그래서 데이터에 없는 경계선이 보이고, 어두운 두 끝(파랑·빨강)이 비슷한 무게로 읽힙니다.

matplotlib 은 2017년(2.0판)에 기본 색표를 viridis 로 바꿨습니다. viridis 는 밝기가 처음부터 끝까지 한 방향으로만 오릅니다. 그래서 흑백으로 인쇄해도 순서가 남고, 색을 잘 구별하지 못하는 사람에게도 크기가 읽힙니다. 이 교과서의 열지도가 청록 한 색만 쓰는 까닭도 같습니다 — 한 방향으로만 진해지는 자가 가장 덜 속입니다.

도해: 두 색표의 밝기(CIE L*)를 값 0→1 에 따라 그렸다. 21개 지점의 색을 sRGB 에서 상대휘도로 바꾼 뒤 L* 로 계산했다 (matplotlib 3.10 의 jet·viridis). 아래 띠는 같은 밝기만 남겨 진하기로 그린 것이다.

기준 달을 바꾸면 무엇이 달라지나따릉이 2024 달마다 대여 건수 — 같은 자료, 기준만 바꿔 지수로굵은 선 1월 = 100 · 점선 7월 = 10001002003001월 = 1007월 = 1001월4월7월10월12월그대로인 것 — 달과 달의 비6월 ÷ 1월 = 2.45 (1월 기준) = 2.45 (7월 기준)달라지는 것 — 100 이 서는 자리6월 지수는 245 에서 130 으로 바뀐다
생활

“물가가 3% 올랐다”는 말 뒤에 있는 기준 연도

뉴스의 물가 이야기는 소비자물가지수로 합니다. 우리나라 통계청은 2020년을 100 으로 놓고 그 뒤의 물가를 그 배로 적습니다(기준 연도는 다섯 해마다 바꿉니다). “물가가 3% 올랐다”는 말은 보통 1년 전 같은 달과 견준 값이지, 지수 숫자 자체가 아닙니다 — 지수가 110 이라면 그것은 2020년보다 10% 비싸다는 뜻입니다.

기준 연도를 바꾸면 무엇이 달라질까요? 100 이 서는 자리와 눈금의 높이가 달라집니다. 그러나 두 시점의 비는 그대로입니다 — 오늘 배운 지수의 성질 그대로, 기준을 바꾸는 일은 열 전체에 같은 배율을 곱하는 늘이기일 뿐이기 때문입니다. 그래서 지수 판은 봉인 칩 다섯 개(열마다 기준 값)면 원래 표로 되돌아갑니다.

도해: 따릉이 2024 월별 대여 건수를 1월 기준(굵은 선)과 7월 기준(점선) 두 지수로 그렸다. 6월 지수는 245 에서 130 으로 바뀌지만 6월 ÷ 1월 의 비는 2.45 로 같다. 숫자는 서울시 따릉이 2024 대여 자료 ../data/bike_daily_2024.csv 에서 계산했다. · 기준 연도 제도: 통계청 소비자물가조사