水道の検針データから使用者ごとの使用量を見込み、漏水の疑いがある使用者を拾って、お知らせと現地確認の優先順を出す
検針のたびに、使用者ごとの過去の使用量から今回の使用量がどの範囲に収まるはずかを見込み、範囲を超えた使用者を拾います。漏水の疑いの型と優先順を付け、お知らせと現地確認の一覧にします。
- 連携・自動化
- Python
- 対象業界
- 不動産/自治体
- 対象部門
- 総務
- 対象業務
- 分類・仕分け/集計・分析
- 主な課題
- 人手が足りない/判断に時間がかかる/期限・対応漏れが起きる
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 地区ごとの検針が終わると、料金システムから「増えた使用者」の一覧を書き出す
- 1件ずつ料金システムの画面を開き、過去6期の使用量と前年同期の使用量を見る
- 検針の間隔(日数)が前回と違わないか、検針員のメモに「読み違いの疑い」が無いかを見る
- 季節・人数の変化・一時的な使用で説明がつくかを考え、つかないものに印を付ける
- 印を付けたものについて、「漏水のおそれのお知らせ」のはがきを出すか、現地で確かめるかを決める
- 現地確認に回すものを地区ごとにまとめ、検針の委託先に依頼する
- 使用者から問い合わせが来たら、修繕の受付簿と料金システムを見て経緯を答える
- 自動地区の検針が締まると、料金システムから検針の結果と過去の記録を書き出す
- 自動検針の間隔の日数で割り、1日あたりの使用量にそろえる
- 自動使用者ごとに、今回の1日あたり使用量の中央の見込みと上側の見込みを出す
- 自動実績が上側を超えた使用者を拾い、超えた量と疑いの型を付ける
- 自動読み違いの疑いがあるもの(桁の跳ね・前回値との逆転)を先に分け、再検針の一覧にする
- 自動残りを、1日あたりの超過量と続いている期数で並べ、お知らせ・現地確認の候補にする
- 人担当者が一覧を上から見て、候補ごとに「お知らせ」「現地確認」「見送り」を決める
- 人お知らせのはがきを出し、現地確認を委託先に依頼する
- 自動次の検針で、お知らせを出した使用者の量が戻ったかを確かめ、結果を記録する
各工程の詳しい説明を読む
- 地区ごとの検針が終わると、料金システムから「増えた使用者」の一覧を書き出す
- 1件ずつ料金システムの画面を開き、過去6期の使用量と前年同期の使用量を見る
- 検針の間隔(日数)が前回と違わないか、検針員のメモに「読み違いの疑い」が無いかを見る
- 季節・人数の変化・一時的な使用で説明がつくかを考え、つかないものに印を付ける
- 印を付けたものについて、「漏水のおそれのお知らせ」のはがきを出すか、現地で確かめるかを決める
- 現地確認に回すものを地区ごとにまとめ、検針の委託先に依頼する
- 使用者から問い合わせが来たら、修繕の受付簿と料金システムを見て経緯を答える
(a)一覧の大半は、見れば説明がつくもの。 夏の散水、帰省、在宅の増加、そして検針の日数のずれです。説明がつくと分かるまでに、1件ずつ画面を開いて履歴を見る必要があります。 600件のうち、お知らせまで進むのはその一部です。
(b)少しずつ増える漏水は一覧に上がらない。 前回比で拾っているので、1期ごとに1割ずつ増えるような漏れは、毎回「前回とほぼ同じ」に見えます。トイレのタンクの漏れのように、はじめはわずかで日ごとに増える漏水ほど、この拾い方から外れます。 気づいたときには、数期分の水が流れています。
(c)優先順が無い。 印を付けたものは地区ごと・検針日の順に並び、1日あたりの増え方が大きいものから手を付ける、という並べ方がされていません。 現地確認の依頼が遅れるほど、使用者の負担が増えます。
(d)判断の基準が人に付いている。 「この地区の古い集合住宅は」「この用途で口径がこれなら」という経験は、書き出されないまま1名の職員の中にあります。 同じ使用量の変化を見ても、担当者によって出す・出さないが分かれます。
- 【自動】 地区の検針が締まると、料金システムから検針の結果と過去の記録を書き出す
- 【自動】 検針の間隔の日数で割り、1日あたりの使用量にそろえる
- 【自動】 使用者ごとに、今回の1日あたり使用量の中央の見込みと上側の見込みを出す
- 【自動】 実績が上側を超えた使用者を拾い、超えた量と疑いの型を付ける
- 【自動】 読み違いの疑いがあるもの(桁の跳ね・前回値との逆転)を先に分け、再検針の一覧にする
- 【自動】 残りを、1日あたりの超過量と続いている期数で並べ、お知らせ・現地確認の候補にする
- 【人】 担当者が一覧を上から見て、候補ごとに「お知らせ」「現地確認」「見送り」を決める
- 【人】 お知らせのはがきを出し、現地確認を委託先に依頼する
- 【自動】 次の検針で、お知らせを出した使用者の量が戻ったかを確かめ、結果を記録する
7番目が、この設計の分かれ目です。 お知らせを出すか、現地に行くかは、使用者の宅内に関わる連絡で、職員が決めます。 仕組みが出すのは「この使用者のふだんの量から見て、今回は外れている」という事実と並べ方までです。
5番目を予測の前に置いているのも意図してのことです。 読み違いは漏水よりはるかに大きく跳ね、そのまま混ぜると一覧の上位が読み違いで埋まります。 再検針で直るものを、使用者へのお知らせに回さないための分岐です。
9番目で結果を取るのは、見込みを育てるためです。 お知らせの後に量が戻った使用者は、漏水だった可能性が高い記録になります。この記録が、次の学び直しの正解の材料になります。
02今回想定するシステム構成
料金システム(検針の結果・調定・減免)
│ 地区の検針の締めごとに書き出し
▼【トリガー】地区の検針の締め(毎月の定時実行)
Python(pandas で書き出しの整形)
│ 検針の日数で割って1日あたりにそろえる
│ 読み違いの疑い(桁の跳ね・前回値との逆転)を先に分ける
▼
Python(scikit-learn の HistGradientBoostingRegressor)
│ loss="quantile"、quantile=0.5 と 0.95 の2本
│ 使用者ごとの中央の見込みと上側の見込み
▼
超過の判定と疑いの型付け
│ 単発の跳ね/続く増加/空き家での使用/用途に合わない量
▼
優先順の一覧(1日あたりの超過量 × 続いている期数)
├──▶ 再検針の一覧 ──▶ 検針の委託先
└──▶ お知らせ・現地確認の候補
▼
【担当者がお知らせ・現地確認・見送りを決める】
▼
次の検針で戻ったかを記録 ── 月1回の学び直し| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn の HistGradientBoostingRegressor) | R、BigQuery ML |
| データの取得元 | 料金システムの書き出し(CSV) | 料金システムのデータベースの参照用の複製 |
| 保存 | 庁内のデータベース | ファイルサーバー |
| 通知 | 庁内のメールで担当者へ一覧の場所を知らせる | 庁内のチャット |
料金システムには書き込みません。 この構成は検針の記録を読んで一覧を作るだけで、調定の変更も減免の登録も、これまでどおり料金システムで職員が行います。 料金システムの書き出しの形は製品ごとに違うため、どの項目が、どの単位で、検針のどの時点の値として出せるかを最初に確かめます。
生成AIは使いません。 扱うのは使用者ごとの使用量の記録で、在宅か不在か、空き家かといった生活の実態が読み取れてしまう情報です。 外部のサービスに渡す必要のある処理はこの構成には無く、庁内のサーバーで完結させます。
モデルに HistGradientBoostingRegressor を選ぶ理由は3つあります。 1つ目は、loss に "quantile" を指定でき、quantile で推定する分位点を0から1の間で指定できることです。同じ学習のしかたで、中央(0.5)と上側(0.95)の2本を作れます。
2つ目は、欠けた値をそのまま扱えることです。ドキュメントでは、学習のときに欠けた値のあるサンプルを分岐の左右どちらに送るかを利得から学び、予測のときもその向きに送るとされています。新しく給水を始めた使用者には前年同期の値がありません。 0で埋めると「去年は使っていなかった」と読まれるので、欠けたまま渡します。
3つ目は、用途(家事用・業務用など)や地区のような区分の値を扱えることです。categorical_features の既定は "from_dtype" で、データフレームの列の型が区分(Categorical)ならそのまま区分として扱われます。
03どうやって実装するのか
処理の起点を決める
地区ごとの検針が締まったことを起点にします。 検針は地区単位で月をずらして行われるので、1か月に何回か、締まった地区の分だけを動かします。 締めの予定は検針の計画表にあるので、その日付で定時に動かすのが最も単純です。
全地区を月末にまとめて動かすことはしません。 月の前半に締まった地区の漏水を月末まで寝かせると、その分だけお知らせが遅れます。この構成の価値の多くは、気づくのを早めることにあります。
学び直しは別に動かします。月に1回、前の月までの検針の結果と、お知らせの後に量が戻ったかの記録を足して作り直します。 予測と学び直しを同じ処理に入れると、学び直しが失敗した日に一覧も出なくなります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 今回の検針の結果 | 使用者番号、地区、検針日、指示数、使用量、検針員のメモ | 料金システム |
| 過去の検針の記録 | 使用者ごとの過去の検針日と使用量(3年分を目安) | 料金システム |
| 使用者の属性 | 用途、口径、メーターの種類と設置年、開栓・閉栓の履歴 | 料金システム |
| 減免と修繕の記録 | 過去の漏水による減額の有無と時期、修繕の届出 | 料金システム、修繕の受付簿 |
| お知らせの記録 | お知らせを出した日、現地確認の結果、次の検針での量の戻り | この構成が残す記録 |
質を決めるのは、いちばん下の2つです。 どの使用者が実際に漏水だったかの記録が無いと、見込みは「ふだんと違う」までしか言えません。減免の記録と、お知らせの後に量が戻ったかの記録が、漏水らしさの正解の材料になります。
世帯の人数は使いません。 住民の記録と結び付ければ見込みは良くなりそうに見えますが、水道料金の事務のために集めた情報ではありません。 人数の変化は、過去の使用量の動きそのものに表れます。
データの取得方法を決める
料金システムから、締まった地区の今回の検針の結果と、同じ使用者の過去の記録を書き出します。書き出しは地区の締めの翌朝に行い、締めの前の暫定の値を拾わないようにします。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 今回の使用量と検針日 | 検針の結果 | 1日あたりの実績 |
| 過去の使用量と検針日 | 検針の履歴 | 中央・上側の見込みの材料 |
| 用途・口径・地区 | 使用者の属性 | 区分の値として見込みに使う |
| 開栓・閉栓の履歴 | 使用者の属性 | 空き家・閉栓中での使用の検知 |
| 減免・修繕の記録 | 料金システム、修繕の受付簿 | 学び直しの正解、問い合わせの経緯 |
修繕の受付簿はスプレッドシートなので、使用者番号の書き方をそろえるところから始めます。 番号の桁数やハイフンの有無が揃っていないと、修繕済みの使用者を「まだ漏れている」と拾い続けます。
メーターの交換の記録も必ず一緒に取ります。 交換の前後で指示数が0から始まり直すため、交換を知らずに差を取ると、とてつもない使用量か負の使用量が出ます。
AIへ渡す前に整形する
- 1日あたりにそろえる … 今回と過去の使用量を、それぞれの検針の間隔の日数で割ります。検針日が数日ずれるだけで、前回比は1割近く動きます
- メーターの交換をつなぐ … 交換の前後の指示数を、旧メーターの最終値と新メーターの初期値でつないでから差を取ります
- 読み違いの疑いを分ける … 指示数が前回より小さい、使用量が過去の最大の10倍を超える、桁が1つずれた値と一致する、のどれかに当たるものを再検針の一覧へ回し、予測の対象から外します
- 閉栓中の使用を分ける … 閉栓の期間に使用量が出ているものは、見込みを使わずに別の型として一覧に入れます
- 特徴量を作る … 直近6期の1日あたり使用量、前年同期の値、直近3期の増え方の傾き、用途、口径、地区、検針月、メーターの設置からの年数
- 欠けた値を残す … 新規の使用者の前年同期などは欠けたまま渡します
- 修繕済みの印を付ける … 修繕の届出があった後の期は、学び直しで「漏水中」として扱わないようにします
3番目を軽く見ないでください。 読み違いは漏水よりはるかに大きく跳ねるため、見込みの上側との差で並べると、必ず一覧の上位を占めます。 使用者に「漏水のおそれ」と知らせた後で読み違いと分かるのが、この業務で最も信頼を損ねる失敗です。
5番目の「直近3期の傾き」が、(b)の少しずつ増える漏水を拾うための特徴量です。 前回比では見えない増え方を、3期分の並びとして渡します。
AIに処理させる
させるのは、使用者ごとに今回の1日あたり使用量の中央の見込みと上側の見込みを出すことだけです。 拾うかどうか、どの型か、どの順に並べるかは、見込みの値を使った規則で決めます。
| 見るもの | 決め方 | 決めないこと |
|---|---|---|
| 中央の見込み | quantile=0.5 のモデルの予測 | ― |
| 上側の見込み | quantile=0.95 のモデルの予測 | ― |
| 超過量 | 実績 − 上側の見込み(1日あたり、正の値だけ) | 漏水の量そのもの |
| 疑いの型 | 規則(下の表) | 漏水の原因 |
| 優先順 | 1日あたりの超過量 × 続いている期数 | お知らせを出すかどうか |
疑いの型は4つです。
| 型 | 規則 | 次の手の候補 |
|---|---|---|
spike | 今回だけ上側を超え、前回までは範囲内 | お知らせ |
creeping | 3期続けて中央の見込みを上回り、傾きが正 | お知らせ、続けば現地確認 |
vacant_use | 閉栓中、または空き家の届出がある使用者で使用量がある | 現地確認 |
use_mismatch | 家事用で、口径と過去の量から見て桁違いの量 | 再検針または現地確認 |
右端の列は候補で、決めるのは担当者です。 仕組みが「お知らせ」を自動で選んで、はがきの印刷まで進むことはありません。
| させないこと | 理由 |
|---|---|
| 漏水かどうかの結論 | 季節・在宅・来客でも量は増える。確かめるのは現地とメーターのパイロット |
| 漏水の量の推計 | 超過量は「ふだんとの差」で、漏れた量ではない。減免の計算に使わない |
| お知らせの自動送付 | 宅内に関わる連絡で、誤りは苦情と問い合わせになる |
| 世帯の事情の推測 | 「不在らしい」「人が増えたらしい」を記録に残さない |
優先順を「超過量 × 続いている期数」にしているのは、使用者の負担の大きさに近い並びだからです。 1日あたりの超過が大きくても1期だけなら来客や一時的な使用のこともありますが、小さな超過が3期続いているものは、その間ずっと水が流れ続けています。 超過の大きさだけで並べると、少しずつ増える漏水がいつまでも下位に残ります。
1行目が、この構成で最もはっきりさせておくことです。 上側を超えたという事実は、漏水の証拠ではありません。漏水を確かめる方法は、蛇口を全部閉めてメーターのパイロットが動いていないかを見ることで、これは使用者か現地の確認でしかできません。
指示内容を固定する
この構成でAIに与える指示は、文章のプロンプトではなく学習と予測の設定です。中央と上側の2本を同じ設定で作ります。
from sklearn.ensemble import HistGradientBoostingRegressor
FEATURES = [
"use_per_day_lag1", "use_per_day_lag2", "use_per_day_lag3",
"use_per_day_lag4", "use_per_day_lag5", "use_per_day_lag6",
"use_per_day_same_period_last_year", # 新規の使用者は欠けたまま
"slope_last3", # 直近3期の傾き
"usage_type", "diameter", "district", # 区分の値(Categorical 型にしておく)
"reading_month", "meter_age_years",
]
def make_model(q):
return HistGradientBoostingRegressor(
loss="quantile",
quantile=q, # 0.5 で中央、0.95 で上側
max_iter=300,
learning_rate=0.05,
random_state=0,
)
model_mid = make_model(0.5)
model_upper = make_model(0.95)
# 学習から外すもの
# - 再検針になった期(読み違いの疑い)
# - 閉栓中の期
# - 修繕の届出より前で、減免の対象になった期(漏水中の量を「ふつう」と覚えさせない)
train = history[~history["excluded"]]
model_mid.fit(train[FEATURES], train["use_per_day"])
model_upper.fit(train[FEATURES], train["use_per_day"])
学習から外す3つ目が、この設定の要です。 漏水が続いていた期をそのまま学ばせると、モデルはその使用者の「ふつう」を漏水込みの量で覚えます。次に同じ漏れ方をしても、上側の見込みの中に収まって拾えなくなります。 減免の記録がある期を外すのは、そのためです。
上側を0.95にしているのは出発点です。 0.9にすれば拾う数が増え、0.98にすれば減ります。一覧の件数が担当者の手に負える数になるよう、最初の数か月で決め直します。 変えたときは、いつどの値にしたかを記録に残します。
評価には mean_pinball_loss を使います。分位点回帰のモデルを評価するための指標で、alpha に0.95を渡すと上側の見込みの評価になります。前年の同じ月を検証用に取っておき、学習に使わずに評価します。
出力形式を固定する
使用者1件ごとに、次の形で一覧に書き出します。
{
"district": "北3",
"reading_date": "2026-09-18",
"customer_no": "",
"usage_type": "家事用",
"days": 61,
"actual_per_day": 0.0,
"pred_mid_per_day": 0.0,
"pred_upper_per_day": 0.0,
"excess_per_day": 0.0,
"consecutive_periods": 1,
"pattern": "spike | creeping | vacant_use | use_mismatch",
"priority_rank": 1,
"suggested_action": "notice | site_check | reread",
"repair_history": "なし | 修繕届あり(日付) | 減免あり(日付)",
"model_version": "2026-09"
}
1つ目の理由は、見込みと実績を並べて残せることです。 担当者は actual_per_day と pred_upper_per_day の差を見れば、どれだけ外れているかを履歴の画面を開かずに読めます。
2つ目は、pattern と suggested_action を分けていることです。 型は規則で決まる事実、次の手は候補です。担当者が候補と違う手を選んだときに、どの型でどの手に変えたかが残ります。
3つ目は、model_version を残すことです。 上側の分位点や学習の期間を変えると、同じ使用者でも拾われ方が変わります。後から「なぜこの月はこの使用者が拾われたか」を説明するのに必要です。
repair_history を一覧に載せるのは、担当者が料金システムの画面を開かずに済ませるためです。 前回の修繕から半年で同じ型の超過が出ていれば、修繕が不完全だったか、別の箇所で漏れているかのどちらかで、お知らせより現地確認が先になります。
一覧は担当者向けには表で出します。
| 優先 | 地区 | 型 | 実績(㎥/日) | 上側の見込み(㎥/日) | 続いた期数 | 候補 |
|---|---|---|---|---|---|---|
| 1 | 北3 | creeping | ― | ― | 3 | 現地確認 |
| 2 | 北3 | spike | ― | ― | 1 | お知らせ |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 料金システム | CSVの書き出し(読むだけ) | 検針の結果、履歴、属性、減免 |
| 修繕の受付簿 | スプレッドシートの読み取り | 修繕の届出の有無と日付 |
| 庁内のデータベース | 書き込み | 一覧、見込みの値、担当者の判断の記録 |
| 検針の委託先 | 担当者が一覧を渡す | 再検針と現地確認の依頼 |
| 担当者 | 庁内のメール | 一覧ができたことと件数の通知 |
料金システムには書き込みません。 減免の登録も、お知らせの発送の記録も、これまでどおり料金システムの画面で職員が行います。書き込みの経路を作らないことで、見込みの誤りが料金に届く道を最初から無くします。
委託先への依頼も、担当者が一覧から選んで渡します。 仕組みから委託先へ直接流すと、読み違いと漏水の区別が付く前に、現地へ人が向かいます。
人が確認する
担当者が見るのは、一覧の上からです。 600件をすべて同じ深さで見る必要はなく、上位は型と超過量を見て手を決め、下位は件数と地区を流し見ます。
- 再検針の一覧を先に片付ける … 読み違いの疑いは委託先へ回すだけで、使用者への連絡はしません
vacant_useを確かめる … 閉栓中や空き家での使用は、漏水か無断の使用かで扱いが大きく変わるので、現地確認が基本ですcreepingとspikeの上位を決める … 修繕の記録と見比べ、お知らせか現地確認かを決めます- 見送ったものに理由を付ける … 「散水の季節」「事業の繁忙」など、短い理由を選択肢から選びます
4番目を省かないでください。 見送りの理由は、次の学び直しで「上側を超えても漏水でなかった」例になります。理由が残らないと、同じ使用者が毎回拾われ続けます。
目標は600件をならして1件2分です。 上位の数十件に時間を使い、残りは短く見る想定です。上位が毎月増えていくなら、上側の分位点か、学習から外す条件を見直します。
例外に対処する
| 起きること | 対応 |
|---|---|
| 指示数が前回より小さい | 読み違いかメーター交換。交換の記録が無ければ再検針へ |
| 使用量が過去の最大の10倍超 | 桁の読み違いを先に疑い、再検針へ。お知らせに回さない |
| 検針の間隔が通常の1.5倍を超える | 1日あたりにそろえたうえで、検針の遅れとして一覧に注記 |
| 新しく給水を始めた使用者 | 過去が2期未満なら見込みを出さない。地区と用途の同じ使用者の幅を参考に表示 |
| 閉栓中の使用 | 見込みを使わず vacant_use で一覧へ |
| 修繕の届出の直後の期 | 量が戻ったかだけを確かめ、拾わない |
| 料金システムの書き出しが欠ける | 件数を前回と比べ、大きく少なければ一覧を出さずに担当者へ知らせる |
| 学び直しが失敗した | 前の月のモデルで一覧を出し、model_version で分かるようにする |
| 集合住宅の親メーターで超過 | 各戸の子メーターの合計と比べ、差が大きければ共用部の漏水として管理者へ |
上から2行が大半を占めます。 どちらも見込みの問題ではなく、検針の記録の問題です。 予測の前に分けておくことで、一覧の上位が漏水の候補で埋まります。
7行目は、静かに起きる失敗です。 書き出しが途中で切れても、一覧は「拾う使用者が少ない月」として出てしまいます。件数の比較を、予測の前に必ず通します。
記録を残す
- 地区・検針日ごとの書き出しのファイルと件数
- 使用者ごとの見込みの値(中央・上側)、超過量、型、優先順
- 担当者が選んだ手と、候補と違えた理由
- お知らせを出した日、現地確認の結果、次の検針で量が戻ったか
- モデルの版(学習の期間、分位点、学習から外した条件)と評価の値
- 再検針に回したものと、その結果(読み違いだったか)
4つ目の「量が戻ったか」が、この記録の中で最も価値があります。 お知らせの後に戻った使用者は、修繕の届出が無くても漏水だった可能性が高く、学び直しの正解の材料がここから増えていきます。
最後の行は、検針の委託先との話し合いの材料になります。 特定の地区で読み違いが続くなら、メーターの位置か、検針の手順に理由があります。
04実装レベルの3段階
最小構成では件数がさばけません。 1地区を手で確かめる段階です。 半自動化で、1件6分が3分程度になります。 見比べの①は無くなりますが、型が付いていないため、説明がつくかの判断を担当者が一覧から行います。 本格構成で2分になり、この段階が本記事の想定です。型と優先順が付くことで、上位以外を短く見られるようになるのが差です。 段階を飛ばさないでください。 半自動化の一覧を2〜3回の検針で見ると、読み違いの多い地区と、学習から外すべき期の条件が先に分かります。 そこを直してから型付けに進むほうが、上位の質が上がります。
05工数削減シミュレーション
導入後 600件 × 2分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 給水件数が数万件以上あり、検針を地区ごとに月をずらして行っているため、毎月数万件の検針結果が上がってくる水道事業体。料金システムの「前回比で大きく増えた」という一覧を職員が1件ずつ履歴と見比べ、漏水のお知らせを出すかどうかを経験で決めている場合。過去数年分の検針の記録と、漏水の修繕や減免の記録を書き出せる場合。賃貸住宅の子メーターの検針を受託している管理会社で、同じ見比べをしている場合。
- 給水件数が数千件以下で、増えた一覧が毎月数十件に収まり、職員が全件を見ても負担にならない場合。スマートメーターで時間ごとの使用量が取れており、夜間の最小流量のような直接の手がかりで漏水を見分けられる場合。過去の検針の記録が料金システムの更新で途切れていて、1年分も遡れない場合。なお、漏水に当たるかどうか、料金を減額するかどうかの判断は、この構成では代替できません。
07最小構成で試す方法
- 過去1年分の検針の結果から、1つの地区を選んで書き出す
- そのうち、減免の記録がある使用者と、お知らせを出した使用者に印を付ける
- 手元の表計算で、使用者ごとに直近6期の1日あたり使用量の中央値と最大値を出す
- 今回の1日あたり使用量が、直近6期の最大値を一定以上超えたものだけを拾う
- 拾ったものと、当時の「増えた一覧」と、実際にお知らせを出した使用者を突き合わせる
ここではまだ機械学習を使いません。 確かめるのは、「1日あたりにそろえ、その使用者自身の過去と比べる」だけで一覧がどれだけ短くなるかです。
| 出てきた内容 | 判断 |
|---|---|
| 当時の一覧より短く、お知らせを出した使用者が含まれる | 見込みの幅を作る段階に進む |
| 当時の一覧に無かった、少しずつ増えた使用者が拾われた | (b)の見逃しが確かめられた。構成の価値がある |
| 読み違いが上位を占める | 前処理の分岐が先。 予測の問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、一覧を見る時間の一部が、読み違いを消す時間だったと分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 一覧の上位が読み違いで埋まる | 予測の前に分ける。 指示数の逆転と桁の跳ねを規則で拾う |
| 検針の日数の違いで拾われる | 必ず1日あたりにそろえてから比べる |
| メーター交換で負の使用量が出る | 交換の記録を取り、指示数をつないでから差を取る |
| 漏水中の量を「ふつう」と覚える | 減免の対象になった期を学習から外す |
| 少しずつ増える漏水を拾えない | 直近3期の傾きを特徴量に入れ、creeping の型で拾う |
| 新規の使用者で見込みが荒れる | 過去が2期未満なら見込みを出さない |
| 修繕の済んだ使用者が拾われ続ける | 修繕の届出の後の期に印を付ける |
| 上側の見込みを下げすぎて件数が増える | 担当者の手に負える件数を先に決め、分位点を合わせる |
| 超過量を漏水の量として扱う | 減免の計算に使わない。 減免は料金システムの規則で決める |
| お知らせを自動で送る | 候補までにする。 送付は担当者が決める |
| 書き出しの欠けに気づかない | 件数を前回と比べてから処理する |
上の4行が、この構成の失敗のほとんどです。 どれも見込みの精度ではなく、検針の記録をどう整えるかの問題です。 整える前にモデルを磨いても、一覧の上位は変わりません。
下から3行目と2行目は、運用に入ってから効いてきます。 「ふだんとの差」を漏水の量と読み替えた瞬間に、見込みが料金の計算に入り込みます。 最初から書き込みの経路を作らないのは、そのためです。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 使用者番号、地区、用途、使用量の履歴、開栓・閉栓の履歴、減免と修繕の記録です。使用量の動きからは、在宅か不在か、空き家か、人が増えたかといった生活の実態が読み取れます。
- 庁内で完結させる … 予測に外部のサービスは要りません。検針の記録を外部の生成AIに渡す設計にしないでください
- 目的を料金とお知らせの事務に限る … 使用量の動きを、福祉や税など別の事務の手がかりとして使い回さないでください。集めた目的の外に出す判断は、この構成の外で行うものです
- 世帯の事情を記録に書かない … 見送りの理由は選択肢から選び、「不在らしい」「人が増えたらしい」と自由に書かない運用にします
- お知らせの文面を決めておく … 「漏水しています」ではなく、使用量がふだんより多いことと、メーターのパイロットでの確かめ方を伝える文面にします
- 超過量を料金の計算に使わない … 減免の判断は料金システムの規則と職員の判断で行います
- モデルの版を残す … 使用者から「なぜ自分に届いたか」と聞かれたときに、その月の見込みと実績を示せるようにします
誤りが起きた場合のリスクは、漏水でない使用者にお知らせが届くことと、漏水の使用者を拾えないことの2つです。 前者は読み違いの分岐が抜けると起き、後者は漏水中の期を学ばせると起きます。どちらも見込みの精度ではなく、前処理と学習から外す条件で守ります。
10まず何から始めるか
1週目:記録のつなぎ方を確かめる
料金システムから1地区の3年分を書き出し、メーターの交換、閉栓、減免の記録が使用者番号でつながるかを確かめます。修繕の受付簿の番号の書き方もここでそろえます。
2週目:1日あたりにそろえて比べる
第8章の最小構成を1地区で行い、当時の「増えた一覧」と、実際にお知らせを出した使用者と突き合わせます。読み違いがどれだけ混ざっていたかを最優先で数えます。
3週目:学習から外す条件を決める
読み違い・閉栓・漏水中の期のどれを外すかを、課の経験のある職員と決めます。 あわせて、見送りの理由の選択肢を作ります。
4週目:中央と上側の見込みを出す
Python で2本のモデルを作り、前年の同じ月で評価します。この時点では型を付けず、上側を超えた一覧だけを当時の判断と比べます。
2か月目: 型と優先順を足し、担当者の判断を記録し始めます。上位に何が並ぶかを毎回の検針で見ます。3か月目以降: 量の戻りの追跡と学び直しを足し、1件6分が何分になったかを実測します。少しずつ増える漏水が、前回比の一覧より早く拾えたことを確かめた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
loss に "quantile" を指定でき、quantile で推定する分位点を0から1の間で指定すること。欠けた値(NaN)を扱え、学習のときに分岐の左右どちらへ送るかを学ぶこと。categorical_features の既定が "from_dtype" であること | scikit-learn: HistGradientBoostingRegressor | 2026-10-07 |
mean_pinball_loss が分位点回帰の評価に使う指標で、alpha に0.95を渡すと95パーセンタイルの推定を評価できること | scikit-learn: mean_pinball_loss | 2026-10-07 |
| 検針が2か月ごとであること(福岡市)。蛇口を全部閉めてメーターのパイロットが動いていれば漏水していること。修繕は指定の工事事業者に依頼し有料であること。発見できないような漏水などでは漏水量を減量して料金を計算できる場合があること | 福岡市水道局: 水道メーター | 2026-10-07 |
| 漏水ははじめはわずかでも日ごとに多くなり料金も高額になること。水を使用していない状態でパイロットが回転していればメーターから蛇口までのどこかで漏水していること | 東京都水道局: 漏水は早期発見・早期修繕を! | 2026-10-07 |
漏水による減額の条件と手続きは、事業体ごとの規程で決まっています。 本記事は上の2つの事業体の公開ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0842)についてのご相談はこちらから。
