Maiquetia 지진 붕괴 건물 평가 리포트

Region: Maiquetia, Venezuela · Post-event: 2026-06-27 (SkySat) · Pre-event: 2026-05-21 / 2026-02-11 · Generated: 2026-07-01T04:42:13.385322Z

전체 분석 건물
30,558
OSM 폴리곤, 기준 TIF 완전 포함 + 최소 1장 pre-TIF 데이터 존재
완전 파괴 (Full destruction)
151
0.49% of total · GBT v7c ≥ 0.5
부분 파괴 / 영향 (Partial)
2,742
8.97% of total · LR v7c ≥ 0.618 & GBT < 0.5
영향 적음 (Minor / none)
27,665
90.53% of total

Executive summary

SkySat 위성영상(0.5 m, 4밴드)에 기반한 이 리포트는 총 30,558개의 OSM 건물 폴리곤을 세 단계로 분류합니다: 완전 파괴 151개 (0.49%), 부분 파괴/영향 2,742개 (8.97%), 영향 적음/없음 27,665개 (90.53%). 두 개의 상호 보완적 분류기 — Gradient Boosting Trees(GBT, 완전 파괴 담당)와 Logistic Regression(LR, 확장 감지 담당) — 이 v7 파이프라인 안에서 결합되어 검증(hand-labeled 86 damaged + 75 intact)과 약한 감독(MS AI for Good 라벨 필터링) 을 조합해 학습되었습니다.

모델은 정직한 5-fold 교차검증에서 GBT AUC 0.7633, LR AUC 0.8357, LR PR-AUC 0.8766를 기록했으며, 관측각도/기하정합 오차를 보정하는 v2 파이프라인과 사람 검수 hard-negatives 75개 도입을 통해 이전 버전 대비 PR-AUC를 10배 이상 개선했습니다.

Methodology

1. 데이터 소스

2. 파이프라인 개요

  1. Polygon-TIF 매칭: 폴리곤이 기준 TIF 유효 데이터 영역에 완전 포함되고, 최소 1장의 pre-TIF에 겹치는 것만 분석 대상 (31,008 → 30,558 v2-analyzable)
  2. 기하 보정 (v2): 각 폴리곤에 대해 phase correlation으로 pre-post 서브픽셀 정렬 → 1 m inward buffer로 벽/경계 제거 → Otsu 기반 실제 건물 segmentation → 관측각도 차이로 인한 로프 shift 완화
  3. Feature 추출: 4밴드 평균, 밝기, NDVI/NDWI/NDYI, 밴드 비율(G/R, NIR/R), GLCM 텍스처(std, gradient, contrast, homogeneity, energy) — pre와 post에 대해 각각, 그리고 change ratio/difference
  4. 학습: MS의 Planet-confirmed 양성 필터링(Vantor-only ~2,600 FP 제거) + MS==0 & num_obs≥2 & unc==0 hard-negative pool(6,246) + 사람 라벨 (86 pos + 75 neg, w=5) → LR (class_weight=balanced) + GBT (200 트리, depth=3) 학습, 5-fold CV
  5. 임계값 선택: LR은 Youden's J on OOF (0.618), GBT는 hand-pos 90% recall 기준(0.5)
  6. 3-tier 분류: GBT ≥ 0.5 → 완전 파괴, LR ≥ 0.618 & GBT < 0.5 → 부분/영향, 나머지 → 영향 적음

3. 두 분류기의 상호보완적 역할

모델주 용도특성임계값Flagged
GBT (v7c)완전 파괴 판정비선형 결정, sparse score → 극소수만 강한 양성0.5151
LR (v7c)부분/영향 감지선형/보정된 확률, 넓은 score 분포 → 경계 케이스 잡기 좋음0.6182,893

GBT는 학습된 결정 트리들이 특정 조건 조합을 만족할 때만 강한 양성 점수를 부여합니다. 이는 확신하는 완전 파괴 케이스에 이상적이며, 경계 케이스는 자연스럽게 낮게 나옵니다. 반대로 LR은 각 feature의 선형 가중합으로 부드러운 확률을 산출하므로 부분 파괴/영향처럼 완전 파괴 신호는 약하지만 여러 지표가 미묘하게 이상한 케이스를 잡아냅니다. 두 모델을 합쳐 사용하면 완전 파괴는 GBT가 담당하고, 부분 영향은 LR이 커버합니다.

4. 사용된 v7 최종 feature (6개)

  1. v2_post_std_abs — post 영상 픽셀 표준편차 (붕괴 시 표면 거칠어짐)
  2. v2_post_grad_abs — post Sobel gradient 평균 (엣지/파편)
  3. v2_d_grad_ratio — post/pre gradient 비율 (지붕 파괴로 엣지 증가)
  4. v2_post_contrast_abs — post GLCM contrast
  5. v2_d_BRIGHT_ratio — post/pre 4-band 평균 비율 (콘크리트/잔해 노출)
  6. v2_d_homogeneity_diff — GLCM homogeneity 변화 (표면 균일성 변화)

Results

카테고리별 요약

카테고리정의Flagged비율Hand-damaged 포함Hand-intact 포함
완전 파괴GBT ≥ 0.51510.49%86/860/75
부분 파괴 / 영향LR ≥ 0.618 AND GBT < 0.52,7428.97%0/868/75
영향 적음나머지27,66590.53%0/8667/75

손해 규모 추정 (건물 단위)

전체 30,558개 건물 중 2,893개 (9.47%)가 손해 흔적이 감지되었습니다. 이 중 151개 (0.49%)는 완전 파괴 신호, 2,742개 (8.97%)는 부분 파괴 또는 영향으로 분류되었습니다.

Score 분포

GBT score 분포는 오른쪽으로 매우 편중되어 있어 대다수 폴리곤은 0.01 이하의 매우 낮은 점수를 받고, 0.5를 넘는 것은 소수의 매우 확신하는 케이스뿐입니다. 반면 LR score는 부드럽게 분포되어 부분 영향 폴리곤(~0.3~0.6)까지 잡을 수 있습니다.

카테고리별 폴리곤 수

Feature 값의 카테고리별 차이

MS AI for Good 라벨과의 대조

MS의 damage_pct_0m 값별로 우리 카테고리 분포를 확인. MS damage>0.5인 폴리곤 대부분이 완전 파괴 또는 부분 영향 카테고리에 속함. 반대로 MS==0인데 완전 파괴 카테고리로 잡힌 폴리곤은 MS가 놓친 damage일 가능성이 큼 (hand-label 검증 시 확인됨).

Validation

Hand-label 검증

Hand-labeled 86 damaged buildings and 75 hand-confirmed intact buildings were used to validate the categorisation. Note that these labels were also used during training, so the in-sample agreement is optimistic; honest generalisation is measured by 5-fold CV.

MetricValue
Honest 5-fold CV LR AUC0.8357
Honest 5-fold CV GBT AUC0.7633
Honest 5-fold CV LR PR-AUC0.8766
Honest 5-fold CV GBT PR-AUC0.81
완전 파괴에 포함된 hand-damaged86/86
완전 파괴에 포함된 hand-intact (FP)0/75
부분/영향에 추가된 hand-damaged0/86
영향 적음으로 분류된 hand-damaged (FN)0/86

Caveats and limitations

Reproduce / Apply to a new region

# 1) polygon-TIF matching + spectral means
python extract_overlap_means.py
# 2) v2 geometry-aware feature extraction
python extract_texture_v2.py
# 3) merge with MS AI4Good labels if available
python merge_ms_labels.py
# 4) run v7 classifier
python analyze_damage_v7.py
# 5) or reuse existing model:
from joblib import load
m = load('analysis_v7/damage_model_v7.joblib')
X = your_polygon_features[m['features']]
Xs = (X - m['scaler'].mean_) / m['scaler'].scale_
proba_lr = 1/(1+np.exp(-(Xs @ m['lr'].coef_[0] + m['lr'].intercept_[0])))
proba_gbt = m['gbt'].predict_proba(Xs)[:,1]
category = np.where(proba_gbt >= m['threshold_gb'], 'full',
           np.where(proba_lr >= m['threshold_lr'], 'partial', 'minor'))

Deliverables


Generated 2026-07-01T04:42:13.385322Z · Rapid mapping — Maiquetia earthquake response