
來源: 早起Python
作者: 蘿卜
推薦系統(tǒng)將成為未來十年里最重要的變革
社會(huì)化網(wǎng)站將由推薦系統(tǒng)所驅(qū)動(dòng)
--- John Riedl明尼蘇達(dá)大學(xué)教授
01前言
智能推薦和泛的營(yíng)銷完全不同,后者是將產(chǎn)品賣給客戶作為最終目標(biāo);而智能推薦是以“客戶需求”為導(dǎo)向的,是給客戶帶來價(jià)值的。常見的如淘寶的 “你可能還喜歡”,亞馬遜的 “購(gòu)買此商品的用戶也購(gòu)買了” 便是實(shí)例。本文就將詳細(xì)介紹如何用Python實(shí)現(xiàn)智能推薦算法,主要將分為兩個(gè)部分:
02常見的推薦系統(tǒng)與算法
常見的推薦系統(tǒng)分類有:
“ 京騰 ” 合作構(gòu)建用戶畫像標(biāo)簽圖
常見的推薦算法有:
本文將專注于理解起來最容易且又十分經(jīng)典常用的基于關(guān)聯(lián)規(guī)則的購(gòu)物籃推薦。商品的關(guān)聯(lián)度分析對(duì)于提高商品的活力、挖掘消費(fèi)者的購(gòu)買力、促進(jìn)最大化銷售有很大幫助。其建模理念為:物品被同時(shí)購(gòu)買的模式反映了客戶的需求模式,適用場(chǎng)景:無需個(gè)性化定制的場(chǎng)景;有銷售記錄的產(chǎn)品,向老客戶推薦;套餐設(shè)計(jì)與產(chǎn)品擺放。
03購(gòu)物籃簡(jiǎn)介
問:什么是購(gòu)物籃?主要運(yùn)用在什么場(chǎng)景?
答:?jiǎn)蝹€(gè)客戶一次購(gòu)買商品的綜合稱為一個(gè)購(gòu)物籃,即某個(gè)客戶本次的消費(fèi)小票。常用場(chǎng)景:超市貨架布局:互補(bǔ)品與互斥品;套餐設(shè)計(jì)。
問:購(gòu)物籃的常用算法?
答:常用算法有
問:求出互補(bǔ)品與互斥品后對(duì)布局有什么用?
答:根據(jù)關(guān)聯(lián)規(guī)則求出的商品間的關(guān)聯(lián)關(guān)系后,可能會(huì)發(fā)現(xiàn)商品間存在強(qiáng)關(guān)聯(lián),弱關(guān)聯(lián)與排斥三種關(guān)系。每種清醒有各自對(duì)應(yīng)的布局方式。
根據(jù)購(gòu)物籃的信息來進(jìn)行商品關(guān)聯(lián)度的分析不僅僅只有如上三種關(guān)系,它們僅代表商品關(guān)聯(lián)度分析的一個(gè)方面(可信度)。全面系統(tǒng)的商品關(guān)聯(lián)分析必須有三度的概念,三度包括支持度,可信度和提升度。
直接根據(jù)關(guān)聯(lián)三度所定義的概念去理解會(huì)有不少難度,尤其是可信度喝提升度中的“ 誰(shuí)對(duì)誰(shuí) ”的問題。其實(shí)可以換一種方式來看:
為方便理解這些規(guī)則,我們通過下面五個(gè)購(gòu)物籃的例子來練習(xí)一下
不難發(fā)現(xiàn),支持度的分母都是5,也就是購(gòu)物籃的數(shù)量,分子則是選取這個(gè)規(guī)則中的所有商品同時(shí)出現(xiàn)在一個(gè)籃子的次數(shù)。以A->D為例,同時(shí)包含A和D的籃子有2個(gè),總的交易數(shù)量(籃子總數(shù))有5個(gè),所以規(guī)則A->D的支持度為2/5;有商品 A 的籃子個(gè)數(shù)為3,在這三個(gè)籃子中,其中2個(gè)籃子又包含商品D,所以該規(guī)則的置信度(可信度)為2/3。有關(guān)關(guān)聯(lián)規(guī)則,還有以下兩個(gè)問題想補(bǔ)充:
問:僅看支持度和置信度是否靠譜?
答:看一個(gè)案例:食堂賣飯,1000份打飯記錄中,買米飯的有800人次,買牛肉的有600人次,兩個(gè)共同買的有400人次,那么可以得出對(duì)于規(guī)則(牛肉 - > 米飯)Support=P(牛肉&米飯)= 400/1000=0.40;Confidence=P(米飯|牛肉)=400/600=0.67置信度和支持度都很高,但是給買牛肉的人推薦米飯有意義嗎?顯然是沒有任何意義的。因?yàn)闊o任何條件下用戶購(gòu)買米飯的概率:P(米飯)=800/1000=0.8,都已經(jīng)大過買了牛肉的前提下再買米飯的概率 0.67,畢竟米飯本來就比牛肉要暢銷啊。
這個(gè)案例便引出了提升度的概念:提升度 = 置信度/無條件概率=0.67/0.8。規(guī)則 X(A→B) 的提升度為 n 時(shí):向購(gòu)買了 A 的客戶推薦 B 的話,這個(gè)客戶購(gòu)買 B 的概率是 TA 自然而然購(gòu)買 B 的 n × 100% 左右。生活理解:消費(fèi)者平時(shí)較少單獨(dú)購(gòu)買桌角防撞海綿,可能偶爾想到或自己小孩碰到的時(shí)候才會(huì)想起購(gòu)買,如果我們?cè)谧雷?書桌飯桌)的成功下單頁(yè)面添加桌角防撞海綿的推薦,則很大程度上可以提高防撞海綿的銷量。這也符合我們希望通過暢銷商品帶動(dòng)相對(duì)非暢銷商品的宗旨。
問:除了公式的含義,關(guān)聯(lián)三度(支持度,置信度,提升度)還有什么關(guān)聯(lián)嗎?
答:可以這樣理解:
所以 1.0 是提升度的一個(gè)分界值,剛才的買飯案例中給買了牛肉的用戶推薦米飯的這種騷操作的提升度小于 1 也就不難理解了。另外,高置信度的兩個(gè)商品(假設(shè)達(dá)到了 100%,意味著它們總是成雙成對(duì)的出現(xiàn)),但如果支持度很低(意味著份額低),那它對(duì)整體銷售提升的幫助也不會(huì)大。
05基于Apriori 算法的Python實(shí)戰(zhàn)
由于有關(guān)Apriori等算法的研究已經(jīng)很成熟,我們?cè)谟肞ython實(shí)戰(zhàn)時(shí)無需一步一步計(jì)算,直接調(diào)用現(xiàn)有函數(shù)即可,主要是要明白背后的原理與不同算法的使用場(chǎng)景與優(yōu)劣比較。
首先導(dǎo)入相關(guān)庫(kù)并進(jìn)行數(shù)據(jù)探索性分析
import pandas as pd import numpy as np df = pd.read_csv('bike_data.csv', encoding='gbk') df.info(); df.head()
數(shù)據(jù)參數(shù)解釋
接著來看看商品的種類
print(f"數(shù)據(jù)集中共有{df['Model'].nunique()}種商品") model_names = df['Model'].unique() print("商品名分別為:") # 5 個(gè)為一行顯示 for i in range(0, len(model_names), 5): print(model_names[i:i+5])
再來看看最暢銷的 15 種商品
再進(jìn)行一些簡(jiǎn)單的可視化
top_15 = grouped.sort_values(by='count', ascending=False).head(15) plt.figure(figsize=(8, 6)) sns.barplot(data=top_15, x='count', y='Model') plt.grid(True)
首先生成購(gòu)物籃,并將同一個(gè)客戶購(gòu)買的所有商品放入同一個(gè)購(gòu)物籃,需要提前使用pip install Apriori安裝,之后我們使用 Apriori 包中的 dataconvert 函數(shù),下面是需要傳入的參數(shù)解釋
注意:需要注意傳入的參數(shù)類型,只要對(duì)了,直接套用就不是什么難事
import Apriori as apri # 需要稍微等待一下 baskets = apri.dataconvert(arulesdata=df, tidvar='OrderNumber', itemvar='Model', data_type='inverted') # 返回的購(gòu)物籃是一個(gè)大列表,大列表中的每一個(gè)小列表表示一個(gè)籃子 # 購(gòu)物籃個(gè)數(shù)剛好等于數(shù)據(jù)集中的客戶數(shù)量 type(baskets), len(baskets) == df['OrderNumber'].nunique() # (list, True)
現(xiàn)在查看前五個(gè)購(gòu)物籃中的物品
現(xiàn)在生成關(guān)聯(lián)規(guī)則,根據(jù)排列組合,可知這些交易將會(huì)產(chǎn)生 21255×21254÷2 這么多個(gè)關(guān)聯(lián)規(guī)則。首先就要滿足支持度的要求,太小則直接被刪去,支持度的大小可根據(jù)關(guān)聯(lián)規(guī)則的多少調(diào)整 如果關(guān)聯(lián)規(guī)則很少,可根據(jù)實(shí)際情況放寬支持度的要求。相關(guān)參數(shù)說明:
這里,minSupport 或 minConf 設(shè)定越低,產(chǎn)生的規(guī)則越多,計(jì)算量也就越大
結(jié)果說明: 以 result 第一行為例
現(xiàn)在我們篩選互補(bǔ)品和互斥品,代碼如下
# 互補(bǔ)品 # lift 提升度首先要大于1,然后再排序選擇自己希望深究的前 n 個(gè) hubu = result[result['lift'] > 1].sort_values(by='lift', ascending=False).head(20) # 互斥品 huchi = result[result['lift'] < 1].sort_values(by='lift', ascending=True).head(20) hubu.head(5) # 結(jié)果也合情合理
對(duì)結(jié)果簡(jiǎn)單分析一些,不要期望每個(gè)規(guī)則都有意義,要結(jié)合業(yè)務(wù)思考,比如競(jìng)速型賽道自行車與運(yùn)動(dòng)水壺互斥實(shí)屬正常,競(jìng)速講究輕量化,還配個(gè)水壺干什么... 比如山地車配一個(gè)競(jìng)速公路車用的運(yùn)動(dòng)型頭盔...互斥產(chǎn)品則是成對(duì)出現(xiàn)的!
需要結(jié)合業(yè)務(wù)需求
# 注意數(shù)據(jù)類型,frozenset,需要拆一下 result['lhs'][1], type(result['lhs'][1]) # (frozenset({'山地車內(nèi)胎'}), frozenset)
以獲得最高的營(yíng)銷相應(yīng)率為目標(biāo)
如果一個(gè)新客戶剛剛下單了山地車英騎這個(gè)產(chǎn)品,如果希望獲得最高的營(yíng)銷響應(yīng)率,那在他付費(fèi)成功頁(yè)面上最應(yīng)該推薦什么產(chǎn)品?
目標(biāo):獲得最高的營(yíng)銷響應(yīng)率
以最大化總體銷售額為目標(biāo)
如果一個(gè)新客戶剛下單了山地英騎這個(gè)產(chǎn)品,如果希望最大化提升總體的銷售額,那么在他付費(fèi)成功的頁(yè)面上應(yīng)該推薦什么產(chǎn)品?
目標(biāo):最大化銷售額
再次重申提升度通俗含義:提升度是相對(duì)于自然而然購(gòu)買而言,A對(duì)B的提升度為4.0的理解如下:向購(gòu)買了A的用戶推薦B,則該用戶購(gòu)買B的概率是該用戶單獨(dú)(即自然而然的購(gòu)買)購(gòu)買B的概率的 400% 向購(gòu)買了A的用戶推薦B,則該用戶購(gòu)買B的概率比該用戶單獨(dú)(即自然而然的購(gòu)買)購(gòu)買B的概率高300%!
用戶并未產(chǎn)生消費(fèi),為其推薦某樣商品
最后總結(jié)一下,基于關(guān)聯(lián)規(guī)則的 Apriori 算法是智能推薦領(lǐng)域十分經(jīng)典的應(yīng)用之一,簡(jiǎn)單易上手。其實(shí)推薦領(lǐng)域的難點(diǎn)不一定在于算法,而在于過大的客戶量與其產(chǎn)生的數(shù)據(jù),所以一般到了最后用的都是混合推薦。至于更深層次的序貫?zāi)P团c協(xié)同過濾,幾乎沒有人使用 Python 或 R 來實(shí)現(xiàn),大部分都是使用分布式框架如 Spark,后續(xù)也會(huì)推出相關(guān)文章。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03