時間貸し駐車場の運営会社が、入出庫の記録とイベント・天気から Python で駐車場ごと・時間帯ごとの満車を予測し、料金の見直しの材料にする
駐車場ごとに、入出庫の記録から時間帯ごとの在車の台数を作り、催し・天気・曜日から満車になる確率を見込みます。普段の日に満車になる時間帯と空いている時間帯を分けて、料金を見直す材料の表にします。
- 連携・自動化
- Python
- 対象業界
- その他/不動産
- 対象部門
- 経営企画
- 対象業務
- 比較検討/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 担当者が、順番の回ってきた駐車場の売上の月報を、過去12か月分開く
- 管理の仕組みから、その駐車場の満車の表示の記録を1か月分書き出す
- 満車の表示の時刻を見て、満車になりやすい曜日と時間帯の見当を付ける
- 近くの催しの予定を調べ、満車の日のうち催しの日がどれかを照らす
- 近くの競合の駐車場の料金を、現地の写真や地図のサービスで確かめる
- 「据え置き」「上げる候補」「下げる候補」を付け、理由を一行書く
- 自動毎月1日、管理の仕組みから前月までの入出庫の記録と満車の表示の記録を書き出す
- 自動Python が、駐車場ごとに15分ごとの在車の台数と、満車だったかどうかを作る
- 自動暦・催しの表・天気の記録を、15分ごとの行に足す
- 自動モデルが、駐車場 × 曜日 × 15分ごとに、満車になる確率を見込む
- 自動順番の回ってきた90か所について、催しの無い普段の日の満車の確率と、空き方の表を作る
- 自動決まった規則で、「上げる候補の時間帯」「下げる候補の時間帯」に印を付ける
- 自動過去に料金を変えた駐車場は、変える前と後の満車の確率と台数を並べる
- 人担当者が材料を見て、競合の料金と地権者との取り決めを確かめ、候補を付けて理由を書く
- 人部長の会議で決め、変える駐車場は看板と精算機の設定の変更を手配する
各工程の詳しい説明を読む
- 担当者が、順番の回ってきた駐車場の売上の月報を、過去12か月分開く
- 管理の仕組みから、その駐車場の満車の表示の記録を1か月分書き出す
- 満車の表示の時刻を見て、満車になりやすい曜日と時間帯の見当を付ける
- 近くの催しの予定を調べ、満車の日のうち催しの日がどれかを照らす
- 近くの競合の駐車場の料金を、現地の写真や地図のサービスで確かめる
- 「据え置き」「上げる候補」「下げる候補」を付け、理由を一行書く
(a)売上の月報には時間帯が無い。 1番目の月報は月ごとの売上と台数の合計です。売上が伸びていても、昼に満車で取りこぼしているのか、夜に空いているのかは分かりません。 時間帯を見るには、2番目の書き出しを開くしかありません。
(b)催しの日と普段の日が混ざる。 4番目の照らし合わせは手作業で、催しの予定を調べ切れない月は、催しの日の満車をそのまま「よく満車になる駐車場」と読んでしまいます。 料金を上げた後に、普段の日の台数が落ちて気づきます。
(c)空いている時間が見えない。 満車の表示の記録は満車の時刻しか残しません。夜にほとんど空いている駐車場は、記録が何も無いので目に留まりません。 下げる候補が少ないのは、空いていないからではなく、見えていないからです。
(d)見直しの根拠が人によって違う。 「月に10日満車なら上げる」という人もいれば、「売上が前年より伸びていれば上げる」という人もいます。部長の会議で、同じ程度の駐車場が一方は上げる候補、もう一方は据え置き、ということが起きます。
- 【自動】 毎月1日、管理の仕組みから前月までの入出庫の記録と満車の表示の記録を書き出す
- 【自動】 Python が、駐車場ごとに15分ごとの在車の台数と、満車だったかどうかを作る
- 【自動】 暦・催しの表・天気の記録を、15分ごとの行に足す
- 【自動】 モデルが、駐車場 × 曜日 × 15分ごとに、満車になる確率を見込む
- 【自動】 順番の回ってきた90か所について、催しの無い普段の日の満車の確率と、空き方の表を作る
- 【自動】 決まった規則で、「上げる候補の時間帯」「下げる候補の時間帯」に印を付ける
- 【自動】 過去に料金を変えた駐車場は、変える前と後の満車の確率と台数を並べる
- 【人】 担当者が材料を見て、競合の料金と地権者との取り決めを確かめ、候補を付けて理由を書く
- 【人】 部長の会議で決め、変える駐車場は看板と精算機の設定の変更を手配する
8番目が、この設計の分かれ目です。 材料は出しますが、料金を変えるかどうかは担当者と部長が決めます。 競合の料金、地権者との取り決め、看板の掛け替えの手間は記録に載っていないからです。
7番目は、料金の効き方を見込むものではありません。 料金を変えた前後の数字を並べるだけです。料金を変えたのと同じ時期に近くに競合ができていれば、その差は料金のせいではありません。 担当者が読むための材料として置きます。
02今回想定するシステム構成
駐車場の管理の仕組み(精算機の入出庫の記録/満車の表示の記録/料金の設定の履歴) │ 毎月1日に前月までを書き出し ▼【トリガー】定時実行 Python(pandas) ├──▶ 15分ごとの在車の台数と、満車だったかどうか ├──▶ 暦・催しの表・天気の記録を足す ▼ scikit-learn(HistGradientBoostingClassifier:満車になる確率) ▼ Python ── 普段の日の満車の確率の表/空き方の表/候補の時間帯の印/料金を変えた前後の比較 ▼ 料金の見直しの材料(駐車場ごとの1枚) ▼ 【担当者が競合と地権者との取り決めを確かめ、候補を付ける → 部長の会議】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn の HistGradientBoostingClassifier) | R、BigQuery ML、LightGBM |
| データの取得元 | 駐車場の管理の仕組みの書き出し | 管理の仕組みのAPI(提供されている場合) |
| 材料の出力先 | 共有フォルダの駐車場ごとの材料(表と図) | 社内のダッシュボード |
| 定時実行 | 社内のジョブ管理の仕組み | OSのタスクスケジューラ |
生成AIは使いません。 この構成で行うのは、記録から満車の確率を見込み、表と印に直す計算です。入出庫の記録を外部の生成AIに渡す場面を、最初から作りません。
駐車場の管理の仕組みの料金の設定には書き込みません。 料金の変更は、決まった後にいまと同じ手順で担当者が行います。
モデルに HistGradientBoostingClassifier を選ぶのは、満車になるかどうかの2つの区分の確率を出せて、欠けた値とカテゴリの列をそのまま扱えるからです。 公式の説明では、2クラスでは log_loss がロジスティック損失にあたり、predict_proba で区分ごとの確率を返すとされています。天気の記録が欠けた日も、欠けたまま渡せます。 学ばせるときに、欠けた値を分かれ目の左右どちらへ送るかを学ぶとされているからです。
料金の列には、単調の制約を付けます。 公式の説明では、monotonic_cst で列ごとに増える向き(1)・減る向き(-1)の制約を付けられ、2クラスの分類では、正の区分の確率への効き方の向きを決めるとされています。料金が高いほど満車になりにくい、という向きを -1 で決めます。ただし、制約は効き方の形を整えるだけで、料金を変えたら何台減るかを教えてくれるものではありません。
03どうやって実装するのか
処理の起点を決める
毎月1日の定時実行を起点にします。 その月に順番の回ってくる90か所の材料を、前月までの記録で作ります。材料は月初の3営業日のうちに担当者の手元にそろえ、月の中ごろの部長の会議に間に合わせます。
モデルの学び直しも、毎月1日にまとめて行います。 全270か所の直近24か月の記録で学ばせ、前のモデルより当たっているかを確かめてから入れ替えます。 駐車場ごとに別のモデルを作らず、駐車場を列として渡します。区画の少ない駐車場や、記録の短い駐車場の見込みが不安定になるからです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 入出庫の記録 | 駐車場の番号、入庫の時刻、出庫の時刻、精算の金額、精算の区分(通常・最大料金・夜間・提携の割引) | 駐車場の管理の仕組み |
| 満車の表示の記録 | 駐車場の番号、満車の表示を出した時刻と消した時刻 | 駐車場の管理の仕組み |
| 駐車場の属性 | 区画の数、立地の区分(駅前・繁華街・病院・住宅地・催しの会場の近く)、営業時間 | 駐車場の台帳 |
| 料金の設定の履歴 | 料金の表(時間の単価・最大料金・夜間料金)と、適用の開始日 | 駐車場の管理の仕組み |
| 催しの表 | 会場、日付、開始と終了の時刻、規模の区分 | 担当者が作る表 |
| 暦 | 曜日、祝日、連休、月末、学校の休み | 担当者が作る表 |
| 天気の記録 | 1時間ごとの降水の有無と量、気温 | 契約している気象情報の提供元 |
質を決めるのは、満車の表示の記録です。 入出庫の記録から在車の台数を作っても、区画の数と在車の台数が一致した時刻が満車とは限りません。 故障で使えない区画や、工事で閉めている区画があるからです。満車の表示を出していた時刻を、満車の答えにします。 表示の記録が残らない駐車場は、在車の台数が区画の数から1台を引いた数以上になった時刻で代えます。
催しの表は、担当者が作ります。 競技場の試合、会館の公演、花火、祭りなど、催しの会場から歩いて行ける範囲の駐車場に番号を結び付けます。会場ごとに一度作れば、毎月は日程を足すだけです。
読まない列も決めます。 ナンバーを読み取るカメラのある駐車場でも、ナンバーの記録は書き出しません。提携の割引の区分は、どの店の割引かまでは要らず、「提携の割引あり」だけで足ります。
データの取得方法を決める
駐車場の管理の仕組みから、前月までの入出庫の記録、満車の表示の記録、料金の設定の履歴を書き出します。書き出しの列の名前と数は、毎月の処理の最初に決めたとおりかを照らし、違えばそこで止めます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 入庫と出庫の時刻 | 入出庫の記録 | 15分ごとの在車の台数 |
| 満車の表示の時刻 | 満車の表示の記録 | 満車だったかどうかの答え |
| 料金の表と適用の開始日 | 料金の設定の履歴 | その時刻に効いていた料金の列 |
| 催しの日程 | 担当者が作る表 | 催しの日の印 |
| 1時間ごとの天気 | 気象情報の提供元 | 天気の列 |
精算機ごとの時計のずれを確かめます。 精算機の時計が数分ずれていると、入庫と出庫の時刻がずれ、15分ごとの在車の台数が隣の15分に流れます。 管理の仕組みが時刻を合わせているかを最初に確かめ、合わせていない精算機は書き出しの段階で補正します。
料金の列は、その時刻に効いていた料金の表から作ります。 料金の設定の履歴の適用の開始日で、どの日のどの15分にどの料金だったかを引きます。過去に料金を変えた駐車場では、変える前と後で列の値が変わります。
AIへ渡す前に整形する
- 在車の台数を作る … 入庫の時刻から出庫の時刻までの車を、15分ごとに数えます。営業時間の外の15分は行を作りません
- 長く停まっている車を分ける … 72時間を超えて停まっている車は、別の列に数えます。放置された車が区画を埋めているのか、需要なのかを分けるためです
- 満車の答えを作る … 15分のうち満車の表示が出ていた時間が半分を超えれば「満車」とします
- 閉めていた区画を引く … 工事や故障で閉めていた区画の数を、その日の区画の数から引きます
- ずらした列を作る … 1週間前・2週間前・前年の同じ曜日の、同じ15分に満車だったかを列にします
- 催しの印を付ける … 催しの開始の2時間前から終了の1時間後までを「催しの時間」とします
- 異常な日を外す … 精算機が止まっていた日、災害で閉めた日は学ばせる記録から外します
学ばせる記録の1行は、次のような形にします。1行が「ある駐車場の、ある日の15分」です。
{
"lot_id": "P-0142",
"location_type": "hospital",
"capacity": 24,
"closed_spaces": 0,
"date": "2026-09-16",
"slot": "11:15",
"weekday": "wed",
"holiday_flag": "none",
"event_window": false,
"rain_class": "none",
"temp_c": 27.0,
"price_per_30min": 300,
"daily_max_price": 1200,
"full_lag_7d": true,
"full_lag_14d": true,
"full_lag_364d": false,
"long_stay_cars": 1,
"occupied": 24,
"full": true
}
occupied と full は答えを作るための列で、見込みには入れません。 long_stay_cars は、見込む月の前月の値を入れます。見込む時点で手に入る値だけを列にするためです。
2番目を省くと、放置された車が多い駐車場が「よく満車になる駐車場」に見えます。 料金を上げても放置の車は減らず、普段の利用者だけが他へ流れます。 長く停まっている車の多い駐車場は、料金ではなく見回りの頻度の話です。
AIに処理させる
させるのは、駐車場 × 日 × 15分ごとに、満車になる確率を見込むことだけです。 普段の日の表、候補の時間帯の印、料金を変えた前後の比較は、確率を受け取った後の Python の側で決まった規則で行います。
| 見るもの | 扱い方 | 判断できないときの扱い |
|---|---|---|
| 駐車場の立地の区分 | カテゴリの型 | 台帳に無ければ「不明」の区分 |
| 曜日・15分の枠・祝日 | 暦の表から | 暦に無い日は平日扱い |
| 催しの時間 | 催しの表から | 表に無ければ催し無し |
| 天気 | 降水の3つの区分と気温 | 記録が無ければ欠けた値 |
| その時刻の料金 | 時間の単価と最大料金 | 履歴が無ければ欠けた値 |
| 過去の満車 | 1週間前・2週間前・前年 | 記録が無ければ欠けた値 |
料金の列には monotonic_cst で -1 を付けます。 公式の説明では、カテゴリの列には単調の制約を付けられないとされているので、料金は数値の列として渡します。 制約が無いと、たまたま料金を上げた時期に近くで再開発が進んでいた駐車場の記録から、「料金が高いほど満車になる」という形を学ぶことがあります。
普段の日の確率は、同じモデルに「催しの時間ではない」「雨ではない」という行を作って見込みます。 順番の回ってきた駐車場について、来月の曜日 × 15分の枠ごとに、催し無し・雨無しの行を並べてモデルに通し、その確率を表にします。催しのある日の確率は、別の表に分けて出します。
候補の時間帯の印は、決まった式で付けます。
上げる候補の時間帯 = 普段の日の満車の確率 ≥ 0.6 の15分が、同じ曜日の区分で連続して1時間以上
下げる候補の時間帯 = 普段の日の在車の割合(直近3か月の平均)≤ 0.3 の15分が、連続して3時間以上
最大料金の見直しの候補 = 最大料金で精算した車の割合が直近3か月で上位1割の駐車場
| させないこと | 理由 |
|---|---|
| 料金の額を決める | 地権者との契約、競合の料金、看板の手間を見て人が決める |
| 料金を変えたときの台数の見込み | 料金を変えた記録が少なく、効き方を見込める材料が無い |
| 精算機の料金の設定の変更 | 決まった後に担当者が行う |
| 催しの推し量り | 担当者が表に足す |
2行目が大事です。 単調の制約を付けたモデルに料金を変えた行を通せば、確率は動きます。しかしその動きは、料金を変えた記録が少ない中で形を整えただけの値で、料金の効き方を見込んだものではありません。 材料には出しません。
当たり方は、満車の確率の当たり方で見ます。 学ばせる期間と確かめる期間は TimeSeriesSplit で分けます。公式の説明では、時刻の順に並んだ記録で、前の期間で学ばせて後の期間で確かめる分け方で、通常の交差検証では未来の記録で学んで過去で確かめてしまうとされています。gap で学ばせる期間の末尾を除けるので、1週間前の列が確かめる期間にかからないよう、1週間分を空けます。
指示内容を固定する
この構成は生成AIを使わないため、プロンプトはありません。 代わりに、学ばせ方・普段の日の作り方・候補の印の線・材料に載せる内容を、ひとつの設定ファイルにまとめます。
【見込む先】
full: 15分のうち満車の表示が半分を超えた(表示の記録が無い駐車場は 在車 ≥ 区画の数 − 閉めた区画 − 1)
単位: 駐車場 × 日 × 15分
学習期間: 前月までの24か月(全270か所をまとめて1つのモデル)
検証: TimeSeriesSplit(日付の単位で5つに分け、gap で1週間分を空ける)
【モデル】
HistGradientBoostingClassifier(loss="log_loss", categorical_features="from_dtype")
monotonic_cst: {"price_per_30min": -1, "daily_max_price": -1}
入れ替えの条件: 検証の期間で、前のモデルより確率の当たり方が良いこと
【普段の日】
event_window: false rain_class: none holiday_flag: none
来月の曜日 × 15分の枠ごとに見込み、同じ曜日の区分(平日・土曜・日祝)でまとめる
【候補の印】
上げる候補: 満車の確率 0.6 以上が1時間以上続く
下げる候補: 在車の割合 0.3 以下が3時間以上続く
最大料金の見直し: 最大料金で精算した車の割合が上位1割
【材料に載せる内容】
- 曜日の区分 × 15分の、普段の日の満車の確率の表
- 曜日の区分 × 15分の、在車の割合の表(直近3か月)
- 催しのある日の満車の確率(別の表)
- 候補の時間帯の印と、印を付けた理由の式
- 長く停まっている車の台数の推移
- 料金を変えた駐車場の、変える前と後の3か月の比較
- 駐車場法の届出の対象かどうか(台帳の印)
「普段の日」の決め方を設定ファイルに書くのが大事です。 担当者によって「雨の日も普段の日に入れる」「祝日の前の金曜は外す」と分かれると、同じ駐車場の材料が人によって違う形になります。 決め方を1か所に書き、変えるときはその履歴を残します。
「駐車場法の届出の対象かどうか」を材料に載せるのは、変えると決めた後の手配を漏らさないためです。 駐車場法では、都市計画区域の中で駐車の用に供する部分が500平方メートル以上の、料金を取る路外駐車場の管理者は、駐車料金に関する事項を含む管理規程を届け出ることとされ、管理規程に定めた事項を変更したときは10日以内に届け出なければならないとされています。
出力形式を固定する
材料は駐車場ごとの1枚の表と図で出し、同じ内容を JSON でも残します。 表と図は担当者と部長の会議で読むため、JSON は翌月以降の振り返りのためです。
{
"run_at": "2026-10-01T06:00:00+09:00",
"lot_id": "P-0142",
"review_month": "2026-10",
"capacity": 24,
"normal_day_full_prob": [
{ "day_type": "weekday", "slot": "11:15", "p_full": 0.0 }
],
"occupancy_rate": [
{ "day_type": "weekday", "slot": "21:00", "rate_3m": 0.0 }
],
"event_day_full_prob": [
{ "event_id": "", "slot": "", "p_full": 0.0 }
],
"flags": [
{ "type": "raise | lower | max_price", "day_type": "weekday",
"from": "11:00", "to": "14:00", "rule": "" }
],
"long_stay_trend": [ { "month": "2026-09", "cars": 0 } ],
"price_change_compare": null,
"parking_act_filing": true,
"model_version": "",
"decision": "keep | raise | lower | null",
"decided_by": "",
"reason": ""
}
1つ目の理由は、印と決定を同じ行に残せることです。 flags は計算が埋め、decision と reason は担当者が埋めます。3か月後に同じ駐車場の順番が回ってきたとき、前回の印と決定を読み直せます。
2つ目は、rule で印の根拠が読めることです。 「満車の確率0.6以上が平日の11時から14時まで続いた」と式のまま残すので、部長の会議で「なぜ上げる候補なのか」を数字で説明できます。
| 列 | 担当者が見ること |
|---|---|
normal_day_full_prob | 普段の日に満車になりやすい時間帯 |
event_day_full_prob | 催しの日だけ満車になる時間帯(料金の表ではなく催しの日の料金の話) |
long_stay_trend | 長く停まっている車が増えていないか |
parking_act_filing | 変えると決めたら、届出の手配が要るか |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 駐車場の管理の仕組み | データの書き出し(読み取りのみ) | 入出庫、満車の表示、料金の設定の履歴 |
| 駐車場の台帳 | 読み取りのみ | 区画の数、立地の区分、届出の対象の印 |
| 気象情報の提供元 | 契約に基づく取得 | 1時間ごとの天気の記録 |
| 共有フォルダ | 材料の書き出し | 駐車場ごとの1枚 |
| 社内のチャット | 通知 | 材料ができたこと、上げる・下げる候補の駐車場の数 |
駐車場の管理の仕組みへは書き込みません。 料金の設定を自動で変えると、看板の料金と精算機の料金が食い違う時間ができます。 利用者にとっては、表示と違う料金を取られることになります。
人が確認する
- 催しの日と普段の日の違いを見る …
event_day_full_probだけが高い駐車場は、料金の表を変えずに、催しの日の扱いを考えます - 長く停まっている車を見る …
long_stay_trendが増えていれば、料金より先に見回りを考えます - 競合の料金を確かめる … 近くの競合の駐車場の料金を、いまと同じ方法で確かめます
- 地権者との取り決めと届出を確かめる … 料金を変えるときの取り決めと、
parking_act_filingを見ます - 候補を付けて理由を書く …
decisionとreasonを埋めます
1番目を省かないでください。 普段の日の表と催しの日の表を並べて見るのは、料金の表を上げても催しの日の満車は変わらず、普段の日の利用者だけが減ることがあるからです。
目標は、90件をならして1件12分です。 印の無い駐車場は表を流し見て据え置きにし、印のある駐車場は競合と取り決めを確かめるので時間がかかります。 その配分でならすと12分です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 書き出しが届かない・列が違う | 処理を止め、材料を作らずに担当に知らせる |
| 精算機が止まっていた期間がある | その期間を学ばせる記録から外し、材料に「記録の欠け」と出す |
| 満車の表示の記録が無い駐車場 | 在車の台数で代え、材料に「表示の記録なし」と出す |
| 開業から3か月未満の駐車場 | 見込みは出すが、材料に「記録が短い」と出して印を付けない |
| 区画の数が台帳と記録で違う | 台帳を直すまで見込まず、担当に知らせる |
| 近くに大きな施設が開業した・競合ができた | 担当者が番号を指定して作り直す。前の記録の傾向が当てはまらないと材料に書く |
| 学び直したモデルが前より当たらない | 入れ替えず、前のモデルを使い続けて知らせる |
| 天気の記録が取れない | 天気の列を欠けた値にして見込み、材料に「天気なし」と出す |
4行目で印を付けないのは、誤りの向きを決めるためです。 開業したばかりの駐車場は、まだ知られていないだけで空いていることがあります。その時期に下げる候補の印を付けると、知られる前に料金を下げることになります。
記録を残す
- 毎月の書き出しと、15分ごとの在車の台数と満車の答え
- 見込み(満車の確率)と、使ったモデルの版
- 駐車場ごとの材料と、印と印の式
- 担当者の決定と理由、部長の会議の結論
- 料金を変えた駐車場の、変えた日と新しい料金の表
- 設定ファイルの変更の履歴(普段の日の決め方、印の線)
4つ目と5つ目を並べて残すのが、この構成の振り返りの土台です。 料金を変えた駐車場の3か月後の材料には、変える前と後の比較が自動で載ります。 何回か一巡すると、印の線が高すぎるか低すぎるかが見えてきます。
04実装レベルの3段階
最小構成では、天気と催しの重なりが扱えません。 割合を区分ごとに出すだけなので、雨の土曜の試合の日のような重なりは見えません。 確かめるための段階です。 半自動化で、1件40分が20分程度になります。 表はそろいますが、催しの日の表、印の付け方、前回の決定の読み直しが担当者に残ります。本格構成で12分になり、この段階が本記事の想定です。 差が大きいのは、印の付け方を担当者ごとに考えていた時間が無くなるからです。 段階を飛ばさないでください。 半自動化の表を一巡分見ると、満車の表示の記録が欠ける駐車場と、長く停まる車の多い駐車場が先に分かります。
05工数削減シミュレーション
導入後 90件 × 12分 ÷ 60 = 18 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 時間貸しの駐車場を数十か所から数百か所運営していて、駐車場ごとの料金(時間の単価・最大料金・夜間料金)を本部が定期的に見直している会社。精算機や管理の仕組みから、入庫と出庫の時刻を1台ずつ書き出せる場合。料金の見直しを、担当者が売上の月報と現地の感覚で決めていて、駐車場によって見直しの根拠の厚さが違う場合。
- 運営している駐車場が数か所で、担当者が毎日の様子を見て料金を決められる場合。入出庫の記録が日ごとの売上の合計しか残っておらず、時刻が分からない場合。月極の契約が中心で、時間貸しの区画が少ない場合。なお、料金をいくらにするか、地権者との契約の範囲、管理規程の届出、看板と精算機の設定の変更は、この構成では代替できません。
07最小構成で試す方法
- 料金の見直しの順番が来月回ってくる駐車場から、10か所を選ぶ(催しの会場の近くを2か所以上入れる)
- 管理の仕組みから、その10か所の入出庫の記録と満車の表示の記録を3か月分書き出す
- 表計算で、曜日の区分 × 1時間ごとに、満車の表示が出ていた日の割合を出す
- 催しの日を外したものと、外さないものの2つの表を作る
- 2つの表を並べ、担当者がいまの方法で付けた候補と比べる
10か所は必ずやってください。 モデルを作る前に、「催しの日を外すと、満車の見え方が変わる駐車場があるのか」を確かめます。ナンバーの記録の列は書き出さないでください。
| 出てきた内容 | 判断 |
|---|---|
| 催しの日を外すと満車の割合が大きく下がる駐車場がある | モデルに進む。 普段の日と催しの日を分ける意味がある |
| どちらの表もほとんど同じ | 催しの影響は小さい。在車の割合の表を足して、下げる候補を探す |
| 満車の表示の記録が日によって抜けている | 管理の仕組みの設定が先。 表示の記録が残っているかを確かめる |
3行目が出ることは珍しくありません。 失敗ではなく、満車の時間帯を確かめる記録が足りていなかったことが分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 満車の時間の在車の台数を需要と読む | 満車になるかどうかを確率で見込む。 台数そのものを需要にしない |
| 催しの日の満車で普段の日まで満車に見える | 催しの表で分け、普段の日の確率を別に出す |
| 放置の車で満車に見える | 72時間を超える車を別に数え、推移を材料に載せる |
| 精算機の時計がずれて在車がずれる | 時計の合わせ方を確かめ、ずれは書き出しで補正する |
| 料金が高いほど満車になる形を学ぶ | 料金の列に単調の制約を付ける |
| 制約を付けたモデルで料金の効き方を見込む | 効き方は出さない。 前後の比較を並べるだけにする |
| 検証ではよく当たるのに本番で外れる | 見込む時点で手に入る値だけで列を作り、gap を空ける |
| 開業したばかりの駐車場に下げる印が付く | 3か月未満は印を付けない |
| 料金の設定を自動で変えて看板と食い違う | 書き込まない。変更は人が手配する |
| 届出の対象の駐車場で届出が漏れる | 台帳の印を材料に載せる |
上の3行が、この構成の失敗のほとんどです。 どれも、記録の満車が、料金で動く需要の満車とは限らないという同じところから出ています。
下の2行は、決めた後に効いてきます。 料金を変えると決めても、看板と精算機と届出の手配が漏れれば、利用者に表示と違う料金を取ることになりかねません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 駐車場ごとの入出庫の時刻と精算の金額、満車の表示の記録、料金の設定の履歴です。ナンバーを読み取るカメラのある駐車場では、管理の仕組みにナンバーの記録も入っています。
- ナンバーの記録を書き出さない … 見込みに要るのは時刻と台数だけです。ナンバーと時刻を結び付けた記録は、特定の車がいつどこにいたかを示してしまいます
- 1台ずつの記録を残しすぎない … 15分ごとの在車の台数を作った後は、学び直しに要る期間を過ぎた1台ずつの記録を消す決まりを作ります
- 料金は人が決める … この構成は材料を出すだけです。料金の額と、変えるかどうかは担当者と部長が決めます
- 届出の手配を漏らさない … 都市計画区域の中で駐車の用に供する部分が500平方メートル以上の、料金を取る路外駐車場では、駐車料金を含む管理規程を変更したときに10日以内に届け出ることとされています。届出の対象かどうかの印を台帳に持ち、材料に載せます
- 地権者との契約を材料に載せない … 契約の中身は台帳で担当者が確かめます
- 生成AIに記録を渡さない … この構成は生成AIを使いません。理由の文を作るために材料をチャットのAIに貼り付けることも、運用の決まりで禁じます
- 気象情報の利用条件を守る … 天気の記録の取得と保存は、提供元との契約の範囲で行います
誤りが起きた場合のリスクは、催しの日の満車を普段の日と読んで料金を上げすぎることと、変えた料金の表示と手続きが漏れることの2つです。 前者は普段の利用者を他へ流し、後者は利用者と行政の両方への信頼にひびきます。だから材料は普段の日と催しの日を分け、届出の印まで1枚に載せています。
10まず何から始めるか
1週目:満車の表示の記録を確かめる
管理の仕組みが、駐車場ごとに満車の表示を出した時刻と消した時刻を残しているかを確かめます。ここが最初の分かれ目です。 あわせて、精算機の時計の合わせ方と、ナンバーの記録を書き出しから外せるかを確かめます。
2週目:10か所で試す
来月の順番の10か所で、曜日 × 1時間ごとの満車の日の割合を、催しの日を外したものと外さないもので出し、担当者の候補と比べます。催しの日を外すと見え方が変わる駐車場があるかを見ます。
3週目:催しの表と台帳を整える
催しの会場ごとに、歩いて行ける範囲の駐車場の番号を結び付けた表を作ります。駐車場の台帳に、区画の数、立地の区分、駐車場法の届出の対象かどうかの印をそろえます。普段の日の決め方と印の線を設定ファイルに書きます。
4週目:15分ごとの在車の台数を作る
Python で、全270か所の15分ごとの在車の台数と満車の答えを作るところまで作ります。この時点ではモデルを作らず、在車の台数の合計が売上の月報の台数と合うかを確かめます。
2か月目: モデルで普段の日の満車の確率を出し、担当者は従来どおり決めながら材料と並べます。3か月目以降: 候補の印、催しの日の表、長く停まる車の推移、届出の印を1枚にまとめ、decision と reason を記録します。270か所を一巡し、印と決定のずれを見て印の線を見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
HistGradientBoostingClassifier の log_loss が2クラスではロジスティック損失にあたること。predict_proba が区分ごとの確率を返すこと。欠けた値をそのまま扱い、分かれ目ごとに左右どちらへ送るかを学ぶこと。categorical_features の既定が "from_dtype" であること(ページは scikit-learn 1.9.1) | scikit-learn: HistGradientBoostingClassifier | 2026-10-15 |
monotonic_cst で列ごとに増える向き(1)・減る向き(-1)・制約なし(0)を付けられること。2クラスの分類では正の区分の確率への効き方の向きを決めること。制約は効き方を限られた形でしか縛らないこと。多クラスの分類では使えず、カテゴリの列には付けられないこと | scikit-learn: Ensembles(Histogram-Based Gradient Boosting の Monotonic Constraints) | 2026-10-15 |
TimeSeriesSplit が、前の期間で学ばせて後の期間で確かめる分け方で、通常の交差検証では未来の記録で学んで過去で確かめてしまうこと。gap で学ばせる期間の末尾を除けること | scikit-learn: TimeSeriesSplit | 2026-10-15 |
| 駐車場法 第11条〜第13条。駐車の用に供する部分が500平方メートル以上の路外駐車場について、都市計画区域内で駐車料金を徴収するものを設置する者(路外駐車場管理者)が設置を届け出ること。管理規程に駐車料金に関する事項を定め、供用開始後10日以内に届け出ること。管理規程に定めた事項を変更したときは10日以内に届け出ること(e-Gov 法令API で条文を確認) | e-Gov 法令検索: 駐車場法(法令API) | 2026-10-15 |
料金の額、地権者との取り決め、管理規程の届出の要否と手続きは、自社の担当と所管の自治体に確かめてください。 本記事は上記の公式情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1667)についてのご相談はこちらから。
