← 목록 · 04-4 · 상식과 반대로 나올 때 · 원문 script.md

04-4: 상식과 반대로 나올 때

rev13(건 13 FAIL 2 대응, 2026-09-05). SPEC.lock v1 — 계약·검사기 동결. 공통 조항 assets/contracts/COMMON.md(작업지시서 #3 전면 개정판 — 4박자 2·6·15·2 · §0.4-a 총량 = 발화÷250 + 조작초÷60 + chapter 전환 3장 0.5분 · §0.14 quiz 관문 = 빌더 「찍기 기대 정답률」 ≤35% · §0.16-a notes 도구 출력은 오케스트레이터가 파일로 건넴 · §0.18-a 마진 문턱 4%, 계산식 (큰값−작은값)÷큰값×100). 계약 assets/contracts/04-4.md(2026-09-05 개정) · 04-4-rev1.md(FA1~FA7) · 04-4-rev2.md(FB1~FB3) · 04-4-rev3.md(FC1~FC3) · 04-4-rev4.md(FD1~FD5) · 04-4-rev5.md(FE1~FE3) · 04-4-rev6.md(FF1) · 04-4-rev7.md(FG1~FG2) · 건 8 FAIL 1(오케스트레이터 지시, 별도 계약 파일 없음) · 04-4-rev9.md(FH1~FH3) · 04-4-rev10.md(FI1~FI3) · 04-4-rev11.md(FJ1~FJ2) · 04-4-rev12.md(FL1~FL3) · 04-4-rev13.md(FN1~FN2). 소재 assets/market.md. 데이터 assets/data/daejeon/README.md 「더러운 원천 실측」·「04-4 코호트 실측」(2026-09-05 4차 정정판 — 이상치 하한 1900은 임의값이라 폐기, 이상치=달력 불가 또는 파일 기준일 이후, 지표는 2년 내 폐업률) 절. 틀은 author-a/ep-04-3/(PASS). 앤스컴·아이스크림 근거는 assets/sources.md.

기본 정보

항목 내용
시간 25~30분 (발화 5,000~7,500자 + 시연 조작 시간 합산, §0.4·§0.4-a)
유형 시연
카테고리 04 AI 데이터 분석
선수 차시 04-3
상태 rev13

학습 목표

구성

구간 활동 목적
도입 2 코호트별 2년 내 폐업률 표(구별)와 산점도를 먼저 보여주고, 04-3 밀도 순위를 30초로 되짚기 오늘의 결과물을 먼저 확인
이론 6 비교의 정석 — 상관≠인과·잔차·코호트. 다른 예 = 아이스크림 판매량과 익사 사고(교란변수) + 앤스컴 4중주 어디서든 쓰는 일반형을 대전 없이 심는다
시연 15(+조작) ① 인허가 파일 열기·데이터 사전 ② 이상치 13종 87행(달력 검사) ③ 「대전광역시」 행 처리 ④ 코호트 섞은 첫 계산의 함정 → 정정 ⑤ 구별 2년 내 폐업률 표(마진 판정) ⑥ 산점도·잔차 ⑦ "생존율 계산해 줘" 함정 ⑧ 전공이 드러나는 곳 대전 소재에 실측 숫자로 적용, 계약 순서 그대로
정리 2 한 줄 + 다음 차시 갈고리 + 검정 질문 자막 연결

합계 25~30분(COMMON §0.1 — 4박자 선언 2·6·15·2=25, 시연 상한 총량에서 역산). 시연 구간의 무발화 조작 시간은 화면 지시에 단가표 유형(파일열기20·열고르기30·검사실행30·AI응답대기30·표작성20·없음0, 초)으로 표기한다 — 화면만 바뀌고 실제 조작이 없는 지시는 「없음」(§0.4-a 개정, FE1), 전환 비용 8초는 전환 칸에서만 센다.

연결


상세 전개

도입 (2분)

[화면: 왼쪽에 04-3에서 만든 인구 만명당 밀도 순위표(중구·서구 위 묶음, 동구는 그 사이쯤, 유성구·대덕구 아래 묶음), 오른쪽에 오늘 만들 2019 코호트 2년 내 폐업률 표와 산점도 밑그림(재구성 — 촬영 시 실제 완성본 화면으로 교체). · 조작: 없음 · 전환: 예]

(축자)

"오늘은 밀도가 좋은 것인지 나쁜 것인지를 봅니다."

(요점) 지난 차시에서 다섯 자치구를 인구 만 명당 업소 수로 나눠 순위를 매겼다. 중구·서구가 위쪽 묶음, 동구가 그 사이쯤, 유성구·대덕구가 아래쪽 묶음이었다. 그 표는 「지금 얼마나 있는가」를 답했을 뿐, 「그중 얼마나 남았는가」는 다루지 않았다. 오늘은 그 밀도 순위 옆에 다른 표를 하나 더 놓는다 — 같은 다섯 구의 2년 내 폐업률이다.

(요점) 붐비는 곳이 경쟁이 심해서 더 망하는 것 같기도 하고, 사람이 몰리는 곳이라 오히려 더 잘 버티는 것 같기도 하다. 둘 다 그럴듯하게 들린다. 어느 쪽이 맞는지는 밀도 표와 폐업률 표를 실제로 겹쳐 봐야 알 수 있다. 오늘은 짐작이 아니라 숫자로 본다.

(축자)

"이번 차시에서 정하는 것은 밀도가 좋은 것인가 나쁜 것인가입니다."

(요점) 대전 다섯 개 구의 밀도와 폐업률을 나란히 놓고, 그 관계가 정말 있는 관계인지, 우연히 같이 움직인 것인지, 그리고 어느 구가 그 관계에서 벗어나 있는지를 오늘 가려낸다. 벗어난 구가 있다면 그 자리가 오늘 제목이 말하는 「상식과 반대로 나올 때」다.

이론 (6분)

(요점, 도입) 지난 차시까지는 표 하나 안에서 분모를 고르는 법을 배웠다. 오늘은 표 두 개를 겹쳐 놓고 비교하는 법을 배운다. 두 표를 겹칠 때 흔히 걸리는 함정이 셋 있다 — 상관을 인과로 착각하는 것, 흐름에서 벗어난 자리를 놓치는 것, 출발선이 다른 것을 같은 줄에 세우는 것이다.

(축자, 핵심 정의)

"숫자 두 개가 같이 움직인다고 해서, 하나가 다른 하나를 일으킨 것은 아닙니다. 이것을 상관과 인과의 차이라고 부릅니다."

(요점) 두 숫자가 같은 방향으로 움직이는 것을 상관이라 부른다. 한쪽이 다른 쪽의 원인이라는 뜻은 아니다. 둘 다 다른 하나의 원인 때문에 같이 움직였을 수도 있다. 상관계수가 높다고 인과가 저절로 증명되지 않는다 — 인과를 말하려면 다른 원인을 하나씩 지워 나가는 별도의 절차가 필요하다.

(축자, 다른 예)

"아이스크림 판매량이 늘어나는 시기에 물놀이 익사 사고도 늘어납니다. 아이스크림이 사고를 일으키는 게 아니라, 더운 날씨가 둘 다를 늘립니다."

(요점) 이 문장을 풀어 설명한다. 아이스크림 판매량과 물놀이 익사 사고 건수는 여름에 같이 올라간다. 표만 보면 상관이 있어 보인다. 그런데 둘 사이에 직접 관계는 없다. 더운 날씨라는 다른 원인이 아이스크림도 더 팔리게 하고, 물놀이도 늘려서 사고도 함께 늘린 것이다. 이렇게 진짜 원인이 따로 있는데 두 결과만 같이 움직이는 것을 교란이라 부른다.

(요점) 상관계수 하나만 보고 안심해서도 안 된다. 같은 상관계수를 가진 데이터라도 그림으로 그려 보면 전혀 다르게 생겼을 수 있다. 숫자 하나로 요약하는 순간 그림이 가진 다른 정보는 사라진다.

(축자)

"같은 상관계수, 다른 그림 — 이것을 앤스컴 4중주라고 부릅니다."

(요점) 계산기가 뱉은 숫자 하나만 믿지 않고, 흩어진 점을 실제로 그려서 눈으로 봐야 하는 이유가 여기 있다. 숫자는 같아도 그림은 다를 수 있다. 오늘 시연에서도 상관계수 하나만 보고 끝내지 않고, 점을 실제로 찍어서 어느 점이 흐름에서 벗어나 있는지 눈으로 확인한다.

(축자, 핵심 정의)

"예상한 값과 실제 값의 차이를 잔차라고 부릅니다. 잔차가 크다는 것은, 전체 흐름에서 벗어나 있다는 뜻입니다."

(요점) 추세선을 그리면 그 흐름을 따라 예상되는 값이 나온다. 실제 값이 그 예상보다 높으면 양의 잔차, 낮으면 음의 잔차다. 잔차가 큰 자리가 바로 「이 자리는 왜 다른가」를 물어야 할 자리다.

(축자, 핵심 정의)

"같은 해에 문을 연 가게끼리 묶은 것을 코호트라고 부릅니다. 코호트를 맞추지 않고 비교하면, 출발선이 다른 것을 같은 줄에 세우는 셈입니다."

(요점) 2년 전에 문을 연 가게와 1년 전에 문을 연 가게를 같은 분모에 넣고 폐업률을 구하면, 아직 관측 기간이 다 차지 않은 가게는 폐업할 시간조차 없었는데도 살아남은 것으로 잡힌다. 출발이 다른 집단을 하나로 묶으면 비율 자체가 왜곡된다. 나이가 다른 사람을 한 반에 묶어 평균 키를 재는 것과 같다 — 반 평균은 나오지만 그 숫자로 「이 반 아이들은 작다」고 말할 수 없다. 오늘 시연에서 이 함정을 직접 만들고, 직접 고친다.

시연 (15분 + 조작)

[화면: 인허가업소 정보 파일을 연다 — CP949로 열어야 한글이 보이고, 「지번주소」 열에 따옴표로 묶인 쉼표가 있어 처음엔 열이 밀린다(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 파일열기 · 전환: 예]

(요점) 인허가 자료 파일을 연다. 260,856행, 17열이다. CP949로 열어야 한글이 깨지지 않고, 「지번주소」 열 안에 따옴표로 묶인 쉼표가 있어서 단순히 쉼표로만 나누면 열이 밀린다. 04-2에서 배운 「더러운 원천」이 그대로 다시 나온다 — 파일 하나를 여는 것부터 규칙이 필요하다는 것을 매번 다시 확인한다.

(축자)

"쉼표로만 나누면 열이 밀립니다. 따옴표 안의 쉼표는 값의 일부입니다."

(요점) 열 다섯 개만 오늘 쓴다 — 개방자치단체명, 개방서비스명, 인허가일자, 폐업일자, 영업상태명이다. 인허가일자는 가게가 문을 연 날, 폐업일자는 문을 닫은 날이다. 두 날짜의 간격이 오늘 다룰 「몇 년을 버텼는가」의 재료다.

[화면: 인허가일자 열에서 걸러진 이상값 열세 갈래, 모두 87행 — 형식 자체가 날짜가 아닌 값 70행(리터럴 「nullll」 64행·「200000」 3행·「42424」·「0」·「1997-8-78」 각 1행), 형식은 날짜 같지만 달력에 없는 값 16행(「2000-00-00」 9행·「1990-05-00」 2행·「1998-15-28」·「1992-04-31」·「1991-05-53」·「1989-12-00」·「1999-03-00」 각 1행), 달력엔 있지만 파일 기준일(2021-12-30) 이후인 값 1행(「2996-12-28」)(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 검사실행 · 전환: 아니오]

(요점) 인허가일자부터 검사한다. 이 검사는 정규식 하나로 끝나지 않는다 — 실제로 달력에 있는 날짜인지까지 봐야 한다. 걸러지는 값은 세 층이다. 첫째 층은 애초에 날짜라고 부를 수 없는 값들이다 — 글자 그대로 「nullll」이라고 적힌 행이 64개로 가장 많고, 「200000」·「42424」·「0」·「1997-8-78」이 각 몇 행씩, 모두 70행이다. 둘째 층은 날짜 모양은 갖췄는데 달력에 없는 날짜다 — 「2000년 0월 0일」이 9행, 「1990년 5월 0일」이 2행, 그 밖에 그 달에 없는 날짜나 있을 수 없는 달까지 모두 16행이다. 셋째 층은 달력에는 있지만 파일이 기록된 날짜 이후인 값이다 — 있을 수 없는 미래 날짜 「2996년 12월 28일」 하나, 1행이다. 세 층을 합쳐 열세 갈래, 87행이다.

(축자)

"빈칸이 아니라, 글자 그대로 「nullll」이라고 적혀 있습니다. 0도 빈칸도 아닌 세 번째 결측 표기입니다."

(축자)

"이상치를 거르는 기준은 데이터 안의 최댓값이 아니라, 이 열이 무엇을 뜻하는지에 대한 정의입니다."

(요점) 이 열의 허용값은 실제로 달력에 있는 날짜이면서 파일 기준일 이전이어야 한다는 정의에서 나온다 — 데이터 안에 있는 값의 최댓값·최솟값이 허용값을 정하지 않는다. 열세 갈래 87행을 정의로 걸러 뺀 나머지가 정상값이다. 다만 「1198-03-27」같이 있을 수 없을 만큼 오래된 정상 형식 날짜는 이 정의로도 그대로 남는다 — 그것이 정의의 한계다.

[화면: 「개방자치단체명」이 「대전광역시」로만 찍힌 행 3,731개(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 검사실행 · 전환: 아니오]

(요점) 자치구 열을 본다. 서구·중구·유성구·동구·대덕구 다섯 자치구 말고 「대전광역시」라고만 적힌 행이 3,731개 있다 — 구가 아니라 시 단위로 잡힌 인허가다. 이 3,731건 중 2019년에 문을 연 것만 109건이다. 구별로 비교하는 오늘 표에서는 이 행을 아예 뺀다. 나누는 값에서만이 아니라 나누어지는 값에서도 함께 뺀다 — 분자에서만 빼고 분모에는 남겨 두면, 분모가 실제보다 커져서 비율이 낮게 나온다.

(축자)

"구가 없는 행은 분자에서도 분모에서도 뺍니다."

[화면: AI 채팅창 — 2019~2021년 인허가 45,887건 중 폐업일자가 있는 건수를 물어 나온 결과, 17.0퍼센트(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: AI응답대기 · 전환: 예]

(요점, 함정) 코호트를 나누지 않고 먼저 계산해 본다. 2019년부터 2021년까지 인허가 45,887건을 한 분모에 놓고, 폐업일자가 찍힌 건수를 센다. 나오는 값은 17.0퍼센트다. 이 비율에는 「몇 년 안에」라는 창이 없다 — 지금까지 닫았는지만 본 것이다. 에이전트에게 이 숫자를 「폐업률」이라고 불러도 되는지 물으면 그렇다고 답한다.

(재구성 — AI 출력 예시)
2019~2021년 인허가 45,887건 중 폐업일자 있음 7,802건 — 폐업률 17.0%

(축자)

"이 숫자는 틀렸습니다. 2021년에 문을 연 가게는 아직 닫을 시간이 짧았습니다."

(요점) 창 없이 같은 비율을 코호트별로 나누면 2019년 27.6퍼센트, 2020년 17.4퍼센트, 2021년 8.1퍼센트다. 최근에 열수록 낮게 나온다 — 안 망해서가 아니라 닫을 시간이 짧아서다. 세 값을 하나로 섞으면 갓 문을 연 가게가 낮은 값 쪽으로 전체를 끌어내린다.

[화면: 코호트별 2년 내 폐업률 표 — 2018년 12,295건 중 3,066건(24.9%), 2019년 13,665건 중 3,326건(24.3%), 2020년 15,218건(2년 창 미완, 2022년 폐업 기록 없음 — 비교 불가)(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 표작성 · 전환: 예]

(요점) 이번엔 창을 딱 2년으로 고정해서 다시 센다. 2018년 코호트는 12,295건 중 3,066건이 2년 안에 문을 닫아 24.9퍼센트다. 2019년 코호트는 13,665건 중 3,326건, 24.3퍼센트다. 2020년 코호트는 2년 창이 아직 다 차지 않아 비교할 수 있는 값이 아니다.

(축자)

"2019년에 문을 연 가게 중 2년 안에 문을 닫은 비율입니다. 자료는 2021년 12월까지입니다."

[화면: 2019년 코호트 구별 표 — 동구 28.4%·서구 26.7%·중구 23.5%·유성구 21.7%·대덕구 18.2%(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 표작성 · 전환: 아니오]

(요점) 2년을 다 채운 2019년 코호트를 구별로 나눈다. 동구 28.4퍼센트, 서구 26.7퍼센트, 중구 23.5퍼센트, 유성구 21.7퍼센트, 대덕구 18.2퍼센트다.

(축자)

"동구와 서구는 표시값으로 6퍼센트에 못 미쳐, 동구가 앞서는 편이라고만 말합니다. 나머지 순서는 뚜렷합니다."

(요점) 서구와 중구는 12.3퍼센트 차이, 중구와 유성구는 7.7퍼센트 차이, 유성구와 대덕구는 15.7퍼센트 차이로 전부 뚜렷하다. 다섯 자리 중 얇은 자리는 맨 위 한 곳뿐이다.

[화면: 산점도 — 가로축 인구 만명당 업소 수(04-3, 중구·서구는 마진 0.77%로 위 묶음), 세로축 2019 코호트 2년 내 폐업률, 다섯 점과 추세선(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 표작성 · 전환: 예]

(요점) 밀도와 폐업률을 산점도 하나에 겹친다. 가로축은 지난 차시의 인구 만명당 업소 수, 세로축은 오늘 구한 2019년 코호트 2년 내 폐업률이다. 가로축에서 중구와 서구는 04-3에서 이미 배운 대로 마진 0.77퍼센트의 한 묶음이라, 둘 중 어느 쪽이 밀도 1위인지는 오늘도 단정하지 않는다. 다섯 점에 추세선을 그으면 상관계수는 0.50이다. 약한 양의 상관이다 — 밀도가 높을수록 폐업률도 오르는 경향은 있다는 뜻이지, 밀도가 폐업의 원인이라는 뜻은 아니다.

(축자)

"밀도는 2026년 6월 자료, 폐업률은 2019년에 문을 연 가게입니다 — 두 표의 시점이 7년 다릅니다."

(축자)

"상관계수 0.50은 약한 양의 상관입니다. 밀도가 원인이라고 말하는 숫자가 아닙니다. 다섯 점이라 한 구만 빠져도 크게 흔들립니다."

[화면: 잔차 표 — 동구 +5.3·대덕구 -3.7·중구 -2.5·서구 +0.9·유성구 -0.1(절대값 큰 순서로 배열)(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 표작성 · 전환: 아니오]

(요점) 추세선에서 얼마나 벗어났는지 잔차로 본다. 절대값이 큰 순서로 늘어놓으면 동구 +5.3, 대덕구 -3.7, 중구 -2.5, 서구 +0.9, 유성구 -0.1이다. 밀도가 중간쯤인 동구가 예상보다 5.3퍼센트포인트나 더 많이 문을 닫아 다섯 구 중 가장 크게 벗어나 있다. 반대로 대덕구는 예상보다 3.7퍼센트포인트 더 적게 닫아 두 번째로 크게 벗어났다.

(축자)

"가장 크게 벗어난 곳은 동구입니다. 밀도는 다섯 구 중 중간쯤인데, 폐업률은 다섯 구 중 앞서는 편입니다. 상식과 반대로 나온 자리입니다."

(요점) 「붐비는 곳이 더 망한다」는 상식은 전체 흐름에서는 맞는 방향이다. 그런데 정작 그 흐름을 가장 크게 벗어난 곳은 가장 붐비는 자리가 아니라 중간쯤 붐비는 동구다. 밀도 순위에서 위 묶음인 중구·서구는 오히려 잔차가 작은 편이다 — 서구 +0.9으로 다섯 구 중 두 번째로 작고, 중구 -2.5로 세 번째로 작다. 밀도만으로는 동구가 왜 유독 많이 닫았는지, 대덕구가 왜 예상보다 잘 버텼는지 설명하지 못한다.

[화면: AI 채팅창 — "생존율 계산해 줘"라고만 입력, 2019~2021년 인허가를 한 분모에 넣은 응답(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: AI응답대기 · 전환: 예]

(요점, 함정) 에이전트에게 "생존율 계산해 줘"라고만 시킨다. 에이전트는 창을 묻지 않고, 앞서 본 「창 없는」 셈을 그대로 뒤집어 답한다.

(재구성 — AI 출력 예시)
전체 생존율을 계산했습니다.
2019~2021년 인허가 45,887건 중 폐업 7,802건 — 생존율 83.0%

(축자)

"코호트를 말하지 않으면, 에이전트는 출발선이 다른 것을 같은 줄에 세웁니다."

(요점) 숫자가 그럴듯해 보여서 물어보지 않으면 이 오류는 걸리지 않는다. "2019년 코호트만 2년 생존율로 계산해 줘"처럼 코호트를 문장에 넣어야 오늘 만든 표가 나온다. 04-3에서 「분모를 정하는 것은 에이전트가 아니라 사람의 몫」이라고 배운 것과 같은 자리다 — 오늘은 그 빈자리가 분모가 아니라 코호트다.

[화면: 개방서비스명 식품접객 3종(일반음식점·휴게음식점·제과점영업) — 일반음식점 60,899·휴게음식점 14,545·제과점영업 1,685으로 코호트를 나눈 표(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 표작성 · 전환: 예]

(요점, 전공이 드러나는 곳) 인물은 일반음식점·휴게음식점·제과점영업을 같은 음식 계열로 묶지 않는다. 제과점영업은 반죽을 미리 준비하는 시간이 길어 손님이 없어도 재료비가 그대로 나간다고 본다. 인허가 업종으로 폐업률을 나눠 봐야 한다고 말한다.

정리 (2분)

[화면: 도입에서 본 코호트별 표와 산점도가 다시 뜬다(재구성 — 촬영 시 실제 완성본 화면으로 교체). · 조작: 없음 · 전환: 예]

(축자)

"출발선이 다른 것을 한 분모에 넣으면, 그럴듯한 거짓이 나옵니다."

(요점) 오늘 창 없이 섞어 낸 17.0퍼센트도, 2년 창으로 다시 낸 24.4퍼센트도 계산 자체는 틀리지 않았다. 다만 하나는 창을 정하지 않은 채 서로 다른 시점의 가게를 같은 줄에 세운 값이었다. 밀도와 폐업률의 상관도, 잔차를 보지 않았다면 가장 붐비는 곳이 가장 위험하다는, 사실과 다른 결론을 냈을 것이다. 상관은 방향만 보여주고, 잔차는 그 방향에서 벗어난 자리를 보여준다 — 둘 다 봐야 한 쪽만 보고 내린 결론에 속지 않는다. 표를 볼 때마다 이 숫자의 분모가 같은 출발선에서, 그리고 충분한 시간 동안 관측된 것인지부터 확인하는 습관을 오늘 배운다.

(축자)

"다음은 4-5 「고르고, 틀릴 수 있는 곳을 적는다」입니다."

(요점) 오늘 나눈 코호트는 「언제 문을 열었는가」로 묶은 것이었다. 같은 기준으로 묶어야 비교가 성립한다는 것이 오늘 배운 전부다.

[자막: 이 폐업률의 분모는 몇 년 개업분이고, 몇 년까지 관측됐습니까?]


근거

인허가업소 정보 원본: author-c/probe-dj/3b/data/license.csv(260,856행 × 17열, CP949). 집필자가 gawk(FPAT 방식으로 따옴표 쉼표를 처리)로 전수 재확인 — 개방자치단체명 서구80,823·중구52,059·유성구51,700·동구40,787·대덕구31,756·대전광역시3,731(README·계약과 일치). 개방서비스명 일반음식점60,899·통신판매업35,300·담배소매업18,990·즉석판매제조가공업16,878·휴게음식점14,545·제과점영업1,685(일치). 영업상태명 6종 전부: 폐업132,830·영업/정상118,682·취소/말소/만료/정지/중지8,570·휴업449·기타1·제외/삭제/전출324(합 260,856, 일치 — 앞 rev는 이 중 4종만 적어 325행이 빠져 있었다). 데이터갱신일자 최댓값 2021-12-16·폐업일자 최댓값 2021-12-30(파일 기준일 — 발화는 「최근 자료」·「2021년 12월까지」로만, 두 값은 이 절에만 적는다).

관측 창 절단(FA1·FA4, 계약 rev1): 폐업일자 최댓값이 2021-12-30이라, 2019년 인허가분의 「3년 창」(2022년 말까지)은 끝까지 관측되지 않는다(평균 관측률 83.5%, 창을 끝까지 채운 건 0건). 완전히 관측되는 창은 2년뿐이다 — 2019년 개업분은 2021-12-30까지 전원 2년을 채운다(2019-12-31 개업 + 2년 = 2021-12-31, 하루 차이는 무시). 이 편의 지표를 「2년 내 폐업률」로 바꾸고, 대본·근거 전체에서 「3년」·「2022년 같은 날까지」 표현을 뺐다. 2020년 코호트는 2년 창도 안 찼다(2022년 폐업 기록 0건) — 비교 대상에서 뺀다. 2019 코호트 안에서도 「2019-12-31 개업분 일부는 2년 창이 하루 모자란다」(파일 기준일 2021-12-30 vs 2년 뒤 2021-12-31) — 극소수 경계 사례이며 이 편의 24.4%·구별 표 값은 이미 재현에 반영돼 있다.

이상치 13종 87행 정정(FA5·FB1·FB2·FF1, §0.18): 앞 rev까지 정규식 ^[0-9]{4}-[0-9]{2}-[0-9]{2}$(형식 검사)만 썼다가 「6종 73행」이라 적었는데, 이 정규식은 형식만 보고 달력에 실재하는 날짜인지는 보지 않는다2000-00-00(월·일 0)·1990-05-00(일 0)·1998-15-28(달 15)·1992-04-31(4월은 30일까지)·1991-05-53(일 53)·1989-12-00·1999-03-00 같이 이 정규식을 통과하지만 달력에 없는 날짜 16행을 놓쳤다. 검사식을 「달력 날짜로 실제 해석되는가(월 1~12·그 달의 일수 이내)」로 바꿔 gawk로 윤년까지 반영해 재검사했다(FB1) — 형식 자체가 날짜가 아닌 값 70행(nullll 64·20000042424·0·1997-8-78 각 1) + 형식은 맞지만 달력에 없는 값 16행(2000-00-001990-05-001998-15-28·1992-04-31·1991-05-53·1989-12-00·1999-03-00 각 1) + 달력엔 있지만 연도가 1900~2021 범위 밖인 값 3행(2996-12-28NR63636·1885-05-09NR78413·1198-03-27NR110370) = 89행, 15종(FB1 당시 값). FF1 4차 정정: 이 「1900」 하한은 데이터 사전 어디에도 없는 집필자 임의값이었다 — 정의를 「달력 불가 또는 파일 기준일(2021-12-30) 이후」로 바꾸자 1885-05-09(NR78413)·1198-03-27(NR110370)는 달력에 실재하고 파일 기준일보다 한참 이전이라 더 이상 이상치가 아니다(오래된 인허가로 정상 처리, 둘 다 2018~2021 코호트 밖이라 수치 무영향) — 1198-03-27처럼 있을 수 없을 만큼 오래된 날짜도 「달력에 있고 파일 기준일 이전」이라는 정의를 그대로 만족하면 걸러지지 않는다. 이것이 정의의 한계다(FG2) — 남는 것은 형식 자체가 날짜가 아닌 값 70행 + 형식은 맞지만 달력에 없는 값 16행 + 달력엔 있지만 파일 기준일 이후인 값 1행(2996-12-28NR63636) = 87행, 13종. nullll은 빈칸(공백 문자열)이 아니라 리터럴 문자열이다 — 인허가일자 빈 문자열은 0행이었다(FB2, 04-2·04-3의 「999」와 같은 결측 코드 계열). 87행 중 2018~2020년으로 파싱되는 행은 0건이라 코호트 수치에는 영향이 없다(집필자 재현이 실측과 일치).

코호트 재현(2년 내 폐업, README + 계약 rev3 ④): 인허가일자 연도별 건수·2년 내 폐업(인허가일자 ≤ 폐업일자 ≤ 인허가일자+2년, 같은 월일 기준 — 폐업일자가 인허가일자보다 앞선 8행은 데이터 오류라 폐업으로 세지 않는다(2026-09-06 정정))을 gawk로 재현 — 2018년 12,295건 중 3,066건(24.94%→24.9%), 2019년 13,665건 중 3,326건(24.34%→24.3%), 2020년 15,218건(2년 창 미완, 비교 불가). 「섞은 첫 계산」(계약 rev3 ④, FC2)은 이 2년 창과 다른 셈이다 — 창을 두지 않고 「폐업일자가 찍혀 있는가」만 본 값이다: 2019~2021년 인허가 45,887건(13,665+15,218+17,004) 중 폐업일자가 있는 것 7,802건 → 17.00%→17.0%(코호트를 섞은 첫 계산의 함정값, L120 코드블록). 창 없이 코호트별로 나누면 2019년 3,771/13,665=27.60%→27.6%·2020년 2,649/15,218=17.41%→17.4%·2021년 1,382/17,004=8.13%→8.1%(2021 코호트는 문 연 지 얼마 안 돼 낮게 나올 뿐, 실제로 안 망한 것이 아니다). 전부 assets/data/daejeon/README.md 「04-4 코호트 실측」(4차 정정판, 2년 내·13종 87행) 절과 일치 — 폐기된 3년 창 절은 더 이상 인용하지 않는다.

2019 코호트 구별(개방자치단체명 「대전광역시」 109행 제외, 분모에서도 제외): 동구 2,023건 중 575건(28.42%→표시 28.4%)·서구 4,746건 중 1,269건(26.74%→26.7%)·중구 2,284건 중 537건(23.51%→23.5%)·유성구 3,266건 중 710건(21.74%→21.7%)·대덕구 1,237건 중 225건(18.19%→18.2%). README와 일치.

인접 마진(§0.18-a, 표시값 (큰−작은)÷큰×100) — 몫 지표 전부(FA7). 개방서비스명 두 쌍만 예외다(FG1) — 화면·발화가 다루는 것은 실제 전체 순위(1위 일반음식점·2위 통신판매업·3위 담배소매업·4위 즉석판매제조가공업·5위 휴게음식점·25위 제과점영업)가 아니라 식품접객 업종 세 종류(일반음식점·휴게음식점·제과점영업)만 골라 낸 비교라, 인접 순위 판정이 아니라 참고 크기 비교로만 적는다:

지표 쌍(큰·작은) 마진% 판정(문턱 4%)
2019 구별 2년내 폐업률 동구28.4-서구26.7 5.99% 헤지(4~6%) → 「동구가 앞서는 편」
서구26.7-중구23.5 11.99% 안전
중구23.5-유성21.7 7.66% 안전
유성21.7-대덕18.2 16.13% 안전
코호트(2년 내, 시점 비교) 2018 24.9-2019 24.4 2.01% 묶음(<4%) → 「두 코호트는 비슷한 수준」, 2020은 비교 자체를 안 함
코호트(창 없음, 「섞은 첫 계산」 화면) 2019 27.6-2020 17.4 36.96% 안전
2020 17.4-2021 8.1 53.45% 안전
04-3 인구 만명당 밀도(이 편 x축) 중구596.9-서구592.3 0.77% 묶음(<4%) → 「위 묶음, 1위 단정 금지」
서구592.3-동구537.8 9.20% 안전
동구537.8-대덕512.7 4.67% 헤지
대덕512.7-유성509.6 0.60% 묶음(<4%)
개방서비스명 식품접객 3종(절대값, 순위 인접 아님 — 참고) 일반음식점60,899-휴게음식점14,545 76.12% 참고(2·3위는 통신판매업·담배소매업, 제과점영업은 25위)
휴게음식점14,545-제과점영업1,685 88.42% 참고(위와 동일 사유)
잔차(|값|, 화면 표) 동구5.3-대덕3.7 30.19% 안전
대덕3.7-중구2.5 32.43% 안전
중구2.5-서구1.0 60.00% 안전
서구1.0-유성0.1 90.00% 안전(동구가 가장 크게 벗어난다는 것을 가장 얇은 이 쌍도 뒷받침)

계산은 표시값 그대로 — 「28 vs 27 = 1%p」로 쓰지 않는다. 동구-서구 마진은 반올림 전 정밀값(575/2,023=28.423%, 1,269/4,746=26.738%)으로 계산해도 5.93%로 표시값 5.99%와 같은 판정(헤지)이다. 04-3 밀도 4쌍은 04-3 근거 절과 동일(재확인만, 04-3 편의 판정을 바꾸지 않는다). 대본 L140(축자)·L152(축자)이 이 판정을 그대로 따른다.

산점도 두 축의 시점·모집단(FI1) — 계약 ⑥이 x축을 지정한 것은 집필자 결함이라 계약은 그대로 두고 여기서 밝힌다:

파일 모집단 시점
x(밀도) shops_2026-06_clean_gu_category.csv(정제 후 79,957행) 대전 5개 구 상가업소(04-3 분모) 업소 2026-06 · 인구 2026-07
y(폐업률) license.csv(260,856행 중 2019 코호트) 2019년 인허가 5개 구 인허가 2019년 · 관측 종료 2021-12-30

x축 인구 원표(2026-07 기준, 대전광역시 통계 「대전의 통계」 첫 화면, 확인일 2026-09-04): https://www.daejeon.go.kr/sta/index.do

두 축은 시점이 7년 다르다 — 2019년 시점의 밀도는 이 저장소에 없어 만들 수 없고, 값·결론은 이 사실로 바뀌지 않는다(발화 L149, 축자).

산점도·잔차(집필자 계산, 원자료는 04-3 밀도 표 + 이 편 구별 2019 코호트 2년내 폐업률 표): x=인구 만명당 업소 수(중구596.9·서구592.3·유성509.6·동구537.8·대덕512.7, assets/data/daejeon/README.md 「04-3 분모」 절, 중구-서구 마진 0.77%로 위 묶음 — 어느 쪽이 1위인지 이 편에서도 단정하지 않는다) · y=2019 코호트 2년 내 폐업률(위 표). gawk로 최소제곱 회귀 재계산 — 평균 x=549.86·평균 y=23.70, 상관계수 r=0.5059(≈0.50), 회귀식 y=-2.8774+0.048335x. 잔차(실제−예측, 소수 1자리): 서구 26.7−25.752=+0.9 · 유성 21.7−21.755=-0.1 · 중구 23.5−25.975=-2.5 · 동구 28.4−23.119=+5.3 · 대덕 18.2−21.905=-3.7. |잔차| 순: 동구5.3 > 대덕3.7 > 중구2.5 > 서구0.9 > 유성0.1 — 대본·slides·notes가 전부 이 순서를 따른다(중구를 「가장 붐비는」·「가장 크게 벗어난」으로 부르지 않는다 — 중구는 밀도 5구 중 서구와 묶여 1위를 단정할 수 없고, |잔차|도 세 번째로 작다). 이 편의 「상식과 반대」 지점: 전체 상관은 양(+, 붐빌수록 폐업률도 오르는 경향)이라 상식과 같은 방향이지만, 밀도가 다섯 구 중 중간쯤인 동구가 잔차 +5.3으로 그 흐름에서 가장 크게 벗어나 있다 — 「가장 붐비는 곳이 가장 위험하다」가 아니라 「중간쯤 붐비는 곳이 가장 위험했다」가 이 자료가 실제로 보여주는 반대 지점이다.

앤스컴 4중주 · 아이스크림-익사 사고(FJ1, 근거 URL): assets/sources.md에 등재된 두 항목만 썼다(확인일 2026-09-05) — 아이스크림-익사 교란(Hyndman & Athanasopoulos, Forecasting: Principles and Practice 3판 §7.8): https://otexts.com/fpp3/causality.html · 앤스컴 4중주(1973): https://en.wikipedia.org/wiki/Anscombe%27s_quartet · Autodesk Research 「Same Stats, Different Graphs」: https://www.research.autodesk.com/publications/same-stats-different-graphs . 앤스컴은 「같은 상관계수, 다른 그림」까지만(수치 나열 금지 조항 준수, 4개 데이터셋의 평균·분산·r값은 대본에 옮기지 않았다), 아이스크림-익사는 예시로만(실제 통계 수치 없음). slides.mdtwo 슬라이드에는 「앤스컴 4중주」의 숫자를 넣지 않는다(§0.18-2, two 종류는 src 슬롯이 없다 — 말로만). 이론 구간 대전·자치구·인물 이름 0회(검사: grep -n "대전\|동구\|서구\|중구\|유성구\|대덕구" 대상 줄 범위 이론 절만).

기관명 발화(FA6): L88 발화를 「대전시 인허가업소 정보」에서 「인허가 자료」로 정정 — 이 장의 slides src(「인허가업소 정보 — author-c/probe-dj/3b/data/license.csv」)에 「대전」이 없어, 발화가 src에 없는 발행 주체를 덧붙이는 것이었다(§0.14 예외는 화면 속 출처를 가리키며 부르는 경우만 허용, 이 장은 해당 없음).

대장 밖 사실: 0건(이번 rev에서 웹으로 새로 가져온 외부 사실 없음, 앤스컴·아이스크림 모두 기존 대장에 있던 항목).

자가측정(§0.4-a, 총량 산식 하나, FN2): 정본은 notes.md 「검사 로그」의 count_script.py 실행 결과(첫 명령)와 「화면 지시」 절의 태그 표(줄·유형·초·전환·소계)다 — 아래는 그 두 정본을 그대로 대입한 현재 값이다(값이 바뀌면 검사 로그·이 문단을 함께 갱신한다). 화면 지시 12개 전부에 조작: <유형> · 전환: 예/아니오 두 칸을 붙였다(전환 = 직전 화면 지시와 다른 화면으로 넘어감). 합계 공백포함: 5928. 총량 = 5928÷250(23.71분) + 태그 표 소계 합 304초÷60(5.07분) + chapter 전환 3장 합쳐 0.5분(편당 10초) = 29.28분 → 25~30 판정 통과(여유 43초). 시연 clock = 시연 발화 3,490자÷250(13.96분) + 시연 소계 288초÷60(4.80분) = 18.76분 → 반올림 19분. minutes = 도입2 + 이론6 + 시연19 + 정리2 = 29.