2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

熊出没リスクを時間ごとに可視化するWebアプリを作ってみた(秋田発)

Posted at

はじめに

2025年、秋田県では熊の出没件数が過去最多ペースで増加しています。
ニュースを見ながら「いつ、どこで熊に遭遇するリスクが高いのか?」という疑問を感じ、
データサイエンスを活用して地域貢献できないかと考えたのが、このプロジェクトの出発点です。

にかほ市の商工会に「Corota AI Lab.」という屋号で個人事業として登録したこともあり、
地域からAIを活用した“何か”を発信したいと思っていました。
そして、地元でも関心が高いテーマである「熊出没リスク」を、
時間ごと・場所ごとに見える化するWebサイトを作りました。

熊出没リスク可視化サイト「くま予報」

image.png


使用技術

要素 使用技術・ライブラリ
データ処理 Python, pandas
モデル Logistic Regression(PyCaretで作成)
可視化 OpenStreetMap(4次メッシュを色分け)
デプロイ GitHub Pages(無料でサーバーレス運用)
自動更新 ローカル環境で毎朝更新スクリプト実行

「サーバーを立てずに無料で運用したい」という方針から、
GitHub上で静的サイトとして公開し、
データ更新は自前の環境から毎朝自動で反映されるようにしました。


データ取得と前処理の流れ

熊の出没情報は、各自治体が公開しているオープンデータを利用しています。
また、気象データは 気象庁 から取得しました。

前処理では主に以下を行っています:

  • 日時・緯度経度情報の整形
  • 1〜4次メッシュ単位での熊出現カウント
  • ラグ特徴量(直近の出現傾向)を追加
  • 遭遇していない地点のダミーデータをランダム生成
     → 学習データのバランスを改善

リスク算出の仕組み

モデルには Logistic Regression を採用し、
その prediction_score を「リスク」として表示しています。

※ 現在は検証で使用していた PyCaret のモデルを流用しています

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X_train, y_train)
risk_score = model.predict_proba(X_test)[:, 1]  # 出現確率をリスクとして使用

リスクスコアは1時間単位で算出し、
4次メッシュごとに色の濃淡で可視化しています。

UI / UX と運用上の工夫

毎日自動更新(ローカル実行で最新データを反映)
シンプルなUI設計:余計な情報を極力減らし、リスクの分布が直感的に伝わるように
リスク値の説明:定義が難しいため、今後の課題として改善予定

アクセス推移

10月に入ってからアクセスが急増し、
直近28日で822ユーザー(前月比 +1,126%) を記録しました。
image.png

今後の展望

・他県の熊出没データを追加
・サーバー上での自動更新化
・精度向上(外部データの活用)

まとめ:地域課題×データ×Webの可能性

熊の出没は「地域のリアルな課題」です。
こうしたテーマにこそ、データサイエンスやWeb技術が役立つと実感しました。

参考リンク

熊出没リスク可視化サイト「くま予報」
https://kuma-forecast.easyscraping.jp/

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?