文章目录

  • 前言
  • 一、风险用户识别原理
  • 二、步骤以及代码展示
    • 1.用户抽取
    • 2.用户数据基本处理
    • 3.特征工程建立
    • 4.模型与评分卡建立
  • 总结

前言

记一次薅羊毛用户风险评判的机制以及其应用
借用模型为风控贷前评分卡
根据iv,woe值计算区块得分系数以及输出card用以适配不同业务场景
所有敏感信息已做脱敏处理。


一、风险用户识别原理

总有一些用户是想要通过某些作弊手法获取不正当利益的,关于获取方式这里不做披露,只分析如何通过用户行为甄别用户的风险得分以判断是否为高风险用户

二、步骤以及代码展示

1.用户抽取

本人是jupyterlab的忠实用户,比较适合数据分析以及基础建模人员,如果在服务器上运行直接“!”加上sql语句即可提取数据进行分析以及建模

!hive -e "select * from xx.xxxx where dt = xxxxx and xxx<>xxx" > ./data/用户画像/table1.txt
df1 = pd.read_table('table1.csv',sep=',')

jupyterlab的配置教程如下
jupyterlab小白配置

2.用户数据基本处理

# 列举几个常用的
df1 = df1.drop_duplicates(['id','child_id'])
df1.fillna(0)
df1['id'] = df1['id'].astype('object')

3.特征工程建立

特征工程建立分很多种,有线下预建立然后匹配,有线上直接生成工程
该模型还在优化中,暂拿以下举例:
1.用户薅羊毛一般在拉新上做猫腻,所以就可以看该用户短时间的最短邀请间隔作为一个特征

# 先转化为时间格式
df1['invitetime'] = pd.to_datetime(df1['invitetime'])
# 再按照时间排序
df1= df1.sort_values('invitetime')
# 转化为方便计算的列表
timePoints = df1[df1['id']=='123123]['createtime'].tolist()
# 撰写函数类
class Solution:def findMinDifference(self, timePoints) -> int:d = [][bisect.insort(d,(c-timePoints[0]).seconds) for c in timePoints]
#         print(d[-1],d[0])
#         d[-1] += d[0]return min(d[i] - d[i - 1] for i in range(1, len(d)))
print("该名用户123123的最短邀请间隔为:",Solution().findMinDifference(timePoints))
该名用户的最短邀请间隔为: 12

这里我们精细为秒,毕竟有些黑产机刷嘛
然后就可以将类放到列上逐步执行

list1 = []
for i in df1['id'].tolist():df_temp = df1['id']==itimePoints = df_temp['invitetime'].tolist()list1.append(Solution().findMinDifference(timePoints))
df1 = pd.concat([df1,pd.DataFrame(data=list1,columns={'shortest_invitetime'}),axis=1])

这样就可以有了每个用户的最小邀请间隔啦
当然了也可以采取这种方法

def shortest_invitetime(i):df_temp = df1['id']==itimePoints = df_temp['invitetime'].tolist()return Solution().findMinDifference(timePoints)
df1['shortest_invitetime'] = df1['invitetime'].apply(lambda x:shortest_invitetime(x))

只不过这样时间复杂度上要慢一点啦
类似的特征构造还有一天邀请用户数,一天低价订单数之类的,由于信息保密性就不一一列举啦

4.模型与评分卡建立

评分卡模型的原理:

  1. 通过将各属性值按分箱处理,计算整体的权重值
  2. 根据权重值结果计算该箱得分,比如邀请次数在1-3次的为10分,4-8的为30分,9次以上的为100分等等
  3. 根据用户所在分箱范围获得每个属性值的子得分,之后将每个属性值的子得分汇合则为该用户的风险得分

模型建立步骤则是:

  1. 使用评分卡函数包分箱,当然也可以自己写函数分箱评分卡分箱建立
  2. 使用分类模型输出预测标签值
  3. 通过标签值以及各属性值所在分区的位置输出用户风险得分

简单拿一个被人上传过的评分卡举例,来源github-scorecardpy

使用gitgub上已导入的库进行分区并计算权重
关于woe和iv的计算可以看权重值计算

import scorecardpy as sc
dt_s = sc.var_filter(df_model[model_columns], y='target')
train, test = sc.split_df(dt_s, 'target').values()
bins = sc.woebin(dt_s, y='target')
train_woe = sc.woebin_ply(train, bins)
test_woe = sc.woebin_ply(test, bins)
y_train = train_woe.loc[:,'target']
X_train = train_woe.loc[:,train_woe.columns != 'target']
y_test = test_woe.loc[:,'target']
X_test = test_woe.loc[:,train_woe.columns != 'target']

用一个简单的逻辑回归试下,自己调参哦

# logistic regression ------
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(penalty='l1', C=0.9, solver='saga', n_jobs=-1)
lr.fit(X_train, y_train)
# lr.coef_
# lr.intercept_

之后就可以有评分卡和预测值啦

# predicted proability
train_pred = lr.predict_proba(X_train)[:,1]
test_pred = lr.predict_proba(X_test)[:,1]
# 评分卡生成
card = sc.scorecard(bins, lr, X_train.columns)
# 得分生成
train_score = sc.scorecard_ply(train, card, print_step=0)
test_score = sc.scorecard_ply(test, card, print_step=0)
score = sc.scorecard_ply(df_model, card, only_total_score = False)

可以简单的看下socre大致范围哦

sns.distplot(score)

总结

关于分数的基准值默认是600,当然了也可以自己设置,分数越高风险越大,当然了这种评分卡只是相当于金融信贷贷前评分卡啦,也就是A卡,我们可以通过这种方式来决定他是否可以进行某种行为奥,例如购买礼品,兑换奖品等

衍生出来的模型还有,用户登录行为风险,用户消费行为风险,既可以拆分为多个模型生成多方面的风险得分,也可以汇总到一起得出用户自身风险得分,主要看业务场景的使用啦

初来乍到,巨佬轻喷

工作整理-用户画像以及风险得分的应用相关推荐

  1. 用户画像:方法论与工程化解决方案

    经过同事座位时,发现他桌上有本<用户画像:方法论与工程化解决方案>,拿起来翻了下,还挺新,2020年2月第一次版印. 顺手牵羊拿来研究研究. 从前言看,这本书的描述是一本从技术.产品和运营 ...

  2. 数据分析方法之用户画像分析!

    01 写在前面 我们经常在淘宝上购物, 作为淘宝方, 他们肯定想知道他的使用用户是什么样的, 是什么样的年龄性别, 城市, 收入, 他的购物品牌偏好, 购物类型, 平时的活跃程度是什么样的, 这样的一 ...

  3. 推荐 :数据分析思维和方法—用户画像分析

    01 写在前面 我们经常在淘宝上购物, 作为淘宝方, 他们肯定想知道他的使用用户是什么样的, 是什么样的年龄性别, 城市, 收入, 他的购物品牌偏好, 购物类型, 平时的活跃程度是什么样的, 这样的一 ...

  4. 用户画像一点心得(待整理)

    要建立用户画像,首先要考虑这三个问题: ·    我的理想客户是谁? ·    我的用户当前行为有什么特征? ·    我的用户有哪些需求或者有什么目标? 那么,什么是用户画像呢? 用户画像就是分析用 ...

  5. 用户画像-参考整理医疗app标签

    人口属性标签 [需求说明]:人口属性标签是用户的基本信息,这些信息往往是用户注册及使用产品时记录的信息,例如:年龄.性别.注册时间.婚姻状况.身高体重等.通过人口属性刻画,到达对用户初步认知的目的. ...

  6. spark 宽表 mysql_扒一扒某厂的新零售用户画像系统大宽表 | 知识整理

    扒一扒某厂如何构建新零售领域中用户画像的大宽表.字数不多,就600字. 用户画像系统的维度表构建 画像大维表是一个画像系统所支持的所有标签的元数据,一个体系完整的画像设计范围广,一般是由很多团队共同构 ...

  7. 看完秒懂大数据用户画像!

    来自:网络 什么是用户画像? 用户画像(User Profile),作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准.快速地分析用户行为习惯.消费习惯等重要信息,提供了足够的数据基础, ...

  8. 【采用】干货请收好:终于有人把用户画像的流程、方法讲明白了

    https://blog.csdn.net/zw0Pi8G5C1x/article/details/83964888 导读:用户画像将产品设计的焦点放在目标用户的动机和行为上,从而避免产品设计人员草率 ...

  9. 用户画像标签维度_神策数据钟秉哲:一文了解用户标签画像,从洞察到突破

    在神策 2020 数据驱动用户大会「精英训练营」现场,神策数据业务咨询师钟秉哲发表了关于<用户标签画像,从洞察到突破>的演讲.(文末附 PPT 下载地址)本文根据其现场演讲整理所得(数据均 ...

最新文章

  1. 经济独立,是你最大的底气
  2. python django vue_Django+Vue.js构建项目
  3. C++11获取double类型的最大最小值
  4. 7个连环问揭开java多线程背后的弯弯绕
  5. SpringMVC集成shrio框架
  6. 【统计学】10个必知必会的统计学问题 (附答案)
  7. 【python实战】爬取起点中文网自制小说阅读器
  8. 【学生个人网页设计作品】使用HMTL制作一个超好看的保护海豚动物网页
  9. jar包太大?手把手教你分析 Maven 依赖,完成瘦身优化!
  10. linux dnf命令安装
  11. 数据结构与算法入门教程(C语言实现版)
  12. Nim游戏入门+SG函数
  13. cesium--绘制多边形polygon
  14. iOS-马甲包审核以及常见审核问题
  15. 机器人在gazebo中使用四轮差速仿真模型时,转向不明显?
  16. 001软件测试基本介绍
  17. Jmter的接口测试提升篇
  18. 无效的m3u8怎么办_求教: 用 ckplayer 网页播放 m3u8 的直播无法播放,是什么问题?...
  19. (1)机器视觉检测的必备知识,要牢记!
  20. 趣谈Python银杏树(初学者程序)

热门文章

  1. 【产品经理交互常用软件】axure软件详细教程与学习指南
  2. 中国电子学会-全国青少年软件编程等级考试标准 (Python 语言 1-6 级)
  3. linux 网卡强制千兆,LINUX网卡(设置千兆网卡速度及模式)
  4. mysql 存储订单,MySQL使用存储过程生成订单编号
  5. Service 莫名启动解决方案
  6. 通过sql查询自己经纬度周围几公里内的数据
  7. Python|送给朋友的生日祝福
  8. html5获取微信昵称,小程序 web-view 内嵌的 h5 调用微信头像和昵称
  9. 爆火微信公众号自定义早安推送,爱她就给她推送
  10. 图文并茂解释开源许可证 GPL、BSD、MIT、Mozilla、Apache和LGPL的区别?