最近在做落地页优化的项目,整理一下,最近的工作。欢迎大家批评指正!
对于不同的人从百度搜索关键词,点击跳转后,系统因能够根据不同人的特征,跳转到不同的页面,以提高商品的转化率。
由于平台的特殊性,我这部分工作是要是对用户浏览的URL进行分类,来判断用户的喜好。这部分工作主要是通过站内爬虫,爬取所有能够访问到的url,由于日志里只记录了服务器response的url,所以需要用requests.get(visitUrl).url得到反馈的url,另外由于url中的“#”只是标识页面的位置,需要去除,再去重。许多url是通过ajax动态生成的,需要selenium.webdriver这个包来模拟浏览器的渲染,关于破解登录问题,使用的是手动登录后,用程序解析保存在本地的cookie,这样爬虫就可以访问登录后的页面,非常有规则性的url是通过正则表达式进行cover,无规则型的url则是通过hash加快索引,会用到hadoop平台,以后再讲。关于url分类表记录了,用户输入的url,服务器反馈的url,该url父级url,正则表达式,是否需要登录才能访问,一级类别,二级类别等。
IP定位问题用的是python的17Mon包,覆盖率93%以上,useragent同样使用python的user-agents包,可以提取的特征为:浏览器家族、浏览器版本、操作系统及其版本、设备(移动设备家族),是否是手机,是否是平板,是否是电脑,是否是爬虫。(老大讲微软曾经直接拿useragent做hash定位到人,不知到怎么做特征的)
文本变量的分析:
每一个用户是通过不同的渠道(tid)、广告位(sid)、关键词(kw)来到站内的,渠道和广告位本身是文本的分类型变量,这里通过woe计算tid和sid的分类型变量对落地页(因变量)的影响,另外,还对tid、sid和kw进行分词后计算影响。
利用jiebaR对文本进行分词,吐嘲一下tm包中文支持的太烂了。接下来就是重头:利用woe评价每个变量对因变量的影响。
woe原本是风控模型里常用的评价指标,用来计算特征对二分类变量的预测能力,woe的相关知识可以看着里:
1、http://blog.csdn.net/goodhuajun/article/details/39582761
2、http://www.r-bloggers.com/r-credit-scoring-woe-information-value-in-woe-package/
3、http://bryannotes.blogspot.com/2014/10/r-woeiv.html
他和Entropy、gini系数一样。但是可以通过woe计算特征的IV,关于IV有阀值,可以直接判定该变量的预测能力。请参考:
http://ucanalytics.com/blogs/information-value-and-weight-of-evidencebanking-case/
如下:
Information Value | Predictive Power |
< 0.02 | useless for prediction |
0.02 to 0.1 | Weak predictor |
0.1 to 0.3 | Medium predictor |
0.3 to 0.5 | Strong predictor |
>0.5 | Suspicious or too good to be true |
由于我们这里的落地页优化是多分类型,所以将多分类转换成二分类,比如这里的N分类将转换成N个二分类,对于每一个特征变量,我们可以计算这个特征变量对N个二分类的影响,所以可以生成一张N*M的一个information value的二维表,M=特征变量数目。这样特征的预测能力就一目了然啦。
PS:随机森林也可以计算变量的预测能力,代码如下:
rf <- randomForest(extractFeatures(train), train$count, ntree=100, importance=TRUE)
imp <- importance(rf, type=1)
featureImportance <- data.frame(Feature=row.names(imp), Importance=imp[,1]);
p <- ggplot(featureImportance, aes(x=reorder(Feature, Importance), y=Importance)) +
geom_bar(stat="identity", fill="#53cfff") +
coord_flip() +
theme_light(base_size=20) +
xlab("Importance") +
ylab("") +
ggtitle("Random Forest Feature Importance\n") +
theme(plot.title=element_text(size=18))
ggsave("2_feature_importance.png", p)
参考:https://www.kaggle.com/benhamner/bike-sharing-demand/random-forest-benchmark
后面有东西接着讲~