1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

下水道管路の劣化リスク評価に「地形の目」を足す — J-SHIS 微地形区分と海岸線距離(Python/geopandas)

1
Last updated at Posted at 2026-08-08

はじめに

前回の記事では、半田市のオープンデータを使って下水道管渠の劣化リスク評価と点検優先度のスクリーニングマップを作りました。今回はその続編です。

きっかけは、今年発表された査読論文「機械学習を用いた下水道管渠の劣化要因分析とリスク評価に関する研究」(高地ほか 2026、AI・データサイエンス論文集 7 巻 2 号)を読んだことです。大阪市の管渠約 21 万本を生存時間解析で分析したこの研究は、劣化に効く環境要因として微地形区分や海岸線距離を採用し、特に J-SHIS の微地形区分を「詳細な地盤調査データが十分に整備されていない場合でも,全国的に利用可能な統一指標」と位置づけていました(同論文は同時に、これは既存の地盤データを代替するものではなく補完的指標である、とも書いています)。

「全国的に利用可能」— つまりオープンデータだけで戦っている私のデモにも足せるはず。ということで、実装してみました。

なお本記事は同論文の手法(生存時間解析・SHAP・ホットスポット分析)を再現するものではありません。同論文が採用した公開データ由来の特徴量 2 つを、別の自治体のオープンデータデモに組み込んでみた実装報告です。

また、台帳属性に環境データを組み合わせて埋設インフラの劣化を分析する構成には先行研究の系譜があります。通信管路では標高・気候・流域・土壌などの環境データを説明変数に加えた腐食予測で ROC-AUC 0.86 が報告されており(伊藤・古川 2022)、橋梁では、北海道の市町村管理橋梁を対象にした分析で、RC 橋に限って自治体の財政力・職員数といった管理能力が劣化に与える影響が大きいと報告されています(飯田・長井 2025)。「台帳×周辺環境」は埋設インフラ分析の確立されつつある路線で、今回はその最小構成を試した形です。

お断り: 前回同様、本記事は公開データによる手法デモであり、対象自治体の実際の管渠の状態評価を示すものではありません。

使うデータと、ライセンスの落とし穴

追加したのは 2 つの環境特徴量です。

特徴量 データ 提供元 ライセンス
微地形区分 地形・地盤分類 250m メッシュマップ(2020 年更新版) 防災科研 J-SHIS 出典明示・参考文献引用のうえ加工・頒布可。ただし生データをそのまま再配布するのは不可、成果物の販売は要問い合わせ(利用規約 第 4 条 2 項が表層地盤データについて参考文献の引用を求めています。同規約は J-SHIS のコンテンツ・データ全般に適用され〈第 1 条〉、再配布の可否は地震動予測地図データについて定めた第 5 条に準じて保守的に扱っています)
海岸線距離 行政区域データ N03 の外周 国土数値情報 CC BY 4.0

ここで 1 つ、地味に大事な話を。海岸線なら国土数値情報に海岸線データ(C23)がそのままありますが、C23 の利用条件は「非商用」区分です。この記事のような検証に使うぶんには問題ないのですが、今回は読んだ人が用途を気にせず再利用できる形にしたかったので、海岸線については条件のゆるい CC BY 4.0 のデータで組むことにしました。そこで行政区域ポリゴン(N03、愛知県分)を溶合(dissolve)した外周を海岸線の代理に採用しています。半田市の管渠から最も近い外周は必ず湾岸で、内陸の県境は桁違いに遠いため、距離計算上は海岸線と等価に扱えます。

なお微地形区分の J-SHIS は CC BY ではなく独自の利用規約です。加工した成果物は頒布できますが生データそのままの再配布は禁止なので、リポジトリにはデータ本体を置かず、取得スクリプトと集計結果だけを置く形にしています。

オープンデータは「ダウンロードできる=どう使ってもいい」ではなく、同じ国土数値情報でもデータセットごとに利用条件が違います。作ったものを人に配る前提なら、素材のライセンス確認は台帳データの品質確認と同じくらい大事な工程です。

実装① 250m メッシュコードを計算して J-SHIS を結合する

J-SHIS の CSV は「250m メッシュコード, 微地形区分コード, 表層 30m 平均 S 波速度」という構成です。管渠の重心座標からメッシュコード(JIS X 0410)を計算して結合します。

def mesh250_code(lat: float, lon: float) -> str:
    """JIS X 0410 のメッシュコードを 250m(4分の1の4分の1)区画まで計算"""
    p = int(lat * 1.5)          # 1次メッシュ(緯度)
    u = int(lon - 100)          # 1次メッシュ(経度)
    lat_r = lat * 1.5 - p
    lon_r = lon - 100 - u
    q, v = int(lat_r * 8), int(lon_r * 8)          # 2次
    lat_r, lon_r = lat_r * 8 - q, lon_r * 8 - v
    r, w = int(lat_r * 10), int(lon_r * 10)        # 3次(1km)
    lat_r, lon_r = lat_r * 10 - r, lon_r * 10 - w
    d4 = (2 if lat_r >= 0.5 else 0) + (1 if lon_r >= 0.5 else 0) + 1  # 500m
    lat_r = lat_r * 2 - (1 if lat_r >= 0.5 else 0)
    lon_r = lon_r * 2 - (1 if lon_r >= 0.5 else 0)
    d5 = (2 if lat_r >= 0.5 else 0) + (1 if lon_r >= 0.5 else 0) + 1  # 250m
    return f"{p:02d}{u:02d}{q}{v}{r}{w}{d4}{d5}"

結果、半田市の管渠 21,223 本すべてが J-SHIS メッシュと結合できました(結合率 100%)。なお元論文は、管渠と交差するメッシュのうち交差距離が最も長いメッシュを採用しており、重心方式はその簡略版です(250m メッシュに対して管渠の平均延長は約 30m なので、実用上の差は小さいと判断しました)。

実装② 海岸線距離

行政区域ポリゴンを union_all() で溶合し、その boundary への距離を平面直角座標系(EPSG:6675)上で計算するだけです。geopandas なら実質 2 行で、半田市の管渠の海岸線距離は 67m〜4.9km(中央値 2.0km)になりました。半島の市らしい値です。

boundary = admin.union_all().boundary
gdf["coast_dist_m"] = gdf.geometry.centroid.distance(boundary)

前回のおさらい: 「優先度 A」とは何か

結果を見る前に、前回作った「優先度」の中身を 1 分でおさらいします。

前回は各管渠に リスクスコア = 劣化確率 × 影響度 を計算しました。

  • 劣化確率: 経過年数 ÷ 寿命の目安(標準耐用年数 50 年に管種の補正を掛けたもの。陶管やコンクリート系は傷みやすいので短め、塩ビ系は長め)。ざっくり言えば「どれだけ使い込んでいるか」です。
  • 影響度: 管径(太い幹線ほど、壊れたときの影響が大きい)+土被り 1m 未満なら加点(浅い管は道路陥没に直結しやすい)。

このスコアで全 21,223 本を並べ、上位 2% を優先度 A としました。つまり A ランクの正体は「古い × 傷みやすい管種 × 太いか浅い」が重なった管です。相対評価なので「危険な管」ではなく「調べるならここから、という並び順」です(詳細は前回記事を参照)。

ここで大事なのは、この計算に地形は一切入っていないことです。それを踏まえて結果をどうぞ。

結果: 台帳が地形を写す

微地形区分で管網を塗り分けると、知多半島の地形がそのまま浮かび上がります。台地・丘陵の市街地に管が走り、低地・干拓地が湾岸に帯状に並ぶ構図です。

terrain_map.png

そして前回作った優先度ランク(リスクスコア上位 2% = A)と重ねると、面白いことが分かりました。

terrain_share.png

微地形区分 管網全体の延長シェア 優先度 A の延長シェア 平均管齢 平均管径
砂礫質台地 40.1% 42.3% 27.5 年 272mm
丘陵 23.1% 13.1% 22.9 年 304mm
三角州・海岸低地 15.9% 13.2% 25.5 年 338mm
干拓地 12.9% 25.8% 30.8 年(最高) 409mm(最大)
谷底低地 4.5% 1.8% 19.7 年 246mm
砂州・砂礫州 3.5% 3.9% 25.2 年 231mm
埋立地 0.1% 0.0% 20.9 年 156mm

干拓地の管渠は、市全体の延長の約 13% しかないのに、優先度 A の延長では約 26% を占めます(濃縮度 2 倍)。

地形はスコアに入れていないのに、なぜ重なったのか。管齢ではありませんでした。 試しに劣化確率 P だけで上位 2%(件数で上位 424 本)を切ってみると、干拓地のシェアは 3.9% まで落ちます — 全体シェア 12.9% を下回り、濃縮がむしろ消えます(P は管齢×管種で同値が多く、同値の扱い方によって 3.9〜5.8% の間で動きますが、いずれでも全体シェアを大きく下回ります)。効いていたのは影響度 C の側、つまり管径でした。干拓地の管は平均管径 409mm(市平均は約 300mm)で市内最大です。優先度 A に入った干拓地の 68 本のうち 62 本が雨水管で、その管径の中央値は 1,350mm でした。

理屈は身も蓋もなく、雨水は低いところに集まるからです。干拓地という低平地に大口径の雨水幹線が敷かれ、それが「大口径ほど事故の影響が大きい」というスコアの入力と一致した。台帳が地形を写しているという意味では、管齢よりむしろ分かりやすい例だと思います。

なお干拓地は平均管齢も市内最高(30.8 年)ですが、これは「早くから整備された」からではありません。干拓地で最も古い管の施工年度は 1985 年で、砂礫質台地の 1955 年よりずっと新しい。古い管がない代わりに新しい管もないため、平均だけが高く出ています。

では「地形そのもののリスク」も上乗せされているのか — ここは慎重に読む必要があります。前掲の高地ほか(2026)は、干拓地について布設年度を考慮すると効果が見えなくなったと報告しています(干拓地は技術開発や経済発展の側面から比較的近年に造成された区域が多く、布設年度に影響が吸収された可能性が高い、という考察です)。布設年度の有無に依らず確認されたのは三角州・海岸低地の方でした。同論文はまた、SHAP 値はモデル予測への寄与度であって説明変数と劣化との因果関係を直接示すものではない、と釘を刺しています。

半田市の干拓地も、最も古い管が 1985 年という比較的新しい区域でした。その点は大阪市と同じ向きです。そして半田市の場合はさらに、上で見たとおり管径(雨水幹線)という別の交絡が乗っています。どちらの記事でも「地形そのものの効果」は他の要因と分離できていないということです。だからここでは「地盤のリスクが上乗せされている」とは言わず、排水系統の都合で大口径管が集まる場所と、まだスコアに入れていない地盤側の懸念が、同じ低平地で重なっている — 点検の目線で最初に見るべき場所が、地形の目でも同じ場所を指した、という読み方にとどめます。この慎重さが、後述する「あえてスコアには入れない」という判断につながります。

ダブルリスクをルール化して地図に出す

「A ランクかつ軟弱地盤」はダブルリスク — なら、それをルールとして書いて地図に出してしまいましょう。やり方は単純で、スコアはいじらず、独立した 2 つのふるいの AND 条件をフラグにするだけです。

SOFT_TERRAIN = {"干拓地", "埋立地", "三角州・海岸低地", "谷底低地",
                "旧河道・旧池沼", "後背湿地", "砂丘・砂州間低地"}  # 筆者の選定
gdf["double_risk"] = (gdf["priority_rank"] == "A") & gdf["terrain_name"].isin(SOFT_TERRAIN)

この 7 区分は、J-SHIS 微地形区分の低地・人工地盤のうち軟弱とされるものを筆者が選んだものです。「低地を全部拾ったもの」ではありません。 判断材料にしたのは J-SHIS の微地形区分の分類基準と地盤特性で、たとえば外した扇状地は対応する地盤条件が「完新統の中位に締まった砂礫」(以下略)、砂州・砂礫州は「完新統の中位に締まった砂礫・砂質土」とされています。このうち砂州・砂礫州は半田市に 951 本・22.3km 実在しますが、この理由で軟弱地盤側には数えていません。

ただし、同じく外した自然堤防は「完新統のゆるい砂質土」、砂丘は「完新統の極めてゆるい風成砂」とされており、軟弱側に入れる余地があります。この 2 区分は半田市に存在しないため今回の結果は変わりませんが、選定は筆者の判断であって唯一の正解ではありません。 他の自治体で流用する際は取捨を見直してください(区分名は今回使った「地形・地盤分類 250m メッシュマップ(2020 年更新版)」のデータ記述ファイル規約 p.2 表 3-2 の表記に合わせています。J-SHIS には旧版の表層地盤データもあり、そちらはコード 14 が「旧河道」、18 が「砂州・砂丘間低地」と区分名が一部異なります。同じ J-SHIS でも版が違うと名前が変わるので、コードで突き合わせるのが安全です)。液状化のしやすさについては、国交省が地形区分に基づく液状化の発生傾向図を公表しています。地形が示す一般的な地盤特性から相対的な液状化の発生傾向の強弱を 5 段階で表したもので、同ページでは埋立地や干拓地、低地の盛土造成地などの人工改変地が液状化被害の多い地形として挙げられています。なお上のコードに並べた 7 区分のうち半田市に実在するのは「干拓地」「埋立地」「三角州・海岸低地」「谷底低地」の 4 つで、残る 3 つ(旧河道・旧池沼/後背湿地/砂丘・砂州間低地)は市内に該当メッシュがありません。「干拓地なら+10 点」のような重み付けをしない理由は次章に書きますが、AND 条件なら恣意的な点数を発明せずに「両方のふるいに引っかかった管」を示せます。

結果、 21,223 本 → 優先度 A 410 本 → ダブルリスク 134 本(8.2km) まで絞り込めました。A ランクの延長の約 4 割が軟弱地盤の上にある、ということでもあります。

double_risk_map.png

背景地図に重ねると、ダブルリスク管がどの街区に集中しているかまで一目で分かります。中心市街地から湾岸の低地にかけて帯状に並ぶ構図で、下水道整備の歴史と地形が重なった結果です。

double_risk_osm.png

「2 万本の管網から、最初に見るべき 134 本を、根拠を説明できる形で取り出す」— スクリーニングの仕事はこういう絞り込みファネルを作ることだと考えています。

あえてスコアには入れない、という判断

今回の環境特徴量は、リスクスコアにも機械学習にも投入していません。理由は 2 つあります。

  • ルールベースのスコアに「干拓地なら+◯点」のような重みを置くには、根拠となる劣化実績データが必要です。根拠なく置けばただの恣意です。
  • 前回の機械学習デモのラベルは合成(架空)であり、その生成過程に地形は含まれていません。合成ラベルに地形を効かせてから「地形が効きました」と示すのは自作自演になってしまいます。

なので位置づけは「実際の点検データが得られたときに、すぐ投入できる状態まで整備した変数+現状の記述統計」です。元論文のような生存時間解析に進むには複数時点の調査履歴が必要で、そこがオープンデータとの最大のギャップである、というのが今回の実装で改めて確認できたことでもあります。

実務でどう使えるか

  • 点検計画の地区分け: 微地形×管齢のクロス集計は、「どの地区から調査するか」の説明資料としてそのまま使えます。地形は住民にも直感的に伝わる語彙です。
  • 他自治体への横展開: J-SHIS は全国整備・N03 も全国整備なので、この 2 変数は管路データさえあればどの自治体でも同じコードで足せます。
  • 実点検データへの備え: 調査結果(緊急度判定)が電子化されている事業体なら、今回の変数を説明変数に加えた劣化分析(元論文の枠組み)へ進む土台になります。

まとめ

  • 最新の査読研究が「全国的に利用可能な統一指標」と位置づけた環境指標(J-SHIS 微地形区分)は、実際にオープンデータのデモへ 1 日で組み込めました。結合率 100%。
  • 素材のライセンスまで含めて「誰でも再利用できる」設計に。海岸線は CC BY 4.0 の行政区域外周で代理しました(データセットごとの利用条件の違いは要チェック)。
  • 台帳×地形で「干拓地に優先度 A が 2 倍濃縮」という、地図と数字で語れる現状分析が得られました。濃縮の中身は高経年ではなく、低平地に集まる大口径の雨水幹線でした。
  • 環境変数はあえてスコアに入れず、「実データが来たら効く変数の事前整備」と位置づけました。何を入れないかも設計のうちです。

関連記事: 上下水道×データの記事は一覧からどうぞ。コードは GitHub で公開しています。

免責・出典

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?