阿里数据服务P6~P7晋升要点
这是我在2015年高德负责P6晋升评审为团队成员准备的要点,整理下。
1. 数据仓库难点
1.1 分布式OLAP设计与选型
- 传统BI 友盟,Talking Data 启明星
- keylin
- phoniex
- ocean base
- garuda
- drds
- impala
- drill
框架优劣,实现方式,性能对比
1.2 分布式OLAP优势
- 支持ad-hoc
- 上卷,下钻,切片,切块
- 数据端开发迅速
1.3 分布式OLAP 难点
- 海量数据聚合
- 要求RT可用
- 阿里生态系统限制
- 时间紧迫
1.4 分布式OLAP实现
- 分库分表 DRDS
- 数据仓库
- 基本行为
- 离线点击
- 崩溃行为
- 主题域— 数据立方体(Cube)
- 用户分析
- 活跃度
- 渠道专题
1.5 目前缺陷
在没索引的维度较慢
阿里生态圈的喜与优
外网工具丰富
web工作台
运维控制台
可靠工作流
闭门造车,轮子过时
需要多部门协助
1.6 整体工作流
采集 — 收容 — 计算 — 导出 — 存储 — 服务 — 前端
2. 服务演化
2.1 单一应用
所有功能部署一起,ORM 是核心
2.2 垂直应用
拆分应用, MVC 是核心
2.3 分布式服务框架
核心业务抽取复用, RPC
2.4 流动计算框架
提高机器利用率, SOA
3. 挖掘架构
3.1 数据层
3.2 算法层
3.2.1 特征工程:
清洗 :
脏数据 (乱码,机型非法取值)
空缺值(日志记录不规范,经常出现某些平台字段为空)
噪声 (取值非法)
分箱
离群挖掘
回归
集成:
冗余属性 (重复字段,同一字段命名不同)
数值冲突检测( 单位不同,字段长度不同)
变换:
归一化
投影 (PCA)
归约
数据压缩 (空间索引,小波变换,PCA,回归,概率分布模型,粗糙集,采样)
维度规约 特征提取
离散化 值区间
![](http://upload-images.jianshu.io/upload_images/20467-f5f475ea5abed04d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.2.2 分类:
SVM
随机森林
GBDT
神经网络
3.3.3 聚类
基于划分
Kmean
KMeoid
EM
基于密度
DBScan
Optics
基于层次
自顶向下
自底向上
基于栅格
String
WaveCluster
3.3.4 回归
线性回归
逻辑回归
3.3.5 关联
FPGrowth
Aprioi
3.3.6 空间算法
元胞自动机
空间尺度变化模型
空间自回归(SAR)
层次贝叶斯
3.3 策略/模型层
3.4 评估层
3.4.1 算法评测
规则扫描
数据规则
业务规则
白盒测试
MR 单元测试
MR 集成测试
MR 性能测试
Job 监控
Job 性能
Job 配置
Job 报警
算法收益对比
可视化对比工具
收益统计工具
AB Test
3.5 服务层
高效,可靠,分布式的数据服务
日志监控
日志回流
3.6 挖掘工作流
- 收集数据
收集数据一般是补充外部数据,包括采用爬虫和接口,获取,补充目前数据不足部分。Python scrapy,requests是很好的工具。 - 准备数据
主要包括数据清洗,预处理,错值纠正,缺失值填补。连续值离散化,去掉异常值,以及数据归一化的过程。同时需要根据准备采用的挖掘工具准备恰当的数据格式。 - 分析数据
通过初步统计、分析以及可视化,或者是探索性数据分析工具,得到初步的数据概况。分析数据的分布,质量,可靠程度,实际作用域,以确定下一步的算法选择。 R的ggplot,python的matplotlib,js 的leaflet,d3都是很好的可视化工具。
4. 训练算法
整个工作流最核心的一步,根据现有数据选择算法,生成训练模型。主要是算法选择和参数调整
算法的选择,需要对算法性能和精度以及编码实现难度进行衡量和取舍。 (甚至算法工具箱对数据集的限制情况都是算法选择考虑的内容) 实际工程上,不考虑算法复杂度超过O(N^2)的算法。Java的Weka和Python的Scipy是很好的数据挖掘分析工具。
参数调整。这是一门神奇的技能,只能在实际过程中体会。
5. 测试算法
这一步主要是针对监督算法(分类,回归),为了防止模型的Overfit,需要测试算法模型的覆盖能力和性能。方法包括Holdout,还有random subsampling.
非监督算法(聚类),采用更加具体的指标,包括熵,纯度,精度,召回等。
6 使用,解释,修正算法
数据挖掘不是一个静态的过程,需要不断对模型重新评估,衡量,修正。算法模型的生命周期也是一个值得探讨的话题。