오픈 모델로 마을의 생태 빙고 카드를 들고 나들이를 가봤습니다. 16가지 중 2가지를 찾았습니다.
요약
이 글은 지역 생태 데이터를 활용하여 'Nature Bingo'라는 야외 활동 아이디어를 제시합니다. 오픈 가중치 모델(open-weight model)을 이용해 10년간의 iNaturalist 기록 데이터로 마을 근처에서 발견 가능성이 높은 16가지 항목을 선정했습니다. 이 카드는 지역 주민들이 실제로 나들이를 즐기며 생태학적 관찰 활동에 참여하도록 유도하는 것이 핵심입니다.
핵심 포인트
- 오픈 가중치 모델(open-weight model)로 데이터 기반의 Bingo 카드 생성
- iNaturalist 기록 데이터를 활용하여 지역별 발견 가능성 예측
- 기술을 이용해 마을 주민들의 야외 생태 관찰 활동 장려
이 글은 Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass에 제출하는 내용입니다.
제가 만든 것 (What I Built)
Hawkesbury는 오타와 강변에 있는 약 만 명 규모의 마을입니다. 이 주변으로 iNaturalist에는 총 약 3,000개의 연구 등급 기록이 있습니다. 기록된 모든 10월 동안, 마을에서 10km 이내에서 가장 많이 기록된 종은 네 번 관찰되었습니다.
그 숫자가 바로 문제입니다. 10월에 누군가를 야외로 데려나갈 명백한 방법은 지난 10월에 사람들이 근처에서 무엇을 봤는지 목록을 건네주는 것입니다. Montreal에서는 그 목록이 스스로 완성됩니다. 하지만 Hawkesbury에서는 우연히 한두 사람이 사진으로 찍은 것이 전부이며, 네 번의 관찰만으로는 아무것도 순위를 매길 수 없습니다.
Nature Bingo는 이번 10월에 마을 근처에서 발견할 가능성이 가장 높은 16가지 항목으로 구성된 카드입니다. 카드를 펼치고 휴대폰을 내려놓은 뒤, 가서 그것들을 찾아봅니다. 하나를 찾으면 해당 칸을 터치하여 잉크로 찍고 시간과 함께 스탬프를 받습니다. 종이 인쇄도 할 수 있어 아예 휴대폰 없이 나갈 수도 있습니다. 이 카드가 화면이고, 산책 자체가 핵심입니다.

작은 마을을 위한 요령은 이 카드가 이웃에게서 아이디어를 빌려온다는 것입니다. 이 카드는 Ottawa와 Montreal 사이의 48개 마을에 걸친 10년간의 10월 데이터를 학습한 오픈 가중치 모델(open-weight model)에 의해 순위가 매겨지므로, 조용한 마을도 지역 전체가 아는 것을 바탕으로 할 수 있습니다.
데모 (Demo)
직접 사용해 보세요: naturebingo.vercel.app (48개 마을 중 아무 곳이나 선택하거나, Hawkesbury를 유지하세요).
또한 51초 버전도 있습니다.
코드 (Code)
GitHub logo JonathanSolvesProblems / nature-bingo
10월에 당신의 마을 근처에서 가장 많이 발견될 가능성이 높은 16가지 항목으로 구성된 빙고 카드입니다. 오픈 가중치 모델인 TabPFN을 iNaturalist 기록 데이터로 노트북 GPU에서 순위화했습니다.
자연 빙고 (Nature Bingo)
이번 10월에 당신의 마을 근처에서 가장 많이 발견될 가능성이 높은 16가지 항목으로 구성된 빙고 카드입니다. 이 카드를 열어 휴대폰을 치우고, 직접 찾아다니세요. 찾았을 때 해당 칸을 누르거나 카드를 인쇄하세요.
앱 열기 · 데모 영상 · 쇼츠 · 작성 글 · iNaturalist에서의 나의 산책 기록
DEV Hacktoberfest 오픈 소스 AI 챌린지, 1주차: 잔디밭 밟기(Touch Grass)를 위해 제작되었습니다.
왜 작은 마을인가요?
'지난 10월에 이곳 근처에서 무엇이 발견되었는지' 목록은 도시에서는 효과적입니다. 하지만 작은 마을에서는 그렇지 않습니다. 온타리오주 호크스버리(Hawkesbury) 주변에는 iNaturalist 기록이 총 약 3,000건이며, 기록된 모든 10월 동안 가장 많이 기록된 종의 출현 횟수는 네 번에 불과합니다.
그래서 이 카드는 이웃에게서 데이터를 가져옵니다. 오픈 가중치 테이블 모델인 TabPFN은 오타와(Ottawa)와 몬트리올(Montreal) 사이의 48개 마을에 걸친 10년간의 10월 데이터(2016년~2025년)를 학습합니다. 각 마을의 후보 종별로 이를…
이 게시물에 있는 모든 숫자는 레포지토리(repo) 안에 있습니다: results/backtest.json의 백테스트, results/backtest_bands.json의 마을별 기록 분할, 그리고 data/walks.json의 산책 기록입니다.
제가 이것을 만든 방법
제가 이것을 만든 방법
데이터. 저는 Ottawa와 Montreal 사이의 48개 작은 마을에 대해 2016년부터 2025년까지 매년 iNaturalist 연구 등급 종(species) 개체수를 수집했습니다. 이 데이터는 다음 세 가지 기준을 따릅니다: 마을 주변 10km 내에서 10월, 어느 달이든 10km 내에서, 그리고 10월에 50km 내에서 기록된 것입니다. 각 마을과 연도별로, 해당 지역에서 가장 많이 기록된 상위 300종이 후보가 되며, (마을, 연도, 종)의 약 86,000개 학습 행(training rows)이 생성됩니다. 이 데이터는 오직 이전 연도의 활동으로만 설명됩니다: 이곳에서 얼마나 자주 기록되었는지, 지역 전체에서 얼마나 자주 기록되었는지, 몇 번의 별도 연도에 걸쳐 기록되었는지, 지역적으로 계절성이 어떤지, 그리고 전반적으로 사람들이 얼마나 많이 출사(logging)를 했었는지 등입니다.
모델. TabPFN은 테이블을 위한 오픈 가중치 파운데이션 모델(open-weight foundation model)입니다. 제 데이터로 모델을 훈련하는 대신, 이 모델은 레이블이 지정된 행 샘플을 컨텍스트로 읽고 한 번의 패스(one pass)로 나머지를 예측합니다. 이는 모든 마을이 작고 유용한 신호가 마을들이 서로 얼마나 닮았는지에 있는 문제에 적합합니다. 저는 제 노트북의 RTX 5060에서 로컬로 실행했습니다. Hawkesbury의 카드를 만드는 데는 19초가 걸리며, 모델 API로 아무것도 전송되지 않습니다.
테스트. 저는 이 결과를 제가 생각하는 '무엇이 나와야 하는지'라는 기준에 따라 평가하고 싶지 않았기 때문에 대중에게 평가를 맡겼습니다. 저는 2024년까지의 목표 연도(target years)로 학습했고, 2025년 10월은 완전히 제외했습니다. 모든 마을의 카드를 블라인드 처리했으며, 해당 월에 누군가가 실제로 iNaturalist에서 사진을 찍고 기록한 16개 칸 중 몇 개인지 계산했습니다. 네 가지 방법으로 같은 마을, 같은 달을 비교했을 때:
| Method | Squares photographed, of 16 |
|---|---|
| TabPFN | 5.02 |
| ... | |
| Town별로 해당 마을의 과거 10월과 비교했을 때, TabPFN의 카드가 23개 마을에서는 더 좋았고, 14개 마을에서는 같았으며, 11개 마을에서는 더 나빴습니다. |

이것이 하지 못하는 것. 저는 이 시스템을 작은 마을들을 위해 만들었는데, 10월 기록이 가장 적은 16개 마을 중에서는 우위를 점하지 못합니다. Gradient boosting은 그곳에서 사진으로 찍힌 사각형 영역을 2.19개 발견했고, TabPFN은 1.88개를 발견했습니다. 이 수치는 지난 10월 목록의 1.19개보다 높은 수치입니다. 제가 걸었던 마을인 Hawkesbury 역시 TabPFN이 점수를 내지 못한 곳 중 하나였습니다: 6개 영역 대비 3개만 기록했습니다. 데이터가 가장 희박한 곳에서는 어떤 방법도 16개 중 2개를 넘기기 어려운데, 이는 거의 아무도 사진을 찍으러 나가지 않기 때문입니다. 이 평가 도구에는 제가 제거할 수 없는 편향성도 있습니다: 사람들이 무엇을 사진으로 찍을지 추측하는 것을 보상하는데, 이는 길 근처의 크고 흔하며 낮에 보이는 사물 쪽으로 치우칩니다.
이 카드는 알 수 없는 것을 말합니다. 제품 설명서(README)가 아닌 제품 자체에서 모든 카드 아래에는 그 자체 점수가 명시되어 있습니다:
그 오후에 사진들을 iNaturalist에 올렸습니다. 몇 시간 만에 거위와 청둥오리는 다른 관찰자에 의해 독립적으로 식별되어 리서치 등급(Research Grade)을 달성했습니다. 갈매기는 아직 두 번째 의견을 기다리는 중인데, 이것이 바로 '개연성이 있다(probable)'라는 의미였습니다. 따라서 제가 체크한 두 칸은 저나 모델에 의해서가 아니라 제 사진들을 본 다른 사람에 의해 등급이 매겨진 것입니다.

열여섯 칸 중 두 개는 대단한 점수는 아니며, 측정치가 아닌 어느 날 아침의 일입니다. 비교를 위해 말씀드리자면: 지난 10월 내내 iNaturalist에 있는 모든 사람들이 함께 이 마을을 위해 모델이 만든 카드에서 세 개의 칸만 촬영했습니다. 한 사람이 36분 만에 두 개를 찾았습니다.
오픈 혁신은 왜 중요할까요?
작은 마을마다 카드를 만들 수 있도록 자유로워야 합니다. 백테스트는 14,400개의 후보 행을 점수화했으며, 모든 카드당 300종의 종이 점수를 받습니다. 현지에서는 전체 테스트에 노트북 GPU 약 11분 정도가 소요되었고, 카드 하나당 비용은 전혀 들지 않았습니다. 측정 가능한 API 뒤에 있다면, 카드가 작동하는지 여부를 알려주는 실험 자체가 비싼 부분이 되었을 것이며, 쉬운 선택은 그것을 건너뛰는 것이었을 것입니다.
오픈 덕분에 저는 모델을 평범한 대안들과 동등한 조건에서 테스트할 수 있었습니다. 가중치(weights)가 제 자신의 기기에서 실행되었기 때문에, 동일한 행, 동일한 특징(features), 그리고 동일하게 제외된 월에 대해 TabPFN과 scikit-learn의 그래디언트 부스팅을 실행하고, 오픈 가중치 모델이 어디서 뒤처지는지뿐만 아니라 어디서 이기는지도 보고할 수 있었습니다. 그 표는 제가 양쪽 모두를 통제할 때만 가능합니다.
오픈 데이터가 평가의 공정성을 보장했습니다. 학습 데이터와 정답 키 모두 오픈 라이선스의 iNaturalist 기록을 사용합니다. 누구나 2025년 10월 데이터를 다시 가져와 제가 찾은 23, 14, 그리고 11번을 확인할 수 있습니다. 게다가 iNaturalist가 공개되어 있기 때문에 순환 고리가 완성됩니다. 즉, 제가 관찰한 세 가지 기록이 다음 카드가 학습하는 데이터의 일부가 되는 것입니다.
순위 매기기는 다른 사람의 서버에 의존하지 않습니다. 모델은 위치가 아닌 마을별 개수를 확인합니다. 외부 호출은 해당 개수에 대한 iNaturalist의 공개 API로만 이루어집니다.
경계 조건에 대해 공정하게 말씀드리자면: TabPFN의 가중치는 무료이지만 접근이 제한적입니다. Prior Labs의 라이선스에 한 번 동의하면 다운로드 전에 토큰을 받게 되며, 이 라이선스는 MIT가 아닌 그들의 것입니다. 그리고 제 노트북 GPU의 8GB 용량 때문에 TabPFN은 85,974개의 학습 행 전체를 본 것이 아니라 4,000개 행의 샘플만 볼 수 있었습니다.
수상 부문
TabPFN을 가장 잘 활용한 사례
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기