레이블이 QGIS산사태인 게시물을 표시합니다. 모든 게시물 표시
레이블이 QGIS산사태인 게시물을 표시합니다. 모든 게시물 표시

2026-09-28

산사태 위험지도는 어떻게 만드나 | 취약성 모델링 | GeoAI 기초 13편

산사태 위험지도는 어떻게 만드나 | 취약성 모델링 | GeoAI 기초 13편

🎬 1분 브리핑 영상

📌 3줄 요약

  • 경사·지질·강우 등 공간 인자를 조합해 산사태 취약성 지도를 만든다.
  • 통계 모델과 머신러닝 모델은 원리가 다르지만 목표는 같다.
  • 위험지도의 숫자는 확률이지 예언이 아니므로 해석에 주의가 필요하다.

장마철이 끝나고 뉴스에 "이 지역은 산사태 위험 1등급"이라는 자막이 뜹니다. 그 숫자는 어디서 나온 걸까요? 누군가가 산을 직접 걸어 다니며 위험도를 매긴 것은 아닙니다. 경사각, 지질 특성, 과거 강우 기록, 토지피복 정보 같은 여러 공간 데이터를 모아 모델에 넣고 계산한 결과입니다.

산사태 위험지도를 만드는 과정을 취약성 모델링이라고 합니다. 취약성(vulnerability)이란 어떤 조건에서 재난이 발생하기 쉬운 정도를 수치로 표현한 것입니다. 이 모델이 어떻게 만들어지고, 지도를 읽을 때 무엇을 조심해야 하는지 차근차근 살펴보겠습니다.

🏔️ 산사태 위험지도를 만들 때 어떤 데이터가 필요한가요?

취약성 모델링의 첫 단계는 입력 인자를 고르는 일입니다. 입력 인자란 산사태 발생과 관련이 있다고 알려진 지형·지질·기상 정보를 말합니다. 가장 기본이 되는 것은 경사각입니다. 경사가 가파를수록 중력 방향으로 토양이 미끄러지기 쉽습니다. 여기에 경사 방향(사면향), 곡률(지표면이 오목한지 볼록한지)도 함께 씁니다.

지질 정보도 중요합니다. 같은 경사라도 암석이 풍화된 정도, 점토 함량, 투수성에 따라 물이 스며드는 속도가 달라집니다. 강우 자료는 누적 강우량과 시간당 강도를 모두 고려합니다. 토지피복(숲, 나지, 논밭 등)은 뿌리가 토양을 붙잡는 효과를 반영합니다. 이 밖에 도로 절개지나 계곡 거리 같은 인위적 요소도 포함할 수 있습니다. 실무에서는 각 기관이 보유한 수치 표고 모델(DEM)과 지질도, 기상 관측 데이터를 GIS에서 같은 격자 크기로 정렬하는 작업부터 시작합니다.

📊 통계 모델로 취약성을 계산하면 어떤 원리인가요?

통계 기반 모델의 대표적인 방식은 로지스틱 회귀(logistic regression)입니다. 회귀라는 이름이 낯설어도 개념은 단순합니다. 과거에 산사태가 났던 지점과 나지 않은 지점을 비교해서, 어떤 인자 조합이 산사태와 얼마나 함께 나타났는지 수치로 정리하는 것입니다. 결과는 0과 1 사이의 값, 즉 발생 가능성으로 표현됩니다.

비슷한 원리의 도구로 빈도비(frequency ratio) 방법이 있습니다. 전체 지역에서 특정 경사 범위가 차지하는 면적 대비 그 범위에서 실제 산사태가 일어난 비율을 계산해 가중치를 매기는 방식입니다. 계산이 투명해서 결과를 설명하기 쉽다는 장점이 있습니다. 재난안전 담당자가 지방자치단체에 위험 등급을 설명할 때, 어떤 인자가 얼마나 기여했는지 보여 줄 수 있어 실무에서도 많이 활용됩니다.

🤖 머신러닝 모델은 통계 모델과 무엇이 다른가요?

머신러닝 모델은 인자 간의 비선형 관계를 스스로 찾아냅니다. 예를 들어 랜덤 포레스트(random forest)는 수백 개의 결정 트리를 만들고 투표로 결과를 냅니다. 결정 트리는 "경사 30도 이상이면서 점토 함량이 높으면 위험"처럼 조건을 나무 가지처럼 분기하는 구조입니다. 여러 트리의 의견을 합치니 한 트리가 과적합되는 문제를 줄일 수 있습니다.

모델을 직접 써보고 싶다면 파이썬의 scikit-learn 라이브러리로 시작할 수 있습니다.

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score

X_train, X_test, y_train, y_test = train_test_split(
    features, labels, test_size=0.2, random_state=42
)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
print("AUC:", roc_auc_score(y_test, model.predict_proba(X_test)[:,1]))

AUC(수신자 조작 특성 곡선 아래 면적)는 모델이 산사태 발생 지점과 미발생 지점을 얼마나 잘 구분하는지 보여주는 지표입니다. 1에 가까울수록 구분 능력이 높습니다. 실무 적용 전에 검증 데이터로 반드시 이 값을 확인해야 합니다.

🗺️ 완성된 위험지도, 어떻게 읽어야 하나요?

취약성 지도는 격자(픽셀) 또는 소유역 단위로 색깔을 달리해 등급을 표시합니다. '매우 높음'으로 표시된 구역은 과거 발생 패턴과 입력 인자를 종합했을 때 상대적으로 위험도가 높다는 뜻입니다. 반드시 기억해야 할 점은 이 값이 확률이지 예언이 아니라는 것입니다. 위험도가 낮은 구역에서도 예상치 못한 강우나 지형 변화로 산사태가 발생할 수 있고, 높은 구역이라고 해서 반드시 이번 장마에 무너진다는 뜻이 아닙니다.

해봐야 아는 것도 있습니다. 모델이 출력한 지도를 현장 사진이나 최근 항공영상과 겹쳐보면, 실제 산사태 흔적이 고위험 구역과 얼마나 일치하는지 직접 눈으로 확인할 수 있습니다. QGIS에서 래스터 레이어를 불러온 뒤 레이어 패널에서 오른쪽 클릭 > 속성 > 심볼로지 탭에서 단계 구분 색상을 설정하고, 위성영상 레이어를 아래에 깔아 투명도를 조절해 보면 지도의 신뢰성을 직관적으로 점검할 수 있습니다.

⚠️ 위험지도를 실무에 쓸 때 어떤 한계를 알아야 하나요?

모델은 학습 데이터 품질에 크게 좌우됩니다. 과거 산사태 목록이 불완전하거나 특정 지역에만 편중되어 있으면, 모델도 그 편향을 그대로 이어받습니다. 또한 입력 인자의 공간 해상도가 낮으면(예: 경사 데이터가 30m 격자일 때) 좁은 계곡이나 절개지처럼 세밀한 위험 구역을 놓칠 수 있습니다.

모델 종류마다 결과가 다르게 나오는 것도 흔한 일입니다. 같은 지역을 로지스틱 회귀와 랜덤 포레스트로 각각 분석하면 고위험 구역의 위치와 면적이 달라질 수 있습니다. 따라서 단일 모델의 결과를 절대적으로 믿기보다는 여러 모델의 결과를 비교하거나 앙상블(여러 모델의 결과를 합산)하는 방법을 씁니다. 실무에서는 위험지도를 만든 기관, 사용한 데이터의 기준 연도, 모델 검증 지표를 메타데이터로 함께 보관해야 다음 담당자가 지도를 올바르게 해석할 수 있습니다.

🖥️ 화면에서 따라하기

따라하기 단계

  1. DEM 내려받기
    국토지리정보원 공개 DEM 포털에서 연구 대상 지역의 수치 표고 모델 파일을 내려받는다.
  2. QGIS 불러오기
    QGIS 상단 메뉴 레이어 > 레이어 추가 > 래스터 레이어에서 내려받은 DEM 파일을 선택하고 추가를 누른다.
  3. 경사 계산
    상단 메뉴 래스터 > 분석 > 경사(Slope)를 선택하고 입력 레이어에 DEM을 지정한 뒤 실행을 누른다 (메뉴 위치는 QGIS 버전에 따라 다를 수 있으며, 못 찾으면 상단 검색창에 'Slope'를 입력한다).
  4. 심볼로지 설정
    경사 레이어에서 오른쪽 클릭 > 속성 > 심볼로지 탭에서 단일 밴드 의사 색상을 선택하고 등급 수를 5로 지정한 뒤 분류를 누른다.
  5. 위성영상 겹치기
    XYZ Tiles에서 Google Satellite 레이어를 레이어 패널 아래쪽으로 드래그해 배치하고, 경사 레이어의 투명도를 50%로 조절해 두 레이어를 함께 본다.
  6. 결과 점검
    실제 산사태 발생 이력 지점(시도 재난안전 부서 제공 데이터)을 벡터 레이어로 불러와 고경사 구역과 일치 여부를 눈으로 확인한다.

※ 프로그램 버전에 따라 메뉴 이름이 조금씩 다를 수 있습니다. 위 그림은 순서를 정리한 도식입니다.

✍️ 그대로 복사해 쓰는 프롬프트

산사태 취약성 분석 결과를 주민 설명 자료나 내부 보고서 형식으로 정리할 때 사용

당신은 재난안전 분야 보고서 작성을 돕는 전문 보조자입니다.
아래 조건에 맞게 산사태 취약성 분석 결과 요약문을 작성해 주세요.

- 대상 지역: [시·군·구명]
- 분석에 사용한 주요 인자: [경사, 지질, 강우 등 실제 사용 인자 목록]
- 모델 종류: [로지스틱 회귀 / 랜덤 포레스트 / 기타]
- 고위험 구역 비율: [전체 면적 대비 %]
- 모델 검증 지표(AUC 등): [값]

작성 조건:
1. 주민이나 비전문가도 이해할 수 있도록 전문용어는 괄호 안에 짧게 설명한다.
2. 위험지도는 확률적 결과이며 예언이 아님을 명시하는 문장을 반드시 포함한다.
3. 결과를 과장하거나 특정 지점이 반드시 붕괴된다는 표현은 쓰지 않는다.
4. 분량은 A4 반 페이지(약 400자) 이내로 한다.
5. 작성 후 사람이 확인해야 할 항목을 별도로 3가지 나열한다.

※ 대괄호 부분을 상황에 맞게 바꿔서 쓰세요. 받은 답은 그대로 쓰지 말고 사실 확인을 거치세요.

🧪 직접 해보기

  • 국토지리정보원 브이월드(Vworld) 지도 서비스에서 '산사태 위험지도' 레이어를 켜고, 내가 사는 지역의 등급을 직접 확인해 본다.
  • QGIS에서 공개 DEM 데이터를 내려받아 경사 분석을 실행하고, 결과 색상이 지형과 눈으로 봤을 때 일치하는지 위성영상과 겹쳐 비교해 본다.
  • 같은 지역에 대해 로지스틱 회귀와 랜덤 포레스트를 각각 돌려 결과 지도가 어떻게 달라지는지 비교하며 모델 선택의 영향을 직접 느껴본다.

❓ 자주 묻는 질문

Q. 산사태 위험지도에서 '1등급'이 나오면 무조건 위험한 건가요?
A. 1등급은 동일한 조건의 지역 중 상대적으로 취약성이 높다는 뜻이지, 반드시 산사태가 발생한다는 예언이 아닙니다. 등급은 모델이 사용한 데이터와 기준에 따라 달라질 수 있으므로, 지도를 만든 기관의 메타데이터(사용 데이터, 기준 연도, 검증 지표)를 함께 확인하는 것이 중요합니다.

Q. 머신러닝 모델이 통계 모델보다 항상 더 정확한가요?
A. 어떤 모델이 더 정확한지는 데이터 품질, 지역 특성, 학습 샘플 수에 따라 달라집니다. 머신러닝 모델은 복잡한 패턴을 잘 잡지만 결과를 설명하기 어렵고, 통계 모델은 해석이 쉽지만 비선형 관계를 놓칠 수 있습니다. 두 접근법의 장단점을 이해하고 목적에 맞게 선택하는 것이 바람직합니다.

Q. 강우 데이터 없이 경사와 지질 정보만으로도 위험지도를 만들 수 있나요?
A. 가능은 하지만 정확도가 떨어질 수 있습니다. 산사태는 강우가 방아쇠 역할을 하는 경우가 많아, 강우 인자를 제외하면 같은 지형에서도 발생 시점을 반영하지 못합니다. 보유한 데이터 종류에 따라 인자를 조합하되, 모델 검증 지표로 결과의 신뢰성을 반드시 점검해야 합니다.

산사태 위험지도는 수십 년의 지형·지질 정보와 기상 기록을 수치로 압축한 결과물입니다. 그 지도를 보는 사람이 확률과 예언의 차이를 이해하고 있어야 올바른 대피 계획과 예산 결정으로 이어질 수 있습니다. 모델이 틀릴 수 있다는 것을 알면서도 최선의 판단을 내리는 것, 그것이 재난안전 실무의 핵심입니다. 다음 편에서는 이렇게 만들어진 위험지도를 대피로 계획이나 주민 대피 의사결정에 어떻게 연결하는지, 공간 네트워크 분석의 기초를 함께 살펴보겠습니다.

GeoAI 기초 시리즈 13편 · 전체 43편


재난안전과 GeoAI 이야기를 더 보고 싶다면 아래 채널도 함께 보세요.

📌 바로가기

GeoAI 위성·드론 영상 분석, 재난대응 산업이 뜬다 | 재난안전과 GeoAI

GeoAI 위성·드론 영상 분석 기술이 재난대응 산업의 중심으로 떠오르고 있다. 누리호 5차 발사, 위성·드론 영상 분석 스타트업, ArcGIS 경사지 위험 분석 서비스까지 오늘의 관련 소식을 정리했다. 📌 3줄 요약 아크넥사는 위성·드론 영상을...