GIS

elapid(엘라피드): Python용 종 분포 모델링 도구 소개

유병혁 2023. 7. 22. 19:36

안녕하세요? 이번 글은 Python용 종 분포 모델링(SDM: Species Distribution Modeling) 도구, elapid(엘라피드)에 관해 간략히 소개해 보겠습니다.

 

elapid의 개발자는 플래닛 랩스 지구관측연구소(Earth Observation Lab, Planet Labs)와 스탠포드대학교 보전생물학센터(Center for Conservation Biology, Stanford University) 소속의 크리스토퍼 B. 앤더슨(Christopher B. Anderson)님입니다.

 

elapid: Species distribution modeling tools for Python

Anderson, C. B., (2023). elapid: Species distribution modeling tools for Python. Journal of Open Source Software, 8(84), 4930, https://doi.org/10.21105/joss.04930

joss.theoj.org

 

종 분포 모델링(SDM: Species distribution modeling)

종 분포 모델링(SDM: Species Distribution Modeling)은 Grinellean niche concept(그리넬리언 니치 개념)을 기반으로 합니다. 그리넬리언 치니는 한 종(species)의 개체가 생존하고 번식할 수 있는 환경 조건(environmental condition)은 시공간적으로 해당 종의 분포(distribution)를 제한한다는 개념입니다.

 

이러한 모델에 대한 입력은 대개 공간적으로 명시적인 종 발생 기록(spatially-explicit species occurrence records)과 기후, 지형, 토지 피복 또는 수문학에 대한 정보를 포함할 수 있는 일련의 환경 공변량(environmental covariates)입니다.

 

이러한 종-환경 상호 작용을 정량화하고 매핑하기 위해 많은 모델링 방법이 개발되었지만 a) 적절한 통계 모델링 루틴과 b) 이러한 모델에 적합, 적용 및 요약할 데이터를 준비하는데 필요한 전체 지리공간 분석 지원을 모두 포함하는 소프트웨어 시스템은 거의 없습니다.

 

elapid(엘라피드)

Python을 위한 현대적인 SDM(Species Distribution Modeling) 도구. 그림 출처: https://pypi.org/project/elapid/

elapid는 지리공간 분석 및 종 분포 모델링 패키지입니다. 임의의 포인트 샘플을 선택하고, 일치하는 래스터 데이터로 포인트 위치에 주석을 달고, 구역 통계로 폴리곤 내부의 래스터 값을 요약하기 위해 벡터와 래스터 데이터 간의 인터페이스를 제공합니다.

 

피처 차원 증가(increasing feature dimensionality), 상호작용 항 정량화(quantifying interaction terms) 및 단위 척도 정규화(normalizing unit scales)를 위한 일련의 공변량 변환 루틴(covariate transformation routines)을 제공합니다.

 

elapid 무한 가중치 로지스틱 회귀(infinitely weighted logistic regression)를 사용하여 널리 사용되는 Maxent SDM의 Python 구현을 제공합니다. 또한 sklearn과 같은 최신 머신러닝 패키지의 소프트웨어 디자인 패턴과 일치하도록 작성된 표준 Niche Envelope Model도 포함되어 있습니다.

 

또한 학습/시험 데이터를 공간적으로 분할하고 지리적으로 명시적인 샘플 가중치를 계산하는 방법을 제공하여 사용자가 모든 모델에 공간 컨텍스트를 추가할 수 있습니다. elapid현대적인 SDM 패키지(contemporary SDM package)로 설계되었으며 과거의 우수사례를 기반으로 하고 차세대 생물다양성 모델링 워크플로를 지원하고자 합니다.

 

elapid(엘라피드)의 장점

elapid의 주요 과학적 기여는 Maxent SDM, 비방을 받아온 만큼 인기있는 모델 및 소프트웨어 시스템을 확장하고 수정하는 것입니다. 2006년에 처음 공개된 Maxent는 최근 급증한 유형의 종 발생 데이터와 함께 작동하도록 설계된 출현-전용 모델(presence-only model)이기 때문에 여전히 관련성이 있습니다.

 

출현 전용 모델(presence-only models)은 모델이 적합 및 해석되는 방식을 변경하는 출현/비출현(presence/absence) 대신 출현/배경(presence/background, 1/0)으로 이진 분류 모델(binary classification models)을 공식화(formulate)합니다.

배경 포인트(background points)는 종이 발견될 수도 있는 경관의 공간적 무작위 샘플(spatially-random sample)이며, 종 발생 데이터와 동일한 수준의 노력과 편향으로 샘플링해야 합니다.

 

출현/배경 모델(Presence/background models)은 종의 범위 내 어디에서나 동일하게 발견될 가능성이 있다는 귀무 기대값(null expectation)를 가정합니다. 종이 출현하는 곳과 전체 경관 사이의 환경 조건의 차이는 니치 선호도(niche preferences)를 나타냅니다. 그런 다음 상대적 서식지 적합성(relative habitat suitability)은 이 지역의 조건에 대한 상대적 빈도 분포(relative frequency distributions)의 차이를 기반으로 결정됩니다.

 

출현 전용 모델(presence-only models)은 처음부터 문제가 되는 비출현 데이터(absence data)를 찾는 부담을 줄여주지만 배경 포인트(background points)를 정확하게 선택해야 하는 부담을 증가시킵니다.

 

elapid는 배경을 샘플링(sampling)하는 여러 방법을 포함합니다. 포인트는 범위 지도 또는 생태 지역 범위와 같은 폴리곤 내에서 균일하게 샘플링할 수 있습니다. 래스터의 샘플링 포인트는 전체 범위에 걸쳐 균일하게 수행되거나 유효하고 마스킹되지 않은 데이터가 있는 픽셀에서만 수행될 수 있습니다.

편향 래스터(bias rasters) 작업도 지원됩니다. 값이 단조롭게 증가하는 모든 래스터를 샘플 확률 맵(sample probability map)으로 사용할 수 있으므로 픽셀 값이 더 높은 위치에 샘플이 그려질 확률이 높아집니다. Niche Envelope Model(니치 엔벨로프 모델)의 중요한 역할 중 하나는 편향 지도(bias maps)을 생성하여 종이 발생하는 넓은 기후 엔벨로프 내에서만 배경 포인트가 샘플링되도록 하는 것입니다. 대상-그룹 편향 샘플링 방법(target-group bias sampling method)은 또한 샘플 변향을 효과적으로 수정하는 것으로 나타났습니다.

Maxent에 대한 일반적인 비판은 Maxent가 공간적으로 명시된 데이터에 의존하지만 실제로는 공간 모델(spatial model)이 아니라는 것입니다.

 

공변량 데이터(covariate data)는 공간적으로 인덱싱되고 추출되지만 위치, 거리 또는 포인트 밀도를 기반으로 하는 모델 용어가 없으며 모든 샘플이 독립적인 측정값(independent measurements)으로 처리됩니다. 일부는 공간적 자기상관(spatial autocorrelation)의 많은 고민이 일반적으로 과장되었다고 주장하지만, 공간 데이터는 신중하게 다루어야 하는 독특하고 매우 흥미로운 속성을 가지고 있습니다.

 

비독립성(non-independence)은 기본 생태 패턴 및 프로세스(예: 분산, 종 상호작용, 기후 공분산)와 데이터 수집 편향(예: 많은 종들이 일반적으로 덜 파편화된 서식지를 선호함에도 불구하고, 발생기록은 도로 또는 트레일 근처에서 일반적임)에 의해 구동되는 공간 데이터(spatial data)에 내재되어 있습니다.

 

공간 모델(spatial models)에는 공간적으로 특정한 모델링 패러다임, 특히 인근 샘플의 독립성 부족 또는 샘플 밀도의 공간 편향을 처리하는 방법이 포함되어야 합니다. 모델 기술을 정량화하고 이해하려면 이러한 공간 자기상관을 설명해야 하며 elapid에는 이를 위한 몇 가지 방법이 포함됩니다.

 

체커보드 교차 검증(checkerboard cross-validation)은 공간적으로 군집된 포인트에 의해 도입된 편향을 완화할 수 있습니다. 공간적으로 명시적인 k-폴드 분할(k-fold splits)을 생성하면 모델 예측이 새 영역으로 얼마나 잘 일반화되는지 정량화할 수 있습니다. 여기서 k-폴드 분할은 x/y 위치를 기반으로 하는 독립적인 클러스터입니다.

또한 인근 지점의 밀도를 기반으로 샘플 가중치(sample weights)를 조정하면 샘플 밀도가 높은 영역에서 자기상관된 환경 피처에 과적합될 위험이 줄어듭니다. 이는 밀도 의존적 비독립성(density-dependent non-independence)의 영향을 완화하는 데 특히 중요합니다.

이러한 방법은 elapid에서 구현된 SDM에만 국한되지 않습니다. 다른 머신러닝 모델에도 공간 컨텍스트를 추가할 수 있습니다. 지리적 샘플 가중치(Geographic sample weights)는 랜덤 포레스트(random forests), 부스트 회귀 트리(boosted regression trees), 일반화된 선형 모델(generalized linear models) 및 공간 분포를 예측하는 데 일반적으로 사용되는 그밖에 접근 방식을 적합하는 데 사용할 수 있습니다.

elapid는 모델 기술을 향상시키기 위해 공변량 피처 공간을 확장할 수 있는, Maxent에서 사용되는 변환을 포함하여 일련의 피처 변환(feature transformers)도 포함합니다.

 

elapid(엘라피드)의 설치방법

elapid의 이름은 A Biogeographic Analysis of Australian Elapid Snakes(H.A. Nix, 1986)에 대한 오마주로, 해당 논문은 종 분포 모델링에 사용하는 필수 생물기후 변수(bioclimatic variables)를 정의한 것으로 널리 알려져 있습니다.

Python을 위한 현대적인 SDM(Species Distribution Modeling) 도구. 그림 출처: https://earth-chris.github.io/elapid/

 

elapid

Home Contemporary species distribution modeling tools for python. Documentation: earth-chris.github.io/elapid Source code: earth-chris/elapid Introduction elapid is a series of species distribution modeling tools for python. This includes a custom implemen

earth-chris.github.io

elapid는 pypi(https://pypi.org/project/elapid/)에서 액세스할 수 있습니다. 지리공간 종속성(geospatial dependencies) 패키지들을 설치한 후, elapid를 설치를 진행해 줍니다. 비공식 소스에서 휠(wheels)을 설치하는 pipwin을 사용하여 일부 주요 지리공간 패키지의 Windows 빌드를 얻을 수 있습니다. glmnet 설치는 선택사항이지만 권장됩니다. 설치 설명서(Installation guide)는 다음 링크를 참고하시면 되겠습니다: https://earth-chris.github.io/elapid/install/.

pip install wheel pipwin
pipwin install numpy
pipwin install pandas
pipwin install shapely
pipwin install gdal
pipwin install fiona
pipwin install pyproj
pipwin install six
pipwin install rtree
pip install geopandas
pip install elapid

여기까지 Python용 종 분포 모델링(SDM: Species Distribution Modeling) 도구, elapid에 관해 간략히 소개해 봤습니다. 다음 글에서는 elapid 사용 방법을 정리해 보겠습니다.