查看原文
其他

R语言学习应用_客户APP注册刷单展示

2017-05-18 okajun R语言中文社区

      感谢你长得这么好看还关注我的博客,祝你天天开心,每天都是棒棒哒~

      首先说明一下业务场景:公司有一款理财App产品(下文简称"捞小宝"),我们希望有更多的客户使用捞小宝来投资。使用手册:注册→认证→绑卡→投资,对销售的考核之一就是客户的注册量,恩,业务流程报告完毕!为了完成考核,我们的销售人员真是太机智了,(深深的佩服一万次,哈哈),各种刷单手段层不出穷,作为英明神武的数据管理部的一员,自然要监控每日的数据,找出异常。

       可以从系统中获取每日的注册客户数据(说明一下:数据从网页下载),字段有客户编号,客户姓名,身份证号,手机号,注册时间,认证时间,上级邀请码等信息,目前我想到的分析切入点有:

  1. 根据身份证号获取客户的户籍、年龄、性别信息,看是否有异常(例如:一个客户经理开发的客户,理论上应该大部分都是所在地区的客户);

  2. 根据手机号获取号码归属地;

  3. 根据注册时间看分布(应该在白天工作时段开发的客户,像凌晨时段有大量客户注册则视为异常);

  4. 根据认证时间(客户注册后认证,需要一定的时间间隔,如果客户在极短的时间内完成认证,则视为异常);

  5. 上级邀请码(是一级客户邀请的还是销售人员直接邀请的,没人邀请的数量是否有规律):

  6. 注册来源(是wap端、web端还是App?如果刷单,应该使用的是一种端口)

  7. ……欢迎补充,智商情商双低的我只能想这么多了~

        好了,今天就从注册时间这一个字段来分析吧!

        注册时间的格式为datetime,即年月日 时分秒的格式,理论情况下:邀请客户注册捞小宝,注册时间应该大部分分布在白天工作时段,像一个小时内集中注册或凌晨注册的情况应该是异常的,下面我们来找出有异常的客户经理,看看他们的客户注册时间的分布情况。

       思路:如果客户集中注册,则两条记录的时间间隔会很小,现在找出这种情况较多的销售(凌晨大量注册的情况暂不考虑) 。

       做法:每天从网页上下载昨日的注册记录,累计到Excel文件中,然后通过SSIS包导入到自己搭建的本机SQL Server数据库中(这个步骤是工作模式所限,不能直接使用后台数据库,我的内心早已崩溃了~),好了数据有了,开始找“问题销售”~

      Step1:查找 一分钟内有两个客户注册的情况次数,得到销售工号、姓名,客户数

/*一分钟内有两个客户注册的情况次数*/
;with temp_tb as
(
   select rn=ROW_NUMBER()over(order by 归属工号,注册时间),归属工号,归属姓名,注册时间
   from FactLcbRegist
where 归属工号 <> '-'
)
select 归属工号,归属姓名 , count(1) 一分钟内有两个客户注册的情况次数 from
(
 select t.归属工号,t.归属姓名 , datediff(mi,t.注册时间,(select top 1 注册时间 from temp_tb where 注册时间 > t.注册时间 and 归属工号 = t.归属工号 order by 注册时间)) dt from temp_tb t
) m
where dt <= 1
group by 归属工号,归属姓名
order by 一分钟内有两个客户注册的情况次数 desc
go

结果如下:

    Step2:用步骤一中的某个工号,查看期每日注册客户的时间分布(0~24点)

#看可疑客户经理刷单的客户注册时间分布

#设置工作路径
setwd("E:\\Personal Document\\Rfile\\201700515_客户注册时间分布")
#install.packages("RODBC")
library(RODBC)
#链接数据库
channel<-odbcConnect("MySQLServer")
mydata<-sqlQuery(channel,"SELECT 注册时间 FROM [FactLcbRegist]
                WHERE 归属工号 = '00280659'"
)
head(mydata)
#数据转化,做图用
mydata$注册时间 <- as.POSIXct(mydata$注册时间)
mydata$date <- format(mydata$注册时间,"%Y-%m-%d")
mydata$time <- as.numeric(difftime(mydata$注册时间,mydata$date,units = "hours"))
#做小提琴图
ggplot(mydata,aes(x=date,y=time,fill=date))+
 geom_violin()+
 geom_jitter()+
 labs(title="注册时间分布")+
 theme(legend.position="none")+
 scale_y_continuous(breaks=seq(0,24,6))

        查看第一位销售的客户注册时间分布(恩,他最可疑),做图:


      可以看出他5月1日至5月6日每天都在刷单,要不是我们警告,估计5月7日还会继续刷刷刷~,可疑点:1、客户注册时间太集中了,而且只集中在某个时间段;2、2号、3号和6号的客户都是24:00左右注册的, 难道他在半夜开发客户?!


     这位销售是偶尔小刷几单,不多刷,也不经常刷,应该是能达到考核就OK的心态了~

        以上是我的思路及做法,还请各位大神不吝赐教,怎样从更多的角度去分析,怎样更自动化发现并展示异常数据,代码优化或更好的工具推荐,谢谢你这么好看还这么有耐心看完了,给你点赞,为你转身,哈哈~

 


okajun ,R语言中文社区专栏作者

博客:https://ask.hellobi.com/blog/okajun




微信回复关键字即可学习

回复 R              R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存