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