數(shù)據(jù)驅(qū)動(dòng)優(yōu)化:如何利用 KNN 算法驅(qū)動(dòng)產(chǎn)品優(yōu)化?
在互聯(lián)網(wǎng)行業(yè)中常常有利用數(shù)據(jù)分析或者數(shù)據(jù)挖掘的結(jié)論來(lái)應(yīng)用到產(chǎn)品中,驅(qū)動(dòng)產(chǎn)品的優(yōu)化,提升產(chǎn)品的各項(xiàng)KPI 指標(biāo), 在數(shù)據(jù)挖掘和數(shù)據(jù)分析的背后會(huì)涉及到一些數(shù)據(jù)挖掘或者機(jī)器學(xué)習(xí)的算法。本文主要是knn算法原理的介紹,以及在它在互聯(lián)網(wǎng)行業(yè)中的具體應(yīng)用,后續(xù)會(huì)介紹這個(gè)算法的具體實(shí)現(xiàn)(R 語(yǔ)言和python 語(yǔ)言)。
一、knn 算法原理:
現(xiàn)在假如有一個(gè)樣本, 樣本中的每一個(gè)叫做個(gè)體, 我們已經(jīng)知道這些個(gè)體所屬的類(lèi)別,現(xiàn)在有一個(gè)新的未知類(lèi)別的個(gè)體,我們可以通過(guò)計(jì)算它與樣本中所有個(gè)體的相似距離,然后找出與它具體最小的k個(gè)個(gè)體, 這k個(gè)個(gè)體最多的類(lèi)別就是這個(gè)新的個(gè)體的預(yù)測(cè)的類(lèi)別。
算法步驟:
1.計(jì)算測(cè)試數(shù)據(jù)與各個(gè)訓(xùn)練數(shù)據(jù)之間的距離
計(jì)算具體之前需要對(duì)數(shù)據(jù)中的每一個(gè)屬性進(jìn)行數(shù)據(jù)歸一化,防止數(shù)據(jù)過(guò)大對(duì)距離的計(jì)算產(chǎn)生影響:
數(shù)據(jù)歸一化:
x* = (x – x_mean)/(x_max -x_min)
x_mean 表示數(shù)據(jù)的均值, x_max 表示數(shù)據(jù)的最大值, x_min 表示數(shù)據(jù)的最小值
例如有一個(gè)屬性的取值為:20, 40, 80, 100,則首先計(jì)算平均值: (20+30+80+100)/4=60。
最小值:20 ,最大值: 100,則歸一化后每個(gè)值為:
- (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.計(jì)算各體之間的距離公式如下
- 按照距離的遞增關(guān)系進(jìn)行排序;
- 選取距離最小的K 個(gè)點(diǎn);
- 確定前K 個(gè)點(diǎn)所在類(lèi)別的出現(xiàn)頻率;
- 返回前K 個(gè)點(diǎn)中出現(xiàn)頻率最高的類(lèi)別作為測(cè)試數(shù)據(jù)的預(yù)測(cè)分類(lèi)。
二、在互聯(lián)網(wǎng)實(shí)際情景中的應(yīng)用
1. 需求背景
現(xiàn)在某app 上了一個(gè)歌詞制作的功能, 每天會(huì)有一定的用戶(hù)去使用歌詞制作的功能,制作的歌詞會(huì)經(jīng)過(guò)外包團(tuán)隊(duì)的審核,來(lái)判斷這個(gè)歌詞是否能夠投入使用。
現(xiàn)在根據(jù)一段時(shí)間的審核,已經(jīng)能夠根據(jù)制作歌詞質(zhì)量的好壞來(lái)將整體歌詞制作的用戶(hù)細(xì)分為:優(yōu)質(zhì)用戶(hù),即制作的歌詞數(shù)目又多質(zhì)量又高;一般用戶(hù),制作的歌詞數(shù)和質(zhì)量都屬于普通的情況;垃圾用戶(hù),即制作的歌詞數(shù)目不多質(zhì)量又差。
業(yè)務(wù)方需要提高整體的歌詞制作質(zhì)量所以希望能夠根據(jù)現(xiàn)有的優(yōu)質(zhì)用戶(hù)具有的特征,去發(fā)現(xiàn)更多這種類(lèi)似的用戶(hù),來(lái)不斷提高整體的UGC 歌詞。
2. 需求溝通
數(shù)據(jù)分析師根據(jù)對(duì)業(yè)務(wù)的理解與業(yè)務(wù)方溝通,探討可能決定一個(gè)歌詞制作的用戶(hù)是否是優(yōu)質(zhì)用戶(hù)可能具有的特征,以及業(yè)務(wù)方根據(jù)業(yè)務(wù)的熟悉和敏感度給出的分析建議,然后再次分析這個(gè)需求的需求目的以及需求執(zhí)行的可行性(是否有支持的數(shù)據(jù))。
3. 數(shù)據(jù)探索
根據(jù)溝通后的結(jié)論,數(shù)據(jù)分析師從數(shù)據(jù)倉(cāng)庫(kù)提取相對(duì)應(yīng)的數(shù)據(jù),即提取三類(lèi)用戶(hù)的一些屬性特征及其用戶(hù)ID,如下圖所示:
- userid 指的是用戶(hù)的賬號(hào)
- song_play_7 指的是過(guò)去 7 天的平均播放量
- lyric_activity_7 指的是過(guò)去 7 天的對(duì)歌詞有效活躍行為: 如歌詞搜索, 歌詞報(bào)錯(cuò),歌詞分享,歌詞翻譯,歌詞改錯(cuò)等
- type: 代表用戶(hù)是屬于哪一種類(lèi)型的用戶(hù): 優(yōu)質(zhì) 2 , 一般 1 ,垃圾 0
本次例子假如是沒(méi)有缺失值和異常值,一般來(lái)說(shuō)要對(duì)數(shù)據(jù)中的缺失值和異常值進(jìn)行處理。比如去掉異常值,對(duì)缺失值進(jìn)行均值或者眾數(shù)來(lái)代替。
4. knn 算法預(yù)測(cè)一個(gè)新用戶(hù)是否是屬于優(yōu)質(zhì)用戶(hù)
假如已經(jīng)知道這個(gè)用戶(hù)的播放量為140,報(bào)錯(cuò)次數(shù)為3,歸一化處理后為:0.932203,0.5
首先對(duì)上面的數(shù)據(jù)進(jìn)行歸一化處理:
計(jì)算這個(gè)新的用戶(hù)和圖中的每一個(gè)用戶(hù)的歐式距離為:
((0.932203- 0.762711864)^2+(0.5-0.833333333)^2) 的開(kāi)方根
依次計(jì)算結(jié)果如下:
則最小距離的前三位分別為0.373948311, 1.16863508, 1.537825481,他們對(duì)應(yīng)的type 都是 2 ,即優(yōu)質(zhì)用戶(hù), 則可以判斷這個(gè)新用戶(hù)為優(yōu)質(zhì)用戶(hù)。
- 0.373948311
- 1.16863508
- 1.537825481
- 3.504101344
- 4.363063227
- 5.500652804
- 6.544595038
- 7.392345678
- 8.515194827
類(lèi)似的大盤(pán)的所有的用戶(hù)都可以采取這種方式來(lái)找出優(yōu)質(zhì)用戶(hù)進(jìn)行拉新。
5. 結(jié)果反饋模型落地
將這個(gè)模型的預(yù)測(cè)過(guò)程和結(jié)果與業(yè)務(wù)方溝通,并且安排模型落地,并監(jiān)控上線(xiàn)之后的效果,不斷改善模型.
6. 可能具有的成果
根據(jù)這個(gè)模型業(yè)務(wù)方發(fā)現(xiàn)了優(yōu)質(zhì)用戶(hù)所具有的特征屬性,通過(guò)運(yùn)營(yíng)的方式拉取很多優(yōu)質(zhì)用戶(hù),大大提高整體的優(yōu)質(zhì)歌詞的比例,提高KPI 指標(biāo)。
本文由 @陳友洋? 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來(lái)自 pexels,基于CC0協(xié)議
歡迎關(guān)注個(gè)人公眾號(hào): 【DS數(shù)據(jù)科學(xué)之美】
最大問(wèn)題是最后的type,如何判斷優(yōu)質(zhì)用戶(hù)和一般用戶(hù)。 training set是拍腦袋的么?
優(yōu)質(zhì)的用戶(hù)是和業(yè)務(wù)方定出來(lái)的
knn模型我記得是每次運(yùn)算都要重新計(jì)算距離的吧,不能把模型值存起來(lái),也不能增量訓(xùn)練
這里只是提供了一種方法 也可以用其他的分類(lèi)預(yù)測(cè)方法 比如決策樹(shù) 邏輯回歸
有這個(gè)缺點(diǎn) 只是其中一種方法 也可以用邏輯回歸哈
如果已知現(xiàn)有個(gè)體所屬的類(lèi)別,說(shuō)明已經(jīng)有對(duì)于各類(lèi)的定義;為什么不直接使用這個(gè)定義,而要用與已知個(gè)體的距離計(jì)算呢?
因?yàn)槲覀円眠@種方法去大盤(pán)去擴(kuò)散,目前還不能確定已知的類(lèi)別具有的屬性特征、所以要用這種方法
這個(gè)確實(shí)是個(gè)悖論,我都已經(jīng)定義了各類(lèi),為啥還要用knn呢,我直接按照我的定義規(guī)則去判斷不就好了嗎
雖然有點(diǎn)地方?jīng)]看懂,不過(guò)寫(xiě)的真心不錯(cuò),純純的干貨
謝謝你