carto-gwr について
carto-gwr は、地理的加重回帰を使う CARTO Workflows の構築を支援するスキルです。データ準備やモデル設定から、場所ごとの係数の保存までを案内します。
主な機能
- 01ソースデータから GWR ワークフローを構築
- 02空間セル単位でデータを索引化・集計
- 03カーネルと近傍範囲を設定
- 04局所係数と適合指標を算出
- 05地図表示向けに結果を保存
活用シーン
- 01地域ごとの予測変数の影響を比較
- 02局所回帰係数を地図に表示
- 03モデルの残差と局所適合度を確認
MCP 対応
MCP サーバー接続時に create_workflow、validate_workflow、run_workflow などの CARTO ワークフローツールを使う手順を案内します。直接 GWR を実行する MCP ツールは提供しません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cartodb/ agent-skills --skill carto-gwrインストール後、Claude Code で/carto-gwrを入力して読み込まれたか確認します。
詳細
地理的加重回帰(GWR)
GWR を使用して、従属変数と 1 つ以上の独立変数の間で空間的に変化する関係をモデル化する CARTO ワークフローを構築します。調査エリア全体で係数が 1 セットとなるグローバル回帰とは異なり、GWR では空間単位ごとに局所係数が算出され、空間によって関係性がどのように変化するかがわかります。例:「寝室数が価格に与える影響は、ダウンタウンでは 5 万ドルですが、郊外では 2 万ドルにすぎません。」
前提条件:開発プロセス、JSON 構造、検証コマンドについては carto-create-workflow を読み込んでください。接続されている場合の MCP サーバーのワークフローツール(create_workflow、validate_workflow、run_workflow など)と、それ以外の場合の carto workflows CLI の両方のアクセス方法、およびルーティングシグナルについて説明しています(carto-basics/references/access-paths.md)。
手順
GWR ワークフローは、次のパイプラインに従います。
Source Data -> (Filter) -> Spatial Indexing (H3/Quadbin) -> Aggregation (dependent + independent vars per cell) -> GWR -> Save
ステップ 1:ソースデータの読み込み
native.gettablebyname を使用します。入力テーブルには、数値の従属変数が少なくとも 1 つと、数値の独立変数(予測変数)が 1 つ以上含まれている必要があります。
成功条件:ノードから、必要な数値列を含むテーブルが出力されます。
ステップ 2:フィルター処理(必要な場合)
native.wheresimplified または native.where を使用して、データセットを絞り込みます(例:キー列の NULL 値の削除、カテゴリや日付範囲によるフィルター処理)。
成功条件:出力には、従属変数とすべての独立変数について、有効な非 NULL 値を持つ行のみが含まれます。
ステップ 3:空間インデックスの付与
データにすでにインデックスが付与されていない場合は、ポイントジオメトリを空間インデックスセルに変換します。
- H3 には
native.h3frompoint - Quadbin には
native.quadbinfromgeopoint
データに H3 または Quadbin 列がすでに含まれている場合(事前集計済みのデータセットでは一般的です)は、このステップを省略してください。
解像度の目安:
| 解像度 | セルサイズ | 用途 |
|---|---|---|
| H3 res 7 | 辺の長さ:約 5 km | 都市レベルの関係性 |
| H3 res 8 | 辺の長さ:約 2 km | 近隣レベル |
| H3 res 9 | 辺の長さ:約 500m | 街路レベル(密度の高いデータが必要) |
成功条件:すべての行に空間インデックス列(例:h3)が含まれます。
ステップ 4:セルごとの集計
native.groupby を使用して、セルごとに 1 行となるように、従属変数とすべての独立変数を集計します。
- グループ化:空間インデックス列(
h3) - 集計:
price,avg,bedrooms,avg,bathrooms,avg(実際の列に合わせて変更してください)
従属変数は、用途に応じて avg または sum で集計します。独立変数は通常、平均をとります。
成功条件:出力には一意のセルごとに 1 行のみが含まれ、目的変数とすべての予測変数の数値列が含まれます。
ステップ 5:GWR の実行
native.gwr を次の設定で使用します。
| 入力 | 説明 | デフォルト |
|---|---|---|
index_column | H3/Quadbin インデックスを含む列 | h3 |
label_column | モデル化する目的変数/従属変数(数値である必要があります) | - |
features_columns | 予測変数/独立変数の列(文字列の配列) | - |
kernel_function | 近傍の重み付け関数 | gaussian |
kring_distance | K-ring サイズ(ホップ数で表す近傍半径) | 3 |
fit_intercept | 切片項を当てはめるかどうか | true |
カーネルのオプション:gaussian(推奨 — 距離に応じて滑らかに減衰)、uniform、triangular、quadratic、quartic。
K-ring サイズ:近傍の半径を制御します。
- 小さすぎる場合(1~2):係数にノイズが生じ、不安定になります。
- 大きすぎる場合(5 以上):過度に平滑化され、グローバル回帰に近づきます。
- バランスの取れたデフォルトとして、まず
3を使用してください。
成功条件:出力にはセルごとの列として、index、intercept、各独立変数の係数列、r_squared、residual が含まれます(Gotchas のプロバイダーによる大文字・小文字表記の注記を参照してください。Snowflake ではこれらが大文字で表示されます)。
ステップ 6:保存
native.saveastable を使用して結果を保存します。空間インデックス列は CARTO Builder で直接可視化できます。係数列で地図をスタイル設定して、空間的な変動を示す係数マップを作成します。
成功:create_workflow(MCP)または carto workflows create(CLI)でアップロードできる、有効なワークフローです。
出力列
| 列 | 意味 |
|---|---|
index | 空間インデックスのセル ID(H3 または Quadbin) |
intercept | ローカル切片項 |
<variable_name> | 各独立変数のローカル係数 |
r_squared | ローカルモデルの適合度(0~1)。値が高いほど、ローカルでの説明力が高いことを示します |
residual | 観測値と予測値の差 |
注意点
- プロバイダーごとの大文字・小文字の違いと SQL 方言。 このスキルでは、列名を小文字で記載しています(BigQuery/Databricks/Postgres/Redshift の規則)。Snowflake では、引用符で囲まれていない識別子は大文字で表示されるため、式では
H3、INDEX、PRICE、R_SQUARED、INTERCEPTなどを参照してください。大文字・小文字の規則と SQL 方言の相違点については、carto-create-workflow/references/providers/<provider>.mdを参照してください。 - GWR コンポーネントには Analytics Toolbox が必要です。オフライン検証(MCP 経由の
validate_workflow、またはcarto workflows validate)では AT の場所を解決できません。実行前に、CLI 専用のcarto workflows verify-remote --connection <conn>で確認してください。 - 従属変数は連続値の数値である必要があります。カテゴリ型の目的変数には、分類など別の方法が必要です。
- いずれかの変数(従属変数または独立変数)に NULL 値があるセルは、モデルから除外されます。GWR の実行前に NULL を事前にフィルタリングするか、補完してください。
- 独立変数間の多重共線性は、結果の品質を低下させます。2 つの予測変数(例:
bedroomsとtotal_rooms)の相関が非常に高い場合は、片方を削除するか、統合してください。似た変数を複数含める前に、相関を確認してください。 - セルごとの
r_squaredは、ローカルモデルの適合度を示します。多くのセルで値が非常に低い場合は、重要な予測変数がモデルに含まれていない可能性があります。 features_columns入力は列名の配列(例:["bedrooms", "bathrooms"])であり、カンマ区切りの文字列ではありません。- 出力列の名前は元の空間インデックス列名ではなく、
indexです。元データに結合し直す場合は、native.renamecolumnで名前を変更してください。 - 高解像度ではデータが疎になるため、信頼性の低い係数が得られる可能性があります。高い解像度を選ぶ前に、すべての変数のデータが十分なセルにあることを確認してください。
参考テンプレート
| リソース | 説明 |
|---|---|
| BQ チュートリアル:Airbnb リスティング価格(GWR) | BigQuery のステップごとの解説:ベルリンの Airbnb 価格とベッドルーム数・バスルーム数の分析、H3 解像度 7、kring 3、Gaussian カーネル |
| SF チュートリアル:Airbnb リスティング価格(GWR) | Snowflake のステップごとの解説:同じ分析を Snowflake 向けに調整 |
ワークフローテンプレート(CARTO Workspace で利用可能):「データ内のローカルな空間的関係をモデル化するための地理的加重回帰(GWR)の適用」
使用例:ロサンゼルスの Airbnb 評価を分析します。Data Observatory の社会人口統計データで拡張したうえで、overall_rating と value_review、cleanliness、location の関係をモデル化します。H3 解像度 7、kring 3、Gaussian カーネルを使用します。
よくあるバリエーション
| バリエーション | 方法 |
|---|---|
| 事前集計データ(すでにセルごとに1行) | ステップ3〜4を省略し、直接GWRに進みます |
| Data Observatoryでエンリッチメント | GWRの前にnative.enrichgridを追加し、社会人口統計学的な予測変数を含めます |
| 係数の比較 | 結果を保存し、Builderを使って係数列ごとに個別に地図をスタイル設定します |
| モデル適合度によるフィルタリング | GWRの後にnative.whereを追加し、r_squared > 0.5(または別のしきい値)を満たすセルのみを残します |
| ホットスポット分析との組み合わせ | まずGWRを実行し、次に残差をGetis-Ordの入力として使い、過大予測または過小予測のクラスターを特定します |