图论应用-反查工具

今天这篇文章简单介绍,图论在风控中的反查应用。

在风控的日常工作中,经常遇到团伙作案,他们拥有比较多的设备、手机号码、银行卡等。我们通过一些列的反查识别策略,将这些团伙尽可能的抓住。

举个例子,抓到一个欺诈店铺A,我们就可以查找这个设备上使用过的店铺B;通过B查到C,C查到D。。。直至遍历所有店铺。

上图就是这个graph,注意,这应该是个无向图。

在业务中,我们经常通过写一段比较长的代码,查到共用同一设备的店铺,如下面的sql:

select distinct shop_id from pay_order_info d

where device_id in (

select distinct device_id from pay_order_info a

where shop_id = A

)

limit200

这个结果显示,只能通过A查到B,没法查到C和D。

要解决上面的问题,先利用networkx构建全图,然后从graph中查关联的nodes,示例如下(python):

import networkx as nx

G = nx.Graph()

nodes = ['A','B','C','D','E']

edges = [('A','B'),('B','C'),('C','D')]

G.add_nodes_from(nodes)

G.add_edges_from(edges)

def git_antinodes(shop_id):

     list = []

     try:

           list.append(shop_id)

           for i in list:

                 for l in G.neighbors(i):

                           if l not in list:

                                  list.append(l)

            return list

    except Exception, e:

            return  "Not in the graph"

def git_antilinks(shop_id):

      antilinks = []

      try:

            G.neighbors(shop_id)

            antilinks =[e for e in G.edges_iter(git_antinodes(shop_id))]

            return antilinks

      except Exception, e:

            return "Not in the graph"

上面定义了两个函数

git_antinodes:获取关联的店铺

git_antilinks:获取链路

git_antinodes['A']

输出结果:['A', 'B', 'C', 'D']

git_antilinks['A']

输出结果:[('A', 'B'), ('B', 'C'), ('C', 'D')]


好了,上面示例满足基本需求,下面就要把所有的nodes和edges存储下来

这期我们这边的应用在B端,所以一个node是指的一个店铺,edge是共用设备的关系。数据存储在mysql上,nodes的设计和存储比较简单,不在赘述,下面简单说下edges的存储。


左边的存储会有大量的重复,因为A-B之间无指向关系,为了节约存储空间,我这边采用右边的存储方案,edges的伪代码。

for linen in datanode:

    shop_id = linen[0]

    batchSelect ="""

     select  shop_id,count(distinct shop_id)  from risk_cashstore_links_mid d

     where device_id in (

    select distinct device_id from risk_cashstore_links_mid a

      where shop_id = %d

)

group by shop_id

"""% (shop_id)

data = execute(batchSelect)

datalink = fetchmany(data)

listlink = []

batchInsertlink ='''

INSERT INTO cashstore_links (src, target, weight)

VALUES (%s, %s, %s)

ON DUPLICATE KEY UPDATE

target  = VALUES(target),

weight  = VALUES(weight);

'''

src = shop_id

print "src:%d"%  (src)

for linel in datalink:

     if linel[0] <= src:

         continue

         target = linel[0]

         weight = linel[1]

         ell = []

         ell.append(src)

         ell.append(target)

         ell.append(weight)

         listlink.append(ell)

try:

  currcSta.executemany(batchInsertlink,listlink)

  connrcSta.commit()

exceptMySQLdb.Error,e:

  printstr(datetime.datetime.now()) +" Mysql Error %d: %s"% (e.args[0],e.args[1])

  connrcSta.rollback()

这部分是用pyspark完成的。每天的定时任务,全量更新。

上面第二段已经讲过获取相关联的订单,下面就实现一个接口。这边我写了个post的接口,具体代码不讲了,直接上结果。

curl -d 'shop_id=19736647' http://0.0.0.0:5063/cash/cashstoreantishop/list

输出:{"msg": "ok", "code": 0, "data": {"nodes": [19736647, 19737903, 19745957, 20173401], "edges": [[19736647, 19737903], [19737903, 19745957], [19745957, 20173401]]}}(hadoop_env)

反查工具一期,基本完成了,二期就是可视化了,先去学习echarts了,see u next month!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容