点击这里可以发送分享哦!

找更多的资料吗?点我立即搜索!!
查看: 11355|回复: 19
打印 上一主题 下一主题

三方公司是这么进行风险控制的,风控、路由、运营计算方法以及相关代码

[复制链接]
跳转到指定楼层
楼主
发表于 2016-1-13 14:43:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 escaflowne1985 于 2016-1-13 14:47 编辑

      本人做支付行业时间不长,所学的东西都是些皮毛,但是能学以致用。
      希望我的文章能够帮助到大家。本来想着分3个部分,有很多朋友问我我还是一次性写出来给大家分享一下。
      这个需要运用到数据库的一些相关的技巧,我不是专业的数据维护人员,仅仅学了1周不到的时间(我去支付公司最开始的1个星期),可能有些命令让专业的人士看了会见笑,毕竟水平有限。
当年也是苦逼党1天看100万行交易数据,但命中率80%以上。不过这些工作程序化之后每天只需要1到2个小时所有的风险数据都能独立完成并加入报告模板,每天3个小时做几个人的工作轻轻松松。

言归正传
总体分为几大类反洗钱、二清商户、如何控制防止拒付、违反交易时间、伪卡测试商户、报表查询、路由规则、计算运营成本、统计类、其他总计10个板块

目录:









1. 反洗钱
这个是每个支付工都需要有的风控,有的支付公司的业务人员会告诉商户刷卡金额高于XXX就会被调单冻结,其实系统里是这样实现的。
首先是SQL命令
Select 商户编号 from 交易列表
Where 交易金额>=XXX
每日的日终即每天24时支付公司生成结算单,在数据库中跑交易,然后将交易列表中交易金额大于或等于XXX金额的交易统一拉出来的商户编号制表,然后再次日进行结算的时候将这些交易进行冻结结算,在系统里就是一个if和else的关系。
同样搜索反洗钱的商户也是规定超过某金额交易被列为反洗钱检查目标。
2. 二清商户筛选
当初我做风控报告的时候列举了一些情况:
1)身份证查姓名数量
select count(*) as [2姓名] from
(select distinct 总表.法人姓名,COUNT(b)as 次数2
from 总表group by a havingCOUNT(*)=2)a
select count(*) as [3姓名] from
(select distinct 总表.法人姓名,COUNT(b)as 次数3
from 总表group by a havingCOUNT(*)=3)b
select count(*) as [4姓名] from
(select distinct 总表.法人姓名,COUNT(b)as 次数4
from 总表group by a havingCOUNT(*)=4)c
select count(*) as [5姓名] from
(select distinct 总表.法人姓名,COUNT(b)as 次数5
from 总表group by a havingCOUNT(*)>=4)d
       显示的结果为该法人身份证姓名出现的次数对应的表格
2)身份证反查代理商
select distinct 总表.法人身份证号,总表.代理商名称
from 总表,(select 总表.a as 身份证,COUNT(b)as 次数from 总表
group by a havingCOUNT(*)>8)abc
where 总表.法人身份证号 likereplace (abc.身份证,' ' ,'_')
      显示的结果为该身份证或类似身份证出现次数8的代理名称
3)身份证排查报表
这个东西自己研究吧当时因为函数的问题头疼死了,也属于一点小小的隐私,因为咨询过好多同行(非风控)写代码的人士,很多写了之后反推结果都不是太理想,最后自己写的一个准确度100%也验证了好久,就不放出来了。
大概思路就是一张身份证不可能有俩名字。
4)营业执照查名称和数量
    原理同3
5)营业执照反查代理商
    原理同2
6)营业执照排查报表
原理同3
3. 如何防止拒付
针对拒付几个思路就不在这里说了,各家支付公司都有银联200条风控规则的明细。有的同学自己学习一下。
一般列举如下的情况作为拒付分析条件因素,综合一下3个表格以及对应的路由规则进行逻辑相应的逻辑判断进行筛选有拒付可能的商户,所谓的参数等等因素最终关联筛选的命中率。按照目前的情况判断命中率最高的时候有83%以上。
1)单当日同一卡在多商户交易数量和金额
SELECT [カード],count(distinct [機号])as [機号],SUM([金額])as 总额,
       Stuff((SELECT','+Convert(varchar(14),[機号])
                FROM [総表] AS b
               WHERE b.[カード] = a.[カード
                 FOR XMLPATH('')),1,1,'') [機号
  FROM (SELECT DISTINCT * FROM[総表]) AS a
  group by [カード
2)N分钟内在X个以上户交易的卡号
select *  FROM  [総表]  t1
   CROSS APPLY (SELECT COUNT(DISTINCT [機号]) 回数
                  FROM [総表]  t2
                 WHERE t2.卡号 = t1.卡号
  AND t2.[時間] BETWEEN DATEADD(minute,-5,t1.[時間])
   AND DATEADD(minute,5,t1.[時間])) s
         WHERE s.回数 > 1
3)筛选非根据MCC非正常时间消费的大额交易
SELECT a.[機号],a.[全部],ISNULL(b.[異常な時間帯],0) [異常な時間帯],
   Convert(varchar(6),Convert(decimal(6,2),
    100.0*ISNULL(b.[異常な時間帯],0)/a.[全部] ) )+'%' [パーセント
      FROM (select [機号],count(*) as [全部]from [総表
              group by [機号] ) a
LEFT JOIN ( select [機号],count(*) as [異常な時間帯]from [総表
      where Convert(decimal(20,10),[総表].[金额])>=10000
         and datepart(hh,[時間])>=20
           group by [機号]) b
       ON a.[機号] = b.[機号
4.伪卡测试商户筛选
     一般疑似伪卡测试商户拥有几个特点密码错,交易频率大,金额大等等,这些都在银联相关规定中都有讲。根据不同的参数设计相应的方案针对这些商户,我用了半年的时间每日命中率从30%45%50%75%85%的最高峰值,不仅为公司避免的直接经济损失,并且根据CPP,POC等信息得到对应的信息对已知信息进行相关分析。从命中率来看我自己编辑一套风险商户评分体系,控制用半年的时间控制拆解不同的参数,并根据客户、事后处置等部门进行总结逐步提高命中率。这套编码太长了就不发在这里了有需要的童鞋可以留言,我只说下几个总体的思路。
1)查询成功、失败占比
select distinct a.[機号],a.[調査成功回数],a.[回数],a.[パーセンテージ],[総表].[代理
from [総表],
(select [機号],sum([調査成功回数]) as [調査成功回数], sum([回数]) as [回数], 100*sum([調査成功回数])/(sum([回数]))as [パーセンテージ]
from ( select [機号],count(*) as [調査成功回数],0 as [回数
  from [総表
  where [タイプ]='查余额'
  and 交易状态='成功'
  group by [機号
union all
  select [機号],0 as '[調査成功回数]',count(*) as '[回数]'
  from [総表
  where [タイプ]='查余额' OR [タイプ]='消费'
  group by [機号
) a group by [機号])a
where a.[機号]=[総表].[機号
and [パーセンテージ]>80
and [調査成功回数]>3
2)查询消费行为数据
SELECT  *  FROM [総表] as T1
WHERE T1. [タイプ]='查余额' AND EXISTS(SELECT 1FROM [総表] T2
    WHERE T1.卡号=T2.卡号 AND T2. [タイプ]='消费'
    AND T1. [時間]<T2. [時間] AND T1. [時間]<=DATEADD(MINUTE,5,T2. [時間]))
    order by 商户号
3)同卡不同户交易间隔
原理同3-2
4)消费成功、失败占比
原理同1
5)非营业时间数据统计
原理同3-3
6)交易量突增测试
DECLARE @value float
DECLARE @rate float
SET @value = 100
SET @rate = 1000
SELECT *
  FROM [2015-3]
WHERE [金額] >= @value * @rate
ORDER BY [機号], [金額
7)消费递减原则
WITH /*
[総表]*/
c1 AS (
    SELECT *,
ROW_NUMBER() OVER(PARTITION BY [カード] ORDER BY [時間]) rn
      FROM [総表
)
,c2 AS (SELECT t1.*,
      SIGN(cast(t2.[金額] as float)-cast(t1.[金額] as float))  change
      FROM c1 t1
      JOIN c1 t2
      ON t2.卡号 = t1.卡号
      AND t2.rn = t1.rn + 1
      WHERE t1.rn = 1
     UNION ALL
    SELECT t2.*,
   CASE SIGN(cast(t2. [金額] as float)-cast(t1. [金額] as float))
                WHEN -1 THEN-1
                WHEN 1 THEN 1
                WHEN 0 THEN t1.change
      END change
      FROM c2 t1
      JOIN c1 t2
        ON t2.卡号 = t1.卡号
       AND t2.rn = t1.rn + 1)
    SELECT [金額], [カード], [機号], [金額
      FROM c2
     WHERE change = -1
  ORDER BY [カード],rn
8)同卡拆单
原理同3-2
以上这些表格日交易部是很大的情况用EXCEL都可以解决,如果想统计百万行的数据,只用依托数据库。
5报表查询、路由规则、计算运营成本、统计类
这部分东西属于支付公司的核心类文件,尤其是路由规则,可以看见交易报表的童鞋只要仔细观察研究一下就可以看出来路由规则是什么样子的,简单来说就是我们说的跳码。掌握上述技巧之后这些已经很简单了,其他有不明白的可以进行跟帖交流,或者留下你的联系方式和问题回进行解答。

评分

参与人数 1贝壳 +8 收起 理由
刚子 + 8 好主题

查看全部评分

2楼
发表于 2016-1-13 17:39:06 | 只看该作者
不错的技术普及。
回复

使用道具 举报

3楼
发表于 2016-1-13 17:39:08 | 只看该作者
不错的技术普及。
回复

使用道具 举报

4楼
发表于 2016-1-14 08:13:50 | 只看该作者
阅读知悉!
回复

使用道具 举报

5
发表于 2016-1-14 09:27:32 | 只看该作者
小伙子不错
回复

使用道具 举报

6
发表于 2016-1-14 09:28:43 | 只看该作者
风险控制
回复

使用道具 举报

7
发表于 2016-1-14 10:38:12 | 只看该作者
非常棒!
回复

使用道具 举报

8
发表于 2016-1-14 14:31:35 | 只看该作者
三方公司是这么进行风险控制的,风控、路由、运营计算方法以及相关代码
回复

使用道具 举报

9
发表于 2016-1-16 22:43:41 | 只看该作者
想知道三方公司的风险数据是怎么计算出来的么?进来看
回复

使用道具 举报

10
发表于 2016-1-17 18:16:45 | 只看该作者
三方公司是这么进行风险控制的,风控、路由、运营计算方法以及相关代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright@支付产业网   |   京ICP备17067647号-3   |   联系我们
返回顶部