特征工程:将所有数据拼接到一起做特征,等到处理完,再按索引拆分数据

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预估的更多相关文章

  1. 【项目】百度搜索广告CTR预估

    -------倒叙查看本文. 6,用auc对测试的结果进行评估: auc代码如下: #!/usr/bin/env python import sys def auc(labels,predicted_ ...

  2. CTR预估评价指标介绍

    1 离线指标 1.1 LogLoss 1.1.1 KL散度 logloss使用KL散度来计算.设样本的真实分布为P,预测分布为Q,则KL散度定义如下: 这里可以通俗地把KL散度理解为相同事件空间里两个 ...

  3. 【项目】搜索广告CTR预估(二)

    项目介绍 给定查询和用户信息后预测广告点击率 搜索广告是近年来互联网的主流营收来源之一.在搜索广告背后,一个关键技术就是点击率预测-----pCTR(predict the click-through ...

  4. 【项目】搜索广告CTR预估(一)

    本文介绍CTR相关基础知识. 一.广告投放系统 广告系统包含多个子系统.除了上图所示的广告投放系统外,还包含商业系统(广告库的获得),统计系统(点击展示日志的获得)等. 广告投放系统主要是面向用户的, ...

  5. 广告点击率 CTR预估中GBDT与LR融合方案

    http://www.cbdio.com/BigData/2015-08/27/content_3750170.htm 1.背景 CTR预估,广告点击率(Click-Through Rate Pred ...

  6. CTR预估中的贝叶斯平滑方法及其代码实现

    1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad)   ...

  7. CTR预估中的贝叶斯平滑方法(二)参数估计和代码实现

    1. 前言 前面博客介绍了CTR预估中的贝叶斯平滑方法的原理http://www.cnblogs.com/bentuwuying/p/6389222.html. 这篇博客主要是介绍如何对贝叶斯平滑的参 ...

  8. 为什么要用深度学习来做个性化推荐 CTR 预估

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...

  9. 微软的一篇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 ...

随机推荐

  1. [No000016F]高并发下线程安全的单例模式(最全最经典)

    在所有的设计模式中,单例模式是我们在项目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单 ...

  2. tensorflow使用pb文件进行模型预测

  3. hbase与sqoop的集成

    1.sqoop抽取mysql表到hbase中 export HBASE_HOME=/opt/cdh-5.3.6/hbase-0.98.6-cdh5.3.6 export HADOOP_HOME=/op ...

  4. Nginx配置跨域请求 Access-Control-Allow-Origin *

    当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is present on the requested resource,需要给Nginx服 ...

  5. Java8 in action

    解决的问题: behavior parameterization,即可以把一段code,逻辑作为参数传入: 这样做的目的,当然为了代码抽象和重用,把变化的逻辑抽象出去: 在java中,如果要实现beh ...

  6. Apache Common Math Stat

    http://commons.apache.org/proper/commons-math/userguide/stat.html mark   DescriptiveStatistics maint ...

  7. es基本查询相关的

    一.获取索引的mapping GET linewell_assets_mgt_es/lw_devices/_mapping

  8. Bloom Filter 数据结构去重

    Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合. Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于 ...

  9. 浏览器数据库 IndexedDB 入门教程

    一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...

  10. 深入理解为什么应该使用transform来替代top

    话说,这个问题我们得从浏览器得渲染机制说起: 我们先来理解一下 重绘(Repainit)和 回流(Reflow): 重绘:当节点需要更改外观而不会影响布局得,比如改变 color 就称为重绘: 回流: ...