推荐理由:在互联网行业中常常有利用数据分析或者数据挖掘的结论来应用到产品中,驱动产品的优化,提升产品的各项KPI 指标, 在数据挖掘和数据分析的背后会涉及到一些数据挖掘或者机器学习的算法。本文主要是knn算法原理的介绍,以及在它在互联网行业中的具体应用,后续会介绍这个算法的具体实现(R 语言和python 语言)。
(本文由 @陈友洋 授权发布,未经作者许可,禁止转载)
一、knn 算法原理:
现在假如有一个样本, 样本中的每一个叫做个体, 我们已经知道这些个体所属的类别,现在有一个新的未知类别的个体,我们可以通过计算它与样本中所有个体的相似距离,然后找出与它具体最小的k个个体, 这k个个体最多的类别就是这个新的个体的预测的类别。
算法步骤:
1.计算测试数据与各个训练数据之间的距离
计算具体之前需要对数据中的每一个属性进行数据归一化,防止数据过大对距离的计算产生影响:
数据归一化:
x* = (x – x_mean)/(x_max -x_min)
x_mean 表示数据的均值, x_max 表示数据的最大值, x_min 表示数据的最小值
例如有一个属性的取值为:20, 40, 80, 100,则首先计算平均值: (20+30+80+100)/4=60。
最小值:20 ,最大值: 100,则归一化后每个值为:
- (20-60)/(100-20)=-0.5
- (40-60)/(100-20)=-0.25
- (80-60)/(100-20)= 0.25
- (100-60)/(100-20)=0.5
2.计算各体之间的距离公式如下
- 按照距离的递增关系进行排序;
- 选取距离最小的K 个点;
- 确定前K 个点所在类别的出现频率;
- 返回前K 个点中出现频率最高的类别作为测试数据的预测分类。
二、在互联网实际情景中的应用
1. 需求背景
现在某app 上了一个歌词制作的功能, 每天会有一定的用户去使用歌词制作的功能,制作的歌词会经过外包团队的审核,来判断这个歌词是否能够投入使用。
现在根据一段时间的审核,已经能够根据制作歌词质量的好坏来将整体歌词制作的用户细分为:优质用户,即制作的歌词数目又多质量又高;一般用户,制作的歌词数和质量都属于普通的情况;垃圾用户,即制作的歌词数目不多质量又差。
业务方需要提高整体的歌词制作质量所以希望能够根据现有的优质用户具有的特征,去发现更多这种类似的用户,来不断提高整体的UGC 歌词。
2. 需求沟通
数据分析师根据对业务的理解与业务方沟通,探讨可能决定一个歌词制作的用户是否是优质用户可能具有的特征,以及业务方根据业务的熟悉和敏感度给出的分析建议,然后再次分析这个需求的需求目的以及需求执行的可行性(是否有支持的数据)。
3. 数据探索
根据沟通后的结论,数据分析师从数据仓库提取相对应的数据,即提取三类用户的一些属性特征及其用户ID,如下图所示:
- userid 指的是用户的账号
- song_play_7 指的是过去 7 天的平均播放量
- lyric_activity_7 指的是过去 7 天的对歌词有效活跃行为: 如歌词搜索, 歌词报错,歌词分享,歌词翻译,歌词改错等
- type: 代表用户是属于哪一种类型的用户: 优质 2 , 一般 1 ,垃圾 0
本次例子假如是没有缺失值和异常值,一般来说要对数据中的缺失值和异常值进行处理。比如去掉异常值,对缺失值进行均值或者众数来代替。
4. knn 算法预测一个新用户是否是属于优质用户
假如已经知道这个用户的播放量为140,报错次数为3,归一化处理后为:0.932203,0.5
首先对上面的数据进行归一化处理:
计算这个新的用户和图中的每一个用户的欧式距离为:
((0.932203- 0.762711864)^2+(0.5-0.833333333)^2) 的开方根
依次计算结果如下:
则最小距离的前三位分别为0.373948311, 1.16863508, 1.537825481,他们对应的type 都是 2 ,即优质用户, 则可以判断这个新用户为优质用户。
- 0.373948311
- 1.16863508
- 1.537825481
- 3.504101344
- 4.363063227
- 5.500652804
- 6.544595038
- 7.392345678
- 8.515194827
类似的大盘的所有的用户都可以采取这种方式来找出优质用户进行拉新。
5. 结果反馈模型落地
将这个模型的预测过程和结果与业务方沟通,并且安排模型落地,并监控上线之后的效果,不断改善模型.
6. 可能具有的成果
根据这个模型业务方发现了优质用户所具有的特征属性,通过运营的方式拉取很多优质用户,大大提高整体的优质歌词的比例,提高KPI 指标。