mcpField
A
anomaly-fraud-scanner

anomaly-fraud-scanner

github.com/lyndonkl数据与数据库18744 次安装9 周前更新
代码仓库

关于 anomaly-fraud-scanner

面向家庭财务的技能,将新交易与过去 12 个月的记录比对,查找异常模式和意外费用。它结合五种检测器生成带严重程度、证据和建议操作的提醒,但由用户决定是否采取行动。

主要功能

  1. 01检测重复交易
  2. 02检测金额统计异常
  3. 03提醒首次出现的高额商户交易
  4. 04检查地理位置和时间异常
  5. 05检测意外费用
  6. 06合并提醒并附上证据和建议操作

适用场景

  1. 01检查新导入的家庭交易
  2. 02查找重复或反复出现的扣款
  3. 03核查陌生商户的大额消费
  4. 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/。误报会用于后续调整阈值。

评论

支持 Markdown