大数据开发如何转型算法?
算法建模主要做什么?调参为什么玄学?
如何通俗理解算法建模过程。。
夕阳下的村东头,有一人来买瓜。
1 引子(买瓜)
忙碌的一天刚刚结束,村里的小张就匆匆的骑上车,准备买个西瓜解暑。
天气可真热,等会一定要挑个又甜
、又熟
的大西瓜。
心里嘀咕着,小张慢慢的来到了村东头水果摊前(这里的瓜最好)。
老板,你这西瓜保熟吗?给我挑个甜的、熟点的。
放心好了,看看这瓜纹
和瓜蒂
,而且我都是自家种
的,肯定保熟。
小张心里直打鼓: 瓜蒂蜷曲
、瓜纹青绿
,看起来貌似是好瓜。但是之前按这标准买的瓜,吃起来并不甜。
回想起父辈的挑瓜经验:敲声浊响
的才是好瓜。于是就再敲了敲几个大瓜,嗯,声音
倒是没错。
保险起见,还是货比三家靠谱。小张走向其他店铺
,又挑了不同种类
和大小
的西瓜,并试吃了一些。
经过了几分钟斟酌,在众老板的欣慰目光中,小张终于选好了一个皮薄
、颜色青绿
、根蒂卷
、敲击会发出浊响
的大瓜。
现场切开尝了下,味道很甜。
开心的小张付完钱,嘴里哼着小调,骑行而去。。
2 算法建模到底在干什么
小张最后买到了好瓜,好奇的我们先来围观一下他的买瓜过程 :
-
自己想买个又甜又熟的大西瓜
-
筛选西瓜的
颜色
、瓜蒂
、声音
、种类
和大小
-
根据总结的
选瓜方法
在不同的瓜摊
中挑选试吃 -
综合对比,选出了
最好的
一个瓜,实现了西瓜自由
大白话概括买瓜流程
先确定一个预期目标
(买到好瓜)和选瓜环境
(村东头);其次总结选瓜方法
(父辈经验)和选瓜特征
(颜色、瓜蒂等);最后根据这套方法论
+ 实战
,货比三家,对比得到了最好的预期结果
(一个好瓜)。
故事中的小张凭借多年挑瓜经验
,总结好瓜的特征
: 皮薄
、青绿瓜纹
、曲根蒂
和浊响声
。根据这些特征,现场进行望闻问切
,多次实验,选出最好
的瓜。
现在换个角度,假设有台机器可以帮我们这些事情。
我们给机器输入一些西瓜的数据:包括各种西瓜的大小
、种类
、颜色
、瓜蒂
和敲击声
等信息,再提供一些计算好瓜的算法公式
,希望机器能够稳定、准确的帮我们筛选出好瓜和坏瓜。
通俗理解,这就是大数据算法建模所做的工作。
大数据算法建模核心思想
在理解业务背景、数据含义的基础上确定预期目标
;数据预处理
后,选择合适的算法
和数据特征
并构建模型
,训练最好的模型帮助我们最大化逼近(预测
)预期目标。
3 大白话讲解算法建模流程
前文介绍了算法建模帮我们解决了什么问题?接下来瞅瞅如何进行算法建模。
我会详细介绍算法建模的具体流程,并借助于买西瓜
的例子说明。
为避免内容枯燥,后面画了大量示意图,方便理解
先来看看整体的算法建模流程:
1)流程说明
整体大致可分为业务/数据理解
、预处理
、特征工程
、模型训练
、模型评估
和预测
几个步骤。
-
首先要理解
数据
和业务目标
,即明确目标和测试的数据。比如说我想挑一个好西瓜,你总不能去个早餐店拿两个包子回来吧? -
其次是数据预处理工作。一般读取的数据是存在一些空值、异常值等其他
非友好
的特性,需要做些特殊处理。 -
在预处理基础上,进一步获取为模型所用的数据(
特征
),被称作特征工程
。在买瓜过程,小张就很老道的看瓜纹、瓜蒂、听敲击声,这些就是好瓜的特征。 -
特征工程完成后,可以选择合适算法进行
模型训练
。此时通常将数据集分成测试集
和验证集
,以此检验模型效果,即区分好瓜的正确程度。 -
经过几轮模型训练和特征工程(过程可迭代、可双向),获取效果最好的模型,在真实数据集进行
预测
(切瓜)。
2)数据、业务理解
常有的一个误区:
即无需事先确定目标和数据,总以为能够找到一个完美的算法,能够帮我们自动获取数据规律。
但是算法并不是万能的,需要与之适配的数据和使用场景。再好的剑也需要有温养的环境和一副好剑鞘。
3)数据预处理
算法建模中的数据来源为数据同事开发的指标。比如用户产品推荐,就需要加工一些用户行为指标。
当然这些加工后的数据不能直接给模型使用,需要进行处理。
-
饱和度(空值填充、异常值过滤)
-
无量纲化:将数据转换为同等规格。比如特征的少量数值过大,可以统一缩放到[0,1]范围,降低样本计算影响程度)
-
定量数据转换:比如西瓜的敲击声(清脆、浊响)转换为数字形式(00、01),进行哑编码(定量编码的一种)。
-
定性数据转换: 比如根据西瓜的重量是否大于5斤,将西瓜的重量分为[0,1]两类,便于数学计算。
4)特征工程
特征工程的主要目的是选择具有价值的数据信息,帮助模型快速和准确训练和预测。
好的数据和特征可以决定训练模型的上限
。
举个例子:选西瓜过程中,经验丰富的小明对比不同种类西瓜的纹路
、瓜蒂
、敲击声
、尺寸
和种类
等特征,快速挑选出想要的好瓜。
假如小明是个新手,那么可能只会根据瓜的大小
、颜色
来区分,认为大而绿的就是好瓜,当然结果可能相差十万八千里。
特征工程的主要工作内容主要如下:
-
基于样本特性筛选特征: 使用数据
统计学
知识,比如计算特征的方差
、相关系数
、分箱/WOE
、IV值
和信息熵
等,筛选出结果比较好的特征。 -
基于模型筛选特征: 将部分特征放入到模型中训练,筛选效果好的特征,适用于特征数据量比较大的场景,比较精确。
-
特征衍生:需要引入一些衍生特征(组合旧特征、开发新特征),提高特征的丰富性
5)模型训练
在完成特征工程的基础上,需要选择适配的机器学习算法,构建模型。
这里建议可再次计算部分特征的IV值、信息熵等,确保特征完整性。
常见的机器学习算法:
-
监督学习:包含分类和回归两大类。常见的算法有LR、树算法、神经网络和GBRT等,其中
LR逻辑回归
和树算法
常用于解决风控场景 -
非监督学习:聚类算法、PCA算法和关联规则等算法。其中
Kmeans算法
被广泛运用于数据挖掘分类场景,关联规则
则应用于推荐中。
选择好算法和特征,开始训练模型。训练时间会很长且过程可逆,可适时调整特征和算法迭代。
6)模型评估
模型需要在训练集和验证集上进行训练,如何判断模型训练效果呢?
一般需要从两方面去考虑,即模型准确性和稳定性。
-
准确性评估
模型能否正确预测结果。比如判断一颗表皮青绿、瓜蒂蜷曲、敲击浊响的瓜有多大概率是好瓜。
常用方法:混淆矩阵、KS曲线、ROC曲线等
-
稳定性评估
即模型的稳定性,防止随着时间推移,应用模型的样本特征可能会发生变化,影响模型的预测结果。常通过计算特征的PSI值(变化程度),调整模型。
常用方法:PSI计算
小于10%,则无需更新模型;10%-20%, 需检查变化原因,加强监控频率;大于20%,则模型需要迭代。
7)预测
将模型带入到真实预测集中,预测结果。
序号 | 颜色 | 瓜蒂 | 敲击声 | 好瓜 |
---|---|---|---|---|
1 | 青绿 | 蜷缩 | 浊响 | 0.958 |
2 | 乌黑 | 蜷缩 | 浊响 | 0.943 |
3 | 青绿 | 硬挺 | 清脆 | 0.412 |
4 | 乌黑 | 稍蜷 | 沉闷 | 0.533 |
4 算法建模如何学习
上面简单介绍了下大数据算法建模的基本流程。
由于篇幅问题,不详细之处,可添加我的wx: youlong525交流。
其实在实际工作中,我们可能大半时间都集中在特征处理
和模型训练
,当然还有玄学的调参
。
一个模型运行的好坏,可能会和多种因素有关。需要在掌握底层原理和技术手段的基础上,根据自己的经验去慢慢调试。
而至于如何去学习入门算法建模,这里也提供个人学习方法和路线(仅供参考)。
-
数据知识:统计学、线性代数和离散数学
-
算法知识:机器学习、深度学习算法、某领域场景算法
-
Python基础知识:可以对照菜鸟教程学习
-
Python数据分析:Pandas、Numpy、Matploblib
-
框架学习:jupyter、sklearn、tensorflow、pytorch
-
算法建模实战:系统项目实战、领域延深
-
其他:Spark、Hive等大数据技术
5 一些误区和建议
1)做算法建模是不是只会算法就好了?
并不能这么说,正如文中所说特征
和数据
是决定模型的上限。特征处理也要很精通,特别是python和pandas等技术
2)特征工程和数据预处理的关系?
其实这两者都可以归为特征处理
,也即特征工程包含预处理,都是进行数据处理和特征筛选,只不过有的技术体系将其单独划分。
3)模型的准确度不好,如何调参?
我的建议是先去看你的数据,观察特征的饱和度
、IV值
、PSI值
等,一般不好的特征很大程度影响模型好坏。随后再去调整模型的超参数
,只有你的特征比较好,调整超参才能发挥更好的效果。
4)没基础怎么学习算法建模
建议可以按照我上面推荐的学习路线去看,其实算法建模对于没有基础的朋友来说是有蛮高门槛的,推荐一定要把算法理论和数学理论学扎实点,不要深究,理解并会使用即可。
5)那么多编程框架怎么选?学习哪个好
框架只是一个工具,方便编码和调试;重要的是把基础知识学好,任意选择一个即可,推荐pytorch。
6)一点点建议
建议先把基础知识打牢,包括算法和数学知识,这样在后面会学的很轻松。 至于python、pandas、pytorch等全是工具组件,比较好入门。一开始不用铺开学习所有算法,建议学习一些常用的,后面根据具体场景实战中学习即可。
6 写在最后
有一人来买瓜,这瓜保熟。。
》》》更多文章,欢迎关注我的gzh:大数据兵工厂