流失预警模型--实时查询
2014-02-25 13:50
323 查看
本篇主要做的是一个流失预警模型实时查询的一个测试,需求描述:用户名单请求判断是否流失,秒级内返回判断结果。
操作场景如下:
流失预警模型,预测用户是否在未来一段时间内流失(牵涉到流失定义,用户活跃度定义,用户行为时间定义等)建立,用到了用户最近行为特征、行为趋势特征等,最后预测是否流失(1流失,0留存)。在本文的测试之前已经把模型建好。
实验条件:ubuntu13.0432位,mysql,mysqldb,scikit-learn1.4
安装Mysql
sudoapt-getinstallmysql-client-core-5.5
sudoapt-getinstallmysql-server
安装python访问mysql的ODBC
sudoapt-getinstallpython-mysqldb//python操作mysql
登陆mysql创建仓库datamining,创建classification表,上传用户的行为数据,实验中是2844900*24个字段(上传数据的时候,要用mysql--local-infile=1-uroot-p登陆,因为需要从本地上传)
安装scikit-learn1.4
操作场景如下:
流失预警模型,预测用户是否在未来一段时间内流失(牵涉到流失定义,用户活跃度定义,用户行为时间定义等)建立,用到了用户最近行为特征、行为趋势特征等,最后预测是否流失(1流失,0留存)。在本文的测试之前已经把模型建好。
实验条件:ubuntu13.0432位,mysql,mysqldb,scikit-learn1.4
安装Mysql
sudoapt-getinstallmysql-client-core-5.5
sudoapt-getinstallmysql-server
安装python访问mysql的ODBC
sudoapt-getinstallpython-mysqldb//python操作mysql
登陆mysql创建仓库datamining,创建classification表,上传用户的行为数据,实验中是2844900*24个字段(上传数据的时候,要用mysql--local-infile=1-uroot-p登陆,因为需要从本地上传)
安装scikit-learn1.4
sudoapt-getinstallbuild-essentialpython-devpython-numpypython-setuptoolspython-scipylibatlas-devlibatlas3-base
sudoapt-getinstallpython-sklearn
Scikit-learn是用python写的机器学习算法库,里面算法非常多,而且文档清晰而且完整,API的调用接口都很类似,用起来非常方便。
实测测试描述:随机生成一个用户ID,通过ID去mysql查询该ID的行为特征,然后把该ID的行为通过scikit-learn预先生成好的模型测试,最后返回流失概率结果
代码如下
#-*-coding:cp936-*-
fromsklearn.ensembleimportRandomForestClassifier
importcsv_io
importtime,random
fromsklearn.externalsimportjoblib
fromMySQLdbimport*
userNum=1#随机产生用户ID
sample=[str(i)foriinxrange(2844900)]
index=random.sample(sample,userNum)
fw=open('user.txt','w')
fw.writelines('\n'.join(index))
fw.close()
print"测试开始"
#计时
old=time.time()
#加载预先生成好的模型
rf=joblib.load('/home/kobe/datamining/model/dt.pkl')
new=time.time()
time_model=new-old
#查询数据
f=open('user.txt')
index=[i.strip()foriinf.readlines()]
index='\''+'\',\''.join(index)+'\''
command="select*fromclassificationwhereyyuidin(%s);"%(index)
cn=Connection('localhost','root','*******','datamining')#ip地址,用户名,密码,仓库名字
cur=cn.cursor()
cur.execute(command)#执行命令
rows=cur.fetchall()#取回结果
test=[i[1:]foriinrows]
cur.close()
cn.close
old=time.time()
time_file=old-new
#通过测试
predicted_probs=rf.predict_proba(test)
predicted_probs=["%f"%x[1]forxinpredicted_probs]
new=time.time()
time_result=new-old
#把流失概率写回文件
csv_io.write_delimited_file("result.csv",predicted_probs)
time_write=time.time()-new
#完成
print"Done!"
print"加载模型",time_model
print"查询数据",time_file
print"模型测试",time_result
print"写入结果",time_write
print"总耗时",time_model+time_file+time_result+time_write
最后测试了3种算法,算法都使用了默认参数,结果如下,单位是秒
加载模型时间 | 数据查询时间 | 模型测试时间 | 写入结果时间 | 前4项总时间 | |
决策树算法 | 0.086 | 0.074 | 0.0096 | 0.000590 | 0.1710 |
随机森林 | 0.134 | 0.092 | 0.01303 | 0.000595 | 0.2397 |
逻辑回归 | 0.104 | 0.087 | 0.0118 | 0.0006 | 0.2034 |
总结:从表格结果上看主要的时间是耗在模型加载跟数据查询上。其中模型加载时间耗时占一半(优化方向:1)把模型一直cache到内存里,有没有什么方案实现?2)换别的编程语言。。),数据查询这一块,测试中在没有对classification表建索引的情况下也能有这个效率有点让我惊讶。当然生产环境下的实时不仅需要考虑这些,还要考虑用户请求的并发量,用户行为实时采集和计算(牵涉到流失计算那块),前端传ID的时间,结果返回时间等,有这方面经验的朋友请多拍拍砖,指教下。
相关文章推荐
- Solr实时查询模型
- 金融风控-->客户流失预警模型-->特征工程
- 金融风控-->客户流失预警模型-->金融数据分析
- 金融风控-->客户流失预警模型-->GBDT建模
- 金融风控-->客户流失预警模型-->神经网络建模
- [Programming Entity Framework] 第3章 查询实体数据模型(EDM)(二)
- 零代码如何打造自己的实时监控预警系统
- Django入门-5:模型的基本使用4-模型查询
- oracle 实时查询最耗CPU资源的SQL语句
- SL651-2014 《水文监测数据通信规约》 中心站查询遥测站实时数据详解
- Oracle实时运维常用查询语句
- 实时日志收集-查询-分析系统(Flume+ElasticSearch+Kibana)
- 基于图模型并支持查询语言的新型元数据管理方法
- 浅谈云巴实时通信的编程模型
- MOSS Search学习记录(十):MOSS Visual How To使用SharePoint Server 2007搜索对象模型编程创建搜索查询
- 一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询
- 基于hadoop MR+berkeley DB实现的十亿级数据的秒级部署和实时查询的解决方案
- Lucene4.2源码解析之fdt和fdx文件的读写(续)——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压
- ThinkPHP实现二级嵌套评论的查询,利用视图模型
- 梳理一下流式处理、实时计算、Add-hoc、离线计算、实时查询等区别