공간 자기상관을 다루는 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 커널을 적용하며, 좌표의 투영체계는 일관되어야 한다.

아니오lag 우세error 우세혼합/애매아니오W 연결성 부족수렴 실패대역폭 극단입력: 공간 데이터, 설계행렬 X,후보 W 집합, 좌표기본 OLS 적합Moran's I/Geary's C로 잔차공간자기상관 진단잔차 자기상관 존재?OLS 유지, 가정 재확인LM-lag/LM-error robust검정어느 검정이 유의/우세?SAR 추정(ML/GM)SEM 추정(ML/GM)SDM/SARAR 검토후속 진단: 잔차 Moran's I,영향분해비정상성 의심/증거?(Koenker-BP, Monte Carlo)GWR: 대역폭 선택(CV/AICc),적합평가: 국지 R², 국지 계수유의성, 과적합 점검최종 모형 채택대책: k 증가/거리 임계 확대, 표준화옵션: 초기값 조정, 근사로그결정식, 희소 선형대수대책: 커널 변경, CV 범위 확장,포인트 병합

적합 후에는 무엇을 확인하는가

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은 직접·간접·총효과를 함께 보고해 정책 해석의 일관성을 확보한다.

공간 통계공간 자기상관SARSEMGWR