この地図と集計は公開データをそのまま重ねたものです。温泉の存在・泉質・湧出量を保証するものではありません。

AI:温泉として登録された場所の傾向を当ててみる

この結果は公開データから学習した統計モデルによる推定です。温泉の存在・泉質・湧出量を保証するものではありません。

何を当てているのか

設計書は AI で「温泉ポテンシャル」を出すことを求めています。ただし、地点ごとの泉温・湧出量・泉質の公開データはありません。温泉が「無い」ことを示すデータもありません (設計書 §33:「温泉が確認されていない場所」は「温泉が無い場所」ではない)。

そこでこのモデルが当てるのは次の問いです:P12 に登録された地点が『温泉』の分類か、温泉以外の観光資源か(負例は温泉が無い場所ではない)。 正例は観光資源データの温泉 1,320 点、負例は同じデータの温泉以外の観光資源から 都道府県ごとに同じ数を選んだ 1,320 点です。 つまりこれは「温泉が湧くか」ではなく「温泉として登録された場所がどんな地理環境にあるか」を 学んだモデルです。

合否(学習の前に書いた基準)

基準は docs/ai_preregistration.md に モデルを学習させる前に書いて積み、結果はそのファイルの SHA-256(129877d8f36b…)を持っています。 結果を見てから基準を動かしていないことを、テストが確かめます。

ID基準結果判定
G-22a最良モデルの都道府県分割 ROC-AUC ≥ 0.650.686通過
G-22b最強の 1 変数ベースラインより +0.02 以上+0.062通過
G-22c陰性対照の ROC-AUC が 0.45〜0.550.475通過

3 つの基準をすべて通りました。最良は Random Forest(都道府県ごとに分けた検証で ROC-AUC 0.686)、 最も強い 1 変数は局所起伏(同 0.624)です。

3 つのモデルの比較(設計書 §31 の指標)

「都道府県分割」は、都道府県を丸ごと検証側に回した 5 分割です。近くの温泉が学習と検証の両方に入ると、 場所を覚えただけで当たったように見えるため、合否はこちらで判定します。「無作為分割」は漏れの大きさを見るための参考です。 しきい値は 0.5。

モデル分割AccuracyPrecisionRecallF1ROC-AUCPR-AUC
Logistic Regression都道府県分割0.6220.6270.6020.6140.6500.630
無作為分割(参考)0.6210.6290.5890.6080.6570.638
Random Forest都道府県分割0.6400.6510.6020.6250.6860.671
無作為分割(参考)0.6640.6680.6500.6590.7170.707
XGBoost都道府県分割0.6270.6300.6160.6230.6770.665
無作為分割(参考)0.6540.6550.6520.6540.7050.694
定数の予測——0.500—

1 変数だけのロジスティック回帰(都道府県分割の ROC-AUC)

局所起伏0.624
河川までの距離0.620
植生自然度0.590
傾斜0.590
標高0.574
活火山までの距離0.535
湖沼までの距離0.522

棒は 0.5(偶然)から 1.0 までのうち、どこまで届いたかを示します。

陰性対照

都道府県の中でラベルを無作為に入れ替えて同じ手順で学習し直すと、ROC-AUC は 0.475 でした。 ラベルと地理環境の結び付きを壊すと偶然(0.5)に戻ることを確かめています。 ここが 0.5 から大きく外れていたら、手順のどこかでラベルが漏れていることになります。

何が効いているか(設計書 §35)

最良モデル(Random Forest)で、検証側の 1 列だけを無作為に入れ替えたときに ROC-AUC がどれだけ下がるか(都道府県分割の各分割で 5 回ずつの平均)。効いているのは「温泉として登録された場所」との結び付きで、温泉が湧く原因ではありません。

河川までの距離−0.080±0.026
局所起伏−0.065±0.016
植生自然度−0.025±0.011
傾斜−0.013±0.007
活火山までの距離−0.008±0.008
標高−0.008±0.008
地質の大区分−0.004±0.006
湖沼までの距離+0.004±0.007

温泉ごとの見立て(設計書 §35)

地図で国土数値情報の温泉をクリックすると、詳細の「AI の見立て」に、その温泉についてのモデルの出力(0〜1)と、出力を押し上げた・押し下げた特徴量(SHAP の寄与)が出ます。

地形を画像として見る CNN(設計書 Phase 6)

設計書 §32 は「十分なデータが得られた場合のみ」CNN による画像的分類を検討するとしています。 同じ問いについて、地点を中心にした標高タイル z14 の 64 × 64 画素(相対標高・傾斜・欠測の印の 3 チャンネル。北緯 36 度で約 490 m 四方)を CNN に見せ、 表の特徴量で学んだ Random Forest(0.686)を超えるかを確かめました。 合否は docs/ai_preregistration_cnn.md に 学習の前に書いてあります(SHA-256 26cfb79116b5…)。

ID基準結果判定
G-25a画像 + 表の CNN(種 3 つの平均)が Random Forest + 0.02 以上0.680不通過
G-25b画像だけの CNN(種 3 つの平均)が 0.60 以上0.659通過
G-25c陰性対照が 0.45〜0.550.505通過
モデル平均種 20260916種 20260917種 20260918
画像だけの CNN0.6590.6550.6610.661
画像 + 表の CNN0.6800.6790.6830.677
Random Forest(表だけ)0.686———

いずれも都道府県ごとに分けた 5 分割の分割外 ROC-AUC。30 エポック固定・調整なし。 陰性対照(都道府県の中でラベルを入れ替え)は 0.505。 取れなかった標高タイル 3 枚、欠測が半分を超える画像 37 枚。

画像 + 表の CNN は Random Forest を事前登録した幅(+0.02)で上回りませんでした。事前登録どおり、CNN はアプリに載せていません(ブラウザでの推論もしていません)。 基準を下げたり、層を足して取り直したりもしていません。 画像だけでも 0.60 を超えており、地形の形そのものには「温泉として登録された場所」と結び付く信号があります。ただし表の特徴量に画像を足しても表だけの Random Forest を超えなかったので、この形では表を超える情報は加わりませんでした。

この段でしていないこと

データと再現

学習に使った表:dataset.csv(2,640 行・37 都道府県)、 列の説明:dataset_dictionary.json、 結果:baselines.json。 学習はローカルで行い(設計書 §37)、この画面は結果を表示するだけです。 乱数の種 20260915、scikit-learn 1.9.1・XGBoost 3.4.1。

この結果は公開データから学習した統計モデルによる推定です。温泉の存在・泉質・湧出量を保証するものではありません。