클립보드에 복사되었습니다
Post

[2024-1 프로젝트] MCLP를 활용한 도시양봉 공원 선정 및 B라인 구축

[2024-1 프로젝트] MCLP를 활용한 도시양봉 공원 선정 및 B라인 구축

MCLP를 활용한 도시양봉 공원 선정 및 B라인 구축


프로젝트 기본

  • Project Title: MCLP를 활용한 도시양봉 공원 선정 및 B라인 구축
  • One-line summary: 서울시 도심 공원 129개를 대상으로 엔트로피 가중치 기반 MCLP로 도시양봉 최적 거점 30개를 선정하고, MST로 거점 간 밀원수 경로(B라인)를 구축하여 단절된 도시 생태계와 꿀벌 개체수 감소 문제를 동시에 해결한다.
  • Project Type: Algorithm / Statistics
  • My Role / Key Contribution:
    • 엔트로피 가중치법(Entropy Weight Method)을 이용한 객관적 변수 가중치 산출 및 구별 종합 점수 설계
    • 점수 가중치(score weighting)와 버퍼 비중첩 제약을 추가한 커스텀 MCLP 알고리즘 개발
    • GeoDataFrame 기반 공간 데이터 처리(CRS 변환, 버퍼 생성, 센트로이드 커버리지 계산)
    • NetworkX를 활용한 최소 신장 트리(MST) 기반 B라인 경로 연결

TL;DR

  • Problem: 서울 도시 생태계의 단절과 꿀벌 개체수 급감. 도시양봉 거점 공원이 체계적 기준 없이 분산되어 있어 꿀벌의 먹이 접근성(밀원수 연결성)이 낮다.
  • Approach: (1) 기후·인구·토지피복·현존식생 등 8개 변수를 엔트로피 가중치로 합산해 서울 25개 구별 적합도 점수를 산출 → (2) 가중치 적용 그리디 MCLP로 2000m 버퍼가 겹치지 않는 공원 30개 선정 → (3) 선정 공원 간 MST로 B라인(밀원수 연결 경로) 구축
  • Main Result: 서울시 129개 공원 중 비중첩 조건을 만족하는 최적 도시양봉 거점 30개 선정 및 전체를 연결하는 B라인 네트워크 생성 (구체적 커버리지 수치: 추가 필요)
  • Keywords: MCLP, 도시양봉, 최적 입지 선정, 엔트로피 가중치, GeoPandas, 최소 신장 트리, 밀원수, 서울 생태 네트워크

Motivation & Background

  • Background: 전 세계적으로 꿀벌 개체수가 급감하고 있으며, 서울시 역시 도시화로 인한 녹지 단절과 농약 살포(방제)로 도시 꿀벌의 서식 환경이 악화되고 있다. 서울시는 ‘단절된 녹지축 연결사업’을 추진 중이나 양봉 관점의 입지 최적화 연구는 미흡하다.
  • Why this problem matters: 꿀벌은 농업 생태계의 핵심 수분 매개자로, 개체수 감소는 식량 안보와 생태계 서비스에 직결된다. 도시양봉 거점을 밀원수로 연결하면 단절된 녹지축을 복원하는 동시에 꿀벌 서식지를 확보할 수 있다.
  • Gap in existing work: 기존 도시양봉 관련 연구는 단순 위치 추천에 그치거나, 가중치를 전문가 주관으로 설정하여 객관성이 부족하다. 공원-밀원수-경로를 통합적으로 최적화한 사례는 드물다.
  • Related work:
    • Church & ReVelle(1974)의 MCLP(Maximum Coverage Location Problem): 시설 수를 고정한 상태에서 수요 커버리지를 극대화하는 고전적 입지 모델 — 본 연구의 알고리즘 이론적 근거
    • 엔트로피 가중치법(Shannon Entropy): 데이터 분산도를 이용해 주관적 판단 없이 변수 가중치를 결정하는 MCDM 기법
    • 꿀벌 평균 채집 거리: 일반 꿀벌 2000m, 도시 꿀벌 492m (참고 문헌 기준)
    • 서울시 도시생태현황도(2020): 현존식생 분류(B형 조경수목 식재지, D형 경작지) 데이터 활용

Approach

Algorithm / Statistics 블록

  • Formulation / Variables:

    변수출처방향조정 가중치(%)
    건폐율 (최적값 25% 기준 변환)공공데이터포털낮을수록 좋음 → 반전~27.8
    조경수목 식재지 면적 (B형 식생)서울시 도시생태현황도 2020높을수록 좋음~13.95
    경작지 면적 (D형 식생)서울시 도시생태현황도 2020높을수록 좋음~8.25
    주민등록인구수공공데이터포털낮을수록 좋음 → 반전~9.36
    방제여부공공데이터포털낮을수록 좋음 → 반전~11.83
    평균기온(°C) (최적값 23.5°C 기준)기상청최적값 근사 → 반전~10.19
    일강수량(mm)기상청낮을수록 좋음 → 반전~8.92
    평균 풍속(m/s)기상청낮을수록 좋음 → 반전~9.71
    토지피복 합성 지수국토지리정보원 현장조사각 유형별 계수 합산(토지피복 내 합산)
  • Objective / Statistical model:
    • 엔트로피 가중치 산출 (Shannon Entropy):
      1. 구별 변수값 정규화: $r_{ij} = \frac{x_{ij} - \min_j}{\max_j - \min_j}$
      2. 엔트로피: $e_j = -\sum_i r_{ij} \ln(r_{ij} + \epsilon)$
      3. 가중치: $w_j = \frac{1 - e_j / \sum e_j}{n - 1}$
    • 구별 종합 점수 = $\text{score}g = \sum_j w_j \cdot \tilde{x}{gj}$ (정규화 후 합산)
    • 가중치 적용 MCLP (그리디 근사, 비중첩 제약):
      1
      2
      3
      4
      5
      6
      
      repeat num_facilities times:
          for each candidate park i (not yet selected):
              skip if buffer_i intersects any selected buffer
              compute new_coverage = Σ_d score[i] * max(covered[d, selected∪{i}])
          select i* = argmax new_coverage
          add i* to selected set
      
    • B라인: 선정 30개 공원을 노드로 하는 완전 그래프 구성 → NetworkX minimum_spanning_tree
  • Assumptions:
    • 꿀벌 평균 채집 반경 = 2000m (문헌 기반, 도시 꿀벌 492m는 민감도 분석용)
    • 수요 포인트 = 읍면동(EMD) 센트로이드 (서울 전체 ~424개 동)
    • 공원 점수는 해당 공원이 위치한 구(區)의 종합 점수를 상속
    • 비중첩 제약: 선정된 공원 버퍼끼리 교차하지 않아야 함
  • Derivation / Key steps:
    1. Beewow.ipynb: NIE Ecobank WFS API로 서울 꿀벌 출현 좌표 수집 (EPSG:5186 → EPSG:4326 변환)
    2. EDA.ipynb: 16개 후보 변수 결측치 처리(기후 → 평균대체, 토지피복 → 0 대체), 분포 시각화, 상관 분석
    3. MCLP.ipynb §엔트로피 가중치: 5개 기후·인구 변수 → 엔트로피 가중치 계산 → 기존 3개 변수 가중치와 조화 조정(전체 합 100%)
    4. MCLP.ipynb §공원 점수화: 구별 점수를 각 공원에 매핑 (25개 구 × 129개 공원 매핑)
    5. MCLP.ipynb §MCLP 최종: 가중+비중첩 MCLP로 30개 공원 선정
    6. MCLP.ipynb §MST: 30개 노드 완전 그래프 → MST → B라인 경로 시각화
  • Complexity / Notes:
    • MCLP 그리디: $O(K \cdot N)$ (K=선정 시설 수, N=후보 시설 수)
    • 비중첩 제약으로 인해 일부 고득점 공원이 제외될 수 있음(greedy suboptimal)
    • 최적 거점 수 K=30은 K-Elbow(Yellowbrick) 분석으로 결정

Data & Experiment

  • Dataset type: 정형 데이터(구 단위 집계) + 공간 데이터(Shapefile, GeoDataFrame)
  • Source:
    • 공원 위치: 공공데이터포털 (park.csv)
    • 읍면동 행정구역 경계: 국토지리정보원 emd.shp (EMD_CD < 20000000 → 서울 필터링)
    • 건폐율·기후·인구·방제 통합 데이터: df_0601.csv (구 단위, 2024년 기준)
    • 현존식생: 서울시 도시생태현황도 2020 (현장조사.shp)
    • 꿀벌 출현 위치: 국가생태정보서비스(NIE Ecobank) WFS API (https://www.nie-ecobank.kr/ecoapi/NteeInfoService/wfs/getInsectPointWFS)
    • 서울시 행정구역 경계(구): LARD_ADM_SECT_SGG_11_202405.shp
  • Size: 서울시 25개 구, 129개 공원, ~424개 읍면동 센트로이드
  • Label / Target definition: 없음 (비지도 최적화 문제 — 커버리지 극대화)
  • Preprocessing:
    • 기후 변수(평균기온, 일강수량, 평균 풍속) 결측치 → 평균 대체
    • 토지피복 변수(골프장, 논, 밭 등) 결측치 → 0 대체
    • 불리한 방향 변수 6개 반전(max-value 변환 또는 기준값 기반 반전)
    • 좌표계 통일: EPSG:5179 → EPSG:4326 → EPSG:3857 (버퍼 계산용)
    • 토지피복 10개 세부 유형 → 유형별 계수 가중합으로 1개 합성 변수로 압축
    • B/D형 현존식생 구별 집계(면적 합산)
  • Leakage checks: 해당 없음 (최적화 문제, 학습 없음)
  • Split: 해당 없음
  • Evaluation protocol: 선정된 30개 공원이 커버하는 EMD 센트로이드 수 (공간 포함 여부 판별)
  • Metrics:
    • 커버리지 수(Coverage Count): 버퍼 내 포함되는 EMD 센트로이드 수
    • 가중 커버리지: Σ score[i] × covered[i] (선정 목적함수)
    • MST 총 엣지 거리(B라인 총 길이): 추가 필요
  • Environment: Python (Google Colab 기준 개발, 재현환경 미설정)
  • Frameworks / Libraries:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    pandas, numpy, matplotlib, seaborn
    geopandas, folium, pyproj, fiona, osmnx
    networkx (MST, Dijkstra)
    scikit-learn (KMeans, Elbow)
    scipy (distance_matrix)
    pulp (LP solver, 초기 버전)
    ortools (constraint solver, 초기 버전)
    yellowbrick (KElbowVisualizer)
    shapely, tqdm
    
  • Reproducibility: 별도 시드 고정 없음 (KMeans: random_state=10 설정)

Results

PDF 출력 셀 미확인으로 정량 수치는 추가 필요

방법선정 공원 수커버 EMD 수가중 커버리지비고
MCLP without weights30추가 필요기준선
MCLP with weights (엔트로피+비중첩)30추가 필요추가 필요제안 방법
  • Visualization notes:
    • 서울 읍면동 경계 + 전체 공원(파란 점) + 선정 공원(빨간 점) + 2000m 버퍼 + 녹지 센트로이드 분포도
    • MST 엣지로 연결된 B라인 네트워크 지도 (folium/matplotlib)
    • K-Elbow 그래프 (최적 클러스터 수 = 30 결정 근거)

Discussion

  • Key observations:
    1. 비중첩 제약 추가 시 단순 점수 상위 공원이 탈락하고 공간적으로 분산된 공원이 선정됨 — 지리적 커버리지 균형 향상
    2. 엔트로피 가중치 결과, 방제여부(11.83%)와 건폐율(~27.8%)이 가장 높은 가중치를 차지 — 양봉 적합성에 인위적 훼손 요소가 큰 영향
    3. 기후 변수 5개의 엔트로피 가중치 합 ≈ 49%, 토지피복·식생 관련 변수 합 ≈ 51% — 환경·자연 조건이 균형 있게 반영
    4. 2000m 버퍼 기준에서 주석 처리된 492m 기준은 도시 꿀벌 특화 시나리오로 민감도 분석 가능성 남김
  • Interpretation: 엔트로피 가중치 도입으로 전문가 주관 의존 없이 데이터 분산도 기반의 객관적 가중치를 산출. 비중첩 제약은 실제 양봉 운용 시 거점 간 경쟁(채집 구역 충돌)을 예방하는 현실적 조건.
  • Trade-offs:
    • 그리디 MCLP는 전역 최적을 보장하지 않음 — 정수계획법(ILP/PuLP) 대비 계산 속도 우위, 최적성 희생
    • 비중첩 제약 강화 시 커버 가능 총 서울 면적이 감소할 수 있음
    • 구 단위 점수를 공원에 일괄 적용 → 동일 구 내 공원 간 세부 차이 미반영
  • Failure cases / surprising results: 추가 필요 (출력 셀 미확인)
  • What I learned:
    1. 공간 데이터의 좌표계(CRS) 불일치가 버퍼/거리 계산에 치명적 — EPSG:3857(미터 단위) 변환 필수
    2. 가중치를 엔트로피로 도출하면 변수 간 상대적 정보량 차이를 자동 반영할 수 있어 MCDM에 적합
    3. MST와 MCLP를 결합하면 ‘어디에 거점을 둘까’와 ‘어떻게 연결할까’를 독립적으로 최적화 가능

Limitations & Future Work

  • Limitations:
    1. 공원 점수가 구(區) 평균으로 부여되어 동일 구 내 개별 공원의 미기후·식생 차이를 반영하지 못함
    2. 그리디 MCLP는 전역 최적을 보장하지 않음 — ILP 기반 정확해와의 비교 검증 필요
    3. 꿀벌 실제 이동 패턴(비행 고도, 障壁 회피 등) 미반영 — 공간 직선 거리로만 연결성 판단
    4. 데이터가 구 단위 집계이므로 읍면동·공원 세부 수준의 정밀도 부족
    5. 서울 시내 129개 공원만 고려 — 소규모 녹지, 학교 화단, 옥상 등 잠재 양봉 공간 미포함
  • Future directions:
    1. ILP/MIP 정확 최적화(PuLP 또는 Gurobi)와 그리디 결과 비교 및 갭 분석
    2. 공원 단위 세분화 변수 발굴(개별 공원 식생 면적, 인근 농약 살포 빈도 등)
    3. 꿀벌 비행 경로를 고려한 네트워크 분석(도로/장애물 회피 경로)
    4. 실제 도시양봉 운영 데이터와 비교 검증(시범 사업 연계)
    5. 채집 반경 492m(도시 꿀벌) 시나리오와 2000m 시나리오의 민감도 분석 및 결과 비교
  • If I had more time: 읍면동 단위 토지피복 세분화, 꿀벌 출현 데이터(NIE Ecobank)와 선정 공원 간 공간 상관관계 정량 분석, 시계열 기후 데이터 적용

Project Structure

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
BeeLine/
├── EDA/
│   └── EDA.ipynb                    # 변수 EDA·결측치 처리·상관분석·현존식생 분포 분석
├── GeoPandas/
│   ├── Bee시각화.ipynb               # 서울시 행정구역 + 벌 출현 위치 choropleth 시각화
│   ├── 벌출현위치/
│   │   ├── Beewow.ipynb             # NIE Ecobank API로 꿀벌 출현 좌표 수집 및 folium 지도 생성
│   │   └── service key.txt          # 공공 API 키 (NIE Ecobank)
│   ├── LARD_ADM_SECT_SGG_11_202405.shp   # 서울시 구(SGG) 경계 shapefile
│   ├── nlsp_002002011.shp            # 녹지 관련 공간 데이터
│   ├── beewow.csv                   # 수집된 꿀벌 출현 데이터
│   ├── new_seoul.csv / new_seoul_gu.csv  # 읍면동 CRS 변환 결과
│   └── vegetation (1).csv           # 현존식생 집계 데이터
├── MCLP/
│   └── MCLP.ipynb                   # ★ 핵심: 엔트로피 가중치 → MCLP → MST B라인 전체 파이프라인
└── 자료/
    ├── 발표자료/
    │   ├── 환파주의보_공모전 공유회.pdf      # 최종 공모전 발표 슬라이드
    │   ├── 환파_중간발표.pdf                 # 중간 발표 슬라이드
    │   └── 환파_공모전 공유회 대본.docx      # 발표 대본
    ├── 06_03_MCLP를 활용한 도시양봉 공원 선정 및 B라인 구축_박지훈.pdf  # 최종 보고서
    └── 논문(김윤호씨).pdf                    # 참고 논문 (MCLP 이론)

Entry Point: GeoPandas/벌출현위치/Beewow.ipynbEDA/EDA.ipynbMCLP/MCLP.ipynb 순으로 실행


PDF / Slides Mapping

  • Main slide deck(s):
    • 자료/발표자료/환파주의보_공모전 공유회.pdf — 최종 공모전 발표 (2025)
    • 자료/06_03_MCLP를 활용한 도시양봉 공원 선정 및 B라인 구축_박지훈.pdf — 최종 보고서
    • 최종 방법론 사용 변수 6e682810...pdf — 변수 정의 Notion 내보내기
  • Slide-to-README mapping:
    • Problem statement slide(s): 추가 필요 (PDF 압축으로 텍스트 추출 불가)
    • Method/Architecture slide(s): 추가 필요
    • Experiment setup slide(s): 추가 필요
    • Results/Comparison slide(s): 추가 필요
    • Ablation/Analysis slide(s): 추가 필요
    • Conclusion/Future work slide(s): 추가 필요
  • Numbers provenance: 추가 필요 (PDF 텍스트 추출 실패 — FlateDecode 압축 PDF)
  • Any missing slides / gaps:
    • 추가 필요: 커버리지 수치(선정 전후 커버 EMD 수), MST 총 경로 거리, 구별 점수 순위표

Citation & License

  • Citation info:
    • 강태영, 박지훈, 송재호, 노지연 (팀명: 환파주의보), “MCLP를 활용한 도시양봉 공원 선정 및 B라인 구축”, 환경부 2025 환경데이터 활용 및 분석공모전 분석부문 출품작, 2025.
  • License: 추가 필요 (현재 라이선스 파일 없음)
  • Papers / links:
    • Church, R., & ReVelle, C. (1974). The maximal covering location problem. Papers of the Regional Science Association, 32, 101–118.
    • NIE Ecobank API: https://www.nie-ecobank.kr
    • 서울시 도시생태현황도 2020: https://news.seoul.go.kr
This post is licensed under CC BY 4.0 by the author.