P paper2skillsPlaybook
AI 路线图 →

Brand Listing Hijacking Detection — 电商品牌 Listing 劫持网络检测

Skill-Brand-Listing-Hijacking-Detection · 19-风控反欺诈

causalexperimentrecommendationfraud_detection客服与VOC推荐与搜索风控与合规WF-C 客服分诊WF-E Review监控WF-G Listing内容优化WF-I 智能体工程WF-K 全域风险防御WF-L 内容营销增长
年化 ROI20-100 万元
实现难度⭐⭐☆☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色运营负责人 / 合规负责人 · 品牌负责人 · CEO
适用平台Amazon 刷评检测与举报 · TikTok Shop 刷单识别 · 竞品 Listing 攻击溯源
什么情况下用竞品刷单刷好评,自己的 BSR 和评分被打压;账号/ASIN 被恶意投诉删除;店铺有异常订单不确定是真实买家
成功是什么样的识别过滤刷评/恶意竞争行为,账号风险提前预警,维权有数据证据,降低封号风险
业务痛点
竞品刷评打压我们我们的好评被恶意举报删除不知道差评是真实的还是恶意的如何证明竞品恶意行为

1. 解决的问题

竞品在品牌方ASIN下挂载劣质品蹭流量,人工发现需 2 周、BSR 损失严重——product-reviewer 二部图网络聚类特征早期检测劫持卖家,发现时间压缩至 24-48h,年化保护 GMV 20-100 万元

2. 核心算法逻辑

核心思想:Listing 劫持(Brand Hijacking)是指竞品或灰色商家在品牌方的 ASIN 下挂载低价劣质品蹭流量,同时通过刷评维持虚假好评。这两种欺诈行为在网络结构上有共同特征:异常的产品卖家评论者三方图聚集——劫持卖家往往组织刷评网络,正常商家的 review 网络是稀疏的,劫持账号群体的 review 网络是高度聚类的。

3. 业务应用场景

场景:吸奶器品牌 Listing 劫持早期预警

- 业务问题:某母婴品牌 S1 吸奶器 ASIN B08XY 月销 2,000 件,突然发现 Buy Box 被一家不知名卖家以低价抢占,且该卖家的好评中有大量疑似水军(24h 内集中出现 20+ 条五星评论)。人工发现时已损失 2 周 BSR 排名。 - 数据要求:该 ASIN 的历史卖家列表 + 评论者 ID + 评论时间戳(可通过 Amazon SP API + Keepa 获取)。 - 预期产出: - 每个卖家的"劫持风险分"(0-1) - 评论者网络聚类热图(异常集群高亮) - 预警触发:风险分 > 0.7 自动发送告警 + 提交 Amazon 举报链接 - 防御动作: - 早期预警

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI 预估:劫持发现时间 2周→24-48h,BSR 损失减少 70%+,年化保护 GMV 20-100 万元
  • 实施难度:⭐⭐☆☆☆(低,主要是 Amazon SP API 数据采集 + 图算法)
  • 优先级:⭐⭐⭐⭐⭐(成规模品牌必经痛点,且竞品在用 AI 加速攻击)
  • 评估依据:PNAS 2022 + arXiv 2410.17507,Amazon 真实数据验证,网络特征 AUC 显著优于文本特征

7. 代码模板

代码块数量:2 · 路径:未检测到

from dataclasses import dataclass, field
from typing import List, Dict, Set
from datetime import datetime, timedelta
import statistics

@dataclass
class Review:
    reviewer_id: str
    asin: str
    rating: int
    timestamp: datetime
    verified: bool = True

@dataclass
class SellerRecord:
    seller_id: str
    asin: str
    start_date: datetime
    end_date: datetime | None = None

def compute_review_burst_score(reviews: List[Review], window_hours: int = 24) -> float:
    if len(reviews) < 3:
        return 0.0
    timestamps = sorted(r.timestamp for r in reviews)
    window = timedelta(hours=window_hours)
    max_burst = 0
    for i, ts in enumerate(timestamps):
        count_in_window = sum(1 for t in timestamps if ts <= t <= ts + window)
        max_burst = max(max_burst, count_in_window)
    burst_ratio = max_burst / len(reviews)
    return round(min(1.0, burst_ratio * 2), 3)

def compute_reviewer_overlap(asin_reviews: Dict[str, List[Review]]) -> Dict[str, float]:
    reviewer_asins: Dict[str, Set[str]] = {}
    for asin, reviews in asin_reviews.items():
        for r in reviews:
            reviewer_asins.setdefault(r.reviewer_id, set()).add(asin)
    overlap_scores = {}
    for asin, reviews in asin_reviews.items():
        reviewers = {r.reviewer_id for r in reviews}
        if not reviewers:
            overlap_scores[asin] = 0.0
            continue
        cross_asin_reviewers = sum(1 for rev in reviewers if len(reviewer_asins.get(rev, set())) > 1)
        overlap_scores[asin] = round(cross_asin_reviewers / len(reviewers), 3)
    return overlap_scores

def detect_listing_hijacking(asin: str, reviews: List[Review],
                              seller_history: List[SellerRecord],
                              all_asin_reviews: Dict[str, List[Review]]) -> Dict:
    burst = compute_review_burst_score(reviews)
    overlap = compute_reviewer_overlap(all_asin_reviews).get(asin, 0.0)
    unverified_ratio = sum(1 for r in reviews if not r.verified) / max(len(reviews), 1)
    five_star_burst = sum(1 for r in reviews if r.rating == 5) / max(len(reviews), 1)
    seller_switches = sum(1 for s in seller_history if s.end_date is not None)
    risk_score = (burst * 0.35 + overlap * 0.25 + unverified_ratio * 0.20 +
                  max(0, five_star_burst - 0.7) * 0.15 + min(0.05, seller_switches * 0.01))
    risk_level = "🔴高风险" if risk_score >= 0.6 else "🟡中风险" if risk_score >= 0.35 else "🟢低风险"
    actions = []
    if risk_score >= 0.6:

8. 论文来源

  • 2410.17507