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/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/ — 週次ジョブ