利用深度学习解决直播支付风控

标签: 利用 深度学习 直播 | 发表时间:2017-02-09 17:05 | 作者:
出处:http://2014.54chen.com/

以下内容由 [五四陈科学院]提供

前言

在直播软件中,典型的过程是A用户充值,送花给B用户,B用户提现。

正是有这样一条变现的道路,无数盗刷、退款、36技术的黑产人盯上了直播,报道见到映客的损失一度到了300万人民币(本文价值至少300万了:P)。外链 https://www.douban.com/group/topic/89441680/

本文介绍利用keras+tensorflow,快速完成一个神经网络,从工程角度看深度学习带来的实际作用。

安装

1.先升级pip

   chenzhen$ pip install --upgrade pip

2.安装keras

   chenzhen$ pip install keras
...
installing collected packages: numpy, scipy, six, theano, pyyaml, keras
Successfully installed keras-1.2.1 numpy-1.12.0 pyyaml-3.12 scipy-0.18.1 six-1.10.0 theano-0.8.2

3.安装tensorflow

   chenzhen$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0rc2-py2-none-any.whl
chenzhen$ pip install --upgrade $TF_BINARY_URL
...
Installing collected packages: funcsigs, pbr, mock, wheel, pyparsing, packaging, appdirs, setuptools, protobuf, tensorflow
  Found existing installation: wheel 0.24.0
    Uninstalling wheel-0.24.0:
      Successfully uninstalled wheel-0.24.0
  Found existing installation: setuptools 18.0.1
    Uninstalling setuptools-18.0.1:
      Successfully uninstalled setuptools-18.0.1
Successfully installed appdirs-1.4.0 funcsigs-1.0.2 mock-2.0.0 packaging-16.8 pbr-1.10.0 protobuf-3.2.0 pyparsing-2.1.10 setuptools-34.1.1 tensorflow-1.0.0rc2 wheel-0.29.0

4.检查安装是否成功

   chenzhen$ python -c "import keras; print keras.__version__"
Using TensorFlow backend.
1.2.1

5.检查配置是否正确

   chenzhen$ cat ~/.keras/keras.json
{
    "image_dim_ordering": "tf", 
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "backend": "tensorflow"
}

6.安装h5py 用来保存权重数据

   chenzhen$ pip install h5py
...
Installing collected packages: h5py
Successfully installed h5py-2.6.0

7.安装 scikit-learn 用来写代码自动计算最优超参

   chenzhen$ pip install scikit-learn
...
Installing collected packages: scikit-learn
Successfully installed scikit-learn-0.18.1

8.安装hyperas 用来自动计算最优超参

   pip install hyperas

准备数据

首先拿线上两天的数据,一天用来训练,一天用来测试。

数据都是csv的,根据过去的经验,一个用户给另一个用户刷钱,能拿到的数据项有:

1.是否白名单 2.是否签约 3.粉丝数量 4.是否入库 5.播放次数 6.播放时长 7.充值总次数 8.关注数量 等8个数据

所有数据均为数字,再在9位上加上0表示正常1表示有问题的用户(有问题的用户是通过之前不正常的充值靠人肉挑的)。

准备模型

   chenzhen$ cat deep.py 
from keras.models import Sequential
from keras.layers import Dense
import numpy
dataset = numpy.loadtxt("0207.csv", delimiter=",")
X = dataset[:,0:8]
Y = dataset[:,8]
dataset2 = numpy.loadtxt("0208.csv", delimiter=",")
Z = dataset2[:,0:8]
Q = dataset2[:,8]

# 输入8个参数,隐藏层12个神经元,先用relu激活,输出用sigmoid激活
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# loss用mse 优化用Adamax  准确率衡量
model.compile(loss='mse', optimizer='Adamax', metrics=['accuracy'])

# 训练100次,每次取60行
history = model.fit(X, Y, nb_epoch=100, batch_size=60)

# 测试数据
loss, accuracy = model.evaluate(Z, Q)
print("\nLoss: %.2f, Accuracy: %.2f%%" % (loss, accuracy*100))

# 保存下来训练好的模型供线上使用
# serialize model to JSON
model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("model.h5")
print("Saved model to disk")

使用模型

   chenzhen$ cat run.py 
from keras.models import Sequential
from keras.layers import Dense
from keras.models import model_from_json
import numpy

dataset2 = numpy.loadtxt("0208.csv", delimiter=",")
Z = dataset2[:,0:8]
Q = dataset2[:,8]
# load json and create model
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# load weights into new model
loaded_model.load_weights("model.h5")
print("Loaded model from disk")
# test data
loaded_model.compile(loss='mse', optimizer='Adamax', metrics=['accuracy'])
score = loaded_model.evaluate(Z, Q, verbose=0)
print "for test %s: %.2f%%" % (loaded_model.metrics_names[1], score[1]*100)

# prediction probabilities里有预测的结果,需要启动一个简单的server对外服务即可。
probabilities = loaded_model.predict(Z)
predictions = [float(round(x)) for x in probabilities]
accuracy = numpy.mean(predictions == Q)
print("Prediction Accuracy: %.2f%%" % (accuracy*100))

超参调优

前面讲了工程使用的步骤,里面的参数都是随便写的,准确率大约60%,现在来讲如何让预测更加准确。

test1是认好训练50次每次10条效果最好。

   chenzhen$ python test1.py
Best: 0.696000 using {'nb_epoch': 50, 'batch_size': 10}

test2确认好优化器使用Adam效果最好。

   chenzhen$ python test1.py
Best: 0.686000 using {'optimizer': 'Adam'}

test3是优化器使用SGD时,确认里面的两个参数。

   chenzhen$ python test3.py
Best: 0.654000 using {'learn_rate': 0.001, 'momentum': 0.8}

test4是初化类型。

test5是激活函数类型。

test6是dropout层的参数。

test7是隐藏层神经元数量确定。

相关的python代码见后。

Hyperas超参调优

上面一种调优办法有点麻烦,要一个一个试。

Hyperas可以一次性完成。

   chenzhen$ python testh.py
Evalutation of best performing model:
192/200 [===========================>..] - ETA: 0s[0.35499999999999998, 0.64500000000000002]

Hyperas的执行结果直接保存了model,简单粗暴。代码见后。

后记

前面的模型,都比较简单,只定义了两三层,输入8个参数输出1个参数,然后有15个神经元的隐藏层,在testh.py里的调整参数时,增加了一些Activation层。

要在工程上使用,还得上到分布式tensorflow上,进行更多的训练,以达到测试集的准确率更高。

然后将保存下来的model,使用run.py里的逻辑,做成线上server,提供预测判断服务。

预测的同时,要提供人工抽检反复训练,将判断错和判断漏的,都加入到训练的过程中去,做成定时过程,才能满足需要。

另外不得不提的一点:将输入的数字归一化到0-1之间,对BPNN网络的训练效率会大大提升。

相关代码

上述所有代码均在 https://github.com/54chen/deep


想快点找到作者也可以到Twitter上留言: @54chen
或者你懒得带梯子上墙,请到新浪微博: @54chen

相关 [利用 深度学习 直播] 推荐:

利用深度学习解决直播支付风控

- - 五四陈科学院
以下内容由 [五四陈科学院]提供. 在直播软件中,典型的过程是A用户充值,送花给B用户,B用户提现. 正是有这样一条变现的道路,无数盗刷、退款、36技术的黑产人盯上了直播,报道见到映客的损失一度到了300万人民币(本文价值至少300万了:P). 外链 https://www.douban.com/group/topic/89441680/.

为了解决弹幕喷子,直播平台Twitch研发了一个深度学习系统

- - TECH2IPO/创见
从电子邮件到论坛,从论坛到微博,再从微博到现在的视频直播. 当人们在网上发言的速度越来越接近口语的时候,也就给网络喷子带来了越来越多的便利. 虽然从人类学会说到现在,还没有什么办法能阻止人类之间互相对骂. 但网络空间不比线下,一个人用嘴骂人只能被少数人听到,而在网上却可能影响几千人几万人. 在最新一季的南方公园中,甚至认为网络喷子是川普当选和第三次世界大战以及人类登上火星的主要原因.

厉害了,利用深度学习开发老板探测器(附源码)

- - IT瘾-bigdata
深度学习如果上班的时候想放松一下,或者直说想偷偷懒,看点和工作无关的网页,这时候万一老板突然出现在背后,会不会感到很难堪呢?. 有的浏览器设置了boss按键,手快的人还可以切换屏幕,不过总会显得不自然,而且经常搞的手忙脚乱的. 一个日本程序员决定自己动手,编写一个一劳永逸的办法,我们来看看他是怎么实现的吧~.

深度学习二三事

- - FreeBuf.COM | 关注黑客与极客
我知道博客标题中使用否定词很奇怪,但是前几天有一波讨论正好相应于我正在思考的一些问题. 这一切开始于 Jeff Leek 发表的 一篇有关说明在小样本范围内使用深度学习的文章. 要言之,他认为当样本较小时(生物领域中属于常见现象),带有少许参数的线性模型甚至比带有少量层和隐藏单元的深度网络性能更优.

关于深度学习——Deep Learning

- - 互联网旁观者
转载自: http://blog.csdn.net/abcjennifer/article/details/7826917. Deep Learning是机器学习中一个非常接近AI的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,最近研究了机器学习中一些深度学习的相关知识,本文给出一些很有用的资料和心得.

深度学习的本质探究??

- - ITeye博客
原创 2016-10-07 朱洁 . 标志型事件,阿尔法围棋(AlphaGo)战胜李世石. alphago是一款围棋人工智能程序,由谷歌(Google)旗下DeepMind公司的戴维·西尔弗、艾佳·黄和戴密斯·哈萨比斯与他们的团队开发,这个程序利用“价值网络”去计算局面,用“策略网络”去选择下子. 2015年10月阿尔法围棋以5:0完胜欧洲围棋冠军、职业二段选手樊麾;2016年3月对战世界围棋冠军、职业九段选手李世石,并以4:1的总比分获胜.

深度学习利器:TensorFlow实战

- - 孟飞阳的博客
深度学习及TensorFlow简介. 深度学习目前已经被应用到图像识别,语音识别,自然语言处理,机器翻译等场景并取得了很好的行业应用效果. 至今已有数种深度学习框架,如TensorFlow、Caffe、Theano、Torch、MXNet,这些框架都能够支持深度神经网络、卷积神经网络、深度信念网络和递归神经网络等模型.

深度学习三大框架对比

- -
| 导语 Science is NOT a battle, it is a collaboration. 人工智能的浪潮正席卷全球,诸多词汇时刻萦绕在我们的耳边,如人工智能,机器学习,深度学习等. “人工智能”的概念早在1956年就被提出,顾名思义用计算机来构造复杂的,拥有与人类智慧同样本质特性的机器.

音乐人 Daria Musk 利用 Google+ Hangouts 直播演出视频

- jeff - 谷奥——探寻谷歌的奥秘
独立流行音乐人Daria Musk最近潮流了一把,她和自己的乐队利用Google+的Hangouts视频群聊服务,在自己的工作室里举办了一场小型音乐会的直播. 尽管鉴于Hangouts的限制,只能有10个人观看视频直播,但是咱有山寨的办法突破这个限制,就是10个人里的其中一位拿起自己另外一台电脑上的摄像头,拍摄自己看到的音乐会直播画面,然后在这台新电脑上再组建一个10人的Hangouts视频群聊,这样理论上可以一直接力下去,只不过质量就…….

深度学习大牛Bengio教授在Reddit吐槽

- - 博客园_新闻
     Deep Learning 界的三架马车,目前 Geoffrey Hinton 已被 Google 收编, Yann LeCun 已被 Facebook 收编,还留在学术界的 Yoshua Bengio 最近心情好,在 reddit 上定期回答问题. 我抽取了一些比较有料的观点在下面,希望对大家了解这方面有帮助(再不上船可就晚了).