OGeek CTR预估
特征工程:将所有数据拼接到一起做特征,等到处理完,再按索引拆分数据
1.数据分析
查看标签分布:发现valid与testa、testb的分布相似,说明valid与testa的查询时间比较接近,作为验证集线下比较可信.
2.修正数据类型、缺失值
修正空的query_prediction为'{}';
将label改为int,因为后面要求和
对query_prediction做编码LabelEncoder() --diction_label
去除重复非统计量特征label
解析query_prediction字典:
将字典的字符串转换成浮点数 --query_prediction
得到概率最大对应的预测值 --max_query_prediction_keys
取出字典的keys和values --query_prediction_keys、query_prediction_values
解析prefix、title、query:
对prefix分词 --prefix_jieba
对title分词 --title_jieba
对query分词 --query_jieba
文字转换成拼音:这里只需要处理用户的查询词就好了
prefix_pinyin --prefix_pinyin
去掉prefix、title中的空格,转换成大小写:
去掉prefix中的空格 -- prefix_fix
去掉title中的空格 --title_fix
去掉query中的空格 --query_fix
去掉query_prediction_keys中的空格 --query_prediction_keys_fix
length特征:
求prefix的长度 --prefix_length
求title的长度 --title_length
求max_query_prediction的长度 --max_query_prediction_keys_length
求query_prediction_values的长度 --query_prediction_values_length
nunique特征:
prefix相同,title不同的个数:prefix_nunique_title
prefix相同,tag不同的个数:prefix_nunique_tag
title相同,prefix不同的个数:title_nunique_prefix
title相同,tag不同的个数:title_nunique_tag
title相同,query不同的个数:title_nunique_query
title相同,prefix_pinyin不同的个数:title_nunique_prefix_pinyin
tag相同,prefix不同的个数:tag_nunique_prefix
tag相同,title不同的个数:tag_nunique_title
tag相同,max_query不同的个数:tag_nunique_max_query
max_query_prediction_keys相同,prefix不同的个数:query_nunique_prefix
max_query_prediction_keys相同,title不同的个数:query_nunique_title
max_query_prediction_keys相同,tag不同的个数:query_nunique_tag
max_query_prediction_keys相同,prefix_pinyin不同的个数:nunique_prefix_pinyin
prefix_pinyin相同,prefix不同的个数:prefix_pinyin_nunique_prefix
prefix_pinyin相同,title不同的个数:prefix_pinyin_nunique_title
prefix_pinyin相同,tag不同的个数:prefix_pinyin_nunique_tag
prefix_pinyin相同,query不同的个数:prefix_pinyin_nunique_query
判断prefix,tag,query是否在title中
prefix_isin_title
tag_isin_title
query_isin_title
计算prefix、title与query_prediction_keys的相似度【list】
Levenshtein.distance(str1, str2):计算编辑距离,描述由一个字符串转化成另外一个字符串最少的操作次数,包括插入、删除、替换;
Levenshtein.ratio(str1, str2):计算莱文斯坦比,计算r=(sum-ldist)/sum,sum是两个字符串长度综合,ldist是类编辑距离,跟上面的编辑距离有一点不同,2中三种操作每个操作+1,而在此处,删除、插入仍然+1,但是替换+2.
prefix_fix与query_prediction_keys的编辑距离、莱文斯坦比、最长连续子串的长度、最长公共子序列长度:
prefix_fix_query_prediction_keys_ratio_list
prefix_fix_query_prediction_keys_distance_list
prefix_fix_query_prediction_keys_lcsubstr_lens_list
prefix_fix_query_prediction_keys_lcseque_lens_list
title_fix与query_prediction_keys的编辑距离、莱文斯坦比、最长连续子串的长度、最长公共子序列长度:
title_fix_query_prediction_keys_ratio_list
title_fix_query_prediction_keys_ratio_list
title_fix_query_prediction_keys_ratio_list
title_fix_query_prediction_keys_ratio_list
prefix/title与query_prediction_keys相似度的list与query_prediction_values的乘积的list:相似度 * 概率
prefix_fix__query_prediction_values_mutiple_ratio_list
prefix_fix__query_prediction_values_mutiple_distance_list
prefix_fix__query_prediction_values_mutiple_lcsubstr_lens_list
prefix_fix__query_prediction_values_mutiple_lcseque_lens_list
title_fix__query_prediction_values_mutiple_ratio_list
title_fix__query_prediction_values_mutiple_ratio_list
title_fix__query_prediction_values_mutiple_ratio_list
title_fix__query_prediction_values_mutiple_ratio_list
计算上面计算得到的list的统计特征:max/min/mean/std
prefix_fix_query_prediction_keys_ratio_list_max/min/mean/std
prefix_fix_query_prediction_keys_distance_list_max/min/mean/std
prefix_fix_query_prediction_keys_lcsubstr_lens_list_max/min/mean/std
prefix_fix_query_prediction_keys_lcseque_lens_list_max/min/mean/std
title_fix_query_prediction_keys_ratio_list_max/min/mean/std
title_fix_query_prediction_keys_ratio_list_max/min/mean/std
title_fix_query_prediction_keys_ratio_list_max/min/mean/std
title_fix_query_prediction_keys_ratio_list_max/min/mean/std
prefix_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
prefix_fix__query_prediction_values_mutiple_distance_list_max/min/mean/std
prefix_fix__query_prediction_values_mutiple_lcsubstr_lens_list_max/min/mean/std
prefix_fix__query_prediction_values_mutiple_lcseque_lens_list_max/min/mean/std
title_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
title_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
title_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
title_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
计算prefix/title/max_query_prediction_keys两两之间的相似度:
【此处,有点问题,应该是max才对啊???】
ratio_similarity_prefix_fix_with_title_fix
distance_similarity_prefix_fix_with_title_fix
lcsubstr_lens_similarity_prefix_fix_with_title_fix
lcseque_lens_similarity_prefix_fix_with_title_fix
ratio_similarity_prefix_fix_with_query_fix
distance_similarity_prefix_fix_with_query_fix
lcsubstr_lens_similarity_prefix_fix_with_query_fix
lcseque_lens_similarity_prefix_fix_with_query_fix
ratio_similarity_title_fix_with_query_fix
distance_similarity_title_fix_with_query_fix
lcsubstr_lens_similarity_title_fix_with_query_fix
lcseque_lens_similarity_title_fix_with_query_fix
click特征
prefix/title/tag/max_query_prediction_keys相同时,click的点击次数:
prefix_click
title_click
tag_click
max_query_prediction_keys_click
二元交叉点击:
prefix、title固定,prefix的个数:prefix_title_click
prefix、tag固定,prefix的个数:prefix_tag_click
title、tag固定,title的个数:title_tag_click
title、max_query_prediction_keys固定,title的个数:title_max_query_prediction_keys_click
tag、max_query_prediction_keys固定,tag的个数:tag_max_query_prediction_keys_click
prefix、title、tag固定,prefix的个数:prefix_title_tag_click
将tag、prefix、title编码
encoder = preprocessing.LabelEncoder()
not_zip_all_data['tag'] = encoder.fit_transform(not_zip_all_data.tag)
encoder = preprocessing.LabelEncoder()
not_zip_all_data['prefix'] = encoder.fit_transform(not_zip_all_data.prefix)
encoder = preprocessing.LabelEncoder()
not_zip_all_data['title'] = encoder.fit_transform(not_zip_all_data.title)
对query_prediction做编码处理
encoder = preprocessing.LabelEncoder()
not_zip_all_data['diction_label'] = encoder.fit_transform(not_zip_all_data.query_prediction)
按prefix分组,将prefix相同的,tag不同的合并起来,成为新的特征:prefix_contains_tag
对prefix_contains_tag计算词频:得到稀疏矩阵prefix_contains_tag_matrix
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
prefix_contains_tag_matrix = cv.fit_transform(not_zip_all_data.prefix_contains_tag)
from scipy import sparse
sparse.save_npz('prefix_contains_tag.npz',prefix_contains_tag_matrix)
转换率
用来5折的思想,其中任意一折的转换率等于其他四折的转换率
prefix_convert
title_convert
tag_convert
max_query_prediction_keys_convert
prefix_pinyin_convert
prefix_fix_convert
prefix_title_convert
prefix_tag_convert
title_tag_convert
prefix_title_tag_convert
对query_prediction里面的每一个关键词做分词:query_prediction_jieba
3. 模型训练
clf = lgb.LGBMClassifier(
boosting_type = 'gbdt', num_leaves = 64, reg_alpha = 5, reg_lambda = 5,
n_estimators = 4053, objective = 'binary',
subsample = 0.7, colsample_bytree = 0.7, subsample_freq = 1,
learning_rate = 0.05, random_state = 8012, n_jobs = -1) clf.fit(train_data, labels, eval_set = [(train_data, labels)], verbose = 50)
OGeek CTR预估的更多相关文章
- 【项目】百度搜索广告CTR预估
-------倒叙查看本文. 6,用auc对测试的结果进行评估: auc代码如下: #!/usr/bin/env python import sys def auc(labels,predicted_ ...
- CTR预估评价指标介绍
1 离线指标 1.1 LogLoss 1.1.1 KL散度 logloss使用KL散度来计算.设样本的真实分布为P,预测分布为Q,则KL散度定义如下: 这里可以通俗地把KL散度理解为相同事件空间里两个 ...
- 【项目】搜索广告CTR预估(二)
项目介绍 给定查询和用户信息后预测广告点击率 搜索广告是近年来互联网的主流营收来源之一.在搜索广告背后,一个关键技术就是点击率预测-----pCTR(predict the click-through ...
- 【项目】搜索广告CTR预估(一)
本文介绍CTR相关基础知识. 一.广告投放系统 广告系统包含多个子系统.除了上图所示的广告投放系统外,还包含商业系统(广告库的获得),统计系统(点击展示日志的获得)等. 广告投放系统主要是面向用户的, ...
- 广告点击率 CTR预估中GBDT与LR融合方案
http://www.cbdio.com/BigData/2015-08/27/content_3750170.htm 1.背景 CTR预估,广告点击率(Click-Through Rate Pred ...
- CTR预估中的贝叶斯平滑方法及其代码实现
1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad) ...
- CTR预估中的贝叶斯平滑方法(二)参数估计和代码实现
1. 前言 前面博客介绍了CTR预估中的贝叶斯平滑方法的原理http://www.cnblogs.com/bentuwuying/p/6389222.html. 这篇博客主要是介绍如何对贝叶斯平滑的参 ...
- 为什么要用深度学习来做个性化推荐 CTR 预估
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...
- 微软的一篇ctr预估的论文:Web-Scale Bayesian Click-Through Rate Prediction for Sponsored Search Advertising in Microsoft’s Bing Search Engine。
周末看了一下这篇论文,觉得挺难的,后来想想是ICML的论文,也就明白为什么了. 先简单记录下来,以后会继续添加内容. 主要参考了论文Web-Scale Bayesian Click-Through R ...
随机推荐
- -----------MSSQL生成流水号-----------------------
--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号.--得到新编号的函数CREATE FUNCTION f_NextBH()RETURNS char(8)ASBEGIN RETURN( ...
- 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂
洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...
- SQLServer 索引重建
SQL Server 索引重建脚本 在数据的使用过程中,由于索引page碎片过多,带来一些不利的性能问题,我们有时候需要对数据库中的索引进行重组或者重建工作.通常这个阈值为30%,大于30%我们建议进 ...
- linux:基本指令mkdir, rmdir 和rm
mkdir 建立文件夹 mkdir (make directory) 就是创建一个文件夹的意思, 使用起来很简单. 1.新建一个目录: $ mkdir folder2 如果你想在这个目录给 folde ...
- iOS程序main函数之前发生了什么
我是前言 一个iOS app的main()函数位于main.m中,这是我们熟知的程序入口.但对objc了解更多之后发现,程序在进入我们的main函数前已经执行了很多代码,比如熟知的+ load方法等. ...
- [knowledge][lisp] lisp与AI
https://blog.youxu.info/2009/08/31/lisp-and-ai-1/ https://blog.youxu.info/2010/02/10/lisp-and-ai-2/
- Flink - ShipStrategyType
对于DataStream,可以选择如下的Strategy, /** * Sets the partitioning of the {@link DataStream} so that the ou ...
- day4_修改文件
修改文件有两种方式:一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容:第二种是把修改后的文件内容写到一个新的文件中 第一种:一次性把文件全部读到,读到内存这个能,这种文件小 ...
- jetty各个版本对应的jdk版本
1:jetty各个版本信息 版本号 发布及维护年份 托管平台 JVM版本 支持的协议 servlet版本 JSP版本 目前状态 9.3 2015 Eclipse 1.8 HTTP/1.1 (RFC 7 ...
- Mybatis中dao接口和mapper 的加载过程
这里考虑的是mybatis和spring整合的场景 1.在系统启动的时候,会去执行配置文件中有关扫描mybatis接口的配置:通过MapperScannerConfigurer扫描接口生成spring ...