단원 홈

Ⅲ. 데이터 모델링과 평가4차시

요약 숫자가 같으면
같은 데이터일까

잔차를 읽어야 하는 까닭

평균도, 상관계수도, 회귀 직선의 기울기와 절편도 똑같은 네 데이터가 있습니다. 도구는 네 데이터 모두에 경고 한 줄 없이 같은 직선을 맞춥니다. 그렇다면 그 넷은 같은 데이터일까요 — 그리고 3차시에 세운 우리 따릉이 직선은 어디서 틀리고 있을까요?

  • [12데과03-02]
  • 50분네 정거장
  • 되짚는 도구LinearRegression · matplotlib
  • 자료앤스컴 44값 · 따릉이 353일
Ⅲ 단원 지도4 / 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. 개념에서

    요약 숫자(평균 · r · R² · 기울기)가 말하지 않는 것을 들고, 잔차의 무늬로 '직선이라는 모양 가정'을 검사할 수 있다.

  2. 손으로

    LinearRegression 의 잔차를 구해 부호열과 구간별 잔차 평균을 읽고, 직선이 체계적으로 틀리는 기온대를 짚을 수 있다.

  3. 확인에서

    이 직선을 쓰면 안 되는 자리(틀리는 기온대 · 날 수가 적은 구간 · 관측 범위 밖)를 근거와 함께 적을 수 있다.

1
여는 장면 · 5분

보고서 넉 장이 왔는데, 숫자가 한 글자도 다르지 않다

어느 연구실에 조사 보고서가 넉 장 들어왔습니다. 네 팀이 각각 11번씩 측정해서 x 와 y 를 적어 왔고, 팀마다 요약 숫자를 계산해 두었습니다. 받아 든 사람이 넉 장을 나란히 놓고 보니 — 평균도, 상관계수도, 회귀 직선의 기울기와 절편도 소수 셋째 자리까지 같았습니다.

3차시에서 우리는 LinearRegression 이 손으로 푼 공식과 같은 직선을 낸다는 것을 확인했습니다. 그 도구에 네 데이터를 차례로 넣어 보면 어떨까요? 넷 모두 경고 한 줄 없이 같은 직선을 내놓습니다. 도구는 "이 데이터에는 직선이 맞지 않습니다" 같은 말을 하지 않습니다 — 모양을 묻지 않기 때문입니다.

그러니 물음은 이렇게 됩니다. 이 넉 장은 같은 데이터인가? 그리고 같지 않다면, 요약 숫자가 아니라 무엇을 보아야 그것을 알 수 있나?

표 1넉 장의 요약표 — 모양 칸은 가려 두었다Ⅰ · Ⅱ · Ⅲ · Ⅳ · 각 11점
데이터x 평균y 평균기울기절편rR²모양
앤스컴 Ⅰ9.007.500.5003.0000.8160.667가려 둠
앤스컴 Ⅱ9.007.500.5003.0010.8160.666가려 둠
앤스컴 Ⅲ9.007.500.5003.0020.8160.666가려 둠
앤스컴 Ⅳ9.007.500.5003.0020.8170.667가려 둠

네 줄에서 다른 자리는 절편의 소수 셋째 자리와 r 의 소수 셋째 자리뿐입니다 (3.000 ~ 3.002 · 0.816 ~ 0.817). 반올림해서 적었다면 네 줄은 글자 하나 다르지 않았을 것입니다. 자료: F. J. Anscombe(1973), Graphs in Statistical Analysis, The American Statistician 27(1) 의 표 — 브라우저에서 LinearRegression 으로 다시 맞춘 값(원장 실측)

먼저 예측

그림은 아직 가려 둡니다. 요약 숫자만 보고 네 데이터가 같은 모양인지 한 문장으로 적어 보세요. 그리고 아래 빈 축 넉 장에 네 데이터의 모양을 공책에 한 장씩 그려 두세요 — 주황 점선이 네 데이터가 함께 가진 직선(y = 3.00 + 0.500 x)입니다. 3정거장 미션 ①에서 여러분의 그림과 실제를 맞대어 봅니다.

앤스컴 Ⅰ
5101520510y = 3.00 + 0.500 xx →
앤스컴 Ⅱ
5101520510y = 3.00 + 0.500 xx →
앤스컴 Ⅲ
5101520510y = 3.00 + 0.500 xx →
앤스컴 Ⅳ
5101520510y = 3.00 + 0.500 xx →
체크포인트 1

요약 숫자가 같다는 사실을 손에 쥐었고, 모양에 대한 내 예측을 적어 두었다.

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

요약 숫자가 말하지 않는 것을, 잔차가 말한다

2-1도구는 모양을 묻지 않는다

LinearRegression().fit(x, y) 는 x 와 y 를 받아 오차 제곱합이 가장 작은 직선을 찾습니다. 3차시에서 우리가 손으로 푼 그 공식입니다. 이 계산에는 "이 점들이 직선을 이루는가"를 묻는 단계가 처음부터 들어 있지 않습니다. 그래서 휜 데이터를 넣어도, 한 점이 나머지를 끌고 있는 데이터를 넣어도 도구는 조용히 직선 하나를 돌려줍니다. 경고는 0줄입니다.

이것이 3차시의 '도구가 대신해 주는 것과 숨기는 것' 이야기의 뒷면입니다. 도구는 계산을 대신해 주지만, 그 계산이 맞는 자리인지 묻는 일은 대신해 주지 않습니다. 그 일을 하는 사람이 분석가이고, 그때 쓰는 재료가 잔차입니다.

낱말잔차 = 실제 값 − 직선이 내놓은 값. 잔차가 + 면 그날(그 점)은 직선보다 위에 있고, − 면 아래에 있습니다. 잔차 하나하나는 '얼마나 틀렸나'를 말하고, 잔차를 차례대로 늘어놓은 무늬는 '어디서 틀렸나'를 말합니다.

2-2잔차의 부호를 x 순서대로 늘어놓으면

잔차의 크기를 잠시 접어 두고 부호만 봅니다. x 가 작은 점부터 큰 점까지 차례로 세워 + 인지 − 인지 적으면, 점 11개가 + 와 − 열한 칸이 됩니다. 직선이 맞는 모양이라면 + 와 − 가 무늬 없이 섞여 있어야 합니다. 한쪽으로 몰려 있다면, 그 자리에서 직선이 체계적으로 틀린다는 뜻입니다.

그림 1같은 직선, 네 가지 잔차 무늬x 가 작은 점부터 차례로 · ▲ 는 +, ▼ 는 −
앤스컴 Ⅰ덩어리 7최대 잔차 1.92무늬 없이 섞였다 — 직선이 맞다앤스컴 Ⅱ덩어리 3최대 잔차 1.90가운데는 위, 양 끝은 아래 — 휘었다왼쪽 ← x 가 작은 점 · x 가 큰 점 → 오른쪽▲ + (직선보다 크다) ▼ −앤스컴 Ⅲ덩어리 4최대 잔차 3.24한 덩어리가 통째로 몰렸다 — 한 점이 끌었다앤스컴 Ⅳ덩어리 5최대 잔차 1.84부호는 섞였는데 x 가 거의 한 값 — 한 점이 만들었다왼쪽 ← x 가 작은 점 · x 가 큰 점 → 오른쪽▲ + (직선보다 크다) ▼ −앤스컴 Ⅰ덩어리 7최대 잔차 1.92무늬 없이 섞였다 — 직선이 맞다앤스컴 Ⅱ덩어리 3최대 잔차 1.90가운데는 위, 양 끝은 아래 — 휘었다왼쪽 ← x 가 작은 점 · x 가 큰 점 → 오른쪽▲ + (직선보다 크다) ▼ −앤스컴 Ⅲ덩어리 4최대 잔차 3.24한 덩어리가 통째로 몰렸다 — 한 점이 끌었다앤스컴 Ⅳ덩어리 5최대 잔차 1.84부호는 섞였는데 x 가 거의 한 값 — 한 점이 만들었다왼쪽 ← x 가 작은 점 · x 가 큰 점 → 오른쪽▲ + (직선보다 크다) ▼ −

네 줄의 요약 숫자는 같은데 무늬는 넷이 다 다릅니다. Ⅱ 는 가운데가 통째로 +, 양 끝이 −(덩어리 3) — 관계가 휘었다는 뜻입니다. Ⅲ 은 − 가 여섯 칸 내리 이어지고(덩어리 4) 가장 큰 잔차가 3.24 로 유난히 큽니다 — 한 점이 직선을 끌어당긴 자국입니다. 자료: 앤스컴 네 데이터 44값 — 코드 ① [A-2]가 찍는 부호열과 같다(원장 실측)

덩어리는 같은 부호가 이어진 토막의 수입니다. Ⅰ 의 −++−−++−+−− 는 일곱 덩어리라 부호가 자주 바뀝니다 — 무늬가 없다는 뜻이고, 직선이 맞습니다. Ⅱ 의 −−+++++++−− 는 세 덩어리뿐이라 한눈에 규칙이 보입니다.

다만 반례가 하나 있습니다. 잔차가 작다고 좋은 모델인 것은 아닙니다. Ⅳ 는 가장 큰 잔차가 1.84 로 넷 가운데 가장 작지만, x 가 거의 한 값(8)이고 멀리 떨어진 점 하나(x = 19)가 기울기를 혼자 정하고 있습니다. 그 점을 빼면 나머지 10점은 x 가 모두 같아서 기울기를 정할 수조차 없습니다(3정거장 미션 ①의 도전에서 직접 확인합니다). 이렇게 결론 전체를 혼자 만드는 점을 영향점이라 부릅니다.

2-3우리 따릉이 직선은 어디서 체계적으로 틀리나

앤스컴은 11점짜리 장난감입니다. 같은 검사를 3차시에 세운 우리 직선에 해 봅시다 — 운영한 353일에 맞춘 대여 = 9,324 + 638.9 × 기온 입니다. 353개의 잔차를 하나씩 읽을 수는 없으니, 기온을 5°C 구간으로 잘라 구간마다 잔차의 평균을 냅니다(pd.cut 은 Ⅱ-10 에서 쓴 그 도구입니다).

직선이 맞는 모양이라면 구간마다의 잔차 평균이 0 근처에서 오르내려야 합니다. 그런데 표 2 를 보면 부호가 −10°C · 5°C · 25°C 근처에서 세 번 바뀌고, 가장 더운 구간(30 ~ 35°C)의 24일은 잔차 평균이 −7,293대입니다 — 그 24일 가운데 직선 위에 있는 날은 하루도 없습니다.

Ⅱ-10 에서 구간 중앙값으로 '눈으로 보았던' 꺾임이, 직선을 세우고 나니 직선이 체계적으로 틀리는 자리라는 숫자가 되었습니다. 이것이 '직선'이라는 모양 가정이 틀린 자리이고, 5차시에서 모양을 미리 정하지 않는 기계학습 회귀를 불러오는 까닭입니다.

규칙구간별 잔차 평균을 읽을 때는 날 수를 함께 읽는다. −15 ~ −10°C 구간은 8일뿐이라 그 평균 +1,810 대는 믿고 쓸 숫자가 아니다.

따릉이 353일구간별 잔차 평균
구간마다 잔차 평균청록 + · 주황 −−15°C35°C
부호가 바뀌는 곳 3가장 큰 음수 −7,293

자료: 막대 높이는 코드 ③이 찍는 값

표 2기온 5°C 구간마다 잔차 평균과 날 수대여 = 9,324 + 638.9 × 기온 · 운영한 353일
기온 구간(°C)날 수잔차 평균(대)직선 위읽는 말
−15 ~ −108+1,8108 / 8증거 부족
−10 ~ −517−3178 / 17거의 0 — 맞다
−5 ~ 036−2,1295 / 36부풀려 맞힌다
0 ~ 546−2,8766 / 46부풀려 맞힌다
5 ~ 1040+43922 / 40부호가 바뀐다
10 ~ 1542+3,30131 / 42모자라게 맞힌다
15 ~ 2043+2,40129 / 43모자라게 맞힌다
20 ~ 2568+2,15652 / 68모자라게 맞힌다
25 ~ 3029−1,07515 / 29다시 바뀐다
30 ~ 3524−7,2930 / 24쓰면 안 되는 기온대

'직선 위'는 그 구간에서 잔차가 + 였던 날(직선보다 많이 빌린 날) 수입니다. 30 ~ 35°C 의 24일은 0일 — 하루도 예외 없이 직선보다 적게 빌렸습니다. 자료: UCI Seoul Bike Sharing Demand(CC BY 4.0 · DOI 10.24432/C5F62R)를 하루 단위로 구운 353일 — 코드 ③의 출력과 같다

Ⅱ-10 에서 가져옴기온을 구간으로 자르는 pd.cut(값, bins=경계) 은 Ⅱ-10 에서 구간별 중앙값을 볼 때 쓴 도구입니다. 그때는 대여 건수를 구간마다 모았고, 오늘은 잔차를 구간마다 모읍니다.

2-4잔차 평균이 0 인 직선을, 기온만 보고 이길 수 있을까

최소제곱 직선에는 좋은 성질이 하나 있습니다. 잔차의 평균이 정확히 0입니다. 우리 직선도 그렇습니다 — 353일 가운데 직선 위가 176일, 아래가 177일로 거의 반반입니다. 그러면 이런 내기를 걸어 볼 수 있습니다. 날짜도 요일도 날씨도 보지 않고 기온 하나만 보고, 그날이 직선 위일지 아래일지 맞히는 내기입니다.

직선이 모양까지 맞는 모델이었다면 이 내기는 동전 던지기여야 합니다 — 50% 언저리. 기온을 알아도 위인지 아래인지에 대한 정보가 없어야 맞기 때문입니다. 그런데 이길 수 있다면, 그것은 기온 안에 직선이 다 못 쓴 무늬가 남아 있다는 증거입니다. 아래 실험실에서 직접 걸어 봅니다.

시뮬레이터

직선 이기기

기온만 보고 위냐 아래냐 — 잔차 평균이 0 인 직선을 이길 수 있을까

  1. 1맨손 6판 — 기온 카드 여섯에 ▲ / ▼ 로 건다
  2. 2몇 % 이길지 예측을 잠근다
  3. 3기온 띠를 붓으로 칠하고 [353일에 걸기]
  4. 4[잔차 섞기] 로 무늬가 없는 세계와 견준다
판
내 예측 — 고르면 잠긴다
붓 — 기온 띠를 쓸어 칠한다
한꺼번에 칠하기
걸기
무엇을 볼까
곡선 자 — 손잡이 셋을 끌어 모양을 정한다
봉인
맨손 6판 — 기온 카드 여섯카드의 ▲ 또는 ▼ 를 눌러 걸어 보세요

이겼다 = 그 기온 칸에 칠한 부호(▲ 위 · ▼ 아래)가 그날 잔차의 부호와 같다 · 점수 = 이긴 날 ÷ 353일 · 안 칠한 칸의 날은 걸지 않은 것이라 못 이긴다

조각 = 같은 색으로 이어진 기온 구간 하나 · 증거 부족 = 그 조각 안의 날이 10일이 안 되면 빗금 — 몇 날로 정한 규칙은 믿지 않는다

이긴 날—%
맨손 6판0/6
내 예측—
조각0
증거 부족 조각0
섞은 잔차 300벌—
도전 1

동전을 넘겨라 ★ — 조각 넷 이내로 칠해 60% 를 넘겨 보세요. 어느 기온에서 색을 바꿔야 할까요?

도전 2

무늬 없는 세계와 견주어라 — [잔차 섞기] 를 켜고, 내 점수가 섞은 300벌의 95% 선보다 오른쪽에 서는지 보세요.

도전 3

75% 를 조각 넷으로 ★★★ — 75% 를 넘기되 조각은 넷 이내, 증거 부족 조각은 0개여야 합니다.

자료: 따릉이 353일(기온 · 대여)과 앤스컴 44값을 쪽 안에 실었다 — 3정거장 코드 ③ · ④ 가 읽는 ../data/seoul_bike_daily.csv · ../data/anscombe.csv 와 같은 값이다. [잔차 섞기] 의 300벌은 원장이 파이썬으로 구운 것(씨앗 2026)을 그대로 실어, 누가 눌러도 같은 숫자가 나온다.

판에서 보았듯이 기온만 보고도 직선을 이깁니다. 5°C 구간의 잔차 평균 부호로 걸면 73.7%, 경계를 −8 · 5 · 28°C 로 옮겨 조각 넷으로 만들면 76.8% 입니다. 반면 잔차를 날짜끼리 섞어 기온과의 관계만 지운 세계에서는 아무리 잘 칠해도 평균 53.0% — 300벌 가운데 95% 가 55.3% 아래입니다. 이 차이가 '직선이 체계적으로 틀린다'는 증거입니다.

그런데 잘게 쪼갠다고 좋아지지는 않습니다. 판의 [1°C 마다] 단추로 잘게 칠하면 점수가 78.2% 로 1.4%p 오릅니다. 그 대가로 날이 10일도 안 되는 조각이 생기고, 무늬가 없는 세계의 점수(섞은 잔차 300벌의 평균)까지 53.0% 에서 54.6% 로 함께 올라갑니다. 오른 몫의 일부는 무늬를 찾은 것이 아니라 그 몇 날의 우연을 외운 것이라는 뜻입니다. 그래서 판은 그런 조각에 '증거 부족' 빗금을 치고, ★★★ 판정에서 빼 버립니다.

2-5관측 범위 밖 — 직선은 계속 뻗지만 데이터는 거기를 모른다

마지막 위험은 바깥입니다. 우리 353일의 하루 평균 기온은 −14.7°C 에서 33.7°C 사이였습니다. 직선은 이 구간 밖으로도 얼마든지 뻗어 나가지만, 데이터는 그 밖에서 무슨 일이 일어나는지 한 번도 본 적이 없습니다. 관측 범위 밖의 예측을 외삽이라 부릅니다.

가장 추웠던 날 · 실제와 직선
2,931실제 대여(대)
vs
−68직선의 답(대)
−14.7°C 였던 날 · 대여(대)2,931실제−68직선

관측 안인데도 끝에서는 음수가 나온다 — 자전거를 −68대 빌릴 수는 없다.

관측한 기온과 그 바깥
33.7관측 최고(°C)
→
34,04838.7°C 에서 직선의 답(대)
-14.733.7관측한 353일38.7°C 는 이 밖이다관측한 기온(°C)

5°C 만 더 더워도 직선은 34,048대라 답한다 — 그 기온의 날은 자료에 하루도 없다.

자료: 코드 ④가 찍는 값 — −14.7°C 에서 −68대, 38.7°C(관측 최고 + 5°C)에서 34,048대.

더 나쁜 것은 이미 알고 있는 사실과 어긋난다는 점입니다. 우리는 방금 더운 끝(30 ~ 35°C)에서 잔차가 −7,293대로 크게 기울었다는 것을 보았습니다. 그 기울기가 그대로 이어진다면 38.7°C 의 실제 대여는 34,048대보다 훨씬 적을 것입니다. 그런데 직선은 그 사실을 모른 채 가장 크게 부풀린 답을 내놓습니다. 외삽이 위험한 까닭은 '모르기 때문'만이 아니라, 아는 것마저 무시하기 때문입니다.

규칙모델을 보고할 때 관측 범위를 함께 적는다. 그 밖의 값을 물어 오면 답 대신 "자료가 본 적 없는 구간"이라고 답한다.

직선을 세운 뒤 묻는 네 가지 — 이 차례로

  1. 무늬잔차 부호가 x 를 따라 섞여 있나 — 한쪽으로 몰린 덩어리가 있나
  2. 치우침구간마다 잔차 평균이 0 근처인가 — 어느 구간에서 부호가 바뀌나(날 수도 함께)
  3. 영향점한 점을 빼면 결론이 바뀌나 — 특히 x 가 멀리 떨어진 점
  4. 바깥묻는 값이 관측 범위 안인가 — 밖이면 답하지 않는다

그래서 'R² 가 높으니 좋은 모델이다'도 틀릴 수 있습니다. 앤스컴 넷은 R² 가 모두 0.666 ~ 0.667 로 같지만 넷 가운데 직선이 맞는 것은 Ⅰ 하나뿐입니다. R² 는 모양이 맞는지를 알려 주지 않습니다.

체크포인트 2

잔차 무늬 · 구간별 치우침 · 영향점 · 관측 범위 — 직선을 세운 뒤 물을 네 가지를 손에 넣었다. 이제 직접 구해 본다.

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

잔차를 직접 꺼내 네 데이터와 우리 직선을 검사한다

오늘 쓰는 도구는 모두 전에 쓰던 것입니다 — LinearRegression(Ⅲ-3) · matplotlib(Ⅱ-6) · pd.cut(Ⅱ-10). 새 도구 대신 새 물음을 배웁니다. 네 칸은 저마다 혼자 돌아가니, 어느 칸부터 눌러도 됩니다. 처음 실행은 몇 초 멈춥니다 — 고장이 아니라 scikit-learn 과 matplotlib 을 쪽마다 한 번 준비하는 중이에요.

1

네 데이터에 직선을 맞추고, 잔차의 부호를 읽는다

10분

먼저 3분. 여는 장면의 빈 축 넉 장에 그린 그림을 꺼내 놓고, 장마다 모양 이름을 한 낱말로 적어 두세요 (예: '흩어진 직선', '휜 곡선'). 그림은 미션 ②에서 엽니다. 그리고 한 가지만 더 짐작해 두세요 — 휜 데이터를 넣으면 도구가 경고를 낼까요?

기본 빈칸 ①에 잔차를 구하는 식을 채우고 ▶ 실행하세요. 잔차 = 실제 − 직선이 내놓은 값 입니다. 직선이 내놓은 값은 m.predict(d[["x"]]) 로 받습니다. 앞부분 [A-1]은 채워져 있으니 경고가 몇 줄 나오는지부터 보세요.

도전 코드 맨 아래에 세 줄을 덧붙여, Ⅳ 에서 x = 19 인 점을 빼고 다시 맞춰 보세요. 기울기 0.0 · 절편 7.001 — '아무 관계 없음'이 되는데도 경고는 여전히 0줄입니다. 점을 맞추기 전에 빼야 한다는 것에 주의하세요.

# 도전 — Ⅳ 에서 x 가 19 인 점을 빼고 맞추면?
d = 넷[(넷["묶음"] == "Ⅳ") & (넷["x"] < 19)]
m = LinearRegression().fit(d[["x"]], d["y"])
print("Ⅳ 에서 19 를 빼면"
      f" 기울기 {m.coef_[0]:.1f}"
      f" · 절편 {m.intercept_:.3f} · 점 {len(d)}개")

탐구 Ⅰ 의 부호열은 덩어리가 7입니다. 이 부호열을 이기려면(+ 인 칸은 ▲, − 인 칸은 ▼ 로 맞히려면) 이어진 토막 셋으로는 11칸 가운데 8칸까지밖에 맞히지 못합니다. 그런데 같은 부호 열한 개를 마구 뒤섞은 2,000벌을 같은 방법으로 재면 평균 9.0칸입니다. Ⅰ 이 뒤섞은 것보다도 낮다는 것은 무슨 뜻일까요 — '무늬가 없다'는 무엇으로 판정하는 걸까요?

Ⅱ 의 부호열이 라는 것은 관계가 는 뜻이고, 그래서 직선 대신 가 맞다. Ⅳ 에서 한 점을 빼면 기울기를 정할 수 없는 까닭은 이기 때문이다.

확인 문제 1 · 2 에 적어 제출 →
2

이제 그린다 — 넉 장의 그림을 내 예측과 맞댄다

3분

공책에 그린 넉 장을 옆에 펼쳐 두세요. 몇 장이 맞았을까요? 그림을 열기 전에 숫자 하나를 정해 두세요 — 0장 · 1장 · 2장 · 3장 · 4장 가운데.

기본 코드 ②는 채워져 있습니다. 그대로 ▶ 실행해 네 칸을 여세요. 네 칸이 sharex=True, sharey=True 로 같은 눈금을 쓰는 것에 눈여겨보세요 — 눈금이 다르면 모양을 견줄 수 없습니다.

도전 끝 = pd.DataFrame({"x": [3, 20]}) 의 20 을 40 으로 바꿔 보세요. 직선이 화면 밖까지 뻗어 나가고 점은 그대로입니다 — 2-5 에서 본 외삽이 그림에서는 이렇게 보입니다.

탐구 네 칸 가운데 Ⅲ 과 Ⅳ 를 견주어 보세요. 둘 다 점 하나가 유난히 떨어져 있는데, 그 한 점이 하는 일이 서로 다릅니다. 무엇이 다른가요?

네 데이터의 R² 는 모두 인데, 그 가운데 직선이 맞는 것은 하나뿐이다. 그러므로 'R² 가 높다'는 말은 를 뜻하지 않는다.

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

우리 직선의 잔차를 기온 구간으로 모은다

5분

3차시의 직선을 353일에 다시 맞추고, 잔차를 5°C 구간으로 모읍니다. 실행 전에 하나만 짐작해 두세요 — 직선이 가장 크게 '부풀려' 맞히는 기온대는 어디일까요? (부풀린다 = 실제보다 많다고 답한다 = 잔차가 크게 −)

기본 빈칸 ②에 range 의 인자 셋을 채웁니다 — −15 에서 시작해 40 앞까지, 5 씩. 채우면 [-15, -10, …, 35, 40] 이라는 구간 경계가 만들어집니다.

도전 range(-15, 41, 5) 를 range(-15, 41, 1) 로 바꿔 보세요. 구간이 1°C 로 잘게 쪼개지면 표가 길어지고 날 수가 한 자리인 구간이 줄줄이 나옵니다. 몇 개나 되나요? 그런 구간의 잔차 평균을 보고할 수 있을까요?

탐구 잔차 그림의 점들이 0 선 위아래로 고르게 흩어져 있지 않고 활처럼 휘어 있습니다. 2-2 에서 본 앤스컴 Ⅱ 의 부호열과 같은 이야기인지, 다른 이야기인지 말해 보세요.

이 직선을 쓰면 안 되는 기온대는 이고, 그렇게 말하는 근거는 다. 한편 구간은 잔차 평균이 크지만 라서 근거로 쓰지 않는다.

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

기온만 보고 직선을 이기고, 범위 밖에 물어본다

2분

실험실에서 손으로 걸었던 내기를 이번엔 코드가 한꺼번에 겁니다. 잔차 평균 0 · 위 176일 · 아래 177일 인 직선을 기온만 보고 몇 % 이길 수 있을까요? 실험실에서 잠갔던 내 예측을 떠올려 두세요.

기본 코드 ④는 채워져 있습니다. 그대로 ▶ 실행하세요. 세 덩어리를 차례로 읽습니다 — ① 5°C 구간 부호로 건 성적 ② 잔차를 섞은 대조군 ③ 관측 범위 끝과 그 밖의 예측.

도전 경계 = list(range(-15, 41, 5)) 를 경계 = [-20, -8, 5, 28, 40] 으로 바꾸세요. 실험실에서 조각 넷으로 칠했을 때와 같은 76.8% 가 나옵니다 — 조각 수는 그대로인데 경계를 옮긴 것만으로 3.1%p 가 올랐습니다.

탐구 직선을 '이긴다'는 것이 왜 직선이 체계적으로 틀린다는 증거가 되나요? 그리고 섞은 잔차의 50.7% 는 무엇의 대조군인가요 — 무엇을 지우고 무엇을 남긴 세계인가요?

기온만 보고 를 맞혔는데 잔차를 섞으면 로 떨어진다. 그러므로 기온 안에는 가 남아 있다. 38.7°C 의 답 34,048대를 믿으면 안 되는 까닭은 다.

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

잔차를 직접 꺼내 부호열 · 구간별 평균 · 걸기 · 범위 밖까지 네 가지 검사를 모두 돌렸다.

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

오늘의 탐험 일지

먼저 2분, 다 함께. 위 실험실의 [앤스컴] 탭을 열어 보세요. 요약 램프 다섯(x 평균 · y 평균 · 기울기 · 절편 · r)이 켜져 있는 채로, 곡선 자를 아무 모양으로나 놓고 [봉인] 을 누릅니다. 점들이 자에 달라붙어 모양이 바뀌는 동안 램프 다섯은 한 칸도 흔들리지 않습니다. 요약 숫자를 고정한 채로 모양은 얼마든지 만들 수 있다는 뜻입니다 — 앤스컴 넷은 그 무한한 가능성 가운데 넷일 뿐이에요.

  1. 찾은 것

    평균 · r · R² · 기울기가 모두 같아도 모양은 넷이 다 달랐다. 도구는 넷 모두에 경고 0줄로 같은 직선을 맞춘다.

  2. 도구의 한계

    요약 숫자는 모양을 말하지 않는다. 모양을 묻는 재료는 잔차다 — 부호의 무늬, 구간별 평균, 한 점을 뺐을 때의 변화.

  3. 보고의 규칙

    회귀 결과에는 잔차 그림 · 구간별 날 수 · 관측 범위 셋을 함께 적는다. 범위 밖의 값은 답하지 않는다.

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

1. 앤스컴 Ⅱ 의 잔차 부호를 x 가 작은 쪽부터 늘어놓으니 −−+++++++−− 였다. 이 무늬가 무엇을 말하는지 쓰고, 이 데이터에는 어떤 모양의 모델이 더 맞을지 쓰시오.
📖 모범 답안

가운데 점들은 모두 직선 위(+), 양 끝의 점들은 모두 직선 아래(−)에 있다. 잔차가 x 를 따라 한 방향으로 몰려 있으니 무늬가 있는 것이고, 관계가 위로 볼록하게 휘었다는 뜻이다. 덩어리가 셋뿐이라는 것이 그 몰림을 숫자로 말해 준다(Ⅰ 은 7).

직선 대신 곡선(2차식)을 쓰거나, 구간을 나눠 구간마다 다른 직선을 쓰는 구간별 모델이 맞다. 어느 쪽이든 고친 뒤에는 잔차 부호를 다시 보아 무늬가 사라졌는지 확인한다.

2. 앤스컴 Ⅳ 에서 x = 19 인 점 하나를 빼면 기울기는 어떻게 되는가? 그리고 이 점을 '이상치라 지운다' / '그대로 둔다' 가운데 무엇을 택할지, 근거와 함께 쓰시오.
📖 모범 답안

기울기가 0.0(절편 7.001)이 된다. 남은 10점은 x 가 모두 8이라 x 가 변할 때 y 가 어떻게 변하는지를 볼 재료가 없고, 그래서 기울기를 정할 수가 없다. 바꿔 말하면 원래의 기울기 0.500 은 그 한 점이 혼자 만든 값이다 — 영향점이다.

선택은 둘 중 하나를 고르는 일이 아니다. 먼저 그 점이 측정·입력 오류인지 확인한다. 오류라면 지우고 지웠다고 적는다. 오류가 아니라면 그대로 두되, "이 결론은 점 하나에 달려 있다"는 사실을 함께 보고한다. 가장 정직한 보고는 두 경우의 결론을 모두 적는 것이다 — 넣으면 기울기 0.500, 빼면 기울기를 정할 수 없음. 어느 쪽이든 지우고 말하지 않는 것만은 하지 않는다.

3. 따릉이 직선의 잔차 평균이 30 ~ 35°C 구간(24일)에서 −7,293대였고, 그 24일 중 직선 위에 있던 날은 0일이었다. 이 사실로 할 수 있는 말 둘과 할 수 없는 말 하나를 아래 표에 적으시오. 그리고 같은 표의 −15 ~ −10°C 구간(잔차 평균 +1,810대)을 근거로 쓰면 안 되는 까닭도 쓰시오.
칸내용
할 수 있는 말 ①
할 수 있는 말 ②
할 수 없는 말
📖 모범 답안

할 수 있는 말 ① 하루 평균 30°C 가 넘는 날에는 이 직선이 대여를 부풀려 예측한다 — 24일 모두 실제가 직선보다 적었고, 평균 7,293대 적었다.

할 수 있는 말 ② 기온과 대여의 관계는 어느 기온 뒤로 꺾인다. 직선이라는 모양 가정이 더운 끝에서 맞지 않는다.

할 수 없는 말 "더위가 대여를 줄인다"는 인과. 더운 날은 장마·방학·휴가와 겹치고, 그날의 습도·강수도 함께 움직인다. 이 표만으로는 무엇이 원인인지 가를 수 없다.

−15 ~ −10°C 구간은 8일뿐이다. 며칠 안 되는 날의 평균은 그해의 우연(예: 그중 하루가 마침 공휴일)에 크게 흔들리므로, 잔차 평균이 +1,810대라 해도 "추우면 직선이 모자라게 맞힌다"는 근거로 쓸 수 없다. 구간별 잔차 평균은 날 수와 함께 읽는다.

4. "R² 가 0.8 이나 되니 이 모델은 좋다"는 주장을 앤스컴 데이터로 반박하시오. 반박한 뒤, 그러면 모델이 좋은지 알아보려면 무엇을 함께 보아야 하는지 쓰시오.
📖 모범 답안

앤스컴 네 데이터는 R² 가 모두 0.666 ~ 0.667 로 같다. 그런데 Ⅰ 만 직선이 맞고, Ⅱ 는 휘었으며, Ⅲ 은 한 점이 직선을 끌어당기고, Ⅳ 는 한 점이 기울기를 혼자 만든다. 같은 R² 아래에 좋은 모델 하나와 나쁜 모델 셋이 함께 있다 — 그러므로 R² 값 하나로는 좋은 모델인지 알 수 없다.

R² 는 'y 의 흩어짐 가운데 모델이 설명한 몫'을 재는 숫자일 뿐, 모양이 맞는지는 재지 않는다. 함께 보아야 하는 것은 잔차다 — ① 잔차 부호가 x 를 따라 무늬 없이 섞였나 ② 구간마다 잔차 평균이 0 근처인가(날 수와 함께) ③ 한 점을 빼도 결론이 그대로인가 ④ 묻는 값이 관측 범위 안인가. 우리 따릉이 직선도 이 검사에서 더운 끝이 걸렸다.

5. 관측한 가장 더운 날보다 5°C 더운 날(38.7°C)의 대여를 이 직선으로 예측하면 34,048대가 나온다. 이 값을 믿으면 안 되는 까닭을 '데이터가 본 것'으로 설명하시오. (표 2 에서 읽은 것을 근거로 함께 쓰면 좋습니다.)
📖 모범 답안

우리 자료가 본 하루 평균 기온은 −14.7 ~ 33.7°C 다. 38.7°C 인 날은 353일 가운데 하루도 없다. 직선은 관측 구간에서 찾은 경향을 그 밖으로 그냥 연장할 뿐, 그 구간에서 관계가 어떻게 되는지에 대한 근거를 하나도 가지고 있지 않다.

게다가 우리는 이미 반대 방향의 증거를 보았다. 30 ~ 35°C 의 24일은 잔차 평균이 −7,293대이고 그 가운데 직선 위에 있던 날은 0일이다. 관측 안에서도 더워질수록 직선이 점점 크게 부풀리고 있었으니, 그보다 더 더운 날의 실제 대여는 34,048대보다 훨씬 적을 가능성이 크다. 반대쪽 끝에서 직선이 −68대라는 불가능한 답을 내놓은 것도 같은 이유다.

그래서 이런 물음에는 숫자 대신 "자료가 본 적 없는 구간이라 답할 수 없다"고 답하고, 꼭 답이 필요하면 그 기온의 날을 더 모으는 것이 먼저다.

+
더 알아보기

한 점 · 바깥 · 그해 여름

앤스컴 Ⅰ 의 점 하나만 3 올렸다먹 점선 = 올리기 전 직선 · 주황 굵은 선 = 올린 뒤 직선가운데에 있는 점(x = 9)을 올리면+3 올림기울기 0.500 → 0.500 (그대로 — 절편만 올라간다)끝에 있는 점(x = 4)을 올리면+3 올림기울기 0.500 → 0.364 (-0.136)
방법 더 깊이

한 점이 직선을 끌 때 — 지렛대와 쿡의 거리

튀는 점이 모두 위험한 것은 아닙니다. 어디에 있는 점이냐가 훨씬 중요해요. 앤스컴 Ⅰ 에서 가운데에 있는 점(x = 9, 마침 x 평균과 같은 자리)을 3 만큼 올려 보면 기울기는 0.500 그대로입니다 — 직선이 위로 평행 이동할 뿐이에요. 그런데 끝에 있는 점(x = 4)을 똑같이 3 만큼 올리면 기울기가 0.500 → 0.364 로 꺾입니다. 같은 크기로 움직였는데 결과가 다른 까닭은, 끝의 점이 시소의 먼 쪽에 앉아 있기 때문입니다. 이 '먼 쪽에 앉은 정도'를 지렛대(leverage)라고 부릅니다.

그렇다면 어떤 점이 결론을 정말로 바꾸는지 어떻게 잴까요? 쿡(R. D. Cook, 1977) 의 생각은 아주 단순합니다 — 그 점을 빼고 다시 맞춰서, 모든 점에 대한 예측이 얼마나 달라졌는지 더해 보는 것입니다. 이 값을 쿡의 거리라 하고, 점마다 하나씩 나옵니다. 값이 유난히 큰 점이 있으면 "이 결론은 저 점 하나에 달려 있다"는 신호예요. 오늘 우리가 손으로 한 일 — Ⅳ 에서 한 점을 빼고 다시 맞춰 본 일 — 이 바로 쿡의 거리를 한 점에 대해 계산해 본 것입니다.

도해: 앤스컴 Ⅰ 의 11점 가운데 한 점만 3 올려 다시 맞춘 직선 두 장. 좌표와 기울기는 LinearRegression 으로 계산한 값이다. · 개념 출처: R. D. Cook, Detection of Influential Observation in Linear Regression, Technometrics 19(1), 1977

같은 발사 기록을 두 가지로 그리면① 고리가 상한 발사만 골라 그리면0123그날 기온이 있던 자리따뜻함 →기온과의 관계가 보이지 않는다② 고리가 멀쩡했던 발사까지 모두 그리면0123그날 기온이 있던 자리따뜻함 →추울수록 고리가 자주 상했다 — 관계가 드러난다세로: 그 발사에서 상한 고리 수 · 가로: 발사 당일 기온도해의 점 자리는 짜임을 보인 예시다 — 실제 기록이 아니다
현장

고른 것만 그린 그림 — 발사 전날 밤의 판단

1986년 1월, 미국의 우주왕복선 챌린저호가 발사 직후 폭발했습니다. 사고 조사에서 문제가 된 부품은 연료통 이음매를 막는 고무 고리(O-링)였고, 고리가 추울수록 잘 상한다는 것이 뒤늦게 확인되었습니다. 발사 전날 밤 회의에서 기술자들은 실제로 기온을 걱정했습니다. 그런데 그때 회의에 올라온 그림에는 고리가 상했던 발사들만 그려져 있었습니다 — 고리가 멀쩡했던 발사는 "문제가 없었으니" 빠졌던 것이지요.

고장 난 것만 모아 놓으면 관계가 보이지 않습니다. 도해 ①처럼 점들이 흩어져 보일 뿐이에요. 멀쩡했던 발사까지 모두 그려야(②) 비로소 추운 쪽에 고장이 몰려 있다는 것이 드러납니다. 여기에 하나가 더 겹쳤습니다 — 그날 아침의 기온은 그때까지 기록이 있는 어떤 발사보다도 낮았습니다. 곧 관측 범위 밖이었고, 그 구간에 대해서는 자료가 아무 말도 해 줄 수 없었습니다.

오늘 배운 두 가지가 여기서 한꺼번에 나옵니다. 어떤 점을 그림에 넣느냐가 관계를 만들거나 지운다는 것, 그리고 관측 범위 밖에서는 모델이 아니라 "모른다"가 정답일 수 있다는 것입니다.

도해: 사건의 짜임을 보인 그림이다 — 점의 자리는 실제 기록이 아니라 '고른 것만 그리면 관계가 사라진다'는 구조를 보이려고 그린 예시다.

2017년 12월 ~ 2018년 11월 · 서울 하루 평균 기온우리 자료가 덮은 한 해 — 운영한 353일-1001020302018-08-02 · 33.7°C하루 평균 30°C 를넘은 24일12월3월6월9월세로: 하루 평균 기온(°C) — 낮 최고기온이 아니다먹 점선 = 하루 평균 30°C · 주황 띠 = 그 위로 올라간 날들이 모인 자리
우리 자료

우리 353일은 어떤 한 해였나 — 2018년 여름

오늘 내내 쓴 353일은 2017년 12월 1일부터 2018년 11월 30일까지입니다. 곡선을 보면 2018년 7~8월에 봉우리가 유난히 넓고 높습니다 — 하루 평균 기온이 30°C 를 넘은 날이 24일이나 있고, 가장 높은 날은 2018년 8월 2일의 33.7°C 입니다. 표 2 에서 "직선을 쓰면 안 되는 기온대"로 걸린 그 24일이 바로 이 봉우리 안의 날들이에요.

여기서 숫자의 이름을 한 번 더 확인해 둡시다. 33.7°C 는 하루 평균 기온입니다. 뉴스에서 "오늘 서울 최고 ○○도"라고 할 때의 그 숫자는 낮 최고 기온이라, 같은 날이라도 하루 평균보다 훨씬 큽니다. 둘은 이름도 다르고 값도 다릅니다 — 같은 표 안에 섞어 놓으면 분석이 통째로 어긋나요. 우리 자료가 하루 평균을 쓰므로, 우리가 말하는 '30°C 가 넘는 날'은 하루 내내 평균이 30°C 가 넘은 날이라는 뜻입니다.

마지막으로 하나. 이 한 해는 유난한 여름을 품은 한 해입니다. 그런 한 해로 맞춘 직선을 다른 해에 그대로 쓰면, 더운 끝의 치우침이 그 해의 사정인지 기온과 대여의 관계인지 가릴 수 없습니다. 12차시에서 여러 해로 시험하며 이 물음을 다시 만납니다.

도해: 우리 자료(운영한 353일)의 하루 평균 기온을 날짜 순으로 그렸다. 30°C 를 넘은 날 24일과 최고 33.7°C 는 자료에서 직접 센 값이다. · 자료: UCI Seoul Bike Sharing Demand(CC BY 4.0 · DOI 10.24432/C5F62R)를 하루 단위로 구운 것