应用:商品需求预估

摘要:想要更好的改变用户体验,非常重要的点在于在用户交易过程前,提前预测到用户的需求,做到“口未开,物先呈”

明确需求

1.用户会是哪些人?

假设现在有这么一个人,23岁,一线城市白领,常常出入城市CBD,之前没有任何的平台行为,刚刚注册app,那么他会买什么?

我们的用户

接下来,我们通过用户仅有的一些特征做一些角色分析:

(1)23岁+一线城市,这意味着他90%的可能以上是单身,90后且极有可能刚毕业不久,同时又在一线城市,属于中低收入但是中高开支。所以,可以排除该用户属于大家电、女性用品、奢侈品、旅游用品、理财等需求

(2)常常出入CBD,城市中心,这说明有稳定工作,稳定收入(虽然不多),饮食可能不规律,同时可能私人时间较少。所以,一定程度上可能用户对休闲夸张的服饰需求较少,对便携式的健身器材、速食品存在潜在的可能

(3)从未用过app,是app的新用户,根据app的定位,易购因为便利的物流体验,多吸引大家电、电子产品的目标用户,结合1、2两条,可能用户这次注册的可能需求是手机或者电脑这些电子产品较大

以上的过程其实是通过用户的特征画像对用户进行刻画,也就是特征筛选,从性别,年龄,角色等一些特征来划分群体,结合对应群体的购买行为,推荐群体契合度高的商品。


2.用户会买或者考虑买什么?

选择.png

这种过程也就是数据挖掘过程中的特征准备,根据历史经验看来,诸如:搜索、浏览、历史订单等,再加上用户的近期行为,我们可以得到几个方向:

物品喜好:一个月前他想买什么,近几天他想买什么样的东西,我们都有个大概的范围

风格喜好:有个大概的范围,分析用户的相应行为,比如对应的手机的话,可能带了一些关键词,简约,白色等等这些,所以我们不妨试试iphone或者锤子

价值喜好:到底是iphone或者是锤子,通过当前手机型号比如安卓旗舰机器,可能用户对ip好呢的需求会大一些,若是安卓千元款,用户可能更偏向一些相对廉价的手机

其实这样的过程,可以总结为:f(x)= R(a1*x1)+...,通过用户的行为x,用户行为的对需求结果的价值a,需求时效性R,综合判断出此刻,这个用户对各类产品的需求程度。

除此之外,有一些决定性因素,需要单独考虑:

a.商品周期性,假设用户最有可能购买的是冰箱,但是这个用户1周之前刚买了冰箱,那你此刻再给他推送冰箱,他购买的可能性几乎为0;而要是把冰箱换作是零食或者水,结果往往截然相反

b.商品合理性,夏天买取暖器,冬天买花露水等行为不是不可能发生,但是它发生的可能性要远远小于可接受的可信值,所以一定程度上,避免发生这种情况

其实这样的过程,可以总结为:g(x)=w' * f(x),通过w'压缩用户需求可能性f(x)变化区间在[0,1]上

3.那么如何实现呢?

现在,我们通过R语言实现一次简单的用户需求预测:

a.首先,我们对若干数据进行清洗,干掉不合理的异常值、缺失值、规范化数值特征等

读取历史上购买目标商品的用户(label=1)与未购买的用户(label=0)的特征数据 data_base<-read.table('supermarket_second_dried_milk_train_another.txt',header=T) 数据备份 train_data<-data_base 将是否老用户、是否目标类目下的老用户0-1化,将是否变成机器可读的语言 train_data$status<-as.factor(train_data$status) train_data$aimed_status<-as.factor(train_data$aimed_status) 根据特征量级,切分特征组

data00<-subset(data_all,select = c(max_date_diff,aimed_max_date_diff))
data01<-subset(data_all,select = c(max_pay,per_pay,six_month_max_pay,six_month_per_pay...)
data02<-subset(data_all,select = c(cnt_time,six_month_cnt_time,three_month_cnt_time,...)
data03<-subset(data_all,select = c(pv_visit_last_period,search_last_period,...)

箱式理论,压缩特征范围

data_action00<-function(x){
        x<-as.numeric(as.character(x))
        y<-quantile(x,0.98,na.rm = T)
        x[x>y]<-y
        x[is.na(x)]<-max(x[!is.na(x)&x>0])
        x[x<0]<-max(x[!is.na(x)&x>0])
        return(x)
}

for(i in 1:ncol(data00)){
        data00[,i]<-data_action00(data00[,i])
}```
*整理后的数据合并*

data_new<-cbind(date=train_dataaimed_date,label=train_datalabel,status=train_datastatus,aimed_status=train_dataaimed_status,data00,data01,data02,data03)

`data_action01`、`data_action02`、`data_action03`同理,此处的p值,根据业务实际选取,压缩p值以上的离群点
这边建议参考:
[[数据预处理-缺失值处理](http://www.jianshu.com/p/5d883a293730)](http://www.jianshu.com/p/5d883a293730)
[数据预处理-异常值处理](http://www.jianshu.com/p/b490ac402fe6)
****
通过table函数,我们发现,
![](http://upload-images.jianshu.io/upload_images/1129359-0f266d7c55f8d5ef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
用户数据数据极度不均匀,未购买的用户数量级:购买用户的数量级:未购买用户的数量级=33:1
关于数据预测中,数量级极度不平衡的处理方式通过交叉抽样的方法,及随机有放回抽取label=0、1的用户数据,组成新数据集

library(ROSE) data_balanced_both <- ovun.sample(label ~ ., data = data_new, method = "both",p=0.3,N = 8*nrow(data_new[data_newlabel==1,]),seed = 1)data```

这边method=‘both’为双向采样,‘under’为欠采样,通常为常见采样方法。p=0.3为label=1的采样结果占比,N为总采样用户数据量 接下来在通过lasso压缩特征个数:

library(glmnet)
y<-data_balanced_both$label
x<-data_balanced_both[,5:ncol(data_balanced_both)]
x<-as.matrix(x)
las1 <- glmnet(x,y, family = "binomial", alpha = 1)
las1.cv <- cv.glmnet(x = x, y = y, family = "binomial", alpha = 1, nfold = 10)
las1.1se <- glmnet(x = x, y = y, family = "binomial", alpha = 1, lambda = las1.cv$lambda.1se)```

我们,先看下las1.cv中,随着lambda变化,损失函数变化情况:
![](http://upload-images.jianshu.io/upload_images/1129359-bc4008a23efad142.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

可以看到,`log(lambda)`在-6与-7之间时,为损失函数可接受范围内,惩罚力度较大的参数值,再通过`coef(las1.1se)`观察如下:

![](http://upload-images.jianshu.io/upload_images/1129359-709c4d28e3488406.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

再删除被lasso剔除掉的变量,诸如six_month_per_pay等,得到新的数据集:
`data_balanced_both_new_one<-subset(data_balanced_both,select=-c(six_month_per_pay,...)`

再通过logistic模型计算用户的下单概率,并通过逐步回归剔除不显著的变量:

model<-glm(label~.,data = data_balanced_both_new_one[,-1],family = binomial(link='logit')) step(model)```

保证得到的变量系数均显著,每个变量存在均有意义 最后得到的model即为目标函数R(x)

在通过sigmod变形即可得到f(x),再考虑最初我们提到的商品周期性、商品合理性的g(x)压缩,这边最简单的就是:

当用户触发商品周期性或商品合理性原则的时候采取第二个公式,否则第一个公式

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

一名合格的机器学习工程师需要具备的5项基本技能,你都get了吗?

你是否对机器学习充满兴趣呢?其实到目前为止,每天有越来越多的工程师开始将好奇的目光转向机器学习领域。实际上,你会发现现在没有哪一个领域比机器学习能引起更多的曝...

43290
来自专栏数据科学与人工智能

机器学习与数据科学

计算技术通常用来分析数据,而理解数据则依赖于机器学习。多年来,对于大多数开发者来说,机器学习却是非常遥远、一直是难以企及的。 这可能是现在收益最高,也是最受欢...

282100
来自专栏灯塔大数据

预测分析|机器学习是如何预测《权利的游戏》中的叛徒

几个月之前,Airbnb发布了一篇博文,在这篇文章中作者向读者介绍了他们的数据科学家建立一个机器学习模型来保护自己的用户免遭来自恶意行为的欺诈危害。如果我们将具...

39050
来自专栏AI科技大本营的专栏

DeepMind 研发出类脑 AI 神经元,具备超强空间导航能力

Google 旗下人工智能公司 DeepMind 的研究人员最近在《自然》杂志上发表论文,宣布同伦敦大学学院的神经生理学家合作,研发出了能够模拟哺乳动物大脑中网...

13810
来自专栏机器人网

入门指南:为期一周的机器学习

在门外汉看来,机器学习(Machine Learing,ML)入门是个不可完成的任务。 如果你选错了方向,确实就是不可能的了。 然而,在我学习机器学习的基本知识...

35660
来自专栏CDA数据分析师

一名合格的机器学习工程师需要具备的5项基本技能,你都get了吗?

你是否对机器学习充满兴趣呢?其实到目前为止,每天有越来越多的工程师开始将好奇的目光转向机器学习领域。实际上,你会发现现在没有哪一个领域比机器学习能引起更多的曝光...

20890
来自专栏人工智能快报

IBM正在研制通用型深度学习芯片

深度学习领域仍在不断发展,特别地,专家们认识到如果芯片能够使用低精度的计算方式得出近似答案,神经网络就可以用很少的资源完成大量的计算。这在移动设备和其他功率受限...

12620
来自专栏CDA数据分析师

CDA三级数据科学家精英计划究竟讲些什么内容?

在大数据和机器学习的时代,有一种职业脱颖而出——数据科学家。数据科学家在近年来备受追捧,也有越来越多的人想投身数据科学领域。

23540
来自专栏新智元

【春节最强AI游记】最全一手讲者报告实录+BATJ等企业展位,360度带你重温AAAI

新智元专栏 作者:张祥文 编辑:小奇 【新智元导读】厦大学子以一篇图文并茂的游记,带你重温今年的AAAI:详细介绍数场重磅讲者报告、亚马逊及阿里巴巴等提...

37380
来自专栏人工智能头条

贾扬清:希望Caffe成为深度学习领域的Hadoop

41640

扫码关注云+社区

领取腾讯云代金券