关于 anomaly-fraud-scanner
面向家庭财务的技能,将新交易与过去 12 个月的记录比对,查找异常模式和意外费用。它结合五种检测器生成带严重程度、证据和建议操作的提醒,但由用户决定是否采取行动。
主要功能
- 01检测重复交易
- 02检测金额统计异常
- 03提醒首次出现的高额商户交易
- 04检查地理位置和时间异常
- 05检测意外费用
- 06合并提醒并附上证据和建议操作
适用场景
- 01检查新导入的家庭交易
- 02查找重复或反复出现的扣款
- 03核查陌生商户的大额消费
- 04发现需跟进的异常费用
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lyndonkl/ claude --skill anomaly-fraud-scanner安装后在 Claude Code 中输入/anomaly-fraud-scanner确认已加载。
详细介绍
异常欺诈扫描器
目录
概述
家庭预算中的欺诈检测与银行的欺诈检测是不同的问题。银行已经运行了复杂的规则;这项技能旨在发现银行遗漏的问题——低于银行阈值的小额周期性欺诈、不熟悉的商户模式,以及对用户尚未注意到的扣款进行事后审计。
它会运行五种互补的检测器,每种检测器都会生成带有严重程度标记的警报。
输入约定
调用方提供:
transactions_new— 最近一次导入新增的交易。transactions_history— 最近 12 个月已确认的交易。accounts— 用于提供上下文(账户类型、所有者、地理位置)。today— ISO 日期。thresholds— 可选的覆盖项:{ "duplicate_window_hours": 48, "anomaly_sigma": 3.0, "first_merchant_high_dollar_cents": 50000, "geo_radius_miles": 1000 }
检测规则
规则 1 — 48 小时内重复交易
同一 account_id 上的两笔交易具有相同的 merchant 和 amount_cents,且入账时间相差不超过 duplicate_window_hours。
- 严重程度:金额 < $200 时为
medium,金额 ≥ $200 时为high。 - 常见误报:一天内买了两杯咖啡、途中加了两次油——当金额低于 $30 时,将
food.coffee、food.restaurants、transportation.gas排除在此规则之外。
规则 2 — 统计异常
对于至少有 6 次历史记录的每个 (merchant, account_id) 组合,计算均值和标准差。标记任何满足 |amount − mean| > anomaly_sigma × stddev 且 |amount − mean| ≥ $50 的新交易。
- 严重程度:基准为
medium;若> 5σ或金额 > 均值的 4 倍,则为high。 - 常见误报:餐厅小费金额变化、网约车高峰定价——对
food.restaurants和transportation.rideshare放宽 25% 的判定标准。
规则 3 — 首次出现的商户且金额较大
一笔交易的商户在 transactions_history 中从未出现过,且 |amount| ≥ first_merchant_high_dollar_cents。
- 严重程度:金额为 $500–$2,000 时为
medium,金额 ≥ $2,000 时为high。 - 常见误报:计划中的大额购买(家电、旅行预订)。如果存在近期的
category_override或用户确认的计划,则抑制此警报。
规则 4 — 地理位置或时间异常
如果 description_raw 中包含位置字符串(州代码、国家代码),且推断的位置与家庭所在地相距超过 geo_radius_miles,并且未设置旅行上下文,则标记。
如果交易在不寻常的时间(当地时间凌晨 2 点至 5 点之间)入账,且商户类别在该时段并不常见(非加油站、非 24 小时药房),则标记。
- 严重程度:
medium。 - 此规则容易产生误报——仅在位置或时间信号明确存在时使用。
规则 5 — 意外费用
捕获所有 category: financial.fees 的交易。添加 fee_type 标签(透支、境外交易、月度维护、ATM、逾期付款)。
- 严重程度:费用 < $10 时为
low,费用为 $10–$50 时为medium;透支费用和逾期付款费用无论金额多少,均为high。 - 始终可采取行动:大多数费用都可以协商或避免。
工作流
Anomaly Scan Progress:
- [ ] Step 1: Build merchant statistics from transactions_history
- [ ] Step 2: Run Rule 1 (duplicate within 48h)
- [ ] Step 3: Run Rule 2 (statistical anomaly)
- [ ] Step 4: Run Rule 3 (first-merchant high-dollar)
- [ ] Step 5: Run Rule 4 (geography/time)
- [ ] Step 6: Run Rule 5 (fees)
- [ ] Step 7: Deduplicate alerts (one tx may trigger multiple rules)
- [ ] Step 8: Rank by severity then dollar impact
- [ ] Step 9: Attach recommended actions
去重
单笔交易可能会合理地触发多条规则(例如,在另一个州的一家全新商户处发生 $5,000 的扣款——规则 3 和 4)。将它们合并为一条警报,其中包含 triggered_rules: [...] 和最高严重程度。
建议采取的行动
每条警报都会附带以下其中一项:
call_bank_fraud_line— 适用于用户不认识的high严重程度扣款。freeze_card— 适用于已确认的欺诈,或在数小时内发生多笔扣款、尚未致电银行时。dispute_charge— 适用于已知商户的多收费,或已入账与待处理的重复交易问题。negotiate_fee— 适用于financial.fees(透支、月度维护费),且有已知协商方案的情况。monitor— 适用于medium/low警报,用户应进行确认;若交易属实,则无需采取行动。
始终附上一行 evidence,说明触发规则的原因,并提供具体数字。
输出约定
{
"scanned": {
"transactions_new": 142,
"transactions_history": 1820,
"merchants_with_stats": 218
},
"alerts": [
{
"id": "alert_20260424_001",
"severity": "high",
"triggered_rules": ["first_merchant_high_dollar"],
"tx_ids": ["tx_20260424_011"],
"merchant": "TECH-SHOP-ONLINE",
"amount_cents": -245000,
"account_id": "acc_cc_001",
"evidence": "First charge ever from TECH-SHOP-ONLINE; amount $2,450 exceeds new-merchant high-dollar threshold of $500.",
"suggested_action": "call_bank_fraud_line",
"expected_user_response": "Confirm whether this purchase is yours; if not, freeze card and dispute."
},
{
"id": "alert_20260424_002",
"severity": "medium",
"triggered_rules": ["statistical_anomaly"],
"tx_ids": ["tx_20260424_023"],
"merchant": "Whole Foods",
"amount_cents": -38420,
"evidence": "12-month avg $84.50, stddev $22.30; this charge ($384.20) is 13.4σ above mean.",
"suggested_action": "monitor",
"expected_user_response": "If you bought groceries for a party, ignore. Otherwise, check the receipt."
},
{
"id": "alert_20260424_003",
"severity": "high",
"triggered_rules": ["fee_overdraft"],
"tx_ids": ["tx_20260423_004"],
"merchant": "Bank Name",
"amount_cents": -3500,
"evidence": "Overdraft fee of $35 charged on 2026-04-23. Account balance was negative for 2 days.",
"suggested_action": "negotiate_fee",
"expected_user_response": "Call the bank's customer line; first overdraft fees are typically waived on request."
}
],
"summary": {
"alerts_total": 3,
"high_severity": 2,
"medium_severity": 1,
"low_severity": 0
}
}
防护措施
- 绝不认定存在欺诈。 使用“不寻常”“首次出现”“高于阈值”等措辞。由用户确认;此技能仅负责标记。
- 针对误报的代价进行调整。 用户会查看中严重程度警报;高严重程度警报会打乱用户的日常安排。仅在确实非常异常时才标为
high。 - 列明计算依据。 每条警报都要注明比较基准(均值、标准差、出现次数、阈值)。用户必须能够评估其中的判断依据。
- 尊重历史上下文。 如果商户以不同的显示名称出现在历史记录中,“商户首次出现”触发条件不应触发。使用分类器提供的标准化商户名称。
- 未经同意不得采取行动。 建议的行动由用户自行采取;家庭财务系统绝不会执行财务操作。
- 保留警报日志。 所有发出的警报都会追加到
reports/alerts/。误报会用于后续调整阈值。