數(shù)據(jù)驅(qū)動優(yōu)化:如何利用 KNN 算法驅(qū)動產(chǎn)品優(yōu)化?

11 評論 6545 瀏覽 32 收藏 7 分鐘

在互聯(lián)網(wǎng)行業(yè)中常常有利用數(shù)據(jù)分析或者數(shù)據(jù)挖掘的結(jié)論來應(yīng)用到產(chǎn)品中,驅(qū)動產(chǎn)品的優(yōu)化,提升產(chǎn)品的各項KPI 指標, 在數(shù)據(jù)挖掘和數(shù)據(jù)分析的背后會涉及到一些數(shù)據(jù)挖掘或者機器學(xué)習(xí)的算法。本文主要是knn算法原理的介紹,以及在它在互聯(lián)網(wǎng)行業(yè)中的具體應(yīng)用,后續(xù)會介紹這個算法的具體實現(xiàn)(R 語言和python 語言)。

一、knn 算法原理:

現(xiàn)在假如有一個樣本, 樣本中的每一個叫做個體, 我們已經(jīng)知道這些個體所屬的類別,現(xiàn)在有一個新的未知類別的個體,我們可以通過計算它與樣本中所有個體的相似距離,然后找出與它具體最小的k個個體, 這k個個體最多的類別就是這個新的個體的預(yù)測的類別。

算法步驟:

1.計算測試數(shù)據(jù)與各個訓(xùn)練數(shù)據(jù)之間的距離

計算具體之前需要對數(shù)據(jù)中的每一個屬性進行數(shù)據(jù)歸一化,防止數(shù)據(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ù)的最小值

例如有一個屬性的取值為: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.計算各體之間的距離公式如下

  1. 按照距離的遞增關(guān)系進行排序;
  2. 選取距離最小的K 個點;
  3. 確定前K 個點所在類別的出現(xiàn)頻率;
  4. 返回前K 個點中出現(xiàn)頻率最高的類別作為測試數(shù)據(jù)的預(yù)測分類。

二、在互聯(lián)網(wǎng)實際情景中的應(yīng)用

1. 需求背景

現(xiàn)在某app 上了一個歌詞制作的功能, 每天會有一定的用戶去使用歌詞制作的功能,制作的歌詞會經(jīng)過外包團隊的審核,來判斷這個歌詞是否能夠投入使用。

現(xiàn)在根據(jù)一段時間的審核,已經(jīng)能夠根據(jù)制作歌詞質(zhì)量的好壞來將整體歌詞制作的用戶細分為:優(yōu)質(zhì)用戶,即制作的歌詞數(shù)目又多質(zhì)量又高;一般用戶,制作的歌詞數(shù)和質(zhì)量都屬于普通的情況;垃圾用戶,即制作的歌詞數(shù)目不多質(zhì)量又差。

業(yè)務(wù)方需要提高整體的歌詞制作質(zhì)量所以希望能夠根據(jù)現(xiàn)有的優(yōu)質(zhì)用戶具有的特征,去發(fā)現(xiàn)更多這種類似的用戶,來不斷提高整體的UGC 歌詞。

2. 需求溝通

數(shù)據(jù)分析師根據(jù)對業(yè)務(wù)的理解與業(yè)務(wù)方溝通,探討可能決定一個歌詞制作的用戶是否是優(yōu)質(zhì)用戶可能具有的特征,以及業(yè)務(wù)方根據(jù)業(yè)務(wù)的熟悉和敏感度給出的分析建議,然后再次分析這個需求的需求目的以及需求執(zhí)行的可行性(是否有支持的數(shù)據(jù))。

3. 數(shù)據(jù)探索

根據(jù)溝通后的結(jié)論,數(shù)據(jù)分析師從數(shù)據(jù)倉庫提取相對應(yīng)的數(shù)據(jù),即提取三類用戶的一些屬性特征及其用戶ID,如下圖所示:

  • userid 指的是用戶的賬號
  • song_play_7 指的是過去 7 天的平均播放量
  • lyric_activity_7 指的是過去 7 天的對歌詞有效活躍行為: 如歌詞搜索, 歌詞報錯,歌詞分享,歌詞翻譯,歌詞改錯等
  • type: 代表用戶是屬于哪一種類型的用戶: 優(yōu)質(zhì) 2 , 一般 1 ,垃圾 0

本次例子假如是沒有缺失值和異常值,一般來說要對數(shù)據(jù)中的缺失值和異常值進行處理。比如去掉異常值,對缺失值進行均值或者眾數(shù)來代替。

4. knn 算法預(yù)測一個新用戶是否是屬于優(yōu)質(zhì)用戶

假如已經(jīng)知道這個用戶的播放量為140,報錯次數(shù)為3,歸一化處理后為:0.932203,0.5

首先對上面的數(shù)據(jù)進行歸一化處理:

計算這個新的用戶和圖中的每一個用戶的歐式距離為:

((0.932203- 0.762711864)^2+(0.5-0.833333333)^2) 的開方根

依次計算結(jié)果如下:

則最小距離的前三位分別為0.373948311, 1.16863508, 1.537825481,他們對應(yīng)的type 都是 2 ,即優(yōu)質(zhì)用戶, 則可以判斷這個新用戶為優(yōu)質(zhì)用戶。

  • 0.373948311
  • 1.16863508
  • 1.537825481
  • 3.504101344
  • 4.363063227
  • 5.500652804
  • 6.544595038
  • 7.392345678
  • 8.515194827

類似的大盤的所有的用戶都可以采取這種方式來找出優(yōu)質(zhì)用戶進行拉新。

5. 結(jié)果反饋模型落地

將這個模型的預(yù)測過程和結(jié)果與業(yè)務(wù)方溝通,并且安排模型落地,并監(jiān)控上線之后的效果,不斷改善模型.

6. 可能具有的成果

根據(jù)這個模型業(yè)務(wù)方發(fā)現(xiàn)了優(yōu)質(zhì)用戶所具有的特征屬性,通過運營的方式拉取很多優(yōu)質(zhì)用戶,大大提高整體的優(yōu)質(zhì)歌詞的比例,提高KPI 指標。

 

本文由 @陳友洋? 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自 pexels,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 歡迎關(guān)注個人公眾號: 【DS數(shù)據(jù)科學(xué)之美】

    來自廣東 回復(fù)
  2. 最大問題是最后的type,如何判斷優(yōu)質(zhì)用戶和一般用戶。 training set是拍腦袋的么?

    來自廣東 回復(fù)
    1. 優(yōu)質(zhì)的用戶是和業(yè)務(wù)方定出來的

      回復(fù)
  3. knn模型我記得是每次運算都要重新計算距離的吧,不能把模型值存起來,也不能增量訓(xùn)練

    來自廣東 回復(fù)
    1. 這里只是提供了一種方法 也可以用其他的分類預(yù)測方法 比如決策樹 邏輯回歸

      回復(fù)
    2. 有這個缺點 只是其中一種方法 也可以用邏輯回歸哈

      回復(fù)
  4. 如果已知現(xiàn)有個體所屬的類別,說明已經(jīng)有對于各類的定義;為什么不直接使用這個定義,而要用與已知個體的距離計算呢?

    來自北京 回復(fù)
    1. 因為我們要用這種方法去大盤去擴散,目前還不能確定已知的類別具有的屬性特征、所以要用這種方法

      回復(fù)
    2. 這個確實是個悖論,我都已經(jīng)定義了各類,為啥還要用knn呢,我直接按照我的定義規(guī)則去判斷不就好了嗎

      來自廣東 回復(fù)
  5. 雖然有點地方?jīng)]看懂,不過寫的真心不錯,純純的干貨

    來自北京 回復(fù)
    1. 謝謝你

      回復(fù)