# 검수 요청 — 안산은 하나의 다문화 도시가 아니다

---
호: 1호_안산외국인_2026-07
만든날: 2026-09-22
만든것: `py 근거화면.py 1호_안산외국인_2026-07 --패킷` — **손으로 묶지 않았습니다.**
정지점: ③수치 ④초안
---

## 0. 이 자료가 무엇인가 (사실만)

- 본문 수치는 전부 `수치대장.csv` 에 등록돼 있고, 아래 본문에서 `71.7[N04]` 처럼 **값 뒤에 대장 번호**가 붙어 있습니다.
- 관문 14개를 이미 지났습니다 — FAIL 0 · WARN 2. 관문은 «숫자가 맞나»와 «그 숫자가 주장을 받치나»를 재고, **추론이 옳은가는 재지 못합니다.**

## 4. 수치대장 전문 (35행)

```csv
id,구분,지표,대상,값,단위,기준일,정의,출처기관,자료명,URL,원문확인,원문위치,파생식,본문키워드,무시목록,비고,분모
N01,계산,외국인비율,원곡동,72.12,%,2026-02-20,원곡동 외국인(N41) ÷ 총인구(N42) × 100. 원자료의 비율 칸을 베끼지 않고 다시 계산한다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 원곡동 행,expr:100*N41/N42,,25|4|3|2|1|0.63|1.6|2.1|2.2|2.4|2.6|2.63|3.4|3.85|3.9|4.9|4.93|5.4|5.44|5.6|5.56|5.9|5.91|6.1|6.14|6.95|7.0|7.58|7.6|9.46|9.5|11.03|11.0|13.51|13.57|22.96|23.0|0.68|0.7|0.85|0.8|2.02|2.0|2.12|2.25|2.44|2.49|3.43|3.85|4.93,지도 라벨은 원자료에서 자동생성(수기 입력 아님),N42
N02,계산,외국인비율,초지동,9.66,%,2026-02-20,초지동 외국인(N43) ÷ 총인구(N44) × 100. 원자료의 비율 칸을 베끼지 않고 다시 계산한다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,expr:100*N43/N44,,,,N44
N03,계산,외국인성비,초지동,4.89,배,2026-02-20,초지동 외국인남(N45) ÷ 외국인여(N46). 원자료의 비율 칸을 베끼지 않고 다시 계산한다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행(남4079/여834),expr:N45/N46,,,,N46
N04,계산,외국인비율,대부동,2.49,%,2026-02-20,대부동 외국인(N47) ÷ 총인구(N48) × 100. 원자료의 비율 칸을 베끼지 않고 다시 계산한다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 대부동 행,expr:100*N47/N48,,,,N48
N05,계산,평균외국인비율,이주 정주도시,72.12,%,2026-02-20,유형 내 동별 비율의 단순평균,모연 분석,K-means 군집(k=4),,Y,analysis/ansan_typed.csv,aggmean:외국인비율:이주 정주도시,,,,
N06,계산,평균외국인비율,공단 남성노동,9.66,%,2026-02-20,유형 내 동별 비율의 단순평균,모연 분석,K-means 군집(k=4),,Y,analysis/ansan_typed.csv,aggmean:외국인비율:공단 남성노동,,,,
N07,계산,평균외국인비율,외곽 노동·소수,2.37,%,2026-02-20,유형 내 동별 비율의 단순평균,모연 분석,K-means 군집(k=4),,Y,analysis/ansan_typed.csv,aggmean:외국인비율:외곽 노동·소수,,,,
N08,계산,평균외국인비율,일반 정주 주거지,6.32,%,2026-02-20,유형 내 동별 비율의 단순평균,모연 분석,K-means 군집(k=4),,Y,analysis/ansan_typed.csv,aggmean:외국인비율:일반 정주 주거지,,,,
N09,계산,평균성비,공단 남성노동,4.89,배,2026-02-20,유형 내 동별 성비의 단순평균,모연 분석,K-means 군집(k=4),,Y,analysis/ansan_typed.csv,aggmean:외국인성비:공단 남성노동,,,,
N10,계산,평균성비,일반 정주 주거지,1.00,배,2026-02-20,유형 내 동별 성비의 단순평균,모연 분석,K-means 군집(k=4),,Y,analysis/ansan_typed.csv,aggmean:외국인성비:일반 정주 주거지,,,,
N11,계산,평균성비,외곽 노동·소수,2.93,배,2026-02-20,유형 내 동별 성비의 단순평균,모연 분석,K-means 군집(k=4),,Y,analysis/ansan_typed.csv,aggmean:외국인성비:외곽 노동·소수,,,,
N12,계산,평균성비,이주 정주도시,1.33,배,2026-02-20,유형 내 동별 성비의 단순평균,모연 분석,K-means 군집(k=4),,Y,analysis/ansan_typed.csv,aggmean:외국인성비:이주 정주도시,,,,
N20,인용,외국인주민수,안산시,108033,명,2023-11-01,광의(장기체류외국인+한국국적취득자+외국인주민 자녀),행정안전부,2023 지방자치단체 외국인주민 현황,https://clik.nanet.go.kr/clikr-collection/policyinfo/19/41/2024/CLIKC7877502752015211_attach_4.pdf,Y,PDF 시군구별 표 — 안산시 행,,,,★2022년값 101850과 혼동 주의(P007). 원문에서 연도 확인함,
N21,인용,외국인주민비율,안산시,15.2,%,2023-11-01,광의 외국인주민/총인구(행안부 정의),행정안전부,2023 지방자치단체 외국인주민 현황,https://clik.nanet.go.kr/clikr-collection/policyinfo/19/41/2024/CLIKC7877502752015211_attach_4.pdf,Y,PDF 시군구별 표 — 안산시 행,,,,,
N22,계산,외국인주민비율,안산시,8.19,%,2026-02-20,협의(안산시 집계 체류외국인)/총인구,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 25개 동 합계,expr:100*N23/N24,,,★N21과 정의가 달라 값이 2배 차이 — 본문 병기 필수,
N23,계산,체류외국인수,안산시,54561,명,2026-02-20,안산시 집계 체류외국인 25개 동 합계,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 25개 동 합계,aggsum:외국인:*,,,N22의 분자 — 본문 정의상자에 표기,
N24,계산,총인구,안산시,666421,명,2026-02-20,25개 행정동 총인구 합계,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 25개 동 합계,aggsum:총인구:*,,,N22의 분모 — 본문 정의상자에 표기,
N30,계산,행정동수,안산시,25,개,2026-02-20,행정동 행 수,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 등록건수,,,,,
N31,계산,실루엣계수,군집k4,0.548,,2026-02-20,"K-means(StandardScaler, 피처=외국인비율·외국인성비·총인구, n_init=10, random_state=0) 의 실루엣 계수. analysis/analyze.py 로 재현된다",모연 분석,analysis/analyze.py 재실행 (2026-08-06 재현 확인),,Y,analyze.py 실루엣 출력,,,,★기사가 채택한 K. 이전 판에는 k=3 값 0.63 이 k4 값으로 적혀 있었다 (2026-08-06 정정) · 실루엣은 나눗셈의 몫이 아니라 군집 품질 지표라 분모가 없다. ⚠ 검산식을 못 가진다 — 원자료(ansan_typed.csv)에 이 값을 담는 칸이 없다. 2026-08-29 에 같은 설정(StandardScaler · KMeans n_init=10 · random_state=0)으로 파일을 건드리지 않고 다시 계산해 k=4 값을 확인했다.,해당없음
N32,계산,실루엣계수,군집k2,0.635,,2026-02-20,"K-means(StandardScaler, 피처=외국인비율·외국인성비·총인구, n_init=10, random_state=0) 의 실루엣 계수. analysis/analyze.py 로 재현된다",모연 분석,analysis/analyze.py 재실행 (2026-08-06 재현 확인),,Y,analyze.py 실루엣 출력,,,,실루엣 최댓값 — 원곡동만 분리 · 실루엣은 나눗셈의 몫이 아니라 군집 품질 지표라 분모가 없다. ⚠ 검산식을 못 가진다 — 원자료(ansan_typed.csv)에 이 값을 담는 칸이 없다. 2026-08-29 에 같은 설정(StandardScaler · KMeans n_init=10 · random_state=0)으로 파일을 건드리지 않고 다시 계산해 k=2 값을 확인했다.,해당없음
N33,계산,실루엣계수,군집k3,0.630,,2026-02-20,"K-means(StandardScaler, 피처=외국인비율·외국인성비·총인구, n_init=10, random_state=0) 의 실루엣 계수. analysis/analyze.py 로 재현된다",모연 분석,analysis/analyze.py 재실행 (2026-08-06 재현 확인),,Y,analyze.py 실루엣 출력,,,,원곡동·초지동 분리. ds_wiki 02_result.md 가 돌린 K · 실루엣은 나눗셈의 몫이 아니라 군집 품질 지표라 분모가 없다. ⚠ 검산식을 못 가진다 — 원자료(ansan_typed.csv)에 이 값을 담는 칸이 없다. 2026-08-29 에 같은 설정(StandardScaler · KMeans n_init=10 · random_state=0)으로 파일을 건드리지 않고 다시 계산해 k=3 값을 확인했다.,해당없음
N40,해석,공단 남성노동,초지동,,,,성비 4.89를 반월·시화공단 단신 남성노동으로 해석(체류자격 데이터 없음),모연 분석,추론,,N,체류자격·연령 미확보,,공단 남성노동,,★사실 아님. 유보 표현 필수,
N41,계산,외국인,원곡동,13852,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:외국인:원곡동,,,,
N42,계산,총인구,원곡동,19206,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:총인구:원곡동,,,,
N43,계산,외국인,초지동,4913,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:외국인:초지동,,,,
N44,계산,총인구,초지동,50865,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:총인구:초지동,,,,
N45,계산,외국인남,초지동,4079,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:외국인남:초지동,,,,
N46,계산,외국인여,초지동,834,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:외국인여:초지동,,,,
N47,계산,외국인,대부동,233,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:외국인:대부동,,,,
N48,계산,총인구,대부동,9355,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:총인구:대부동,,,,
N49,계산,외국인,성포동,165,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:외국인:성포동,,,,
N50,계산,총인구,성포동,24324,명,2026-02-20,비율 행의 분자 또는 분모 — 글에만 있던 수를 대장으로 올렸다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,raw:총인구:성포동,,,,
N51,계산,외국인비율,성포동,0.68,%,2026-02-20,동별 편차를 «퍼짐»으로 재는 값 — 개수로는 못 받친다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,expr:100*N49/N50,,,,N50
N52,계산,외국인비율중앙값,안산 25개 동,5.44,%,2026-02-20,동별 편차를 «퍼짐»으로 재는 값 — 개수로는 못 받친다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,aggmedian:외국인비율:*,,,,
N53,계산,외국인비율범위,안산 25개 동,71.44,%p,2026-02-20,동별 편차를 «퍼짐»으로 재는 값 — 개수로는 못 받친다,안산시(공공데이터포털),경기도 안산시_내국인 및 외국인 현황,https://www.data.go.kr/data/3069669/fileData.do,Y,원본 CSV 초지동 행,expr:N01-N51,,,두 비율의 «차»라 나눌 분모가 없다.,해당없음
```

## 5. 본문 전문

## 6. 주장 ↔ 근거 (필자가 적은 것)

**같은 안산인데 외국인 비율이 정의에 따라 8.19% 와 15.2% 로 갈린다** 〔크기〕

- 근거 행: N21, N22, N23, N24, N20
- 행안부 광의(장기체류 + 국적취득 + 자녀)로는 **15.2[N21]**% (**108,033[N20]**명), 안산시 집계 체류외국인으로는 **8.19[N22]**% (**54,561[N23]** ÷ **666,421[N24]**)다. 두 배 가까이 차이 나므로 어느 정의인지 적지 않은 「안산 외국인 비율」은 그 자체로 값이 아니다. 그래서 둘을 병기하고, 분자와 분모를 따로 실었다.

**안산 전체가 「외국인 도시」인 것이 아니라 특정 벨트에 몰려 있다** 〔분포〕

- 근거 행: N01, N51, N52:퍼짐, N53:퍼짐, N22
- 시 전체는 **8.19[N22]**% 인데 **동별 중앙값은 5.44[N52]%** 다 — 절반 넘는 동이 그 근처다. 그런데 위아래로는 원곡동 **72.12[N01]**% 와 성포동 **0.68[N51]**% 로 **71.44[N53]**%p 벌어져 있다. 「25개 동 중 몇 곳」이라는 개수로는 이 폭이 안 보여서 중앙값과 범위를 값으로 함께 냈다.

## 7. 한계와 «흔들림을 값으로 댔는가»

- **군집 **K=4 는 우리가 고른 것**이다 — 지표가 가리킨 값이 아니다** — 방향 내려간다 · 판정 **결론을 좁혔다** · 크기 N31, N32, N33
  - 실루엣은 **K=2 가 0.635[N32]** · **K=3 이 0.630[N33]** 으로 채택한 **K=4(0.548[N31])** 보다 «높다». K=2 는 원곡동만, K=3 은 원곡동·초지동만 떼어 낸다. K=4 를 고른 것은 「안산동·대부동」이라는 넷째 갈래가 정책적으로 다르게 다뤄야 할 동네라고 봤기 때문이지 지표가 그쪽을 가리켜서가 아니다. 그래서 이 글은 「4유형이 옳다」고 말하지 않고 「4유형으로 나눠 보면 이렇게 갈린다」까지만 쓴다. K를 줄여도 원곡동과 초지동이 서로 다른 동네라는 결론은 그대로 남는다.
- **이 파일의 「외국인」은 **등록·거소 정의가 명시되지 않은 시점 스냅샷**이다** — 방향 올라간다 · 판정 **결론이 선다** · 크기 N21, N22, N20, N23, N24
  - 시 전체로 **8.19[N22]**% 인데 행안부 광의치는 **15.2[N21]**% 다 — 이 표가 좁은 정의라는 뜻이므로 보정하면 «올라가는» 쪽이다. 그래도 이 글의 결론은 서는데, 이 글이 말하는 것이 «수준»이 아니라 «동별로 갈린다»이기 때문이다. 두 정의는 시 전체에 같은 방향으로 걸리므로 동 사이의 순서와 폭을 뒤집지 않는다. 다만 「안산 외국인이 몇 %다」를 이 글에서 인용할 때는 반드시 어느 정의인지 함께 적어야 한다.
- **「공단 남성노동」이라는 유형 이름은 **성비에 기댄 추론**이다** — 방향 모른다 · 판정 **말하지 않는다**
  - 이 표에는 국적·연령·체류자격이 없다. 초지동의 성비가 높다는 사실까지가 자료가 보여 준 것이고, 그 남성들이 공단 노동자인지는 확인되지 않았다. 확인하려면 체류자격별 통계를 붙여야 하는데 동 단위로 그 표가 없다. 그래서 유형 이름은 «해석»이고, 본문에도 「이 자료만으로 확정되지 않는다」고 적었다.
- **국적·연령·체류자격이 **없다** — 같은 「외국인」 안의 차이를 못 본다** — 방향 모른다 · 판정 **말하지 않는다**
  - 유학생이 많은 동네와 공단 노동자가 많은 동네는 필요한 정책이 다른데, 이 표는 둘을 같은 칸에 넣는다. 그 차이의 크기를 재려면 체류자격별 동 단위 표가 있어야 하고 공개돼 있지 않다. 그래서 이 글은 「어떤 외국인인가」를 말하지 않고 「어디에 몰려 있고 성비가 어떻게 갈리는가」까지만 쓴다.
- ****한 시점의 스냅샷**(2026-02-20)이라 늘고 있는지 줄고 있는지 알 수 없다** — 방향 모른다 · 판정 **말하지 않는다**
  - 이 파일은 한 날짜의 25개 동 값만 준다. 시계열이 없어 「밀집 벨트가 넓어지는 중인가」 같은 질문에 답할 수 없고, 그 변화 폭도 값으로 못 낸다. 이 글의 모든 문장은 그 하루의 사진에 대한 것이다.

## 8. 관문이 이미 본 것

| 등급 | 관문 | 말 |
|---|---|---|
| OK | C0 | 구분 값 이상 없음 (계산·인용·해석) |
| OK | C1 | 인용행 메타 이상 없음 (원문위치·URL·기준일까지 확인) |
| OK | C2 | 파생값 28건 원자료와 일치 |
| OK | C3 | '외국인주민비율/안산시' 값 차이를 정의로 구분하고 본문에 병기함 |
| OK | C4 | 본문 통계 수치가 모두 대장에 등록됨 |
| WARN | C5 | N40 '공단 남성노동': 4곳 중 2곳에 유보 표현이 없습니다 … 정착한 정주형 인 반면, 남서쪽으로 넓게 뻗은 초지동 은 비율이 낮은데도 완전히 다른 유형(공단 남성노동)으로 분류됐다. <img alt="안산 행정동 코로플레스 지도 — 군집분석 4유형" src= |
| OK | C5 | 해석 주장에 유보 표현이 붙어 있음 |
| OK | C6 | 렌더링 이상 없음 (태그 유출·자리표시자·본문량·viewport·문서구조) |
| WARN | C7 | 출처식이 적힌 행이 0개입니다 — 이 호는 원본 재조회를 하지 않았습니다. 본문 핵심 수치 몇 개라도 `출처식` 칸을 채우면 prep.py 오류까지 잡힙니다 |
| OK | C8 | 주장 2건이 모두 계산으로 받쳐집니다 (역할이 붙은 근거 2개) |
| OK | C9 | 비율성 행 16건이 모두 분모를 짚습니다 |
| OK | C10 | 한계 5건이 모두 값 또는 이유를 갖췄습니다 · 값을 댄 것 2건 · 「말하지 않는다」 3건 |
| OK | C11 | 개인 수준 전이 주장 없음 (낱말 14개 · 인용부호 안과 부정문은 세지 않음) |
| OK | C12 | 원자료가 호 폴더 안에 있습니다 — 중간층이 없어 해당 없음 |
| OK | C13 | 사람이 본 인과 2건 — 「때문」 오탐 · 「때문」 오탐 |
| OK | C13 | 인과 표현 3건이 모두 근거를 짚거나 유보를 선언합니다 (변수 35개와 대조) |

## 9. 이 패킷에 «없는» 것

- **원자료 파일 자체** — 크기 때문입니다. 위 지문으로 대조하실 수 있습니다.
- `prep.py` · `대장만들기.py` 원문 — 필요하시면 따로 보내겠습니다 (각 0KB · 0KB).
- **우리가 이미 약하다고 보는 자리** — 일부러 뺐습니다. 적어 두면 그 자리만 보시게 됩니다.

## 10. 답해 주십시오

1. **제목이 본문보다 큽니까?**
2. **계산이 받치지 못하는 문장**을 찾아 주십시오 — 문장을 그대로 인용해서.
3. **방법 결정 아홉 줄 가운데 이 자료에 맞지 않는 것**이 있습니까?
4. **정제 규칙**이 결과를 한쪽으로 밀 수 있습니까?
5. **한계 가운데 본문의 주장을 실제로 위협하는 것**은 무엇입니까? 그리고 **적히지 않은 한계**가 있습니까?
6. 독자가 이 글을 읽고 **틀리게 행동할 수 있는 방식**이 있습니까?

지적하실 때 **원문·원자료와 대조한 결과인지, 추론인지 갈라 적어 주십시오.** 저희는 받은 지적을 전부 되돌려 보고 맞은 것만 채택합니다.
