Trade Area(商圏)大山駅5km商圏⌄
DEMO MODE(デモモード)DEMO / SIMULATED ANALYTICS(デモ・シミュレーション分析)Demo date(デモ基準日)D
MARKET INTELLIGENCE(商圏分析) / METHODOLOGY(分析手法・計算方法)

分析手法・計算方法

AI上の見つかりやすさから、商圏の次の一手を見つける。

DEMO DATA(デモデータ)Open Live Radar(レーダーを開く) ↗
ⓘ 地図・店舗・地理情報は実在データを使用しています。AI評価・推計Flow・Opportunity等の分析値は営業デモ用のシミュレーションです。 Population: DEMO(人口:デモ値)。OpenAI / Gemini APIは呼び出していません。

分析手法・計算方法

「どう計算したか」を、現在の値・変数の意味・SQLと一緒に確認できます。標準モデルの応用とHALL AI独自式を区別し、独自の重みを統計的に実証済みとは扱いません。

REAL · 実在データ PUBLIC STATISTICS · 公的統計 SIMULATED · 営業デモ用 DERIVED · 入力値から計算

PUBLIC STATISTICSは区分の説明です。人口統計は現在未導入で、Population: DEMOです。計算済みのDERIVED値でも入力がDEMOなら結果はSIMULATEDです。

1. データの区分

REALは実在の基本情報、PUBLIC STATISTICSは公的統計、DERIVEDは計算した値、SIMULATEDは営業デモです。計算済みだから実測とは限りません。現在のAI Visibility 72、Headline 81、Alert +18ptはデモ入力です。

  • 店舗名・住所・座標
    REAL · 実在データ

    確認済みの固定fixtureと実在地理。台数は公開参考値で、オーシャンスロット182/192の差は要再確認。

  • 背景地図・500m境界
    REAL · 実在データ

    地理院タイルとJIS区画定義による実在地理です。タイル障害時の格子は実街路ではありません。

  • 人口統計
    PUBLIC STATISTICS · 公的統計

    現在未導入。公的人口統計を取得済みとは表示しません。計算に使うPopulation IndexはSIMULATEDです。

  • 球面距離・メッシュ中心
    DERIVED · 入力値から計算

    固定した実座標と区画定義から計算。道路移動時間ではありません。未検証追加店舗の座標を使う場合は入力もDEMOです。

  • 人口指数・AI評価・回答・引用・Gap・Priority・履歴・Alert
    SIMULATED · 営業デモ用

    営業デモ用の入力や例。実店舗の実測評価や実AI観測ではありません。

  • 選択確率・Flow・Opportunity・SOV
    SIMULATED · 営業デモ用 DERIVED · 入力値から計算

    式で計算した派生値でも、入力にDEMOを含むため結果もSIMULATEDです。実ユーザー動線・実来店人数を表しません。

2. 500m地域メッシュ

標準モデルを応用

第4次500m地域メッシュの区画

Δlatitude = 15 / 3600 度
Δlongitude = 22.5 / 3600 度
Center = (南西端 + 北東端) / 2
Δlatitude / Δlongitude
1区画の緯度/経度幅。
Center
実境界の中心座標。緯度経度の中点です。

第3次を縦横2分割する「2分の1地域メッシュ」。境界ファイルの取得ではなく、統計局の区画定義から駅周辺81区画を生成しています。人口統計は未導入です。

3. 距離計算 / Haversine

標準モデルを応用

Haversine球面距離

a = sin²(Δφ / 2) + cos(φ1) × cos(φ2) × sin²(Δλ / 2)
D = 2 × 6371 × asin(√clamp(a, 0, 1))
φ / λ
緯度/経度をラジアンに変換した値。
Δφ / Δλ
2地点の緯度/経度の差。
D / 6371
直線的な球面距離km/現実装の地球半径km。

道路上の距離や徒歩・車の所要時間ではありません。現実装の地球半径は6371kmです。実座標からの距離はDERIVEDですが、これを使った需要・FlowはSIMULATEDです。

4. Huff Modelの応用

本システムの商圏Flowは、店舗魅力度と距離、比較店舗との相対関係から選択確率を求めるHuff Modelの考え方を参考にしています。店舗魅力度の構成要素や重みは本システム独自です。

標準モデルを応用

Huff型Weightと選択確率

W(m,h) = (A(h) / 100)^α ÷ max(D(m,h), 0.2)^β
P(m,h) = W(m,h) ÷ Σj W(m,j)
m / h / j
地域メッシュ/対象店舗/比較する全店舗。
W / P
相対的な選びやすさ/同じメッシュ内で合計1になる選択確率。
α / β
魅力度と距離の効き方。現在のconfig値を計算例に表示。
max(D, 0.2)
距離が0または非常に短くても発散しないよう、計算上は最低0.2kmにします。

Huffの考え方を参考にしていますが、魅力度の構成・係数・最低距離はHALL AIのPoC設定です。重み合計0の場合は確率0とし、0除算を避けます。

5. HALL AI店舗魅力度

HALL AI独自指標

店舗魅力度(Attractiveness)

A = 0.40 × AI + 0.25 × Information + 0.20 × Scale + 0.15 × Freshness
A
0〜100の魅力度。店舗の実力を実測した値ではありません。
AI
AI上の見つかりやすさのデモ点数。現PoCの72等はSeeder入力であり、SOVや回答集計点からの換算ではありません。
Information / Scale / Freshness
情報充足度・規模の指標・情報鮮度のデモ入力。実際の設置台数とデモScaleは別の値です。

40%・25%・20%・15%は営業PoCの独自設定で、Huffの標準値でも統計的に実証済みの固定値でもありません。本番では実績を使って校正します。

6. Flow・選択確率・粒子

  1. AI 72 × 0.40 = 28.800
  2. Information 78 × 0.25 = 19.500
  3. Scale 74 × 0.20 = 14.800
  4. Freshness 92 × 0.15 = 13.800
  5. 合計した魅力度 A = 76.900(HALL AI独自のPoC設定)。
  6. α=1.3、β=1.8。W = (76.900/100)^1.3 ÷ max(0.333698, 0.2)^1.8 = 5.12469162
  7. 同じメッシュの全店舗Weight合計 = 41.28775926。P = 5.12469162 / 41.28775926 = 12.4121%。
  8. DEMO人口指数 119.075248 × P 0.12412133 = Flow Index 14.779778。人数ではありません。
  9. この経路の粒子の目安 = 120 × 14.779778 / 9989.999997 = 平均約0.1775個/分(上限・乱数・停止の影響あり)。
店舗魅力度・デモ距離kmWeight選択確率Flow指数
マルハン大山店76.9000.3336985.1246916212.4121%14.779778
楽園 ハッピーロード大山88.3500.17268115.4246219337.3588%44.485114
大山オーシャンパチンコ専門館69.4000.10353011.2697250227.2956%32.502256
大山オーシャンスロット専門館60.7000.0693659.4687207022.9335%27.308100
HALL AI独自指標

Flow Index・Flow Share・粒子発生量

Flow(m,h) = PopulationIndex(m) × P(m,h)
FlowShare(h) = Σm Flow(m,h) ÷ Σm,j Flow(m,j) × 100
ParticleRate(i) = ParticleBudget × Flow(i) ÷ TotalFlow
PopulationIndex
現在は固定のDEMO人口指数。実人口でも来店需要人数でもありません。
Flow / FlowShare
指数/全経路に対する店舗別の指数の割合。
ParticleBudget
1分あたりの全経路の発生予算。現在120、同時表示の上限150。

粒子は人・GPS・来店を表しません。乱数は演出だけです。経路ごとの発生数は期待値であり、上限・停止・乱数により毎分同じ個数になる保証はありません。

SQLiteで照合する例(読み取り専用)

SELECT hall_id, distance_km, raw_weight, choice_probability, flow_index FROM mesh_hall_flows WHERE area_mesh_id = 41 ORDER BY hall_id;

ターミナルの sqlite3 database/database.sqlite で上のSELECTを実行できます。設定値を変更した場合は、専用デモDBでSeederを再実行して分析値を揃えてください。

RADARでこの解説を開く →

7. AI Visibility / SOV・Sample Citation

計算してみる:大山駅周辺でおすすめのパチンコ店を教えて / OpenAI (SIMULATED)。この行の掲載順は1、引用はなしです。

  1. RankScore = 1 / 1。Score = 0.5 + 0.3 × (1/1) + 0.2 × 0 = 0.800000
  2. この回答行の寄与 = 0.800000 × PromptWeight 1.00 × CalibrationWeight 0.1444030606 = 0.1155224485
  3. 同じ店舗の全回答行を合計したVisibility = 24.60000000。Others込みの全店合計 = 100.00000000
  4. SOV = 24.60000000 / 100.00000000 × 100 = 24.60%。
  5. 画面のAI Visibility 72点は別のSIMULATED入力です。この集計合計を72点へ換算する式は実装していません。
店舗・区分重み付き回答点の合計SOV
楽園 ハッピーロード大山31.80000031.80%
マルハン大山店24.60000024.60%
大山オーシャンパチンコ専門館18.90000018.90%
大山オーシャンスロット専門館13.10000013.10%
Others11.60000011.60%
HALL AI独自指標

回答点数・集計Visibility・AI SOV

RankScore = position > 0 ? 1 / position : 0
Score = Mentionあり ? (0.5 + 0.3 × RankScore + 0.2 × Citation) : 0
Visibility(h) = Σq Score(h,q) × PromptWeight(q) × CalibrationWeight(h)
SOV(h) = Visibility(h) ÷ Σj Visibility(j) × 100
Mention / Citation
名前の言及の有無/関連ページの引用の有無。引用ありを1、なしを0とします。
position
回答内の掲載順。1番目なら1、2番目なら2。実AIの評価順位ではありません。
PromptWeight
質問文ごとの重み。重要な条件をどれだけ強く数えるか。
CalibrationWeight
指定デモシェアに合わせる明示的な補正係数。実観測では使わない想定です。
Visibility / SOV
重み付き回答点の合計/Othersを含む合計に対する割合。画面のAI Visibility 72とは別の集計値です。

業界で確立した共通のAI Visibility式ではなく本システム独自です。回答・引用・順位もSIMULATED。合計点0ならSOV0です。

集計・算術

引用元の件数と割合

CitationShare(domain) = 引用元domainの件数 ÷ 全引用件数 × 100
domain
引用URLのドメイン部分。
件数
SQLiteのai_citationsに保存した架空の引用件数。

現在はSample Citationで、実際のAI回答で観測した出典ではありません。引用0件なら割合0とします。

SQLiteで照合する例(読み取り専用)

SELECT m.entity, SUM(m.total_score * p.weight * m.calibration_weight) AS visibility FROM ai_mentions m JOIN ai_observations o ON o.id=m.ai_observation_id JOIN prompts p ON p.id=o.prompt_id GROUP BY m.entity;

ターミナルの sqlite3 database/database.sqlite で上のSELECTを実行できます。設定値を変更した場合は、専用デモDBでSeederを再実行して分析値を揃えてください。

8. Opportunity

現在の最大Opportunityのメッシュ 533945963 を使います。

  1. PopulationNorm = 119.075248 / 328.209152 = 0.362803
  2. Gap = max(0, 最大比較店舗の確率 − 分析対象の確率) = 0.249467。
  3. Recoverability = 0.923121。現PoCは情報不足量で改善係数を重み付けした共通値です。
  4. Raw = 0.362803 × 0.249467 × 0.923121 = 0.08354926
  5. Opportunity = 0.08354926 / 最大Raw 0.08354926 × 100 = 100.00
HALL AI独自指標

改善機会(Opportunity)

PopulationNorm(m) = PopulationIndex(m) ÷ max PopulationIndex
Gap(m) = max(0, P_topCompetitor(m) − P_focus(m))
Recoverability = Σf max(0, −FeatureGap(f)) × Controllability(f) ÷ Σf max(0, −FeatureGap(f))
Raw(m) = PopulationNorm(m) × Gap(m) × Recoverability
Opportunity(m) = Raw(m) ÷ max Raw × 100
PopulationNorm
全表示メッシュの最大人口指数に対して0〜1にした値。
P_topCompetitor / P_focus
そのメッシュで最も選択確率が高い比較店舗/分析対象店舗の確率。
Recoverability
直せそうな情報差の割合。現PoCは魅力度最大の比較店舗とのFeature Gapから計算し、全メッシュへ同じ値を使います。
Controllability
各項目の改善しやすさのデモ係数。
Raw / Opportunity
正規化前の値/全メッシュの最大値を100とした指標。

0〜100の相対指標であり、改善による来店数・効果の保証ではありません。最大Raw・人口・負のGap合計が0なら該当値を0にします。係数は本番で校正予定です。

SQLiteで照合する例(読み取り専用)

SELECT area_mesh_id, gap, recoverability, raw, score FROM mesh_opportunities ORDER BY score DESC;

ターミナルの sqlite3 database/database.sqlite で上のSELECTを実行できます。設定値を変更した場合は、専用デモDBでSeederを再実行して分析値を揃えてください。

9. Competitive Gap

  1. FAQ:対象 15 − 比較店舗 90 = -75
  2. 0点が下限、100点が上限のDEMO評価です。負の値は情報不足の想定で、実店舗の実測結果ではありません。
HALL AI独自指標

項目別の情報差(Competitive Gap)

FeatureGap(f) = FocusScore(f) − CompetitorScore(f)
f
FAQ、駐車場、アクセス、設備、機種情報、鮮度の各項目。
FocusScore / CompetitorScore
分析対象店舗/比較店舗の0〜100のデモ点数。

マイナスが大きいほど説明情報の差が大きい想定です。実店舗を実測評価した結果ではありません。本番では情報の存在・具体性・更新日・構造・根拠をルール化し、人が確認します。

SQLiteで照合する例(読み取り専用)

SELECT hall_id, feature, score, controllability FROM hall_features WHERE hall_id IN (1, 2) ORDER BY feature, hall_id;

ターミナルの sqlite3 database/database.sqlite で上のSELECTを実行できます。設定値を変更した場合は、専用デモDBでSeederを再実行して分析値を揃えてください。

10. Recommendation Priority

駐車場・アクセス情報を改善

  1. Priority = 100 × 1.00 × 1.00 × 0.93 × 1.00 = 93.00
  2. 現実装は4係数の積×100です。候補間の最大値正規化はしていません。
  3. 点数順に並べ、文章は保存済みテンプレートを使います。実AI APIによる評価・順位付けではありません。
HALL AI独自指標

施策の優先度(Recommendation Priority)

Priority = 100 × clamp(Demand, 0, 1) × clamp(Gap, 0, 1) × clamp(Evidence, 0, 1) × clamp(Controllability, 0, 1)
Demand
テーマや地域の重要度の入力。
Gap
改善対象の差の大きさを表す入力。Feature Gapの生の負数とは別の0〜1係数です。
Evidence
判断材料がどれだけ揃っているか。
Controllability
施策によって変えられる程度。

現在は係数の積×100で、候補間の最大値正規化はしていません。93点は1×1×0.93×1×100から出ます。AI APIは使わずテンプレートで説明し、将来も優先順位の数値計算とLLMによる説明文生成を分離する方針です。

SQLiteで照合する例(読み取り専用)

SELECT title, demand, gap, evidence, controllability, priority FROM recommendations ORDER BY priority DESC;

ターミナルの sqlite3 database/database.sqlite で上のSELECTを実行できます。設定値を変更した場合は、専用デモDBでSeederを再実行して分析値を揃えてください。

11. SIMULATEDから実データへ

入力を差し替えるためのService境界があります。デモ補正を外し、同じ数式でも係数の校正・検証を行います。

将来のAI観測はProvider・Model・日時・Prompt版を保存し、複数回・複数Provider・時系列で確認します。現時点で外部AI/GBP等へ接続していません。

AIは人向けの説明文を作る役割とし、数値の順位計算をLLMへ自由に任せる設計にはしません。

  1. 現在:実在地理+実在店舗マスタ+SIMULATED分析
  2. 本番:実在地理+実在マスタ+実AI観測+実Web特徴+許諾された検索/GBP等
  3. 入力品質・補正係数・距離の意味を検証し、実績で校正
  4. 同じService境界の計算エンジンで再計算

12. 根拠・参考資料

Esri:Huff Model(商圏選択確率) 距離・店舗魅力度・比較店舗の相対関係を用いる既存モデルの根拠。HALL AIの魅力度の重みを実証する資料ではありません。外部サイト・新しいタブで開きます e-Stat:地域メッシュとダウンロード定義 JIS X 0410に基づく第4次500m地域メッシュの提供・仕様。現在の人口はDEMOであり、公的人口統計の導入済みを意味しません。外部サイト・新しいタブで開きます Turf.js:distance / Haversine 緯度経度から球面距離を求めるHaversine手法の参考。本システムはPHPで計算し、Turf.jsを実行依存にはしていません。外部サイト・新しいタブで開きます MapLibre GL JS:地図描画 ブラウザのWebGLで地図を描くライブラリ。背景地図は別の地理院タイルです。外部サイト・新しいタブで開きます MapLibre:AttributionControl(出典表示) 地図の提供元を表示する機能。地図の出典表示は省略しません。外部サイト・新しいタブで開きます 総務省統計局:500m区画の定義 緯度15秒・経度22.5秒の第4次区画を計算する根拠。現在はこの定義から境界を生成しています。外部サイト・新しいタブで開きます 国土地理院:背景地図タイル 実際の道路・鉄道・町名の背景地図の出典。タイル障害時の格子は実街路を示しません。外部サイト・新しいタブで開きます