基于RFM和决策树模型构建专家推荐系统。融合了RFM模型和决策树模型,结合专业运营人员的业务经营,发掘潜在用户,进行推荐营销召回。
选择了非常弱的分类器决策树,参考传统的RFM模型,进行用户推荐。
pip install -r requirements.txt
python recommender.py
数据清洗:对文本型数据、数值型数据、时间型数据和确实数据进行清洗,一致性检查和业务逻辑检查。
特征选择:相关性和重要性计算。
基于到期时间的推荐:依次推荐给快到期用户续费使用;
基于效用的推荐:开票量、开票金额和登录使用次数都是构成效用的重要指标;
基于RFM用户价值模型的推荐:对消费金额和消费频次高的用户适时产生推荐;
混合推荐:现实应用中,其实很少有直接用某种算法来做推荐的系统。通过给不同算法的结果加权重来综合结果, 或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。
决策树:不确定性的计算采用的是基尼系数,之前已经计算过累计重要性,所以这里就不剪枝。
RFM模型:通过不断调整权重,运营人员认为如下公式比较符合预期。computeTotalScore。
def computeTotalScore(scoreDic):
'''
根据用户对所有商品的打分
:param scoreDic:每个用户对所有商品的评级
:return:对产品的打分
index = ["times-wp","je-wp","recently-wp","times-bqt","je-bqt","recently-bqt","times-bft","je-bft","recently-bft","dayLoginTimes",
"zczb","industry","ages","dayInvoiceNum","dayInvoiceJe"]
'''
if len(scoreDic) <1:raise Exception('scoreDic is none')
if scoreDic.get('dayLoginTimes') == None:scoreDic['dayLoginTimes'] = 0
score_common = scoreDic['registeredCapital'] * 10 + scoreDic['dayCountAvg'] * 30 + scoreDic['loginFrequency'] * 30 + \
scoreDic['daySumAvg'] * 30 + scoreDic['dateOfEstablishment'] * 10 + scoreDic['industry'] * 10
if scoreDic['deadline']==5: bft = 200 + (scoreDic['userConsumeTotalAmount'] + scoreDic['userConsumeTotalTimes'])* 50
else:bft = 0
if scoreDic['recently_bqt']==5: bqt = 100 + (scoreDic['je_bqt'] + scoreDic['times_bqt'])* 50
else:bqt = 0
if scoreDic['deadline_wp']==5: wp = 100 + (scoreDic['je_wp'] + scoreDic['times_wp'])* 50
else:wp = 0
score = bft + bqt + wp + score_common
return score
1、加大力度对用户数据的采集;
2、根据最近几次推荐的反馈结果,对模型进行优化;
3、搭建实时的用户推荐系统,后期我会陆续更新基于Mahout的推荐系统代码。