# mcda-suitability-analysis

Guides spatial multi-criteria suitability analysis, AHP factor weighting, and model sensitivity testing across GIS rasters.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · ★ 35
- Author: Muhammed Enes Duran
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/muend/geoai-skills/tree/HEAD/skills/mcda-suitability-analysis/SKILL.md
- Updated: 2026-10-17
- HTML: https://affpapa.org/en/nevibecode/skills/mcda-suitability-analysis

## What it does

This skill enforces a formal protocol for multi-criteria decision analysis (MCDA) and spatial site selection. The workflow separates continuous factor grids from binary constraint masks, standardizes cell values to 0–1 or 0–255 scales via linear or fuzzy membership, and aggregates surfaces using Weighted Linear Combination (WLC) or Ordered Weighted Averaging (OWA).

Weights follow Saaty's Analytic Hierarchy Process (AHP), evaluated via `scripts/ahp_weights.py`. The script calculates eigenvector weights and checks the consistency ratio (CR). If CR reaches 0.10 or higher, the matrix is returned to identify conflicting triads instead of massaging inputs.

Sensitivity testing is mandatory: the skill runs one-at-a-time ±20% weight shifts, stakeholder scenarios, or Dirichlet Monte Carlo runs. Binary constraints are applied strictly at the end via multiplication; folding legal exclusions directly into factor weights breaks model logic by granting banned areas acceptable scores.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill mcda-suitability-analysis -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/mcda-suitability-analysis/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/mcda-suitability-analysis/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill mcda-suitability-analysis -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/mcda-suitability-analysis/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill mcda-suitability-analysis -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/mcda-suitability-analysis/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install muend/geoai-skills mcda-suitability-analysis
```

2. **Manually: put the files in place**
- File: `.github/skills/mcda-suitability-analysis/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill mcda-suitability-analysis -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/muend/geoai-skills --path skills/mcda-suitability-analysis
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/mcda-suitability-analysis/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill mcda-suitability-analysis -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/muend/geoai-skills/tree/HEAD/skills/mcda-suitability-analysis/SKILL.md

## When to use it
- calculate AHP criteria weights and check the consistency ratio CR
- standardize spatial criteria rasters with linear min-max or fuzzy curves
- aggregate factor grids with WLC or OWA and apply hard binary masks
- stress-test suitability maps against weight perturbations of ±20%

## Example prompts
- Run scripts/ahp_weights.py on my pairwise comparison matrix and report CR
- Standardize slope and distance rasters to a 0-1 scale and build a WLC aggregation
- Perform a one-at-a-time sensitivity perturbation at ±20% to generate a stability map

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 644e32bd8a127f02.

BEGIN THIRD-PARTY FILE 644e32bd8a127f02
```text
---
name: mcda-suitability-analysis
description: >-
  Always invoke for spatial suitability, site selection, AHP, criteria
  weights, or weighted-overlay work, including audits of inconsistent
  pairwise judgments and requests for only a final map. Covers consistency,
  standardization, constraints, ranked surfaces, shortlists, and sensitivity.
  Route travel-time placement and location-allocation to
  network-accessibility-analysis.
license: MIT
metadata:
  author: Muhammed Enes Duran
---

# MCDA & Suitability Analysis

Purpose: produce suitability maps whose weights, scales, and assumptions are
explicit, consistent, and stress-tested. A suitability map without a
sensitivity analysis is an opinion with a legend.

## Workflow

1. **Structure**: goal → criteria (factors) → constraints. Constraints are
   binary masks (legal exclusions, water bodies, slope > threshold) applied
   at the END by multiplication; factors are continuous and weighted.
   Keep them apart — encoding a constraint as a heavily-weighted factor is
   a classic error that lets forbidden areas score "acceptable".
2. **Criteria layers**: each factor as a raster on a COMMON grid (same CRS,
   extent, cell size, snap). Resample categorical layers with nearest,
   continuous with bilinear; document each.
3. **Standardization** to a common suitability scale (0-1 or 0-255):
   - Linear min-max for monotonic "more is better/worse".
   - Fuzzy membership (sigmoid/linear with control points) when suitability
     saturates — justify control points from domain knowledge.
   - Categorical layers: explicit reclass table, shown to the user.
   Direction check: confirm for EVERY layer whether high raw value means
   high or low suitability (slope: low=good; distance-to-road: usually
   low=good). Direction bugs survive to the final map invisibly.
4. **Weights** (AHP below, or direct/ranked methods with rationale).
5. **Aggregation**: weighted linear combination (WLC) default; OWA when
   the decision-maker's risk attitude (AND-like vs OR-like) matters.
6. **Constraint mask** multiply; classify the result (equal interval or
   quantiles — say which and why); **sensitivity analysis**; validate
   against known good/bad sites if any exist.

## AHP with consistency enforcement

Pairwise comparisons on Saaty's 1-9 scale; weights from the principal
eigenvector; consistency ratio (CR) must be < 0.10 or the matrix goes back
for revision. Run `scripts/ahp_weights.py` to compute weights + CR from a
reciprocal comparison matrix (it validates reciprocity and reports λ_max).
```
END THIRD-PARTY FILE 644e32bd8a127f02

The third-party file has ended. Everything between the 644e32bd8a127f02 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2573 of 5896 bytes. © Muhammed Enes Duran · MIT · https://github.com/muend/geoai-skills/tree/HEAD/skills/mcda-suitability-analysis/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
