企业级用户画像:用户购物性别模型-USG和决策树算法
絮叨兩句:
博主是一名數據分析實習生,利用博客記錄自己所學的知識,也希望能幫助到正在學習的同學們
人的一生中會遇到各種各樣的困難和折磨,逃避是解決不了問題的,唯有以樂觀的精神去迎接生活的挑戰
少年易老學難成,一寸光陰不可輕。
最喜歡的一句話:今日事,今日畢
之前在如何了解K-Means聚類算法?這是博主為大家講解的K-Means算法,并在基于不同的模型下使用K-Means進行開發RFM,RFE,PSM三個標簽
本篇博客為大家帶來基于USG模型下使用決策樹開發用戶購物性別
USG模型引入
------------------USG(User Shopping Gender)
AI驅動的電商用戶模型:性別屬性是這樣確定的
------------------首先帶領大家了解一下,如何通過大數據來確定用戶的真實性別
- 我們經常談論的用戶精細化運營,到底是什么?
-----簡單來講,就是將網站的每個用戶標簽化,制作一個屬于他自己的網絡身份證。然后,運用人員通過身份證來確定活動的投放人群,圈定人群范圍,更為精準的用戶培養和管理。當然,身份證最基本的信息就是姓名,年齡和性別,與現實不同的是,網絡上用戶填寫的資料不一定完全準確,還需要進行進一步的確認和評估。
確定性別這件事很重要,簡單舉個栗子,比如店鋪想推薦新品的Bra,如果粗糙的全部投放人群或者投放到不準確性別的人群,那后果可想而知了。下面來介紹一下具體的識別思路
用戶畫像需要的數據
用戶平時在電商網站的購物行為,瀏覽行為,搜索行為以及訂單購買情況都會被記錄在案,探查其消費能力,興趣等。數據歸類后,一般來講,可以通過三類數據對用戶進行分群和定義。
- 1.用戶信息
- 社會特征:馬克思的人性觀把人分為社會屬性和自然屬性。社會特征主要指的是人在社會上的階級屬性,當然也包括服從性、依賴性或者自覺性等,這是人類發展的必然的基本要求。
- 自然特征:也可以說成是人的生物性,通常來講可以是食欲,物欲或者購買欲,自我保存能力。但不同人會有不同的自然特征,比如學習能力和邏輯思維等。
- 興趣特征:對于電商來講,主要是對某件商品,某個品牌或者品類的興趣程度,如加購、瀏覽、收藏、搜索和下單行為。
- 消費特征:消費能力的評估,消費傾向的評估,能夠判斷用戶的消費層級,是高消費力還是低消費力。
- 2.商品
- 商品屬性:基本信息,品類,顏色尺碼型號等。
- 商品定位:商品層級,是否為高中低端,商品類型傾向于哪類客戶,區域或者其他的特征。 最后通過以上的信息來獲取用戶信息,判斷其具體的畫像特征,然后得到類似于醬紫的網絡身份證。
如何理解建模過程
重點來了,雖然能夠通過用戶的行為,購買和興趣數據,了解用戶的基本信息,但是仍然不清楚如何建模?用什么語言建模?
其實,購物性別的區分使用的是spark,但是機器學習算法也有很多分類,包含邏輯回歸,線性支持向量機,樸素貝葉斯模型和決策樹。那么,又該如何選擇呢?其中,決策樹的優點較多,主要是其變量處理靈活,不要求相互獨立。可處理大維度的數據,不用預先對模型的特征有所了解。對于表達復雜的非線性模式和特征的相互關系,模型相對容易理解和解釋。看起來決策樹的方法最適合區分性別特征了,所以決定用決策樹進行嘗試。
什么是決策樹?簡單來講,是通過訓練數據來構建一棵用于分類的樹,從而對未知數據進行高效分類。可以從下面的圖了解決策樹的工作原理。
構造決策樹的步驟為:
- 通過訓練數據來構建一棵用于分類的樹,從而對未知數據進行高效分類。
以上步驟中,能夠得出一個結論,在構建決策樹的過程中,最重要的是如何找到最好的分割點。決策樹值得注意的問題是過擬合問題,整個算法必須解決「如何停止分割」和「如何選擇分割」兩個關鍵問題。
最簡單的做法就是設定樹的深度或枝葉的最少樣本量。但是,過少的樣本量又不具有代表性,所以一般情況,可以使用交叉驗證的方法。交叉驗證就是可以使用一部分數據用于模型的訓練,另一部分數據可以用來評估模型的性能。業內常用的劃分方法是講樣本進行50/50分,60/40分或者80/20分。
模型確立過程
在建模前期,首要考慮的事情就是先確定指標,以及對樣本的定義。購物性別指的是什么?通過哪些數據來確定購物性別,樣本的準確性,如何驗證數據的可信度等。
購物性別的定義
先看下圖,具體的邏輯可從圖中查看。一般來講,用戶填寫的資料不一定真實,我們對他/她的性別數據持懷疑態度,所以,就需要其他數據進行輔助證明其性別。
訂單數據能夠真實反映用戶的購買心態,預測購買行為,并且能夠通過購買商品的所屬類別,判斷用戶的購買傾向,最后得到性別特征類目。不過本文就不展開探討甄別特征類目的區分方法了。
根據數據結果,最終,確認了購物性別的定義。分為:
- 購物性別男:N月購買的男性特征類目子下單數> N月購買的女性特征類目子下單數
- 購物性別女:N月購買的男性特征類目子下單數> N月購買的女性特征類目子下單數
- 購物性別中性:未下單男女特征類目
- N需要具體根據業務場景來定。
建模數據準備過程
本節是具體的操作過程,模型的實操階段。一般來講,不同模型的訓練其實大體雷同。從技術上來講,各家算法大多使用sparkmllib,不同點是所運算的模型都是針對于場景來定的。
在全部樣本中,取80%的數據用于訓練模型
在全部樣本中,取20%的數據用戶數據測試
這種方式可以更好的根據數據的規模,提高模型的準確性
模型效果分析
行業內當前采用數據挖掘、機器學習和推薦系統中的評測指標—準確率(Precision)、召回率(Recall),準確率是應用最廣的數據指標,也很清晰易懂,以男性為例
準確率=命中的男性用戶數量/所有預測男性數量,一般來講,準確率可以評估模型的質量,他是很直觀的數據評價,但并不是說準確度越高,算法越好。
召回率=命中的男性用戶數量/所有男性數量,反映了被正確判定的正例占總的正例的比重。
模型建立完后,需根據模型的結果與預期的對比,進行調優
最后要說的
購物性別定義對于用戶精準營銷十分重要,疑難雜癥,對癥下藥,才能出現更好的療效。
對于新手來說,初期一定是對模型性能及效果分析不是很熟練,可先用小數據量進行測試, 走通全流程 建表要規范,方便后期批量刪除,因為建模是個反復的過程。
根據各類參數的評估結果,以及人工經驗選定的模型參數,建立模型。值得注意的是,決策樹的深度不要過深,以防止過擬合的問題
決策樹分類算法詳解
決策樹是最經典的機器學習模型之一。它的預測結果容易理解, 易于向業務部門解釋,
預測速度快,可以處理類別型數據和連續型數據。在機器學習的數據挖掘類求職面試中,決策樹是面試官最喜歡的面試題之一。
算法原理
快速體驗
package cn.itcast.userprofile.up24.newexcavateimport org.apache.spark.ml.classification.{DecisionTreeClassificationModel, DecisionTreeClassifier} import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator import org.apache.spark.ml.feature.{IndexToString, StringIndexer, StringIndexerModel, VectorAssembler} import org.apache.spark.ml.{Pipeline, PipelineModel} import org.apache.spark.sql.types.DoubleType import org.apache.spark.sql.{DataFrame, SparkSession}object UsgTest {def main(args: Array[String]): Unit = {//1.創建SParkSessionval spark: SparkSession = SparkSession.builder().appName("Usg").master("local").getOrCreate()val sparkContext = spark.sparkContextsparkContext.setLogLevel("WARN")import spark.implicits._//2.讀取數據val iris_tree: DataFrame = spark.read.csv("file:///C:\\BigData\\UserPortraitSourceData\\resources\\用戶畫像2\\第三階段\\03挖掘型標簽\\數據集\\iris_tree.csv").toDF("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width", "Species").select('Sepal_Length cast DoubleType, 'Sepal_Width cast DoubleType, 'Petal_Length cast DoubleType, 'Petal_Width cast DoubleType, 'Species) // iris_tree.show()/*** +------------+-----------+------------+-----------+-----------+* |Sepal_Length|Sepal_Width|Petal_Length|Petal_Width| Species|* +------------+-----------+------------+-----------+-----------+* | 5.1| 3.5| 1.4| 0.2|Iris-setosa|* | 4.9| 3.0| 1.4| 0.2|Iris-setosa|* | 4.7| 3.2| 1.3| 0.2|Iris-setosa|* | 4.6| 3.1| 1.5| 0.2|Iris-setosa|*///3.對Species 進行處理val indexerModel: StringIndexerModel = new StringIndexer().setInputCol("Species").setOutputCol("label").fit(iris_tree)//4.處理特征val vectorAssembler: VectorAssembler = new VectorAssembler().setInputCols(Array("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width")).setOutputCol("features")//5.創建決策樹val decisionTreeClassifier = new DecisionTreeClassifier().setFeaturesCol("features").setPredictionCol("prediction").setSeed(10).setMaxDepth(5)//6.還原標簽val indexToString = new IndexToString().setInputCol("label").setOutputCol("Species_label")//7.劃分訓練集、測試集,var Array(trainData,testData)=iris_tree.randomSplit(Array(0.8,0.2))//8.使用Pipeline 進行計算val pipeline: Pipeline = new Pipeline().setStages(Array(indexerModel, vectorAssembler, decisionTreeClassifier, indexToString))//生成模型val model: PipelineModel = pipeline.fit(trainData)//測試val testDataModel = model.transform(testData) // testDataModel.show()/*** +------------+-----------+------------+-----------+---------------+-----+-----------------+--------------+-------------+----------+---------------+* |Sepal_Length|Sepal_Width|Petal_Length|Petal_Width| Species|label| features| rawPrediction| probability|prediction| Species_label|* +------------+-----------+------------+-----------+---------------+-----+-----------------+--------------+-------------+----------+---------------+* | 4.3| 3.0| 1.1| 0.1| Iris-setosa| 0.0|[4.3,3.0,1.1,0.1]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 4.5| 2.3| 1.3| 0.3| Iris-setosa| 0.0|[4.5,2.3,1.3,0.3]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 4.9| 2.4| 3.3| 1.0|Iris-versicolor| 1.0|[4.9,2.4,3.3,1.0]| [0.0,0.0,1.0]|[0.0,0.0,1.0]| 2.0|Iris-versicolor|* | 5.0| 2.3| 3.3| 1.0|Iris-versicolor| 1.0|[5.0,2.3,3.3,1.0]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.1| 3.3| 1.7| 0.5| Iris-setosa| 0.0|[5.1,3.3,1.7,0.5]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.1| 3.4| 1.5| 0.2| Iris-setosa| 0.0|[5.1,3.4,1.5,0.2]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.1| 3.5| 1.4| 0.3| Iris-setosa| 0.0|[5.1,3.5,1.4,0.3]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.1| 3.8| 1.5| 0.3| Iris-setosa| 0.0|[5.1,3.8,1.5,0.3]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.2| 2.7| 3.9| 1.4|Iris-versicolor| 1.0|[5.2,2.7,3.9,1.4]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.2| 4.1| 1.5| 0.1| Iris-setosa| 0.0|[5.2,4.1,1.5,0.1]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.4| 3.0| 4.5| 1.5|Iris-versicolor| 1.0|[5.4,3.0,4.5,1.5]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.5| 2.4| 3.7| 1.0|Iris-versicolor| 1.0|[5.5,2.4,3.7,1.0]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.5| 2.4| 3.8| 1.1|Iris-versicolor| 1.0|[5.5,2.4,3.8,1.1]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.6| 2.7| 4.2| 1.3|Iris-versicolor| 1.0|[5.6,2.7,4.2,1.3]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|*///8. 驗證結果val evaluator: MulticlassClassificationEvaluator = new MulticlassClassificationEvaluator().setLabelCol("label").setPredictionCol("prediction").setMetricName("accuracy")val Score = evaluator.evaluate(testDataModel)println("測試數據確認百分比:",Score)//(測試數據確認百分比:,0.9259259259259259)//9.查看決策樹val decisionTreeClassificationModel = model.stages(2).asInstanceOf[DecisionTreeClassificationModel]println("Learned DecisionTreeClassificationModel:\n" + decisionTreeClassificationModel.toDebugString)/**Learned DecisionTreeClassificationModel: DecisionTreeClassificationModel (uid=dtc_0f9b93f0b062) of depth 4 with 13 nodesIf (feature 1 <= 1.9)Predict: 0.0Else (feature 1 > 1.9)If (feature 3 <= 1.6)If (feature 1 <= 4.9)Predict: 1.0Else (feature 1 > 4.9)If (feature 0 <= 2.6)Predict: 2.0Else (feature 0 > 2.6)Predict: 1.0Else (feature 3 > 1.6)If (feature 1 <= 4.8)If (feature 0 <= 3.0)Predict: 2.0Else (feature 0 > 3.0)Predict: 1.0Else (feature 1 > 4.8)Predict: 2.0*/}}
以上就是USG模型介紹以及決策樹算法原理
若有錯誤及時私信我,立馬修改
如能幫助到你或對大數據有興趣的可以關注一下,希望能點個贊支持一下謝謝!
總結
以上是生活随笔為你收集整理的企业级用户画像:用户购物性别模型-USG和决策树算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux ubuntu木马,Ubunt
- 下一篇: 北京联通dns服务器位置,ipv6北京联