Devin.KR

표본과 인과 해석의 범위

75분 안팎

학습 목표

계절·요일·관측 지역에 따른 편향을 확인하고 상관을 인과로 단정하지 않는 해석 메모를 작성합니다.

개념

관찰한 것과 설명한 것을 구분합니다

비 오는 날의 평균이110대이고 비강수 평균이40대라는 표가 나왔습니다. 이 표로 말할 수 있는 것은 주어진 기간과 포함 조건에서 두 그룹의 관찰 평균이 다르다는 사실입니다. 비가 통행량을70대 늘렸다는 문장은 원인을 말합니다. 날씨 외에 요일·지역·행사·도로 공사 등이 함께 달라질 수 있으므로 평균 차이만으로 원인을 정하지 않습니다. 이 레슨에서는 수치를 다시 계산하는 데서 나아가 주장 범위를 점검합니다.

우리 입력은 학습을 위해 만든 합성 표본6행입니다. 오류가 없는 계산이라고 해서 실제 주민의 이동 행동을 대표하지는 않습니다. 강수·비강수 그룹은 각각 두 지역·날짜이고 각 지역·날씨 셀에는 한 관측뿐입니다. 통행량 합계에 많은 차량이 들어 있어도 이 비교의 n이 차량 수로 늘어나지는 않습니다. 숫자의 규모와 근거로 삼은 독립된 관측의 수를 혼동하지 않습니다.

표본 수와 독립성을 따로 점검합니다

같은 지역의 연속 날짜는 서로 비슷한 통행 패턴을 가질 수 있습니다. 같은 날 여러 지역은 휴일이나 공통 날씨의 영향을 함께 받을 수 있습니다. 지역·날짜4행이 있다고 네 개의 완전히 독립적인 실험 결과라고 가정하지 않습니다. 표본 수는 행 단위를 투명하게 보고하는 출발점이고 독립성은 수집 방식과 반복 구조를 추가로 검토할 문제입니다. 행을 복사하여 n을 늘려도 새로운 근거가 생기지 않습니다.

작은 표본은 한 관측을 빼거나 추가했을 때 요약이 크게 바뀔 수 있습니다. 비강수80대와0대의 평균40대는0대를 빼면80대가 됩니다. 이 민감도는0대가 오류라는 증거가 아니라 관측 하나의 영향이 크다는 설명입니다. 실제 관측인지 확인하고 원래 평균과 제거 가정의 결과를 함께 제시합니다. 근거 없이 불편한 관측만 삭제하면 원하는 결론에 맞춘 표를 만들게 됩니다.

요일과 강수의 구성이 겹치는지 확인합니다

기본 표본의9월1일은 화요일이고9월2일은 수요일입니다. 유효한 두 강수 관측은 첫날에, 두 비강수 관측은 둘째 날에 모여 있습니다. 그래서 강수 그룹과 요일이 이 표에서는 분리되어 비교되지 않습니다. 같은 지역의 같은 요일에서 날씨만 다른 반복 관측을 추가하면 비교를 더 구체화할 수 있습니다. 현재 차이를 강수만의 영향이라고 이름 붙이지 않고 날짜·요일 구성이 함께 다르다고 적습니다.

기간이3일뿐이므로 계절별 이동과 장기간의 날씨 변화를 담지 못합니다. 지역A와B 이외의 도로 유형이나 출퇴근 패턴도 확인하지 못했습니다. 자료를 더 모을 때는 기간 길이만 늘리는 것보다 포함 지역·요일·휴일·관측 범위를 어떻게 유지할지 정합니다. 전체 행 수가 많아도 특정 조건에만 관측이 몰리면 비교 대상의 대표성을 보장할 수 없습니다.

집단 구성은 평균의 방향도 바꿀 수 있습니다

연습용 별도 목록에서 A의 강수 통행량은100대 두 행, 비강수는80대 한 행이고 B의 강수는20대 한 행, 비강수는40대 두 행이라고 가정합니다. 전체 강수 평균은 약73.3대, 비강수는 약53.3대입니다. A 안에서는 강수 쪽이 크지만 B 안에서는 작습니다. 지역별 차이가 다른 데다 그룹의 지역 구성도 다르므로 전체 차이를 지역 모두의 현상으로 읽지 않습니다.

전체 관찰 평균을 유지하면서 두 지역을 같은 비중으로 본 표준화 예시를 계산할 수 있습니다. A와B의 강수 평균을 절반씩 가중하면60대이고 비강수도60대입니다. 이는 실제 관측의 평균이 아니라 지역을 같은 비중으로 놓는 가정의 결과입니다. 가중 방식을 바꾸어 결론이 달라질 수 있음을 보여 주지만 교란이 모두 제거됐거나 인과가 밝혀졌다는 뜻은 아닙니다.

결측 제외가 바꾸는 집합을 확인합니다

기본 정제 표에서는 A9월3일 교통·강수가 없고 B9월3일은 강수가 없습니다. 완전 사례 정책으로 두 행이 빠져4행이 남습니다. 앞 모듈의 교통만 유효한 평균78대와 지금 비교용 전체 교통 평균75대는 포함된 관측이 달라집니다. 정책의 적합성을 판단할 때 계산 가능 여부와 누락이 특정 날짜·지역·통행 수준에 몰렸는지를 함께 확인합니다.

양 지역의 강수 결측률이 각각1/3이어도 같은 원인으로 빠졌다고 말할 수 없습니다. 장비 문제인지 자료 수집 누락인지 알 수 없으면 원인 미상이라고 씁니다. 결측을0mm로 채워 데이터가 더 많아졌다는 설명은 관측을 추가한 것이 아니라 가정을 추가한 것입니다. 결측 행 원문과 제외 수를 보존하면 새로운 날씨 자료가 들어왔을 때 기존 결과를 다시 검토할 수 있습니다.

불확실성의 종류를 구체적으로 적습니다

불확실성에는 짧은 기간과 적은 관측으로 인한 변동, 특정 지역만 들어간 선택, 측정 범위의 차이, 결측 처리 가정이 있습니다. 모두를 오차라는 한 단어로 묶으면 추가로 무엇을 확인할지 결정하기 어렵습니다. 문서에서 관찰 수치 뒤에 각각 어떤 정보가 부족한지 적습니다. 예를 들어 요일 효과를 분리할 반복 자료가 없다는 문장은 추가 수집 계획으로 바로 연결됩니다.

이번 미션은 신뢰구간이나 유의확률을 억지로 계산하지 않습니다. n=1인 셀에 숫자만 붙인 구간은 관측 설계의 문제를 해결하지 못합니다. 재표집이나 검정은 독립성·교환 가능성 등 가정을 검토하고 질문에 맞춰 선택할 도구입니다. 서재의 시뮬레이션 장은 이런 가정과 계산의 역할을 더 설명합니다. 반복 계산을 늘려도 빠진 요일이나 지역을 실제로 관측한 것이 되지는 않습니다.

해석 메모를 다섯 문장으로 구성합니다

interpretation.md 첫 문장은 자료가 합성 표본이며 기간과 지역이 제한됐음을 밝힙니다. 둘째 문장은 강수 평균110대(n=2)와 비강수40대(n=2), 지역별 네 셀의 n=1을 적습니다. 셋째 문장은 결측 제외2행과 극단값 민감도 결과를 설명합니다. 넷째 문장은 강수·요일이 겹치고 인과 효과는 확인되지 않았다고 적습니다. 마지막은 추가 수집할 변수와 비교 계획을 제안합니다.

보고 문장은 관찰 결과와 다음 행동을 연결합니다. 예를 들어 이 표본에서는 강수 그룹의 평균이 더 컸으나 날짜 구성도 달라 원인을 분리하지 못했으므로 여러 주의 같은 지역·요일 자료를 수집한다는 문장입니다. 의미 없는 면책 문장을 붙이는 대신 무엇이 비교를 제한하며 무엇을 더 확인할지 씁니다. 통계의 결과를 버리지 않으면서 결론의 범위를 입력 근거 안으로 좁힙니다.

검증된 숫자와 판단 문서를 함께 제출합니다

로컬 미션의 테스트는53개이며 앞 단계41개에 새 통계12개를 추가한 것입니다. 테스트는 결측·빈 그룹·기간·강수 경계·극단값·재실행·원본 보존을 확인합니다. AssertionError가 나면 실패한 항목의 기대 n과 실제 n부터 비교합니다. PATH나HEADER는 통계 해석이 아니라 파일 계약 오류입니다. 테스트가 통과해도 사람의 해석 문장이 올바르다는 보장은 없으므로 숫자 검증과 문서 검토를 함께 수행합니다.

최종 제출은 metrics.json, metrics.csv, metrics-audit.json, interpretation.md입니다. 감사 기록은 입력6=기간 안6+기간 밖0, 기간 안6=유효4+결측 제외2를 보여 줍니다. 기본 표본에는1000대 이상 후보가 없어 민감도 평균이 원래 평균과 같습니다. 후보가 없다는 사실만으로 다른 기간에도 큰 값의 영향이 없다고 일반화하지 않습니다. 다음 시각화 모듈에는 정의와 표본 수를 포함한 이 표를 넘깁니다.

따라하기

기본 표본의 날짜와 요일 대조

from datetime import date
weekday = ['월','화','수','목','금','토','일']
for text,group in [('2026-09-01','rain'),('2026-09-02','dry')]:
    print(text, weekday[date.fromisoformat(text).weekday()], group)

실행 결과

2026-09-01 화 rain
2026-09-02 수 dry

지역 구성과 동일 가중 비교

rows = [('A','rain',100),('A','rain',100),('A','dry',80),('B','rain',20),('B','dry',40),('B','dry',40)]
for group in ['rain','dry']:
    values = [v for r,g,v in rows if g == group]
    means = []
    for region in ['A','B']:
        part = [v for r,g,v in rows if r == region and g == group]
        means.append(sum(part)/len(part))
    print(group, 'observed', f'{sum(values)/len(values):.1f}', 'equal_region', f'{sum(means)/len(means):.1f}')

실행 결과

rain observed 73.3 equal_region 60.0
dry observed 53.3 equal_region 60.0

한 관측 제거의 영향 확인

values = [80,0]
print('observed', len(values), sum(values)/len(values))
for index in range(len(values)):
    kept = values[:index] + values[index+1:]
    print('removed', values[index], 'n', len(kept), 'mean', sum(kept)/len(kept))

실행 결과

observed 2 40.0
removed 80 n 1 mean 0.0
removed 0 n 1 mean 80.0

확인 문제

실습

미션 결과로 interpretation.md를 작성합니다. 제출 기준은 ①합성 표본·기간·지역 ②강수/비강수와 지역별 평균·n ③결측 제외2행·극단값 민감도 ④요일·계절·지역 구성에 대한 구체적 한계 ⑤같은 지역/요일 반복 관측과 추가 변수 수집 계획입니다. 관찰 차이와 인과 효과를 다른 문장으로 구분합니다. 자동 통계 테스트 통과와 별도로 사람이 근거 연결을 검토합니다.

더 읽기

면접 질문

  • 평균만으로 사용자의 행동을 설명하기 어려운 사례를 설명해 주시면 됩니다.
  • 결측값을 삭제할지 채울지 판단하는 과정을 설명해 주시면 됩니다.