精準營銷與使用者畫像
什麼是精準營銷?
精準營銷依託現代資訊科技手段,在精準定位的基礎上建立個性化的顧客溝通服務體系,最終實現可度量的、低成本的可擴張之路。精準營銷相對於一般的網路營銷,更加註重精準、可衡量和高投資回報。。
精準營銷的優勢是什麼?
1、可量化。傳統的營銷定位具有侷限性,依靠現代資訊科技精確定位市場的精準營銷,可量化營銷的結果,所以比一般的網路營銷效果更好;
2、可度量、可調控。傳統的廣告溝通成本高,企業想要通過低成本達到快速增長根本不可能,精準營銷藉助的是資料庫技術、網路通訊技術及現代高度分散物流等手段,保障了與客戶的長期個性化溝通,使結果可度量、可調控,成本更低; 等。。。。
說白了就是通過對資料的分析對客戶進行打標籤,對不同型別的客戶做不同的有效的營銷。
用一個簡單的案例來了解!現在我們拿到一組某購物網站的客戶消費記錄表。
案例說明:
現在我們要做一個關於打折商品的營銷活動,如果你是一名營銷人員你想知道客戶的那些資訊(標籤)?
通過結果反推:我肯定想知道客戶對打折商品是否感興趣,好了已經有一個標籤了(對打折商品的興趣度)。繼續我還想知道客戶價值的高低(第二個標籤:價值度),我還想知道這個客戶是否活躍(第三個標籤:活躍度)。
好了我們現在有了這三個標籤,就可以通過這三個標籤去做不同的營銷方案。那麼,我們來探討一下怎麼通過對資料的分析來對每個客戶來打上這三個標籤
分析工具:python--Anaconda3--jupyter notebook
所用到的庫:pandan、numpy、sklearn.preprocessing、datetime
1.開啟資料檔案
import pandas as pd
import numpy as np
import os
os.chdir(r'C:\Users\code\CASE1\Python')
trad_flow = pd.read_csv(r'RFM_TRAD_FLOW.csv', encoding='gbk')
trad_flow.head(10)
2.對客戶購買的商品進行計數(結合第四部)
F=trad_flow.groupby(['cumid','type']).count() F.head() #以cumid彙總橫向顯示 F_trans=pd.pivot_table(F,index='cumid',columns='type',values='transID') F_trans.head()
2.1:缺失值處理
#缺失值處理
F_trans['Special_offer']= F_trans['Special_offer'].fillna(0)
F_trans.head()
3.對標籤的計算
3.1計算客戶對打折商品的興趣度(購買打折商品數量/購買總數)
#通過計算客戶購買特價商品數量佔總商品數量的比率,得出客戶對打折商品感興趣的程度--特價/(特價+正常)---因為贈送是不要錢的所以不考慮。
F_trans["interest"]=F_trans['Special_offer']/(F_trans['Special_offer']+F_trans['Normal'])
F_trans.head()
3.2.計算客戶價值
#通過計算M反應客戶的價值資訊
M=trad_flow.groupby(['cumid','type'])[['amount']].sum()
M.head()
#通過對所有型別的商品的購買金額進行彙總得出客戶價值的高低,並生成新的標籤-value
M_trans=pd.pivot_table(M,index='cumid',columns='type',values='amount')
M_trans['Special_offer']= M_trans['Special_offer'].fillna(0)
M_trans['returned_goods']= M_trans['returned_goods'].fillna(0)
M_trans["value"]=M_trans['Normal']+M_trans['Special_offer']+M_trans['returned_goods']
M_trans.head()
3.3.計算客戶是沉默或活躍(將時間日期轉換為時間戳)
# # In[8] 定義一個從文字轉化為時間的函式
#time.strptime將時間字串轉換為struct_time時間物件,time.mktime將struct_time物件例項轉換成時間戳
# (時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。)
#秒數越小說明距離上一次購買時間越長---沉默。反之亦然
from datetime import datetime
import time
def to_time(t):
out_t=time.mktime(time.strptime(t, '%d%b%y:%H:%M:%S')) ########此處修改為時間戳方便後面qcut函式分箱
return out_t
# a="14(日)JUN(月份的簡稱)09(年):17(時):58(分):34(秒)"
# print(to_time(a))
#將轉換時間日期的函式應用到trad_flow結構裡的time列(把一整列都轉換為時間戳,並生成行的標籤time_new)
trad_flow["time_new"]= trad_flow.time.apply(to_time)
trad_flow.head()
#以cumid、time_new列進行分組,找出比較大的(活躍)
R=trad_flow.groupby(['cumid'])[['time_new']].max()
R.head()
時間戳--從北京時間1970年01月01日08時00分00秒至今(已秒計)
4.特徵工程--特徵二值化(將所求得的三個標籤的值轉換為0,1)
對興趣度進行特徵二值化
from sklearn import preprocessing
from pandas import DataFrame,Series
import pandas as pd
#特徵工程--特徵二值化(0,1),把以上求得的標籤(是否感興趣,是否活躍,是否有價值)進行一一二值化
#等深分箱
threshold = pd.qcut(F_trans["interest"], 2, retbins=True)[1][1]
#取出一個值,用做比較
binarizer = preprocessing.Binarizer(threshold=threshold)
# F_trans['interest'].values.reshape(-1, 1),把值轉化為一列二維的陣列,進過比較返回0,1
interest_q =pd.DataFrame(binarizer.transform( F_trans['interest'].values.reshape(-1, 1)))
#新增行索引,列索引
interest_q.index=F_trans.index
interest_q.columns=["interest"]
interest_q
4.1對客戶價值(valve)進行特徵二值化
from sklearn import preprocessing
#對特徵值(valve客戶價值)進行特徵二值化
threshold = pd.qcut(M_trans["value"],2, retbins=True)[1][1]
binarizer = preprocessing.Binarizer(threshold=threshold)
value_q = pd.DataFrame(binarizer.transform(M_trans["value"].values.reshape(-1, 1)))
value_q.index=M_trans.index
value_q.columns=["value"]
value_q
4.2對客戶是否沉默(time)進行特徵二值化
#對特徵值(time客戶是否沉默)進行特徵二值化
threshold = pd.qcut(R["time_new"], 2, retbins=True)[1][1]
binarizer = preprocessing.Binarizer(threshold=threshold)
time_new_q = pd.DataFrame(binarizer.transform(R["time_new"].values.reshape(-1, 1)))
time_new_q.index=R.index
time_new_q.columns=["time"]
time_new_q
5.合併特徵值
#合併三各特徵值
analysis=pd.concat([interest_q, value_q,time_new_q], axis=1)
# In[12]
#analysis['rank']=analysis.interest_q+analysis.interest_q
analysis = analysis[['interest','value','time']]
analysis.head()
10001-----1.0--1.0--1.0 (有興趣-高價值-活躍)
轉化營銷人員看的懂的形式,並儲存。。。
label = {
(0,0,0):'無興趣-低價值-沉默',
(1,0,0):'有興趣-低價值-沉默',
(1,0,1):'有興趣-低價值-活躍',
(0,0,1):'無興趣-低價值-活躍',
(0,1,0):'無興趣-高價值-沉默',
(1,1,0):'有興趣-高價值-沉默',
(1,1,1):'有興趣-高價值-活躍',
(0,1,1):'無興趣-高價值-活躍'
}
analysis['label'] = analysis[['interest','value','time']].apply(lambda x: label[(x[0],x[1],x[2])], axis = 1)
analysis.head()
# DataFrame.to_csv()
一個簡單的小案例,通過資料對客戶進行畫像然後針對不同標籤的客戶進行不同的有效的營銷。是否感受到了資料科學的魅力-……-。