一、业务场景
怎么做恶意刷单检测?
分类问题,用机器学习方法建模解决,可以构造以下特征:
- 商家特征:商家历史销量、信用、产品类别、发货快递公司等
- 用户行为特征:用户信用、下单量、转化率、下单路径、浏览店铺行为、支付账号
- 环境特征(主要是避免机器刷单):地区、IP、手机型号等
- 异常检测:IP 地址经常变动、经常清空 Cookie 信息、账号近期交易成功率上升等
- 评论文本检测:刷单的评论文本可能套路较为一致,计算与已标注评论文本的相似度作为特征
- 图片相似度检测:同理,刷单可能重复利用图片进行评论
你理解的分析师的工作是怎样的?价值是什么?
思考角度:业务、算法、工具各占多少比重。
常用的数据分析工具有 Excel + SQL + Python/R,有的公司要求会一种就可以,有的要求都会,根据应聘职位不同自由选择:
| 工具 | 关键技能 |
|---|---|
| Excel | 数据透视表、VLOOKUP、常用函数、基础图表 |
| SQL | 存储过程、分组、聚合、排序 |
| Python / R | 分类算法(逻辑回归、贝叶斯、决策树、随机森林)、回归算法(线性回归)、聚类算法(K-Means) |
二、数据存储
DB — 数据库(Database)
一般指 OLTP(在线事务)数据库,用来支持生产的,比如超市的买卖系统。DB 保留的是数据信息的最新状态,只有一个状态。
比喻
每天早上起床洗脸照镜子,看到的就是当时的状态,至于之前每天的状态,不会出现在你眼前——这个”眼前”就是 DB。
DW — 数据仓库(Data Warehouse)
保存的是 DB 中不同时间点的状态,便于做统计分析。
比喻
每天早上洗完脸照镜子时都拍一张照片,天天这样,这些照片放入到一个相册中,之后就可以查看每一天的状态了——这个相册就是数据仓库。
DB vs DW 区别
- 简单理解:数据仓库是多个数据库以一种方式组织起来
- 数据库强调范式,尽可能减少冗余
- 数据仓库强调查询分析的速度,优化读取操作,主要目的是快速做大量数据的查询
- 数据仓库定期写入新数据,但不覆盖原有数据,而是给数据加上时间戳标签
- 数据库采用行存储,数据仓库一般采用列存储
- 数据仓库的特征是面向主题、集成、相对稳定、反映历史变化,存储历史数据;数据库是面向事务的,存储在线交易数据
- 数据仓库的两个基本元素是维表和事实表——维是看待问题的角度(比如时间、部门等),事实表放着要查询的数据
ETL — 抽取-转换-加载(Extraction-Transformation-Loading)
用于完成 DB 到 DW 的数据转存:
- 抽取(E):将 DB 中某一个时间点的状态抽取出来
- 转换(T):根据 DW 的存储模型要求,转换数据格式
- 加载(L):将转换后的数据加载到 DW 中
为什么需要转换?
DB 的模型是 ER 模型,遵从范式化设计原则;DW 的数据模型是雪花型结构或星型结构,用的是面向主题、面向问题的设计思路。两者模型结构不同,所以需要进行转换。
三、Python 数据分析
生态全景
推荐平台:Anaconda(集成了大量 Python 科学计算第三方库)
| 库 | 定位 | 核心功能 |
|---|---|---|
| NumPy | 数据结构基础 | ndarray、多维操作、线性代数 |
| Pandas | 基础数据分析套件(基于 NumPy) | DataFrame、数据清洗、分组聚合 |
| Matplotlib | 可视化套件 | 绑图库,图表绑制 |
| SciPy | 科学计算 | 矩阵分析、信号分析、数理分析 |
| Scikit-learn | 数据分析建模(基于 NumPy + SciPy + Matplotlib) | 回归、降维、分类、聚类 |
| Keras | 深度学习 | 人工神经网络(Keras 3 支持 TensorFlow/JAX/PyTorch 多后端) |
如何对 list 中的 item 进行随机重排?
使用 shuffle() 函数:
import random
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list) # 原地修改NumPy array 比 Python list 的优势
a. NumPy array 比 Python list 更紧凑,存储数据占的空间小,读写速度快。这是由于 Python list 储存的是指向对象(至少需要 16 个字节)的指针(至少 4 个字节);而 array 中储存的是单一变量(比如单精度浮点数为 4 个字节,双精度为 8)
b. array 可以直接使用 vector 和 matrix 类型的处理函数,非常方便
四、机器学习核心概念
如何理解过拟合?
过拟合和欠拟合一样,都是数据挖掘的基本概念。
- 过拟合:数据训练得太好,在实际的测试环境中可能会产生错误,所以适当的剪枝对数据挖掘算法来说也很重要
- 欠拟合:机器学习得不充分,数据样本太少,不足以让机器形成自我认知
为什么说朴素贝叶斯是”朴素”的?
朴素贝叶斯是一种简单但极为强大的预测建模算法。之所以称为朴素贝叶斯,是因为它假设每个输入变量是独立的。这是一个强硬的假设,实际情况并不一定,但是这项技术对于绝大部分的复杂问题仍然非常有效。
SVM 最重要的思想是什么?
SVM 计算的过程就是帮我们找到超平面的过程,它有个核心概念叫分类间隔。SVM 的目标就是找出所有分类间隔中最大的那个值对应的超平面。在数学上,这是一个凸优化问题。
根据数据是否线性可分,SVM 分为:
- 硬间隔 SVM — 数据严格线性可分
- 软间隔 SVM — 允许少量误分类
- 非线性 SVM — 通过核函数映射到高维空间
K-Means 和 KNN 算法的区别是什么?
首先,这两个算法解决的是数据挖掘中的两类问题。K-Means 是聚类算法,KNN 是分类算法。
其次,这两个算法是两种不同的学习方式。K-Means 是非监督学习,不需要事先给出分类标签;而 KNN 是有监督学习,需要我们给出训练数据的分类标识。
最后,K 值的含义不同。K-Means 中的 K 值代表 K 类,KNN 中的 K 值代表 K 个最接近的邻居。