Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions cases/YoungjaeKang-retail-hours/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@
|---|---|
| 처치 | 동대문구, 분석상 시작 분기 2024Q2 |
| 비교 | 서울 내 20개 자치구 후보 — 정책 이력 추가 확인 필요 |
| 기간 | 2021Q1~2024Q4, 2023Q4·2024Q1 제외 |
| 기간 | 2021Q1~2024Q4, 2024Q1만 추정에서 제외 (원자료·전체 분기 집계에는 보관) |
| 지표 | 골목상권 육류·수산물·청과·반찬 판매 추정매출 합계의 자연로그 |
| 방법 | 이벤트스터디, 가짜 시행일 검정 |

공개 자료로 정책 근거·집계·검사·추정 과정을 재현할 수 있는 사례를 만드는 데 초점을 둔다. 효과의 유의성보다 근거와 해석 범위를 분명히 남기는 것을 완료 기준으로 삼는다.

분석 범위와 일정은 [plan.md](plan.md), 실행 설정은 [plan.yaml](plan.yaml)에서 볼 수 있다. 자치구별로 찾아본 근거와 더 확인할 내용은 [정책 확인표](policy-verification.md)에 모았다.

현재는 계획을 작성한 상태로, 매출 원자료는 아직 수집하거나 분석하지 않았다. 계획을 커밋하고 PR을 올린 뒤 수집 코드(`fetch.py`)와 이 사례에 필요한 검사를 작성할 예정이다. 비교 지역의 휴업일 변경 이력과 연도별 상권 자료를 같은 기준으로 비교할 수 있는지 확인하기 전에는 정책 효과를 판단하지 않는다.
선행연구의 질문·방법·한계와 사례에 적용할 내용은 [연구 노트](research-notes.md)에 정리했다.

초기 계획은 [PR #9](https://github.com/CausalInferenceLab/policy-effect-analytics-agent/pull/9)로 main에 병합됐고, 현재는 선행연구를 반영한 보완안을 작성한 상태다. 매출 원자료는 아직 수집하거나 분석하지 않았다. 비교군 정책 이력, 동시기 지원사업, 자료 기준을 확인하고 필요한 계획 보완을 커밋·PR에 반영한 뒤 수집 코드(`fetch.py`)와 이 사례에 필요한 검사를 작성할 예정이다. 비교 지역의 휴업일 변경 이력과 연도별 상권 자료를 같은 기준으로 비교할 수 있는지 확인하기 전에는 정책 효과를 판단하지 않는다.
42 changes: 34 additions & 8 deletions cases/YoungjaeKang-retail-hours/plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,43 +5,54 @@
| 사례 ID | `YoungjaeKang-retail-hours` |
| 작성자 | 강영재 |
| 수행 기간 | 7주 과정, 2026년 11월 1일 재현성 검증 목표 |
| 문서 상태 | 계획 작성 완료, 사전등록 예정 |
| 문서 상태 | 초기 계획 PR #9 병합, 선행연구·분기 처리 보완안 |

## 1. 목적과 완료 기준

동대문구의 대형마트 의무휴업일 변경을 주제로, 자료를 모으고 검사한 뒤 분석과 보고서 작성까지 이어서 실행할 수 있도록 만든다. 7주 동안 이 과정을 자동화하면서 정책 자료를 검토한 내용과 분석 계획을 바꾼 이유도 기록한다. 아직 확인하지 못한 정책 근거는 추가로 조사한다.

이 사례의 기여는 동대문 골목상권의 식품판매 관련 업종을 공개 자료로 분석하고, 정책 근거 확인부터 자료 집계·검사·추정까지 다른 사람이 재현할 수 있게 만드는 데 있다. 효과의 크기나 통계적 유의성을 완료 기준으로 삼지 않는다. 판단을 보류하는 경우에도 그 이유와 추가로 필요한 근거를 남긴다.

과정이 끝날 때는 다음 작업이 가능해야 한다.

- 저장한 설정과 수집 코드로 자치구·분기별 분석 자료를 다시 만든다.
- 자료 누락·중복·코드 연결 오류를 검사하고, 분석을 진행하거나 멈춘 이유를 남긴다.
- 효과 추정, 가짜 시행일 검정, 판단 기준 적용, 보고서 작성을 이어서 실행한다.
- 데이터 출처·수집 시점·실행 설정·검사 결과를 남기고, 다른 참여자가 README에 따라 같은 입력과 설정으로 결과를 재현한다.
- 확인하지 못한 정책 이력이나 자료 기준 때문에 결과를 어디까지 해석할 수 있는지 보고서에 적는다.
- 원 단위 매출 추세와 이벤트스터디 그림, 업종별 매출·구성비·관측 누락 표를 함께 제시한다. 업종별 표는 기술통계이며 별도의 인과효과 추정으로 해석하지 않는다.

실제 자료로 분석할 수 없으면 막힌 이유를 적고 시뮬레이션 데이터로 코드가 끝까지 동작하는지 확인한다. 시뮬레이션에는 `synthetic_data: true`와 출처를 표시한다. 코드가 동작하는지 확인한 것과 실제 자료로 분석을 마친 것은 구분해서 보고한다.

## 2. 연구 질문과 분석 범위

[선행연구 노트](research-notes.md)에는 평일 전환, 의무휴업 당일의 매출, 대형마트 폐점, 해외 규제 연구를 구분해 정리했다. 평일 전환 연구는 정책 질문을, 서울시 자료를 사용한 폐점 연구는 상권 연결과 자료 기준 확인을 참고한다. 기존 연구의 업종·공간·시간 단위가 서로 다르므로 효과의 부호나 크기를 이번 분석의 정답으로 삼지 않는다.

마트와 동네 점포는 같은 상품을 두고 경쟁하는 동시에 방문객을 공유할 수 있다. 두 경로 중 어느 쪽이 큰지는 업종과 지역에 따라 달라질 수 있으므로 예상 방향은 미정으로 둔다.

연구 질문은 다음과 같다.

> 동대문구의 대형마트 의무휴업 평일 전환 이후, 골목상권 식품판매 관련 업종의 분기 추정매출은 비교 자치구와 비교해 어떻게 달라졌는가?

첫 분석에서는 동대문구 한 곳과 서울의 다른 자치구를 비교한다. 매출이 늘었는지 줄었는지 모두 살펴보되, 결과는 아래 지역·업종·기간에 한정해 탐색적으로 해석한다. 전통시장 전체나 마트 주변 모든 점포, 개별 소상공인에게 같은 변화가 있었다고 설명하지 않는다.

분석 대상은 전환 이후의 분기 총매출 변화다. 특정 일요일의 대체소비, 요일별 구매 시점 이동, 개별 소비자의 선택을 따로 식별하지 않는다. 고용·이익·소비자 후생을 포함한 규제 전체의 편익과 비용도 평가 범위에 포함하지 않는다.

| 항목 | 분석 기준 |
|---|---|
| 분석 단위 | 자치구 × 분기 |
| 처치 지역 | 동대문구 |
| 자료 범위 | 2021Q1~2024Q4 |
| 분석에서 제외할 분기 | 2023Q4: 발표에 따른 선반영 가능 구간, 2024Q1: 전환·일부 점포 유예 구간. 모든 지역에 동일 적용 |
| 사전·사후 구간 | 사전 2021Q1~2023Q3(11분기), 사후 2024Q2~Q4(3분기) |
| 분석에서 제외할 분기 | 2024Q1: 전환·일부 점포 유예 구간. 모든 지역의 효과 추정에서만 제외하고 원자료·전체 분기 집계에는 보관하며 추세 그림에 전환기로 표시 |
| 사전·사후 구간 | 사전 2021Q1~2023Q4(12분기), 사후 2024Q2~Q4(3분기) |
| 주지표 | 골목상권의 육류판매·수산물판매·청과상·반찬가게 분기 추정매출 합계의 자연로그 |
| 업종 코드 | `CS300007`, `CS300008`, `CS300009`, `CS300010` |
| 보조 출력 | 동일 범위의 원 단위 매출 합계와 업종별 기술통계 |

매출 합계가 0이거나 구성 자료가 누락되면 원인을 검사한다. 로그를 계산하기 위해 임의로 1원을 더하거나 빠진 값을 0으로 채우지 않는다. 공식 업종 대응표에는 도매업도 포함되어 있으므로 순수 소매업만의 지표라고 설명하지 않는다. 슈퍼마켓에는 기업형 슈퍼마켓(SSM)이 섞여 있어 주지표에서 제외한다. 업종 정의는 [공식 분류표](https://golmok.seoul.go.kr/images/100_v3.pdf)를 따른다.

네 업종은 대형마트 취급 식품과의 관련성 및 공개 자료의 코드 구분을 기준으로 선정했다. 반찬가게 코드에는 일부 가공식품·조미료·커피 및 차 도매도 포함되므로 코드명만으로 점포 성격을 판단하지 않는다. 주지표는 네 업종의 합계로 유지하고, 업종별 매출과 구성비를 함께 제시해 변화가 특정 업종에 집중되는지 살펴본다. 업종 범위는 자료 정의와 수집 가능성을 근거로 정하며, 추정 결과의 방향에 따라 포함 여부를 바꾸지 않는다.

## 3. 정책 이력과 비교 지역

동대문구는 [2023년 12월 29일 행정예고](https://www.ddm.go.kr/www/selectEminwonWebView.do?key=3291&notAncmtMgtNo=16726) 후 [2024-16호 고시](https://www.ddm.go.kr/www/selectEminwonWebView.do?key=3291&notAncmtMgtNo=16863)를 통해 일요일 의무휴업 지정을 해제하고 협약에 따른 둘째·넷째 수요일 자율휴무로 전환했다. 효력일은 2024년 1월 29일이며 일부 점포는 2월 26일부터 적용된다. 분석에서는 전환을 마친 뒤 처음 맞는 온전한 분기인 2024Q2를 시작점으로 삼는다. 고시의 효력일과는 구분한다.
Expand All @@ -52,6 +63,8 @@

서울 안에서는 경기나 계절 변화의 영향을 함께 받는다는 점을 비교의 근거로 삼는다. 다만 휴업일을 바꾼 지역은 원래 상권 사정이 달랐을 수 있고, 소비자가 다른 구로 이동했을 수도 있다. 평일 전환 연계 지원사업은 [서울시의회 결산 기록](https://mas.smc.seoul.kr/record/recordView.do?key=8eee9ad6c34937762f150a6f45cd72764c6ae28cc71e710e19b7efc806f5ebd847d57163f338eb45)에서 확인된다. 지원사업이 실제로 언제 진행됐는지 확인하기 전에는 매출 변화가 휴업 요일 변경만의 효과라고 해석하지 않는다.

비교 후보별로 동대문과의 인접 여부와 소비 이동 가능성을 기록한다. 자치구 전체 집계에는 마트에서 먼 상권도 포함되므로 결과를 마트 바로 주변의 효과로 해석하지 않는다. 인접 지역 제외 분석은 별도 사전 계획을 마련하기 전까지 초기 분석에 추가하지 않는다.

## 4. 자료원과 수집 설계

| 자료원 | 용도 | 현재 확인 범위 |
Expand All @@ -62,7 +75,9 @@

매출은 카드결제 자료를 보정한 추정 지표다. 제공기관은 2024년 공간 단위 개편과 2021년 이후 자료의 재제공을 안내하고 있다. 확인한 공간 파일은 2023년 작성본으로, 최신 매출 자료와 상권 경계·코드가 맞는지는 아직 확인하지 못했다. 코드가 연결되더라도 연도별로 같은 범위를 집계한 것인지 따로 확인해야 한다.

`fetch.py`에서는 원자료를 받고 열 이름·코드·분기 표기를 맞춘다. 그다음 골목상권의 4개 업종을 골라 자치구에 연결하고, 분기별 매출을 합산한 뒤 정책 목록을 붙인다. 같은 자료로 다시 실행할 수 있도록 수집 시점·원본 파일 식별 정보·해시·변환 규칙을 기록한다. 갱신 자료를 받으면 기존 입력과 구분하고 변경 내역을 남긴다.
`fetch.py`에서는 원자료를 받고 열 이름·코드·분기 표기를 맞춘다. 그다음 골목상권의 4개 업종을 골라 자치구에 연결하고, 분기별 매출을 합산한 뒤 정책 목록을 붙인다. 전체 16분기 집계는 로컬에 보관하고, 2024Q1(12)만 제외한 15분기를 추정 입력 `data/panel.csv`로 만든다. 2023Q4(11)는 사전 기간에 포함하며 분기 번호를 다시 매기지 않는다. 같은 자료로 다시 실행할 수 있도록 수집 시점·원본 파일 식별 정보·해시·변환 규칙을 기록한다. 갱신 자료를 받으면 기존 입력과 구분하고 변경 내역을 남긴다.

수집 기록에는 연도별 자료 버전·상권 경계·업종 정의·비공개 또는 누락 기준도 남긴다. 선행연구에서 같은 자료를 사용했다는 사실만으로 현재 파일의 연속성을 가정하지 않는다. 수집 후에는 자치구·분기·업종별 관측 여부를 검사하고, 네 업종의 합계와 원자료 집계가 맞는지 대조한다. 해당 업종의 실제 부재와 자료 누락을 구분할 수 없으면 0으로 간주하지 않는다.

자료별 이용 조건을 실행 설정과 README에 명시한다. 원자료·가공 데이터와 인증 정보는 저장소에 포함하지 않는다. 상권을 어느 자치구에 연결할지 분명하지 않으면 임의로 연결하거나 면적 비율에 따라 나누지 않는다.

Expand All @@ -83,7 +98,7 @@

## 6. 자료 검사와 분석을 멈출 조건

분기는 `2021Q1=0`부터 순서대로 번호를 붙인다. 분석에서 뺀 분기의 번호는 비워 두고 나머지 번호를 당기지 않는다. 기본 패널 열은 `gu_code`, `quarter_idx`, `treated`, `sales_krw`, `log_sales`로 구성하며 처치집단 표시 `treated`는 도입 전후에 동일하게 유지한다.
분기는 `2021Q1=0`부터 순서대로 번호를 붙인다. 추정 입력에는 0~11, 13~15를 사용하며, 제외한 2024Q1(12)의 번호는 비워 두고 나머지 번호를 당기지 않는다. 기본 패널 열은 `gu_code`, `quarter_idx`, `treated`, `sales_krw`, `log_sales`로 구성하며 처치집단 표시 `treated`는 도입 전후에 동일하게 유지한다.

| 구분 | 검사 내용 |
|---|---|
Expand All @@ -98,27 +113,38 @@

## 7. 분석 방법과 판단 기준

자치구와 분기 고정효과를 포함한 이벤트스터디를 사용한다. 분석상 시작점은 2024Q2(`treat_time=13`), 기준 분기는 2023Q3(`ref_period=-3`), 상대시점 범위는 `[-13, 2]`로 설정한다. 추가 통제변수는 넣지 않는다. 주 추정량은 전환 후 3분기 계수의 단순평균이다. 제외 분기의 빈 상대시점은 추정에서 제거한다.
자치구와 분기 고정효과를 포함한 이벤트스터디를 사용한다. 분석상 시작점은 2024Q2(`treat_time=13`), 기준 분기는 2023Q3(`ref_period=-3`), 상대시점 범위는 `[-13, 2]`로 설정한다. 추가 통제변수는 넣지 않는다. 주 추정량은 전환 후 3분기 계수의 단순평균이다. 제외 분기의 빈 상대시점(-1)은 추정에서 제거한다. 2023Q4를 포함하되 기준 분기는 기존 2023Q3(-3)을 유지한다. 12월 말 행정예고가 있는 2023Q4(-2)를 별도 사전 계수로 살펴보기 위해서다. 이 분기를 포함한다고 선반영 가능성이 없다고 가정하는 것은 아니며, 사전추세 점검과 해석에 반영한다.

| 항목 | 초기 기준 |
|---|---|
| 불확실성 | 양측 유의수준 0.05, 자치구 단위 추론 |
| 소수 처치 | 공통 구현의 무작위화 추론 사용 조건 확인, 단일 처치의 한계로 최상 판정도 조건부 |
| 사전추세 | 결합검정 유의수준 0.10, 기각 시 판단 불가 |
| 가짜 시행일 | 2023Q1, `shift=5`; 실제 분석 시작 전 자료만 사용, 유의수준 0.10 |
| 가짜 시행일 | 2023Q1, `shift=5`; 2021Q1~2023Q4만 사용, 유의수준 0.10 |
| 기간 기준 | 사전 최소 8분기, 사후 최소 3분기. 미달 시 초기 효과 해석 보류 |
| 군집 수 | 20개 미만이면 조건부로 판정하고 검정력 한계 기록 |
| 신뢰구간 | 0을 포함하면 불확실로 해석, 효과가 없다고 단정하지 않음 |

가짜 시행일 검정은 공통 코드의 DID를 사용한다. 추정 패널에서 `quarter_idx < 13`인 0~11만 전달되므로 가짜 사전은 0~7(2021Q1~2022Q4), 가짜 사후는 8~11(2023Q1~Q4)이다. 실제 전환기인 2024Q1은 입력 패널에서 빠져 이 검정에도 포함되지 않는다. 이벤트스터디의 기준 분기 설정은 이 DID 검정에 적용되지 않는다.

위 기준으로 첫 분석을 진행한다. `plan.yaml`이 지원하는 조건은 `abstention`과 `thresholds`에 반영하고, YAML에서 자동으로 검사할 수 없는 사후 기간과 근거 확인 여부는 별도 검사와 해석 기록에 남긴다. 가짜 시행일 검정에서 유의한 결과가 나오면 조건부로 낮춘다. 시차 도입을 단순 동시 도입 모형에 혼합하면 판단 불가로 처리한다.

무작위화 추론을 여러 번 반복해도 정책을 바꾼 지역이 하나라는 한계는 남는다. 사전추세 검정을 통과하더라도 두 집단이 정책 없이 같은 추세를 보였을지, 어느 구든 동대문구 대신 정책을 도입할 수 있었을지는 별도의 가정이다. 인접 지역을 빼고 결과가 달라지는지 살펴보는 분석은 추후 추가한다. 추가할 때는 경계 자료와 제외 목록을 사전에 정한다. 현재 공통 파이프라인에서 자동 실행되지 않는 검사는 사례별로 구현·검증한 뒤 포함한다.

## 8. 제출 순서와 남은 일

초기 계획은 [PR #9](https://github.com/CausalInferenceLab/policy-effect-analytics-agent/pull/9)로 2026-10-12(한국시간) main에 병합됐다. 이번 보완은 매출 원자료 열람 전 선행연구 검토와 분기 처리 합의를 반영한다. 기여 방향·지표 해석·근거 확인 절차를 구체화하고, 기존에 제외했던 2023Q4를 사전 기간에 포함한다. 2024Q1은 추정에서만 제외해 전환기 자료도 보관한다. 전체 자료 범위, 지역 후보, 네 업종, 추정 방법, 기준 분기와 판정 기준은 유지한다. 변경은 결과를 확인하기 전에 결정했다.

수집에 앞서 다음 순서로 근거를 보강한다.

1. 비교 후보의 정책 이력과 점포 예외를 확인하고 후보별 포함 근거·미확인 사항을 정리한다.
2. 동대문 연계 지원사업의 실제 집행일과 대상지를 확인한다. 분리가 어려우면 요일 변경만의 효과라는 해석을 보류한다.
3. 제공 문서에서 매출·공간 버전, 업종 정의와 제공 기간을 확인한다. 계획 변경이 필요하면 매출 원자료를 열기 전에 반영해 커밋·PR한다.
4. 수집 단계에서 실제 다운로드, 코드 연결, 업종별 누락과 집계 가능성을 검사한다. 제공 페이지 확인과 파일 취득·품질 검증 완료를 구분한다.

프로젝트 범위와 일정은 `plan.md`에, 실행 설정과 사전등록 기준은 `plan.yaml`에 기록한다.

[참여 가이드](../../docs/ops/mentee-guide.md)에 따라 케이스 제안, 정책 목록, 시행 시점·대상·측정 항목 확인 결과를 정리한 뒤 계획 PR을 준비한다. 초기 실행의 비교 후보 목록·확인 수준·자료 처리 가정·판정 규칙을 [계획 작성 가이드](../../docs/strategy/plan-guide.md)와 [스키마](../../core/schema/plan.py)에 맞춰 YAML에 반영하고, 매출 결과 자료를 열기 전에 커밋·PR한다. 미확인 정책 날짜를 임의 값으로 채우지 않는다.
[참여 가이드](../../docs/ops/mentee-guide.md)에 따른 케이스 제안 이슈의 등록·연결 여부는 추가 확인한다. 정책 목록과 시행 시점·대상·측정 항목의 확인 결과는 정책 확인표에 기록한다. 초기 실행의 비교 후보 목록·확인 수준·자료 처리 가정·판정 규칙을 [계획 작성 가이드](../../docs/strategy/plan-guide.md)와 [스키마](../../core/schema/plan.py)에 맞춰 YAML에 반영하고, 매출 결과 자료를 열기 전에 커밋·PR한다. 미확인 정책 날짜를 임의 값으로 채우지 않는다.

계획 PR → 수집·분석 PR → 리포트 PR 순서로 단계별 제출한다. 관련 검사와 `make check` 결과를 기록하고, 실행하지 못한 검사는 이유를 명시한다. 리뷰 1명 승인과 CI 통과 후 squash merge 절차를 따른다. 공통 모듈 변경이 필요하면 먼저 이슈로 논의한다.

Expand Down
Loading
Loading