공간 자기상관을 다루는 SAR·SEM·GWR 모델링
공간 가중행렬 설계부터 SAR·SEM·GWR 선택, 진단과 영향 해석까지 공간 자기상관을 반영하는 회귀 모델링 방법을 정리한다.
2026-08-14 · 최초 발행 2024-04-29
공간 데이터에서는 인접 지역이나 가까운 관측치가 서로 닮는 경우가 흔하다. 이 구조를 무시하면 OLS 회귀의 독립성·등분산 가정이 훼손될 수 있다. SAR, SEM, GWR은 공간 자기상관과 공간 비정상성을 각각 다른 방식으로 모델에 반영한다.
W를 먼저 설계해야 하는 이유
공간 가중행렬 W는 관측치 사이의 이웃 관계를 수치로 표현한다. 인접 관계는 rook·queen 방식으로 정의할 수 있고, 거리 임계치나 k-NN도 사용할 수 있다. 추정의 안정성을 위해 행 표준화(row-standardization)를 적용한다.
W는 단순한 전처리 산출물이 아니다. 선택한 W에 따라 모형 성능과 추론이 달라질 수 있으므로 연결성(connectivity), 희소성(sparsity), 분석 스케일과의 적합성을 확인해야 한다. 거리 기반 W를 쓸 때 스케일이 맞지 않으면 거리 표준화와 투영 좌표체계를 사용한다. 연결 컴포넌트가 분리되면 k를 늘리거나 임계거리를 확장해 연결성을 확보한다.
공간 구조를 반영하는 회귀 모형
SAR(Spatial Autoregressive Model)은 종속변수의 공간 지연항을 포함한다.
y = ρ Wy + Xβ + ε, ε ~ N(0, σ²I)
인접 관측치로 파급되는 영향이 존재하므로, 계수는 직접효과·간접효과·총효과로 나누어 해석해야 한다.
SEM(Spatial Error Model)은 오차항의 공간 상관을 모형화한다.
y = Xβ + u, u = λWu + ε
누락 변수나 측정오차처럼 공간적으로 얽힌 교란을 흡수하는 데 쓰이며, 회귀계수의 전역적(글로벌) 영향 추정에 초점을 둔다.
GWR(Geographically Weighted Regression)은 위치마다 다른 회귀계수를 추정한다.
y_i = β0(u_i,v_i) + Σ βk(u_i,v_i) x_ik + ε_i
관계의 공간적 이질성, 즉 비정상성을 표현할 수 있지만 커널과 대역폭 선택에 민감하다.
SLX, SDM, SARAR 같은 확장 모형도 있다. 이들은 정책변수의 공간 외부성을 분리하거나 내생성·경계효과를 보정할 때 활용할 수 있다.
진단 결과를 모형 선택으로 연결하기
분석은 OLS 적합에서 시작한다. 잔차 Moran’s I와 Geary’s C를 계산해 유의한 양(+)의 자기상관이 남는지 확인한다. 공간 패턴이 확인되면 LM-lag, LM-error와 robust 검정을 함께 본다.
lag만 유의하면 SAR을, error만 유의하면 SEM을 검토한다. 둘 다 유의하면 더 큰 robust 통계량을 기준으로 선택하거나 SDM을 고려한다. Koenker-BP, 공간 Chow, GWR 계수의 Monte Carlo 변동성 검정은 비정상성 판단에 사용한다. 이 증거가 유의하면 GWR을 후보에 포함한다.
SAR과 SEM은 ML(최우추정) 또는 GM/IV로 추정할 수 있다. 대규모 데이터에서는 희소행렬, Chebyshev 근사, 병렬화가 계산 가속에 쓰인다. GWR은 CV/AICc로 대역폭을 선택하고 gaussian 또는 bisquare 커널을 적용하며, 좌표의 투영체계는 일관되어야 한다.
적합 후에는 무엇을 확인하는가
SAR에서는 LeSage–Pace 영향분해로 직접·간접·총효과를 보고하고, 잔차 Moran’s I가 소거되었는지 확인한다. SEM은 λ의 크기와 유의성으로 교란의 공간 구조를 해석한 뒤 잔차의 독립성과 등분산성을 다시 점검한다.
GWR 결과는 국지 계수맵, 국지 R², 유의성 지도로 읽는다. 다중검정 보정(FDR)과 가장자리(edge) 효과를 함께 고려해야 한다.
| 모델 | 성능 | 확장성 | 일관성 | 안정성 | 운영 편의 |
|---|---|---|---|---|---|
| SAR | 강한 외부성에서 우수, 간접효과 추정 강점 | 희소 W 시 대용량 가능 | W 민감, 영향분해로 정책 일관성 | 추정 수렴 이슈 가능(ρ 경계) | 구현 풍부(PySAL, spatialreg), 해석 요구도 높음 |
| SEM | 교란 지배 시 견고, 계수 편향 완화 | SAR 유사 | 누락 변수 존재에도 회귀계수 일관성 | λ 과대/과소추정 주의 | 구현 용이, 보고·해석 간결 |
| GWR | 비정상성에서 설명력 향상 | 포인트 대규모 시 비용 큼 | 데이터 스케일·대역폭 민감 | 과적합·가장자리 효과 주의 | 시각화 강점, 결과 관리 복잡 |
분석 대상에 따른 해석의 초점
부동산 가격 예측에서는 OLS 후 잔차 Moran’s I가 양(+)이고 robust LM-lag가 유의하면 SAR을 적합해 인근 거래의 간접효과를 해석할 수 있다. 이 경우 MAE 10~20% 개선과 공간 잔차 제거가 기대된다.
감염병 발생률 분석에서 robust LM-error가 유의하면 SEM으로 누락 요인의 공간적 교란을 흡수할 수 있다. λ 감소 추세는 방역 개입의 배경요인 통제 효과를 평가하는 단서가 된다.
대기오염 농도처럼 비정상성이 뚜렷한 경우에는 GWR로 배출원과 지형 영향의 공간적 가변성을 시각화할 수 있다. 국지 계수가 높은 지역을 규제 대상으로 삼는 방식이다. 교통사고 위험지도는 SDM/SARAR로 도로망 외부성을 모델링하고, 간접효과로 인접 링크 영향을 정량화할 수 있다. 상권 매출 분석에서는 GWR이 인구·접근성 가중치의 지역별 탄력성 추정과 입지 전략 최적화에 쓰인다.
자기상관 강도와 W 품질에 따라 RMSE는 5~25% 개선될 수 있다. 잔차 Moran’s I p-value > 0.1을 확보하면 Spatial confounding에 따른 허위 양성을 줄이는 데 도움이 된다. SAR 영향분해는 간접효과의 신뢰구간을 제공해 정책 파급 추정의 불확실성을 축소한다. GWR은 지역별 맞춤 전략과 설명가능성을 높이는 수단이 될 수 있다.
Python과 R로 구성하는 최소 재현 환경
전제조건
- Python: 3.10+, libpysal 4.10+, esda 2.5+, spreg 1.3+, mgwr 2.1+
- R: 4.3+, sf 1.0+, spdep 1.2+, spatialreg 1.3+, GWmodel 2.3+
Python (PySAL, MGWR)
# pip install libpysal esda spreg mgwr geopandas
import geopandas as gpd
from libpysal.weights import Queen, KNN
from esda.moran import Moran
from spreg import OLS, ML_Lag, ML_Error
from mgwr.gwr import GWR, Sel_BW
import numpy as np
gdf = gpd.read_file("data.shp").to_crs(3857)
y = gdf["y"].values.reshape((-1,1))
X = gdf[["x1","x2","x3"]].values
W = Queen.from_dataframe(gdf).to_WSP() # 행 표준화 자동
# 기본 OLS + 공간 진단
ols = OLS(y, X, name_y="y", name_x=["x1","x2","x3"], w=W, spat_diag=True, moran=True)
print(ols.summary)
# SAR
sar = ML_Lag(y, X, w=W, name_y="y", name_x=["x1","x2","x3"])
print(sar.summary)
# SEM
sem = ML_Error(y, X, w=W, name_y="y", name_x=["x1","x2","x3"])
print(sem.summary)
# GWR (좌표 필요)
coords = np.array(list(zip(gdf.geometry.x, gdf.geometry.y)))
bw = Sel_BW(coords, y, X, spherical=False).search(bw_min=20)
gwr = GWR(coords, y, X, bw).fit()
print(gwr.summary())
R (spdep, spatialreg, GWmodel)
# install.packages(c("sf","spdep","spatialreg","GWmodel"))
library(sf); library(spdep); library(spatialreg); library(GWmodel)
g <- st_read("data.shp")
g <- st_transform(g, 3857)
nb <- poly2nb(g)
lw <- nb2listw(nb, style="W")
# OLS + Moran's I + LM tests
fm <- y ~ x1 + x2 + x3
ols <- lm(fm, data=st_drop_geometry(g))
moran.test(residuals(ols), lw)
lm.LMtests(ols, lw, test=c("LMlag","LMerr","RLMlag","RLMerr"))
# SAR / SEM
sar <- lagsarlm(fm, data=g, listw=lw, method="eigen")
sem <- errorsarlm(fm, data=g, listw=lw, method="eigen")
summary(sar); summary(sem)
# GWR
coords <- st_coordinates(st_centroid(g))
bw <- bw.gwr(fm, data=g, approach="AICc", kernel="bisquare", adaptive=TRUE, coords=coords)
gwr <- gwr.basic(fm, data=g, bw=bw, kernel="bisquare", adaptive=TRUE, coords=coords)
gwr$GW.diagnostic
좌표계는 통일하고 투영 좌표를 권장한다. W의 연결성을 점검한 뒤 행 표준화 기본값을 채택한다. GWR은 CV/AICc 대역폭과 FDR 보정으로 과적합을 관리하고, SAR은 직접·간접·총효과를 함께 보고해 정책 해석의 일관성을 확보한다.