水道事業の担当が過去の配水量と気温の予報・曜日から Python で翌日の配水区域ごとの配水量を見込み、浄水場の運転計画の案に使う
過去の配水量と、翌日の気温の予報・曜日・祝日から、配水区域ごとの翌日の配水量を幅つきで見込みます。見込みを浄水量と配水池の水位の計画の案に直し、運転管理の担当の確認に回します。
- 連携・自動化
- Python
- 対象業界
- その他/自治体
- 対象部門
- 生産
- 対象業務
- 書類作成/集計・分析
- 主な課題
- 判断に時間がかかる/属人化している/引き継ぎができていない
- AIで行う処理
- 予測
- 主な効果
- 判断支援/属人化解消/工数削減
- 導入難易度
- ★★★★★
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 昼過ぎに、監視制御の仕組みの日報から、区域ごとの前日と前週の同じ曜日の配水量を書き出す
- 民間の気象会社の配信で、翌日の最高気温・天気・降水の確率を見る
- 前週の同じ曜日の配水量に、気温の差と天気から経験で数%を足し引きし、区域ごとの翌日の配水量を決める
- 祝日や行事がある日は、過去の同じ行事の日の日報を探して見比べる
- 翌日の配水量から、浄水場の浄水量と、配水池の水位を時間ごとにどう動かすかを日報の表に書く
- 当直の責任者に見せ、了承をもらう
- 翌日、運転の担当が計画に沿って監視制御の仕組みで浄水量と送水を設定する
- 自動毎日13時に、監視制御の仕組みから書き出された前日までの区域ごとの配水量と、民間の気象会社から届いた翌日の予報をプログラムが読み込む
- 自動区域ごとに、翌日の配水量の真ん中と、上側・下側の幅を出す
- 自動見込みの上側の配水量と時間ごとの配水の形から、浄水量と配水池の水位の計画の案を作る
- 自動気温の予報が過去の範囲を外れる日、祝日や連休の初日、見込みと前週の実績の差が大きい日に印を付ける
- 人運転管理の担当が、計画の案を日報の表で確かめ、印の付いた日は理由を見て直す
- 人当直の責任者が了承する
- 人翌日、運転の担当が計画に沿って監視制御の仕組みで設定する(これまでどおり)
各工程の詳しい説明を読む
- 昼過ぎに、監視制御の仕組みの日報から、区域ごとの前日と前週の同じ曜日の配水量を書き出す
- 民間の気象会社の配信で、翌日の最高気温・天気・降水の確率を見る
- 前週の同じ曜日の配水量に、気温の差と天気から経験で数%を足し引きし、区域ごとの翌日の配水量を決める
- 祝日や行事がある日は、過去の同じ行事の日の日報を探して見比べる
- 翌日の配水量から、浄水場の浄水量と、配水池の水位を時間ごとにどう動かすかを日報の表に書く
- 当直の責任者に見せ、了承をもらう
- 翌日、運転の担当が計画に沿って監視制御の仕組みで浄水量と送水を設定する
(a)読み方が人によって違う。 3番目の「数%を足し引き」は、担当ごとに違います。同じ予報を見ても、ベテランは住宅地の区域を5%増やし、若い担当は2%にとどめる、といった差が出ます。 差の理由を聞いても、「去年の今ごろはそうだった」以上の説明が出てきません。
(b)暑さの始まりと連休に外れる。 梅雨明けの最初の暑い日は、前週の実績からは読めません。大型連休の初日は、住宅地が減り観光地が増えるという逆向きの動きが同時に起きます。 こうした日に配水池の水位が夕方に下がりすぎ、夜間に急いで送水を増やすことがあります。
(c)過去の日報を探すのに時間がかかる。 4番目の「過去の同じ行事の日」は、紙の日報の綴りか、年ごとに分かれた表を探します。祝日が曜日を移る年は、去年の同じ日付が当てになりません。
(d)引き継ぎができない。 ベテランの読み方は、数字の表ではなく頭の中にあります。退職の前に読み方を書き残そうとしても、「暑い日は増える」という当たり前のことしか書けません。
- 【自動】 毎日13時に、監視制御の仕組みから書き出された前日までの区域ごとの配水量と、民間の気象会社から届いた翌日の予報をプログラムが読み込む
- 【自動】 区域ごとに、翌日の配水量の真ん中と、上側・下側の幅を出す
- 【自動】 見込みの上側の配水量と時間ごとの配水の形から、浄水量と配水池の水位の計画の案を作る
- 【自動】 気温の予報が過去の範囲を外れる日、祝日や連休の初日、見込みと前週の実績の差が大きい日に印を付ける
- 【人】 運転管理の担当が、計画の案を日報の表で確かめ、印の付いた日は理由を見て直す
- 【人】 当直の責任者が了承する
- 【人】 翌日、運転の担当が計画に沿って監視制御の仕組みで設定する(これまでどおり)
5番目で、担当は「何%足すか」を考える代わりに、見込みと幅を確かめます。 印の無い日は、計画の案を流し見て了承に回せます。時間を使うのは、暑さの始まりや連休の初日のような、過去の記録から読みにくい日です。
7番目を自動にしないのは、意図してのことです。 計画の案を監視制御の仕組みに自動で入れる作りにすると、見込みの誤りや予報の取り違えが、そのまま浄水と送水の操作になります。 人の目と手を1回通すことが、この構成の前提です。
02今回想定するシステム構成
浄水場の監視制御の仕組み(区域ごとの日ごとの配水量の書き出し、一方向) 民間の気象会社の予報の配信(翌日の最高気温・最低気温・天気・降水の有無) 気象庁「過去の気象データ・ダウンロード」(過去の気温・降水量のCSV) │ ▼【トリガー】毎日13時(事務の環境で動かす) Python(pandas) ├──▶ 欠けた日・流量計の異常値を調べる/祝日・連休・行事の項目を作る ▼ statsmodels(SARIMAX、7日の季節性 + 気温などの外の項目) │ 区域ごとの翌日の配水量の真ん中と、幅(上側・下側) ▼ Python ── 時間ごとの配水の形から、浄水量と配水池の水位の計画の案 ▼ 【人が案を確かめ、印の付いた日は直す】── 運転管理の担当・当直の責任者 ▼ 日報の表 ── 運転の担当が監視制御の仕組みに手で入れる
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・statsmodels) | R(forecast パッケージ) |
| 処理エンジン | statsmodels の SARIMAX(外の項目つきの季節の自己回帰和分移動平均) | scikit-learn の HistGradientBoostingRegressor、Prophet |
| 集計 | Python(幅の算出、時間ごとの配水の形による浄水量・水位の計画への換算) | 日報の表の計算式 |
| データの取得元 | 監視制御の仕組みからの一方向の書き出し、気象会社の配信、気象庁のCSV | 監視制御の仕組みの帳票 |
| 結果の出力先 | 事務の環境の日報の表 | 運転管理の連絡の場への通知 |
監視制御の仕組みには、何も書き込みません。 監視制御の側から事務の環境へ、決まった時刻に日ごとの配水量を書き出すだけの一方向のつなぎにします。事務の環境から監視制御の側へは、ネットワークでつなぎません。
土台になるのは、statsmodels の SARIMAX です。 外の項目つきの季節の自己回帰和分移動平均のモデルで、order に (p,d,q)、seasonal_order に (P,D,Q,s) を渡し、s は季節の長さです。 日ごとの配水量には曜日の動きがあるので、s を7にします。exog には、行数 × 項目数の形で外の項目を渡せます。ここに最高気温、降水の有無、祝日、連休の印を入れます。
先を見込むには、get_forecast を使います。 標本の終わりから何歩先を見込むかを steps で渡し、信頼区間を含む結果が返ります。標本の先を見込むときは追加の引数が要る場合があるとされていて、外の項目を使うモデルでは、見込む日の気温の予報などをそこで渡します。 区間は conf_int で取り、alpha の既定は0.05(95%の区間)です。
過去の気温は、気象庁の「過去の気象データ・ダウンロード」から取ります。 昨日までの気象観測のデータから、複数の地点の複数の項目を抽出でき、結果はCSVの形でダウンロードできます。 翌日の予報は、気象庁の気象データ高度利用ポータルサイトが、迅速かつ確実な配信については気象業務支援センターや予報業務許可事業者等に問い合わせるよう案内しているので、契約している民間の気象会社の配信を使います。
03どうやって実装するのか
処理の起点を決める
毎日13時に動かします。 前日の配水量が日報として締まり、民間の気象会社から翌日の予報が届いた後で、運転管理の担当が昼過ぎに計画を立て始める時間に間に合います。 予報の配信の時刻は契約している会社に確かめ、それに合わせて時刻を決めます。
予報が夕方に大きく変わったら、もう一度動かします。 気象会社の配信で翌日の最高気温が前回から2度以上変わったときに、見込みと計画の案を出し直し、運転管理の担当と当直の責任者に知らせます。 了承済みの計画を書き換えるのではなく、差を並べて出します。
監視制御の側からの書き出しが13時までに届かなければ、動かしません。 前々日までの記録で見込むと、前日の急な変化が入らないからです。その日は、担当がこれまでどおりの方法で計画を立てます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 配水量 | 区域ごとの日ごとの配水量、時間ごとの配水量(形を作るため) | 監視制御の仕組みの書き出し |
| 配水池の水位 | 配水池ごとの時間ごとの水位、容量 | 同上 |
| 過去の気象 | 代表地点の日ごとの最高気温・最低気温・降水量 | 気象庁の過去の気象データ・ダウンロード |
| 翌日の予報 | 翌日の最高気温・最低気温・天気・降水の有無 | 民間の気象会社の配信 |
| 暦 | 祝日、連休、年末年始、学校の長期休み、地域の行事 | 内閣府の「国民の祝日」の表と、局の行事の表 |
| 異常の記録 | 漏水の事故、断水、流量計の故障、大口使用者の休止 | 運転管理の記録 |
質を決めるのは、異常の記録です。 大きな漏水の事故があった日は、配水量が跳ねます。その日を普通の日として学ばせると、同じ季節・曜日の見込みが多めにずれます。 運転管理の記録に残っている事故・断水・流量計の故障の日を、学ばせる記録から外す印として使います。
気温は、区域ごとに代表の地点を決めます。 山側の観光の区域は、市街地より気温が低いことが多いので、近いアメダスの地点を区域ごとに選びます。 予報も、同じ地点か近い地点の値を気象会社から受け取ります。
データの取得方法を決める
監視制御の仕組みからは、決まった時刻に、区域ごとの日ごとの配水量と時間ごとの配水量を、決まった列の並びで書き出す設定を作ります。書き出したファイルは、監視制御の側から事務の環境の決まったフォルダへ、一方向で渡します。一方向の渡し方(専用の受け渡しの装置や、媒体による受け渡し)は、局の情報の管理の規程と監視制御の仕組みの保守の会社と決めます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 区域ごとの日ごとの配水量 | 監視制御の書き出し | 学ばせる目的の値 |
| 時間ごとの配水量 | 同上 | 翌日の時間ごとの形 |
| 過去の気温・降水量 | 気象庁のCSV | 外の項目(過去) |
| 翌日の予報 | 気象会社の配信 | 外の項目(翌日) |
| 祝日 | 内閣府の表 | 暦の項目 |
過去の気温は、最初に3年分をまとめて取り、その後は毎日前日の分を足します。 気象庁のCSVを使うときは、気象庁ホームページの利用の条件に沿い、出典を記載し、加工したものは加工したことを示します。 局の内部の資料でも、資料に出典を書いておきます。
AIへ渡す前に整形する
- 欠けた日を調べる … 流量計の故障などで欠けた日は、学ばせる記録から外します。前後の日の平均で埋めません
- 異常の日を外す … 漏水の事故・断水・大口使用者の休止の日に印を付け、学ばせる記録から外します
- 区域の境界の変更を調べる … 配水区域の切り替えで、ある日から区域の受け持ちが変わっていれば、変わった日の前と後を同じ系列として扱わないよう、項目を立てます
- 暦の項目を作る … 祝日、連休の何日目か、年末年始、学校の長期休み、地域の行事
- 気温の項目を作る … 最高気温そのものと、「25度を超えた分」の2つを作ります。暑い側で増え方が急になる形を入れるためです
- 時間ごとの配水の形を作る … 曜日の種類(平日・土曜・日祝)と季節ごとに、1日の配水量に対する時間ごとの割合の平均を作ります
- 夏と冬で確かめ方を分ける … 夏の暑い日と、冬の寒波の日は、見込みの外れ方を別に数えます
1番目と2番目を軽く見ないでください。 流量計の故障で0が並んだ日や、大きな漏水で倍になった日は、1日でもモデルを大きく引っ張ります。埋めて使うより外すほうが、季節の動きを素直に学びます。
1年の季節の動きを、季節の長さ365の形で持たせないのも、意図してのことです。 日ごとのデータで1年の周期をモデルの形に入れると、計算が重くなり、3年分の記録では1年の形を3回しか見られません。夏に増え冬に減る動きの大半は気温で説明できるので、気温の項目に任せます。 気温で説明しきれない季節の差(年度末の転居、夏休みの帰省など)は、暦の項目で足します。
AIに処理させる
させるのは、区域ごとに「翌日の配水量の真ん中と幅」を見込むことだけです。 時間ごとの形への割り振り、浄水量と配水池の水位の計画の案、印付けは、決まった計算で行います。
| 見込むもの | 使うもの | 判断できないときの扱い |
|---|---|---|
| 区域ごとの翌日の配水量(真ん中) | 過去の配水量の並び、7日の季節、最高気温、25度を超えた分、降水の有無、祝日・連休・長期休み | 予報の最高気温が過去3年の範囲外なら out_of_range |
| 翌日の配水量の幅(上側・下側) | 同上の区間 | 幅が真ん中の8%を超えたら wide |
| 時間ごとの配水量 | 真ん中と上側に、時間ごとの割合を掛ける | 連休の初日は holiday_start |
幅は、80%の区間にします。 conf_int の alpha を0.2にし、10日のうち8日はこの間に入るという幅です。配水池の水位の計画は上側で組み、浄水量は真ん中で組みます。浄水は真ん中で作り、配水池の水位の余裕で上側までの差を受け止める、という役割分担です。
SARIMAX を選ぶのは、配水量の並びそのものが強い手がかりだからです。 昨日多ければ今日も多い、という日ごとのつながりと、7日の曜日の動きを、そのままモデルの形として持てます。 気温は外の項目として足し、何度でどれだけ増えるかを係数として読めます。係数が読めることは、第3章の(d)の引き継ぎの材料になります。
| させないこと | 理由 |
|---|---|
| 浄水場の運転の操作 | 見込みの誤りが直接に操作になる。運転の担当が手で入れる |
| 水質の判断と薬品の注入量 | 水質の検査の結果で、水質の担当が決める |
| 断水・給水制限の判断 | 事業の責任者が、住民への影響を見て決める |
| 漏水の事故の推測 | 記録にある事故だけを使う |
| 予報の気温の補正 | 気象会社の予報をそのまま使い、勝手に足し引きしない |
5行目がいちばん起きやすい失敗です。 「この気象会社の予報はいつも1度低い」と感じると、プログラムの中で予報を補正したくなります。補正を入れると、予報が外れた日に外れが二重になります。 予報の外れ方は保存して数え、気象会社と話す材料にします。
指示内容を固定する
この構成は生成AIを使わないので、プロンプトの代わりに、モデルの設定と計算の規則を書いておきます。
【モデル(区域ごとに1つ)】
- statsmodels の SARIMAX
・endog = 区域の日ごとの配水量(異常の日は欠けた値として渡す)
・order = (1, 1, 1)、seasonal_order = (1, 0, 1, 7)
(区域ごとに過去2年で当てはめ、外れ方の小さい組を選んで固定する)
・exog = [最高気温, 最高気温の25度超過分, 降水の有無,
祝日, 連休の日数目, 年末年始, 長期休み]
- 学ばせ直しは月に1回。翌日を見込むのは毎日
- 翌日を見込むとき = get_forecast(steps=1) に翌日の exog を渡す
- 区間 = conf_int(alpha=0.2) で80%の区間
【時間ごとの形】
- 時間ごとの割合 = 直近8週の同じ曜日の種類(平日・土曜・日祝)の平均
- 夏(7〜9月)と冬(12〜2月)は、季節の割合を別に持つ
【浄水量と配水池の水位の案】
- 翌日の浄水量 = 真ん中の配水量の合計(区域の受け持ちの浄水場ごと)
- 配水池の水位 = 前日の夜の水位から、時間ごとに(浄水量 − 上側の配水量)を積み上げる
- 水位が運用の下限を下回る時間があれば、夜間の送水を増やす案を出す
- 運用の下限・上限は、運転管理の責任者が決めた値を設定の表から読む
【印を付ける条件】
- out_of_range … 翌日の最高気温の予報が過去3年の範囲の外
- wide … 80%の区間の幅が真ん中の8%超
- holiday_start … 連休の初日、年末年始の始まり
- jump … 真ん中が前週の同じ曜日の実績から10%以上違う
- low_level … 計画の案で配水池の水位が下限まで1割を切る時間がある
- 印の無い日は、計画の案をそのまま日報の表に載せ、了承に回す
order と seasonal_order を固定するのは、意図してのことです。 毎日いちばん合う組を探し直すと、日によってモデルの形が変わり、同じ天気の日の見込みが日によって違う、という説明のつかない動きが出ます。 組は月に1回の学ばせ直しのときだけ見直します。
浄水量を真ん中、水位を上側で組むのは、配水池を「幅を受け止める場所」として使うためです。 浄水量を上側で組むと、毎日作りすぎます。作る量は真ん中にし、多かった日の分は配水池の水位の余裕から出す、という形にすれば、外れても夕方の山で水位が下がりすぎません。
出力形式を固定する
区域・日ごとに、次の形のJSONを作り、表にして日報の表に載せます。
{
"zone": "",
"date": "",
"weather_input": { "tmax": 0, "tmin": 0, "rain": false, "issued_at": "" },
"demand_m3": { "p50": 0, "lower80": 0, "upper80": 0 },
"last_week_same_day_m3": 0,
"hourly_m3": [ { "hour": 0, "p50": 0, "upper80": 0 } ],
"plant_output_m3": 0,
"reservoir_plan": [ { "reservoir": "", "hour": 0, "level_pct": 0 } ],
"flags": ["out_of_range | wide | holiday_start | jump | low_level"],
"model_version": "",
"operator_override": { "plant_output_m3": null, "reason": "" }
}
1つ目の理由は、weather_input を見込みと並べて残せることです。 どの時刻の予報で見込んだかが分かれば、外れたときに、予報の外れかモデルの外れかを分けられます。
2つ目は、last_week_same_day_m3 を並べて見せられることです。 担当がこれまで使ってきた数と、見込みの数の差が一目で分かります。差が大きい日は、その理由(気温か、祝日か)を印で確かめます。
3つ目は、operator_override で直した記録が残ることです。 担当が浄水量を直したら、その値と理由を書きます。ベテランが直した理由が残れば、それがそのまま引き継ぎの材料になります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 監視制御の仕組み | 一方向の書き出しの受け取り | 区域ごとの配水量、配水池の水位 |
| 民間の気象会社 | 契約している配信の受け取り | 翌日の予報 |
| 気象庁の過去の気象データ | CSVのダウンロード | 過去の気温・降水量 |
| 日報の表 | 事務の環境での書き出し | 見込みと計画の案 |
| 運転管理の連絡の場 | 通知 | 印の付いた日と、予報の変更による出し直し |
監視制御の仕組みへは、何もつなぎ返しません。 計画の案は日報の表までで、運転の担当が日報の表を見て、監視制御の画面で自分で設定します。 これまでの業務の流れの最後の段は変えません。
通知の連絡の場にも、配水量の数字は流しません。 流すのは「印の付いた区域と日」と「日報の表の場所」だけにし、運転の情報が連絡の場の外へ写される経路を作りません。
人が確認する
運転管理の担当が見るのは、毎日の計画の案と、印の付いた日の理由です。 印の無い日は、真ん中と前週の実績の差を見て、了承に回します。全件を前の方法で計算し直す運用にすると、第10章の9.0時間には収まりません。
low_levelを先に見る … 配水池の水位が下限に近づく時間がある日です。夜間の送水を増やすか、区域間の融通を使うかを決めますout_of_rangeとholiday_startを見る … 過去に例の少ない日です。ベテランの見立てと並べ、どちらで組むかを決めますjumpとwideを見る … 前週と大きく違う理由が、気温の予報か暦かを確かめます- 直したら理由を書く …
operator_overrideに値と理由を残します
2番目で、見込みより人の見立てを採る日があって構いません。 見込みは過去3年の記録の範囲で出した数で、初めての暑さや、初めての大きな行事は知りません。 直した理由を残せば、次の年にはその日が学ばせる記録に入ります。
ベテランが在職しているうちは、印の無い日も週に1回は並べて見てもらいます。 見込みとベテランの読みが同じ向きにずれる日が続くなら、モデルに入っていない手がかり(地域の行事、工事による区域の切り替えなど)があるということです。 その手がかりを項目か異常の記録に足すことが、引き継ぎの中身になります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 監視制御の書き出しが届いていない | 見込みを出さず、担当に知らせる。前々日までの記録で見込まない |
| 気象会社の予報が届いていない | 見込みを出さず、担当が予報を見てこれまでの方法で立てる |
| 流量計の故障で前日の配水量が欠けた | 欠けた値として渡し、wide を付ける。埋めない |
| 大きな漏水の事故が起きた | 見込みは使わず、事故の対応の手順に切り替える。その期間は学ばせる記録から外す |
| 寒波で凍結による漏水が増えた | 冬の期間は wide の基準を下げ、担当の確認を増やす |
| 災害で断水・給水制限 | 見込みを止め、災害時の手順に切り替える |
| 配水区域の境界を変えた | 変えた日から別の項目を立て、半年は担当の見立てを優先する |
| 大口使用者が休止・再開した | 運転管理の記録に入れ、その分を見込みに足し引きする |
| 浄水場の設備の点検で浄水量に上限がある | 設定の表に上限を入れ、計画の案が上限を超える日は low_level と同じく先に見る |
| 予報の地点が気象会社の側で変わった | 過去の気温との地点の違いを記録し、半月は wide を付ける |
上から5行目は、毎年の冬に起きます。 寒波の翌朝に、宅内や道路の下の管が凍って割れ、配水量が一時的に増えます。気温が下がると配水量が増えるという逆向きの動きで、夏の暑さの係数とは別に扱います。 最低気温の項目を冬だけ足すかは、過去の寒波の日の記録で確かめてから決めます。
記録を残す
- 読み込んだ配水量の書き出しと、気象会社の予報(配信の時刻を含めて)
- 区域・日ごとの見込み、80%の区間、時間ごとの配水量
- 浄水量と配水池の水位の計画の案
- 運転管理の担当が直した値と理由
- 翌日の実際の配水量と、見込み・予報の外れ方
- モデルの版、
orderとseasonal_order、外の項目の係数
最後の行は、引き継ぎの材料になります。 「最高気温が25度を1度超えると、住宅地の区域の配水量が何%増える」という係数が、区域ごとに毎月残ります。ベテランの頭の中にあった読み方の一部が、数字として残ります。
04実装レベルの3段階
最小構成では、日ごとのつながりが入りません。 昨日多かったから今日も多い、という動きは表計算の補正では出ません。確かめるための段階です。 半自動化で、過去の日報を探して足し引きを決める時間はほぼ無くなります。 ただし、浄水量と配水池の水位の計画は手で残ります。本格構成で、担当が見るのは計画の案と印の付いた日の理由だけになり、この段階が本記事の想定です。 差が大きいのは、配水池の水位を時間ごとに積み上げる作業が、毎日の手作業だからです。 段階を飛ばさないでください。 半自動化の見込みを1年の季節が一巡するまで並べると、外れやすい季節と区域が先に分かります。夏と冬を一度ずつ見てから本格構成に進むほうが、印の付く日が減ります。
05工数削減シミュレーション
導入後 90件 × 6分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 給水人口が数万から数十万人の市町村の水道事業で、浄水場と配水池を持ち、翌日の浄水量と配水池の水位の計画を運転管理の担当が毎日立てている場合。翌日の配水量を、前週の同じ曜日の実績と天気予報を見た経験で決めていて、ベテランの職員の退職で読み方の引き継ぎが課題になっている場合。監視制御の仕組みから配水区域ごとの日ごとの配水量を3年以上取り出せる場合。運転管理を民間に委託している事業でも、受託した会社の側で同じ構成を組める。
- 配水の大半を用水供給事業からの受水でまかない、自前の浄水の量を日々調整する必要がない場合。配水量の記録が日ごとに残っておらず、月ごとの合計しか分からない場合。大口の使用者の使い方で配水量が大きく決まり、気温や曜日との関係が薄い場合。なお、浄水場の運転の操作、水質の判断、断水や給水制限の判断は、この構成では代替できません。
07最小構成で試す方法
- 監視制御の仕組みの日報から、区域ごとの過去2年の日ごとの配水量を表に書き出す
- 気象庁の過去の気象データ・ダウンロードから、同じ期間の代表地点の最高気温と降水量をCSVで取る
- 表計算で、曜日ごとに「最高気温」と「配水量」を並べ、散らばりの図を描く
- 祝日と連休の日に色を付け、普通の日との差を見る
- 前週の同じ曜日の実績を見込みとした場合の外れ方を、月ごとに数える
5番目の「前週の同じ曜日」との比べを、必ず作ってください。 これが、いま担当が使っている見込みの土台です。Python のモデルが、これより小さい外れ方になるかで、進むかどうかを決めます。
| 出てきた内容 | 判断 |
|---|---|
| 気温と配水量の関係が区域ごとにはっきり出る | Python で SARIMAX のモデルに進む |
| 気温との関係が薄く、曜日だけで決まる | 前週の同じ曜日に祝日の補正を足すだけで足りる |
| 日報の配水量に欠けや異常値が多い | 流量計と日報の書き出しを直すのが先 |
3行目が出ることは珍しくありません。 失敗ではなく、読み方を数字で引き継げなかった理由が1つ分かったということです。 流量計の点検と、異常の記録の付け方を直してから、もう一度試してください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 漏水の事故や流量計の故障の日を学ばせる | 異常の記録で印を付けて外す。埋めない |
| 暑い側の増え方が急になる形を取り逃がす | 「25度を超えた分」の項目を足す |
| 寒波の凍結による増加を夏の係数で読む | 冬は別に確かめ、必要なら最低気温の項目を足す |
| 毎日モデルの形を選び直して見込みがぶれる | order と seasonal_order は月に1回だけ見直す |
| 翌日の外の項目を渡し忘れる | 翌日の予報を exog として渡す。届いていなければ止める |
| 予報をプログラムの中で補正する | しない。外れ方を保存して数える |
| 浄水量を上側で組み、毎日作りすぎる | 浄水量は真ん中、配水池の水位は上側で組む |
| 配水区域の境界の変更を同じ系列で扱う | 変えた日から項目を立てる |
| 区域ごとの気温の地点を1つにまとめる | 区域ごとに近いアメダスの地点を選ぶ |
| 計画の案を監視制御の仕組みに自動で入れたくなる | 入れない。 一方向のつなぎを守る |
| 気象庁のデータの出典を書かない | 資料に出典と、加工したことを書く |
上の3行が、この構成の外れのほとんどです。 どれも「普通の日」と「普通でない日」の分け方の問題で、モデルを凝らすより、運転管理の記録をそろえるほうが効きます。
下から2行目は、外れではなく作り方の失敗です。 運用に乗ると、「了承したらそのまま設定まで進めたい」という声が出ます。最初から作らないと決めておいてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 区域ごとの配水量、配水池の水位、浄水場の運転計画、気象のデータです。個人の情報は扱いませんが、水道という重要な設備の運転の情報です。
- 監視制御の仕組みと事務の環境を一方向でつなぐ … 事務の環境から監視制御の側へは、ネットワークでつなぎません。一方向の受け渡しの方法は、局の情報の管理の規程と保守の会社と決めます
- 運転の操作に自動でつながない … 出すのは計画の案までで、監視制御の仕組みへの設定は運転の担当が手で行います
- 配水池の水位や運転計画を外に出さない … 配水池ごとの水位の動きは、設備の弱いところを示す情報にもなります。外部の生成AIのサービスに日報を貼り付けて見込ませる使い方はしません
- 見られる人を絞る … 見込みと計画の案の表は、運転管理の担当と責任者に限ります
- 気象庁のデータの利用の条件を守る … 気象庁ホームページの情報は、権利の表記が無い限り公共データ利用規約(第1.0版)に沿って使え、出典の記載が求められ、加工したものは加工したことを示し、国が作ったかのように示してはならないとされています
- 外れたときの手順を先に決める … 見込みを止めて、これまでの方法に戻す条件(書き出しが届かない、予報が届かない、事故・災害)を、運用の手順書に書いておきます
誤りが起きた場合のリスクは、配水量を少なめに見込んで配水池の水位が下がりすぎることと、多めに見込んで浄水を作りすぎることの2つです。 前者は異常の日を外さずに学ばせた後の季節の変わり目に起き、後者は浄水量を上側で組むと起きます。前者のほうが重いので、配水池の水位の計画は上側で組みます。
10まず何から始めるか
1週目:異常の日の一覧を作る
運転管理の記録から、過去3年の漏水の事故・断水・流量計の故障・大口使用者の休止の日を、日付の一覧にします。何日あったか、どの区域かを数えます。この一覧が無いと、どのモデルも正しく学べません。
2週目:前週の同じ曜日との比べを作る
第8章の手順で、区域ごとの配水量と気温の関係を表計算で見て、前週の同じ曜日を見込みとした場合の外れ方を月ごとに数えます。この外れ方が、Python のモデルが超えるべき線です。
3週目:書き出しと予報の受け取りを決める
監視制御の仕組みからの一方向の書き出しの方法を、局の情報の管理の担当と保守の会社と決めます。気象会社の配信で、区域ごとの代表地点の予報が受け取れるかも確かめます。
4週目:Python で翌日の見込みを出す
住宅地の区域だけで SARIMAX のモデルを学ばせ、翌日の真ん中と80%の区間を出します。この時点では運転計画には使わず、担当の見込みと実際の配水量と並べて毎日記録します。
2か月目以降: 残りの区域、時間ごとの形、浄水量と配水池の水位の計画の案、印付けを足します。夏と冬を一度ずつ並べて確かめ、 1件20分が何分になったかを実測します。ベテランが直した理由が記録に残り、若い担当が係数と印を見て計画を説明できるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
外の項目つきの季節の自己回帰和分移動平均のモデルであること。endog、exog(行数 × 項目数の形)、order(p,d,q)、seasonal_order(P,D,Q,s で s は季節の長さ)、trend、enforce_stationarity の意味 | statsmodels: SARIMAX | 2026-10-15 |
get_forecast が信頼区間を含む標本の先の見込みを返すこと。steps の意味。標本の先を見込むときは追加の引数が要る場合があること | statsmodels: SARIMAXResults.get_forecast | 2026-10-15 |
| 昨日までの気象観測のデータから、複数の地点の複数の項目を抽出でき、結果をCSVの形でダウンロードできること。地点を全国の気象台とアメダスから選べること | 気象庁: 過去の気象データ・ダウンロード(使い方) | 2026-10-15 |
| 気象情報の迅速かつ確実な配信については、気象業務支援センターや予報業務許可事業者等に問い合わせるよう案内されていること。アメダスの観測データ(CSV)や防災情報XMLが提供されていること | 気象庁: 気象データ高度利用ポータルサイト | 2026-10-15 |
| 気象庁ホームページの情報は、権利の表記が無い限り公共データ利用規約(第1.0版)に沿って使えること。出典の記載、加工した場合の表示、国が作ったかのように示してはならないこと | 気象庁: ホームページについて(利用規約) | 2026-10-15 |
conf_int が見込みの区間を返し、alpha が区間の有意水準で既定が0.05(95%の区間)であること | statsmodels: PredictionResults.conf_int | 2026-10-15 |
配水池の運用の下限・上限と、監視制御の仕組みとの境界の作り方は、局の規程と保守の会社との取り決めで決めてください。 本記事は上記の公開資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1749)についてのご相談はこちらから。
