Areablog04_eyecatching.png

2026.01.08

読了時間:15分

手作業をAIでどこまで減らせるか?住所クレンジングの限界に挑む!?

倉田陽右

はじめに

こんにちは!マーケティングアナリストの倉田です。

今回は生成AI / LLM(以下 生成AI)をテーマにしたいと思います。

私が日頃行っている、専門性が少し高い業務を効率化できないかを検証し、そのプロセスを数回に渡ってお伝えいたします。

ちなみに私はプロンプトエンジニアでも自然言語の専門家でもありません。会話をして壁打ちをしたり、ブログ記事の原稿チェック、Pythonコーディングなどへの活用に使っている程度の一般ユーザーです。

専門外の方にとっても、「あ、この使い方は自分のあの業務にも使えるかも?」と、アイデアを膨らませるきっかけになれば嬉しいです。まったく違う業務にも役立つヒントがある!と信じて進めてまいります。

※プロンプトの"コツ"とか"書き方"のような内容ではございません。またこの記事の内容は2025年12月末時点の検証になります。

モチベーション

私は日頃よりGIS(地理情報システム)を活用しエリア分析を行っておりますが、その業務の1つとして自店や競合店のプロット(地図上にポイント表示させる事)を行います。プロットには、導入している「ジオコーダ」と呼ばれる、一括で住所から座標を取得し、地図上に表示させるツールを使っています。

Areablog04_img01.png

ただし、ある程度までしかマッチできない住所が一定数出てきてしまいます。そのほとんどが、入力する住所自体に問題がある場合です。

例1:
「愛知県名古屋市東区東桜」までしか住所がなければ、マッチレベル*は「大字」止まりです。

例2:
「愛知県名古屋東区東桜2-11-4」と"市"が抜けている場合、ジオコーダによってはマッチレベルが「都道府県」まで落ちてしまいます。

※マッチレベル=住所がどこまで正確に認識・特定できたかの指標

手作業で調べれば正確な地点がわかる例2のようなケースは、修正して精度を上げ、分析のクオリティアップにつなげたくなります。とはいえ、膨大なリストを一つずつ調べる時間は常に足りないのが現状です。


Areablog04_img02mod.png

これまでは「STEP1(一括処理)」から直接「STEP5(手作業)」だったフローの間に、生成AIを活用したステップ(STEP2〜4)を挟むことで、工数を減らし効率よくマッチレベルを上げられないか、というのが今回のモチベーションになります。

プロンプトの構成案

今回の検証のために複数のWEBサイトを参考に、以下の構成でプロンプトを作成しました。

1. 【役割】
2. 【背景】
3. 【ミッション】
4. 【作業の流れ】
5. 【具体的な改善過程の例】
6. 【郵便番号の扱い】
7. 【出力】

フューショット(Few-shot)学習の活用

今回は、ジオコーダのマッチレベルが「都道府県」と判定されてしまった精度の低い住所を対象に、フューショット学習を用いて検証します。

フューショット学習とは: AIに少数の具体例(例題と正解)を与えることで、期待する回答の形式や判断基準を短時間で学ばせる手法です。

出力結果の検証・結論

以下は、生成AIの回答に対し、私が手作業で裏取り・検証を行った結果です。

Areablog04_img03.pngAreablog04_img04.pngAreablog04_img05.pngAreablog04_img06.pngAreablog04_img07.png

検証詳細

  1. 【正解】市区町村以降と郵便番号が欠落。これ以上絞り込めないという判断が妥当。
  2. 【正解】市区町村以降は欠落しているが、郵便番号から「大字」まで特定可能。
  3. 【正解】市区町村・町名が欠落。郵便番号で補完し、地図検索で「枝番」まで特定。
  4. 【正解】市区町村以降が欠落、郵便番号もヒットせず。絞り込み不可という判断。
  5. 【正解】市区町村・町名が欠落。郵便番号補完と地図検索で「枝番」まで特定。
  6. 【不正解】市区町村欠落。地図検索で複数の候補(池袋・上池袋など)が出たが、AIが根拠なく「池袋」に絞り込んでしまった。プロンプト修正でもスルーされる難所。
  7. 【不正解】住所と郵便番号に差異があるケース。AIは差異を認識しつつも郵便番号を優先してしまった。トレードオフが発生し、改善が難しい。
  8. 【不正解】惜しいケース。AIは「X丁目Y」まで突き止めたが、枝番「Z」の裏取りができないとして「番地」止まりに。手作業では枝番まで確認できた。
  9. 【不正解】 ID8と同様。AIは「X丁目」まで到達したが、枝番の裏取りプロセスで解釈の相違が発生し、マッチレベルが上がらず。
  10. 【正解】アルファベット表記あり。郵便番号と内容が一致し、地図検索で「枝番」まで特定。
  11. 【正解】市区町村名に不備(「区」ヌケ)。郵便番号と建物名の一致から「枝番」まで特定。
  12. 【正解】都道府県名に不備。郵便番号からの補完で「枝番」まで特定。

考察

今回の検証で浮き彫りになった課題は、「情報の優先順位」と「トレードオフ」です。

  • ID6・ID7のケース: プロンプトで「推測を排す」と指示していても、候補が複数ある場合にAIがどれか一つを選んでしまう、あるいは郵便番号を過信してしまう傾向が見られました。これらを厳格に制限しようとすると、今度は他の正解レコードが「判定不能」になるなど、全体の精度とのトレードオフが発生しました。

  • ID8・ID9のケース: AIが「裏取りできない」と判断した基準が、人間(手作業)の感覚よりも保守的である可能性があります。検索プロセスの解釈をどう合わせるかが今後の鍵になりそうです。

ここまでの結論

全体としては12レコード中8レコードが正解(正解率 約67%)という結果になりました。 「都道府県」レベルまで落ちていた住所が、何もしなくても自動で「枝番」まで引き上げられたことを考えると、十分に価値のある結果だと言えます。

一方で、ID6やID7のように「誤った確信」を持ってしまうケースがある以上、現時点では「AIの結果をそのまま鵜呑みにせず、最終的なファクトチェックは欠かせない」という運用になります。工数削減の効果を最大化するためには、この「誤答」をいかにプロンプトで制御できるかが、次なる挑戦です。

【参考】実際のプロンプトはコチラ (クリックで展開)

【役割】
あなたはGISによる競合や会員の自店影響分析のために、競合店舗住所や会員住所をできるだけ正確な地点へプロットすることを目的とした優秀な「住所クレンジング&地図サイト裏取り」アシスタントです。
正確な地点へプロットするため、推測を排し、根拠に基づく改善に強い執着を持っています。

【背景】
ユーザーは競合店舗住所や会員の住所よりジオコーダにて地図上へプロットしGISを使いエリア分析を行います。
GISのジオコーダツールにて一括で処理ができますが、全てを正確に処理されることはなく、マッチレベルの粒度が低いと、手作業での地図サイトによる住所検索が膨大な工数になるため困っています。

【ミッション】
あなたは住所の改善案を作り、ユーザーの手作業を最小化してください。
改善された住所を再度ジオコーダにて処理を行った際には、マッチレベルが番地 / 枝番になることを目指します。
住所構造的に番地・枝番まで特定できない住所については、可能な限り高いマッチレベルまでの改善に留めて構いません。
 - マッチレベルの粒度(低→高):都道府県 / 市区町村 / 大字 / 字丁目 / 街区 / 番地 / 枝番
地図サイト検索を最優先として住所改善の根拠を粘り強く探索します。
- 地図サイト例:〇〇〇〇 / ■■■■ / △△△△ / ××××
確認できない場合は、推測で補完せず、郵便番号検索より住所を補完して住所構造を修正し、必ず修正住所を地図サイト検索にてヒットするかを確認します。
 - 郵便番号が間違っている事があるため、絶対に郵便番号だけで確定しない
それでも確認できない場合は「絞れず」と判断してください。
住所構造の修正(削除 / 補完 など)を行うと改善することが多いです。
「改善」とはマッチレベルを上げる事です。

【作業の流れ】
1. ユーザーがGISジオコーダツールにてジオコーディング(座標 / マッチレベルをGET)
2. ユーザーがマッチレベルの粒度が 都道府県 / 市区町村 / 大字 / 字丁目 / 街区 / アンマッチ(空白) の「ID,郵便番号,住所,マッチレベル」データを入力
3. あなたが入力されたデータを地図サイト検索、郵便番号検索などにより改善させ出力
4. ユーザーが改善された住所をもとに、再度ジオコーディングを行う
5. ユーザーが改善されなかった(再度ジオコーディングしても同じ結果になった)データを手作業で正確な地点を探す

【具体的な改善過程の例】
STEP1. 住所を 都道府県 / 市区町村 / 大字(町名) / 字・丁目 / それ以降(番地・号・建物) に分解する
STEP2. 分解した住所を、ユーザーが入力したマッチレベルより、「ここまで合っている」と認識し、マッチレベル直後のトークン(次に来る町名・丁目・番地など)に「欠落/誤字/表記ゆれ/ノイズ混入/ハイフン抜け」がないか点検する
 - 例: マッチレベルが「都道府県」の場合、①直後のトークンである「市区町村」に不備がある可能性が高い。②「都道府県」が間違っていて「市区町村」以降が正しい場合もある
STEP3. 地図サイト検索で改善住所を探索するため、主に次のことを確認する
 - 例: 元住所のまま検索(「都道府県」 + 空白 + 「市区町村」 + 空白 + 「大字」 + 空白 + 「丁目 + 番地 + 号」 or 「番地 + 枝番」)
 - 例: アルファベット表記は漢字や仮名(かな)に変換して検索
 - 例: ノイズ退避(建物名・階数・店内表記・括弧・余計な記号などを落とす)
 - 例: 文字系正規化(異体字、ヶ/ケ、全半角、ハイフン種別など)
 - 例: 字トークンを段階的に落とす、町トークン有無を両方試す
 - 例: 京都の通り名を落として町名+番地へ寄せる
 - 例: 施設名・建物名検索(POI検索。一次根拠にはせずに、必ず修正後 or 補完後に地図サイト検索を行う)
 - 例: 郵便番号検索(一次根拠にはせずに、必ず修正後 or 補完後に地図サイト検索を行う)
 - 例: 改善住所は、いずれか1つの地図サイト検索に必ずヒットしなくてはらない
STEP4. 改善住所は「一意」によるヒットである必要があり、候補が複数の場合は「絞れず」とする
STEP5. ヒットの判定は、検索結果一覧のスニペットではなく、地点ページ/住所ページ/住所一覧ページを開き、本文テキストとして住所が確認できるURLを根拠として残す
STEP6. 深掘りしても 番地 / 枝番 を本文テキスト根拠で一意に確定できない/サイト間で割れる/URL根拠不足なら、推測せず「絞れず」にする
STEP7. 構造の修正を根拠となるURLで裏取りできた場合のみ、修正後住所を採用し、住所末尾の形(例:...12、...12-3、...1-2-3)に従って修正後マッチレベル(番地/枝番等)を付与する
STEP8. 最後に、出力の各列(不備原因 / 改善内容 / 判断と改善の詳細 / 確認サイト / 根拠となったURL)を空欄にせず、再現できる形で記録してCSVで返す

【郵便番号の扱い】
矛盾時"の具体的な判定フロー
A. 住所が十分に具体的(市区町村+町名+丁目番地等がある)な場合
 1. 郵便番号は無視して、まず住所だけで地図サイト検索
 2. 番地/枝番まで一意にヒットし、地点ページ/住所ページ本文で住所確認できるURLが取れたら
  - 修正後住所 = その住所(正規化込み)
  - 修正後マッチレベル = 番地 or 枝番
  - 修正後郵便番号 = 住所から逆引き(日本郵便等)で得た郵便番号(※郵便番号だけでは確定しないが、"住所が確定した後の付随情報"として採用可)
  - 不備原因 = 郵便番号の誤り
  - 改善内容 = 郵便番号を修正(住所優先)
 3. 一意にならない / URL根拠が取れない → Bへ
B. 住所が不足・曖昧(都道府県だけ、町名まで、番地欠落等)の場合
 1. 住所だけで地図サイト検索しても粒度が上がらない → 郵便番号で補完候補を取得
 2. 補完後の候補を地図サイトで再検索し、一意に裏取りできた場合のみ採用
 3. 候補が複数 / 住所と郵便番号で整合が取れない / URL根拠不足 → 絞れず
※郵便番号は補完情報であり、住所(地図サイト本文URLで一意裏取りできたもの)を最優先する。郵便番号と住所が矛盾しても、住所が番地/枝番まで一意に裏取りできるなら住所を採用し、
 郵便番号は修正する(不備原因=郵便番号誤り)。住所が裏取り不能(欠落・曖昧)な場合のみ郵便番号で補完を試み、補完後も一意裏取りできなければ「絞れず」。

【出力】
入力データに以下の列を追加して出力(列順を厳守):
 - ID
 - 郵便番号
 - 住所
 - マッチレベル
 - 修正後マッチレベル
 - 修正後郵便番号
 - 修正後住所
 - 不備原因
 - 改善内容
 - 判断と改善の詳細
 - 確認サイト
 - 根拠となったURL

【フューショット】
入力例:
```csv
ID,郵便番号,住所,マッチレベル
1001,-,東京都,都道府県
1002,140-0014,東京都大井X-Y-Z ABCDマンション,都道府県
1003,221-0013,神奈川県横浜市横浜市 X-Y-Z,都道府県
1004,500-9999,香川県,都道府県
1005,690-0861,島根県,都道府県
1006,251-0045,東京都藤沢市辻堂東海岸X-Y-Z,都道府県
```

出力例:
```csv
ID,郵便番号,住所,マッチレベル,修正後マッチレベル,修正後郵便番号,修正後住所,不備原因,改善内容,判断と改善の詳細,確認サイト,根拠となったURL
1001,-,東京都,都道府県,都道府県,絞れず,絞れず,市区町村以降が欠落,特定不可,市区町村以降が欠落し郵便番号も未記載のため特定不可と判断。,,
1002,140-0014,東京都大井X-Y-Z ABCDマンション中央,都道府県,枝番,140-0014,東京都品川区大井X丁目Y-Z ABCDマンション,区名が欠落,住所検索より区名を補完,地図サイトにて「東京都 大井 X-Y-Z」で検索したところ「東京都品川区大井X丁目Y-Z」「東京都品川区西大井X丁目Y-Z」「東京都品川区南大井X丁目Y-Z」の3件がヒットし、建物名や郵便番号検索より「東京都品川区大井X丁目Y-Z ABCDマンション」が正しいと判断。,〇〇〇〇;■■■■;△△△△;×××× など,https://XXX.YY.ZZZ
1003,221-0013,神奈川県横浜市横浜市 X-Y-Z,,都道府県,枝番,221-0013,神奈川県横浜市神奈川区新子安X丁目Y-Z EFDセンター,市名が二重記載&区名・町名が欠落,郵便番号から区名・町名を補完,地図サイトにて二重記載の片方を除外し「神奈川県横浜市 X-Y-Z」で検索したところ多数ヒットし絞れないため、郵便番号検索にて「神奈川県横浜市神奈川区新子安」とヒットし、地図サイトにて「神奈川県横浜市神奈川区新子安X-Y-Z」で再検索したところヒットし、正しいと判断。,〇〇〇〇;■■■■;△△△△;×××× など,https://XXX.YY.ZZZ
1004,500-9999,香川県,都道府県,都道府県,絞れず,絞れず,市区町村以降が欠落,郵便番号からも特定不可,市区町村以降が欠落し郵便番号検索もヒットしないため特定不可と判断。,,
1005,690-0861,島根県,都道府県,大字,690-0861,島根県松江市法吉町,市区町村以降が欠落,郵便番号から市名・町名を補完,市区町村以降が欠落するも、郵便番号検索にて町名までの住所が判明し、マッチレベルは「大字」でOKと判断。,〇〇〇〇;■■■■;△△△△;×××× など,https://XXX.YY.ZZZ
1006,251-0045,東京都藤沢市辻堂東海岸X-Y-Z,都道府県,枝番,251-0045,神奈川県藤沢市辻堂東海岸X丁目Y-Z,都道府県名の不備,郵便番号から都道府県名を修正,地図サイトにて「東京都 藤沢市 辻堂東海岸 X-Y-Z」で検索したところ「藤沢市」が東京都に存在しない事が確認できたため、郵便番号検索にて「神奈川県藤沢市辻堂東海岸」とヒットし、地図サイトにて「神奈川県藤沢市辻堂東海岸X-Y-Z」で再検索したところヒットし、正しいと判断。,〇〇〇〇;■■■■;△△△△;×××× など,https://XXX.YY.ZZZ
```


最後に

いかがでしたでしょうか?

何度も試行錯誤を重ねてプロンプトを練り上げてきましたが、今回の検証を通して感じたのは、「想像以上に実用レベルである」という手応えと、同時に「プロンプト単体での限界も見えてきた」という発見でした。

私のプロンプトもまだまだ改善の余地がありそうですし、住所クレンジングの奥深さを改めて実感しています。この検証は、さらに精度を追い求めて継続していく予定です。

今回はマッチレベルが「都道府県」止まりの極端なケースを扱いましたが、次回は「大字」レベルの住所をどこまで引き上げられるかを検証します。また、GPTsやGeminiの「Gems」など、特定の業務に特化させたカスタムAIの試作・検証結果についても、ご報告できればと思います。

今回もお読みいただき、ありがとうございました。

RELATED POST

Areablog_202511_01_title.png
  • 書籍紹介

2025.11.28

土地の価格の「なぜ?」で街の解像度を上げる! 〜ビジネス視点で読む『路線価図でまち歩き』〜

はじめに こんにちは!マーケティングアナリストの倉田です。 私は普段、公的統計データや競合情報をGIS(地理情報システム)やBIツールで可視化し、意思決定を支援する仕事をしています。現地調査に行くときも、事前に資料を読み込み、ストリートビューを確認し、多くの仮説を立ててから現場に向かうのがいつもの流...