一、说在最前  用户识别,用户分类,精准营销…这是咱们业务人员常常念叨的话。底层逻辑为无论任何营销目的,在营销手段上,越针对某一细化群体,达成目的的概率也就会越大。那今天就来和大家说道说道用户识别/分类的一种方法。

(一)猫捉老鼠

标题中所说的猫和老鼠,不是汤姆and杰瑞,而是公司与黑产的对抗。我们在日常工作中也会有所耳闻和接触。比如平台有一些营销活动,无数黑产就会闻风而来,进行“薅羊毛”行为。

黑产往往有组织,有计划地进行套利,大多企业不会坐以待毙。攻防之间,套路不断演变、战场不断扩大、技术不断升级。本文就是基于黑产中的一个小场景展开了一场“猫捉老鼠”游戏。

(二)分类问题

猫捉老鼠的游戏也需要去识别是像杰瑞一样的“好老鼠”,还是过街被打的“坏老鼠”,这就涉及到分类问题了。最简单,也是最常见的就是"Yes/No"这样的二分类问题。比如:

  • 某个模块被点击的可能性(点/不点)

  • 某个用户买机票的可能性(买/不买)

  • 某个用户是黄牛的可能性(是/不是)

有些问题无法立马得到确切回答,好比求婚时,你不知道得到"Yes"还是"No",这个时候也许可以求助于伟大的统计学了。二、 逻辑回归 

提到二分类问题,经典的逻辑回归(Logistic Regression)就不得不登场了。虽然名字中带“回归”两字,但它解决的并不是回归问题,而是分类问题,且它是基于对某一类别或事件发生的概率进行建模的。比如:被点击/不被点击、会买/不会买、是黄牛/不是黄牛。明白了这一点,各位看官就随我一起来瞅瞅它是如何用概率进行分类的。

(一)线性回归VS逻辑回归

逻辑回归和线性回归在原理上有很多相似之处,对比来看会更加清晰。大多人对线性回归会比较熟悉,由此来引入逻辑回归,也比较易于理解和接受。

1、线性回归

有一组数据,包含两列:重量和尺寸。想探索二者之间的关系,自然建立一个线性回归模型,用重量预测尺寸。具体步骤如下:

(1)获取数据,包含重量和尺寸

(2)建立模型,拟合一条直线

在确定直线时,运用最小二乘法。计算每个点到拟合直线的距离(残差),先平方再求和,然后通过最小化残差平方和,确定直线的斜率和截距。

(3)预测

利用重量和尺寸之间的线性关系,确定重量值之后,就可以预测对应的尺寸的值。

2、逻辑回归

逻辑回归用来预测分类问题,比如是否肥胖。有一组数据,包含两列:重量和是否肥胖。探索二者之间的关系,用重量来预测是否肥胖。

(1)获取数据,包含重量和它所属的类别,即是否肥胖。

(2)建立模型,拟合出一条S型曲线。

逻辑回归拟合的是一条S型曲线,并且曲线在纵轴的取值范围是0到1,代表的是以重量衡量时,属于肥胖的概率。

(3)模型解读,预测

对于A的重量,它属于肥胖的概率比较小,在0.5左右,对于B的重量,它属于肥胖的概率比较大,大约在0.9以上。当知道一个重量时,就能获得对应的属于肥胖的概率。

(二)逻辑回归的基本思想

复杂的算法原理公式在此就不具体展开了,感兴趣的小伙伴可以参考博文http://blog.csdn.net/pakko/article/details/37878837。不感兴趣的小伙伴可以直接跳到案例应用部分。

1、Sigmoid函数

在逻辑回归中,我们需要借助Sigmoid函数来构建似然函数。

2、最大似然估计

上述的小例子仅包含“重量”这一个特征,那当相关特征非常多的时候,我们需要给每个特征乘上一个系数,使用的方法是最大似然估计。

3、梯度下降法

使用梯度下降法获得最优参数,使得预测值和真实值之间的差距最小得到的最优结果。

(三)逻辑回归的用途

(1)寻找主要影响因素:系数绝对值越大,说明该变量越重要。(2)预测:预测在不同的自变量情况下,某事件发生的概率。(3)分类:据概率值大小,进行分类。 三、案例应用

本文开头介绍了猫和老鼠的游戏,接下来将使用LR模型,基于黑产其中的一个小场景——恶意占编进行黑用户的识别。

(一)案例背景

以购买机票为例,用户在任何平台创建订单后呢,平台会去锁定航司处这张票的资源。如果等用户支付后占编,就需要承担创单和支付订单时间差内的价差及库存变化,有高额成本。而支付前占编呢,就会给黑用户可乘之机,恶意占编不付款,而后以更高价格转售或以其他途径进行牟利。航司爸爸发现后就会对平台进行封号、警告、罚款。平台弱小,可怜,无助…

(二)分析过程

那必然不能坐以待毙,任黑产使劲薅,万一被薅秃了可咋整?

于是,机智的捕鼠小分队出动,基于某一真实场景制定了精密的计划,如下图所示。在此主要给大家说道说道策略开发这一趴。

1、样本扩充

目前警长手中只有100个线索,也就是只有100个恶意占编的订单号。线索过少,找不到所有同伙。也就是当数据量达到一定程度后,才能反映出特定的规律,所以首先进行黑订单样本扩充。

(1)黑订单号对应的账号下的其余订单号:通常一个会员账号会多次重复下单;(2)黑订单账号对应的注册手机号作为联系人手机号出现在其他订单中的订单;(3)黑订单账号对应的联系人手机号作为注册手机号出现在其他订单中的订单。2、特征识别

从“预订人”,“乘机人”,“订单”三个维度着手,获取用户的相关基础信息以及行为数据,考虑黑用户与正常用户的行为数据差异,进行特征识别,下图是部分特征。

3、模型建立

(1)特征工程

a)离散型数据处理

会员等级等变量是定类型变量,利用pandas的get_dummies方法,对其进行one-hot编码。

b)连续型数据处理

由于多个特征之间差异较大会造成梯度下降算法收敛速度变慢。因此对连续型变量等进行归一化处理。

(2)具体建模a)划分数据集

将数据集划分为训练集和测试集。

b)训练模型并调参

c)输出特征重要性

在Logistic模型中,输入的特征都对应一个系数,系数绝对值越大,就认为该特征越重要。d)输出模型准确性

经过调参,模型在训练集和测试集的准确率较高,到达80%,故认为模型的输出结果可信度较高。

e)模型应用

根据模型输出结果,对近8000名用户,打上“高度疑似恶意占编用户”,应用于风控系统,将其占编方式设定为“支付后占编”。

 四、讲在最后

分类是我们简化认识,理解世界最常用的方式之一。我们可以一起来探索更多的方法途径,去更好地认识产品,认识用户。没时间解释了,小伙伴们快上车!

发现“在看”和“赞”了吗,戳我试试吧

pandas 根据单号分类_由 “猫捉老鼠”游戏联想的用户分类问题相关推荐

  1. python turtle 画老鼠,python用turtle制作一个猫捉老鼠游戏

    CSDN网友写的猫捉老鼠游戏代码 看着不错 大家借鉴一下 import turtle import time import random def up(): jerry.setheading(90) ...

  2. python画猫和老鼠代码_猫捉老鼠游戏(Python)

    用键盘方向键来控制老鼠,使其在猫的正前方 import turtle import time boxsize=200 caught=False score=0 #定义响应键盘消息的函数 def up( ...

  3. 【181008】VC++猫捉老鼠游戏源代码

    实际上这是VC.NET的源代码,因为在VC++6.0下不能编译,因此编译本程序您需要安装vs2005及以上版本. 本游戏主要是侧重算法和动画生成方面的知识与技能,通过游戏我们一般都能学到很多东西,有空 ...

  4. python猫抓老鼠_利用python如何实现猫捉老鼠小游戏

    python实现猫捉老鼠小游戏 首界面 开始游戏界面 然后键盘操作小老鼠上下左右移动,猫自己去追,当猫追上老鼠则游戏结束 这里用时3.2秒,最后将游戏时长与猫和老鼠都显示在主页面上 下面我把猫与老鼠的 ...

  5. python画猫和老鼠_利用python如何实现猫捉老鼠小游戏

    python实现猫捉老鼠小游戏 首界面 开始游戏界面 然后键盘操作小老鼠上下左右移动,猫自己去追,当猫追上老鼠则游戏结束 这里用时3.2秒,最后将游戏时长与猫和老鼠都显示在主页面上 下面我把猫与老鼠的 ...

  6. 用python画猫和老鼠_利用python如何实现猫捉老鼠小游戏

    python实现猫捉老鼠小游戏 首界面 开始游戏界面 然后键盘操作小老鼠上下左右移动,猫自己去追,当猫追上老鼠则游戏结束 这里用时3.2秒,最后将游戏时长与猫和老鼠都显示在主页面上 下面我把猫与老鼠的 ...

  7. python游戏后端开发_利用python如何实现猫捉老鼠小游戏

    这篇文章我们来讲一下在网站建设中,利用python如何实现猫捉老鼠小游戏.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. python实现猫捉老鼠小游戏 首界面 开始游戏界面 ...

  8. 今天给大家分享使用Scratch做一个猫捉老鼠的游戏!

    公众号会话框中回复:"猫捉老鼠"获取源码,随意打赏作者获取更多资源! Scratch3.0介绍 Scratch融合卡通.动画.音效等多媒体的运用和直观拖拽式的编程方式,生动有趣,可 ...

  9. FZU 1019猫捉老鼠

    A - 猫捉老鼠 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

最新文章

  1. Ubuntu安装deb软件包错误(依赖关系问题)解决
  2. mysql 主机 %_MySQL 开启远程链接(localhost 以外的主机)
  3. Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring
  4. phpst安装memcache扩展_在 Ubuntu/Debian 下安装 PHP7.3 教程
  5. 天才编程女孩敲开支付宝大门!马云:有梦想的孩子了不起!
  6. 图神经网络可解释性Slide:GNNExplainer: Generating Explanations for Graph Neural Networks
  7. 【批量查询IP归属】
  8. U盘数据恢复工具哪个好?
  9. 有道云笔记蒋炜航:敏捷开发的实战经验
  10. 【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell
  11. XlsReadWriteII 版本声明操作要点
  12. ESP32_esp-adf环境搭建
  13. Android模拟发短信,[转载]Android模拟器中模拟GPS、打电话、发短信
  14. Collections.sort()方法为List集合内对象进行排序
  15. 构建完整的API构架与Buddy API使用示例
  16. PHP系统常量及判断某常量是否被定义
  17. MacBook M1 Flutter环境搭建
  18. Python为什么要使用包管理、插件化开发?
  19. 微信小程序自定义图片上传组件
  20. 【python】警告

热门文章

  1. Django---Model操作
  2. 四、spring boot 1.5.4 日志管理
  3. SweetAlert – 替代 Alert 的漂亮的提示效果
  4. NativeScript - JS 构建跨平台的原生 APP
  5. idiom的学习笔记(一)、三栏布局
  6. 从0开始接触html--第一天学习内容总结
  7. mysql explain的使用
  8. SQL 性能不佳的几个原因
  9. Java里String.split需要注意的用法
  10. hdu1053 Entropy hdu2527 Safe Or Unsafe