Skip to main content
ClaudeWave
Skill224 repo starsupdated 10d ago

pm-feedback

Классифицирует пользовательский фидбек (Excel/CSV/текст) по 6 категориям, делает sentiment-анализ, кластеризацию тем, анализ трендов, триангуляцию по источникам, расчёт NPS и извлечение персон. На выходе — Top-10 болей с рекомендациями к действию. User-invoked only — do NOT auto-trigger. Triggers on /pm-feedback, "анализ обратной связи", "разбор отзывов", "анализ NPS", "analyze user feedback", "VOC analysis", "NPS analysis", "review analysis".

Install in Claude Code
Copy
git clone --depth 1 https://github.com/serejaris/personal-corp-os /tmp/pm-feedback && cp -r /tmp/pm-feedback/skills/pm-feedback ~/.claude/skills/pm-feedback
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# pm-feedback — User feedback analysis


Part of the Personal Corp framework — running a one-person business through AI agents.
Structure raw feedback into a decision-driving insight report. Built-in classification, sentiment, theme clustering, NPS, trend analysis, source triangulation, and persona extraction.

## Inputs

| Field | Required | Notes |
|---|---|---|
| Feedback data | yes | Excel / CSV / pasted text / review screenshots |
| Purpose | no | Product improvement / satisfaction / topic-specific (e.g. post-launch reaction); default product improvement |
| Time range | no | For freshness tagging and trend analysis |
| Source channels | no | Multiple channels enable triangulation |

**Mode:** ≤ 20 items → close-read mode (item-by-item with detailed reading); > 20 → statistical mode (auto-classify + aggregated report).

## Step 1 — Pre-process data

- Drop exact duplicates
- Merge near-duplicates (similarity > 90%), record merge count
- Ultra-short items (< 5 chars, no substance like "good"/"bad") → counted separately, not in deep analysis
- If a rating column exists (1-10 or 1-5 stars) → extract for NPS
- Identify source channel (in-app feedback, app store, support ticket, social media, etc.)

## Step 2 — Classification

**Six-category taxonomy:**

| Category | Criterion | Example |
|---|---|---|
| **Feature request** | User wants something not yet built | "I'd like batch export" |
| **Bug report** | Existing feature behaves incorrectly | "Save button loses my data" |
| **Usage question** | User can't find or doesn't know how | "How do I change my password?" |
| **UX complaint** | Feature exists but experience is poor | "Loading is too slow" / "UI too cluttered" |
| **Positive review** | Satisfaction, praise, recommendation | "Love this feature!" |
| **Other** | Unclassifiable or off-topic | Spam, ads, noise |

When ambiguous (one item spans multiple), tag primary + secondary.

## Step 3 — Sentiment analysis

| Sentiment | Signals | Calibration |
|---|---|---|
| **Positive** | Likes, praise, recommends, thanks | Pure factual praise ("works") = neutral, not positive |
| **Neutral** | Statement of fact, question, calm suggestion | Feature requests = neutral by default unless angry |
| **Negative** | Complaint, anger, disappointment, threats | "I wish you supported X" = neutral; "Why don't you support X yet?" = negative |

**Negative-intensity grading:**
- **Mild:** calm dissatisfaction ("not very convenient")
- **Medium:** explicit disappointment ("very disappointed", "bad experience")
- **Severe:** threats ("I'll uninstall if not fixed", "I'll file a complaint") → high-priority handling

## Step 4 — Theme clustering

Apply two methods to extract core themes.

**Method A — Affinity mapping:**

1. **Split observations:** decompose each feedback item into independent observation cards
2. **Natural cluster:** group by similarity without preset labels — let themes emerge
3. **Name themes:** label each cluster ("payment flow friction", "search results irrelevant")
4. **Identify hierarchy:** group small clusters under larger themes (e.g. "payment friction" + "long refund cycle" → "transaction experience")
5. **Flag outliers:** items that fit no cluster — possible early signals

**Method B — Thematic coding:**

1. **Open coding:** tag each item with descriptive labels ("slow load", "crash", "hidden entry point")
2. **Axial coding:** group descriptive labels into abstract themes ("slow load" + "crash" → "performance issues")
3. **Selective coding:** identify core themes and their relationships
4. **Quantify frequency:** count mentions and share per theme

**Cluster output:**

| Theme | Sub-theme | Mentions | Share | Representative quote |
|---|---|---|---|---|
| {theme 1} | {sub-a} | {N} | {X%} | "verbatim quote" |

## Step 5 — NPS analysis (if rating data exists)

- **NPS = % Promoters (9-10) − % Detractors (0-6)**
- Industry benchmarks: SaaS avg 30-40, consumer apps avg 20-30
- 5-star → 10-pt mapping: 5★=10, 4★=8, 3★=6, 2★=4, 1★=2

## Step 6 — Trend analysis (if time data exists)

**MoM (or WoW) change calculation:**
- Aggregate by week or month per category
- Growth rate = (current − previous) / previous × 100%
- Watch for > 30% changes — flag as "needs attention"

**Inflection-point detection:**
- 3+ consecutive periods in one direction → established trend
- Sudden direction reversal → trigger investigation
- Correlate with external events: releases, campaigns, competitor moves

**Trend output:**
- Time-series description per category
- Mark significant changes + likely cause
- Early-warning: which metrics are deteriorating, which improving

## Step 7 — Triangulation

When data spans multiple channels, cross-validate to lift confidence.

**Method triangulation:** same problem confirmed by different methods
- e.g. theme cluster says "slow load = top pain" → check if NPS detractors' open-ended answers also concentrate on performance

**Source triangulation:** same finding across channels
- App-store complaints + support tickets + community chatter all cite "crash" → high confidence
- Single-channel finding → tag "single-source, needs validation"

**Time triangulation:** persistence of the same problem
- > 3 weeks consistent → systemic
- One-off → likely transient or already fixed

**Confidence tiers:**

| Tier | Conditions | Tag |
|---|---|---|
| **High** | Multi-source + multi-method + persistent | Decision-ready |
| **Medium** | 2 of the 3 dimensions support | Recommend more data before deciding |
| **Low** | Single source or single method | Reference only, validate further |

## Step 8 — Persona extraction

Identify typical user types from the feedback corpus.

**Method:**
1. **Behavior cluster:** infer user types (newbie / veteran / power user / occasional)
2. **Need cluster:** which users care about efficiency, which about experience, which about price
3. **Sentiment cluster:** loyal advocates / silent users / vocal complainers / churn-edge

**Persona template:**
```
[Persona name]: