Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bear-forecast — クマ出没リスク予報(石川県・5kmメッシュ・週次)

SPEC #010 の実装。石川県のクマ出没オープンデータ(CC-BY)を用いて、 「翌週にそのメッシュで出没通報が1件以上あるか」を週次で予測し、静的サイトに表示する研究デモ。

本プロジェクトは研究デモであり、安全を保証しない。 低リスク表示にも「出没しないことを保証しない」注記を常時併記する(SPECハードリミット)。

通報バイアス(誠実性の要)

目的変数は「クマの存在」ではなく「人がクマを見て通報した事象」である。 人口の多いメッシュほど通報されやすく、山奥の出没は過小にしか観測されない。 この限界は本README・公開サイトの両方に明記している。

データソースと利用区分

データ 出典 ライセンス 用途
クマ出没CSV(R1-R6要因別5本+R7) 石川県オープンデータカタログ(CKAN) CC-BY(APIで確認) 学習・評価・公開の基盤。これのみを再配布可能データとして扱う
直近出没PDF(r7mokugeki.html配下) 石川県自然環境課ページ 規約未確認 内部特徴量のみ。日付・市町・件数の事実情報だけを抽出。PDF由来データは再配布せず、サイトにも生データとして掲載しない(data/internal/ はgitignore)
気象(金沢・日別) 気象庁 過去の気象データ 政府標準利用規約準拠 特徴量(前週の気温・降水)
土地利用1kmメッシュ(L03-a)・標高 国土数値情報 / 地理院標高API 各利用約款 静的特徴量(5kmメッシュへ集約)
地図タイル 地理院タイル 出典明記で利用可 サイト表示

注意: 旧ドメイン ishikawa-datapf.jp は失効し第三者に再取得されているため絶対に使用しない。 正しいホストは ckan.opendata.pref.ishikawa.lg.jp のみ(src/bearforecast/config.py, fetch.py 参照)。

CKAN CSVは2025年6月分で更新が止まっており(監査時点)、それ以降の直近分は県PDFから 事実情報のみを抽出して補う。市町単位のPDF件数は、その市町の過去の通報のメッシュ別構成比に 比例配分してメッシュ近似する(近似であることを明記)。

パイプライン

fetch (CKAN 10秒間隔 / PDF / 気象庁 / 国土数値情報 / 標高)
  -> parse (和暦・西暦正規化は config/era_table.json、要因別ファイルの重複を
     (緯度,経度,出没日,時刻) 複合キーで一意化しマルチラベル統合)
  -> features (5kmメッシュ週次パネル。対象=出没歴メッシュ+隣接。
     過去1/2/4週の自メッシュ・隣接通報数、季節、前週気象、土地利用構成比、標高、年)
  -> train (LightGBM vs B1気候値・B2持続。最終1年(2024-07〜2025-06)は不可侵ホールドアウト)
  -> results/holdout_report.md (ブライアスコア主・PR-AUC副・秋季分離)
  -> predict + site (Leaflet+地理院タイル、3段階+確率値)
  -> launchd 週次更新 (com.user1.bearforecast、月曜07:30)

使い方

# 依存関係 (Python 3.14, uv)
uv venv .venv && uv pip install --python .venv/bin/python \
  lightgbm pandas numpy scikit-learn pdfplumber pytest requests

# テスト
.venv/bin/python -m pytest tests/ -q

# データ取得(レート制限遵守: CKAN 10秒/リクエスト、他 1リクエスト/秒以下)
PYTHONPATH=src .venv/bin/python -u -m bearforecast.weekly   # 取得+予測+サイト更新まで一括

# 学習とホールドアウト評価(results/holdout_report.md を再生成)
PYTHONPATH=src .venv/bin/python -u -m bearforecast.train

# サイトのローカル確認
python3 -m http.server 8765 --directory site
# -> http://localhost:8765/

週次自動更新(launchd)

cp launchd/com.user1.bearforecast.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.user1.bearforecast.plist
# 動作確認: launchctl start com.user1.bearforecast && tail -f logs/weekly.log

公開(gh-deploy等)は行っていない。GitHubへのpushもしない(ローカル運用)。

リポジトリ構成

  • SPEC.md — 設計書(改変禁止)
  • audit/DATA_AUDIT.md — P0県別監査、results/RECOMMENDATION.md — 推薦理由
  • src/bearforecast/ — fetch / parse / mesh / features / train / predict / weekly
  • config/era_table.json — 和暦西暦変換テーブル(ユニットテスト対象)
  • tests/ — pytest
  • data/samples/ — 監査時に取得したCSV(CC-BY、コミット済み)
  • data/raw|cache|internal|processed — 取得データ(gitignore。internalは再配布禁止データ)
  • site/ — 静的サイト(index.html + predictions.geojson)
  • results/ — ホールドアウト評価レポート
  • launchd/ + scripts/ — 週次ジョブ

About

Bear sighting risk forecast for Ishikawa Prefecture (research demo, not a safety guarantee). Weekly mesh-level predictions from CC-BY open data.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages