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
17 changes: 17 additions & 0 deletions cases/YoungjaeKang-retail-hours/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 대형마트 의무휴업 평일 전환과 골목상권 매출

작성자: 강영재 (`YoungjaeKang`)

동대문구의 대형마트가 일요일 대신 평일에 쉬게 된 뒤 골목상권의 식품판매 매출이 어떻게 달라졌는지 살펴본다. 서울의 다른 자치구와 비교하고, 자료 수집부터 검사·분석·보고서 작성까지 이어서 실행할 수 있도록 만드는 것이 7주 과정의 목표다.

| 항목 | 내용 |
|---|---|
| 처치 | 동대문구, 분석상 시작 분기 2024Q2 |
| 비교 | 서울 내 20개 자치구 후보 — 정책 이력 추가 확인 필요 |
| 기간 | 2021Q1~2024Q4, 2023Q4·2024Q1 제외 |
| 지표 | 골목상권 육류·수산물·청과·반찬 판매 추정매출 합계의 자연로그 |
| 방법 | 이벤트스터디, 가짜 시행일 검정 |

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

현재는 계획을 작성한 상태로, 매출 원자료는 아직 수집하거나 분석하지 않았다. 계획을 커밋하고 PR을 올린 뒤 수집 코드(`fetch.py`)와 이 사례에 필요한 검사를 작성할 예정이다. 비교 지역의 휴업일 변경 이력과 연도별 상권 자료를 같은 기준으로 비교할 수 있는지 확인하기 전에는 정책 효과를 판단하지 않는다.
149 changes: 149 additions & 0 deletions cases/YoungjaeKang-retail-hours/plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
# 대형마트 의무휴업 평일 전환과 골목상권 매출: 프로젝트 계획

| 항목 | 내용 |
|---|---|
| 사례 ID | `YoungjaeKang-retail-hours` |
| 작성자 | 강영재 |
| 수행 기간 | 7주 과정, 2026년 11월 1일 재현성 검증 목표 |
| 문서 상태 | 계획 작성 완료, 사전등록 예정 |

## 1. 목적과 완료 기준

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

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

- 저장한 설정과 수집 코드로 자치구·분기별 분석 자료를 다시 만든다.
- 자료 누락·중복·코드 연결 오류를 검사하고, 분석을 진행하거나 멈춘 이유를 남긴다.
- 효과 추정, 가짜 시행일 검정, 판단 기준 적용, 보고서 작성을 이어서 실행한다.
- 데이터 출처·수집 시점·실행 설정·검사 결과를 남기고, 다른 참여자가 README에 따라 같은 입력과 설정으로 결과를 재현한다.
- 확인하지 못한 정책 이력이나 자료 기준 때문에 결과를 어디까지 해석할 수 있는지 보고서에 적는다.

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

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

연구 질문은 다음과 같다.

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

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

| 항목 | 분석 기준 |
|---|---|
| 분석 단위 | 자치구 × 분기 |
| 처치 지역 | 동대문구 |
| 자료 범위 | 2021Q1~2024Q4 |
| 분석에서 제외할 분기 | 2023Q4: 발표에 따른 선반영 가능 구간, 2024Q1: 전환·일부 점포 유예 구간. 모든 지역에 동일 적용 |
| 사전·사후 구간 | 사전 2021Q1~2023Q3(11분기), 사후 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를 시작점으로 삼는다. 고시의 효력일과는 구분한다.

비교 후보는 서울의 나머지 자치구 중 서초·중구·관악을 제외한 지역으로 설정한다. 서초는 평일 전환과 후속 영업시간 완화, 중구는 2024년 중 전환, 관악은 2024년 말 전환 확정에 따른 선반영 가능성을 고려한다. 성동은 일부 점포의 평일 휴업과 전환 추진 이력을 확인할 때까지 비교 지역에 넣지 않는다. 남은 20개 구도 아직 후보이며, 분석 기간 내내 일요일 휴업을 유지했는지 모두 확인한 것은 아니다.

현재 자치구별 근거와 미확인 사항은 [정책 확인표](policy-verification.md)에 정리했다. 목록에는 구별 대상 점포, 발표일과 효력일, 일시적인 예외, 이후 변경 사항과 출처를 더해 나간다. 실행에 사용할 비교 지역 목록과 확인 수준은 매출 결과 열람 전에 고정한다. 이력이 불분명한 지역을 포함해 계산하면 그 사실을 밝히고, 결과를 탐색적으로만 제시한다. 정책 효과에 대한 판단은 보류한다. 결과의 방향이나 유의성에 따라 비교 지역을 선택하지 않는다.

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

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

| 자료원 | 용도 | 현재 확인 범위 |
|---|---|---|
| 자치구 고시·공식 보도자료·의회 기록 | 정책 목록과 지역별 처치 분류 | 동대문 고시 등 일부 확인, 전체 이력은 후속 보강 |
| [추정매출-상권 OA-15572](https://data.seoul.go.kr/dataList/OA-15572/S/1/datasetView.do) | 분기·상권·업종별 결과지표 | 제공 설명·API 명세·공공누리 1유형 확인, 매출 원자료 미열람 |
| [영역-상권 OA-15560](https://data.seoul.go.kr/dataList/OA-15560/S/1/datasetView.do) | 골목상권 구분과 자치구 연결 | 공간 ZIP 다운로드 및 상권 코드 고유성·자치구 연결 구조 확인 |

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

`fetch.py`에서는 원자료를 받고 열 이름·코드·분기 표기를 맞춘다. 그다음 골목상권의 4개 업종을 골라 자치구에 연결하고, 분기별 매출을 합산한 뒤 정책 목록을 붙인다. 같은 자료로 다시 실행할 수 있도록 수집 시점·원본 파일 식별 정보·해시·변환 규칙을 기록한다. 갱신 자료를 받으면 기존 입력과 구분하고 변경 내역을 남긴다.

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

## 5. 구현할 작업

저장소에 있는 분석 흐름에 이 사례의 수집 코드와 검사를 연결한다. 단계별로 만들 파일은 다음과 같다.

| 단계 | 구현·운영 내용 | 산출물 |
|---|---|---|
| 계획 확인 | 스키마, 사례 ID, 사전등록 상태 및 실행 입력 확인 | `plan.yaml`, 정책 목록 |
| 수집·정규화 | 출처별 취득, 열·코드·시간축 통일, 재실행 가능한 입력 관리 | `fetch.py`, 수집 기록 |
| 패널 구축 | 상권·업종 선택, 자치구 집계, 정책 정보 결합 | `data/panel.csv` |
| 품질 검사 | 공통 자동 검사와 사례별 검사, 실패 사유 출력 | 품질 점검 기록 |
| 추정·반증 | 이벤트스터디, 가짜 시행일 검정, 판정 규칙 적용 | 추정 결과·그림 |
| 보고·재현 | 자동 보고서 생성, 해석·한계 병합, 타 참여자 재실행 | `report.md`, `discussion.md`, `run_manifest.json`, README |

수집부터 보고까지 기존 `make flow CASE=cases/YoungjaeKang-retail-hours` 흐름에 연결하는 것을 목표로 한다. 고시를 읽고 같은 시기에 시행된 다른 정책을 확인하는 일은 직접 한다. 검토 내용은 다시 사용할 수 있는 형태로 기록한다. 고시를 자동으로 해석하거나 정기적으로 자료를 수집하는 기능까지 이번 7주 안에 만들 계획은 없다.

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

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

| 구분 | 검사 내용 |
|---|---|
| 공통 자동 검사 | 필수 열, 결측, 정수 시간축, 단위×시점 중복, 사전·사후 관측과 처치·비교집단 존재 |
| 사례별 추가 검사 | 업종·상권 코드 연결 누락, 자치구 대응의 유일성, 모든 구의 관측 분기 집합 일치, 제외 분기와 처치 표시 일관성 |
| 집계 검증 | 원자료와 집계 합계 대조, 0과 누락의 구분, 로그 변환 가능 여부, 필요한 업종·상권 구성의 누락 |
| 근거 검토 | 공간 버전, 정책 이력, 지원사업·후속 정책의 확인 수준과 해석 제한 |

중복·연결 실패·해결되지 않은 결과 결측 등 입력 오류가 있으면 실자료 추정을 중단하고 검사 결과를 남긴다. 정책 이력이나 공간 버전이 미확인인 경우에는 계산이 가능하더라도 인과효과 판정을 보류한다.

실자료 분석이 중단되면 동일한 열 구조의 시뮬레이션으로 정상 실행과 오류 시 중단 여부를 확인한다. 실제 자료와 시뮬레이션은 자료·설정·결과를 따로 저장하고 보고서에서도 구분한다.

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

자치구와 분기 고정효과를 포함한 이벤트스터디를 사용한다. 분석상 시작점은 2024Q2(`treat_time=13`), 기준 분기는 2023Q3(`ref_period=-3`), 상대시점 범위는 `[-13, 2]`로 설정한다. 추가 통제변수는 넣지 않는다. 주 추정량은 전환 후 3분기 계수의 단순평균이다. 제외 분기의 빈 상대시점은 추정에서 제거한다.

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

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

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

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

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

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

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

결과 확인 후 기간·지역·업종·방법을 바꾸면 변경 이유와 영향을 커밋 기록 및 `discussion.md`에 남긴다. 결과를 본 뒤 바꾼 계획을 처음부터 정해 둔 것처럼 설명하지 않는다.

| 남은 일 | 지금 기록할 내용 | 확인 후 할 일 |
|---|---|---|
| 지원사업 집행일·대상지 | 함께 진행한 사업과 아직 모르는 내용 | 정책 효과 범위와 기간 재검토 |
| 비교구 전체 이력·점포 예외 | 비교 후보와 확인한 범위 | 검증된 비교집단 구성 |
| 공간 경계·코드 버전 호환성 | 코드 연결 결과와 자료 비교의 한계 | 연도별 자료를 같은 기준으로 연결 |
| 추가 기간·업종·분석 방법 | 첫 분석과 구분해 기록 | 별도 계획을 세워 추가 분석 |

7주 안에 확인하지 못한 근거는 과정이 끝난 뒤에도 계속 찾아본다. 근거가 부족한 분석은 판단 불가로 보고한다. 본 프로젝트는 학습·연구용 오픈소스 분석이며 정부·공공기관의 공식 평가가 아니다.

## 9. 주차별 계획

[멘티 참여 가이드](../../docs/ops/mentee-guide.md)의 공식 일정이다. 지연된 작업은 아래 순서에 따라 보완하며, 개인 보충 일정은 별도로 관리한다.

| 주차·공식 목표일 (2026년) | 주요 산출물 |
|---|---|
| 1주차·OT | 실행 환경 준비와 예제 실행 |
| 2주차·9/27 | 주제 선정과 정책 목록 작성 |
| 계획 제출·10/2 | 프로젝트 범위·초기 실행 설정, `plan.yaml` 계획 PR |
| 3주차·10/4 | 수집·정규화·패널 구축과 품질 검사 |
| 4주차·10/11 | 추정·그림 생성 연결, 실행 요건 충족 시 실자료 1차 추정 |
| 5주차·10/18 | 가짜 시행일 검정, 실패 처리 검증, `discussion.md` 초안 |
| 6주차·10/25 | 보고서 자동 생성, 판정·과장 표현·미확인 사항 표시 검증 |
| 7주차·11/1 | 타 참여자 재실행, 파이프라인·운영 절차 공개와 후속 과제 정리 |
Loading
Loading