想象你住的小区门口有位叫老张的保安。他在这干了十年,认得每户人家:李大爷早晚各遛一次狗,王姐七点半骑电动车出门,三楼的学生十一点才下晚自习。老张认人不只看脸,还听声音、看走路姿态、记常穿的衣服。有天傍晚,一个陌生年轻人刷门禁卡进了单元门。老张叫住他:“您找谁家?”年轻人支支吾吾。一查门禁记录,这张卡两小时前刚挂失。老张立刻通知物业,拦下了一场入室盗窃。 金融反欺诈,就是为每笔交易、每个账户、每台设备,配一位这样的“老张”。设备指纹技术解决“认人”问题——系统通过浏览器、硬件、网络等几十项细节,为每台设备生成独一无二的“身份证号”。行为分析技术解决“识习惯”问题——系统记录登录时段、操作序列、交易频率,建立“行为画像”。当设备对不上号、行为突然反常时,系统就像老张一样警觉,在资金受损前叫停交易。 这篇文章,带你完整看看这套“AI 老张”是怎么炼成的。

岗位关联

反欺诈是金融科技的核心防线,掌握设备指纹与行为分析,是风控算法工程师、反欺诈工程师的必备技能。学完本文,你能理解风控系统的设计思路,并动手实现一个简化版风险检测原型。

目录
  1. 可视化演示
  2. 欺诈态势与风控
  3. 设备指纹采集
  4. 指纹核心算法
  5. 行为分析建模
  6. 异常识别技术
  7. 风控实战落地
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示设备指纹生成(SHA-256哈希)、行为异常检测(Z-score)与欺诈团伙图网络挖掘三大反欺诈核心技术,交互切换查看不同检测维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

反欺诈三重防线 设备指纹:硬件+软件+网络特征→SHA-256→唯一标识,相似度>0.9触发预警 行为分析:鼠标轨迹+按键节奏+Z-score异常检测,综合评分>80拦截 图网络:用户-设备-IP-银行卡关联,密集连通子图=欺诈团伙 综合评分=Σ(wᵢ×Zᵢ) | 指纹相似度=1−Hamming/D 分层防御:指纹识别→行为检测→团伙挖掘

欺诈态势与风控

老张的保安室墙上,贴着一张手写的“重点防范名单”:有人专趁上班时间撬锁,有人冒充物业上门推销,还有团伙在小区外望风接应。老张心里明白,对付不同的人得用不同的办法——防撬锁靠查门禁记录,防冒充靠打电话核实,防团伙靠巡逻时多留个心眼。

金融欺诈也是同样的“坏人谱系”。最常见的三类:一是盗号盗刷,黑产拿到账号密码后冒充本人转走资金;二是营销薅羊毛,用批量注册的账号抢优惠券、领新人红包;三是洗钱跑分,用大量“傀儡账户”把非法资金拆散转移。而这些手法背后,都连着一条完整的黑产产业链:上游提供改机、接码等作案工具,中游实施攻击,下游负责销赃变现。

反欺诈系统对抗的不是单点攻击,而是整条产业链。因此系统要有完整闭环:感知层埋点采集设备与行为数据,识别层用设备指纹和行为分析判定风险,决策层用规则和模型给出处置意见,处置层执行放行、验证、拦截或复审,最后把结果反馈给特征库和规则库,让系统持续进化。

老张每天下班前会盘一遍“今天拦下了什么、漏掉了什么”,把新骗术记进小本本。风控系统也靠这个闭环,不停地更新自己的“防范名单”。

L=P×V×(1−R)L = P \times V \times (1 - R)
这个公式告诉我们:反欺诈的收益不是“抓了多少坏人”,而是“减少多少预期损失”。欺诈概率越高、金额越大、拦截越差,损失就越惨重。
  1. 欺诈概率 P模型估算这笔交易是欺诈的可能性,取值在 0 到 1 之间。P 越高,这笔交易越需要警惕。
    P∈[0, 1]P \in [0,\ 1]
  2. 交易价值 V这笔交易一旦得逞可能造成的资金损失,金额越大,越值得投入风控资源。
    V=单笔最大可损失金额V = \text{单笔最大可损失金额}
  3. 拦截概率 R风控系统成功识别并阻止这笔欺诈的概率,R 越接近 1,防线越可靠。
    R=成功拦截的欺诈笔数全部欺诈笔数R = \frac{\text{成功拦截的欺诈笔数}}{\text{全部欺诈笔数}}
  4. 期望损失 L三个因素共同决定的剩余风险,反欺诈的目标就是把 L 压到可接受范围。
    L=P×V×(1−R)L = P \times V \times (1 - R)

设备指纹采集

老张认人不靠一张脸。李大爷戴着口罩遛狗,他也能凭走路姿势和颠颠的狗叫声认出来。因为单个特征会变,综合特征却很难同时变。设备指纹就是这个思路的工程实现。

网页或 App 启动时,前端代码会读取设备的数十项信息:浏览器 UA、屏幕分辨率、操作系统、语言时区、字体列表、Canvas 绘图特征、WebGL 渲染参数、硬件并发数等。每个维度单独看都不起眼,合在一起却能拼出一张相当独特的“设备面孔”。

采集要遵循三个原则:稳定(特征不宜频繁变化)、独特(不同设备区分度要高)、合规(必须获得用户授权,不碰短信、通讯录等敏感内容)。采集好的特征按固定顺序拼接,经过哈希运算生成定长的指纹 ID,例如 A7F3C8B2。这个 ID 就是设备在风控体系里的“门禁卡号”。

当一台从未见过的设备出现在小区门口,老张会翻开登记簿对一对——这台“设备”没有编号,立刻进入重点关注名单。

F=SHA256⁡(f1∥f2∥⋯∥fn)F = \operatorname{SHA256}(f_1 \| f_2 \| \cdots \| f_n)
拼接加哈希有两个作用:一是把任意长的特征串变成定长指纹,方便存储和比对;二是单向不可逆,原始特征不以明文形式泄露,符合隐私合规要求。
  1. 特征项 f_i每一项代表一类设备信息,如浏览器版本、屏幕分辨率、字体列表。
    f1=UA,f2=分辨率,…f_1 = \text{UA},\quad f_2 = \text{分辨率},\quad \ldots
  2. 拼接符号 \|按固定顺序把各特征值连成一个长字符串。顺序必须固定,否则同一台设备会算出不同指纹。
    raw=f1∥f2∥⋯∥fn\text{raw} = f_1 \| f_2 \| \cdots \| f_n
  3. SHA256 哈希对拼接串做单向哈希,输出定长结果,且无法从结果反推原始特征。
    F=SHA256⁡(raw)F = \operatorname{SHA256}(\text{raw})
  4. 指纹 ID F最终得到的定长十六进制串,作为设备在风控库中的唯一编号。
    F=64 位十六进制串F = \text{64 位十六进制串}

指纹核心算法

小区来了个打扮成维修工的人,老张总觉得眼熟——身高、步态、露出的半张脸,都像上个月被赶出去的惯偷。可人家换了工装、戴了帽子,不能单凭一项就认定。老张的办法是:数共同特征,“像”到一定程度,就是同一人。

设备指纹的匹配同样不追求“一模一样”。同一台设备也会随时间变化:浏览器升级、系统更新、更换网络,都会让部分特征改变。如果只做精确相等匹配,老用户换个浏览器就会被当成新设备,风控会大面积误杀。所以要用集合相似度来容错。

最常用的是 Jaccard 相似度:把两台设备的特征分别看成一个集合,计算交集大小占并集大小的比例。比例越接近 1,越可能是同一台设备。工程上还会对特征做稳定性加权,并用信息熵筛选高区分度特征——一个所有设备都相同的特征没有判别价值,熵越高越值得用。

老张的登记簿上,“惯偷”换了三次工装还是被认了出来——因为相似度足够高,照样上重点名单。

J(A,B)=∣A∩B∣∣A∪B∣J(A, B) = \frac{|A \cap B|}{|A \cup B|}
Jaccard 相似度回答的是:“两台设备的特征集合,到底有多像?” 0 表示毫无共同点,1 表示特征完全一致。
  1. 集合 A 与 B把两台设备的特征分别视为一个集合,元素为不同的特征项。
    A={UA, 分辨率, 时区, 字体}A = \{\text{UA, 分辨率, 时区, 字体}\}
  2. 交集 |A ∩ B|两台设备共同拥有的特征数量,共同特征越多越像。
    ∣A∩B∣=共同特征数\vert A \cap B \vert = \text{共同特征数}
  3. 并集 |A ∪ B|两集合合并去重后的特征总数,容忍某一侧新增了特征。
    ∣A∪B∣=去重后特征总数\vert A \cup B \vert = \text{去重后特征总数}
  4. 阈值判定J 超过阈值(如 0.85)判定为同一设备,否则视为新设备触发额外验证。
    J≥θ⇒同一设备J \geq \theta \Rightarrow \text{同一设备}

行为分析建模

老张最引以为傲的不是认脸,而是背得下整栋楼的作息表:李大爷六点半出门遛狗,王姐七点半骑车上班,三楼的快递晚上八点才取。有次李大爷凌晨三点在小区里晃悠,老张立刻警觉——人对得上号,行为却对不上。

行为分析做的正是这件事。系统记录用户每次操作的上下文:登录时间、点击路径、页面停留时长、转账金额、收款方是否首次交易、输入速度与修改次数。把这些动作按时间排列,就得到一条“行为序列”,相当于用户的电子作息表。

特征工程是把行为序列变成模型可用的数字特征。时间维度(活跃时段、操作间隔)、序列维度(操作顺序、转移概率)、额度维度(单笔金额、日累计)、关系维度(交易对手的新旧)四类特征组合后,就能刻画行为是“常见”还是“反常”。行为画像则把用户分群:正常用户、夜猫子型、羊毛党、盗号嫌疑等,不同群体用不同基线做对比。

老张不会因为李大爷某天晚归十分钟就报警,但如果作息表被连续打破,他一定会走上前问一句:“今天这是怎么了?”行为分析也是这个尺度——抓显著偏离,而不是一次小波动。

P(a1,a2,…,am)≈∏i=1mP(ai∣ai−1)P(a_1, a_2, \ldots, a_m) \approx \prod_{i=1}^{m} P(a_i \mid a_{i-1})
把一条操作序列的概率拆成“上一个动作后出现下一个动作”的连乘积。概率越低,说明这条行为轨迹越不符合常规,越可能是欺诈分子在操控。
  1. 行为动作 a_i把一次操作编码为动作符号,例如登录、浏览、转账,整条序列就是行为轨迹。
    a1=登录, a2=浏览, a3=转账a_1 = \text{登录},\ a_2 = \text{浏览},\ a_3 = \text{转账}
  2. 条件概率 P(a_i \mid a_{i-1})从正常样本中统计“做完上一个动作后做下一个动作”的比例,比如“登录后立刻转账”在普通用户中很少见。
    P(转账∣登录)=0.02P(\text{转账} \mid \text{登录}) = 0.02
  3. 连乘符号 ∏将每一步转移概率相乘,得到整条轨迹出现的综合“常见程度”。
    ∏i=1mP(ai∣ai−1)\prod_{i=1}^{m} P(a_i \mid a_{i-1})
  4. 阈值判断综合概率显著低于阈值,说明行为严重偏离历史习惯,触发风险提示。
    Pseq<θ⇒行为异常P_{\text{seq}} < \theta \Rightarrow \text{行为异常}

异常识别技术

老张的直觉背后,是三十年的经验沉淀:听到撬锁声要警惕,半夜搬家要登记,提着大袋子出小区要查验。这些经验能写成一条条规则;而当几条线索同时出现时,他还会在心里默默打一个“可疑程度”的分数。

风控系统同样有两层识别能力。第一层是规则引擎:命中明确规则的请求直接处置,比如“新设备加大额转账”“凌晨三点加首次收款方”“30 秒内连续修改手机号”。规则透明、响应极快、可解释性强。第二层是模型打分:把设备指纹、行为特征、账户信息拼成特征向量,交给机器学习模型,输出一个 0 到 1 的欺诈概率。

逻辑回归是经典的打分模型,为每个特征学习一个权重:权重为正说明该特征推高欺诈风险,为负则降低风险。线性加权结果再经过 sigmoid 函数压缩到 0~1,就是最终风险分。更复杂的场景还会用 XGBoost 捕捉非线性关系,或用图模型发现“多个账户共享一台设备”的团伙结构。

老张的经验规则和“可疑打分”缺一不可:规则负责快速响应,直觉负责判断那些“说不上哪不对”的情况。两者叠加,才让小区既安全又不打扰正常住户。

P(y=1∣x)=11+e−(w⊤x+b)P(y=1 \mid \mathbf{x}) = \frac{1}{1 + e^{-(\mathbf{w}^{\top}\mathbf{x} + b)}}
一句话理解:把特征加权求和后的分数,塞进 sigmoid 函数,压缩成一个 0~1 的欺诈概率。越接近 1,风险越高。
  1. 特征向量 x把几十个风控特征(指纹是否已知、行为异常度、登录时段等)拼成一个数值向量。
    x=(x1,x2,…,xn)\mathbf{x} = (x_1, x_2, \ldots, x_n)
  2. 线性加权 wᵀx + b每个特征乘对应权重后求和,权重刻画特征对欺诈的贡献方向与强度。
    w⊤x+b=w1x1+w2x2+⋯+wnxn+b\mathbf{w}^{\top}\mathbf{x} + b = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b
  3. sigmoid 压缩把任意实数映射到 (0, 1) 区间,分数越大输出越接近 1。
    σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}
  4. 风险阈值决策输出概率与阈值比较,高于阈值拦截,低于阈值放行或进入人工复审。
    若 P≥0.8⇒拦截交易\text{若 } P \geq 0.8 \Rightarrow \text{拦截交易}

风控实战落地

老张再厉害,也离不开小区的整套安保体系:门禁读卡器、监控探头、巡逻路线、交接班日志。设备坏了要修,登记表要定期清理。反欺诈系统也一样——算法只是其中最聪明的一个环节。

一套标准的反欺诈系统架构包括四层:数据接入层负责客户端埋点与服务端日志采集,经 Kafka 消息队列汇聚;实时计算层在毫秒级完成特征提取与拼装;决策引擎层先用规则预筛,再调模型打分,输出风险评级;处置与回流层执行放行、验证、拦截、人工复审,并把结果回写样本库。整个过程要求在 100 毫秒内完成,否则支付体验会卡顿。

上线只是开始。风控团队要持续监控拦截率、误杀率、平均响应时延等指标。这里常用 EWMA 指数加权滑动平均来平滑指标曲线——它给近期观测值更高权重,又能滤掉随机抖动。当实时指标偏离平滑基准超过告警线,就说明系统可能有异常(比如新上线的策略误伤了大量用户),需要立即排查。

老张的交接班日志记录着每个可疑事件和处置结果,物业每周复盘调整巡逻方案。风控团队也用同样的方式迭代——每一次误杀和漏杀,都是让“AI 老张”变得更聪明的一课。

m^t=α⋅mt+(1−α)⋅m^t−1\hat{m}_t = \alpha \cdot m_t + (1 - \alpha) \cdot \hat{m}_{t-1}
EWMA 是“带记忆的平均数”:最新的真实值只占一部分,昨天的估计值保留大部分。既能感知趋势,又不被单点抖动带偏。
  1. 实时观测 m_t今天统计到的指标值,比如当日拦截率或误杀率。
    mt=3.2%m_t = 3.2\%
  2. 历史基准 \hat{m}_{t-1}昨天平滑后的基准值,代表“过去几天的平均印象”。
    m^t−1=2.8%\hat{m}_{t-1} = 2.8\%
  3. 平滑系数 α通常取 0.2~0.3,α 越大越信任最新数据,曲线越敏感。
    α=0.25\alpha = 0.25
  4. 平滑更新新基准等于今日观测与昨日基准的加权融合,偏差过大即触发监控告警。
    m^t=0.25×3.2%+0.75×2.8%=2.9%\hat{m}_t = 0.25 \times 3.2\% + 0.75 \times 2.8\% = 2.9\%

AI 应用场景

电商平台新人礼包防薅羊毛

阶段:设备指纹采集与关联分析

解决的问题:营销活动最怕被薅羊毛。传统做法是限制“同一账号只能领一次”,但黑产用改机软件在手机上批量伪造新设备、注册新账号,绕过了账号维度的限制。

具体案例:某电商大促期间,风控系统为每台手机生成设备指纹,发现 3000 多个新账号集中在 12 台设备上轮流切换,且行为序列高度一致(注册、领券、下单、同一收货地址)。系统将这些设备加入黑名单并批量拦截,活动获客成本下降 40%。

银行 App 深夜大额转账拦截

阶段:行为序列建模与风险评分

解决的问题:盗号者拿到账号密码后通常会快速转账。传统密码验证无法识别“操作者是不是本人”,必须结合行为习惯判断。

具体案例:某银行 App 用户的账户在凌晨三点登录,30 秒内完成绑卡、修改限额、分三笔转出 5 万元。行为序列模型对比历史轨迹后发现:该用户近一年从未在零点后登录、从未单笔超过 5000 元,风险分高达 0.92,超过拦截阈值,交易被阻断并触发短信二次验证。

信贷申请团伙欺诈识别

阶段:设备关联聚类与图分析

解决的问题:欺诈团伙用同一批设备批量申请贷款。单看每份申请都像“正常用户”,把设备维度连起来才暴露群体关系。

具体案例:某消费金融公司在审核时发现,20 份申请表来自 3 台设备,且每台设备上都注册过 7 个以上身份信息。通过设备指纹关联加行为聚类,识别出这是一个制造虚假资料的办贷团伙,及时拒绝了全部申请并上报行业黑名单。

Python 演示

python94 行
# -*- coding: utf-8 -*-"""反欺诈小系统: 设备指纹 + Jaccard匹配 + 行为异常检测""" import hashlib  class DeviceFingerprint(object):     def __init__(self, features):        self.feature_map = features        self.fingerprint_id = self._gen(features)     def _gen(self, features):        raw = "|".join(str(features[k]) for k in sorted(features.keys()))        return hashlib.sha256(raw.encode("utf-8")).hexdigest()[:16]     def jaccard(self, other):        set_a = set(self.feature_map.keys())        set_b = set(other.feature_map.keys())        inter = len(set_a & set_b)        union = len(set_a | set_b)        return inter / union if union > 0 else 0.0  class RiskController(object):     def __init__(self):        self.device_db = {}          # 指纹库: id -> 设备对象        self.behavior_his = {}       # 行为历史: id -> 动作值列表     def register(self, device, behavior):        self.device_db[device.fingerprint_id] = device        self.behavior_his[device.fingerprint_id] = behavior     def _zscore(self, history, current):        n = len(history)        if n == 0:            return 0.0        mean = sum(history) / n        var = sum((x - mean) ** 2 for x in history) / n        std = var ** 0.5        return 0.0 if std < 1e-9 else (current - mean) / std     def check(self, device, action_value):        best_id, best_sim = None, 0.0        for known_id, known_dev in self.device_db.items():            sim = device.jaccard(known_dev)            if sim > best_sim:                best_sim, best_id = sim, known_id         history = self.behavior_his.get(best_id, [])        anomaly = abs(self._zscore(history, action_value))         risk = 0.4 if (best_id is None or best_sim < 0.8) else 0.0        risk += min(anomaly * 0.3, 0.6)        risk = min(risk, 1.0)         if best_id is not None:            saved = self.behavior_his.setdefault(best_id, [])            saved.append(action_value)            if len(saved) > 20:                saved = saved[-20:]                self.behavior_his[best_id] = saved        return risk, best_id  def make_device(ua="Chrome/120", screen="1920x1080"):    features = {        "ua": ua,        "screen": screen,        "language": "zh-CN",        "platform": "Windows",        "fonts": "PingFang,SimSun",    }    return DeviceFingerprint(features)  def main():    controller = RiskController()    normal = make_device()    controller.register(normal, [0.2, 0.3, 0.25, 0.28])     for i in range(10):        device = make_device()        risk, dev_id = controller.check(device, 0.24)        print("正常交易 %d: risk=%.2f device=%s" % (i, risk, dev_id))     thief = make_device()    risk, dev_id = controller.check(thief, 0.95)    print("盗号交易: risk=%.2f device=%s" % (risk, dev_id))  if __name__ == "__main__":    main()
目的:实现一个简化版反欺诈小系统——先用多维特征生成设备指纹,再用 Jaccard 相似度匹配已知设备,最后用 z-score 检测行为异常并输出风险分。
  1. raw = "|".join(str(features[k]) for k in sorted(features.keys()))按固定顺序拼接特征,保证同一设备多次计算结果一致
  2. return hashlib.sha256(raw.encode("utf-8")).hexdigest()[:16]哈希生成定长指纹 ID,单向不可逆
  3. inter = len(set_a & set_b)计算两台设备共同特征数,是 Jaccard 相似度的分子
  4. std = var ** 0.5计算行为历史的标准差,用于衡量“当前动作偏离平时多少倍”
  5. risk = 0.4 if (best_id is None or best_sim < 0.8) else 0.0新设备或匹配度不足时直接加基础风险
  6. risk += min(anomaly * 0.3, 0.6)行为异常度按比例叠加风险,并设置上限防止单点过高
  7. controller.register(normal, [0.2, 0.3, 0.25, 0.28])注册正常设备的指纹与行为基线
  8. risk, dev_id = controller.check(thief, 0.95)盗号者行为突变,被系统识别为高风险

常见误区

误区以为设备指纹是设备出厂“焊死”的身份证号,只要不改硬件,一辈子就这一个。

正解设备指纹由浏览器版本、分辨率、字体等软性特征哈希生成,浏览器升级、系统更新、风控策略调整都会导致指纹变化。工程上要用相似度容错匹配,并定期重建指纹。就像老张认人,戴口罩、换发型、换衣服都会影响识别,得多看几个特征综合判断。

为何常见:“指纹”这个词容易让人联想到生物指纹的固定性,而实际上它更像一张会随时间变化的“动态画像”。

误区以为行为分析会读取聊天记录、短信内容、手机相册,觉得这是侵犯隐私的灰色手段。

正解行为分析使用的是操作元数据——什么时间、用什么设备、点了什么按钮、操作顺序如何,完全不读取内容,且必须通过用户授权与合规审查。它像老张看你几点出门、送没送孩子上学,而不是趴在窗台上看你在家干什么。

为何常见:“行为”这个词含义宽泛,人们对数据采集的边界不了解,容易想成监控私生活。

误区觉得反欺诈就是不停加 if 规则,规则越多,坏人越难钻空子。

正解规则一多,误杀率飙升(正常用户被反复验证)、维护成本高、规则之间互相冲突,而且黑产通过大量试错能反向摸清规则边界。正确做法是规则做“快筛”、模型做“细判”,用监控指标评估每条策略的边际收益。老张如果见谁都盘问三遍,住户会投诉,真贼反而混在抱怨的人群里溜进去。

为何常见:规则简单直观、可解释性强,容易给人“越多越安全”的错觉。

误区以为模型输出 0.9 分就一定要拦截,分高就是坏人,分低就是好人。

正解风控讲究分层处置:低分放行,中分加验证(短信、人脸),高分才拦截,极高风险才冻结。还要考虑误杀成本——误杀一位 VIP 客户的流失损失,可能远大于被欺诈的损失。老张对可疑的人也是先“盘问核实”,而不是直接报警。

为何常见:模型输出 0~1 的分数,给人“善恶分明”的错觉,忽视了业务成本和用户体验。

误区以为模型和规则部署上线,风控工作就结束了,剩下交给系统自动跑。

正解黑产对抗是动态博弈,模型会漂移、策略会被绕过。必须持续监控拦截率、误杀率,用 EWMA 等指标及时发现突跳,定期用新样本重训模型。就像老张每天更新交接班日志、物业每周复盘巡逻路线,不迭代就会被骗子摸透。

为何常见:很多离线实验效果不错,让人误以为上线即终点,忽略了对抗环境的动态性。

面试题

Q1. 设备指纹技术最核心的目标是什么?

单选题 · easy

  • A.记录用户浏览内容
  • B.唯一识别一台设备← 正确答案
  • C.提升页面加载速度
  • D.加密用户通信数据

答案:B。设备指纹通过综合多维度特征生成唯一标识,核心目标是识别设备。记录内容、加速加载、加密通信都不是指纹技术要解决的问题,就像老张登记住户是为了“认人”,而不是为了管闲事。

Q2. 以下哪项属于设备指纹常用的采集特征?

单选题 · easy

  • A.读取用户短信内容
  • B.浏览器UA与屏幕分辨率← 正确答案
  • C.获取微信聊天记录
  • D.记录银行卡支付密码

答案:B。UA、屏幕分辨率、字体列表、Canvas 特征等是典型的设备指纹采集项;短信、聊天记录、支付密码属于敏感隐私内容,正规风控系统不会采集。老张认人看的是“外在特征”,不是“翻兜看钱包”。

Q3. 指纹生成时使用 SHA256 哈希的主要目的是什么?

单选题 · mid

  • A.让指纹更短以节省存储
  • B.防止特征泄露得到定长ID← 正确答案
  • C.提高特征采集处理速度
  • D.让不同设备指纹保持相同

答案:B。哈希将拼接后的特征串单向映射为定长指纹,既保护原始特征隐私,又保证同一输入必得同一输出。省空间只是附带效果,加速采集和让指纹相同都不是哈希的目的。

Q4. Jaccard 相似度的计算公式是?

单选题 · mid

  • A.两集合交集比并集← 正确答案
  • B.两集合并集比交集
  • C.交集除以设备总数
  • D.两集合长度差的绝对值

答案:A。J(A,B) = |A∩B| / |A∪B|,用交集占并集的比例衡量两个特征集合的重合程度。好比老张数两个人身上“共同特征”占“全部特征”的比例,而不是数设备总数或长度差。

Q5. 两台设备的 Jaccard 相似度为 0.9,最可能意味着什么?

单选题 · mid

  • A.两台完全不同的设备
  • B.很可能是同一台设备← 正确答案
  • C.两台设备均来自海外
  • D.设备的指纹已经失效

答案:B。相似度接近 1 说明两集合高度重合,很可能是同一台设备(或黑产伪装的同源设备)。0.9 意味着 90% 的特征重叠,与“完全不同”恰恰相反。

Q6. 行为分析的特征工程维度通常包括哪些?

多选题 · mid

  • A.操作时间与操作频次← 正确答案
  • B.操作序列的执行顺序← 正确答案
  • C.交易金额与交易频率← 正确答案
  • D.用户手机号后四位数字

答案:ABC。时间、序列、额度是行为画像的三大核心维度,此外还有交易对手关系等。手机号属于身份标识,不属于行为维度——老张关心的是你“几点出门、去了哪”,而不是你的门牌号。

Q7. 逻辑回归输出欺诈概率的公式是?

单选题 · hard

  • A.sigmoid函数压缩加权和← 正确答案
  • B.特征线性加权求和值
  • C.特征对数累加的结果
  • D.离均值标准差的倍数

答案:A。逻辑回归先做线性加权 wᵀx+b,再用 sigmoid 函数 1/(1+e⁻ᶻ) 压缩到 0~1。线性加权只是中间结果,不是最终概率;对数累加和标准差倍数分别属于其他方法。

Q8. 实时风控链路通常包含哪些环节?

多选题 · hard

  • A.数据接入与上下文拼装← 正确答案
  • B.规则预筛与模型打分← 正确答案
  • C.风险评级与决策处置← 正确答案
  • D.修改用户银行卡支付密码

答案:ABC。实时链路是“接入、计算、决策、处置”四步闭环:先拼装设备与行为上下文,再规则预筛加模型打分,最后按风险评级处置。修改支付密码是用户自救动作,不是风控链路的环节。

Q9. 持续监控风控系统效果时,最需要关注哪些指标?

单选题 · easy

  • A.拦截率和误杀率← 正确答案
  • B.页面配色美观程度
  • C.服务器风扇噪音
  • D.研发团队人员数量

答案:A。拦截率衡量抓得住多少欺诈,误杀率衡量误伤多少正常用户,两者是风控的核心矛盾。页面配色、风扇噪音、团队人数与风控效果无直接关系。

Q10. 关于设备指纹与行为分析的关系,正确的说法是?

多选题 · extreme

  • A.设备指纹识别设备身份← 正确答案
  • B.行为分析判断行为习惯← 正确答案
  • C.两者结合抵御团伙欺诈← 正确答案
  • D.行为分析可替代设备指纹

答案:ABC。设备指纹回答“这套操作来自哪台设备”,行为分析回答“这些操作像不像本人干的”,二者互补。盗号场景中设备可能是本人的,但行为反常;团伙场景中行为看似正常,但设备高度聚集。单靠任何一个都无法形成完整防线——正如老张既认脸,也记作息。