QCon北京|3天沉浸式学习,跳出信息茧房。 了解详情
写点什么

Airbnb 支付平台如何进行异常检测

  • 2016-03-24
  • 本文字数:2135 字

    阅读完需:约 7 分钟

对于全球的房主和客人来说,Airbnb 非常希望房客都可以通过他们自己熟悉的支付方式、本地币种来支付房费;房主也可以通过喜欢的货币、方便的途径收取房租。为了实现此目的, Airbnb 支付团队构建了一个一流的支付平台来保证支付安全和易用性。

Airbnb 为全球 190 个国家提供服务,支持多种货币类型。大部分情况下,支付系统会成功支付,但有时会出现暂歇性故障,比如,某些货币不能处理或者支付渠道不可访问。为了能够尽可能快的捕捉到这些故障信息,公司的数据团队开发了一个实时的异常检测系统来甄别这些问题。这个异常检测系统可以很好的帮助产品团队定位问题,也让数据分析师能腾出更多的时间来做其它工作,比如,新的付费方式或者产品上线的 A/B 测试、定价或者价格预测和构建机器学习模型来做个性化推荐。
为了让大家看到这个异常检测工具的使用,这里通过一些模拟数据集来展示模型是如何工作的。假设一个运行在 2020 年夏天的电商网站,提供三件商品:监视器、键盘和鼠标,并且两个供应商:Lima 和 Hackberry。

动机

异常探测系统的主要功能是从时序数据中发现异常数据。简单的情况可以通过整体的直观图表一眼看出来,但大部分情况需要“解密”在这些图表趋势背后的数据。
拿下面这个监控器进货的数据举列,如图 1

图 1

从图 1 中看到监控器的总体进货量相当的正常。然后分别分析下两个供货商 Lima 和 Hackberry 的数据,见图 2

图 2

从图 2 可以看出,Lima 是电商主要监控器的供应商,但是在 2020 年 8 月 18 号运输出现问题持续大概 3 天。Airbnb 异常检测系统自动检测出此问题并反馈给二级供应商 Hackberry。这里可以看出从整体层面数据根本发现不了此问题,但是从另外一个维度却能清晰的检测出问题。

模型

简单的回归模型
最直观的想法是把天数作为哑变量跑一遍普通的最小二乘回归。模型的公式如下:

其中 y 是跟踪的总量,t 是时间变量,I_day_i 是指示变量,代表今天是这周的第 i 天,e 是误差项。这个回归模型简单并能鉴别前面遇到的问题 ,但是也有其缺点:

  • 增长预测是线性的,一遇到指数式就失效了;
  • 模型有个极强的假设前提:适用于按周的季节性时序数据,不能处理其它模式的季节数据集;
  • 哑变量较多,模型需要更大的样本量才能得到好的结果。

即使能够观察到追踪指标的模式,但不易于扩展变化。Airbnb 工程师采用自动的方法避免误差,并让这种技术运用到支付以外的场景。

快速傅里叶变换模型(FFT)
对时序数据集构建一个基于趋势和季节的模型。模型数学公式如下:

其中,Y 是度量标准,S 是季节变量,T 代表趋势,e 是误差项。例如,以前面的简单回归模型对比,这里的 S 代表所有指示变量的和,T 等同于 at + b。

在这部分,展示新模型如何检测趋势和季节性。基于上面的经验,这次采取两款产品:键盘和鼠标。下图 3 展示两种产品的销售数据:

图 3

从上图 3 可以看出,键盘是在 2016 年 9 月开始售卖,并成为主打商品。2017 年 8 开始引进鼠标。后面将对趋势和季节进行建模,试图发现偏离平均值的异常数据。

季节效应
为了解决季节性效应,这里采用快速傅立叶变换 FFT。在简单的线性回归模型中,前提假设是时序数据是按周季节性变化的。从上面的趋势图可以看出鼠标的销售并不是按周季节性变化的,如果胡乱的假设会造成模型误判。而快速傅立叶变化 FFT 擅长基于历史时序数据总量来进行季节性检测。对时序数据集应用 FFT 之后,得到下面的图 4

图 4

图 4 中 season_day 周期性余弦值。在快速傅立叶变换中,一般只选择峰值的周期代表季节性,其它周期当作噪音(具体为什么这么选择可以看 FFT 原理资料)。在这个列子里,键盘的 FFT 结果有 7 和 3.5 两个采样点是大峰值,在 45 和 60 两个采样点有小峰值。而对于鼠标来讲,在采样点 7 时有个大峰值,35、60 和 80 有相对小的峰值。把两种商品的 FFT 结果合并生成季节性图,如图 5

图 5

从图 5 上可看出,键盘的产品季节性增长,主要是按周季节性的。而鼠标有按周的季节性趋势和 40 天一个周期的季节性。

趋势分析
这里采用滚动中值(rolling median)来作为时序数据集的趋势。使用这种算法的前提假设是苏阿短时间内的增长变化不显著。比如,对某天来讲,采用其之前的 7 天的滚动中值作为当天的趋势水平。用中值代替平均值使得算法检测异常数据的结果更加稳定,举个列子,对于某一两天来说销量突然增长 10% ,如果使用中值则看不出来有什么变化,而采取平均值的话就对趋势有很明显的变化。在这种情况下,采用 14 天的中值作为趋势,如图 6

图 6

误差项
在得到季节效应和趋势后,可以评估误差项了。通过误差项可以发现时序数据集里的异常点,这里用原始数据减去季节效应和趋势得到误差项,然后绘图如下:

图 7

从图 x 发现,误差项里有一些毛刺,这就说明了时序数据集中出现异常点。根据实际情况定出所能容忍的负相关度,即选择偏离中心点 0 多少个标准方差(参考《概率论与数理统计教程》)。这里选择偏离 4 个标准方差来获得一个合理的阈值警报,结果如图 8

图 8

从上图可以看出,Airbnb 的预警系统非常棒,检测出误差项的大部分毛刺。注意到,其实有些点在人肉眼看来是正常的,但实际是异常数据也被检测出来了。

经过 Airbnb 内部测试发现这个模型异常数据检测的功能准确。

查看英文原文: Anomaly Detection for Airbnb’s Payment Platform


感谢黄玲艳对本文的审校。

2016-03-24 19:009611
用户头像

发布了 43 篇内容, 共 29.3 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

开源交流丨任务or实例 详解大数据DAG调度系统Taier任务调度

袋鼠云数栈

大学毕业后如何选择大数据培训机构

小谷哥

JDK1.6中String类的坑,快让我裂开了…

华为云开发者联盟

开发

Python 自动化测试(五): Pytest 结合 Allure 生成测试报告

霍格沃兹测试开发学社

如何选择靠谱的Java培训

小谷哥

Quick Tracking「全域采集与增长分析」,破局全域营销之道

瓴羊企业智能服务

授人为师,首期明道云零代码教练员研修班圆满结束

明道云

企业应用现代化实用教程 | 微服务架构怎么选?Dubbo、Spring Cloud、Istio终极对决

York

微服务 云原生 Spring Cloud istio Service Mesh (ASM)

大数据培训机构学习后就业前景如何

小谷哥

同时将博客部署到github和conding

Five

前端 博客搭建 8月月更

成长计划校园极客秀 | 玩转OpenHarmony开发智能煤气检测系统

OpenHarmony开发者

OpenHarmony

易观千帆 | 2022年7月苏州市手机银行应用活跃人数榜单

易观分析

金融 手机银行 榜单 苏州

【算法实践】他山之石,可以攻玉--利用完全二叉树快速实现堆排序

迷彩

Python 数据结构 算法 二叉堆排序 8月月更

分布式协同AI基准测试项目Ianvs:工业场景提升5倍研发效率

华为云开发者联盟

云计算 云原生

Python 自动化测试(三): pytest 参数化测试用例构建

霍格沃兹测试开发学社

深度解读|关于SBOM最基础元素,你需要知道的(Part III)

安势信息

漏洞 漏洞扫描 代码安全 SBOM SBOM最基础元素

软件测试 | 测试开发 | app自动化测试之Appium 原理 与 JsonWP 协议分析

测吧(北京)科技有限公司

json

2022年无糖茶饮料发展洞察分析

易观分析

无糖茶 行业洞察

基于 LowCodeEngine 的调试能力建设与实践

阿里巴巴终端技术

前端 低代码

如何应对突发的流量激增和服务器过载问题

NGINX开源社区

nginx 流量控制 高速缓存

node在大前端中的应用场景

达摩

nodejs

前端高频面试题(四)(附答案)

helloworld1024fd

JavaScript 前端

Java培训需要多长时间

小谷哥

前端高频面试题(三)(附答案)

helloworld1024fd

JavaScript 前端

UI设计培训班出来后找工作吗?

小谷哥

开源公开课丨ChengYing安装原理剖析

袋鼠云数栈

5 个 JavaScript 写法小技巧分享

掘金安东尼

JavaScript 前端 8月月更

开源治理:安全的关键

SEAL安全

开源 开源文化 开源安全 开源安全与治理

长安链p2p-Liquid学习笔记

长安链

数字藏品系统开发:详细功能介绍

开源直播系统源码

NFT 数字藏品 数字藏品系统软件开发 NFT数字藏品系统

麦聪软件为云上客户提供DaaS服务,入驻国内Top3云市场

雨果

公有云私有云 DaaS数据即服务

Airbnb支付平台如何进行异常检测_语言 & 开发_侠天_InfoQ精选文章