kalilurrahman/kr-claudiator-skills/customer-segmentation

Claude Code and agent skill by kalilurrahman/kr-claudiator-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Build customer segmentation models for personalisation, targeting, and lifecycle management. Outputs RFM analysis, behavioural clustering, segment SQL, and activation playbooks.

Install

npx vskill@latest install kalilurrahman/kr-claudiator-skills/customer-segmentation

SKILL.md

Customer Segmentation

Customer segmentation groups customers by shared characteristics to enable targeted treatment. Segments based on behaviour (RFM, lifecycle stage) are more actionable than demographic segments because they directly reflect the customer relationship.

RFM Segmentation

python
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
def compute_rfm(transactions: pd.DataFrame, reference_date: datetime = None) -> pd.DataFrame:
"""
Compute RFM scores for each customer.
transactions: DataFrame with columns [customer_id, order_date, order_value]
Returns: DataFrame with [customer_id, recency, frequency, monetary, rfm_score, segment]
"""
if reference_date is None:
reference_date = transactions["order_date"].max() + timedelta(days=1)
rfm = transactions.groupby("customer_id").agg(
recency=("order_date", lambda x: (reference_date - x.max()).days),
frequency=("order_date", "count"),
monetary=("order_value", "sum"),
).reset_index()
# Score 1-5 (5 = best)
rfm["r_score"] = pd.qcut(rfm["recency"], q=5, labels=[5,4,3,2,1]) # Lower recency = better
rfm["f_score"] = pd.qcut(rfm["frequency"].rank(method="first"), q=5, labels=[1,2,3,4,5])
rfm["m_score"] = pd.qcut(rfm["monetary"].rank(method="first"), q=5, labels=[1,2,3,4,5])
rfm["rfm_score"] = rfm["r_score"].astype(int) * 100 + rfm["f_score"].astype(int) * 10 + rfm["m_score"].astype(int)
# Assign segments
def segment(row):
r, f, m = int(row["r_score"]), int(row["f_score"]), int(row["m_score"])
if r >= 4 and f >= 4: return "champions"
if r >= 3 and f >= 3: return "loyal"
if r >= 4 and f <= 2: return "new_customers"
if r >= 3 and f >= 1 and m >= 3: return "potential_loyalists"
if r <= 2 and f >= 3: return "at_risk"
if r <= 2 and f <= 2: return "lost"
return "others"
rfm["segment"] = rfm.apply(segment, axis=1)
return rfm
# Segment action map
SEGMENT_ACTIONS = {
"champions": "Early access to new features; referral programme",
"loyal": "Upsell to higher tier; loyalty rewards",
"at_risk": "Win-back campaign; investigate churn reasons",
"new_customers": "Onboarding assistance; guide to core features",
"potential_loyalists":"Engagement campaign; personalised recommendations",
"lost": "Re-engagement offer; last-chance email",
}

Lifecycle Segment SQL

sql
-- Customer lifecycle segments based on activity
WITH latest_activity AS (
SELECT
customer_id,
MAX(order_date) AS last_order_date,
MIN(order_date) AS first_order_date,
COUNT(DISTINCT order_id) AS order_count,
SUM(order_value_usd) AS total_revenue_usd,
CURRENT_DATE - MAX(order_date) AS days_since_last_order
FROM orders
WHERE status NOT IN ('cancelled', 'refunded')
GROUP BY customer_id
),
segmented AS (
SELECT
customer_id,
days_since_last_order,
order_count,
total_revenue_usd,
CASE
WHEN order_count = 1
AND days_since_last_order <= 30 THEN 'new'
WHEN order_count >= 2
AND days_since_last_order <= 60 THEN 'active_repeat'
WHEN order_count = 1
AND days_since_last_order > 30
AND days_since_last_order <= 90 THEN 'new_at_risk'
WHEN days_since_last_order > 60
AND days_since_last_order <= 120 THEN 'at_risk'
WHEN days_since_last_order > 120
AND days_since_last_order <= 365 THEN 'lapsed'
WHEN days_since_last_order > 365 THEN 'lost'
END AS lifecycle_segment
FROM latest_activity
)
SELECT
lifecycle_segment,
COUNT(*) AS customer_count,
AVG(total_revenue_usd) AS avg_ltv,
AVG(order_count) AS avg_orders,
ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER(), 1) AS pct_of_customers
FROM segmented
GROUP BY lifecycle_segment
ORDER BY customer_count DESC;

Anti-Patterns to Avoid

Anti-PatternProblemFix
Static segmentsSegments drift as behaviour changesRe-compute segments daily/weekly
Too many segmentsOperationally unmanageable5-8 actionable segments maximum
Segments without actionsSegmentation as analysis, not activationEvery segment has a defined treatment
RFM without contextHigh M but single purchase ≠ loyalLayer lifecycle stage on top of RFM
Ignoring B2B account vs userIndividual user RFM misses account-level valueSegment at account level for B2B

10 Rules

  1. Segmentation exists to drive action — every segment has a defined playbook.
  2. 5-8 segments maximum — more creates operational paralysis.
  3. Recalculate segments regularly — customer behaviour changes; segments must follow.
  4. RFM is a starting point — layer product behaviour on top for richer segments.
  5. Segment at the right grain — individual users for B2C; accounts for B2B.
  6. Measure segment migration — are customers moving toward "champions" or "at_risk"?
  7. Champions are your best marketing asset — referral and advocacy programmes first.
  8. At-risk is the highest-ROI intervention — it's cheaper to save than acquire.
  9. Segment quality: every segment should be reachable (you have contact info) and actionable.
  10. A/B test segment treatments — prove that the action improves outcomes for that segment.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/kalilurrahman/kr-claudiator-skills/customer-segmentation/badge)](https://verified-skill.com/skills/kalilurrahman/kr-claudiator-skills/customer-segmentation)

Something wrong with this skill or its page? Tell us.